Run it
Copy the script and paste it into your executor.
_setIdent
names = { , , ,
, }
_, n (names)
f = ((), n)
(f) == _setIdent = f;
()
_setIdent
(_setIdent, )
(_setIdent, )
(_setIdent, )
()
_firesignal = ((), ) firesignal
_getconnections = ((), ) getconnections
(sig, ...)
(_firesignal) ==
(_firesignal, sig, ...)
(_getconnections) ==
ok, conns = (_getconnections, sig)
ok (conns) ==
_, conn (conns)
(conn.Fire) ==
(conn.Fire, conn, ...)
(conn.Function) ==
(conn.Function, ...)
(btn)
(btn.MouseButton1Down, , )
(btn.MouseButton1Up, , )
(btn.MouseButton1Click)
(btn.Activated, , )
()
objects = :()
objects ,
puzzle = objects:()
puzzle ,
screen = puzzle:(, )
screen ,
sg = screen:()
sg ,
sf = sg:()
sf ,
sf
()
sf, err = ()
sf , err
b = sf:()
b ,
b
(sf)
_, d (sf:())
d.Name == d
(ff)
ff
_, d (ff:())
d:()
t = d.Text
t t ~= t ~= t
()
sf = ()
sf
_, d (sf:())
d:() (d.Name == d.Text == )
d
()
objects = :()
objects
puzzle = objects:()
puzzle
_, d (puzzle:())
(d:() d:())
d.Name ==
d
(g)
cur = g
cur cur:()
cur.Visible
cur = cur.Parent
(s)
parts, depth, cur = {}, ,
i = , #s
ch = s:(i, i)
ch == ch == ch == depth = depth + ; cur = cur .. ch
ch == ch == ch == depth = depth - ; cur = cur .. ch
ch == depth == parts[#parts + ] = cur; cur =
cur = cur .. ch
cur:() parts[#parts + ] = cur
parts
(t)
t = t:(, )
t = t:(, )
t = t:(, )
t = t:(, )
t = t:(, )
t = t:(, )
t = t:(, )
t
(text)
(text) ~= text:()
expr = (text)
hasAssign = expr:() ~=
hasEqEq = expr:() ~=
hasNeq = expr:() ~=
code
hasAssign hasEqEq hasNeq
pieces, lastVar = {},
_, p ((expr))
p = p:()
var = p:() p:()
var
pieces[#pieces + ] = .. p
lastVar = var
lastVar
code = .(pieces, ) .. .. lastVar
code = .. expr
loader = load
(loader) ~=
fn = (code)
fn
ok, res = (fn)
ok (res) ~= res ~= res
res
SHIFT_MAP = {
[]=,[]=,[]=,[]=,[]=,
[]=,[]=,[]=,[]=,[]=,
}
(text)
(text) ~=
digs = {}
i = , #text
ch = text:(i, i)
ch ~= ch ~= ch ~= ch ~=
d = SHIFT_MAP[ch]
d
digs[#digs + ] = d
#digs ==
(.(digs))
(text)
(text) ~=
sign, digits, base = text:()
digits
base = (base)
base base < base >
n = (digits, base)
n
sign == n = -n
n
CLICK_DELAY =
(entries, status)
.(entries, (a, b) a.value < b.value )
(():(#entries))
i, e (entries)
(e.btn)
(():(i, #entries, (e.value)))
.(CLICK_DELAY)
(obj)
obj
x, y = ,
(()
p, s = obj.AbsolutePosition, obj.AbsoluteSize
x = .(p.X + s.X / )
y = .(p.Y + s.Y / )
)
(obj.MouseEnter, x, y)
(obj.MouseMoved, x, y)
(obj.InputBegan)
(obj.InputChanged)
(obj)
obj
(obj.MouseLeave, , )
(c)
c.slot
(c.slot)
_, ch (c.slot:())
ch:() (ch)
(c.mtb); (c.btn)
(c)
c.slot
_, ch (c.slot:())
ch:() (ch)
(c.slot)
(c.mtb); (c.btn)
(tb)
(() tb:() )
(tb.Focused)
(tb, value)
tb.Text = (value)
(tb.FocusLost, )
(() tb:() )
(tb)
(tb.FocusLost, )
(() tb:() )
(ff, prev, timeout)
deadline = .() + (timeout )
.() < deadline
cur = (ff)
cur ~= cur ~= prev cur
.()
(ff)
(c, timeout)
deadline = .() + (timeout )
.() < deadline
c.btn.Visible c.mtb.Visible
.()
(status)
container, err = ()
container , err
list = {}
_, slot (container:())
slot:()
btn = slot:()
lbl = slot:()
btn btn.Visible ( lbl lbl.Visible)
n = (btn.Text)
n list[#list + ] = { btn = btn, value = n }
#list == ,
(list, status)
(status)
container, err = ()
container , err
list = {}
_, slot (container:())
slot:()
btn = slot:()
btn btn.Visible
v = (btn.Text)
v list[#list + ] = { btn = btn, value = v }
#list == ,
(list, status)
(status)
container, err = ()
container , err
list = {}
_, slot (container:())
slot:()
btn = slot:()
btn btn.Visible
v = (btn.Text)
v list[#list + ] = { btn = btn, value = v }
#list == ,
(list, status)
(status)
() ~= (load) ~=
,
sf, err = ()
sf , err
container = sf:()
container ,
ff = (sf)
ff ,
cells = {}
_, slot (container:())
slot:()
mtb = slot:()
btn = slot:()
mtb btn
cells[#cells + ] = { slot = slot, mtb = mtb, btn = btn }
#cells == ,
lastHovered
(c) c.mtb.Visible c.btn.Visible
()
n =
_, c (cells) (c) n = n +
n
()
lastHovered (lastHovered); lastHovered =
(sf); (sf)
.()
(c)
lastHovered lastHovered ~= c
(lastHovered)
.()
attempt = ,
attempt == ()
(c)
lastHovered = c
deadline = .() +
f =
.() < deadline
f = (ff)
f ~=
.()
f ~= f
(c)
.()
(ff)
(i, c)
(c) ,
formula = (c)
formula == ,
ans = (formula)
ans , .. formula
txt = (.(ans) == ans) .(, ans) (ans)
(():(i, #cells, formula, txt))
(c.mtb)
.()
(c.mtb, txt)
ok = (c, )
.()
ok
, ():(formula, txt)
MAX_PASSES =
solved =
lastFails = {}
pass = , MAX_PASSES
() ==
progressed =
i, c (cells)
(c)
ok, reason = (i, c)
ok
solved = solved +
progressed =
lastFails[i] =
lastFails[i] = reason
(c.mtb)
lastHovered (lastHovered); lastHovered =
()
left = ()
(()
:(pass, MAX_PASSES, solved, #cells, left))
left ==
progressed (); .() .()
lastHovered (lastHovered)
left = ()
left >
msgs = {}
i, c (cells)
(c)
msgs[#msgs + ] = ():(i, lastFails[i] )
, ()
:(left, #cells, .(msgs, ))
(():(solved, #cells))
.()
readyDeadline = .() +
.() < readyDeadline
ready =
_, c (cells)
(c.btn.Visible (c.btn.Text)) ready = ;
ready
.()
list = {}
_, c (cells)
c.btn.Visible
n = (c.btn.Text)
n list[#list + ] = { btn = c.btn, value = n }
#list ~= #cells
, ():(#list, #cells)
()
(list, status)
()
container = ()
container
hasMtb, hasShift, hasBased, hasNum = , , ,
_, slot (container:())
slot:()
mtb = slot:()
btn = slot:()
mtb mtb.Visible hasMtb =
btn btn.Visible
t = btn.Text
(t) hasShift =
(t) hasBased =
(t) hasNum =
hasMtb
hasBased
hasShift
hasNum
SOLVERS = { L1 = solveL1, L2 = solveL2, L3 = solveL3, L4 = solveL4 }
()
lp = :().LocalPlayer
lp
pg = lp:()
pg pg
h = ((), )
(h) ==
ok, r = (h)
ok r r
:()
guiParent = ()
existing = guiParent:()
existing existing:()
screenGui = .()
screenGui.Name =
screenGui.ResetOnSpawn =
screenGui.ZIndexBehavior = .ZIndexBehavior.Sibling
screenGui.IgnoreGuiInset =
screenGui.Parent = guiParent
C = {
headerBg = .(, , ),
border1 = .(, , ),
border2 = .(, , ),
panelBg = .(, , ),
titleTx = .(, , ),
btnBg = .(, , ),
btnBgHover = .(, , ),
btnBorder = .(, , ),
btnTx = .(, , ),
statusBg = .(, , ),
statusTx = .(, , ),
hideBg = .(, , ),
closeBg = .(, , ),
autoOnBg = .(, , ),
autoOffBg = .(, , ),
stopBg = .(, , ),
}
FONT = .Font.SourceSansSemibold
FONT_REG = .Font.SourceSans
W, BAR, BODYH = , ,
drag = .()
drag.Name =
drag.BackgroundColor3 = C.headerBg
drag.BorderSizePixel =
drag.Size = .(W, BAR)
drag.Position = .(, -W/, , -(BAR + BODYH)/)
drag.Active =
drag.ZIndex =
drag.Parent = screenGui
bg1 = .()
bg1.Parent = drag
bg1.BorderSizePixel =
bg1.BorderColor3 = C.border1
bg1.BackgroundColor3 = C.panelBg
bg1.Size = .(W, BODYH + )
bg1.Position = .(, )
bg1.ZIndex =
bg2 = .()
bg2.Parent = bg1
bg2.BorderSizePixel =
bg2.BorderColor3 = C.border2
bg2.BackgroundColor3 = C.panelBg
bg2.Size = .(, , , )
bg2.ZIndex =
main = .()
main.Parent = drag
main.BackgroundColor3 = C.panelBg
main.BorderSizePixel =
main.BorderColor3 = C.border2
main.Size = .(W, BODYH)
main.Position = .(, BAR)
main.ZIndex =
title = .()
title.Parent = drag
title.BackgroundTransparency =
title.Position = .(, )
title.Size = .(, -, , )
title.Font = FONT_REG
title.TextSize =
title.TextColor3 = C.titleTx
title.TextXAlignment = .TextXAlignment.Left
title.Text =
title.ZIndex =
(name, txt, color, x)
b = .()
b.Name = name
b.Parent = drag
b.AutoButtonColor =
b.BackgroundColor3 = color
b.BorderSizePixel =
b.BorderColor3 = C.btnBorder
b.Size = .(, )
b.Position = .(x, )
b.Font = FONT_REG
b.TextSize =
b.TextColor3 = C.btnTx
b.Text = txt
b.ZIndex =
b
hideBtn = (, , C.hideBg, W - - - )
closeBtn = (, , C.closeBg, W - - )
row1 = .()
row1.Parent = main
row1.BackgroundTransparency =
row1.Size = .(, , , )
row1.Position = .(, )
row1L = .(, row1)
row1L.FillDirection = .FillDirection.Horizontal
row1L.HorizontalAlignment = .HorizontalAlignment.Center
row1L.VerticalAlignment = .VerticalAlignment.Center
row1L.Padding = .(, )
row1L.SortOrder = .SortOrder.LayoutOrder
(parent, label, w, order, bg)
b = .()
b.Parent = parent
b.LayoutOrder = order
b.AutoButtonColor =
b.BackgroundColor3 = bg C.btnBg
b.BorderSizePixel =
b.BorderColor3 = C.btnBorder
b.Size = .(w, )
b.Font = FONT
b.TextSize =
b.TextColor3 = C.btnTx
b.Text = label
b
btnL1 = (row1, , , )
btnL2 = (row1, , , )
btnL3 = (row1, , , )
btnL4 = (row1, , , )
btnDetect = (row1, , , )
btnRefresh = (row1, , , )
row2 = .()
row2.Parent = main
row2.BackgroundTransparency =
row2.Size = .(, , , )
row2.Position = .(, )
row2L = .(, row2)
row2L.FillDirection = .FillDirection.Horizontal
row2L.HorizontalAlignment = .HorizontalAlignment.Center
row2L.VerticalAlignment = .VerticalAlignment.Center
row2L.Padding = .(, )
row2L.SortOrder = .SortOrder.LayoutOrder
btnAuto = (row2, , , , C.autoOffBg)
btnStop = (row2, , , , C.stopBg)
statusBox = .()
statusBox.Parent = main
statusBox.BackgroundColor3 = C.statusBg
statusBox.BorderSizePixel =
statusBox.BorderColor3 = C.btnBorder
statusBox.Size = .(, -, , )
statusBox.Position = .(, )
statusHdr = .()
statusHdr.Parent = statusBox
statusHdr.BackgroundTransparency =
statusHdr.Position = .(, )
statusHdr.Size = .(, -, , )
statusHdr.Font = FONT
statusHdr.TextSize =
statusHdr.TextColor3 = C.titleTx
statusHdr.TextXAlignment = .TextXAlignment.Left
statusHdr.Text =
statusLbl = .()
statusLbl.Parent = statusBox
statusLbl.BackgroundTransparency =
statusLbl.Position = .(, )
statusLbl.Size = .(, -, , -)
statusLbl.Font = FONT_REG
statusLbl.TextSize =
statusLbl.TextColor3 = C.statusTx
statusLbl.TextXAlignment = .TextXAlignment.Left
statusLbl.TextYAlignment = .TextYAlignment.Top
statusLbl.TextWrapped =
statusLbl.Text =
(s) statusLbl.Text = (s)
UIS = :()
dragging, dragStart, startPos
drag.InputBegan:((input)
()
input.UserInputType == .UserInputType.MouseButton1
input.UserInputType == .UserInputType.Touch
dragging =
dragStart = input.Position
startPos = drag.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
dragging =
)
)
UIS.InputChanged:((input)
dragging (input.UserInputType == .UserInputType.MouseMovement
input.UserInputType == .UserInputType.Touch)
()
delta = input.Position - dragStart
drag.Position = .(
startPos.X.Scale, startPos.X.Offset + delta.X,
startPos.Y.Scale, startPos.Y.Offset + delta.Y
)
)
closeBtn.MouseButton1Click:(() (); screenGui:() )
minimized =
hideBtn.MouseButton1Click:(()
()
minimized = minimized
minimized
main.Visible = ; bg1.Visible = ; hideBtn.Text =
main.Visible = ; bg1.Visible = ; hideBtn.Text =
)
running =
autoMode =
autoThread
(state)
state
btnAuto.Text =
btnAuto.BackgroundColor3 = C.autoOnBg
btnAuto.Text =
btnAuto.BackgroundColor3 = C.autoOffBg
(name, fn)
()
running ();
running =
(name .. )
ok, err, msg = (fn, setStatus)
running =
ok
(name .. .. (err))
err ==
(name .. .. (msg))
(name .. )
(timeout)
deadline = .() + (timeout )
.() < deadline
autoMode
pb = ()
pb (pb) pb
.()
()
(timeout)
deadline = .() + (timeout )
.() < deadline
autoMode
lvl = ()
lvl lvl
.()
()
(prevLvl, timeout)
deadline = .() + (timeout )
autoMode .() < deadline
pb = ()
pb (pb)
lvl = ()
lvl lvl ~= prevLvl , lvl
.()
()
()
lastLvl
blockedLvl, blockedUntil = ,
autoMode
pb = ()
pb (pb)
()
(pb)
()
lastLvl =
blockedLvl =
t0 = .()
autoMode .() - t0 <
pb2 = ()
(pb2 (pb2))
.()
.()
kind, newLvl = (, )
kind ==
( .. newLvl .. )
.()
lvl = ()
now = .()
isBlocked = lvl lvl == blockedLvl now < blockedUntil
lvl lvl ~= lastLvl isBlocked
()
running =
( .. lvl)
fn = SOLVERS[lvl]
ok, err, msg = (fn, setStatus)
running =
ok
( .. lvl .. .. (err))
rb = ()
rb
(rb)
()
.()
blockedLvl = lvl
blockedUntil = .() +
.()
err ==
( .. lvl .. .. (msg))
rb = ()
rb
(rb)
()
.()
blockedLvl = lvl
blockedUntil = .() +
.()
( .. lvl .. )
lastLvl = lvl
blockedLvl =
autoMode
kind, newLvl = (lvl, )
kind ==
( .. newLvl .. )
lastLvl =
kind ==
()
lastLvl =
()
lastLvl =
isBlocked
(():(lvl))
lastLvl
()
()
.()
()
btnL1.MouseButton1Click:(() (); (, solveL1) )
btnL2.MouseButton1Click:(() (); (, solveL2) )
btnL3.MouseButton1Click:(() (); (, solveL3) )
btnL4.MouseButton1Click:(() (); (, solveL4) )
btnDetect.MouseButton1Click:(()
()
lvl = ()
lvl
(lvl, SOLVERS[lvl])
()
)
btnRefresh.MouseButton1Click:(()
()
rb = ()
rb
(rb)
()
()
)
btnAuto.MouseButton1Click:(()
()
autoMode
autoMode =
()
autoMode =
()
autoThread = .(autoLoop)
)
btnStop.MouseButton1Click:(()
()
autoMode =
()
()
)
()
Auto solve Harry's puzzle sugma design skid