Advertisement
MajourScripters

Animation Script[LUA, This Was Already Leeked, Dont Blame]

Mar 14th, 2016
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 35.29 KB | None | 0 0
  1. --[[Animations]]--
  2. --[[Dont Blame Me, This Was Already Leeked!]]--
  3. --NOTE: This version uses a hack to create a second part for shirt textures
  4. --                Mesh behavior may change to where this hack will become un-needed
  5. --                Let me know if you want me to create a toggle for this
  6.  
  7. Player = game.Players.localPlayer
  8.  
  9.  
  10. local function CharacterAdded(Character)
  11.                 if Character then
  12.                        
  13.                         local R15Model = Instance.new("Model")
  14.                         R15Model.Name = "R15Model"
  15.                         R15Model.Parent = Character
  16.                        
  17.                         local function CreateLimb(Name,Color,Size,Transparency,ConnectToLimb,MotorName,C0,C1,MeshId)
  18.                                 local Part = Instance.new("Part")
  19.                                 Part.FormFactor = "Custom"
  20.                                 Part.Size = Size
  21.                                 Part.BrickColor = Color
  22.                                 Part.CanCollide = false
  23.                                 Part.Name = Name
  24.                                 Part.Transparency = (Transparency == 0.001 and 0 or Transparency)
  25.                                 Part.TopSurface = "Smooth"
  26.                                 Part.BottomSurface = "Smooth"
  27.                                
  28.                                 local Motor = Instance.new("Motor6D")
  29.                                 Motor.C0 = C0
  30.                                 Motor.C1 = C1
  31.                                 Motor.Part0 = ConnectToLimb
  32.                                 Motor.Part1 = Part
  33.                                 Motor.Name = MotorName
  34.                                 Motor.MaxVelocity = 0.1
  35.                                 Motor.Parent = ConnectToLimb
  36.                                
  37.                                 if MeshId then
  38.                                         local Mesh = Instance.new("SpecialMesh")
  39.                                         Mesh.MeshType = "FileMesh"
  40.                                         Mesh.MeshId = MeshId
  41.                                         Mesh.Scale = Vector3.new(0.99,0.99,0.99)
  42.                                         Mesh.Parent = Part
  43.                                 end
  44.                                
  45.                                 if MeshId and Transparency == 0.001 then
  46.                                         local ShirtTexturePart = Instance.new("Part")
  47.                                         ShirtTexturePart.FormFactor = "Custom"
  48.                                         ShirtTexturePart.Size = Size
  49.                                         ShirtTexturePart.BrickColor = Color
  50.                                         ShirtTexturePart.CanCollide = false
  51.                                         ShirtTexturePart.Name = "ShirtTexturePart"
  52.                                         ShirtTexturePart.Transparency = Transparency
  53.                                         ShirtTexturePart.TopSurface = "Smooth"
  54.                                         ShirtTexturePart.BottomSurface = "Smooth"
  55.                                        
  56.                                         local Mesh = Instance.new("SpecialMesh")
  57.                                         Mesh.MeshType = "FileMesh"
  58.                                         Mesh.MeshId = MeshId
  59.                                         Mesh.Parent = ShirtTexturePart
  60.                                        
  61.                                         local Weld = Instance.new("Weld")
  62.                                         Weld.Part0 = Part
  63.                                         Weld.Part1 = ShirtTexturePart
  64.                                         Weld.Parent = ShirtTexturePart
  65.                                        
  66.                                         ShirtTexturePart.Parent = Part
  67.                                 end
  68.                                 Part.Parent = R15Model
  69.                                 return Part
  70.                         end
  71.                        
  72.                         local HumanoidRootPart = CreateLimb("HumanoidRootPart",BrickColor.new("Medium stone grey"),Vector3.new(1,1,1),1,Character.HumanoidRootPart,"RootConnector",CFrame.new(),CFrame.new(0,0.7,0))
  73.                         local TorsoLower = CreateLimb("TorsoLower",BrickColor.new("Bright blue"),Vector3.new(0.5,0.5,0.5),0.001,HumanoidRootPart,"Root",CFrame.new(0, 0, 0, -1, 0, 0, 0, 1, 0, 0, 0, -1),CFrame.new(0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366190286")
  74.                         local TorsoUpper = CreateLimb("TorsoUpper",BrickColor.new("Bright blue"),Vector3.new(0.2,0.74,0.2),0.001,TorsoLower,"Waist",CFrame.new(0, 0.739968002, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),CFrame.new(0, -0.369984001, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366190087")
  75.                         local Head = CreateLimb("FakeHead",BrickColor.new("Bright yellow"),Vector3.new(1,1,1),0,TorsoUpper,"Neck",CFrame.new(0, 0.566236973, -0.0666489974, 1, 0, 0, 0, 0.993143976, 0.116898, 0, -0.116898, 0.993143976),CFrame.new(0, -0.285073012, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366190426")
  76.                         local LeftArmUpper = CreateLimb("LeftArmUpper",BrickColor.new("Bright yellow"),Vector3.new(0.2,0.536,0.2),0.001,TorsoUpper,"LeftShoulder",CFrame.new(1.50177097, 0.220340997, 0, 0, -0.999044001, -0.0437170006, -1, 0, 0, 0, 0.0437170006, -0.999044001),CFrame.new(0, 0.336115986, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366186808")
  77.                         local LeftArmLower = CreateLimb("LeftArmLower",BrickColor.new("Bright yellow"),Vector3.new(0.2,0.739,0.2),0.001,LeftArmUpper,"LeftElbow",CFrame.new(0, -0.267791986, 0, 1, 0, 0, 0, 0.998493016, -0.0548710003, 0, 0.0548710003, 0.998493016),CFrame.new(0, 0.369605988, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366187079")
  78.                         local LeftHand = CreateLimb("LeftHand",BrickColor.new("Bright yellow"),Vector3.new(0.2,0.37,0.2),0.001,LeftArmLower,"LeftWrist",CFrame.new(0, -0.369605988, 0, 1, 0, 0, 0, -1, 0, 0, 0, -1),CFrame.new(0, -0.184802994, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366187331")
  79.                         local RightArmUpper = CreateLimb("RightArmUpper",BrickColor.new("Bright yellow"),Vector3.new(0.2,0.536,0.2),0.001,TorsoUpper,"RightShoulder",CFrame.new(-1.50049305, 0.219521001, 0, 0, 0.999041975, -0.0437709987, -1, 0, 0, 0, 0.0437709987, 0.999041975),CFrame.new(0, 0.335705996, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366188623")
  80.                         local RightArmLower = CreateLimb("RightArmLower",BrickColor.new("Bright yellow"),Vector3.new(0.2,0.739,0.2),0.001,RightArmUpper,"RightElbow",CFrame.new(0, -0.296110988, 0, 1, 0, 0, 0, 0.998767972, 0.0496239997, 0, -0.0496239997, 0.998767972),CFrame.new(0, 0.337754011, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366188798")
  81.                         local RightHand = CreateLimb("RightHand",BrickColor.new("Bright yellow"),Vector3.new(),0.001,RightArmLower,"RightWrist",CFrame.new(0, -0.337754011, 0, 1, 0, 0, 0, -1, 0, 0, 0, -1),CFrame.new(0, -0.168877006, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366189081")
  82.                         local LeftLegUpper = CreateLimb("LeftLegUpper",BrickColor.new("Br. yellowish green"),Vector3.new(0.2,0.784,0.2),0.001,TorsoLower,"LeftHip",CFrame.new(0.457044005, -0.495086014, 0, 1, 0, 0, 0, 1, -0.000100999998, 0, 0.000100999998, 1),CFrame.new(0, 0.388933986, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366187724")
  83.                         local LeftLegLower = CreateLimb("LeftLegLower",BrickColor.new("Br. yellowish green"),Vector3.new(0.2,0.803,0.2),0.001,LeftLegUpper,"LeftKnee",CFrame.new(0, -0.388933986, 0, 1, 9.99999997e-007, 0, -9.99999997e-007, 0.991840005, -0.127486005, 0, 0.127486005, 0.991840005),CFrame.new(0, 0.401580006, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366188102")
  84.                         local LeftFoot = CreateLimb("LeftFoot",BrickColor.new("Br. yellowish green"),Vector3.new(0.2,0.402,0.2),0.001,LeftLegLower,"LeftAnkle",CFrame.new(0, -0.401578993, 0, 1, 0, 0, 0, -1, 0, 0, 0, -1),CFrame.new(0, -0.200790003, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366188387")
  85.                         local RightLegUpper = CreateLimb("RightLegUpper",BrickColor.new("Br. yellowish green"),Vector3.new(0.2,0.784,0.2),0.001,TorsoLower,"RightHip",CFrame.new(-0.451141, -0.498115987, 0, 1, 0, 0, 0, 0.999954998, 0.0095180003, 0, -0.0095180003, 0.999954998),CFrame.new(0, 0.391921997, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366189770")
  86.                         local RightLegLower = CreateLimb("RightLegLower",BrickColor.new("Br. yellowish green"),Vector3.new(0.2,0.796,0.2),0.001,RightLegUpper,"RightKnee",CFrame.new(0, -0.391921997, 0, 1, 0, 0, 0, 0.992762029, -0.120096996, 0, 0.120096996, 0.992762029),CFrame.new(0, 0.39814499, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366189509")
  87.                         local RightFoot = CreateLimb("RightFoot",BrickColor.new("Br. yellowish green"),Vector3.new(0.2, 0.398, 0.2),0.001,RightLegLower,"RightAnkle",CFrame.new(0, -0.39814499, 0, 1, 0, 0, 0, -1, 0, 0, 0, -1),CFrame.new(0, -0.199073002, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1),"http://www.roblox.com/asset/?id=366189977")
  88.                        
  89.                         --if Character:WaitForChild("Head"):WaitForChild("Mesh").MeshId ~= "" then
  90.                         --        Head.MeshId = Character.Head.Mesh.MeshId
  91.                         --end
  92.                        
  93.                         spawn(function() Character:WaitForChild("Animate").Disabled = false end)
  94.                        
  95.                        
  96.                         local function Clear(Name,Alternative,ColorParts)
  97.                                 local Part = Character:WaitForChild(Name)
  98.                                 Part.Transparency = (Name == "Head" and 0.99 or 1)
  99.                                 local function ChildAdded(Ins)
  100.                                         delay(0.05,function()
  101.                                                 if Ins.Name == "face" then
  102.                                                         if Alternative:FindFirstChild("face") then Alternative:FindFirstChild("face"):Destroy() end
  103.                                                         Ins.Parent = Alternative
  104.                                                 elseif Ins:IsA("Motor6D") and string.sub(Ins.Name,1,5) ~= "Fake_" then
  105.                                                         Ins.Name = "Fake_"..Ins.Name
  106.                                                 elseif Ins.Name == "HeadWeld" then
  107.                                                         delay(0.05,function()
  108.                                                                 Ins.Parent = Head
  109.                                                                 Ins.Part0 = Head
  110.                                                                 Ins.C1 = CFrame.new(0,-0.15,0.125) * Ins.C1 * CFrame.Angles(0,math.pi,0)
  111.                                                         end)
  112.                                                 elseif not Ins:IsA("Weld") then
  113.                                                         Ins:Destroy()
  114.                                                 end
  115.                                         end)
  116.                                 end
  117.                                 for _,Sub in pairs(Part:GetChildren()) do
  118.                                         ChildAdded(Sub)
  119.                                 end
  120.                                 Part.ChildAdded:connect(ChildAdded)
  121.                                
  122.                                 local function Color()
  123.                                         for _,Sub in pairs(ColorParts) do
  124.                                                 Sub.BrickColor = Part.BrickColor
  125.                                                 local TexturePart = Sub:FindFirstChild("ShirtTexturePart")
  126.                                                 if TexturePart then
  127.                                                         TexturePart.BrickColor = Part.BrickColor
  128.                                                 end
  129.                                         end
  130.                                 end
  131.                                 Color()
  132.                                 Part.Changed:connect(Color)
  133.                         end
  134.                        
  135.                         Clear("HumanoidRootPart",HumanoidRootPart,{HumanoidRootPart})
  136.                         Clear("Head",Head,{Head})
  137.                         Clear("Torso",nil,{TorsoLower,TorsoUpper})
  138.                         Clear("Left Arm",nil,{LeftArmLower,LeftArmUpper,LeftHand})
  139.                         Clear("Right Arm",nil,{RightArmLower,RightArmUpper,RightHand})
  140.                         Clear("Left Leg",nil,{LeftLegLower,LeftLegUpper,LeftFoot})
  141.                         Clear("Right Leg",nil,{RightLegLower,RightLegUpper,RightFoot})
  142.                        
  143.                         local ShirtUsed = false
  144.                         local function ChildAdded(Ins)
  145.                                 if Ins:IsA("Hat") and string.sub(Ins.Name,1,7) ~= "Scaled_" then
  146.                                         delay(0.05,function()
  147.                                                 local Mesh = Ins:WaitForChild("Handle"):WaitForChild("Mesh")
  148.                                                 Ins.AttachmentPos = Ins.AttachmentPos
  149.                                                 Mesh.Scale = Mesh.Scale
  150.                                                 Ins.Name = "Scaled_"..Ins.Name
  151.                                         end)
  152.                                 elseif Ins:IsA("Shirt") then
  153.                                         ShirtUsed = true
  154.                                         TorsoLower.ShirtTexturePart.Mesh.TextureId = Ins.ShirtTemplate
  155.                                         TorsoUpper.ShirtTexturePart.Mesh.TextureId = Ins.ShirtTemplate
  156.                                         LeftArmLower.ShirtTexturePart.Mesh.TextureId = Ins.ShirtTemplate
  157.                                         LeftArmUpper.ShirtTexturePart.Mesh.TextureId = Ins.ShirtTemplate
  158.                                         LeftHand.ShirtTexturePart.Mesh.TextureId = Ins.ShirtTemplate
  159.                                         RightArmLower.ShirtTexturePart.Mesh.TextureId = Ins.ShirtTemplate
  160.                                         RightArmUpper.ShirtTexturePart.Mesh.TextureId = Ins.ShirtTemplate
  161.                                         RightHand.ShirtTexturePart.Mesh.TextureId = Ins.ShirtTemplate
  162.                                 elseif Ins:IsA("Pants") then
  163.                                         LeftLegUpper.ShirtTexturePart.Mesh.TextureId = Ins.PantsTemplate
  164.                                         LeftLegLower.ShirtTexturePart.Mesh.TextureId = Ins.PantsTemplate
  165.                                         LeftFoot.ShirtTexturePart.Mesh.TextureId = Ins.PantsTemplate
  166.                                         RightLegUpper.ShirtTexturePart.Mesh.TextureId = Ins.PantsTemplate
  167.                                         RightLegLower.ShirtTexturePart.Mesh.TextureId = Ins.PantsTemplate
  168.                                         RightFoot.ShirtTexturePart.Mesh.TextureId = Ins.PantsTemplate
  169.                                         if ShirtUsed ~= true then
  170.                                                 TorsoLower.ShirtTexturePart.Mesh.TextureId = Ins.PantsTemplate
  171.                                                 TorsoUpper.ShirtTexturePart.Mesh.TextureId = Ins.PantsTemplate
  172.                                         end
  173.                                 end
  174.                         end
  175.                        
  176.                         for _,Sub in pairs(Character:GetChildren()) do
  177.                                 ChildAdded(Sub)
  178.                         end
  179.                         Character.ChildAdded:connect(ChildAdded)
  180.                 end
  181.         end
  182.        
  183.         CharacterAdded(Player.Character)
  184.         Player.CharacterAdded:connect(CharacterAdded)
  185.  
  186. script.Parent = game.Players.LocalPlayer.Character
  187. function   waitForChild(parent, childName)
  188.         local child = parent:findFirstChild(childName)
  189.         if child then return child end
  190.         while true do
  191.                 child = parent.ChildAdded:wait()
  192.                 if child.Name==childName then return child end
  193.         end
  194. end
  195.  
  196. local Figure = script.Parent
  197. local Humanoid = waitForChild(Figure, "Humanoid")
  198. local pose = "Standing"
  199.  
  200. local currentAnim = ""
  201. local currentAnimInstance = nil
  202. local currentAnimTrack = nil
  203. local currentAnimKeyframeHandler = nil
  204. local currentAnimSpeed = 1.0
  205. local animTable = {}
  206. local animNames = {
  207.         idle =         {        
  208.                                 { id = "http://www.roblox.com/asset/?id=361250879", weight = 1 },
  209.                                 { id = "http://www.roblox.com/asset/?id=361250964", weight = 1 },
  210.                                 { id = "http://www.roblox.com/asset/?id=361250801", weight = 9 }
  211.                         },
  212.         walk =         {        
  213.                                 { id = "http://www.roblox.com/asset/?id=361250532", weight = 10 }
  214.                         },
  215.         run =         {
  216.                                 { id = "http://www.roblox.com/asset/?id=361250532", weight = 10 }
  217.                         },
  218.         jump =         {
  219.                                 { id = "http://www.roblox.com/asset/?id=361251250", weight = 10 }
  220.                         },
  221.         fall =         {
  222.                                 { id = "http://www.roblox.com/asset/?id=361259102", weight = 10 }
  223.                         },
  224.         climb = {
  225.                                 { id = "http://www.roblox.com/asset/?id=361251073", weight = 10 }
  226.                         },
  227.         sit =         {
  228.                                 { id = "http://www.roblox.com/asset/?id=178130996", weight = 10 }
  229.                         },        
  230.         toolnone = {
  231.                                 { id = "http://www.roblox.com/asset/?id=182393478", weight = 10 }
  232.                         },
  233.         toolslash = {
  234.                                 { id = "http://www.roblox.com/asset/?id=129967390", weight = 10 }
  235. --                                { id = "slash.xml", weight = 10 }
  236.                         },
  237.         toollunge = {
  238.                                 { id = "http://www.roblox.com/asset/?id=129967478", weight = 10 }
  239.                         },
  240.         wave = {
  241.                                 { id = "http://www.roblox.com/asset/?id=128777973", weight = 10 }
  242.                         },
  243.         point = {
  244.                                 { id = "http://www.roblox.com/asset/?id=128853357", weight = 10 }
  245.                         },
  246.         dance = {
  247.                                 { id = "http://www.roblox.com/asset/?id=182435998", weight = 10 },
  248.                                 { id = "http://www.roblox.com/asset/?id=182491037", weight = 10 },
  249.                                 { id = "http://www.roblox.com/asset/?id=182491065", weight = 10 }
  250.                         },
  251.         dance2 = {
  252.                                 { id = "http://www.roblox.com/asset/?id=182436842", weight = 10 },
  253.                                 { id = "http://www.roblox.com/asset/?id=182491248", weight = 10 },
  254.                                 { id = "http://www.roblox.com/asset/?id=182491277", weight = 10 }
  255.                         },
  256.         dance3 = {
  257.                                 { id = "http://www.roblox.com/asset/?id=182436935", weight = 10 },
  258.                                 { id = "http://www.roblox.com/asset/?id=182491368", weight = 10 },
  259.                                 { id = "http://www.roblox.com/asset/?id=182491423", weight = 10 }
  260.                         },
  261.         laugh = {
  262.                                 { id = "http://www.roblox.com/asset/?id=129423131", weight = 10 }
  263.                         },
  264.         cheer = {
  265.                                 { id = "http://www.roblox.com/asset/?id=129423030", weight = 10 }
  266.                         },
  267. }
  268.  
  269. -- Existance in this list signifies that it is an emote, the value indicates if it is a looping emote
  270. local emoteNames = { wave = false, point = false, dance = true, dance2 = true, dance3 = true, laugh = false, cheer = false}
  271.  
  272. math.randomseed(tick())
  273.  
  274. function configureAnimationSet(name, fileList)
  275.         if (animTable[name] ~= nil) then
  276.                 for _, connection in pairs(animTable[name].connections) do
  277.                         connection:disconnect()
  278.                 end
  279.         end
  280.         animTable[name] = {}
  281.         animTable[name].count = 0
  282.         animTable[name].totalWeight = 0        
  283.         animTable[name].connections = {}
  284.  
  285.         -- check for config values
  286.         local config = script:FindFirstChild(name)
  287.         if (config ~= nil) then
  288. --                print("Loading anims " .. name)
  289.                 table.insert(animTable[name].connections, config.ChildAdded:connect(function(child) configureAnimationSet(name, fileList) end))
  290.                 table.insert(animTable[name].connections, config.ChildRemoved:connect(function(child) configureAnimationSet(name, fileList) end))
  291.                 local idx = 1
  292.                 for _, childPart in pairs(config:GetChildren()) do
  293.                         if (childPart:IsA("Animation")) then
  294.                                 table.insert(animTable[name].connections, childPart.Changed:connect(function(property) configureAnimationSet(name, fileList) end))
  295.                                 animTable[name][idx] = {}
  296.                                 animTable[name][idx].anim = childPart
  297.                                 local weightObject = childPart:FindFirstChild("Weight")
  298.                                 if (weightObject == nil) then
  299.                                         animTable[name][idx].weight = 1
  300.                                 else
  301.                                         animTable[name][idx].weight = weightObject.Value
  302.                                 end
  303.                                 animTable[name].count = animTable[name].count + 1
  304.                                 animTable[name].totalWeight = animTable[name].totalWeight + animTable[name][idx].weight
  305.         --                        print(name .. " [" .. idx .. "] " .. animTable[name][idx].anim.AnimationId .. " (" .. animTable[name][idx].weight .. ")")
  306.                                 idx = idx + 1
  307.                         end
  308.                 end
  309.         end
  310.  
  311.         -- fallback to defaults
  312.         if (animTable[name].count <= 0) then
  313.                 for idx, anim in pairs(fileList) do
  314.                         animTable[name][idx] = {}
  315.                         animTable[name][idx].anim = Instance.new("Animation")
  316.                         animTable[name][idx].anim.Name = name
  317.                         animTable[name][idx].anim.AnimationId = anim.id
  318.                         animTable[name][idx].weight = anim.weight
  319.                         animTable[name].count = animTable[name].count + 1
  320.                         animTable[name].totalWeight = animTable[name].totalWeight + anim.weight
  321. --                        print(name .. " [" .. idx .. "] " .. anim.id .. " (" .. anim.weight .. ")")
  322.                 end
  323.         end
  324. end
  325.  
  326. -- Setup animation objects
  327. function scriptChildModified(child)
  328.         local fileList = animNames[child.Name]
  329.         if (fileList ~= nil) then
  330.                 configureAnimationSet(child.Name, fileList)
  331.         end        
  332. end
  333.  
  334. script.ChildAdded:connect(scriptChildModified)
  335. script.ChildRemoved:connect(scriptChildModified)
  336.  
  337.  
  338. for name, fileList in pairs(animNames) do
  339.         configureAnimationSet(name, fileList)
  340. end        
  341.  
  342. -- ANIMATION
  343.  
  344. -- declarations
  345. local toolAnim = "None"
  346. local toolAnimTime = 0
  347.  
  348. local jumpAnimTime = 0
  349. local jumpAnimDuration = 0.3
  350.  
  351. local toolTransitionTime = 0.1
  352. local fallTransitionTime = 0.0
  353.  
  354. -- functions
  355.  
  356. function stopAllAnimations()
  357.         local oldAnim = currentAnim
  358.  
  359.         -- return to idle if finishing an emote
  360.         if (emoteNames[oldAnim] ~= nil and emoteNames[oldAnim] == false) then
  361.                 oldAnim = "idle"
  362.         end
  363.  
  364.         currentAnim = ""
  365.         currentAnimInstance = nil
  366.         if (currentAnimKeyframeHandler ~= nil) then
  367.                 currentAnimKeyframeHandler:disconnect()
  368.         end
  369.  
  370.         if (currentAnimTrack ~= nil) then
  371.                 currentAnimTrack:Stop()
  372.                 currentAnimTrack:Destroy()
  373.                 currentAnimTrack = nil
  374.         end
  375.         return oldAnim
  376. end
  377.  
  378. function setAnimationSpeed(speed)
  379.         if speed ~= currentAnimSpeed then
  380.                 currentAnimSpeed = speed
  381.                 currentAnimTrack:AdjustSpeed(currentAnimSpeed)
  382.         end
  383. end
  384.  
  385. function keyFrameReachedFunc(frameName)
  386.         if (frameName == "End") then
  387. --                print("Keyframe : ".. frameName)
  388.  
  389.                 local repeatAnim = currentAnim
  390.                 -- return to idle if finishing an emote
  391.                 if (emoteNames[repeatAnim] ~= nil and emoteNames[repeatAnim] == false) then
  392.                         repeatAnim = "idle"
  393.                 end
  394.                
  395.                 local animSpeed = currentAnimSpeed
  396.                 playAnimation(repeatAnim, 0.05, Humanoid)
  397.                 setAnimationSpeed(animSpeed)
  398.         end
  399. end
  400.  
  401. -- Preload animations
  402. function playAnimation(animName, transitionTime, humanoid)
  403.                
  404.         local roll = math.random(1, animTable[animName].totalWeight)
  405.         local origRoll = roll
  406.         local idx = 1
  407.         while (roll > animTable[animName][idx].weight) do
  408.                 roll = roll - animTable[animName][idx].weight
  409.                 idx = idx + 1
  410.         end
  411.        
  412. --        print(animName .. " " .. idx .. " [" .. origRoll .. "]")
  413.        
  414.         local anim = animTable[animName][idx].anim
  415.  
  416.         -- switch animation                
  417.         if (anim ~= currentAnimInstance) then
  418.                
  419.                 if (currentAnimTrack ~= nil) then
  420.                         currentAnimTrack:Stop(transitionTime)
  421.                         currentAnimTrack:Destroy()
  422.                 end
  423.  
  424.                 currentAnimSpeed = 1.0
  425.        
  426.                 -- load it to the humanoid; get AnimationTrack
  427.                 currentAnimTrack = humanoid:LoadAnimation(anim)
  428.                  
  429.                 -- play the animation
  430.                 currentAnimTrack:Play(transitionTime)
  431.                 currentAnim = animName
  432.                 currentAnimInstance = anim
  433.  
  434.                 -- set up keyframe name triggers
  435.                 if (currentAnimKeyframeHandler ~= nil) then
  436.                         currentAnimKeyframeHandler:disconnect()
  437.                 end
  438.                 currentAnimKeyframeHandler = currentAnimTrack.KeyframeReached:connect(keyFrameReachedFunc)
  439.                
  440.         end
  441.  
  442. end
  443.  
  444. -------------------------------------------------------------------------------------------
  445. -------------------------------------------------------------------------------------------
  446.  
  447. local toolAnimName = ""
  448. local toolAnimTrack = nil
  449. local toolAnimInstance = nil
  450. local currentToolAnimKeyframeHandler = nil
  451.  
  452. function toolKeyFrameReachedFunc(frameName)
  453.         if (frameName == "End") then
  454. --                print("Keyframe : ".. frameName)        
  455.                 playToolAnimation(toolAnimName, 0.0, Humanoid)
  456.         end
  457. end
  458.  
  459.  
  460. function playToolAnimation(animName, transitionTime, humanoid)        
  461.                
  462.                 local roll = math.random(1, animTable[animName].totalWeight)
  463.                 local origRoll = roll
  464.                 local idx = 1
  465.                 while (roll > animTable[animName][idx].weight) do
  466.                         roll = roll - animTable[animName][idx].weight
  467.                         idx = idx + 1
  468.                 end
  469. --                print(animName .. " * " .. idx .. " [" .. origRoll .. "]")
  470.                 local anim = animTable[animName][idx].anim
  471.  
  472.                 if (toolAnimInstance ~= anim) then
  473.                        
  474.                         if (toolAnimTrack ~= nil) then
  475.                                 toolAnimTrack:Stop()
  476.                                 toolAnimTrack:Destroy()
  477.                                 transitionTime = 0
  478.                         end
  479.                                        
  480.                         -- load it to the humanoid; get AnimationTrack
  481.                         toolAnimTrack = humanoid:LoadAnimation(anim)
  482.                          
  483.                         -- play the animation
  484.                         toolAnimTrack:Play(transitionTime)
  485.                         toolAnimName = animName
  486.                         toolAnimInstance = anim
  487.  
  488.                         currentToolAnimKeyframeHandler = toolAnimTrack.KeyframeReached:connect(toolKeyFrameReachedFunc)
  489.                 end
  490. end
  491.  
  492. function stopToolAnimations()
  493.         local oldAnim = toolAnimName
  494.  
  495.         if (currentToolAnimKeyframeHandler ~= nil) then
  496.                 currentToolAnimKeyframeHandler:disconnect()
  497.         end
  498.  
  499.         toolAnimName = ""
  500.         toolAnimInstance = nil
  501.         if (toolAnimTrack ~= nil) then
  502.                 toolAnimTrack:Stop()
  503.                 toolAnimTrack:Destroy()
  504.                 toolAnimTrack = nil
  505.         end
  506.  
  507.  
  508.         return oldAnim
  509. end
  510.  
  511. -------------------------------------------------------------------------------------------
  512. -------------------------------------------------------------------------------------------
  513.  
  514.  
  515. function onRunning(speed)
  516.         if speed > 0.01 then
  517.                 playAnimation("walk", 0.1, Humanoid)
  518.                 if currentAnimInstance and currentAnimInstance.AnimationId == "http://www.roblox.com/asset/?id=361250532" then
  519.                         setAnimationSpeed(speed / 14.5)
  520.                 end
  521.                 pose = "Running"
  522.         else
  523.                 playAnimation("idle", 0.1, Humanoid)
  524.                 pose = "Standing"
  525.         end
  526. end
  527.  
  528. function onDied()
  529.         pose = "Dead"
  530. end
  531.  
  532. function onJumping()
  533.         playAnimation("jump", 0.1, Humanoid)
  534.         jumpAnimTime = jumpAnimDuration
  535.         pose = "Jumping"
  536. end
  537.  
  538. function onClimbing(speed)
  539.         local scale = 2.0
  540.         playAnimation("climb", 0.1, Humanoid)
  541.         setAnimationSpeed(speed / scale)
  542.         pose = "Climbing"
  543. end
  544.  
  545. function onGettingUp()
  546.         pose = "GettingUp"
  547. end
  548.  
  549. function onFreeFall()
  550.         if (jumpAnimTime <= 0) then
  551.                 playAnimation("fall", fallTransitionTime, Humanoid)
  552.         end
  553.         pose = "FreeFall"
  554. end
  555.  
  556. function onFallingDown()
  557.         pose = "FallingDown"
  558. end
  559.  
  560. function onSeated()
  561.         pose = "Seated"
  562. end
  563.  
  564. function onPlatformStanding()
  565.         pose = "PlatformStanding"
  566. end
  567.  
  568. function onSwimming(speed)
  569.         if speed>0 then
  570.                 pose = "Running"
  571.         else
  572.                 pose = "Standing"
  573.         end
  574. end
  575.  
  576. function getTool()        
  577.         for _, kid in ipairs(Figure:GetChildren()) do
  578.                 if kid.className == "Tool" then return kid end
  579.         end
  580.         return nil
  581. end
  582.  
  583. function getToolAnim(tool)
  584.         for _, c in ipairs(tool:GetChildren()) do
  585.                 if c.Name == "toolanim" and c.className == "StringValue" then
  586.                         return c
  587.                 end
  588.         end
  589.         return nil
  590. end
  591.  
  592. function animateTool()
  593.        
  594.         if (toolAnim == "None") then
  595.                 playToolAnimation("toolnone", toolTransitionTime, Humanoid)
  596.                 return
  597.         end
  598.  
  599.         if (toolAnim == "Slash") then
  600.                 playToolAnimation("toolslash", 0, Humanoid)
  601.                 return
  602.         end
  603.  
  604.         if (toolAnim == "Lunge") then
  605.                 playToolAnimation("toollunge", 0, Humanoid)
  606.                 return
  607.         end
  608. end
  609.  
  610. function moveSit()
  611.         RightShoulder.MaxVelocity = 0.15
  612.         LeftShoulder.MaxVelocity = 0.15
  613.         RightShoulder:SetDesiredAngle(3.14 /2)
  614.         LeftShoulder:SetDesiredAngle(-3.14 /2)
  615.         RightHip:SetDesiredAngle(3.14 /2)
  616.         LeftHip:SetDesiredAngle(-3.14 /2)
  617. end
  618.  
  619. local lastTick = 0
  620.  
  621. function move(time)
  622.         local amplitude = 1
  623.         local frequency = 1
  624.           local deltaTime = time - lastTick
  625.           lastTick = time
  626.  
  627.         local climbFudge = 0
  628.         local setAngles = false
  629.  
  630.           if (jumpAnimTime > 0) then
  631.                   jumpAnimTime = jumpAnimTime - deltaTime
  632.           end
  633.  
  634.         if (pose == "FreeFall" and jumpAnimTime <= 0) then
  635.                 playAnimation("fall", fallTransitionTime, Humanoid)
  636.         elseif (pose == "Seated") then
  637.                 playAnimation("sit", 0.5, Humanoid)
  638.                 return
  639.         elseif (pose == "Running") then
  640.                 playAnimation("walk", 0.1, Humanoid)
  641.         elseif (pose == "Dead" or pose == "GettingUp" or pose == "FallingDown" or pose == "Seated" or pose == "PlatformStanding") then
  642. --                print("Wha " .. pose)
  643.                 stopAllAnimations()
  644.                 amplitude = 0.1
  645.                 frequency = 1
  646.                 setAngles = true
  647.         end
  648.  
  649. --        if (setAngles) then
  650.         if (false) then
  651.                 desiredAngle = amplitude * math.sin(time * frequency)
  652.  
  653.                 RightShoulder:SetDesiredAngle(desiredAngle + climbFudge)
  654.                 LeftShoulder:SetDesiredAngle(desiredAngle - climbFudge)
  655.                 RightHip:SetDesiredAngle(-desiredAngle)
  656.                 LeftHip:SetDesiredAngle(-desiredAngle)
  657.         end
  658.  
  659.         -- Tool Animation handling
  660.         local tool = getTool()
  661.         if tool then
  662.        
  663.                 animStringValueObject = getToolAnim(tool)
  664.  
  665.                 if animStringValueObject then
  666.                         toolAnim = animStringValueObject.Value
  667.                         -- message recieved, delete StringValue
  668.                         animStringValueObject.Parent = nil
  669.                         toolAnimTime = time + .3
  670.                 end
  671.  
  672.                 if time > toolAnimTime then
  673.                         toolAnimTime = 0
  674.                         toolAnim = "None"
  675.                 end
  676.  
  677.                 animateTool()                
  678.         else
  679.                 stopToolAnimations()
  680.                 toolAnim = "None"
  681.                 toolAnimInstance = nil
  682.                 toolAnimTime = 0
  683.         end
  684. end
  685.  
  686. -- connect events
  687. Humanoid.Died:connect(onDied)
  688. Humanoid.Running:connect(onRunning)
  689. Humanoid.Jumping:connect(onJumping)
  690. Humanoid.Climbing:connect(onClimbing)
  691. Humanoid.GettingUp:connect(onGettingUp)
  692. Humanoid.FreeFalling:connect(onFreeFall)
  693. Humanoid.FallingDown:connect(onFallingDown)
  694. Humanoid.Seated:connect(onSeated)
  695. Humanoid.PlatformStanding:connect(onPlatformStanding)
  696. Humanoid.Swimming:connect(onSwimming)
  697.  
  698. -- setup emote chat hook
  699. Game.Players.LocalPlayer.Chatted:connect(function(msg)
  700.         local emote = ""
  701.         if (string.sub(msg, 1, 3) == "/e ") then
  702.                 emote = string.sub(msg, 4)
  703.         elseif (string.sub(msg, 1, 7) == "/emote ") then
  704.                 emote = string.sub(msg, 8)
  705.         end
  706.        
  707.         if (pose == "Standing" and emoteNames[emote] ~= nil) then
  708.                 playAnimation(emote, 0.1, Humanoid)
  709.         end
  710. --        print("===> " .. string.sub(msg, 1, 3) .. "(" .. emote .. ")")
  711. end)
  712.  
  713.  
  714. -- main program
  715.  
  716. local runService = game:service("RunService");
  717.  
  718. -- print("bottom")
  719.  
  720. -- initialize to idle
  721. playAnimation("idle", 0.1, Humanoid)
  722. pose = "Standing"
  723.  
  724. while Figure.Parent~=nil do
  725.         local _, time = wait(0.1)
  726.         move(time)
  727. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement