Advertisement
95audrey

Knife script

Mar 13th, 2016
1,530
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local tool=Instance.new("HopperBin", game.Players.LocalPlayer.Backpack)
  2. tool.Name="Knife"
  3.  
  4. wait()
  5. script.Parent=tool
  6.  
  7. --Murderer knife action script, original code from The Mad Murderer, by loleris.
  8.  
  9. wait()
  10. local camera = game.Workspace.CurrentCamera
  11. local player = game.Players.LocalPlayer
  12. local character = player.Character
  13. local humanoid = character.Humanoid
  14. local head = character.Head
  15. local torso = character.Torso
  16. local pl_mouse = player:GetMouse()
  17.  
  18. local rs = game:GetService("RunService")
  19.  
  20. local stab_damage = 10
  21. local walkspeeds = {16, 19}
  22.  
  23. Settings = {
  24.     Equip_time = 0.4,
  25.     Idle_speed = 5,
  26.     Attack_speed = 0.65,
  27. }
  28.  
  29. local assetlink = "http://www.roblox.com/asset/?id="
  30. local hit_sounds = {"153647516", "153647519", "153647522", "153647526"}
  31. local death_sounds = {"146594640", "146594648", "146457047"}
  32. function Clean(obj)
  33.     spawn(function()
  34.         wait(6)
  35.         obj:remove()
  36.     end)
  37. end
  38.  
  39. function HIT_HANDLE(hit, dmg, pos)
  40.     if hit == nil then return end
  41.     local h = hit.Parent:findFirstChild("Humanoid")
  42.     if h == nil then
  43.         h = hit.Parent.Parent:findFirstChild("Humanoid")
  44.     end
  45.     if h == nil then return end
  46.     if h.Health <= 0 then return end
  47.    
  48.     local head = h.Parent:findFirstChild("Head")
  49.     if head == nil then return end
  50.    
  51.     local sound_part = Instance.new("Part")
  52.     sound_part.formFactor = "Custom"
  53.     sound_part.Size = Vector3.new(0.2, 0.2, 0.2)
  54.     sound_part.Transparency = 1
  55.     sound_part.CanCollide = false
  56.     sound_part.Anchored = true
  57.     sound_part.CFrame = head.CFrame
  58.     Clean(sound_part)
  59.     sound_part.Parent = Workspace
  60.     local s_hit = Instance.new("Sound")
  61.     s_hit.Volume = 1
  62.     s_hit.SoundId = assetlink .. hit_sounds[math.random(1, #hit_sounds)]
  63.     s_hit.Parent = sound_part
  64.     local s_die = Instance.new("Sound")
  65.     s_die.Volume = 1
  66.     s_die.SoundId = assetlink .. death_sounds[math.random(1, #death_sounds)]
  67.     s_die.Parent = sound_part
  68.    
  69.     s_hit:play()
  70.    
  71.     local c_tag = Instance.new("ObjectValue")
  72.     c_tag.Name = "creator"
  73.     c_tag.Value = player
  74.     c_tag.Parent = h
  75.     h.Health=0
  76.     s_die:play()
  77. end
  78.  
  79. function GENERATE_IGNORELIST()
  80.     local result = {character, camera}
  81.     local plr = game.Players:GetPlayers()
  82.     for i = 1, #plr do
  83.         if plr[i] ~= player then
  84.             local char = plr[i].Character
  85.             if char ~= nil then
  86.                 local ch = char:GetChildren()
  87.                 for i = 1, #ch do
  88.                     if ch[i]:IsA("Hat") or ch[i]:IsA("Tool") then
  89.                         result[#result + 1] = ch[i]
  90.                     end
  91.                 end
  92.             end
  93.         end
  94.     end
  95.     return result
  96. end
  97.  
  98. function RayCast(pos1, pos2, dist, ign)
  99.     local ray = Ray.new(
  100.         pos1,
  101.         (pos2 - pos1).unit * math.abs(dist)
  102.     )
  103.     local hit, hpos = Workspace:FindPartOnRayWithIgnoreList(ray, ign, false)
  104.     return hit, hpos
  105. end
  106.  
  107. local larm = character:findFirstChild("Left Arm")
  108. local rarm = character:findFirstChild("Right Arm")
  109. function Slash(del)
  110.     coroutine.resume(coroutine.create(function()
  111.         local hits = {}
  112.        
  113.         local start = tick()
  114.         local actv = true
  115.        
  116.         local function ishitted(obj)
  117.             for i = 1, #hits do
  118.                 if obj:IsDescendantOf(hits[i]) then
  119.                     return true
  120.                 end
  121.             end
  122.             return false
  123.         end
  124.        
  125.         local function hitp(hit)
  126.             if ishitted(hit) then return end
  127.             local h = hit.Parent:findFirstChild("Humanoid")
  128.             if h == nil then
  129.                 h = hit.Parent.Parent:findFirstChild("Humanoid")
  130.             end
  131.             if h == nil then return end
  132.             hits[#hits + 1] = h.Parent
  133.             HIT_HANDLE(hit, stab_damage)
  134.         end
  135.        
  136.         local con = {
  137.             larm.Touched:connect(hitp),
  138.             rarm.Touched:connect(hitp),
  139.         }
  140.        
  141.         while tick() - start <= Settings.Attack_speed do wait() end
  142.         actv = false
  143.         con[1]:disconnect()
  144.         con[2]:disconnect()
  145.     end))
  146. end
  147.  
  148. local dg_sounds = {
  149.     equip = {
  150.         "153647514"
  151.     },
  152.     hit = {
  153.         "153647516",
  154.         "153647519",
  155.         "153647522",
  156.         "153647526"
  157.     },
  158.     swing = {
  159.         "153647529",
  160.         "153647534",
  161.         "153647539",
  162.         "153647540"
  163.     }
  164. }
  165.  
  166. local dg_soundobj = {}
  167. for k, v in pairs(dg_sounds) do
  168.     dg_soundobj[k] = {}
  169.     for i = 1, #v do
  170.         local ns = Instance.new("Sound")
  171.         ns.SoundId = assetlink .. v[i]
  172.         ns.Volume = 1
  173.         dg_soundobj[k][#dg_soundobj[k] + 1] = ns
  174.     end
  175. end
  176.  
  177. function LoadSounds()
  178.     for __, v in pairs(dg_soundobj) do
  179.         for i = 1, #v do
  180.             v[i].Parent = head
  181.         end
  182.     end
  183. end
  184. function RemoveSounds()
  185.     for __, v in pairs(dg_soundobj) do
  186.         for i = 1, #v do
  187.             v[i].Parent = nil
  188.         end
  189.     end
  190. end
  191. function PlaySound(nm, dl)
  192.     if dl == nil then
  193.         dg_soundobj[nm][math.random(1, #dg_soundobj[nm])]:play()
  194.     else
  195.         coroutine.resume(coroutine.create(function()
  196.             wait(dl)
  197.             dg_soundobj[nm][math.random(1, #dg_soundobj[nm])]:play()
  198.         end))
  199.     end
  200. end
  201.  
  202. _G.MurderKnife_AnimType = "Default"
  203. _G.MurderKnife_AnimState = 0
  204.  
  205. function Animate(tp, st)
  206.     _G.MurderKnife_AnimType = tp
  207.     _G.MurderKnife_AnimState = st
  208. end
  209.  
  210. tool.Selected:connect(function(mouse) --Default, Idle1, Idle2, Attack1, Attack2
  211.     humanoid.WalkSpeed = walkspeeds[2]
  212.     mouse.Icon = assetlink .. "54019936"
  213.     Animate("Equip", 0)
  214.     LoadSounds()
  215.     PlaySound("equip", 0.1)
  216.    
  217.     local anim_equip = 1
  218.     local last_action = tick()
  219.     local idle_rand = math.random(4, 7)
  220.     local idle_perform = 0
  221.     local idle_type = 1
  222.    
  223.     local attack_perform = 0
  224.     local attack_type = 1
  225.    
  226.     local running = true
  227.     local last_c = tick()
  228.    
  229.     local click_start = tick()
  230.     mouse.Button1Down:connect(function()
  231.         if not running or anim_equip > 0 then return end
  232.         if tick() - attack_perform <= Settings.Attack_speed then return end
  233.         attack_perform = tick()
  234.         last_action = tick()
  235.         attack_type = math.random(1, 3)
  236.         idle_perform = 0
  237.         PlaySound("swing", 0.15)
  238.         Slash(0.17)
  239.     end)
  240.    
  241.     local conn = rs.RenderStepped:connect(function()
  242.         if not running then return end
  243.         local delta = tick() - last_c
  244.         last_c = tick()
  245.        
  246.         if anim_equip > 0 then
  247.             anim_equip = math.max(0, anim_equip - (delta / Settings.Equip_time))
  248.             Animate("Equip", 1 - anim_equip)
  249.         elseif tick() - attack_perform <= Settings.Attack_speed then
  250.             Animate("Attack" .. attack_type, (tick() - attack_perform) / Settings.Attack_speed)
  251.             idle_perform = 0
  252.         elseif tick() - idle_perform <= Settings.Idle_speed then
  253.             Animate("Idle" .. idle_type, (tick() - idle_perform) / Settings.Idle_speed)
  254.         else
  255.             Animate("Default", 0)
  256.         end
  257.        
  258.         if tick() - last_action >= idle_rand then
  259.             idle_rand = math.random(12, 20)
  260.             last_action = tick()
  261.             idle_perform = tick()
  262.             idle_type = math.random(1, 2)
  263.         end
  264.        
  265.     end)
  266.     tool.Deselected:connect(function() running = false conn:disconnect() end)
  267. end)
  268. tool.Deselected:connect(function()
  269.     RemoveSounds()
  270.     humanoid.WalkSpeed = walkspeeds[1]
  271. end)
  272.  
  273. --Murderer knife animation module, original code from The Mad Murderer, by loleris.
  274.  
  275. local mouse = pl_mouse
  276.  
  277. local conn_type = "Snap"
  278.  
  279. local anim_head = false
  280.  
  281. weapon_properties = {
  282.     mesh_id = "http://www.roblox.com/asset/?id=121944778",
  283.     texture_id = "http://www.roblox.com/asset/?id=121944805",  
  284.     scale = Vector3.new(0.6, 0.6, 0.6),
  285.     transparency = 0,
  286.     reflectance = 0,
  287.     brick_color = BrickColor.new("Really black"),
  288. }
  289.  
  290. --How did I make all of this? Magic. Didn't even need an animation editor :)
  291. Animations = {
  292.     Default = {
  293.         {{}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)}
  294.     },
  295.     Equip = {
  296.         {{}, 0, CFrame.new(0, 0, 0) * CFrame.Angles(-1.571, 0, 0), CFrame.new(0, 0, 0) * CFrame.Angles(-1.571, 0, 0), CFrame.new(0, -1.3, -0.5) * CFrame.Angles(-2.618, 0, 0)},
  297.         {{0.8, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.524, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(0, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  298.         {{0.2, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  299.     },
  300.     Idle1 = {
  301.         {{}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  302.         {{0.3, 2}, 0, CFrame.new(0.8, -0.301, 0.2) * CFrame.Angles(-0.35, 0, 0.872), CFrame.new(-0.201, 0, 0) * CFrame.Angles(0.523, 1.221, -0.699), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 1.221, 0)},
  303.         {{0.55, 2}, 0, CFrame.new(0.2, -0.5, 0.2) * CFrame.Angles(-0.14, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(0, 1.221, -0.175), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.746, 1.221, 0.174)},
  304.         {{0.15, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  305.     },
  306.     Idle2 = {
  307.         {{}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  308.         {{0.3, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.524, 0, 0.872), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, -0.175, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0.523, 0)},
  309.         {{0.3, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(0.349, 0, 0.523), CFrame.new(-0.201, 0, 0) * CFrame.Angles(0.174, 0.698, -0.524), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, -1.222, 0)},
  310.         {{0.2, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(0.61, 0, 0.349), CFrame.new(-0.201, 0, 0) * CFrame.Angles(0.139, 0.663, -0.489), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, -1.222, 0)},
  311.         {{0.2, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)}
  312.     },
  313.     Attack1 = {
  314.         {{}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  315.         {{0.25, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-1.048, 0, 0.349), CFrame.new(-0.201, 0, 0) * CFrame.Angles(0.872, 0.349, 0.087), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  316.         {{0.15, 2}, 0, CFrame.new(0.4, -0.101, 0.1) * CFrame.Angles(-1.571, 0, -0.35), CFrame.new(-0.301, -0.301, 0.1) * CFrame.Angles(-1.048, -0.175, -0.524), CFrame.new(0, -1.201, -0.801) * CFrame.Angles(-2.095, 0, 0)},
  317.         {{0.6, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)}
  318.     },
  319.     Attack2 = {
  320.         {{}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  321.         {{0.25, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.699, 0, 0.872), CFrame.new(-0.401, 0.3, 0.1) * CFrame.Angles(1.919, 2.443, -1.222), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  322.         {{0.15, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-1.048, 0, -0.524), CFrame.new(-0.5, -0.201, -0.101) * CFrame.Angles(0.523, 1.396, -0.873), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  323.         {{0.6, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)}
  324.     },
  325.     Attack3 = {
  326.         {{}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)},
  327.         {{0.25, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-1.397, 0, 0.174), CFrame.new(-0.401, -0.201, 0) * CFrame.Angles(1.396, 0.698, -1.571), CFrame.new(0, -1.3, -0.401) * CFrame.Angles(-2.444, 0, 0)},
  328.         {{0.15, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-1.397, 0, 0.174), CFrame.new(-0.401, 0.1, 0) * CFrame.Angles(0.349, 2.094, -0.524), CFrame.new(0, -1.3, 0.1) * CFrame.Angles(-3.84, 0, 0)},
  329.         {{0.6, 2}, 0, CFrame.new(0.4, -0.201, 0.2) * CFrame.Angles(-0.873, 0, 0.698), CFrame.new(-0.201, 0, 0) * CFrame.Angles(-0.175, 0.349, -0.262), CFrame.new(0, -0.95, -0.801) * CFrame.Angles(-1.571, 0, 0)} --Psst. Create a dummy, try setting position and angles of limbs and the weapon, save CFrame data to code. Easy? Yes. When making a single knife tool, it was all you needed.
  330.     }
  331. }
  332.  
  333.  
  334. function CFrameTrans(GetCFrame1, GetCFrame2, GetNumber)
  335.     local Diff2 = GetCFrame2.p - GetCFrame1.p
  336.     GetCFrame1_s = GetCFrame1 - GetCFrame1.p
  337.     GetCFrame2 = GetCFrame2 - GetCFrame2.p
  338.     local Diff = GetCFrame1_s:inverse() * GetCFrame2
  339.     local x1, y1, z1 = Diff:toEulerAnglesXYZ()
  340.     return (GetCFrame1 + (Diff2 * GetNumber)) * CFrame.Angles(x1 * GetNumber, y1 * GetNumber, z1 * GetNumber)
  341. end
  342.  
  343. function TransEff(x, type)
  344.     if type == 1 then
  345.         return x
  346.     elseif type == 2 then
  347.         return x*x*(3 - 2*x)
  348.     elseif type == 3 then
  349.         return math.sin(math.rad(x * 90))
  350.     elseif type == 4 then
  351.         return 1 - math.sin(math.rad((1 - x) * 90))
  352.     end
  353. end
  354.  
  355. function num_trans(n1, n2, x)
  356.     return n1 + ((n2 - n1) * x)
  357. end
  358.  
  359. function PlayAnimation(anim_name, tm) --return {left, right, wep, trans}
  360.     tm = math.min(1, math.max(0, tm))
  361.     local animd = Animations[anim_name]
  362.     if #animd == 1 then
  363.         return {animd[1][3], animd[1][4], animd[1][5], animd[1][2]}
  364.     else
  365.         local trans_from = 1
  366.         local trans_to = 1
  367.         local tm_left = tm
  368.         for i = 2, #animd do
  369.             tm_left = tm_left - animd[i][1][1]
  370.             if tm_left <= 0 then
  371.                 trans_from = i - 1
  372.                 trans_to = i
  373.                 break
  374.             end
  375.         end
  376.         local trans_amm = TransEff((animd[trans_to][1][1] + tm_left) / animd[trans_to][1][1], animd[trans_to][1][2])
  377.         return {
  378.             CFrameTrans(animd[trans_from][3], animd[trans_to][3], trans_amm),
  379.             CFrameTrans(animd[trans_from][4], animd[trans_to][4], trans_amm),
  380.             CFrameTrans(animd[trans_from][5], animd[trans_to][5], trans_amm),
  381.             num_trans(animd[trans_from][2], animd[trans_to][2], trans_amm)
  382.         }
  383.     end
  384. end
  385.  
  386. rot_amplitude_head = 20
  387. rot_amplitude_chest = 15
  388.  
  389. anim_p = {
  390.     cam_offset = CFrame.new(0.2, -0.37, 0.91) * CFrame.Angles(math.rad(0), math.rad(0), math.rad(0)),
  391.     aim_amp = 0.5,
  392.     aim_max_change = 4,
  393.     aim_retract = 15,
  394.     aim_max_deg = 20,
  395. }
  396.  
  397. local weapon_model = Instance.new("Part")
  398. weapon_model.CanCollide = false
  399. weapon_model.Name = "WeaponObject"
  400. weapon_model.formFactor = "Custom"
  401. weapon_model.Size = Vector3.new(0.2, 0.2, 0.2)
  402. weapon_model.TopSurface = 0
  403. weapon_model.BottomSurface = 0
  404. weapon_model.BrickColor = weapon_properties.brick_color
  405. weapon_model.Transparency = weapon_properties.transparency
  406. weapon_model.Reflectance = weapon_properties.reflectance
  407. local mesh = Instance.new("SpecialMesh", weapon_model)
  408. mesh.Scale = weapon_properties.scale
  409. mesh.MeshId = weapon_properties.mesh_id
  410. mesh.TextureId = weapon_properties.texture_id
  411.  
  412. torso = character.Torso
  413. head = character.Head
  414.  
  415. motors = {torso:findFirstChild("Left Shoulder"), torso:findFirstChild("Right Shoulder"), torso:findFirstChild("Neck")}
  416. welds = {nil, nil, nil}
  417. weapon_parts = {weapon_model:clone(), weapon_model:clone()}
  418. weapon_model = nil
  419.  
  420. function EndAnimation()
  421.     if motors[1] then
  422.         motors[1].Part1 = character:findFirstChild("Left Arm")
  423.     end
  424.     if motors[2] then
  425.         motors[2].Part1 = character:findFirstChild("Right Arm")
  426.     end
  427.     if motors[3] then
  428.         motors[3].Part1 = character:findFirstChild("Head")
  429.     end
  430.     if welds[1] then
  431.         welds[1]:remove()
  432.         welds[1] = nil
  433.     end
  434.     if welds[2] then
  435.         welds[2]:remove()
  436.         welds[2] = nil
  437.     end
  438.     if welds[3] then
  439.         welds[3]:remove()
  440.         welds[3] = nil
  441.     end
  442.     weapon_parts[1].Parent = nil
  443.     if weapon_model then
  444.         weapon_model.Parent = nil
  445.     end
  446.     coroutine.resume(coroutine.create(function()
  447.         local swm = weapon_model
  448.         wait()
  449.         swm.Parent = nil
  450.         wait(0.1)
  451.         swm.Parent =  nil
  452.         wait(0.5)
  453.         swm.Parent =  nil
  454.     end))
  455. end
  456.  
  457. local anim_model = Instance.new("Model")
  458. anim_model.Name = "WeaponAnimation"
  459. weapon_model = anim_model
  460.    
  461. local cam_larm = Instance.new("Part")
  462. cam_larm.Parent = anim_model
  463. cam_larm.BrickColor = BrickColor.new("Really black")
  464. cam_larm.formFactor = "Custom"
  465. cam_larm.Size = Vector3.new(0.2, 0.2, 0.2)
  466. cam_larm.TopSurface = 0
  467. cam_larm.BottomSurface = 0
  468. cam_larm.Transparency = 0.4
  469. cam_larm.CanCollide = false
  470. local hmesh = Instance.new("BlockMesh", cam_larm)
  471. hmesh.Scale = Vector3.new(5, 10, 5)
  472.  
  473. local cam_rarm = cam_larm:clone()
  474. cam_rarm.Parent = anim_model
  475.  
  476. function StartAnimation()
  477.     local check = {torso:findFirstChild("LeftWeld"), torso:findFirstChild("RightWeld"), torso:findFirstChild("HeadWeld")}
  478.     if check[1] then check[1]:remove() end
  479.     if check[2] then check[2]:remove() end
  480.     if check[3] then check[3]:remove() end
  481.     local check2 = {character:findFirstChild("WeaponObject"), camera:findFirstChild("WeaponAnimation")}
  482.     if check2[1] then check2[1].Parent = nil end
  483.     if check2[2] then check2[2].Parent = nil end
  484.     if motors[1] then
  485.         motors[1].Part1 = nil
  486.     end
  487.     if motors[2] then
  488.         motors[2].Part1 = nil
  489.     end
  490.     if motors[3] then
  491.         motors[3].Part1 = nil
  492.     end
  493.     welds = {Instance.new(conn_type), Instance.new(conn_type), Instance.new(conn_type)}
  494.     welds[1].Part0 = torso
  495.     welds[2].Part0 = torso
  496.     welds[3].Part0 = torso
  497.     welds[1].Part1 = character:findFirstChild("Left Arm")
  498.     welds[2].Part1 = character:findFirstChild("Right Arm")
  499.     welds[3].Part1 = character:findFirstChild("Head")
  500.     welds[1].Name = "LeftWeld"
  501.     welds[2].Name = "RightWeld"
  502.     welds[2].Name = "HeadWeld"
  503.     welds[1].C0 = CFrame.new(-1.5, 0, 0)
  504.     welds[2].C0 = CFrame.new(1.5, 0, 0)
  505.     welds[3].C0 = CFrame.new(0, 1.5, 0)
  506.     welds[1].Parent = torso
  507.     welds[2].Parent = torso
  508.     welds[3].Parent = torso
  509.    
  510.     weapon_parts[1].Parent = character
  511.     local wep_weld = Instance.new(conn_type)
  512.     wep_weld.Part0 = character:findFirstChild("Right Arm")
  513.     wep_weld.Part1 = weapon_parts[1]
  514.     wep_weld.C0 = CFrame.new()
  515.     wep_weld.Parent = weapon_parts[1]
  516.    
  517.     local weld1 = welds[1]
  518.     local weld2 = welds[2]
  519.     local weld3 = welds[3]
  520.    
  521.     local cam_welds = {Instance.new(conn_type), Instance.new(conn_type), Instance.new(conn_type)}
  522.     cam_welds[1].Part0 = torso
  523.     cam_welds[1].Part1 = cam_larm
  524.     cam_welds[1].Parent = cam_larm
  525.     cam_welds[2].Part0 = torso
  526.     cam_welds[2].Part1 = cam_rarm
  527.     cam_welds[2].Parent = cam_rarm
  528.     cam_welds[3].Part0 = cam_rarm
  529.     cam_welds[3].Part1 = weapon_parts[2]
  530.     cam_welds[3].Parent = weapon_parts[2]
  531.     weapon_parts[2].Parent = anim_model
  532.    
  533.     local move_anim_speed = 3
  534.     local last_p = Vector3.new()
  535.     local move_amm = 0
  536.     coroutine.resume(coroutine.create(function()
  537.         while weld1.Parent ~= nil do
  538.             local delta = wait(1/25)
  539.             local cur_p = torso.Position
  540.             if (cur_p - last_p).magnitude >= 0.1 then
  541.                 move_amm = math.min(1, move_amm + delta * move_anim_speed)
  542.             else
  543.                 move_amm = math.max(0, move_amm - delta * move_anim_speed)
  544.             end
  545.             last_p = cur_p
  546.         end
  547.     end))
  548.    
  549.     local r_serv = game:GetService("RunService")
  550.    
  551.     --EASTER EGG
  552.     function easein(x)
  553.         return math.sin(math.rad(x * 90))
  554.     end
  555.  
  556.     local a_horse = (character:findFirstChild("HorseHead") ~= nil)
  557.     local horse_displace = {0, 0}
  558.     local horse_cf = CFrame.Angles(0.0001, 0.0001, 0)
  559.     if a_horse then
  560.         coroutine.resume(coroutine.create(function()
  561.             while weld1.Parent ~= nil do
  562.                 local rndwait = (math.random(100, 1000) / 1000) * 4
  563.                 wait(rndwait)
  564.                 local oldd = {horse_displace[1], horse_displace[2]}
  565.                 local disp2 = {math.random(-60, 60), math.random(0, 25)}
  566.                
  567.                 local ld = 0
  568.                 while ld ~= 1 do
  569.                     local st = tick()
  570.                     r_serv.RenderStepped:wait()
  571.                     ld = math.min(1, ld + ((tick() - st) * 4))
  572.                     local eff = easein(ld)
  573.                    
  574.                     local x = oldd[1] - ((oldd[1] - disp2[1]) * eff)
  575.                     local y = oldd[2] - ((oldd[2] - disp2[2]) * eff)
  576.                     horse_displace = {x, y}
  577.                     horse_cf = CFrame.Angles(math.rad(y), math.rad(x) , 0)
  578.                 end
  579.             end
  580.         end))
  581.     end
  582.    
  583.     --EASTER EGG
  584.    
  585.     local last_va = 0
  586.     local last_va2 = 0
  587.     local view_velocity = {0, 0}
  588.    
  589.     coroutine.resume(coroutine.create(function()
  590.         local last_time = tick()
  591.         while weld1.Parent ~= nil do
  592.             r_serv.RenderStepped:wait() ------------------------------------------------
  593.             local delta = tick() - last_time
  594.             last_time = tick()
  595.            
  596.             local breathe_amp = 2
  597.             local breathe_freq = 0.8
  598.             local breathe = math.sin(math.rad(tick() * 90 * breathe_freq)) * breathe_amp
  599.            
  600.             local shake_freq = 5
  601.             local shake_amp = {0.05, 0.05}
  602.             local arm_shake = CFrame.new(
  603.                 math.sin(math.rad(tick() * 90 * shake_freq)) * move_amm * shake_amp[1],
  604.                 0,
  605.                 math.abs(math.sin(math.rad(tick() * 90 * shake_freq)) * move_amm * shake_amp[2]))
  606.  
  607.  
  608.             --ANIMATION LOOP
  609.             local p_distance = (head.Position - mouse.Hit.p).magnitude
  610.             if p_distance == 0 then p_distance = 0.0001 end
  611.             local p_height = mouse.Hit.p.y - head.Position.y
  612.             local view_angle
  613.             if p_height ~= 0 then
  614.                 view_angle = math.deg(math.asin(math.abs(p_height) / p_distance)) * (math.abs(p_height) / p_height)
  615.             else
  616.                 view_angle = 0
  617.             end
  618.            
  619.             local cam_cf = camera.CoordinateFrame
  620.             local looking_at = cam_cf * CFrame.new(0, 0, -100)
  621.             local view_angle2 = math.deg(math.atan2(cam_cf.p.x - looking_at.p.x, cam_cf.p.z - looking_at.p.z)) + 180
  622.            
  623.             local v_delta1, v_delta2
  624.             local dir1 = 0
  625.             local dir2 = 0
  626.             v_delta1 = math.abs(view_angle - last_va)
  627.             if v_delta1 ~= 0 then
  628.                 dir1 = (view_angle - last_va) / v_delta1
  629.             end
  630.             local va_check = {math.abs(view_angle2 - last_va2), 360 - math.abs(view_angle2 - last_va2)}
  631.             if view_angle2 == last_va2 then
  632.                 dir2 = 0
  633.                 v_delta2 = 0
  634.             elseif va_check[1] < va_check[2] then
  635.                 v_delta2 = va_check[1]
  636.                 dir2 = (view_angle2 - last_va2) / va_check[1]
  637.             else
  638.                 v_delta2 = va_check[2]
  639.                 if last_va2 > view_angle2 then
  640.                     dir2 = 1
  641.                 else
  642.                     dir2 = -1
  643.                 end
  644.             end
  645.             last_va = view_angle
  646.             last_va2 = view_angle2
  647.            
  648.             view_velocity[1] = view_velocity[1] / (1 + (delta * anim_p.aim_retract))
  649.             view_velocity[2] = view_velocity[2] / (1 + (delta * anim_p.aim_retract))
  650.            
  651.             local calc1 = v_delta1 * dir1 * anim_p.aim_amp
  652.             if calc1 ~= 0 then
  653.                 view_velocity[1] = view_velocity[1] + (math.min(anim_p.aim_max_change, math.abs(calc1)) * (calc1 / math.abs(calc1)))
  654.             end
  655.             local calc2 = v_delta2 * dir2 * anim_p.aim_amp
  656.             if calc2 ~= 0 then
  657.                 view_velocity[2] = view_velocity[2] + (math.min(anim_p.aim_max_change, math.abs(calc2)) * (calc2 / math.abs(calc2)))
  658.             end
  659.            
  660.             if view_velocity[1] ~= 0 then
  661.                 view_velocity[1] = math.min(anim_p.aim_max_deg, math.abs(view_velocity[1])) * (math.abs(view_velocity[1]) / view_velocity[1])
  662.             end
  663.             if view_velocity[2] ~= 0 then
  664.                 view_velocity[2] = math.min(anim_p.aim_max_deg, math.abs(view_velocity[2])) * (math.abs(view_velocity[2]) / view_velocity[2])
  665.             end
  666.            
  667.             local anmtp = _G.MurderKnife_AnimType
  668.             local anmst = _G.MurderKnife_AnimState
  669.            
  670.             if anmst == nil then
  671.                 anmst = 0
  672.             end
  673.            
  674.             if anmtp ~= nil then
  675.                 if Animations[anmtp] == nil then
  676.                     anmtp = "Default"
  677.                 end
  678.             else
  679.                 anmtp = "Default"
  680.             end
  681.             local curr_anim = PlayAnimation(anmtp, anmst) --left, right, weapon, wep trans
  682.            
  683.             --curr_anim = {Animations.Default[1][3], Animations.Default[1][4], Animations.Default[1][5], 0}
  684.            
  685.             local chestCF = CFrame.new(0, 0.5, 0) * CFrame.Angles(math.rad(math.max(-rot_amplitude_chest, math.min(rot_amplitude_chest, view_angle)) + 90 + breathe), 0, 0)
  686.             weld1.C1 = (chestCF * curr_anim[1] * CFrame.new(0, -0.5, 0)):inverse()
  687.             weld2.C1 = (chestCF * curr_anim[2] * CFrame.new(0, -0.5, 0)):inverse()
  688.             wep_weld.C1 = (curr_anim[3]):inverse()
  689.             weapon_parts[1].Transparency = curr_anim[4]
  690.             if anim_head then
  691.                 weld3.C1 = (CFrame.new(0, 0, 0) * CFrame.Angles(math.rad(math.max(-rot_amplitude_head, math.min(rot_amplitude_head, view_angle))), 0, 0) * horse_cf):inverse()
  692.             else
  693.                 weld3.C1 = (CFrame.new(0, 0, 0)):inverse()
  694.             end
  695.            
  696.             if (head.Position - camera.CoordinateFrame.p).magnitude < 3 then
  697.                 if anim_model.Parent == nil then
  698.                     anim_model.Parent = camera
  699.                 end
  700.                 cam_welds[1].Parent = cam_larm
  701.                 cam_welds[2].Parent = cam_rarm
  702.                 cam_welds[3].Parent = weapon_parts[2]
  703.                 local cam_cf = camera.CoordinateFrame * CFrame.Angles(math.rad(90 + (breathe / 2) - view_velocity[1]), 0, math.rad(view_velocity[2])) * arm_shake * anim_p.cam_offset
  704.                 cam_welds[1].C1 = (torso.CFrame:inverse() * cam_cf * CFrame.new(-1.5, 0, 0) * curr_anim[1] * CFrame.new(0, -0.5, 0)):inverse()
  705.                 cam_welds[2].C1 = (torso.CFrame:inverse() * cam_cf * CFrame.new(1.5, 0, 0) * curr_anim[2] * CFrame.new(0, -0.5, 0)):inverse()
  706.                 cam_welds[3].C1 = (curr_anim[3]):inverse()
  707.                 weapon_parts[2].Transparency = curr_anim[4]
  708.             else
  709.                 if anim_model.Parent ~= nil then
  710.                     anim_model.Parent = nil
  711.                 end
  712.             end
  713.             --ANIMATION LOOP
  714.         end
  715.     end))
  716. end
  717.  
  718. local last_st = 0
  719. local eq = false
  720. tool.Selected:connect(function(mouse)
  721.     if eq then return end
  722.     eq = true
  723.     wait()
  724.     StartAnimation()
  725. end)
  726.  
  727. tool.Deselected:connect(function()
  728.     eq = false
  729.     EndAnimation()
  730. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement