View difference between Paste ID: ygyyRfEf and YmfLNuJ4
SHOW: | | - or go back to the newest paste.
1
warn("Made FE by AydenGamin's FE compatibility script. Link: https://pastebin.com/zxnXeDZA")
2
wait(1)
3
warn("Bypassing / Injecting into FE...")
4
wait(0.2)
5
warn("Done! Running script in 2 seconds!")
6
wait(2)
7
if game:GetService("RunService"):IsClient() then error("Script must be server-side in order to work; use h/ and not hl/") end
8
local Player,game,owner = owner,game
9
local RealPlayer = Player
10
do
11
	print("FE void script maker compatibility V2 by AydenGamin")
12
	local RealPlayer = RealPlayer
13
	script.Parent = RealPlayer.Character
14
 
15
	--Fake event to make stuff like Mouse.KeyDown work
16
	local Disconnect_Function = function(this)
17
		this[1].Functions[this[2]] = nil
18
	end
19
	local Disconnect_Metatable = {__index={disconnect=Disconnect_Function,Disconnect=Disconnect_Function}}
20
	local FakeEvent_Metatable = {__index={
21
		Connect = function(this,f)
22
			local i = tostring(math.random(0,10000))
23
			while this.Functions[i] do
24
				i = tostring(math.random(0,10000))
25
			end
26
			this.Functions[i] = f
27
			return setmetatable({this,i},Disconnect_Metatable)
28
		end
29
	}}
30
	FakeEvent_Metatable.__index.connect = FakeEvent_Metatable.__index.Connect
31
	local function fakeEvent()
32
		return setmetatable({Functions={}},FakeEvent_Metatable)
33
	end
34
 
35
	--Creating fake input objects with fake variables
36
    local FakeMouse = {Hit=CFrame.new(),KeyUp=fakeEvent(),KeyDown=fakeEvent(),Button1Up=fakeEvent(),Button1Down=fakeEvent(),Button2Up=fakeEvent(),Button2Down=fakeEvent()}
37
    FakeMouse.keyUp = FakeMouse.KeyUp
38
    FakeMouse.keyDown = FakeMouse.KeyDown
39
	local UIS = {InputBegan=fakeEvent(),InputEnded=fakeEvent()}
40
	local CAS = {Actions={},BindAction=function(self,name,fun,touch,...)
41
		CAS.Actions[name] = fun and {Name=name,Function=fun,Keys={...}} or nil
42
	end}
43
	--Merged 2 functions into one by checking amount of arguments
44
	CAS.UnbindAction = CAS.BindAction
45
 
46
	--This function will trigger the events that have been :Connect()'ed
47
	local function TriggerEvent(self,ev,...)
48
		for _,f in pairs(self[ev].Functions) do
49
			f(...)
50
		end
51
	end
52
	FakeMouse.TriggerEvent = TriggerEvent
53
	UIS.TriggerEvent = TriggerEvent
54
 
55
	--Client communication
56
	local Event = Instance.new("RemoteEvent")
57
	Event.Name = "UserInput_Event"
58
	Event.OnServerEvent:Connect(function(plr,io)
59
	    if plr~=RealPlayer then return end
60
		FakeMouse.Target = io.Target
61
		FakeMouse.Hit = io.Hit
62
		if not io.isMouse then
63
			local b = io.UserInputState == Enum.UserInputState.Begin
64
			if io.UserInputType == Enum.UserInputType.MouseButton1 then
65
				return FakeMouse:TriggerEvent(b and "Button1Down" or "Button1Up")
66
			end
67
			if io.UserInputType == Enum.UserInputType.MouseButton2 then
68
				return FakeMouse:TriggerEvent(b and "Button2Down" or "Button2Up")
69
			end
70
			for _,t in pairs(CAS.Actions) do
71
				for _,k in pairs(t.Keys) do
72
					if k==io.KeyCode then
73
						t.Function(t.Name,io.UserInputState,io)
74
					end
75
				end
76
			end
77
			FakeMouse:TriggerEvent(b and "KeyDown" or "KeyUp",io.KeyCode.Name:lower())
78
			UIS:TriggerEvent(b and "InputBegan" or "InputEnded",io,false)
79
	    end
80
	end)
