View difference between Paste ID: 7m52WzEk and Su2Hs6BQ
SHOW: | | - or go back to the newest paste.
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 = 110
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)