Quick actions

cmd+k|ctrl+k

Navigation

Languages

Identity Stealer

Snippet info

Language

Lua

Visibility

public

Author

bosinn

Created

2021-09-14T04:35:15.567217Z

Updated

2021-09-14T04:35:15.567217Z

wait()
local player = owner


print([[
Made by Protofer_S
Z: attacking
X: become ghost again (only works when taking over a body)
M: Escape body (destroys body)
ofc uploaded on glot.io by oleggolovanov01alt
]])

function localscript()
	NLS([[local player = game.Players.LocalPlayer
local mouse = player:GetMouse()
local remote = player.Backpack:WaitForChild'grab'
local rem = player.Backpack:WaitForChild'reghost'
local rem1 = player.Backpack:WaitForChild('Ghost')

mouse.KeyDown:Connect(function(kk)
	kk:lower()
	if kk=="z" then
		remote:FireServer('yes')
	end
end)

mouse.KeyDown:Connect(function(kk)
	kk:lower()
	if kk=="x" then
		rem:FireServer('yes')
	end
end)

mouse.KeyDown:Connect(function(kk)
	kk:lower()
	if kk=="m" then
		rem1:FireServer('yes')
	end
end)]],player.Backpack)
end

function camera()
	NLS([[local player = game.Players.LocalPlayer
local cam = workspace.CurrentCamera
cam.CameraSubject=player.Character:FindFirstChildOfClass'Humanoid']],player.Backpack)
end

function animation(und)
	local Figure=und
	wait(.5)
	local Humanoid = und:FindFirstChildOfClass('Humanoid')
	if Humanoid then
		local displayname = ' '--und.Name..'?'
		if Humanoid.WalkSpeed<5 then
			Humanoid.WalkSpeed=16
		end


		local Torso = und:WaitForChild'Torso'

		--making the joints (dont worry, i also dont know how joints work)



		function waitForChild(parent, childName)
			local child = parent:findFirstChild(childName)
			if child then return child end
			while true do
				child = parent.ChildAdded:wait()
				if child.Name==childName then return child end
			end
		end




		wait()


		function makeJoint(limbName, jointName, c0, c1)
			local limb = waitForChild(Figure, limbName)
			if limb.Name=='Head' then

			else
				limb:BreakJoints()	

			end
			local joint = Instance.new"Motor6D"
			joint.Name = jointName

			joint.Part0 = Torso
			joint.Part1 = limb
			joint.C0 = c0
			joint.C1 = c1
			joint.MaxVelocity = 0.5
			joint.archivable = true
			joint.Parent = Torso
			return joint
		end



		local Neck = makeJoint("Head","Neck", CFrame.new(0, 1, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0), CFrame.new(0, -0.5, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0))
		local RightShoulder = makeJoint("Right Arm", "Right Shoulder", CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0), CFrame.new(-0.5, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0))
		local LeftShoulder = makeJoint("Left Arm", "Left Shoulder", CFrame.new(-1, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0), CFrame.new(0.5, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0))
		local RightHip = makeJoint("Right Leg", "Right Hip", CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0), CFrame.new(0.5, 1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0))
		local LeftHip = makeJoint("Left Leg", "Left Hip", CFrame.new(-1, -1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0), CFrame.new(-0.5, 1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0))





		-- util






		function waitForChild(parent, childName)
			while true do
				local child = parent:findFirstChild(childName)
				if child then
					return child
				end
				parent.ChildAdded:wait()
			end
		end

		-- declarations

		--local Figure = owner.Character
		--local Torso = waitForChild(Figure, "Torso")
		--local Humanoid = waitForChild(Figure, "Humanoid")
		--local RightShoulder = waitForChild(Torso, "Right Shoulder")
		--local LeftShoulder = waitForChild(Torso, "Left Shoulder")
		--local RightHip = waitForChild(Torso, "Right Hip")
		--local LeftHip = waitForChild(Torso, "Left Hip")
		--local Neck = waitForChild(Torso, "Neck")


		-- functions



		local toolAnim = "None"
		local toolAnimTime = 0

		-- functions

		function onRunning(speed)
			if speed>0 then
				pose = "Running"
			else
				pose = "Standing"
			end
		end

		function onDied()
			pose = "Dead"
		end

		function onJumping(state)
			pose = "Jumping"
		end

		function onClimbing()
			pose = "Climbing"
		end

		function onGettingUp(state)
			pose = "GettingUp"
		end

		function onFreeFall(state)
			pose = "FreeFall"
		end

		function onFallingDown(state)
			pose = "FallingDown"
		end

		function onSeated()
			pose = "Seated"
		end

		function moveJump()
			RightShoulder.MaxVelocity = 0.5
			LeftShoulder.MaxVelocity = 0.5
			RightShoulder.DesiredAngle = 3.14
			LeftShoulder.DesiredAngle = -3.14
			RightHip.DesiredAngle = 0
			LeftHip.DesiredAngle = 0
		end


		-- same as jump for now

		function moveFreeFall()
			RightShoulder.MaxVelocity = 0.5
			LeftShoulder.MaxVelocity = 0.5
			RightShoulder.DesiredAngle = 3.14
			LeftShoulder.DesiredAngle = -3.14
			RightHip.DesiredAngle = 0
			LeftHip.DesiredAngle = 0
		end

		function moveSit()
			RightShoulder.MaxVelocity = 0.15
			LeftShoulder.MaxVelocity = 0.15
			RightShoulder.DesiredAngle = 3.14 /2
			LeftShoulder.DesiredAngle = -3.14 /2
			RightHip.DesiredAngle = 3.14 /2
			LeftHip.DesiredAngle = -3.14 /2
		end

		local function getTool()
			for i, v in ipairs(Figure:GetChildren()) do
				if v:IsA"Tool" then
					return v
				end
			end
			return nil
		end

		function getToolAnim(tool)
			for _, c in ipairs(tool:GetChildren()) do
				if c.Name == "toolanim" and c.className == "StringValue" then
					return c
				end
			end
			return nil
		end

		function animateTool()

			if (toolAnim == "None") then
				RightShoulder.DesiredAngle = 1.57
				return
			end

			if (toolAnim == "Slash") then
				RightShoulder.MaxVelocity = 0.5
				RightShoulder.DesiredAngle = 0
				return
			end

			if (toolAnim == "Lunge") then
				RightShoulder.MaxVelocity = 0.5
				LeftShoulder.MaxVelocity = 0.5
				RightHip.MaxVelocity = 0.5
				LeftHip.MaxVelocity = 0.5
				RightShoulder.DesiredAngle = 1.57
				LeftShoulder.DesiredAngle = 1.0
				RightHip.DesiredAngle = 1.57
				LeftHip.DesiredAngle = 1.0
				return
			end
		end

		function move(time)
			local amplitude
			local frequency

			if (pose == "Jumping") then
				moveJump()
				return
			end

			if (pose == "FreeFall") then
				moveFreeFall()
				return
			end

			if (pose == "Seated") then
				moveSit()
				return
			end

			local climbFudge = 0

			if (pose == "Running") then
				RightShoulder.MaxVelocity = 0.15
				LeftShoulder.MaxVelocity = 0.15
				amplitude = 1
				frequency = 9
			elseif (pose == "Climbing") then
				RightShoulder.MaxVelocity = 0.5 
				LeftShoulder.MaxVelocity = 0.5
				amplitude = 1
				frequency = 9
				climbFudge = 3.14
			else
				amplitude = 0.1
				frequency = 1
			end

			desiredAngle = amplitude * math.sin(time*frequency)

			RightShoulder.DesiredAngle = desiredAngle + climbFudge
			LeftShoulder.DesiredAngle = desiredAngle - climbFudge
			RightHip.DesiredAngle = -desiredAngle
			LeftHip.DesiredAngle = -desiredAngle


			local tool = getTool()

			if tool then

				animStringValueObject = getToolAnim(tool)

				if animStringValueObject then
					toolAnim = animStringValueObject.Value
					-- message recieved, delete StringValue
					animStringValueObject.Parent = nil
					toolAnimTime = time + .3
				end

				if time > toolAnimTime then
					toolAnimTime = 0
					toolAnim = "None"
				end

				animateTool()


			else
				toolAnim = "None"
				toolAnimTime = 0
			end
		end


		-- connect events

		Humanoid.Died:connect(onDied)
		Humanoid.Running:connect(onRunning)
		Humanoid.Jumping:connect(onJumping)
		Humanoid.Climbing:connect(onClimbing)
		Humanoid.GettingUp:connect(onGettingUp)
		Humanoid.FreeFalling:connect(onFreeFall)
		Humanoid.FallingDown:connect(onFallingDown)
		Humanoid.Seated:connect(onSeated)



		-- main program



		local runService = game:service("RunService");
		runService.Heartbeat:Connect(function()
			if Figure.Parent~=nil then
				local _, time = wait(0.01)
				move(time)
			end
		end)




		--while Figure.Parent~=nil do
		--	local _, time = wait(0.1)
		--	move(time)

		--end
	else
		print('no')
	end






	function dead(position) 
		local und = Instance.new("Model",workspace) und.Name=" "
		und.Archivable=true
		local Torso = Instance.new("Part",und) Torso.Name="Torso" Torso.Size=Vector3.new(2,2,1) Torso.Color=Color3.new() 
		local Head = Instance.new("Part",und) Head.Size=Vector3.new(2,1,1) Head.Name="Head" Head.Color=Color3.new()  
		local mesh = Instance.new("SpecialMesh",Head) mesh.MeshId="rbxassetid://6741699892" mesh.Scale = Vector3.new(0.025, 0.025, 0.025)

		local rightarm = Instance.new("Part",und) rightarm.Size=Vector3.new(1,2,1) rightarm.Name="Right Arm" rightarm.Color=Color3.new() 
		local leftarm = Instance.new("Part",und) leftarm.Size=Vector3.new(1,2,1) leftarm.Name="Left Arm" leftarm.Color=Color3.new() 
		local leftleg = Instance.new("Part",und) leftleg.Size=Vector3.new(1,2,1) leftleg.Name="Left Leg" leftleg.Color=Color3.new()  
		local rightleg = Instance.new("Part",und) rightleg.Size=Vector3.new(1,2,1) rightleg.Name="Right Leg" rightleg.Color=Color3.new()   
		local root = Instance.new("Part",und) root.Size=Torso.Size root.Transparency=1 root.Name='HumanoidRootPart'root.CFrame=position local rootjoint = Instance.new("Motor6D",root) rootjoint.Name='RootJoint' rootjoint.Part0=root rootjoint.Part1=Torso 
		local Humanoid = Instance.new("Humanoid",und) Humanoid.MaxHealth=9e9 Humanoid.Health=Humanoid.MaxHealth Humanoid.HealthDisplayDistance=Enum.HumanoidHealthDisplayType.AlwaysOff
		Instance.new("Animator",Humanoid).Name="Animator" Humanoid.BreakJointsOnDeath=false  Humanoid.RequiresNeck=false



		local Figure=und
		player.Character=und



		--making the joints (dont worry, i also dont know how joints work)



		function waitForChild(parent, childName)
			local child = parent:findFirstChild(childName)
			if child then return child end
			while true do
				child = parent.ChildAdded:wait()
				if child.Name==childName then return child end
			end
		end






		Ghost()


		function makeJoint(limbName, jointName, c0, c1)
			local limb = waitForChild(Figure, limbName)
			if limb.Name=='Head' then

			else
				limb:BreakJoints()	

			end
			local joint = Instance.new"Motor6D"
			joint.Name = jointName

			joint.Part0 = Torso
			joint.Part1 = limb
			joint.C0 = c0
			joint.C1 = c1
			joint.MaxVelocity = 0.5
			joint.archivable = true
			joint.Parent = Torso
			return joint
		end



		local Neck = makeJoint("Head","Neck", CFrame.new(0, 1, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0), CFrame.new(0, -0.5, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0))
		local RightShoulder = makeJoint("Right Arm", "Right Shoulder", CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0), CFrame.new(-0.5, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0))
		local LeftShoulder = makeJoint("Left Arm", "Left Shoulder", CFrame.new(-1, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0), CFrame.new(0.5, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0))
		local RightHip = makeJoint("Right Leg", "Right Hip", CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0), CFrame.new(0.5, 1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0))
		local LeftHip = makeJoint("Left Leg", "Left Hip", CFrame.new(-1, -1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0), CFrame.new(-0.5, 1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0))





		-- util




		function waitForChild(parent, childName)
			while true do
				local child = parent:findFirstChild(childName)
				if child then
					return child
				end
				parent.ChildAdded:wait()
			end
		end



		-- declarations

		--local Figure = owner.Character
		--local Torso = waitForChild(Figure, "Torso")
		--local Humanoid = waitForChild(Figure, "Humanoid")
		--local RightShoulder = waitForChild(Torso, "Right Shoulder")
		--local LeftShoulder = waitForChild(Torso, "Left Shoulder")
		--local RightHip = waitForChild(Torso, "Right Hip")
		--local LeftHip = waitForChild(Torso, "Left Hip")
		--local Neck = waitForChild(Torso, "Neck")



		-- functions



		local toolAnim = "None"
		local toolAnimTime = 0

		-- functions

		function onRunning(speed)
			if speed>0 then
				pose = "Running"
			else
				pose = "Standing"
			end
		end

		function onDied()
			pose = "Dead"
		end

		function onJumping(state)
			pose = "Jumping"
		end

		function onClimbing()
			pose = "Climbing"
		end

		function onGettingUp(state)
			pose = "GettingUp"
		end

		function onFreeFall(state)
			pose = "FreeFall"
		end

		function onFallingDown(state)
			pose = "FallingDown"
		end

		function onSeated()
			pose = "Seated"
		end

		function moveJump()
			RightShoulder.MaxVelocity = 0.5
			LeftShoulder.MaxVelocity = 0.5
			RightShoulder.DesiredAngle = 3.14
			LeftShoulder.DesiredAngle = -3.14
			RightHip.DesiredAngle = 0
			LeftHip.DesiredAngle = 0
		end


		-- same as jump for now

		function moveFreeFall()
			RightShoulder.MaxVelocity = 0.5
			LeftShoulder.MaxVelocity = 0.5
			RightShoulder.DesiredAngle = 3.14
			LeftShoulder.DesiredAngle = -3.14
			RightHip.DesiredAngle = 0
			LeftHip.DesiredAngle = 0
		end

		function moveSit()
			RightShoulder.MaxVelocity = 0.15
			LeftShoulder.MaxVelocity = 0.15
			RightShoulder.DesiredAngle = 3.14 /2
			LeftShoulder.DesiredAngle = -3.14 /2
			RightHip.DesiredAngle = 3.14 /2
			LeftHip.DesiredAngle = -3.14 /2
		end

		local function getTool()
			for i, v in ipairs(Figure:GetChildren()) do
				if v:IsA"Tool" then
					return v
				end
			end
			return nil
		end

		function getToolAnim(tool)
			for _, c in ipairs(tool:GetChildren()) do
				if c.Name == "toolanim" and c.className == "StringValue" then
					return c
				end
			end
			return nil
		end

		function animateTool()

			if (toolAnim == "None") then
				RightShoulder.DesiredAngle = 1.57
				return
			end

			if (toolAnim == "Slash") then
				RightShoulder.MaxVelocity = 0.5
				RightShoulder.DesiredAngle = 0
				return
			end

			if (toolAnim == "Lunge") then
				RightShoulder.MaxVelocity = 0.5
				LeftShoulder.MaxVelocity = 0.5
				RightHip.MaxVelocity = 0.5
				LeftHip.MaxVelocity = 0.5
				RightShoulder.DesiredAngle = 1.57
				LeftShoulder.DesiredAngle = 1.0
				RightHip.DesiredAngle = 1.57
				LeftHip.DesiredAngle = 1.0
				return
			end
		end

		function move(time)
			local amplitude
			local frequency

			if (pose == "Jumping") then
				moveJump()
				return
			end

			if (pose == "FreeFall") then
				moveFreeFall()
				return
			end

			if (pose == "Seated") then
				moveSit()
				return
			end

			local climbFudge = 0

			if (pose == "Running") then
				RightShoulder.MaxVelocity = 0.15
				LeftShoulder.MaxVelocity = 0.15
				amplitude = 1
				frequency = 9
			elseif (pose == "Climbing") then
				RightShoulder.MaxVelocity = 0.5 
				LeftShoulder.MaxVelocity = 0.5
				amplitude = 1
				frequency = 9
				climbFudge = 3.14
			else
				amplitude = 0.1
				frequency = 1
			end

			desiredAngle = amplitude * math.sin(time*frequency)

			RightShoulder.DesiredAngle = desiredAngle + climbFudge
			LeftShoulder.DesiredAngle = desiredAngle - climbFudge
			RightHip.DesiredAngle = -desiredAngle
			LeftHip.DesiredAngle = -desiredAngle


			local tool = getTool()

			if tool then

				animStringValueObject = getToolAnim(tool)

				if animStringValueObject then
					toolAnim = animStringValueObject.Value
					-- message recieved, delete StringValue
					animStringValueObject.Parent = nil
					toolAnimTime = time + .3
				end

				if time > toolAnimTime then
					toolAnimTime = 0
					toolAnim = "None"
				end

				animateTool()


			else
				toolAnim = "None"
				toolAnimTime = 0
			end
		end


		-- connect events

		Humanoid.Died:connect(onDied)
		Humanoid.Running:connect(onRunning)
		Humanoid.Jumping:connect(onJumping)
		Humanoid.Climbing:connect(onClimbing)
		Humanoid.GettingUp:connect(onGettingUp)
		Humanoid.FreeFalling:connect(onFreeFall)
		Humanoid.FallingDown:connect(onFallingDown)
		Humanoid.Seated:connect(onSeated)



		-- main program

		local fakeface = Instance.new('Decal',Head) fakeface.Name='face'


		local runService = game:service("RunService");
		runService.Heartbeat:Connect(function()
			if Figure.Parent~=nil then
				local _, time = wait(0.05)
				move(time)
			end

		end)











		-- main program

	end
end

function fakechar(victim)
	victim.Archivable=true
	print(victim.Name)
	local display = ' '--victim.Name..'?'
	local fakemodel = Instance.new("Model",workspace) fakemodel.Name='Ghost'
	fakemodel.Archivable=true
	local huma = victim:FindFirstChildOfClass('Humanoid')
	huma.Parent=nil
	local rig = huma.RigType
	if huma.Health<5 then
		print('dead')
		huma=nil
		fakemodel:Destroy()
		fakemodel = Instance.new("Model",workspace) fakemodel.Name='Ghost'
		huma = Instance.new("Humanoid",victim) huma.DisplayName=display huma.MaxHealth=9e9 huma.Health=9e9  huma.RigType=rig 
		local an = Instance.new('Animator',huma) an.Name='Animator' huma.Parent=fakemodel
	else
		print('yes')
		local hum = huma:Clone() hum.DisplayName=display hum.MaxHealth=9e9 hum.Health=hum.MaxHealth hum.RequiresNeck=false hum.RigType=rig hum.Parent=fakemodel
		local an = Instance.new('Animator',hum) an.Name='Animator'
	end
	

	
	






	for i,v in pairs(victim:GetDescendants()) do
		if v:IsA("BasePart") then
			if v.Name=='Handle' then

			else
				local child = v:GetChildren()
				v.Parent=fakemodel
				child.Parent=v
				v.Anchored=false
			end
		end
	end




	



	for i,v in pairs(victim:GetDescendants()) do
		if v:IsA("Accessory") then
			v.Parent=fakemodel
		end
	end

	for i,v in pairs(victim:GetDescendants()) do
		if v:IsA("CharacterMesh") then
			v.Parent=fakemodel
		end
	end

	local shirt = victim:FindFirstChildOfClass('Shirt')
	if shirt then
		shirt.Parent=fakemodel
	end

	local pant = victim:FindFirstChildOfClass('Pants')
	if pant then
		pant.Parent=fakemodel
	end
	player.Character=fakemodel



	for i,v in pairs(victim:GetDescendants()) do
		if v:IsA("Script") then
			if v.Name=='Animate' then
				v.Disabled=true
				v.Parent=fakemodel
				v.Disabled=false
			else
				if v.Name=='Sound' then
					v.Disabled=true
					v.Parent=fakemodel 
					v.Disabled=false
				else
					v.Disabled=true
				end
			end
		end
	end



	for i,v in pairs(victim:GetDescendants()) do
		if v:IsA("LocalScript") then
			if v.Name=='Animate' then
				v.Disabled=false
				v.Parent=player.Character 
			else
				--v.Disabled=true
			end
		end
	end
	wait()
	local r15yes = fakemodel:FindFirstChild('UpperTorso')
	if r15yes then
	else
		print('animation loading')
		animation(fakemodel)
	end
	camera()
	localscript()


	local normalchar = fakemodel:FindFirstChild('HumanoidRootPart')
	if normalchar then
		local findroot = normalchar:FindFirstChildOfClass('Motor6D')
		if findroot then
		else
			local joint = Instance.new("Motor6D",normalchar)
			local TOrrso = fakemodel:FindFirstChild('Torso')
			if TOrrso then
				joint.Part0=normalchar joint.Part1=normalchar joint.Name='RootJoint'
			end
		end

	end
	wait(1)



	print('Loaded')
	print('You have taken over '..victim.Name)
	--fakemodel.Archivable=true
	local victimplayer = game.Players:GetPlayerFromCharacter(victim)
	if not victimplayer then 	victim.Parent=nil return end
	print('killed player '..victimplayer.Name)
	victimplayer:LoadCharacter()
	wait()
end


function dead(position) 
	local und = Instance.new("Model",workspace) und.Name=" "
	local Torso = Instance.new("Part",und) Torso.Name="Torso" Torso.Size=Vector3.new(2,2,1) Torso.Color=Color3.new() Torso.Transparency=.5
	local Head = Instance.new("Part",und) Head.Size=Vector3.new(2,1,1) Head.Name="Head" Head.Color=Color3.new()  Head.Transparency=.6
	local mesh = Instance.new("SpecialMesh",Head) mesh.MeshId="rbxassetid://6741699892" mesh.Scale = Vector3.new(0.025, 0.025, 0.025)

	local rightarm = Instance.new("Part",und) rightarm.Size=Vector3.new(1,2,1) rightarm.Name="Right Arm" rightarm.Color=Color3.new()  rightarm.Transparency=.5
	local leftarm = Instance.new("Part",und) leftarm.Size=Vector3.new(1,2,1) leftarm.Name="Left Arm" leftarm.Color=Color3.new() leftarm.Transparency=.5
	local leftleg = Instance.new("Part",und) leftleg.Size=Vector3.new(1,2,1) leftleg.Name="Left Leg" leftleg.Color=Color3.new()  leftleg.Transparency=.5
	local rightleg = Instance.new("Part",und) rightleg.Size=Vector3.new(1,2,1) rightleg.Name="Right Leg" rightleg.Color=Color3.new()   rightleg.Transparency=.5
	local root = Instance.new("Part",und) root.Size=Torso.Size root.Transparency=1 root.Name='HumanoidRootPart'root.CFrame=position local rootjoint = Instance.new("Motor6D",root) rootjoint.Name='RootJoint' rootjoint.Part0=root rootjoint.Part1=Torso 
	local Humanoid = Instance.new("Humanoid",und) Humanoid.MaxHealth=9e9 Humanoid.Health=Humanoid.MaxHealth Humanoid.HealthDisplayDistance=Enum.HumanoidHealthDisplayType.AlwaysOff
	Instance.new("Animator",Humanoid).Name="Animator" Humanoid.BreakJointsOnDeath=false  Humanoid.RequiresNeck=false



	local Figure=und
	player.Character=und



	--making the joints (dont worry, i also dont know how joints work)



	function waitForChild(parent, childName)
		local child = parent:findFirstChild(childName)
		if child then return child end
		while true do
			child = parent.ChildAdded:wait()
			if child.Name==childName then return child end
		end
	end






	Ghost()


	function makeJoint(limbName, jointName, c0, c1)
		local limb = waitForChild(Figure, limbName)
		if limb==root then

		else
			limb:BreakJoints()	

		end
		local joint = Instance.new"Motor6D"
		joint.Name = jointName

		joint.Part0 = Torso
		joint.Part1 = limb
		joint.C0 = c0
		joint.C1 = c1
		joint.MaxVelocity = 0.5
		joint.archivable = true
		joint.Parent = Torso
		return joint
	end



	local Neck = makeJoint("Head","Neck", CFrame.new(0, 1, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0), CFrame.new(0, -0.5, 0, -1, -0, -0, 0, 0, 1, 0, 1, 0))
	local RightShoulder = makeJoint("Right Arm", "Right Shoulder", CFrame.new(1, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0), CFrame.new(-0.5, 0.5, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0))
	local LeftShoulder = makeJoint("Left Arm", "Left Shoulder", CFrame.new(-1, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0), CFrame.new(0.5, 0.5, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0))
	local RightHip = makeJoint("Right Leg", "Right Hip", CFrame.new(1, -1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0), CFrame.new(0.5, 1, 0, 0, 0, 1, 0, 1, 0, -1, -0, -0))
	local LeftHip = makeJoint("Left Leg", "Left Hip", CFrame.new(-1, -1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0), CFrame.new(-0.5, 1, 0, -0, -0, -1, 0, 1, 0, 1, 0, 0))





	-- util





	function waitForChild(parent, childName)
		while true do
			local child = parent:findFirstChild(childName)
			if child then
				return child
			end
			parent.ChildAdded:wait()
		end
	end

	-- declarations

	--local Figure = owner.Character
	--local Torso = waitForChild(Figure, "Torso")
	--local Humanoid = waitForChild(Figure, "Humanoid")
	--local RightShoulder = waitForChild(Torso, "Right Shoulder")
	--local LeftShoulder = waitForChild(Torso, "Left Shoulder")
	--local RightHip = waitForChild(Torso, "Right Hip")
	--local LeftHip = waitForChild(Torso, "Left Hip")
	--local Neck = waitForChild(Torso, "Neck")


	-- functions



	local toolAnim = "None"
	local toolAnimTime = 0

	-- functions

	function onRunning(speed)
		if speed>0 then
			pose = "Running"
		else
			pose = "Standing"
		end
	end

	function onDied()
		pose = "Dead"
	end

	function onJumping(state)
		pose = "Jumping"
	end

	function onClimbing()
		pose = "Climbing"
	end

	function onGettingUp(state)
		pose = "GettingUp"
	end

	function onFreeFall(state)
		pose = "FreeFall"
	end

	function onFallingDown(state)
		pose = "FallingDown"
	end

	function onSeated()
		pose = "Seated"
	end

	function moveJump()
		RightShoulder.MaxVelocity = 0.5
		LeftShoulder.MaxVelocity = 0.5
		RightShoulder.DesiredAngle = 3.14
		LeftShoulder.DesiredAngle = -3.14
		RightHip.DesiredAngle = 0
		LeftHip.DesiredAngle = 0
	end


	-- same as jump for now

	function moveFreeFall()
		RightShoulder.MaxVelocity = 0.5
		LeftShoulder.MaxVelocity = 0.5
		RightShoulder.DesiredAngle = 3.14
		LeftShoulder.DesiredAngle = -3.14
		RightHip.DesiredAngle = 0
		LeftHip.DesiredAngle = 0
	end

	function moveSit()
		RightShoulder.MaxVelocity = 0.15
		LeftShoulder.MaxVelocity = 0.15
		RightShoulder.DesiredAngle = 3.14 /2
		LeftShoulder.DesiredAngle = -3.14 /2
		RightHip.DesiredAngle = 3.14 /2
		LeftHip.DesiredAngle = -3.14 /2
	end

	local function getTool()
		for i, v in ipairs(Figure:GetChildren()) do
			if v:IsA"Tool" then
				return v
			end
		end
		return nil
	end

	function getToolAnim(tool)
		for _, c in ipairs(tool:GetChildren()) do
			if c.Name == "toolanim" and c.className == "StringValue" then
				return c
			end
		end
		return nil
	end

	function animateTool()

		if (toolAnim == "None") then
			RightShoulder.DesiredAngle = 1.57
			return
		end

		if (toolAnim == "Slash") then
			RightShoulder.MaxVelocity = 0.5
			RightShoulder.DesiredAngle = 0
			return
		end

		if (toolAnim == "Lunge") then
			RightShoulder.MaxVelocity = 0.5
			LeftShoulder.MaxVelocity = 0.5
			RightHip.MaxVelocity = 0.5
			LeftHip.MaxVelocity = 0.5
			RightShoulder.DesiredAngle = 1.57
			LeftShoulder.DesiredAngle = 1.0
			RightHip.DesiredAngle = 1.57
			LeftHip.DesiredAngle = 1.0
			return
		end
	end

	function move(time)
		local amplitude
		local frequency

		if (pose == "Jumping") then
			moveJump()
			return
		end

		if (pose == "FreeFall") then
			moveFreeFall()
			return
		end

		if (pose == "Seated") then
			moveSit()
			return
		end

		local climbFudge = 0

		if (pose == "Running") then
			RightShoulder.MaxVelocity = 0.15
			LeftShoulder.MaxVelocity = 0.15
			amplitude = 1
			frequency = 9
		elseif (pose == "Climbing") then
			RightShoulder.MaxVelocity = 0.5 
			LeftShoulder.MaxVelocity = 0.5
			amplitude = 1
			frequency = 9
			climbFudge = 3.14
		else
			amplitude = 0.1
			frequency = 1
		end

		desiredAngle = amplitude * math.sin(time*frequency)

		RightShoulder.DesiredAngle = desiredAngle + climbFudge
		LeftShoulder.DesiredAngle = desiredAngle - climbFudge
		RightHip.DesiredAngle = -desiredAngle
		LeftHip.DesiredAngle = -desiredAngle


		local tool = getTool()

		if tool then

			animStringValueObject = getToolAnim(tool)

			if animStringValueObject then
				toolAnim = animStringValueObject.Value
				-- message recieved, delete StringValue
				animStringValueObject.Parent = nil
				toolAnimTime = time + .3
			end

			if time > toolAnimTime then
				toolAnimTime = 0
				toolAnim = "None"
			end

			animateTool()


		else
			toolAnim = "None"
			toolAnimTime = 0
		end
	end


	-- connect events

	Humanoid.Died:connect(onDied)
	Humanoid.Running:connect(onRunning)
	Humanoid.Jumping:connect(onJumping)
	Humanoid.Climbing:connect(onClimbing)
	Humanoid.GettingUp:connect(onGettingUp)
	Humanoid.FreeFalling:connect(onFreeFall)
	Humanoid.FallingDown:connect(onFallingDown)
	Humanoid.Seated:connect(onSeated)



	-- main program

	local fakeface = Instance.new('Decal',Head) fakeface.Name='face'


	local runService = game:service("RunService");
	while Figure.Parent~=nil do
		local _, time = wait(0.1)
		move(time)
	end











	-- main program


end




function Ghost()
	local Character = player.Character
	local Position = Instance.new("WedgePart").CFrame
	local charname = player.Character.Name
	player.Backpack:ClearAllChildren()
	local head = Character:FindFirstChild('Head')
	if head then
		Position=head
		local fa =	head:FindFirstChildOfClass('Decal')
		if fa then fa:Destroy() 
		else
			local rooter= Character:FindFirstChild('HumanoidRootPart')
			if rooter then
				Position=rooter
			end

		end
	end

	game:GetService("RunService").Heartbeat:Connect(function()
		for i,v in pairs(player.Character:GetDescendants()) do
			if v:IsA("BasePart") then
				Position=v.CFrame
			end
		end
	end)

	local Humanoid = Character:FindFirstChildOfClass'Humanoid'
	local remote1 = Instance.new("RemoteEvent",player.Backpack) remote1.Name='grab'
	local	remote2 = Instance.new("RemoteEvent",player.Backpack) remote2.Name='reghost'
	local remote3 = Instance.new("RemoteEvent",player.Backpack) remote3.Name='Ghost'

	local attacking=false
	local ghost=true
	Character.Archivable=true
	local p = Instance.new("Part")





	localscript()
	camera()



	local f =	Instance.new("ForceField",Character)
	f.Visible=false
	local ChangeIndex = function(Tab,Ind,IsPrinted)
		for a,b in pairs(Ind)do
			local _,c = pcall(function()
				Tab[a] = b;
			end);
		end;
	end;
	local Instance2 = function(CN,P)
		local a = Instance.new(CN);
		ChangeIndex(a,P,1);
		return a;
	end;
	local ochar=Character
	Instance2('Folder',{Parent = ochar;});
	local a = ochar:FindFirstChildOfClass('Humanoid'); 
	a.Name = 'Ghost';
	a.MaxHealth = math.huge;
	a.Health = a.MaxHealth;
	local b = Instance2('Folder',{Parent=workspace;});
	ochar.Parent = b;


	remote3.OnServerEvent:Connect(function()
		dead(Position)
	end)

	local r6 = Character:FindFirstChild('Torso')
	if r6 then
		local Grabanim = Instance.new("Animation",Character) Grabanim.AnimationId='http://www.roblox.com/asset/?id=183294396'
		local attackmode = Humanoid:LoadAnimation(Grabanim)
		remote1.OnServerEvent:Connect(function()
			if attacking==false then
				attacking=true
				attackmode:Play()
				Humanoid.WalkSpeed=Humanoid.WalkSpeed+10
				Humanoid.JumpPower=100
				print('Attacking')
				print('on')
			else
				attacking=false
				attackmode:Stop()
				Humanoid.WalkSpeed=Humanoid.WalkSpeed-10	
				Humanoid.JumpPower=50
				print('Attacking')
				print('off')	
			end

		end)
		r6.Touched:Connect(function(hit)
			if attacking==true then
				local hum = hit.Parent:FindFirstChildOfClass('Humanoid')
				if hum then
					local victim = hum.Parent

					fakechar(victim)
					ghost=false
					local pla = game.Players:FindFirstChild(victim.Name)
					if pla then
						--   pla:LoadCharacter()
					end
					remote1 = Instance.new("RemoteEvent",player.Backpack) remote1.Name='grab'
					remote2 = Instance.new("RemoteEvent",player.Backpack) remote2.Name='reghost'
					remote3 = Instance.new("RemoteEvent",player.Backpack) remote3.Name='Ghost'
					remote3.OnServerEvent:Connect(function()
						dead(Position)
					end)
					remote2.OnServerEvent:Connect(function()
						if ghost==false then
							Ghost()
							print('death')
						else

						end

					end)

				end
			end
		end)
	else
		local r15 = Character:FindFirstChild('UpperTorso')
		if r15 then
			remote1.OnServerEvent:Connect(function()
				if attacking==false then
					attacking=true
					Humanoid.WalkSpeed=Humanoid.WalkSpeed+10
					Humanoid.JumpPower=100
					print('Attacking')
					print('on')
				else
					attacking=false
					Humanoid.WalkSpeed=Humanoid.WalkSpeed-10	
					Humanoid.JumpPower=50
					print('Attacking')
					print('off')
				end

			end)
			r15.Touched:Connect(function(hit)
				if attacking==true then
					local hum = hit.Parent:FindFirstChildOfClass('Humanoid')
					if hum then
						local victim = hum.Parent

						fakechar(victim)
						ghost=false
						local pla = game.Players:FindFirstChild(victim.Name)
						if pla then
							-- pla:LoadCharacter()
						end
						remote1 = Instance.new("RemoteEvent",player.Backpack) remote1.Name='grab'
						remote2 = Instance.new("RemoteEvent",player.Backpack) remote2.Name='reghost'
						remote3 = Instance.new("RemoteEvent",player.Backpack) remote3.Name='Ghost'
						remote3.OnServerEvent:Connect(function()
							dead(Position)
						end)
						remote2.OnServerEvent:Connect(function()
							if ghost==false then
								Ghost()
								print('death')
							else

							end

						end)
					end
				end
			end)
			for i,v in pairs(Character:GetDescendants()) do
				if v:IsA("BasePart") then
					v.CanCollide=false
				end
			end

		end
	end



	wait()




	for i,v in pairs(Character:GetDescendants()) do
		if v:IsA("BasePart") then
			v.Color=Color3.new()
			if v.Name=='HumanoidRootPart' then
				v.Transparency=1
			else
				v.Transparency=.8
				if v.Name=='Head' then
					v.Transparency=.9
				end
			end
		end
	end
end

dead(player.Character.HumanoidRootPart.CFrame)
INFO