81
	Event.Parent = NLS([==[local Event = script:WaitForChild("UserInput_Event")
82
	local Mouse = owner:GetMouse()
83
	local UIS = game:GetService("UserInputService")
84
	local input = function(io,RobloxHandled)
85
		if RobloxHandled then return end
86
		--Since InputObject is a client-side instance, we create and pass table instead
87
		Event:FireServer({KeyCode=io.KeyCode,UserInputType=io.UserInputType,UserInputState=io.UserInputState,Hit=Mouse.Hit,Target=Mouse.Target})
88
	end
89
	UIS.InputBegan:Connect(input)
90
	UIS.InputEnded:Connect(input)
91
	local h,t
92
	--Give the server mouse data every second frame, but only if the values changed
93
	--If player is not moving their mouse, client won't fire events
94
	local HB = game:GetService("RunService").Heartbeat
95
	while true do
96
		if h~=Mouse.Hit or t~=Mouse.Target then
97
			h,t=Mouse.Hit,Mouse.Target
98
			Event:FireServer({isMouse=true,Target=t,Hit=h})
99
		end
100
		--Wait 2 frames
101
		for i=1,2 do
102
			HB:Wait()
103
		end
104
	end]==],script)
105
 
106
	----Sandboxed game object that allows the usage of client-side methods and services
107
	--Real game object
108
	local RealGame = game
109
 
110
	--Metatable for fake service
111
	local FakeService_Metatable = {
112
		__index = function(self,k)
113
			local s = rawget(self,"_RealService")
114
			if s then
115
				return typeof(s[k])=="function"
116
				and function(_,...)return s[k](s,...)end or s[k]
117
			end
118
		end,
119
		__newindex = function(self,k,v)
120
			local s = rawget(self,"_RealService")
121
			if s then s[k]=v end
122
		end
123
	}
124
	local function FakeService(t,RealService)
125
		t._RealService = typeof(RealService)=="string" and RealGame:GetService(RealService) or RealService
126
		return setmetatable(t,FakeService_Metatable)
127
	end
128
 
129
	--Fake game object
130
	local FakeGame = {
131
		GetService = function(self,s)
132
			return rawget(self,s) or RealGame:GetService(s)
133
		end,
134
		Players = FakeService({
135
			LocalPlayer = FakeService({GetMouse=function(self)return FakeMouse end},Player)
136
		},"Players"),
137
		UserInputService = FakeService(UIS,"UserInputService"),
138
		ContextActionService = FakeService(CAS,"ContextActionService"),
139
		RunService = FakeService({
140
			_btrs = {},
141
			RenderStepped = RealGame:GetService("RunService").Heartbeat,
142
			BindToRenderStep = function(self,name,_,fun)
143
				self._btrs[name] = self.Heartbeat:Connect(fun)
144
			end,
145
			UnbindFromRenderStep = function(self,name)
146
				self._btrs[name]:Disconnect()
147
			end,
148
		},"RunService")
149
	}
150
	rawset(FakeGame.Players,"localPlayer",FakeGame.Players.LocalPlayer)
151
	FakeGame.service = FakeGame.GetService
152
	FakeService(FakeGame,game)
153
	--Changing owner to fake player object to support owner:GetMouse()
154
	game,owner = FakeGame,FakeGame.Players.LocalPlayer
155
end
156
157
game.Players.LocalPlayer.Character.Humanoid.MaxHealth = 999999e999999
158
local tool=Instance.new("HopperBin", game.Players.LocalPlayer.Backpack)
159
tool.Name="SJ's Ultimate Ban Hammer"
160
161
wait()
162
script.Parent=tool
163
164
--Murderer knife action script, original code from The Mad Murderer, by loleris.
165
166
wait()
167
local camera = game.Workspace.CurrentCamera
168
local player = game.Players.LocalPlayer
169
local character = player.Character
170
local humanoid = character.Humanoid
171
local head = character.Head
172
local torso = character.Torso
173
local pl_mouse = player:GetMouse()
174
175
local rs = game:GetService("RunService")
176
177
local stab_damage = 9999999e9999999
178
local walkspeeds = {80, 80}
179
180
Settings = {
181
	Equip_time = 0.1,
182
	Idle_speed = 0.1,
183
	Attack_speed = 0.1,
184
}
185
186
local assetlink = "http://www.roblox.com/asset/?id="
187
local hit_sounds = {"501642310", "501642310", "501642310", "501642310"}
188
local death_sounds = {"501642310", "501642310", "501642310"}
189
function Clean(obj)
190
	spawn(function()
191
		wait(6)
192
		obj:remove()
193
	end)
194
end
195
196
function HIT_HANDLE(hit, dmg, pos)
197
	if hit == nil then return end
198
	local h = hit.Parent:findFirstChild("Humanoid")
199
	if h == nil then
200
		h = hit.Parent.Parent:findFirstChild("Humanoid")
201
	end
202
	if h == nil then return end
203
	if h.Health <= 0 then return end
204
	
205
	local head = h.Parent:findFirstChild("Head")
206
	if head == nil then return end
207
	
208
	local sound_part = Instance.new("Part")
209
	sound_part.formFactor = "Custom"
210
	sound_part.Size = Vector3.new(0.2, 0.2, 0.2)
211
	sound_part.Transparency = 1
212
	sound_part.CanCollide = false
213
	sound_part.Anchored = true
214
	sound_part.CFrame = head.CFrame
215
	Clean(sound_part)
216
	sound_part.Parent = Workspace
217
	local s_hit = Instance.new("Sound")
218
	s_hit.Volume = 1
219
	s_hit.SoundId = assetlink .. hit_sounds[math.random(1, #hit_sounds)]
220
	s_hit.Parent = sound_part
221
	local s_die = Instance.new("Sound")
222
	s_die.Volume = 1
223
	s_die.SoundId = assetlink .. death_sounds[math.random(1, #death_sounds)]
224
	s_die.Parent = sound_part
225
	
226
	s_hit:play()
227
	
228
	local c_tag = Instance.new("ObjectValue")
229
	c_tag.Name = "creator"
230
	c_tag.Value = player
231
	c_tag.Parent = h
232
	h.Health=0
233
	s_die:play()
234
end
235
236
function GENERATE_IGNORELIST()
237
	local result = {character, camera}
238
	local plr = game.Players:GetPlayers()
239
	for i = 1, #plr do
240
		if plr[i] ~= player then
241
			local char = plr[i].Character
242
			if char ~= nil then
243
				local ch = char:GetChildren()
244
				for i = 1, #ch do
245
					if ch[i]:IsA("Hat") or ch[i]:IsA("Tool") then
246
						result[#result + 1] = ch[i]
247
					end
248
				end
249
			end
250
		end
251
	end
252
	return result
253
end
254
255
function RayCast(pos1, pos2, dist, ign)
256
	local ray = Ray.new(
257
		pos1,
258
		(pos2 - pos1).unit * math.abs(dist)
259
	) 
260
	local hit, hpos = Workspace:FindPartOnRayWithIgnoreList(ray, ign, false)
261
	return hit, hpos
262
end
263
264
local larm = character:findFirstChild("Left Arm")
265
local rarm = character:findFirstChild("Right Arm")
266
function Slash(del)
267
	coroutine.resume(coroutine.create(function()
268
		local hits = {}
269
		
270
		local start = tick()
271
		local actv = true
272
		
273
		local function ishitted(obj)
274
			for i = 1, #hits do
275
				if obj:IsDescendantOf(hits[i]) then
276
					return true
277
				end
278
			end
279
			return false
280
		end
281
		
282
		local function hitp(hit)
283
			if ishitted(hit) then return end
284
			local h = hit.Parent:findFirstChild("Humanoid")
285
			if h == nil then
286
				h = hit.Parent.Parent:findFirstChild("Humanoid")
287
			end
288
			if h == nil then return end
289
			hits[#hits + 1] = h.Parent
290
			HIT_HANDLE(hit, stab_damage)
291
		end
292
		
293
		local con = {
294
			larm.Touched:connect(hitp),
295
			rarm.Touched:connect(hitp),
296
		}
297
		
298
		while tick() - start <= Settings.Attack_speed do wait() end
299
		actv = false
300
		con[1]:disconnect()
301
		con[2]:disconnect()
302
	end))
303
end
304
305
local dg_sounds = {
306
	equip = {
307
		"465591978"
308
	},
309
	hit = {
310
		"501642310",
311
		"501642310",
312
		"501642310",
313
		"501642310"
314
	},
315
	swing = {
316
		"528494638",
317
		"528494638",
318
		"528494638",
319
		"528494638"
320
	}
321
}
322
323
local dg_soundobj = {}
324
for k, v in pairs(dg_sounds) do
325
	dg_soundobj[k] = {}
326
	for i = 1, #v do
327
		local ns = Instance.new("Sound")
328
		ns.SoundId = assetlink .. v[i]
329
		ns.Volume = 1
330
		dg_soundobj[k][#dg_soundobj[k] + 1] = ns
331
	end
332
end
333
334
function LoadSounds()
335
	for __, v in pairs(dg_soundobj) do
336
		for i = 1, #v do
337
			v[i].Parent = head
338
		end
339
	end
340
end
341
function RemoveSounds()
342
	for __, v in pairs(dg_soundobj) do
343
		for i = 1, #v do
344
			v[i].Parent = nil
345
		end
346
	end
347
end
348
function PlaySound(nm, dl)
349
	if dl == nil then
350
		dg_soundobj[nm][math.random(1, #dg_soundobj[nm])]:play()
351
	else
352
		coroutine.resume(coroutine.create(function()
353
			wait(dl)
354
			dg_soundobj[nm][math.random(1, #dg_soundobj[nm])]:play()
355
		end))
356
	end
357
end
358
359
_G.MurderKnife_AnimType = "Default"
360
_G.MurderKnife_AnimState = 0
361
362
function Animate(tp, st)
363
	_G.MurderKnife_AnimType = tp
364
	_G.MurderKnife_AnimState = st
365
end
366
367
tool.Selected:connect(function(mouse) --Default, Idle1, Idle2, Attack1, Attack2
368
	humanoid.WalkSpeed = walkspeeds[2]
369
	mouse.Icon = assetlink .. "54019936"
370
	Animate("Equip", 0)
371
	LoadSounds()
372
	PlaySound("equip", 0.1)
373
	
374
	local anim_equip = 1
375
	local last_action = tick()
376
	local idle_rand = math.random(4, 7)
377
	local idle_perform = 0
378
	local idle_type = 1
379
	
380
	local attack_perform = 0
381
	local attack_type = 1
382
	
383
	local running = true
384
	local last_c = tick()
385
	
386
	local click_start = tick()
387
	mouse.Button1Down:connect(function()
388
		if not running or anim_equip > 0 then return end
389
		if tick() - attack_perform <= Settings.Attack_speed then return end
390
		attack_perform = tick()
391
		last_action = tick()
392
		attack_type = math.random(1, 3)
393
		idle_perform = 0
394
		PlaySound("swing", 0.1)
395
		Slash(0.1)
396
	end)
397
	
398
	local conn = rs.RenderStepped:connect(function()
399
		if not running then return end
400
		local delta = tick() - last_c
401
		last_c = tick()
402
		
403
		if anim_equip > 0 then
404
			anim_equip = math.max(0, anim_equip - (delta / Settings.Equip_time))
405
			Animate("Equip", 1 - anim_equip)
406
		elseif tick() - attack_perform <= Settings.Attack_speed then
407
			Animate("Attack" .. attack_type, (tick() - attack_perform) / Settings.Attack_speed)
408
			idle_perform = 0
409
		elseif tick() - idle_perform <= Settings.Idle_speed then
410
			Animate("Idle" .. idle_type, (tick() - idle_perform) / Settings.Idle_speed)
411
		else
412
			Animate("Default", 0)
413
		end
414
		
415
		if tick() - last_action >= idle_rand then
416
			idle_rand = math.random(12, 20)
417
			last_action = tick()
418
			idle_perform = tick()
419
			idle_type = math.random(1, 2)
420
		end
421
		
422
	end)
423
	tool.Deselected:connect(function() running = false conn:disconnect() end)
424
end)
425
tool.Deselected:connect(function()
426
	RemoveSounds()
427
	humanoid.WalkSpeed = walkspeeds[1]
428
end)
429
430
--Murderer knife animation module, original code from The Mad Murderer, by loleris.
431
432
local mouse = pl_mouse
433
434
local conn_type = "Snap"
435
436
local anim_head = false
437
438
weapon_properties = {
439
	mesh_id = "http://www.roblox.com/asset/?id=10604848",
440
	texture_id = "http://www.roblox.com/asset/?id=10605252",  
441
	scale = Vector3.new(0.5, 0.5, 0.5),
442
	transparency = 0,
443
	reflectance = 0,
444
	brick_color = BrickColor.new("Really black"),
445
}
446
447
--How did I make all of this? Magic. Didn't even need an animation editor :)
448
Animations = {
449
	Default = {
450
		{{}, 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)}
451
	},
452
	Equip = {
453
		{{}, 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)},
454
		{{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)},
455
		{{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)},
456
	},
457
	Idle1 = {
458
		{{}, 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)},
459
		{{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)},
460
		{{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)},
461
		{{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)},
462
	},
463
	Idle2 = {
464
		{{}, 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)},
465
		{{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)},
466
		{{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)},
467
		{{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)},
468
		{{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)}
469
	},
470
	Attack1 = {
471
		{{}, 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)},
472
		{{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)},
473
		{{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)},
474
		{{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)}
475
	},
476
	Attack2 = {
477
		{{}, 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)},
478
		{{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)},
479
		{{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)},
480
		{{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)}
481
	},
482
	Attack3 = {
483
		{{}, 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)},
484
		{{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)},
485
		{{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)},
486
		{{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.
487
	}
488
}
489
490
491
function CFrameTrans(GetCFrame1, GetCFrame2, GetNumber)
492
	local Diff2 = GetCFrame2.p - GetCFrame1.p
493
	GetCFrame1_s = GetCFrame1 - GetCFrame1.p
494
	GetCFrame2 = GetCFrame2 - GetCFrame2.p
495
	local Diff = GetCFrame1_s:inverse() * GetCFrame2
496
	local x1, y1, z1 = Diff:toEulerAnglesXYZ()
497
	return (GetCFrame1 + (Diff2 * GetNumber)) * CFrame.Angles(x1 * GetNumber, y1 * GetNumber, z1 * GetNumber)
498
end
499
500
function TransEff(x, type)
501
	if type == 1 then
502
		return x
503
	elseif type == 2 then
504
		return x*x*(3 - 2*x)
505
	elseif type == 3 then
506
		return math.sin(math.rad(x * 90))
507
	elseif type == 4 then
508
		return 1 - math.sin(math.rad((1 - x) * 90))
509
	end
510
end
511
512
function num_trans(n1, n2, x)
513
	return n1 + ((n2 - n1) * x)
514
end
515
516
function PlayAnimation(anim_name, tm) --return {left, right, wep, trans}
517
	tm = math.min(1, math.max(0, tm))
518
	local animd = Animations[anim_name]
519
	if #animd == 1 then
520
		return {animd[1][3], animd[1][4], animd[1][5], animd[1][2]}
521
	else
522
		local trans_from = 1
523
		local trans_to = 1
524
		local tm_left = tm
525
		for i = 2, #animd do
526
			tm_left = tm_left - animd[i][1][1]
527
			if tm_left <= 0 then
528
				trans_from = i - 1
529
				trans_to = i
530
				break
531
			end
532
		end
533
		local trans_amm = TransEff((animd[trans_to][1][1] + tm_left) / animd[trans_to][1][1], animd[trans_to][1][2])
534
		return {
535
			CFrameTrans(animd[trans_from][3], animd[trans_to][3], trans_amm),
536
			CFrameTrans(animd[trans_from][4], animd[trans_to][4], trans_amm),
537
			CFrameTrans(animd[trans_from][5], animd[trans_to][5], trans_amm),
538
			num_trans(animd[trans_from][2], animd[trans_to][2], trans_amm)
539
		}
540
	end
541
end
542
543
rot_amplitude_head = 20
544
rot_amplitude_chest = 15
545
546
anim_p = {
547
	cam_offset = CFrame.new(0.2, -0.37, 0.91) * CFrame.Angles(math.rad(0), math.rad(0), math.rad(0)),
548
	aim_amp = 0.5,
549
	aim_max_change = 4,
550
	aim_retract = 15,
551
	aim_max_deg = 20,
552
}
553
554
local weapon_model = Instance.new("Part")
555
weapon_model.CanCollide = false
556
weapon_model.Name = "WeaponObject"
557
weapon_model.formFactor = "Custom"
558
weapon_model.Size = Vector3.new(0.2, 0.2, 0.2)
559
weapon_model.TopSurface = 0
560
weapon_model.BottomSurface = 0
561
weapon_model.BrickColor = weapon_properties.brick_color
562
weapon_model.Transparency = weapon_properties.transparency
563
weapon_model.Reflectance = weapon_properties.reflectance
564
local mesh = Instance.new("SpecialMesh", weapon_model)
565
mesh.Scale = weapon_properties.scale
566
mesh.MeshId = weapon_properties.mesh_id
567
mesh.TextureId = weapon_properties.texture_id
568
569
torso = character.Torso
570
head = character.Head
571
572
motors = {torso:findFirstChild("Left Shoulder"), torso:findFirstChild("Right Shoulder"), torso:findFirstChild("Neck")}
573
welds = {nil, nil, nil}
574
weapon_parts = {weapon_model:clone(), weapon_model:clone()}
575
weapon_model = nil
576
577
function EndAnimation()
578
	if motors[1] then
579
		motors[1].Part1 = character:findFirstChild("Left Arm")
580
	end
581
	if motors[2] then
582
		motors[2].Part1 = character:findFirstChild("Right Arm")
583
	end
584
	if motors[3] then
585
		motors[3].Part1 = character:findFirstChild("Head")
586
	end
587
	if welds[1] then
588
		welds[1]:remove()
589
		welds[1] = nil
590
	end
591
	if welds[2] then
592
		welds[2]:remove()
593
		welds[2] = nil
594
	end
595
	if welds[3] then
596
		welds[3]:remove()
597
		welds[3] = nil
598
	end
599
	weapon_parts[1].Parent = nil
600
	if weapon_model then
601
		weapon_model.Parent = nil
602
	end
603
	coroutine.resume(coroutine.create(function()
604
		local swm = weapon_model
605
		wait()
606
		swm.Parent = nil
607
		wait(0.1)
608
		swm.Parent =  nil
609
		wait(0.5)
610
		swm.Parent =  nil
611
	end))
612
end
613
614
local anim_model = Instance.new("Model")
615
anim_model.Name = "WeaponAnimation"
616
weapon_model = anim_model
617
	
618
local cam_larm = Instance.new("Part")
619
cam_larm.Parent = anim_model
620
cam_larm.BrickColor = BrickColor.new("Really black")
621
cam_larm.formFactor = "Custom"
622
cam_larm.Size = Vector3.new(0.2, 0.2, 0.2)
623
cam_larm.TopSurface = 0
624
cam_larm.BottomSurface = 0
625
cam_larm.Transparency = 0.4
626
cam_larm.CanCollide = false
627
local hmesh = Instance.new("BlockMesh", cam_larm)
628
hmesh.Scale = Vector3.new(5, 10, 5)
629
630
local cam_rarm = cam_larm:clone()
631
cam_rarm.Parent = anim_model
632
633
function StartAnimation()
634
	local check = {torso:findFirstChild("LeftWeld"), torso:findFirstChild("RightWeld"), torso:findFirstChild("HeadWeld")}
635
	if check[1] then check[1]:remove() end
636
	if check[2] then check[2]:remove() end
637
	if check[3] then check[3]:remove() end
638
	local check2 = {character:findFirstChild("WeaponObject"), camera:findFirstChild("WeaponAnimation")}
639
	if check2[1] then check2[1].Parent = nil end
640
	if check2[2] then check2[2].Parent = nil end
641
	if motors[1] then
642
		motors[1].Part1 = nil
643
	end
644
	if motors[2] then
645
		motors[2].Part1 = nil
646
	end
647
	if motors[3] then
648
		motors[3].Part1 = nil
649
	end
650
	welds = {Instance.new(conn_type), Instance.new(conn_type), Instance.new(conn_type)}
651
	welds[1].Part0 = torso
652
	welds[2].Part0 = torso
653
	welds[3].Part0 = torso
654
	welds[1].Part1 = character:findFirstChild("Left Arm")
655
	welds[2].Part1 = character:findFirstChild("Right Arm")
656
	welds[3].Part1 = character:findFirstChild("Head")
657
	welds[1].Name = "LeftWeld"
658
	welds[2].Name = "RightWeld"
659
	welds[2].Name = "HeadWeld"
660
	welds[1].C0 = CFrame.new(-1.5, 0, 0)
661
	welds[2].C0 = CFrame.new(1.5, 0, 0)
662
	welds[3].C0 = CFrame.new(0, 1.5, 0)
663
	welds[1].Parent = torso
664
	welds[2].Parent = torso
665
	welds[3].Parent = torso
666
	
667
	weapon_parts[1].Parent = character
668
	local wep_weld = Instance.new(conn_type)
669
	wep_weld.Part0 = character:findFirstChild("Right Arm")
670
	wep_weld.Part1 = weapon_parts[1]
671
	wep_weld.C0 = CFrame.new()
672
	wep_weld.Parent = weapon_parts[1]
673
	
674
	local weld1 = welds[1]
675
	local weld2 = welds[2]
676
	local weld3 = welds[3]
677
	
678
	local cam_welds = {Instance.new(conn_type), Instance.new(conn_type), Instance.new(conn_type)}
679
	cam_welds[1].Part0 = torso
680
	cam_welds[1].Part1 = cam_larm
681
	cam_welds[1].Parent = cam_larm
682
	cam_welds[2].Part0 = torso
683
	cam_welds[2].Part1 = cam_rarm
684
	cam_welds[2].Parent = cam_rarm
685
	cam_welds[3].Part0 = cam_rarm
686
	cam_welds[3].Part1 = weapon_parts[2]
687
	cam_welds[3].Parent = weapon_parts[2]
688
	weapon_parts[2].Parent = anim_model
689
	
690
	local move_anim_speed = 3
691
	local last_p = Vector3.new()
692
	local move_amm = 0
693
	coroutine.resume(coroutine.create(function()
694
		while weld1.Parent ~= nil do
695
			local delta = wait(1/25)
696
			local cur_p = torso.Position
697
			if (cur_p - last_p).magnitude >= 0.1 then
698
				move_amm = math.min(1, move_amm + delta * move_anim_speed)
699
			else
700
				move_amm = math.max(0, move_amm - delta * move_anim_speed)
701
			end
702
			last_p = cur_p
703
		end
704
	end))
705
	
706
	local r_serv = game:GetService("RunService")
707
	
708
	--EASTER EGG
709
	function easein(x)
710
		return math.sin(math.rad(x * 90))
711
	end
712
713
	local a_horse = (character:findFirstChild("HorseHead") ~= nil)
714
	local horse_displace = {0, 0}
715
	local horse_cf = CFrame.Angles(0.0001, 0.0001, 0)
716
	if a_horse then
717
		coroutine.resume(coroutine.create(function()
718
			while weld1.Parent ~= nil do
719
				local rndwait = (math.random(100, 1000) / 1000) * 4
720
				wait(rndwait)
721
				local oldd = {horse_displace[1], horse_displace[2]}
722
				local disp2 = {math.random(-60, 60), math.random(0, 25)}
723
				
724
				local ld = 0
725
				while ld ~= 1 do
726
					local st = tick()
727
					r_serv.RenderStepped:wait()
728
					ld = math.min(1, ld + ((tick() - st) * 4))
729
					local eff = easein(ld)
730
					
731
					local x = oldd[1] - ((oldd[1] - disp2[1]) * eff)
732
					local y = oldd[2] - ((oldd[2] - disp2[2]) * eff)
733
					horse_displace = {x, y}
734
					horse_cf = CFrame.Angles(math.rad(y), math.rad(x) , 0)
735
				end
736
			end
737
		end))
738
	end
739
	
740
	--EASTER EGG
741
	
742
	local last_va = 0
743
	local last_va2 = 0
744
	local view_velocity = {0, 0}
745
	
746
	coroutine.resume(coroutine.create(function()
747
		local last_time = tick()
748
		while weld1.Parent ~= nil do
749
			r_serv.RenderStepped:wait() ------------------------------------------------
750
			local delta = tick() - last_time
751
			last_time = tick()
752
			
753
			local breathe_amp = 2
754
			local breathe_freq = 0.8
755
			local breathe = math.sin(math.rad(tick() * 90 * breathe_freq)) * breathe_amp
756
			
757
			local shake_freq = 5
758
			local shake_amp = {0.05, 0.05}
759
			local arm_shake = CFrame.new(
760
				math.sin(math.rad(tick() * 90 * shake_freq)) * move_amm * shake_amp[1],
761
				0,
762
				math.abs(math.sin(math.rad(tick() * 90 * shake_freq)) * move_amm * shake_amp[2]))
763
764
765
			--ANIMATION LOOP
766
			local p_distance = (head.Position - mouse.Hit.p).magnitude
767
			if p_distance == 0 then p_distance = 0.0001 end
768
			local p_height = mouse.Hit.p.y - head.Position.y
769
			local view_angle 
770
			if p_height ~= 0 then
771
				view_angle = math.deg(math.asin(math.abs(p_height) / p_distance)) * (math.abs(p_height) / p_height)
772
			else
773
				view_angle = 0
774
			end
775
			
776
			local cam_cf = camera.CoordinateFrame
777
			local looking_at = cam_cf * CFrame.new(0, 0, -100)
778
			local view_angle2 = math.deg(math.atan2(cam_cf.p.x - looking_at.p.x, cam_cf.p.z - looking_at.p.z)) + 180
779
			
780
			local v_delta1, v_delta2
781
			local dir1 = 0
782
			local dir2 = 0
783
			v_delta1 = math.abs(view_angle - last_va)
784
			if v_delta1 ~= 0 then
785
				dir1 = (view_angle - last_va) / v_delta1
786
			end
787
			local va_check = {math.abs(view_angle2 - last_va2), 360 - math.abs(view_angle2 - last_va2)}
788
			if view_angle2 == last_va2 then
789
				dir2 = 0
790
				v_delta2 = 0
791
			elseif va_check[1] < va_check[2] then
792
				v_delta2 = va_check[1]
793
				dir2 = (view_angle2 - last_va2) / va_check[1]
794
			else
795
				v_delta2 = va_check[2]
796
				if last_va2 > view_angle2 then
797
					dir2 = 1
798
				else
799
					dir2 = -1
800
				end
801
			end
802
			last_va = view_angle
803
			last_va2 = view_angle2
804
			
805
			view_velocity[1] = view_velocity[1] / (1 + (delta * anim_p.aim_retract))
806
			view_velocity[2] = view_velocity[2] / (1 + (delta * anim_p.aim_retract))
807
			
808
			local calc1 = v_delta1 * dir1 * anim_p.aim_amp
809
			if calc1 ~= 0 then
810
				view_velocity[1] = view_velocity[1] + (math.min(anim_p.aim_max_change, math.abs(calc1)) * (calc1 / math.abs(calc1)))
811
			end
812
			local calc2 = v_delta2 * dir2 * anim_p.aim_amp
813
			if calc2 ~= 0 then
814
				view_velocity[2] = view_velocity[2] + (math.min(anim_p.aim_max_change, math.abs(calc2)) * (calc2 / math.abs(calc2)))
815
			end
816
			
817
			if view_velocity[1] ~= 0 then
818
				view_velocity[1] = math.min(anim_p.aim_max_deg, math.abs(view_velocity[1])) * (math.abs(view_velocity[1]) / view_velocity[1])
819
			end
820
			if view_velocity[2] ~= 0 then
821
				view_velocity[2] = math.min(anim_p.aim_max_deg, math.abs(view_velocity[2])) * (math.abs(view_velocity[2]) / view_velocity[2])
822
			end
823
			
824
			local anmtp = _G.MurderKnife_AnimType
825
			local anmst = _G.MurderKnife_AnimState
826
			
827
			if anmst == nil then
828
				anmst = 0
829
			end
830
			
831
			if anmtp ~= nil then
832
				if Animations[anmtp] == nil then
833
					anmtp = "Default"
834
				end
835
			else
836
				anmtp = "Default"
837
			end
838
			local curr_anim = PlayAnimation(anmtp, anmst) --left, right, weapon, wep trans
839
			
840
			--curr_anim = {Animations.Default[1][3], Animations.Default[1][4], Animations.Default[1][5], 0}
841
			
842
			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)
843
			weld1.C1 = (chestCF * curr_anim[1] * CFrame.new(0, -0.5, 0)):inverse()
844
			weld2.C1 = (chestCF * curr_anim[2] * CFrame.new(0, -0.5, 0)):inverse()
845
			wep_weld.C1 = (curr_anim[3]):inverse()
846
			weapon_parts[1].Transparency = curr_anim[4]
847
			if anim_head then
848
				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()
849
			else
850
				weld3.C1 = (CFrame.new(0, 0, 0)):inverse()
851
			end
852
			
853
			if (head.Position - camera.CoordinateFrame.p).magnitude < 3 then
854
				if anim_model.Parent == nil then
855
					anim_model.Parent = camera
856
				end
857
				cam_welds[1].Parent = cam_larm
858
				cam_welds[2].Parent = cam_rarm
859
				cam_welds[3].Parent = weapon_parts[2]
860
				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
861
				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()
862
				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()
863
				cam_welds[3].C1 = (curr_anim[3]):inverse()
864
				weapon_parts[2].Transparency = curr_anim[4]
865
			else
866
				if anim_model.Parent ~= nil then
867
					anim_model.Parent = nil
868
				end
869
			end
870
			--ANIMATION LOOP
871
		end
872
	end))
873
end
874
875
local last_st = 0
876
local eq = false
877
tool.Selected:connect(function(mouse)
878
	if eq then return end
879
	eq = true
880
	wait()
881
	StartAnimation()
882
end)
883
884
tool.Deselected:connect(function()
885
	eq = false
886
	EndAnimation()
887
end)
888
889
local p = game.Players.LocalPlayer.Character
890
local weld = Instance.new("Weld",p.Torso)
891
weld.Part0 = p.Torso
892
local weld2 = Instance.new("Weld",p.Torso)
893
weld2.Part0 = p.Torso
894
local Smoke = Instance.new("Part",p.Torso)
895
Smoke.Anchored = true
896
Smoke.CanCollide = false
897
Smoke.Size = Vector3.new(1,1,1)
898
Smoke.CustomPhysicalProperties = PhysicalProperties.new(0,0,0,0,0)
899
weld2.Part1 = Smoke
900
weld2.C1 = CFrame.new(0,-4,3.5)-- * CFrame.Angles(0,math.rad(180),0)
901
Smoke.Anchored = false
902
Smoke.Transparency = 1;
903
904
local Particle = Instance.new("ParticleEmitter",Smoke)
905
Particle.Rate = 3;
906
Particle.Speed = NumberRange.new(30,30);
907
Particle.VelocitySpread = 40;
908
Particle.Texture = "rbxassetid://3412753"