1andforhelps

Untitled

Aug 3rd, 2020 (edited)
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 17.56 KB | None | 0 0
  1. -- This script has been converted to FE by iPxter
  2.  
  3.  
  4. if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end
  5. local Player,Mouse,mouse,UserInputService,ContextActionService = owner
  6. do
  7.     print("FE Compatibility code by Mokiros | Translated to FE by iPxter")
  8.     script.Parent = Player.Character
  9.  
  10.     --RemoteEvent for communicating
  11.     local Event = Instance.new("RemoteEvent")
  12.     Event.Name = "UserInput_Event"
  13.  
  14.     --Fake event to make stuff like Mouse.KeyDown work
  15.     local function fakeEvent()
  16.         local t = {_fakeEvent=true,Connect=function(self,f)self.Function=f end}
  17.         t.connect = t.Connect
  18.         return t
  19.     end
  20.  
  21.     --Creating fake input objects with fake variables
  22.     local m = {Target=nil,Hit=CFrame.new(),KeyUp=fakeEvent(),KeyDown=fakeEvent(),Button1Up=fakeEvent(),Button1Down=fakeEvent()}
  23.     local UIS = {InputBegan=fakeEvent(),InputEnded=fakeEvent()}
  24.     local CAS = {Actions={},BindAction=function(self,name,fun,touch,...)
  25.         CAS.Actions[name] = fun and {Name=name,Function=fun,Keys={...}} or nil
  26.     end}
  27.     --Merged 2 functions into one by checking amount of arguments
  28.     CAS.UnbindAction = CAS.BindAction
  29.  
  30.     --This function will trigger the events that have been :Connect()'ed
  31.     local function te(self,ev,...)
  32.         local t = m[ev]
  33.         if t and t._fakeEvent and t.Function then
  34.             t.Function(...)
  35.         end
  36.     end
  37.     m.TrigEvent = te
  38.     UIS.TrigEvent = te
  39.  
  40.     Event.OnServerEvent:Connect(function(plr,io)
  41.         if plr~=Player then return end
  42.         if io.isMouse then
  43.             m.Target = io.Target
  44.             m.Hit = io.Hit
  45.         else
  46.             local b = io.UserInputState == Enum.UserInputState.Begin
  47.             if io.UserInputType == Enum.UserInputType.MouseButton1 then
  48.                 return m:TrigEvent(b and "Button1Down" or "Button1Up")
  49.             end
  50.             for _,t in pairs(CAS.Actions) do
  51.                 for _,k in pairs(t.Keys) do
  52.                     if k==io.KeyCode then
  53.                         t.Function(t.Name,io.UserInputState,io)
  54.                     end
  55.                 end
  56.             end
  57.             m:TrigEvent(b and "KeyDown" or "KeyUp",io.KeyCode.Name:lower())
  58.             UIS:TrigEvent(b and "InputBegan" or "InputEnded",io,false)
  59.         end
  60.     end)
  61.     Event.Parent = NLS([==[
  62.     local Player = game:GetService("Players").LocalPlayer
  63.     local Event = script:WaitForChild("UserInput_Event")
  64.  
  65.     local UIS = game:GetService("UserInputService")
  66.     local input = function(io,a)
  67.         if a then return end
  68.         --Since InputObject is a client-side instance, we create and pass table instead
  69.         Event:FireServer({KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState})
  70.     end
  71.     UIS.InputBegan:Connect(input)
  72.     UIS.InputEnded:Connect(input)
  73.  
  74.     local Mouse = Player:GetMouse()
  75.     local h,t
  76.     --Give the server mouse data 30 times every second, but only if the values changed
  77.     --If player is not moving their mouse, client won't fire events
  78.     while wait(1/30) do
  79.         if h~=Mouse.Hit or t~=Mouse.Target then
  80.             h,t=Mouse.Hit,Mouse.Target
  81.             Event:FireServer({isMouse=true,Target=t,Hit=h})
  82.         end
  83.     end]==],Player.Character)
  84.     Mouse,mouse,UserInputService,ContextActionService = m,m,UIS,CAS
  85. end
  86. local Figure = script.Parent
  87. local Torso = Figure:WaitForChild("Torso")
  88. local RightShoulder = Torso:WaitForChild("Right Shoulder")
  89. local LeftShoulder = Torso:WaitForChild("Left Shoulder")
  90. local RightHip = Torso:WaitForChild("Right Hip")
  91. local LeftHip = Torso:WaitForChild("Left Hip")
  92. local Neck = Torso:WaitForChild("Neck")
  93. local Humanoid = Figure:WaitForChild("Humanoid")
  94. local pose = "Standing"
  95.  
  96. local currentAnim = ""
  97. local currentAnimInstance = nil
  98. local currentAnimTrack = nil
  99. local currentAnimKeyframeHandler = nil
  100. local currentAnimSpeed = 1.0
  101. local animTable = {}
  102. local animNames = {
  103.     idle =  {  
  104.                 { id = "http://www.roblox.com/asset/?id=4408026557", weight = 9 },
  105.                 { id = "http://www.roblox.com/asset/?id=4408142142", weight = 1 }
  106.             },
  107.     walk =  {  
  108.                 { id = "http://www.roblox.com/asset/?id=04451388417", weight = 10 }
  109.             },
  110.     run =   {
  111.                 { id = "run.xml", weight = 10 }
  112.             },
  113.     jump =  {
  114.                 { id = "http://www.roblox.com/asset/?id=125750702", weight = 10 }
  115.             },
  116.     fall =  {
  117.                 { id = "http://www.roblox.com/asset/?id=4334681532", weight = 10 }
  118.             },
  119.     climb = {
  120.                 { id = "http://www.roblox.com/asset/?id=180436334", weight = 10 }
  121.             },
  122.     sit =   {
  123.                 { id = "http://www.roblox.com/asset/?id=178130996", weight = 10 }
  124.             }, 
  125.     toolnone = {
  126.                 { id = "http://www.roblox.com/asset/?id=182393478", weight = 10 }
  127.             },
  128.     toolslash = {
  129.                 { id = "http://www.roblox.com/asset/?id=129967390", weight = 10 }
  130. --              { id = "slash.xml", weight = 10 }
  131.             },
  132.     toollunge = {
  133.                 { id = "http://www.roblox.com/asset/?id=129967478", weight = 10 }
  134.             },
  135.     wave = {
  136.                 { id = "http://www.roblox.com/asset/?id=128777973", weight = 10 }
  137.             },
  138.     point = {
  139.                 { id = "http://www.roblox.com/asset/?id=128853357", weight = 10 }
  140.             },
  141.     dance1 = {
  142.                 { id = "http://www.roblox.com/asset/?id=182435998", weight = 10 },
  143.                 { id = "http://www.roblox.com/asset/?id=182491037", weight = 10 },
  144.                 { id = "http://www.roblox.com/asset/?id=182491065", weight = 10 }
  145.             },
  146.     dance2 = {
  147.                 { id = "http://www.roblox.com/asset/?id=182436842", weight = 10 },
  148.                 { id = "http://www.roblox.com/asset/?id=182491248", weight = 10 },
  149.                 { id = "http://www.roblox.com/asset/?id=182491277", weight = 10 }
  150.             },
  151.     dance3 = {
  152.                 { id = "http://www.roblox.com/asset/?id=182436935", weight = 10 },
  153.                 { id = "http://www.roblox.com/asset/?id=182491368", weight = 10 },
  154.                 { id = "http://www.roblox.com/asset/?id=182491423", weight = 10 }
  155.             },
  156.     laugh = {
  157.                 { id = "http://www.roblox.com/asset/?id=129423131", weight = 10 }
  158.             },
  159.     cheer = {
  160.                 { id = "http://www.roblox.com/asset/?id=129423030", weight = 10 }
  161.             },
  162. }
  163. local dances = {"dance1", "dance2", "dance3"}
  164.  
  165. -- Existance in this list signifies that it is an emote, the value indicates if it is a looping emote
  166. local emoteNames = { wave = false, point = false, dance1 = true, dance2 = true, dance3 = true, laugh = false, cheer = false}
  167.  
  168. function configureAnimationSet(name, fileList)
  169.     if (animTable[name] ~= nil) then
  170.         for _, connection in pairs(animTable[name].connections) do
  171.             connection:disconnect()
  172.         end
  173.     end
  174.     animTable[name] = {}
  175.     animTable[name].count = 0
  176.     animTable[name].totalWeight = 0
  177.     animTable[name].connections = {}
  178.  
  179.     -- check for config values
  180.     local config = script:FindFirstChild(name)
  181.     if (config ~= nil) then
  182. --      print("Loading anims " .. name)
  183.         table.insert(animTable[name].connections, config.ChildAdded:connect(function(child) configureAnimationSet(name, fileList) end))
  184.         table.insert(animTable[name].connections, config.ChildRemoved:connect(function(child) configureAnimationSet(name, fileList) end))
  185.         local idx = 1
  186.         for _, childPart in pairs(config:GetChildren()) do
  187.             if (childPart:IsA("Animation")) then
  188.                 table.insert(animTable[name].connections, childPart.Changed:connect(function(property) configureAnimationSet(name, fileList) end))
  189.                 animTable[name][idx] = {}
  190.                 animTable[name][idx].anim = childPart
  191.                 local weightObject = childPart:FindFirstChild("Weight")
  192.                 if (weightObject == nil) then
  193.                     animTable[name][idx].weight = 1
  194.                 else
  195.                     animTable[name][idx].weight = weightObject.Value
  196.                 end
  197.                 animTable[name].count = animTable[name].count + 1
  198.                 animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight
  199.     --          print(name .. " [" .. idx .. "] " .. animTable[name][idx].anim.AnimationId .. " (" .. animTable[name][idx].weight .. ")")
  200.                 idx = idx + 1
  201.             end
  202.         end
  203.     end
  204.  
  205.     -- fallback to defaults
  206.     if (animTable[name].count <= 0) then
  207.         for idx, anim in pairs(fileList) do
  208.             animTable[name][idx] = {}
  209.             animTable[name][idx].anim = Instance.new("Animation")
  210.             animTable[name][idx].anim.Name = name
  211.             animTable[name][idx].anim.AnimationId = anim.id
  212.             animTable[name][idx].weight = anim.weight
  213.             animTable[name].count = animTable[name].count + 1
  214.             animTable[name].totalWeight = animTable[name].totalWeight + anim.weight
  215. --          print(name .. " [" .. idx .. "] " .. anim.id .. " (" .. anim.weight .. ")")
  216.         end
  217.     end
  218. end
  219.  
  220. -- Setup animation objects
  221. function scriptChildModified(child)
  222.     local fileList = animNames[child.Name]
  223.     if (fileList ~= nil) then
  224.         configureAnimationSet(child.Name, fileList)
  225.     end
  226. end
  227.  
  228. script.ChildAdded:connect(scriptChildModified)
  229. script.ChildRemoved:connect(scriptChildModified)
  230.  
  231.  
  232. for name, fileList in pairs(animNames) do
  233.     configureAnimationSet(name, fileList)
  234. end
  235.  
  236. -- ANIMATION
  237.  
  238. -- declarations
  239. local toolAnim = "None"
  240. local toolAnimTime = 0
  241.  
  242. local jumpAnimTime = 0
  243. local jumpAnimDuration = 0.3
  244.  
  245. local toolTransitionTime = 0.1
  246. local fallTransitionTime = 0.3
  247. local jumpMaxLimbVelocity = 0.75
  248.  
  249. -- functions
  250.  
  251. function stopAllAnimations()
  252.     local oldAnim = currentAnim
  253.  
  254.     -- return to idle if finishing an emote
  255.     if (emoteNames[oldAnim] ~= nil and emoteNames[oldAnim] == false) then
  256.         oldAnim = "idle"
  257.     end
  258.  
  259.     currentAnim = ""
  260.     currentAnimInstance = nil
  261.     if (currentAnimKeyframeHandler ~= nil) then
  262.         currentAnimKeyframeHandler:disconnect()
  263.     end
  264.  
  265.     if (currentAnimTrack ~= nil) then
  266.         currentAnimTrack:Stop()
  267.         currentAnimTrack:Destroy()
  268.         currentAnimTrack = nil
  269.     end
  270.     return oldAnim
  271. end
  272.  
  273. function setAnimationSpeed(speed)
  274.     if speed ~= currentAnimSpeed then
  275.         currentAnimSpeed = speed
  276.         currentAnimTrack:AdjustSpeed(currentAnimSpeed)
  277.     end
  278. end
  279.  
  280. function keyFrameReachedFunc(frameName)
  281.     if (frameName == "End") then
  282.  
  283.         local repeatAnim = currentAnim
  284.         -- return to idle if finishing an emote
  285.         if (emoteNames[repeatAnim] ~= nil and emoteNames[repeatAnim] == false) then
  286.             repeatAnim = "idle"
  287.         end
  288.        
  289.         local animSpeed = currentAnimSpeed
  290.         playAnimation(repeatAnim, 0.0, Humanoid)
  291.         setAnimationSpeed(animSpeed)
  292.     end
  293. end
  294.  
  295. -- Preload animations
  296. function playAnimation(animName, transitionTime, humanoid)
  297.        
  298.     local roll = math.random(1, animTable[animName].totalWeight)
  299.     local origRoll = roll
  300.     local idx = 1
  301.     while (roll > animTable[animName][idx].weight) do
  302.         roll = roll - animTable[animName][idx].weight
  303.         idx = idx + 1
  304.     end
  305. --      print(animName .. " " .. idx .. " [" .. origRoll .. "]")
  306.     local anim = animTable[animName][idx].anim
  307.  
  308.     -- switch animation    
  309.     if (anim ~= currentAnimInstance) then
  310.        
  311.         if (currentAnimTrack ~= nil) then
  312.             currentAnimTrack:Stop(transitionTime)
  313.             currentAnimTrack:Destroy()
  314.         end
  315.  
  316.         currentAnimSpeed = 1.0
  317.    
  318.         -- load it to the humanoid; get AnimationTrack
  319.         currentAnimTrack = humanoid:LoadAnimation(anim)
  320.         currentAnimTrack.Priority = Enum.AnimationPriority.Core
  321.          
  322.         -- play the animation
  323.         currentAnimTrack:Play(transitionTime)
  324.         currentAnim = animName
  325.         currentAnimInstance = anim
  326.  
  327.         -- set up keyframe name triggers
  328.         if (currentAnimKeyframeHandler ~= nil) then
  329.             currentAnimKeyframeHandler:disconnect()
  330.         end
  331.         currentAnimKeyframeHandler = currentAnimTrack.KeyframeReached:connect(keyFrameReachedFunc)
  332.        
  333.     end
  334.  
  335. end
  336.  
  337. -------------------------------------------------------------------------------------------
  338. -------------------------------------------------------------------------------------------
  339.  
  340. local toolAnimName = ""
  341. local toolAnimTrack = nil
  342. local toolAnimInstance = nil
  343. local currentToolAnimKeyframeHandler = nil
  344.  
  345. function toolKeyFrameReachedFunc(frameName)
  346.     if (frameName == "End") then
  347. --      print("Keyframe : ".. frameName)   
  348.         playToolAnimation(toolAnimName, 0.0, Humanoid)
  349.     end
  350. end
  351.  
  352.  
  353. function playToolAnimation(animName, transitionTime, humanoid, priority)     
  354.        
  355.         local roll = math.random(1, animTable[animName].totalWeight)
  356.         local origRoll = roll
  357.         local idx = 1
  358.         while (roll > animTable[animName][idx].weight) do
  359.             roll = roll - animTable[animName][idx].weight
  360.             idx = idx + 1
  361.         end
  362. --      print(animName .. " * " .. idx .. " [" .. origRoll .. "]")
  363.         local anim = animTable[animName][idx].anim
  364.  
  365.         if (toolAnimInstance ~= anim) then
  366.            
  367.             if (toolAnimTrack ~= nil) then
  368.                 toolAnimTrack:Stop()
  369.                 toolAnimTrack:Destroy()
  370.                 transitionTime = 0
  371.             end
  372.                    
  373.             -- load it to the humanoid; get AnimationTrack
  374.             toolAnimTrack = humanoid:LoadAnimation(anim)
  375.             if priority then
  376.                 toolAnimTrack.Priority = priority
  377.             end
  378.              
  379.             -- play the animation
  380.             toolAnimTrack:Play(transitionTime)
  381.             toolAnimName = animName
  382.             toolAnimInstance = anim
  383.  
  384.             currentToolAnimKeyframeHandler = toolAnimTrack.KeyframeReached:connect(toolKeyFrameReachedFunc)
  385.         end
  386. end
  387.  
  388. function stopToolAnimations()
  389.     local oldAnim = toolAnimName
  390.  
  391.     if (currentToolAnimKeyframeHandler ~= nil) then
  392.         currentToolAnimKeyframeHandler:disconnect()
  393.     end
  394.  
  395.     toolAnimName = ""
  396.     toolAnimInstance = nil
  397.     if (toolAnimTrack ~= nil) then
  398.         toolAnimTrack:Stop()
  399.         toolAnimTrack:Destroy()
  400.         toolAnimTrack = nil
  401.     end
  402.  
  403.  
  404.     return oldAnim
  405. end
  406.  
  407. -------------------------------------------------------------------------------------------
  408. -------------------------------------------------------------------------------------------
  409.  
  410.  
  411. function onRunning(speed)
  412.     if speed > 0.01 then
  413.         playAnimation("walk", 0.1, Humanoid)
  414.         if currentAnimInstance and currentAnimInstance.AnimationId == "http://www.roblox.com/asset/?id=180426354" then
  415.             setAnimationSpeed(speed / 14.5)
  416.         end
  417.         pose = "Running"
  418.     else
  419.         if emoteNames[currentAnim] == nil then
  420.             playAnimation("idle", 0.1, Humanoid)
  421.             pose = "Standing"
  422.         end
  423.     end
  424. end
  425.  
  426. function onDied()
  427.     pose = "Dead"
  428. end
  429.  
  430. function onJumping()
  431.     playAnimation("jump", 0.1, Humanoid)
  432.     jumpAnimTime = jumpAnimDuration
  433.     pose = "Jumping"
  434. end
  435.  
  436. function onClimbing(speed)
  437.     playAnimation("climb", 0.1, Humanoid)
  438.     setAnimationSpeed(speed / 12.0)
  439.     pose = "Climbing"
  440. end
  441.  
  442. function onGettingUp()
  443.     pose = "GettingUp"
  444. end
  445.  
  446. function onFreeFall()
  447.     if (jumpAnimTime <= 0) then
  448.         playAnimation("fall", fallTransitionTime, Humanoid)
  449.     end
  450.     pose = "FreeFall"
  451. end
  452.  
  453. function onFallingDown()
  454.     pose = "FallingDown"
  455. end
  456.  
  457. function onSeated()
  458.     pose = "Seated"
  459. end
  460.  
  461. function onPlatformStanding()
  462.     pose = "PlatformStanding"
  463. end
  464.  
  465. function onSwimming(speed)
  466.     if speed > 0 then
  467.         pose = "Running"
  468.     else
  469.         pose = "Standing"
  470.     end
  471. end
  472.  
  473. function getTool() 
  474.     for _, kid in ipairs(Figure:GetChildren()) do
  475.         if kid.className == "Tool" then return kid end
  476.     end
  477.     return nil
  478. end
  479.  
  480. function getToolAnim(tool)
  481.     for _, c in ipairs(tool:GetChildren()) do
  482.         if c.Name == "toolanim" and c.className == "StringValue" then
  483.             return c
  484.         end
  485.     end
  486.     return nil
  487. end
  488.  
  489. function animateTool()
  490.    
  491.     if (toolAnim == "None") then
  492.         playToolAnimation("toolnone", toolTransitionTime, Humanoid, Enum.AnimationPriority.Idle)
  493.         return
  494.     end
  495.  
  496.     if (toolAnim == "Slash") then
  497.         playToolAnimation("toolslash", 0, Humanoid, Enum.AnimationPriority.Action)
  498.         return
  499.     end
  500.  
  501.     if (toolAnim == "Lunge") then
  502.         playToolAnimation("toollunge", 0, Humanoid, Enum.AnimationPriority.Action)
  503.         return
  504.     end
  505. end
  506.  
  507. function moveSit()
  508.     RightShoulder.MaxVelocity = 0.15
  509.     LeftShoulder.MaxVelocity = 0.15
  510.     RightShoulder:SetDesiredAngle(3.14 /2)
  511.     LeftShoulder:SetDesiredAngle(-3.14 /2)
  512.     RightHip:SetDesiredAngle(3.14 /2)
  513.     LeftHip:SetDesiredAngle(-3.14 /2)
  514. end
  515.  
  516. local lastTick = 0
  517.  
  518. function move(time)
  519.     local amplitude = 1
  520.     local frequency = 1
  521.     local deltaTime = time - lastTick
  522.     lastTick = time
  523.  
  524.     local climbFudge = 0
  525.     local setAngles = false
  526.  
  527.     if (jumpAnimTime > 0) then
  528.         jumpAnimTime = jumpAnimTime - deltaTime
  529.     end
  530.  
  531.     if (pose == "FreeFall" and jumpAnimTime <= 0) then
  532.         playAnimation("fall", fallTransitionTime, Humanoid)
  533.     elseif (pose == "Seated") then
  534.         playAnimation("sit", 0.5, Humanoid)
  535.         return
  536.     elseif (pose == "Running") then
  537.         playAnimation("walk", 0.1, Humanoid)
  538.     elseif (pose == "Dead" or pose == "GettingUp" or pose == "FallingDown" or pose == "Seated" or pose == "PlatformStanding") then
  539. --      print("Wha " .. pose)
  540.         stopAllAnimations()
  541.         amplitude = 0.1
  542.         frequency = 1
  543.         setAngles = true
  544.     end
  545.  
  546.     if (setAngles) then
  547.         local desiredAngle = amplitude * math.sin(time * frequency)
  548.  
  549.         RightShoulder:SetDesiredAngle(desiredAngle + climbFudge)
  550.         LeftShoulder:SetDesiredAngle(desiredAngle - climbFudge)
  551.         RightHip:SetDesiredAngle(-desiredAngle)
  552.         LeftHip:SetDesiredAngle(-desiredAngle)
  553.     end
  554.  
  555.     -- Tool Animation handling
  556.     local tool = getTool()
  557.     if tool and tool:FindFirstChild("Handle") then
  558.    
  559.         local animStringValueObject = getToolAnim(tool)
  560.  
  561.         if animStringValueObject then
  562.             toolAnim = animStringValueObject.Value
  563.             -- message recieved, delete StringValue
  564.             animStringValueObject.Parent = nil
  565.             toolAnimTime = time + .3
  566.         end
  567.  
  568.         if time > toolAnimTime then
  569.             toolAnimTime = 0
  570.             toolAnim = "None"
  571.         end
  572.  
  573.         animateTool()      
  574.     else
  575.         stopToolAnimations()
  576.         toolAnim = "None"
  577.         toolAnimInstance = nil
  578.         toolAnimTime = 0
  579.     end
  580. end
  581.  
  582. -- connect events
  583. Humanoid.Died:connect(onDied)
  584. Humanoid.Running:connect(onRunning)
  585. Humanoid.Jumping:connect(onJumping)
  586. Humanoid.Climbing:connect(onClimbing)
  587. Humanoid.GettingUp:connect(onGettingUp)
  588. Humanoid.FreeFalling:connect(onFreeFall)
  589. Humanoid.FallingDown:connect(onFallingDown)
  590. Humanoid.Seated:connect(onSeated)
  591. Humanoid.PlatformStanding:connect(onPlatformStanding)
  592. Humanoid.Swimming:connect(onSwimming)
  593.  
  594. -- setup emote chat hook
  595. game:GetService("Players").LocalPlayer.Chatted:connect(function(msg)
  596.     local emote = ""
  597.     if msg == "/e dance" then
  598.         emote = dances[math.random(1, #dances)]
  599.     elseif (string.sub(msg, 1, 3) == "/e ") then
  600.         emote = string.sub(msg, 4)
  601.     elseif (string.sub(msg, 1, 7) == "/emote ") then
  602.         emote = string.sub(msg, 8)
  603.     end
  604.    
  605.     if (pose == "Standing" and emoteNames[emote] ~= nil) then
  606.         playAnimation(emote, 0.1, Humanoid)
  607.     end
  608.  
  609. end)
  610.  
  611.  
  612. -- main program
  613.  
  614. -- initialize to idle
  615. playAnimation("idle", 0.1, Humanoid)
  616. pose = "Standing"
  617.  
  618. while Figure.Parent ~= nil do
  619.     local _, time = wait(0.1)
  620.     move(time)
  621. end
  622.  
  623.  
  624.  
Add Comment
Please, Sign In to add comment