Run it
Copy the script and paste it into your executor.
PlaybackInputs =
PlaybackMouseLocation =
RoundDigits =
ReplayStartTime =
FrameBacktrackCount =
MinimumJSONFPS = /
BypassAntiExploit =
InputBlacklist = {
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
}
ColorCodes = {
WaitingForInput = .(,,);
Recording = .(,,);
Reading = .(,,,);
Idle = .(,,);
Frozen = .(,,);
None = .(,,);
}
Cursors = {
[] = {
Icon = ;
Size = .(,);
Offset = .(-,);
};
[] = {
Icon = ;
Size = .(,);
Offset = .(-,);
};
}
Version =
UserInputService = :()
RunService = :()
HttpService = :()
ContextActionService = :()
GuiService = :()
VirtualInputManager = :()
Player = .Players.LocalPlayer
Mouse = Player:()
random = .random
min = .min
max = .max
floor = .floor
ceil = .ceil
ReplayFileBeginning =
ReplayFileEnding =
PlayerModule = Player.PlayerScripts:()
ShiftLockBoundKeys = PlayerModule:():():()
ShiftLockEnabled =
GuiInset = GuiService:()
ExecutionTick = ()
PlaceId = .PlaceId
Character =
Humanoid =
RootPart =
DefaultGravity =
DefaultJumpPower =
DefaultWalkSpeed =
Resolution =
ConsoleMessage =
Reading =
Writing =
Saving =
AnimateDisabled =
Checkpoints = {}
RenderSteppedConnections = {}
SteppedConnections = {}
FolderPath = ..(PlaceId)
ReplayPath = FolderPath..
AHKConnectionFolderPath =
AHKConnectionRequestPath =
ReplayTable = {}
RecordingTable = {}
ReplayTableIndex =
AnimationQueue = {}
RunSpeed =
ClimbSpeed =
HumanoidStateQueue = {}
InputBeganQueue = {}
InputEndedQueue = {}
Cursor = .()
CursorIcon =
CursorSize =
CursorOffset =
Dead =
CameraCFrame = .CurrentCamera.CFrame
Pressed = {}
IgnoreGameProcessed =
Frozen =
FreezeFrame =
SeekDirection =
SeekDirectionMultiplier =
InputCodes = {
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
[] = ;
}
mouse1press = mouse1press mouse1down
mouse2press = mouse2press mouse2down
mouse1release = mouse1release mouse1up
mouse2release = mouse2release mouse2up
keypress = keypress keydown
keyrelease = keyrelease keyup
pose =
currentAnimSpeed =
MainFrame = .()
ConsoleFrame = .()
ConsoleMessageLabel = .()
ConsoleListLayout = .()
SaveToFileButton = .()
IdleButton = .()
IgnoreGameProcessedButton = .()
CurrentPlaceIdButton = .()
ReadButton = .()
SaveFileInfoLabel = .()
RecordedFramesLabel = .()
PressedKeysLabel = .()
WritingPressedKeysLabel = .()
ConnectedLabel = .()
ColorCodeFrame = .()
CommandBar = .()
GUIParent
gethui
()
RunService.RenderStepped:()
GUIParent = ()
({(() #.CoreGui:() )})[]
GUIParent = .CoreGui
GUIParent = Player:()
json
json = (()
json = { _version = }
t = ()
currentstr
lasti
(i)
() - t > MinimumJSONFPS
lasti = lasti i
i >= lasti
Type = ((currentstr) == ) ((currentstr) == )
Type
(Type....(i)....(#currentstr)..)
:().Stepped:()
t = ()
lasti = i
encode
escape_char_map = {
[ ] = ,
[ ] = ,
[ ] = ,
[ ] = ,
[ ] = ,
[ ] = ,
[ ] = ,
}
escape_char_map_inv = { [ ] = }
k, v (escape_char_map)
escape_char_map_inv[v] = k
(c)
.. (escape_char_map[c] .(, c:()))
(val)
(val, stack)
res = {}
stack = stack {}
stack[val] ()
stack[val] =
(val, ) ~= (val) ==
n =
k (val)
(k) ~=
()
n = n +
n ~= #val
()
i, v (val)
(i)
.(res, (v, stack))
stack[val] =
.. .(res, ) ..
i =
k, v (val)
i = i +
(k) ~=
()
(i)
.(res, (k, stack) .. .. (v, stack))
stack[val] =
.. .(res, ) ..
(val)
.. val:(, escape_char) ..
(val)
val ~= val val <= -.huge val >= .huge
( .. (val) .. )
.(, val)
type_func_map = {
[ ] = encode_nil,
[ ] = encode_table,
[ ] = encode_string,
[ ] = encode_number,
[ ] = ,
}
encode = (val, stack)
t = (val)
f = type_func_map[t]
f
t = ()
(val, stack)
( .. t .. )
json.(val)
currentstr = val
lasti =
( (val) )
parse
(...)
res = {}
i = , (, ...)
res[ (i, ...) ] =
res
space_chars = (, , , )
delim_chars = (, , , , , , )
escape_chars = (, , , , , , , , )
literals = (, , )
literal_map = {
[ ] = ,
[ ] = ,
[ ] = ,
}
(str, idx, set, negate)
i = idx, #str
set[str:(i, i)] ~= negate
i
#str +
(str, idx, msg)
line_count =
col_count =
i = , idx -
col_count = col_count +
str:(i, i) ==
line_count = line_count +
col_count =
( .(, msg, line_count, col_count) )
(n)
f = .floor
n <=
.(n)
n <=
.((n / ) + , n % + )
n <=
.((n / ) + , (n % / ) + , n % + )
n <=
.((n / ) + , (n % / ) + ,
(n % / ) + , n % + )
( .(, n) )
(s)
n1 = ( s:(, ), )
n2 = ( s:(, ), )
n2
((n1 - ) * + (n2 - ) + )
(n1)
(str, i)
res =
j = i +
k = j
j <= #str
x = str:(j)
x <
(str, j, )
x ==
res = res .. str:(k, j - )
j = j +
c = str:(j, j)
c ==
hex = str:(, j + )
str:(, j + )
(str, j - , )
res = res .. (hex)
j = j + #hex
escape_chars[c]
(str, j - , .. c .. )
res = res .. escape_char_map_inv[c]
k = j +
x ==
res = res .. str:(k, j - )
res, j +
j = j +
(i)
(str, i, )
(str, i)
x = (str, i, delim_chars)
s = str:(i, x - )
n = (s)
n
(str, i, .. s .. )
(i)
n, x
(str, i)
x = (str, i, delim_chars)
word = str:(i, x - )
literals[word]
(str, i, .. word .. )
(i)
literal_map[word], x
(str, i)
res = {}
n =
i = i +
x
i = (str, i, space_chars, )
str:(i, i) ==
i = i +
x, i = (str, i)
res[n] = x
n = n +
i = (str, i, space_chars, )
chr = str:(i, i)
i = i +
(i)
chr ==
chr ~= (str, i, )
res, i
(str, i)
res = {}
i = i +
key, val
i = (str, i, space_chars, )
str:(i, i) ==
i = i +
str:(i, i) ~=
(str, i, )
key, i = (str, i)
i = (str, i, space_chars, )
str:(i, i) ~=
(str, i, )
i = (str, i + , space_chars, )
val, i = (str, i)
res[key] = val
i = (str, i, space_chars, )
chr = str:(i, i)
i = i +
(i)
chr ==
chr ~= (str, i, )
res, i
char_func_map = {
[ ] = parse_string,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_number,
[ ] = parse_literal,
[ ] = parse_literal,
[ ] = parse_literal,
[ ] = parse_array,
[ ] = parse_object,
}
parse = (str, idx)
chr = str:(idx, idx)
f = char_func_map[chr]
f
(str, idx)
(str, idx, .. chr .. )
json.(str)
t = ()
currentstr = str
lasti =
(str) ~=
( .. (str))
res, idx = (str, (str, , space_chars, ))
idx = (str, idx, space_chars, )
idx <= #str
(str, idx, )
res
json
)()
RandomString
RoundNumber
Vector3ToTable
TableToVector3
CFrameToTable
TableToCFrame
RoundVector3
RoundCFrame
FindListIndex
WaitForInput
RandomString = ()
str =
_ = ,(,)
= (,)
==
str = str..string.((,))
==
str = str..string.((,))
==
str = str..string.((,))
str
RoundNumber = (Number,Digits)
Mult = ^((Digits) ,)
(Number*Mult+)/Mult
Vector3ToTable = (V3)
{V3.X,V3.Y,V3.Z}
TableToVector3 = (Table)
.((Table))
Vector2ToTable = (V2)
{V2.X,V2.Y}
TableToVector2 = (Table)
.((Table))
CFrameToTable = (CF)
{CF:()}
TableToCFrame = (Table)
.((Table))
RoundTable = (Table,Digits)
RoundedTable = {}
Index,Number (Table)
RoundedTable[Index] = (Number,Digits)
RoundedTable
FindListIndex = (Table,Search)
Index,Value (Table)
Value == Search
Index
WaitForInput = ()
KeyPressed = .()
InputBeganConnection
InputBeganConnection = UserInputService.InputBegan:((Input)
Input.UserInputType == .UserInputType.Keyboard
RunService.RenderStepped:()
KeyPressed:()
)
KeyPressed.Event:()
InputBeganConnection:()
KeyPressed:()
GUI
GUI = .()
GUI.Name = ()
.(GUI)
MainFrame.Size = .(,)
MainFrame.Parent = GUI
RecordedFramesLabel.Text =
RecordedFramesLabel.Size = .(,)
RecordedFramesLabel.Position = .(,)
RecordedFramesLabel.TextScaled =
RecordedFramesLabel.Parent = MainFrame
ColorCodeFrame.Size = .(,)
ColorCodeFrame.Position = .(,)
ColorCodeFrame.TextScaled =
ColorCodeFrame.Parent = MainFrame
SaveToFileButton.Text =
SaveToFileButton.Size = .(,)
SaveToFileButton.Position = .(,)
SaveToFileButton.TextScaled =
SaveToFileButton.Parent = MainFrame
IdleButton.Text =
IdleButton.Size = .(,)
IdleButton.Position = .(,)
IdleButton.TextScaled =
IdleButton.Parent = MainFrame
IgnoreGameProcessedButton.Text =
IgnoreGameProcessedButton.Size = .(,)
IgnoreGameProcessedButton.BackgroundColor3 = .(,,)
IgnoreGameProcessedButton.Position = .(,)
IgnoreGameProcessedButton.TextScaled =
IgnoreGameProcessedButton.Parent = MainFrame
CurrentPlaceIdButton.Text = ..(PlaceId)
CurrentPlaceIdButton.Size = .(,)
CurrentPlaceIdButton.Position = .(,)
CurrentPlaceIdButton.TextScaled =
CurrentPlaceIdButton.Parent = MainFrame
ReadButton.Text =
ReadButton.Size = .(,)
ReadButton.Position = .(,)
ReadButton.TextScaled =
ReadButton.Parent = MainFrame
SaveFileInfoLabel.Text =
SaveFileInfoLabel.Size = .(,)
SaveFileInfoLabel.Position = .(,)
SaveFileInfoLabel.TextScaled =
SaveFileInfoLabel.Parent = MainFrame
WritingPressedKeysLabel.Size = .(,)
WritingPressedKeysLabel.Position = .(,)
WritingPressedKeysLabel.TextColor3 = .(,,)
WritingPressedKeysLabel.TextScaled =
WritingPressedKeysLabel.Text =
WritingPressedKeysLabel.Parent = MainFrame
PressedKeysLabel.Size = .(,)
PressedKeysLabel.Position = .(,)
PressedKeysLabel.TextScaled =
PressedKeysLabel.Text =
PressedKeysLabel.Parent = MainFrame
ConnectedLabel.Size = .(,)
ConnectedLabel.Position = .(,)
ConnectedLabel.TextScaled =
ConnectedLabel.Text =
ConnectedLabel.TextColor3 = .(,,)
ConnectedLabel.Parent = MainFrame
ConsoleFrame.Size = .(,)
ConsoleFrame.Position = .(,)
ConsoleFrame.BackgroundColor3 = .(,,)
ConsoleFrame.Parent = MainFrame
CommandBar.Size = .(,)
CommandBar.Position = .(,)
CommandBar.BackgroundColor3 = .(,,)
CommandBar.TextColor3 = .(,,)
CommandBar.Text =
CommandBar.TextXAlignment = .TextXAlignment.Left
CommandBar.BorderSizePixel =
CommandBar.Parent = MainFrame
ConsoleListLayout.SortOrder = .SortOrder.LayoutOrder
ConsoleListLayout.FillDirection = .FillDirection.Vertical
ConsoleListLayout.VerticalAlignment = .VerticalAlignment.Bottom
ConsoleListLayout.Parent = ConsoleFrame
Dragify
SetColorCodeFrame
GetColorCodeFrame
ConsoleMessage = (...)
Args = {}
Children = ConsoleFrame:()
#Children >
LowestLayoutOrder = {
Label = ;
LayoutOrder = .huge;
}
_,v (Children)
v:()
v.LayoutOrder < LowestLayoutOrder.LayoutOrder
LowestLayoutOrder.Label = v
LowestLayoutOrder.LayoutOrder = v.LayoutOrder
LowestLayoutOrder.Label
LowestLayoutOrder.Label:()
Children = ConsoleFrame:()
Index,Value ({...})
Args[Index] = (Value)
Message = .(Args,)
Label = ConsoleMessageLabel:()
Label.Size = .(,)
Label.TextSize =
Label.Font = .Font.Code
Label.BackgroundTransparency =
Label.TextColor3 = .(,,)
Label.TextXAlignment = .TextXAlignment.Left
Label.Text = ..Message
Label.LayoutOrder = -+#Children
Label.Parent = ConsoleFrame
()
Dragify = (Frame)
dragToggle,dragStart,dragInput,dragPos,startPos
dragSpeed =
(input)
Delta = input.Position - dragStart
Frame.Position = .(startPos.X.Scale, startPos.X.Offset + Delta.X, startPos.Y.Scale, startPos.Y.Offset + Delta.Y)
Frame.InputBegan:((input)
(input.UserInputType == .UserInputType.MouseButton1 input.UserInputType == .UserInputType.Touch) UserInputService:() ==
dragToggle =
dragStart = input.Position
startPos = Frame.Position
input.Changed:(()
input.UserInputState == .UserInputState.End
dragToggle =
)
)
Frame.InputChanged:((input)
input.UserInputType == .UserInputType.MouseMovement input.UserInputType == .UserInputType.Touch
dragInput = input
)
:().InputChanged:((input)
input == dragInput dragToggle
(input)
)
SetColorCodeFrame = (Name)
ColorCodeFrame.BackgroundColor3 = ColorCodes[Name] ColorCodes.None
ColorCodeFrame.Text = ColorCodes[Name] Name
GetColorCodeFrame = ()
ColorCodeFrame.Text
Players = :()
OldNameCall =
plr = .Players.LocalPlayer
OldNameCall = (, , (Self, ...)
NameCallMethod = ()
() Self == plr NameCallMethod ==
().SendNotifications ==
:():(, {
Title = ,
Text = (({...})[]),
Icon = ,
Duration = ,
})
(Self, ...)
)
(()
.ReplicatedStorage.Remotes.Send:()
)
(()
sendremote = .ReplicatedStorage.DefaultChatSystemChatEvents.ChannelNameColorUpdated
oldspawn
oldspawn = (().spawn, (...)
() ((()) == (()) == )
(()
)
(...)
)
sendremote:()
)
StopAllAnimations
Reanimate
GetAnimationFunctionFromId
onDied
onRunning
onJumping
onClimbing
onGettingUp
onFreeFall
onFallingDown
onSeated
onPlatformStanding
onSwimming
PlayAnimation
setAnimationSpeed
StopAllAnimations = ()
_,v (Humanoid:())
v:()
GetAnimationFunctionFromId = (Id)
({
[] = OnDied;
[] = onRunning;
[] = onJumping;
[] = onClimbing;
[] = onGettingUp;
[] = onFreeFall;
[] = onFallingDown;
[] = onSeated;
[] = onPlatformStanding;
[] = onSwimming;
})[Id]
Reanimate = (Character)
Character:(,)
_, Animate (Character:())
Animate:() Animate.Name ==
_,Connection ((Animate.Changed))
Connection:()
BypassAntiExploit
Animate.Disabled =
setparentinternal
(Animate, .Lighting)
()
Animate:()
()
()
()
Figure = Character
Torso = Figure:()
RightShoulder = Torso:()
LeftShoulder = Torso:()
RightHip = Torso:()
LeftHip = Torso:()
Neck = Torso:()
Humanoid = Figure:()
currentAnim =
currentAnimInstance =
currentAnimTrack =
currentAnimKeyframeHandler =
animTable = {}
animNames = {
idle = {
{ id = , weight = },
{ id = , weight = }
},
walk = {
{ id = , weight = }
},
run = {
{ id = , weight = }
},
jump = {
{ id = , weight = }
},
fall = {
{ id = , weight = }
},
climb = {
{ id = , weight = }
},
sit = {
{ id = , weight = }
},
toolnone = {
{ id = , weight = }
},
toolslash = {
{ id = , weight = }
},
toollunge = {
{ id = , weight = }
},
wave = {
{ id = , weight = }
},
point = {
{ id = , weight = }
},
dance1 = {
{ id = , weight = },
{ id = , weight = },
{ id = , weight = }
},
dance2 = {
{ id = , weight = },
{ id = , weight = },
{ id = , weight = }
},
dance3 = {
{ id = , weight = },
{ id = , weight = },
{ id = , weight = }
},
laugh = {
{ id = , weight = }
},
cheer = {
{ id = , weight = }
},
}
dances = {, , }
emoteNames = { wave = , point = , dance1 = , dance2 = , dance3 = , laugh = , cheer = }
(name, fileList)
(animTable[name] ~= )
_, connection (animTable[name].connections)
connection:()
animTable[name] = {}
animTable[name].count =
animTable[name].totalWeight =
animTable[name].connections = {}
(animTable[name].count <= )
idx, anim (fileList)
animTable[name][idx] = {}
animTable[name][idx].anim = .()
animTable[name][idx].anim.Name = name
animTable[name][idx].anim.AnimationId = anim.id
animTable[name][idx].weight = anim.weight
animTable[name].count = animTable[name].count +
animTable[name].totalWeight = animTable[name].totalWeight + anim.weight
animator = Humanoid Humanoid:()
animator
animTracks = animator:()
i,track (animTracks)
track:()
track:()
name, fileList (animNames)
(name, fileList)
toolAnim =
toolAnimTime =
jumpAnimTime =
jumpAnimDuration =
toolTransitionTime =
fallTransitionTime =
jumpMaxLimbVelocity =
()
oldAnim = currentAnim
(emoteNames[oldAnim] ~= emoteNames[oldAnim] == )
oldAnim =
currentAnim =
currentAnimInstance =
(currentAnimKeyframeHandler ~= )
currentAnimKeyframeHandler:()
(currentAnimTrack ~= )
currentAnimTrack:()
currentAnimTrack:()
currentAnimTrack =
oldAnim
setAnimationSpeed = (speed)
speed ~= currentAnimSpeed
currentAnimSpeed = speed
currentAnimTrack:(currentAnimSpeed)
(frameName)
(frameName == )
repeatAnim = currentAnim
(emoteNames[repeatAnim] ~= emoteNames[repeatAnim] == )
repeatAnim =
animSpeed = currentAnimSpeed
(repeatAnim, , Humanoid)
(animSpeed)
playAnimation = (animName, transitionTime, humanoid, bypassAnimateDisabled)
(()
AnimateDisabled bypassAnimateDisabled
.(AnimationQueue,{animName,transitionTime})
roll = .(, animTable[animName].totalWeight)
origRoll = roll
idx =
(roll > animTable[animName][idx].weight)
roll = roll - animTable[animName][idx].weight
idx = idx +
anim = animTable[animName][idx].anim
(anim ~= currentAnimInstance)
(currentAnimTrack ~= )
currentAnimTrack:(transitionTime)
currentAnimTrack:()
currentAnimSpeed =
currentAnimTrack = humanoid:(anim)
currentAnimTrack.Priority = .AnimationPriority.Core
currentAnimTrack:(transitionTime)
currentAnim = animName
currentAnimInstance = anim
(currentAnimKeyframeHandler ~= )
currentAnimKeyframeHandler:()
currentAnimKeyframeHandler = currentAnimTrack.KeyframeReached:(keyFrameReachedFunc)
)
toolAnimName =
toolAnimTrack =
toolAnimInstance =
currentToolAnimKeyframeHandler =
(frameName)
(frameName == )
(toolAnimName, , Humanoid)
(animName, transitionTime, humanoid, priority)
roll = .(, animTable[animName].totalWeight)
origRoll = roll
idx =
(roll > animTable[animName][idx].weight)
roll = roll - animTable[animName][idx].weight
idx = idx +
anim = animTable[animName][idx].anim
(toolAnimInstance ~= anim)
(toolAnimTrack ~= )
toolAnimTrack:()
toolAnimTrack:()
transitionTime =
toolAnimTrack = humanoid:(anim)
priority
toolAnimTrack.Priority = priority
toolAnimTrack:(transitionTime)
toolAnimName = animName
toolAnimInstance = anim
currentToolAnimKeyframeHandler = toolAnimTrack.KeyframeReached:(toolKeyFrameReachedFunc)
()
oldAnim = toolAnimName
(currentToolAnimKeyframeHandler ~= )
currentToolAnimKeyframeHandler:()
toolAnimName =
toolAnimInstance =
(toolAnimTrack ~= )
toolAnimTrack:()
toolAnimTrack:()
toolAnimTrack =
oldAnim
onRunning = (speed)
speed >
(, , Humanoid)
currentAnimInstance currentAnimInstance.AnimationId ==
(speed / )
pose =
emoteNames[currentAnim] ==
(, , Humanoid)
pose =
onDied = ()
pose =
onJumping = ()
(, , Humanoid)
jumpAnimTime = jumpAnimDuration
pose =
onClimbing = (speed)
(, , Humanoid)
(speed / )
pose =
onGettingUp = ()
pose =
onFreeFall = ()
(jumpAnimTime <= )
(, fallTransitionTime, Humanoid)
pose =
onFallingDown = ()
pose =
onSeated = ()
pose =
onPlatformStanding = ()
pose =
onSwimming = (speed)
speed >
pose =
pose =
()
_, kid (Figure:())
kid.className == kid
(tool)
_, c (tool:())
c.Name == c.className ==
c
()
(toolAnim == )
(, toolTransitionTime, Humanoid, .AnimationPriority.Idle)
(toolAnim == )
(, , Humanoid, .AnimationPriority.Action)
(toolAnim == )
(, , Humanoid, .AnimationPriority.Action)
()
RightShoulder.MaxVelocity =
LeftShoulder.MaxVelocity =
RightShoulder:( /)
LeftShoulder:(- /)
RightHip:( /)
LeftHip:(- /)
lastTick =
(time)
AnimateDisabled
amplitude =
frequency =
deltaTime = time - lastTick
lastTick = time
climbFudge =
setAngles =
(jumpAnimTime > )
jumpAnimTime = jumpAnimTime - deltaTime
(pose == jumpAnimTime <= )
(, fallTransitionTime, Humanoid)
(pose == )
(, , Humanoid)
(pose == )
(, , Humanoid)
(pose == pose == pose == pose == pose == )
()
amplitude =
frequency =
setAngles =
(setAngles)
desiredAngle = amplitude * .(time * frequency)
RightShoulder:(desiredAngle + climbFudge)
LeftShoulder:(desiredAngle - climbFudge)
RightHip:(-desiredAngle)
LeftHip:(-desiredAngle)
tool = ()
tool tool:()
animStringValueObject = (tool)
animStringValueObject
toolAnim = animStringValueObject.Value
animStringValueObject.Parent =
toolAnimTime = time +
time > toolAnimTime
toolAnimTime =
toolAnim =
()
()
toolAnim =
toolAnimInstance =
toolAnimTime =
Humanoid.Died:((...)
AnimateDisabled
(...)
)
Humanoid.Running:((Speed)
AnimateDisabled
(Speed)
)
Humanoid.Jumping:(onJumping)
Humanoid.Climbing:((Speed)
AnimateDisabled
(Speed)
)
Humanoid.GettingUp:((...)
AnimateDisabled
(...)
)
Humanoid.FreeFalling:((...)
AnimateDisabled
(...)
)
Humanoid.FallingDown:((...)
AnimateDisabled
(...)
)
Humanoid.Seated:((...)
AnimateDisabled
(...)
)
Humanoid.PlatformStanding:((...)
AnimateDisabled
(...)
)
Humanoid.Swimming:((...)
AnimateDisabled
(...)
)
:().LocalPlayer.Chatted:((msg)
emote =
msg ==
emote = dances[.(, #dances)]
(.(msg, , ) == )
emote = .(msg, )
(.(msg, , ) == )
emote = .(msg, )
(pose == emoteNames[emote] ~= )
(emote, , Humanoid)
)
(, , Humanoid)
pose =
(()
Figure.Parent ~=
_, time = ()
(time)
)
GetZoom
SetZoom
GetShiftLockEnabled
SetShiftLockEnabled
SetCameraCFrame
BlockInputs
UnlockInputs
SetCursorIcon
SetCursorSize
SetCursorOffset
SetCursor
VirtualInputManager:(, , , )
()
VirtualInputManager:(, , , )
()
ZoomControllers = {}
_,Table (())
(Table) ==
(()
(Table.SetCameraToSubjectDistance) ==
(Table.GetCameraToSubjectDistance) ==
Table.FIRST_PERSON_DISTANCE_THRESHOLD
Table.lastCameraTransform
.(ZoomControllers,Table)
)
((#ZoomControllers)....(#ZoomControllers == ))
GetZoom = ()
_,ZoomController (ZoomControllers)
Zoom = ZoomController:()
Zoom Zoom ~=
Zoom
SetZoom = (Zoom)
_,ZoomController (ZoomControllers)
(()
ZoomController:(Zoom)
)
GetShiftLockEnabled = ()
ShiftLockEnabled
SetShiftLockEnabled = (Enabled)
ShiftLockEnabled ~= Enabled
ShiftLockEnabled = Enabled
Enabled
()
()
ContextActionService:(, .UserInputState.Begin, )
SetCameraCFrame = (NewCFrame)
CameraCFrame = NewCFrame
.CurrentCamera.CFrame = NewCFrame
BlockGui = .()
BlockFrame = .()
BlockFrame.Text =
BlockFrame.BackgroundTransparency =
BlockFrame.Size = .(,)
BlockFrame.Selectable =
BlockFrame.Selected =
BlockFrame.Parent = BlockGui
BlockGui.Enabled =
BlockGui.Parent = GUIParent
BlockInputs = ()
BlockGui.Enabled =
UnblockInputs = ()
BlockGui.Enabled =
CursorHolder = .()
Cursor.BackgroundTransparency =
Cursor.ZIndex = .huge
Cursor.Parent = CursorHolder
CursorHolder.ZIndexBehavior = .ZIndexBehavior.Global
CursorHolder.Parent = GUIParent
Resolution = CursorHolder.AbsoluteSize
SetCursor = (CursorName)
CursorData = Cursors[CursorName]
CursorIcon = CursorData.Icon
CursorSize = CursorData.Size
CursorOffset = CursorData.Offset
IsInstalled
SendSignal
IsInstalled = ()
(AHKConnectionFolderPath)
SendSignal = (Signal)
()
(AHKConnectionRequestPath,Signal)
()
Freeze
GetReplayFile
ReplayEncode
ReplayDecode
RecordReplay
StartRecording
StopRecording
SaveRecording
DiscardRecording
StartReading
local StopReading -- StopReading() -> nil
local GetCheckpoint -- GetCheckpoint(CheckpointNumber?) -> number
local SetCheckpoint -- SetCheckpoint(FrameIndex?) -> nil
local GotoFrame -- GotoFrame(Index) -> nil
do
GetReplayFile = function()
if not isfolder(string.split(FolderPath,"/")[1]) then
makefolder(string.split(FolderPath,"/")[1])
end
if not isfolder(FolderPath) then
makefolder(FolderPath)
end
if not isfile(ReplayPath) then
writefile(ReplayPath,ReplayFileBeginning)
return ReplayFileBeginning
end
return readfile(ReplayPath)
end
ReplayEncode = function(Table)
ConsoleMessage("Encoding "..tostring(#Table).." frames")
local StartTick = tick()
local Encoded = json.encode(Table)
ConsoleMessage("Done encoding in",RoundNumber(tick()-StartTick,2),"seconds")
return ReplayFileBeginning..Encoded..ReplayFileEnding
end
ReplayDecode = function(String)
if String == ReplayFileBeginning or String == ReplayFileBeginning..ReplayFileEnding then
ConsoleMessage("Nothing to read")
return
end
ConsoleMessage("Decoding "..tostring(#String).." characters")
local StartTick = tick()
local Decoded = json.decode(String)
ConsoleMessage("Done decoding in",RoundNumber(tick()-StartTick,2),"seconds")
return Decoded.Replay
end
RecordReplay = function()
ConsoleMessage("Waiting for input")
if Writing then
ConsoleMessage("Recording stopped")
StopRecording()
return
end
SetColorCodeFrame("WaitingForInput")
WaitForInput()
StartRecording()
ConsoleMessage("Recording started")
end
StartRecording = function()
if not Reading then
SetColorCodeFrame("Recording")
Writing = true
end
end
StopRecording = function()
if not Reading then
Writing = false
end
end
SaveToFile = function()
local ReplayEncoded = ReplayEncode(ReplayTable)
writefile(ReplayPath,ReplayEncoded)
end
SaveRecording = function()
if #RecordingTable > 0 then
local old = #ReplayTable
for _,Frame in pairs(RecordingTable) do
table.insert(ReplayTable,Frame)
end
RecordingTable = {}
ConsoleMessage("Saved")
end
end
DiscardRecording = function()
if #RecordingTable > 0 then
RecordingTable = {}
ConsoleMessage("Discarded")
end
end
StartReading = function()
if not Reading then
SaveToFile()
ReplayTable = ReplayDecode(GetReplayFile()) -- Decode replay from file
if ReplayTable then
-- Decoding successful
Freeze(false) -- Unfreeze
AnimateDisabled = true -- Disable fake animate script
Workspace.Gravity = 0
ReplayTableIndex = 1
BlockInputs() -- Disable scrolling and clicks
Reading = true
SetColorCodeFrame("Reading")
ConsoleMessage("Reading started")
ConsoleMessage("Length: "..RoundNumber(tostring(#ReplayTable/60)).." seconds")
else
-- Decoding failed
ReplayTable = {}
SetColorCodeFrame("Idle")
end
else
ConsoleMessage("You are already reading")
end
end
StopReading = function()
if Reading then
UnblockInputs() -- Enable scrolling and clicks
Character.Head.CanCollide = true -- Fix character collisions
Character.Torso.CanCollide = true -- Fix character collisions
Character.HumanoidRootPart.CanCollide = true -- Fix character collisions
AnimateDisabled = false -- Enable fake animate script
Reading = false
Character.Humanoid.JumpPower = DefaultJumpPower
Character.Humanoid.WalkSpeed = DefaultWalkSpeed
Workspace.Gravity = DefaultGravity
SetColorCodeFrame("Idle")
ConsoleMessage("Reading stopped")
else
ConsoleMessage("You are not reading")
end
end
end
-- Tasability functions
--local Freeze -- Freeze(NewFrozen) -> nil
do
Freeze = function(NewFrozen,DoNotRecord)
if Frozen ~= NewFrozen and not Reading then
SeekDirection = 0
if NewFrozen then
Frozen = true
StopRecording()
SaveRecording()
FreezeFrame = #ReplayTable
SetColorCodeFrame("Frozen")
else
--ConsoleMessage(#ReplayTable)
--ConsoleMessage(FreezeFrame)
if DoNotRecord then
Frozen = false
SetColorCodeFrame("Idle")
else
for Index = #ReplayTable,FreezeFrame,-1 do
--ConsoleMessage(Index)
ReplayTable[Index] = nil
end
Frozen = false
StartRecording()
SetColorCodeFrame("Recording")
end
end
end
end
end
-- Commands
local Commands = {}
do
Commands["help"] = function(Args)
if Args == "help" then
ConsoleMessage("help <command>: Shows a list of all commands, or a specific command")
else
local Command = Args[1]
if Command then
Command = string.lower(Command)
if Commands[Command] then
Commands[Command]("help")
else
ConsoleMessage("Command", Command, "was not found")
end
else
for _,Command in pairs(Commands) do
Command("help")
end
end
end
end
Commands["erase"] = function(Args)
if Args == "help" then
ConsoleMessage("erase: Erases all data from the folder",PlaceId)
else
writefile(ReplayPath,ReplayFileBeginning)
ReplayTable = {}
return ReplayPath.." has been erased"
end
end
Commands["setsdm"] = function(Args)
if Args == "help" then
ConsoleMessage("setsdm <number SeekDirectionMultiplier>: Sets speed multiplier when using R and T while frozen")
else
local Number = tonumber(Args[1]) or 1
if Number then
local OldValue = SeekDirectionMultiplier
SeekDirectionMultiplier = Number
return "SeekDirectionMultiplier has been set from "..tostring(OldValue).." to "..tostring(Number)
end
end
end
Commands["rejoin"] = function(Args)
if Args == "help" then
ConsoleMessage("rejoin <bool SaveReplay>: Sets one of the configs at the top of the script (PlaybackInputs, etc)")
else
local SaveReplay = Args[1] and string.lower(Args[1])
ConsoleMessage("Saving...")
if SaveReplay == "true" or SaveReplay == "yes" or SaveReplay == "1" or SaveReplay == "save" then
SaveToFile()
end
ConsoleMessage("Rejoining...")
if #game.Players:GetPlayers() <= 1 then
game.Players.LocalPlayer:Kick("\nRejoining...")
wait()
game:GetService("TeleportService"):Teleport(game.PlaceId, game.Players.LocalPlayer)
else
game:GetService("TeleportService"):TeleportToPlaceInstance(game.PlaceId, game.JobId, game.Players.LocalPlayer)
end
return "Sent request to rejoin"
end
end
Commands["invite"] = function(Args)
if Args == "help" then
ConsoleMessage("invite: Invites you to Tasability Discord")
else
request({
Url = "http://127.0.0.1:6463/rpc?v=1",
Method = "POST",
Headers = {
["Content-Type"] = "application/json",
["origin"] = "https://discord.com",
},
Body = game:GetService("HttpService"):JSONEncode({
["args"] = {
["code"] = "Shyfsc2cJ9",
},
["cmd"] = "INVITE_BROWSER",
["nonce"] = "."
})
})
return "Sent invite (if your exploit blocked it the invite is https://discord.gg/Shyfsc2cJ9)"
end
end
end
-- Connection Functions
local StateChanged
local CharacterAdded
local InputBegan
local RenderStepped
local Stepped
local ReadButton_MouseButton1Click
local SaveToFileButton_MouseButton1Click
local IdleButton_MouseButton1Click
local CurrentPlaceIdButton_MouseButton1Click
local CurrentCamera_Changed
local CommandBar_FocusLost
local CommandBar_MouseEnter
local CommandBar_MouseLeave
do
StateChanged = function(_,State)
table.insert(HumanoidStateQueue,State.Value)
end
CharacterAdded = function(NewCharacter)
Humanoid = NewCharacter:WaitForChild("Humanoid")
Humanoid.StateChanged:Connect(StateChanged)
RootPart = NewCharacter:WaitForChild("HumanoidRootPart")
DefaultJumpPower = Humanoid.JumpPower
DefaultWalkSpeed = Humanoid.WalkSpeed
Reanimate(NewCharacter)
Character = NewCharacter
Humanoid.Died:Connect(function()
Dead = true
end)
Dead = false
end
InputBegan = function(Input,GameProcessed)
if IgnoreGameProcessed then
GameProcessed = false
end
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
table.insert(InputBeganQueue,"b1")
elseif Input.UserInputType == Enum.UserInputType.MouseButton2 then
table.insert(InputBeganQueue,"b2")
elseif Input.UserInputType == Enum.UserInputType.Keyboard then
local InputName = string.split(tostring(Input.KeyCode),".")[3]
if not InputBlacklist[InputName] then
table.insert(InputBeganQueue,InputName)
end
end
if Input.KeyCode == Enum.KeyCode.LeftShift and not Reading and not GameProcessed then
SetShiftLockEnabled(not ShiftLockEnabled)
end
if Input.KeyCode == Enum.KeyCode.E and not GameProcessed then
-- Freeze/Unfreeze
Freeze(not Frozen)
elseif Input.KeyCode == Enum.KeyCode.R and not GameProcessed then
-- Seek backwards
if not Reading then
Freeze(true)
if SeekDirection == 0 then
SeekDirection = -1*SeekDirectionMultiplier -- Backwards
end
end
elseif Input.KeyCode == Enum.KeyCode.T and not GameProcessed then
-- Seek fowards
if not Reading then
Freeze(true)
if SeekDirection == 0 then
SeekDirection = 1*SeekDirectionMultiplier -- Fowards
end
end
elseif Input.KeyCode == Enum.KeyCode.F and not GameProcessed then
-- Go 1 frame backwards
Freeze(true)
if Frozen and SeekDirection == 0 then
local NewFreezeFrame = FreezeFrame - 1
if NewFreezeFrame > 0 and NewFreezeFrame <= #ReplayTable then
FreezeFrame = NewFreezeFrame
end
end
elseif Input.KeyCode == Enum.KeyCode.G and not GameProcessed then
-- Go 1 frame fowards
Freeze(true)
if Frozen and SeekDirection == 0 then
local NewFreezeFrame = FreezeFrame + 1
if NewFreezeFrame > 0 and NewFreezeFrame <= #ReplayTable then
FreezeFrame = NewFreezeFrame
end
end
elseif Input.KeyCode == Enum.KeyCode.U and not GameProcessed then
-- Toggle UI
MainFrame.Visible = not MainFrame.Visible
elseif Input.KeyCode == Enum.KeyCode.L and not GameProcessed then
-- Stop reading
StopReading()
elseif Input.KeyCode == Enum.KeyCode.P and not GameProcessed then
-- Save to file
SaveToFile()
elseif Input.KeyCode == Enum.KeyCode.M and not GameProcessed then
-- Save to file
IdleButton_MouseButton1Click()
end
end
InputChanged = function(Input,GameProcessed)
if Input.UserInputType == Enum.UserInputType.MouseWheel then
if Input.Position.Z > 0 then
table.insert(InputBeganQueue,"u")
else
table.insert(InputBeganQueue,"d")
end
end
end
InputEnded = function(Input,GameProcessed)
if Input.UserInputType == Enum.UserInputType.MouseButton1 then
table.insert(InputEndedQueue,"b1")
elseif Input.UserInputType == Enum.UserInputType.MouseButton2 then
table.insert(InputEndedQueue,"b2")
elseif Input.UserInputType == Enum.UserInputType.MouseWheel then
if Input.Position.Z > 0 then
table.insert(InputEndedQueue,"u")
else
table.insert(InputEndedQueue,"d")
end
elseif Input.UserInputType == Enum.UserInputType.Keyboard then
local InputName = string.split(tostring(Input.KeyCode),".")[3]
table.insert(InputEndedQueue,InputName)
end
if Input.KeyCode == Enum.KeyCode.R then
-- Stop seeking backwards
if SeekDirection == -1*SeekDirectionMultiplier then
SeekDirection = 0
end
elseif Input.KeyCode == Enum.KeyCode.T then
-- Stop seeking fowards
if SeekDirection == 1*SeekDirectionMultiplier then
SeekDirection = 0
end
end
end
RenderStepped = function(...)
for _,Function in pairs(RenderSteppedConnections) do
Function(...)
end
end
Stepped = function(...)
for _,Function in pairs(SteppedConnections) do
Function(...)
end
end
ReadButton_MouseButton1Click = function()
if ReplayStartTime >= 1 then
for i = ReplayStartTime,1,-1 do
ConsoleMessage("Reading in "..tostring(i).." seconds")
wait(1)
end
end
StartReading()
end
SaveToFileButton_MouseButton1Click = function()
SaveToFile()
end
IdleButton_MouseButton1Click = function()
if GetColorCodeFrame() == "Frozen" then
Freeze(false,true)
end
end
IgnoreGameProcessedButton_MouseButton1Click = function()
IgnoreGameProcessed = not IgnoreGameProcessed
end
CurrentPlaceIdButton_MouseButton1Click = function()
if string.find(CurrentPlaceIdButton.Text, "Place") then
local OldText = CurrentPlaceIdButton.Text
setclipboard(tostring(PlaceId))
CurrentPlaceIdButton.Text = "Copied id"
wait(.5)
CurrentPlaceIdButton.Text = OldText
end
end
CurrentCamera_Changed = function()
if Reading then
workspace.CurrentCamera.CFrame = CameraCFrame
end
end
CommandBar_FocusLost = function()
local Input = CommandBar.Text
local InputSplit = string.split(Input," ")
local Command = Commands[string.lower(InputSplit[1])]
if Command then
table.remove(InputSplit,1)
local ReturnMessage = Command(InputSplit)
if ReturnMessage then
ConsoleMessage(ReturnMessage)
end
else
ConsoleMessage("Command",InputSplit[1],"was not found")
end
CommandBar.Text = ""
end
CommandBar_MouseEnter = function()
CommandBar.BackgroundColor3 = Color3.new(0.2,0.2,0.2)
end
CommandBar_MouseLeave = function()
CommandBar.BackgroundColor3 = Color3.new(0,0,0)
end
end
-- RenderStepped/Stepped connections
do
RenderSteppedConnections.UpdateFreezeFrame = function()
RecordedFramesLabel.Text = RoundNumber(FreezeFrame,0)
end
RenderSteppedConnections.UpdateIgnoreGameProcessedButton = function()
if IgnoreGameProcessed then
IgnoreGameProcessedButton.BackgroundColor3 = Color3.new(0.5,1,0.5)
else
IgnoreGameProcessedButton.BackgroundColor3 = Color3.new(1,0.5,0.5)
end
end
RenderSteppedConnections.SeekDirectionHandler = function()
if Frozen then
local NewFreezeFrame = FreezeFrame + SeekDirection
if NewFreezeFrame < 1 then
FreezeFrame = 1
elseif NewFreezeFrame > #ReplayTable then
FreezeFrame = #ReplayTable
else
FreezeFrame = NewFreezeFrame
end
end
end
local PressedWriting = {}
SteppedConnections.UpdateInputPreview = function()
for _,Input in pairs(InputBeganQueue) do
if Input == "u" or Input == "d" then
return
end
Pressed[Input] = true
end
for _,Input in pairs(InputEndedQueue) do
Pressed[Input] = nil
end
PressedKeysLabel.Text = "|"
for Input,_ in pairs(Pressed) do
PressedKeysLabel.Text = PressedKeysLabel.Text..Input.."|"
end
-- MOVED TO FREEZE LOOP
--[[if Writing then
for _,Input in pairs(InputBeganQueue) do
if Input == "u" or Input == "d" then
return
end
PressedWriting[Input] = true
end
for _,Input in pairs(InputEndedQueue) do
PressedWriting[Input] = nil
end
WritingPressedKeysLabel.Text = "|"
for Input,_ in pairs(PressedWriting) do
WritingPressedKeysLabel.Text = WritingPressedKeysLabel.Text..Input.."|"
end
end]]
end
end
do -- Connections
UserInputService.InputBegan:Connect(InputBegan)
UserInputService.InputChanged:Connect(InputChanged)
UserInputService.InputEnded:Connect(InputEnded)
RunService.RenderStepped:Connect(RenderStepped)
RunService.Stepped:Connect(Stepped)
Player.CharacterAdded:Connect(CharacterAdded)
ReadButton.MouseButton1Click:Connect(ReadButton_MouseButton1Click)
SaveToFileButton.MouseButton1Click:Connect(SaveToFileButton_MouseButton1Click)
IdleButton.MouseButton1Click:Connect(IdleButton_MouseButton1Click)
CurrentPlaceIdButton.MouseButton1Click:Connect(CurrentPlaceIdButton_MouseButton1Click)
IgnoreGameProcessedButton.MouseButton1Click:Connect(IgnoreGameProcessedButton_MouseButton1Click)
workspace.CurrentCamera.Changed:Connect(CurrentCamera_Changed)
CommandBar.FocusLost:Connect(CommandBar_FocusLost)
CommandBar.MouseEnter:Connect(CommandBar_MouseEnter)
CommandBar.MouseLeave:Connect(CommandBar_MouseLeave)
end
do -- Setup
GetReplayFile() -- Create folders and files for Replayability+ if needed
SetCursor("ArrowFarCursor") -- Add fake cursor
UserInputService.MouseIconEnabled = false -- Remove real cursor
DefaultGravity = Workspace.Gravity -- Set DefaultGravity
ShiftLockBoundKeys.Value = "" -- Remove shift lock keybinds
CharacterAdded(Player.Character) -- Set character
Dragify(MainFrame) -- Draggable gui
SetColorCodeFrame("Idle") -- Set color code
GUI.Parent = GUIParent
end
spawn(function() -- Reading
while true do
if Reading then
local Frame = ReplayTable[ReplayTableIndex]
if Frame == 0 then
-- Voided
Humanoid:ChangeState(15) -- Dead
for _,Descendant in pairs(Character:GetDescendants()) do
if Descendant:IsA("BasePart") then
Descendant:Destroy()
end
end
repeat wait() until not Dead
RunService.Heartbeat:Wait()
ReplayTableIndex = ReplayTableIndex + 1
continue
elseif Frame == 1 then
-- Dead
Humanoid:ChangeState(15) -- Dead
workspace.Gravity = DefaultGravity -- So the body parts fall
repeat wait() until not Dead
RunService.Heartbeat:Wait()
ReplayTableIndex = ReplayTableIndex + 1
continue
end
if not Frame then
StopReading()
continue
end
AnimateDisabled = true
workspace.Gravity = 0
Character.Humanoid.JumpPower = 0
Character.Humanoid.WalkSpeed = 0
if not Character:FindFirstChild("HumanoidRootPart") then
RunService.Heartbeat:Wait()
continue
end
local HumanoidRootPartCFrame = TableToCFrame(Frame[1]) -- Now used in the RenderStepped loop
local Animations = Frame[2]
local AnimationSpeed = Frame[3]
local HumanoidState = Frame[4]
local HumanoidRootPartVelocity = TableToVector3(Frame[5])
local HumanoidRootPartRotVelocity = TableToVector3(Frame[6])
local CurrentCameraCFrame = TableToCFrame(Frame[7]) -- Now used in the RenderStepped loop
local Zoom = Frame[8] -- Now used in the RenderStepped loop
local AnimatePose = Frame[9]
local ShiftLockEnabled = (Frame[10] == 1 and true) or false
local MouseLocation = TableToVector2(Frame[11])
local InputBeganQueue = Frame[12][1]
local InputEndedQueue = Frame[12][2]
local CurrentState = Humanoid:GetState().Value
SetCameraCFrame(CurrentCameraCFrame)
SetZoom(Zoom)
Humanoid:ChangeState(HumanoidState)
pose = AnimatePose
for _,Arguments in pairs(Animations) do
local Animation = Arguments[1]
local TransitionTime = Arguments[2]
if Animation == "walk" then
if Humanoid.FloorMaterial ~= Enum.Material.Air and CurrentState ~= 3 then
playAnimation("walk",TransitionTime,Humanoid,true)
end
else
playAnimation(Animation,TransitionTime,Humanoid,true)
end
end
pcall(setAnimationSpeed,AnimationSpeed)
if ShiftLockEnabled then
SetShiftLockEnabled(true)
else
SetShiftLockEnabled(false)
end
if PlaybackMouseLocation and not ShiftLockEnabled and Zoom > 0.52 then
mousemoveabs(MouseLocation.X,MouseLocation.Y)
else
-- Middle of the screen
mousemoveabs((Resolution.X/2)+CursorOffset.X-GuiInset.X,(Resolution.Y/2)+CursorOffset.Y-GuiInset.Y-36)
end
if PlaybackInputs then
local Signal = {}
for _,Input in pairs(InputBeganQueue) do
local Code = InputCodes[Input]
if Code then
keypress(Code)
else
if Input == "b1" then
mouse1press()
elseif Input == "b2" then
mouse2press()
elseif Input == "u" then
table.insert(Signal,"u")
elseif Input == "d" then
table.insert(Signal,"d")
else
ConsoleMessage(tostring(Input).." was not found in InputCodes and will not be pressed")
end
end
end
for _,Input in pairs(InputEndedQueue) do
local Code = InputCodes[Input]
if Code then
keyrelease(Code)
else
if Input == "b1" then
mouse1release()
elseif Input == "b2" then
mouse2release()
else
ConsoleMessage(tostring(Input).." was not found in InputCodes and will not be released")
end
end
end
Signal = table.concat(Signal,",") -- {"u","u","d"} -> "u,u,d"
SendSignal(Signal)
end
--Character.HumanoidRootPart.Velocity = HumanoidRootPartVelocity
--Character.HumanoidRootPart.RotVelocity = HumanoidRootPartRotVelocity
--Character.HumanoidRootPart.Velocity = Vector3.new()
--Character.HumanoidRootPart.RotVelocity = Vector3.new()
Character.HumanoidRootPart.CFrame = HumanoidRootPartCFrame
ReplayTableIndex = ReplayTableIndex + 1
end
RunService.Heartbeat:Wait()
end
end)
spawn(function() -- Reading but with Stepped to remove some delay on client
while true do
if Reading then
if workspace.Gravity ~= DefaultGravity then
for _,v in pairs(Character:GetChildren()) do
if v:IsA("BasePart") then
v.CanCollide = false
end
end
end
if not Character:FindFirstChild("HumanoidRootPart") then
RunService.Stepped:Wait()
continue
end
local Frame = ReplayTable[ReplayTableIndex]
if Frame and type(Frame) == "table" then
local HumanoidRootPartCFrame = TableToCFrame(Frame[1])
local CurrentCameraCFrame = TableToCFrame(Frame[7])
local Zoom = Frame[8]
--workspace.CurrentCamera.CFrame = CameraCFrame
--workspace.CurrentCamera.CFrame = CameraCFrame
--SetZoom(Zoom)
Character.HumanoidRootPart.CFrame = HumanoidRootPartCFrame
end
else
workspace.Gravity = DefaultGravity
end
RunService.Stepped:Wait()
end
end)
spawn(function() -- Reading but with RenderStepped to remove some delay on client
while true do
if Reading then
if not Character:FindFirstChild("HumanoidRootPart") then
RunService.RenderStepped:Wait()
continue
end
local Frame = ReplayTable[ReplayTableIndex]
if Frame and type(Frame) == "table" then
local HumanoidRootPartCFrame = TableToCFrame(Frame[1])
local CurrentCameraCFrame = TableToCFrame(Frame[7])
local Zoom = Frame[8]
--workspace.CurrentCamera.CFrame = CameraCFrame
--Character.HumanoidRootPart.CFrame = HumanoidRootPartCFrame
--Character.HumanoidRootPart.CFrame = HumanoidRootPartCFrame
end
end
RunService.RenderStepped:Wait()
end
end)
spawn(function() -- Writing
while true do
--print(currentAnimSpeed)
--print(GetShiftLockEnabled())
--table.foreach(InputEndedQueue,print)
--print(GetZoom())
if Writing then
if (not Character or not Character.Parent) or (not Character:FindFirstChild("HumanoidRootPart")) then
if type(RecordingTable[#RecordingTable]) == "table" then
table.insert(RecordingTable,0) -- Voided
end
RunService.RenderStepped:Wait()
continue
end
if (Humanoid.Health == 0) then
if type(RecordingTable[#RecordingTable]) == "table" then
table.insert(RecordingTable,1) -- Dead
end
RunService.RenderStepped:Wait()
continue
end
local Frame = {}
Frame[1] = RoundTable(CFrameToTable(Character.HumanoidRootPart.CFrame),RoundDigits)
Frame[2] = AnimationQueue
Frame[3] = RoundNumber(currentAnimSpeed,RoundDigits)
Frame[4] = Humanoid:GetState().Value
Frame[5] = RoundTable(Vector3ToTable(Character.HumanoidRootPart.Velocity),RoundDigits)
Frame[6] = RoundTable(Vector3ToTable(Character.HumanoidRootPart.RotVelocity),RoundDigits)
Frame[7] = RoundTable(CFrameToTable(workspace.CurrentCamera.CFrame),RoundDigits)
Frame[8] = RoundNumber(GetZoom(),RoundDigits)
Frame[9] = pose
Frame[10] = (GetShiftLockEnabled() and 1) or 0
Frame[11] = RoundTable(Vector2ToTable(UserInputService:GetMouseLocation()),RoundDigits)
Frame[12] = {InputBeganQueue,InputEndedQueue}
table.insert(RecordingTable,Frame)
end
AnimationQueue = {}
RunSpeed = 0
ClimbSpeed = 0
HumanoidStateQueue = {}
if setfpscap then
setfpscap(60)
end
RunService.RenderStepped:Wait()
end
end)
-- Clear input queues
RunService.Heartbeat:Connect(function()
InputBeganQueue = {}
InputEndedQueue = {}
end)
spawn(function() -- Check if connected
while true do
wait(1)
if not Reading then
local Installed = IsInstalled()
if Installed then
ConnectedLabel.Text = "AHK folder found"
ConnectedLabel.TextColor3 = Color3.new(0,0.8,0)
else
ConnectedLabel.Text = "AHK folder not found"
ConnectedLabel.TextColor3 = Color3.new(0.8,0,0)
end
end
end
end)
spawn(function() -- Update cursor
while true do
Cursor.Image = CursorIcon
Cursor.Size = CursorSize
local MouseLocation = UserInputService:GetMouseLocation()
if UserInputService.MouseBehavior == Enum.MouseBehavior.LockCenter then
Cursor.Position = UDim2.fromOffset((Resolution.X/2)+CursorOffset.X-GuiInset.X,(Resolution.Y/2)+CursorOffset.Y-GuiInset.Y-18)
else
Cursor.Position = UDim2.fromOffset(MouseLocation.X+CursorOffset.X-GuiInset.X,MouseLocation.Y+CursorOffset.Y-GuiInset.Y-36)
end
RunService.RenderStepped:Wait()
end
end)
--[[local oldprint
oldprint = hookfunction(print,function(...)
if checkcaller() then
return oldprint(...)
end
end)]]
spawn(function() -- Handling freezing
while true do
if Frozen then
Character.HumanoidRootPart.Anchored = true
if FreezeFrame > 0 and FreezeFrame <= #ReplayTable then
local RoundedFreezeFrame = RoundNumber(FreezeFrame,0)
local Frame = ReplayTable[RoundedFreezeFrame]
if type(Frame) == "table" then
local AnimatePose -- -2
local Animation -- -1
-- Backtrack in ReplayTable to find AnimatePose and Animation
for Index = RoundedFreezeFrame,1,-1 do
if AnimatePose and Animation then
break
end
local Frame = ReplayTable[Index]
if type(Frame) == "table" then
AnimatePose = Frame[9]
Animation = Frame[2][#Frame[2]]
end
end
-- Backtrack again to find which keys are pressed at the current frame
local CurrentPressedKeys = {}
for Index = RoundedFreezeFrame-math.max(FrameBacktrackCount,0),RoundedFreezeFrame do
local Frame = ReplayTable[Index]
if Frame and type(Frame) == "table" then
local BeganInputs,EndedInputs = unpack(Frame[12])
for _,Key in pairs(BeganInputs) do
if Key ~= "u" and Key ~= "d" then -- Exclude scroll inputs
CurrentPressedKeys[Key] = true
end
end
for _,Key in pairs(EndedInputs) do
-- Scroll inputs don't show up in EndedInputs
CurrentPressedKeys[Key] = nil
end
end
end
-- Display keys pressed on WritingPressedKeysLabel
WritingPressedKeysLabel.Text = "|"
for Input,_ in pairs(CurrentPressedKeys) do
WritingPressedKeysLabel.Text = WritingPressedKeysLabel.Text..Input.."|"
end
local HumanoidRootPartCFrame = TableToCFrame(Frame[1]) -- 4
local AnimationSpeed = Frame[3] -- 9
local HumanoidState = Frame[4] -- 1
local HumanoidRootPartVelocity = TableToVector3(Frame[5]) -- 2
local HumanoidRootPartRotVelocity = TableToVector3(Frame[6]) -- 3
local CameraCFrame = TableToCFrame(Frame[7]) -- 5
local Zoom = Frame[8] -- 6
local ShiftLockEnabled = (Frame[10] == 1 and true) or false -- 7
local MouseLocation = TableToVector2(Frame[11]) -- 8
local CurrentState = Humanoid:GetState().Value
-- -1
if Animation then
if Animation[1] == "walk" then
if Humanoid.FloorMaterial ~= Enum.Material.Air and CurrentState ~= 3 then
playAnimation("walk",Animation[2],Humanoid,true)
end
else
playAnimation(Animation[1],Animation[2],Humanoid,true)
end
end
pcall(setAnimationSpeed,AnimationSpeed) -- 9
pose = AnimatePose -- -2
Humanoid:ChangeState(HumanoidState) -- 1
Character.HumanoidRootPart.Velocity = HumanoidRootPartVelocity -- 2
Character.HumanoidRootPart.RotVelocity = HumanoidRootPartRotVelocity -- 3
Character.HumanoidRootPart.CFrame = HumanoidRootPartCFrame -- 4
workspace.CurrentCamera.CFrame = CameraCFrame -- 5
SetZoom(Zoom) -- 6
if ShiftLockEnabled ~= GetShiftLockEnabled() then
SetShiftLockEnabled(ShiftLockEnabled) -- 7
end
if PlaybackMouseLocation then
mousemoveabs(MouseLocation.X,MouseLocation.Y) -- 8
end
else
-- Frame is not a table
RunService.RenderStepped:Wait()
end
else
--ConsoleMessage("FreezeFrame is",FreezeFrame,"(not in range)")
end
else
pcall(function()
Character.HumanoidRootPart.Anchored = false
end)
end
RunService.RenderStepped:Wait()
end
end)
do -- Set checkpoint
ConsoleMessage("Loading from file...")
ReplayTable = ReplayDecode(GetReplayFile()) -- Decode replay from file
if not ReplayTable then
ReplayTable = {}
ConsoleMessage("There is no replay folder for",PlaceId)
end
end
ConsoleMessage("Tasability",Version,"loaded in",RoundNumber(tick()-ExecutionTick,2),"seconds")
ConsoleMessage("Type help to see all commands")