-- animator
local function init()
local JointData = {}
JointData["Right Shoulder"] = CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0)
JointData["Left Shoulder"] = CFrame.new(-1, 0.5, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0)
JointData["Right Hip"] = CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, -0, -1, 0, 0)
JointData["Left Hip"] = CFrame.new(-1, -1, 0, 0, 0, -1, 0, 1, 0, 1, 0, 0)
JointData["Neck"] = CFrame.new(0, 1, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0)
JointData["RootJoint"] = CFrame.new(0, 0, 0, -1, 0, 0, 0, 0, 1, 0, 1, -0)
local Animator = {}
local Playing = {}
local JointC0 = {}
local GlobalPlaying = _G['GlobalPlaying']
if not GlobalPlaying then
_G['GlobalPlaying'] = {}
GlobalPlaying = _G['GlobalPlaying']
end
local global_welds = _G['global_welds']
if not global_welds then
_G['global_welds'] = {}
global_welds = _G['global_welds']
end
local TS = game:GetService("TweenService")
local function Ver(Model)
if Model and Model.Parent then
if not GlobalPlaying[Model] then
GlobalPlaying[Model] = {}
end
if not Playing[Model] then
Playing[Model] = {}
return true
end
end
end
function Animator.create_welds(targchar)
if not global_welds[targchar] then else
return
end
local anim_welds = {}
local char_welds = {}
for i,v in ipairs(targchar:GetDescendants()) do
if v:IsA("Motor6D") or v:IsA("Weld") then
if game:GetService("CollectionService"):HasTag(v,'fakemotor') then
anim_welds[v] = v.Part0
elseif game:GetService("CollectionService"):HasTag(v,'realmotor') then
char_welds[v] = v.Part0
end
end
end
for i,v in ipairs(targchar:GetDescendants()) do
if v:IsA("Motor6D") and not char_welds[v] then
local m = Instance.new("Weld")
m.Name = v.Name
m.Part0 = v.Part0
m.Part1 = v.Part1
m.C0 = v.C0
m.C1 = v.C1
m.Parent = v.Parent
game:GetService("CollectionService"):AddTag(m,'fakemotor')
game:GetService("CollectionService"):AddTag(v,'realmotor')
anim_welds[m] = v.Part0
char_welds[v] = v.Part0
end
end
global_welds[targchar] = {
anim_welds = anim_welds,
char_welds = char_welds,
taid = 0,
}
end
function Animator.toggle_anim(mode,targchar)
local welds = global_welds[targchar]
if welds then else
return
end
welds.taid += 1
local cid = welds.taid
local function run()
if cid == welds.taid then else return end
if mode then
for i,v in pairs(welds.anim_welds) do
i.Enabled = true
end
for i,v in pairs(welds.char_welds) do
i.Enabled = false
end
else
for i,v in pairs(welds.char_welds) do
i.Enabled = true
end
for i,v in pairs(welds.anim_welds) do
i.Enabled = false
end
end
end
if not mode then
task.delay(0.2,run)
else
run()
end
return cid
end
function Animator.get_aid(targchar)
local welds = global_welds[targchar]
return welds.taid
end
local function Play(self, FadeIn, Speed, Looped)
self.TimePosition = 0
self.StartInternal = os.clock()
self.FadeIn = FadeIn or 0
self.Speed = Speed or self.Speed
self.Looped = Looped or self.Looped
self.LastPlayed = os.clock()
self.fired = {}
self.RecoverFade = {}
local StopEvent = Instance.new("BindableEvent")
self.Stopped = StopEvent.Event
self.StopEvent = StopEvent
local LoopedEvent = Instance.new("BindableEvent")
self.OnLooped = LoopedEvent.Event
self.LoopedEvent = LoopedEvent
local KeyframeReachedEvent = Instance.new("BindableEvent")
self.KeyframeReached = KeyframeReachedEvent.Event
self.KeyframeReachedEvent = KeyframeReachedEvent
local MarkerReachedEvent = Instance.new("BindableEvent")
self.MarkerReached = MarkerReachedEvent.Event
self.MarkerReachedEvent = MarkerReachedEvent
local I = Playing[self.Model]
if I then else
return
end
self.Playing = true
I[self] = true
end
local function Stop(self,fire)
local I = Playing[self.Model]
if I then
if fire then
self.StopEvent:Fire()
end
end
self.LastPlayed = 0
self.Playing = false
I[self] = nil
self.Stopped = nil
if self.StopEvent then
self.StopEvent:Destroy()
end
self.StopEvent = nil
self.OnLooped = nil
if self.StopEvent then
self.LoopedEvent:Destroy()
end
self.LoopedEvent = nil
self.KeyframeReached = nil
if self.StopEvent then
self.KeyframeReachedEvent:Destroy()
end
self.KeyframeReachedEvent = nil
self.MarkerReached = nil
if self.StopEvent then
self.MarkerReachedEvent:Destroy()
end
self.MarkerReachedEvent = nil
self.FadeIn = nil
end
local function Resume(self)
if self.PauseInternal then
self.StartInternal = os.clock() - self.PauseInternal
end
local I = Playing[self.Model]
self.Playing = true
I[self] = true
end
local function Pause(self)
local TimeSince = os.clock() - self.StartInternal
self.PauseInternal = TimeSince
local I = Playing[self.Model]
self.Playing = false
I[self] = nil
end
local function SetTime(self, Time)
self.StartInternal = os.clock() - Time
end
local function AdjustSpeed(self, NewSpeed)
self.Speed = NewSpeed
end
local function ft(t,c)
for i,v in pairs(t) do
--if i == 'Parent' or i == 'Name' or i == 'Marker' or i == 'Time' or i == 'CF' then continue end
if typeof(v) == 'table' then
ft(v,true)
local name = v.Name
v.Name = nil
local index_t = {
Parent = t,
Name = name or i,
}
if v.Marker then
index_t.Marker = v.Marker
v.Marker = nil
end
if v.Time then
index_t.Time = v.Time
v.Time = nil
end
if v.CF then
index_t.CF = v.CF
v.CF = nil
end
if tonumber(i) and not v.CF then
index_t.Time = tonumber(i)
end
v = setmetatable(v,{
__index = index_t
})
end
end
return t
end
local function iter(t)
local new_t = {}
for i,v in pairs(t) do
--if i == 'Parent' or i == 'Name' or i == 'Marker' or i == 'Time' or i == 'CF' then continue end
table.insert(new_t,v)
if typeof(v) == 'table' then
for ii,vv in pairs(iter(v)) do
table.insert(new_t,vv)
end
end
end
return new_t
end
local ModelAnimations = {}
local hasloaded = {}
local TrackKeyframes = {}
function Animator.Preload(Track)
if TrackKeyframes[Track] then
return TrackKeyframes[Track]
end
Track.Keyframes = ft(Track.Keyframes)
local kf = Track.Keyframes
table.sort(kf, function(a, b) return a.Time < b.Time end)
local Keyframes = {}
local jdata = {}
local largest_time = 0
do
for STime, SKeyframe in next, kf do
STime = tonumber(STime)
if STime > largest_time then
largest_time = STime
end
local descendants = iter(SKeyframe)
local function set_marker(name)
if not Keyframes['_null'] then
Keyframes['_null'] = {}
end
Keyframes['_null'][#Keyframes['_null'] + 1] = {Time = STime, Name = name, Marker = 1, ["Info"] = nil}
end
if 0 >= #descendants then
set_marker(SKeyframe.Name)
end
for _,Pose in next, descendants do
if typeof(Pose) ~= 'table' then continue end
if Pose.Name == 'HumanoidRootPart' then continue end
if Pose.Marker then
set_marker(Pose.Name)
end
local P0 = Pose.Parent.Name
local P1 = Pose.Name
local JT = Keyframes[P0..'KEyjtsep'..P1]
if not JT then
JT = {}
Keyframes[P0..'KEyjtsep'..P1] = JT
jdata[P0..'KEyjtsep'..P1] = 1
end
local Style = Pose.ES or 'Linear'
local Direction = Pose.ED or 'In'
local Weight = Pose.Weight or 1
local PCF = Pose.CF
if not PCF then continue end
local CF
for i,v in pairs(PCF) do
PCF[i] = tonumber(v)
end
if PCF[1] then
CF = CFrame.new(PCF[1],PCF[2],PCF[3])
else
CF = CFrame.new()
end
if PCF[4] then
CF = CF*CFrame.Angles(math.rad(PCF[4]),math.rad(PCF[5]),math.rad(PCF[6]))
end
local Info = {EasingStyle = Style, EasingDirection = Direction, Weight = Weight, CFrame = CF}
JT[#JT+1] = {Time = STime, Name = SKeyframe.Name, ["Info"] = Info}
end
end
for Joint,Poses in pairs(Keyframes) do
table.sort(Poses, function(a, b) return a.Time < b.Time end)
end
TrackKeyframes[Track] = {
Keyframes,
jdata,
largest_time
}
return TrackKeyframes[Track]
end
end
function Animator.LoadAnimation(Track, Model)
assert(Track,'No track.')
assert(Model,'No model.')
local notmodel
if not ModelAnimations[Model] then
notmodel = true
ModelAnimations[Model] = {}
ModelAnimations[Model].Joints = {}
elseif ModelAnimations[Model][Track] then
return ModelAnimations[Model][Track]
end
local Animation = {}
ModelAnimations[Model][Track] = Animation
if not hasloaded[Track] then
Track.Properties.Priority = Enum.AnimationPriority[Track.Properties.Priority]
end
local set_model = Ver(Model)
local largest_time = 0
if not GlobalPlaying[Model][Animation] then
GlobalPlaying[Model][Animation] = {}
end
if notmodel then
local function new_joint(Obj)
if Obj:IsA("Weld") then
local P0 = Obj.Part0
local P1 = Obj.Part1
if not P0 or not P1 then return end
local jd = JointData[Obj.Name]
if jd then
Obj.C0 = jd
JointC0[Obj] = jd
else
JointC0[Obj] = Obj.C0
end
local T = ModelAnimations[Model].Joints[P0.Name]
if not T then
T = {}
ModelAnimations[Model].Joints[P0.Name] = T
end
if not T[P1.Name] then
T[P1.Name] = Obj
end
end
end
for _,v in ipairs(Model:GetDescendants()) do
new_joint(v)
end
Model.DescendantAdded:Connect(new_joint)
end
local track_data = Animator.Preload(Track)
if track_data then
local Keyframes,jdata,lt = unpack(track_data)
Animation.Keyframes = Keyframes
GlobalPlaying[Model][Animation] = jdata
largest_time = lt
else
error('No track preloaded.')
end
Animation.TimePosition = 0
Animation.TimeLength = largest_time
Animation.Track = Track
Animation.Model = Model
Animation.TimeScale = 1
Animation.GeneralWeight = 1
Animation.Play = Play
Animation.Stop = Stop
Animation.Resume = Resume
Animation.Pause = Pause
Animation.SetTime = SetTime
Animation.AdjustSpeed = AdjustSpeed
Animation.Looped = Track.Properties.Looping or false
Animation.Speed = 1
Animation.FadeIn = 0
Animation.LastPlayed = 0
Animation.i = 0
Animation.Playing = false
Animation.fired = {}
Animation.RecoverFade = {}
if Track.Properties.Priority == Enum.AnimationPriority.Idle then
Animation.Priority = 1
elseif Track.Properties.Priority == Enum.AnimationPriority.Movement then
Animation.Priority = 2
elseif Track.Properties.Priority == Enum.AnimationPriority.Action then
Animation.Priority = 3
else--if Track.Properties.Priority == Enum.AnimationPriority.Core then
Animation.Priority = 0
end
Animation.StartInternal = 0
Animation.PauseInternal = 0
Animation.GetTimeOfKeyframe = function(name)
for Time,v in ipairs(Animation.Keyframes) do
if v.Name == name then
return Time
end
end
end
hasloaded[Track] = true
return Animation
end
local CF = CFrame.new()
local function GetPose(TimeSince, Poses, Joint, Animation)
for i = 1,#Poses do
local Keyframe = Poses[i]
local NextKeyframe = Poses[i+1]
local Time = Keyframe.Time
--local JT = Joint.Transform
if TimeSince >= Time then
if not Animation.fired[Keyframe.Name .. Time] and Keyframe.Name ~= 'Keyframe' then
Animation.fired[Keyframe.Name .. Time] = 1
if Keyframe.Marker then -- keymarker
Animation.MarkerReachedEvent:Fire(Keyframe.Name)
else -- keyframe
Animation.KeyframeReachedEvent:Fire(Keyframe.Name)
end
end
end
if (TimeSince >= Time) or Poses[1].Time > TimeSince then
if NextKeyframe then
local NextTime = NextKeyframe.Time
if TimeSince < NextTime then
if Keyframe.Marker then
return {nil, nil, Keyframe.Name, Time, Keyframe.Marker}
end
local Info1 = Keyframe.Info
local Info2 = NextKeyframe.Info
local Alpha = (TimeSince - Time) / (NextTime - Time)
local CFA = CF:Lerp(Info1.CFrame, Info1.Weight)
local CFB = CF:Lerp(Info2.CFrame, Info2.Weight)
local Pose
if Info2.EasingStyle == 'Constant' then
Pose = CFA
else
Pose = CFA:Lerp(CFB, TS:GetValue(Alpha, Enum.EasingStyle[Info2.EasingStyle], Enum.EasingDirection[Info2.EasingDirection]))
end
return {Joint, Pose, Keyframe.Name, Time}
end
else
if Keyframe.Marker then
return {nil, nil, Keyframe.Name, Time, Keyframe.Marker}
end
return {Joint, Keyframe.Info.CFrame, Keyframe.Name, Time}
end
end
end
end
local total_playing = 0
local function UpdatePlaying()
local tp = 0
for Model, Animations in next, Playing do
for Animation,_ in next, Animations do
if not Animation.Playing then
continue
end
if not Model or not Model.Parent then
Playing[Model] = nil
Animation.FadeIn = nil
Animation.fired = {}
Animation.Playing = false
continue
end
local TimeSince = Animation.StartInternal
TimeSince = os.clock() - ((os.clock() - TimeSince) * Animation.Speed)
TimeSince = os.clock() - TimeSince
--local TimeSince = os.clock() - Animation.StartInternal
--TimeSince = TimeSince * Animation.Speed
if Animation.FadeIn then
Animation.OFadeIn = Animation.FadeIn
end
local Length = Animation.TimeLength
if TimeSince > Length then
Animation.FadeIn = nil
Animation.fired = {}
if Animation.Looped then
Animation.LoopedEvent:Fire()
if 0 >= Length then
TimeSince = 0
else
TimeSince = TimeSince%Length
end
--Animation.StartInternal += Length-TimeSince
else
Animation.TimePosition = 0
Playing[Model][Animation] = nil
Animation.Playing = false
Animation.StopEvent:Fire()
continue
end
end
local Keyframes = Animation.Keyframes
if Keyframes then else continue end
tp += 1
local ToAnimate = {}
local StartFade = nil
for Joint, Poses in pairs(Keyframes) do
local strjoint = Joint
local jd = string.split(strjoint,'KEyjtsep')
local Joint
if jd[1] and jd[2] then
Joint = ModelAnimations[Model].Joints[jd[1]]
if not Joint then
continue
end
Joint = Joint[jd[2]]
if not Joint then
continue
end
end
if not Poses[1] or not Poses[1].Marker then
local f,fade
for i,using in pairs(GlobalPlaying[Model]) do
if i ~= Animation then else
continue
end
if i.Playing then else
continue
end
if using[strjoint] then else
continue
end
if i.Priority > Animation.Priority or (i.Priority == Animation.Priority and i.LastPlayed > Animation.LastPlayed) then else
continue
end
f = true
end
if f then
Animation.RecoverFade[Joint.Name] = os.clock()
continue
end
end
if Poses[1] and Poses[1].Time > TimeSince then
--StartFade = Poses[1].Time * Animation.Speed
end
ToAnimate[#ToAnimate+1] = GetPose(TimeSince, Poses, Joint, Animation)
end
for i = 1,#ToAnimate do
local Pose = ToAnimate[i]
if not Pose[5] then
local TCF = Pose[2]
local FadeIn = Animation.FadeIn
local RF = Animation.RecoverFade[Pose[1].Name]
local TimeSince = TimeSince
if RF then
TimeSince = os.clock()-RF
if TimeSince >= Length then
Animation.RecoverFade[Pose[1].Name] = nil
else
FadeIn = Animation.OFadeIn
end
end
TCF = JointC0[Pose[1]] * TCF
if StartFade then
TCF = Pose[1].C0:Lerp(TCF, TimeSince / StartFade)
elseif FadeIn and TimeSince < FadeIn then
TCF = Pose[1].C0:Lerp(TCF, TimeSince / FadeIn)
end
Pose[1].C0 = TCF
end
end
Animation.TimePosition = TimeSince
end
end
total_playing = tp
end
function Animator.GetPlaying()
return total_playing
end
local con
if game:GetService("RunService"):IsClient() then
con = game:GetService("RunService").RenderStepped:Connect(UpdatePlaying)
else
con = game:GetService("RunService").Stepped:Connect(UpdatePlaying)
end
return Animator,con
end
-- anims
local default_anims = game:GetService("HttpService"):GetAsync('https://glot.io/snippets/gwd06nmjta/raw')
default_anims = game:GetService("HttpService"):JSONDecode(default_anims)
-- anims
local anims = {}
local function add_anim(li)
local a = game:GetService("HttpService"):GetAsync(li)
a = game:GetService("HttpService"):JSONDecode(a)
if a then
for i,v in pairs(a) do
anims[i] = v
end
end
end
add_anim('https://glot.io/snippets/gwd074p3k8/raw')
-- starter
local st = os.clock()
local plr = owner
local char = plr.Character
local hum = char:FindFirstChildOfClass("Humanoid")
local root = char:FindFirstChild("HumanoidRootPart")
if hum.RigType == Enum.HumanoidRigType.R6 then else
warn('Humanoid is not R6')
return
end
--
local animator,con = init()
animator.create_welds(char)
animator.toggle_anim(false,char)
for i,v in pairs(anims) do
animator.Preload(v)
end
for i,v in pairs(default_anims) do
animator.Preload(v)
end
function load(anim,targchar)
targchar = targchar or char
return animator.LoadAnimation(anim,targchar)
end
local move_anims = {
fall = {
anim = default_anims.fall,
fade = 0.3,
},
climb = {
anim = default_anims.climb,
fade = 0.2,
},
jump = {
anim = default_anims.jump,
fade = 0.2,
},
walk = {
anim = default_anims.walk,
fade = 0.2,
},
idle = {
anim = default_anims.idle,
fade = 0.3,
},
sit = {
anim = default_anims.sit,
fade = 0.5,
},
}
local jumped = false
local paused_default = false
local current_move = nil
function play_move_anim(cid)
if not cid then
for id,data in pairs(move_anims) do
local anim = load(data.anim)
if anim.Playing then
anim:Stop()
end
end
return
end
local data = move_anims[cid]
local anim = load(data.anim)
if cid == 'walk' then
--data.anim:AdjustSpeed(hum.WalkSpeed/16)
end
if not anim.Playing then
if current_move then
local data = move_anims[current_move]
local anim = load(data.anim)
anim:Stop()
end
current_move = cid
anim:Play(data.fade, nil, true)
end
end
--
function sleep(n)
return task.wait(n or 0)
end
local function wrap(func)
coroutine.resume(coroutine.create(func))
end
function play_sound(par,id,vol,speed,loop,perm)
local s = Instance.new("Sound")
s.SoundId = 'rbxassetid://' .. id
s.Volume = vol or 0.5
s.PlaybackSpeed = speed or 1
s.Looped = loop or false
s.Parent = par or root
if not perm then
s:Play()
end
if not loop and not perm then
s.Ended:Connect(function()
sleep()
s:Destroy()
end)
end
return s
end
--
local cs = game:GetService("CollectionService")
local using = false
local cooldowns = {}
function set_cooldown(id,n)
cooldowns[id] = {os.clock(),n}
end
function is_cooldown(id)
local cd = cooldowns[id]
if cd and cd[2] >= os.clock()-cd[1] then
return true
end
end
function hitbox(hb,ignore,func)
local hit = {}
local params = OverlapParams.new()
params.FilterDescendantsInstances = ignore or {char}
params.FilterType = Enum.RaycastFilterType.Blacklist
params.MaxParts = 100
for _,box in ipairs(hb) do
for i,obj in ipairs(workspace:GetPartsInPart(box,params)) do
local targchar = obj.Parent
local targhum
pcall(function()
targhum = targchar:FindFirstChildOfClass("Humanoid")
end)
local targroot
pcall(function()
targroot = targchar:FindFirstChild("HumanoidRootPart") or targchar:FindFirstChild("Torso")
end)
if targchar and not hit[targchar] and targhum and targroot then
hit[targchar] = {targchar,targroot,obj}
func(targchar,targroot,targhum)
end
end
end
end
function sp7(input)
if not input.press then
return
end
if using then
return
end
if is_cooldown('sp7') then
return
end
using = true
animator.toggle_anim(true,char)
local start = load(anims.sp7_start,char)
start:Play()
local box = Instance.new("Part")
box.Transparency = 1
box.Size = Vector3.new(4,4,2)
box.CanCollide = false
box.Massless = true
box.Locked = true
box.Parent = workspace
local w = Instance.new("Motor6D")
w.Part0 = root
w.Part1 = box
w.C1 = CFrame.new(0,0,1)
w.Parent = box
local ws = hum.WalkSpeed
hum.WalkSpeed = 0
local Vel = Instance.new("BodyVelocity")
Vel.MaxForce = Vector3.new(1/0,0,1/0)
play_sound(root,3355840382,0.5)
task.delay(0.767,function()
if Vel then else return end
Vel.Velocity = root.CFrame.LookVector*25
Vel.Parent = root
play_sound(root,2923163432,0.5)
end)
task.delay(1,function()
paused_default = true
start:Pause()
local st = os.clock()
local targchar,targroot,targhum
repeat
hitbox({box},nil,function(a,b,c)
if not targchar and c.Health > 0 then
targchar = a
targroot = b
targhum = c
end
end)
Vel.Velocity = root.CFrame.LookVector*35
task.wait()
until targchar or os.clock()-st >= 1.5
hum.AutoRotate = false
Vel:Destroy()
box:Destroy()
local function run()
if targchar then
animator.create_welds(targchar) -- (creating Welds instead of Motor6Ds lags)
animator.toggle_anim(true,targchar)
local ws = targhum.WalkSpeed
targhum.WalkSpeed = 0
targhum.AutoRotate = false
root.Anchored = true
targroot.Anchored = true
task.spawn(function()
for i = 1,5 do
root.CFrame = targroot.CFrame*CFrame.new(0,0,-15)*CFrame.Angles(0,math.rad(180),0)
task.wait(0.2)
end
end)
play_sound(root,2923153182,0.5)
if targchar and targchar.Parent then else
return
end
local exe_self = load(anims.sp7_self,char)
local exe_targ = load(anims.sp7_targ,targchar)
if targchar and targchar.Parent then else
return
end
exe_self:Play()
exe_targ:Play()
targhum.BreakJointsOnDeath = false
exe_self.KeyframeReached:Connect(function(name)
if name == 'ImpactR' or name == 'impactL' then
if targroot and targhum then else
return
end
play_sound(targroot,200633837,0.5,1.5)
play_sound(targroot,2374032821,0.5,math.random(95,105)/100)
--targhum:TakeDamage(311/20)
targhum:TakeDamage(90/20)
end
end)
task.wait(3.817)
start:Stop()
if targroot then
root.CFrame = targroot.CFrame*CFrame.new(0,0,-7)*CFrame.Angles(0,math.rad(180),0)
end
task.wait(2.35)
if targhum and targchar then
targhum.BreakJointsOnDeath = true
targhum:TakeDamage(20)
play_sound(targroot,2295409845,0.5,1.5)
animator.toggle_anim(false,targchar)
end
if targroot then
targroot.Anchored = false
end
root.Anchored = false
targhum.WalkSpeed = ws
targhum.AutoRotate = true
else
--start:Resume()
local miss = load(anims.sp7_miss,char)
miss:Play()
task.wait(1.733)
miss:Stop()
start:Stop()
paused_default = false
end
end
run()
hum.WalkSpeed = ws
hum.AutoRotate = true
set_cooldown('sp7',1)
animator.toggle_anim(false,char)
using = false
end)
end
do
local holding = {}
local keys = {
[Enum.KeyCode.E] = sp7,
}
local remote = Instance.new("RemoteEvent")
remote.Parent = root
remote.OnServerEvent:Connect(function(lplr,mode,key)
if plr == lplr and key then
if not holding[key] then
holding[key] = 0
end
holding[key] += 1
local f = keys[key]
if f then
f({
press = mode,
key = key,
})
end
end
end)
NLS([[
local remote = script.Parent
local uis = game:GetService("UserInputService")
uis.InputBegan:Connect(function(input,press)
if not press then else return end
local key
if input.UserInputType == Enum.UserInputType.Keyboard then
key = input.KeyCode
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
key = Enum.UserInputType.MouseButton1
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
key = Enum.UserInputType.MouseButton2
end
if key then
remote:FireServer(true,key)
end
end)
uis.InputEnded:Connect(function(input,press)
local key
if input.UserInputType == Enum.UserInputType.Keyboard then
key = input.KeyCode
elseif input.UserInputType == Enum.UserInputType.MouseButton1 then
key = Enum.UserInputType.MouseButton1
elseif input.UserInputType == Enum.UserInputType.MouseButton2 then
key = Enum.UserInputType.MouseButton2
end
if key then
remote:FireServer(false,key)
end
end)
]],remote)
end
--
print([[
Executions
e = sp7
]])
local c
c = game:GetService("RunService").Heartbeat:Connect(function()
if not char or not char.Parent or 0 >= hum.Health then
--c:Disconnect()
return
end
local dir = root.Velocity
local params = RaycastParams.new()
params.FilterType = Enum.RaycastFilterType.Blacklist
params.FilterDescendantsInstances = {char}
params.IgnoreWater = false
local ground = workspace:Raycast(root.Position,root.CFrame.UpVector*-1*5,params)
local jumpvel = dir.Y
local walkvel = (dir*Vector3.new(1,0,1)).Magnitude
local movevel = dir.Magnitude
local faceDir = root.CFrame.lookVector.Unit
local moveDir = dir.Unit
local dot = faceDir:Dot(moveDir)
local moving,air_state
if walkvel > 0.01 then
moving = true
else
moving = false
end
local state = hum:GetState()
if state == Enum.HumanoidStateType.Freefall then
air_state = 1
elseif state == Enum.HumanoidStateType.Jumping then
air_state = 2
else
air_state = 0
end
if state == Enum.HumanoidStateType.Jumping then
jumped = true
else
jumped = false
end
if not paused_default then
if state == Enum.HumanoidStateType.Climbing then
play_move_anim('climb')
elseif hum.Sit then
play_move_anim('sit')
elseif air_state == 1 then
play_move_anim('fall')
elseif air_state == 2 then
play_move_anim('jump')
elseif moving then
play_move_anim('walk')
else
play_move_anim('idle')
end
else
play_move_anim()
end
end)
print('run: ' .. os.clock()-st)