So basically I'm trying to get it so that the player morphs into the certain player once the duplicated projectile is thrown. I tried doing it from an event but I don't know how to fire the event on the server/ it doesn't work when I try to get the player. Now I'm trying to morph the player on touch but it tells me that the Character isn't there?? Any ideas why!?

ServerScript in tool

local Tool = script.Parent
local Remote = Tool:WaitForChild("Remote")
local Handle = Tool:WaitForChild("Handle")

local Conf = script.Parent.Conf

local BrokenEggMesh = "http://www.roblox.com/asset/?id=1529081"

local FriendlyFire = false

local CanThrow = true

local AttackPower = 1
local AttackDamage = Conf.Damage.Value
local HeadShot = Conf.Headshot.Value
local AtackRechargeTime = 2
local AttackRecharge = 1/AtackRechargeTime
local AttackSpeed = 256

local Equipped = false
local Heartbeat = game:GetService("RunService").Heartbeat

local Knives = {}

--returns the wielding player of this tool
function getPlayer()
	local char = Tool.Parent
	return game:GetService("Players"):GetPlayerFromCharacter(char)
end

--helpfully checks a table for a specific value
function contains(t, v)
	for _, val in pairs(t) do
		if val == v then
			return true
		end
	end
	return false
end

--tags a human for the ROBLOX KO system
function tagHuman(human)
	local tag = Instance.new("ObjectValue")
	tag.Value = getPlayer()
	tag.Name = "creator"
	tag.Parent = human
	game:GetService("Debris"):AddItem(tag)
end

--used by checkTeams
function sameTeam(otherHuman)
	local player = getPlayer()
	local otherPlayer = game:GetService("Players"):GetPlayerFromCharacter(otherHuman.Parent)
	if player and otherPlayer then
		return player.TeamColor == otherPlayer.TeamColor
	end
	return false
end

--use this to determine if you want this human to be harmed or not, returns boolean
function checkTeams(otherHuman)
	return not (sameTeam(otherHuman) and not FriendlyFire)
end

function getKnife()
	local knife = Handle:clone()
	knife.Trail.Enabled = true
	knife.Transparency = 0
	knife.Hit.Pitch = math.random(90, 110)/100
	
	local lift = Instance.new("BodyForce")
	lift.force = Vector3.new(0, 196.2, 0) * knife:GetMass() * 0.8
	lift.Parent = knife
	
	local proj = Tool.Projectile:Clone()
	proj.Disabled = false
	proj.Parent = knife
	
	return knife
end

function equippedLoop()
	while Equipped do
		local dt = Heartbeat:wait()
		
		if AttackPower < 1 then
			AttackPower = AttackPower + dt * AttackRecharge
			if AttackPower > 1 then
				AttackPower = 1
			end
		end
		
		Handle.Transparency = 1 - AttackPower
	end
end

function onLeftDown(mousePos)
	local knife = getKnife()
	knife.CFrame = CFrame.new(Handle.Position, mousePos)
	knife.Velocity = knife.CFrame.lookVector * AttackSpeed * AttackPower
	local damage = AttackDamage * AttackPower
	local touched
	touched = knife.Touched:connect(function(part)
		if part:IsDescendantOf(Tool.Parent) then return end
		if contains(Knives, part) then return end
		
		if part.Parent and part.Parent:FindFirstChild("Humanoid") then
			knife.Trail.Enabled = false
			local human = part.Parent.Humanoid
			if checkTeams(human) and part.Name ~= ("Head") then
				
			local player = part.Parent
				
			local morph = game.ReplicatedStorage.Morphs.SweetCheeks
					
			local par = part.Parent.Parent
			
	            local ply = game.Players:GetPlayerFromCharacter(par)
	
		
	                local Char = morph:Clone()
					local Character = player:FindFirstChild("Character")
					if Character then
					local Pos = Character:GetPrimaryPartCFrame()
					local Schar = game.StarterPlayer:FindFirstChild("StarterCharacter")
					game:GetService("StarterPlayer")
					player.Character:Destroy()
					player.Character = Char
					Char.Parent = workspace
					local p = Char:Clone()
					p.Parent = game.StarterPlayer
					Char:SetPrimaryPartCFrame(Pos)
					Schar:Destroy()
					
				else
						warn("Character False")
					end

				tagHuman(human)
				human:TakeDamage(damage)
				knife.Hit:Play()
				
			end
			
		end

		knife.Projectile:Destroy()
		
		local w = Instance.new("Weld")
		w.Part0 = part
		w.Part1 = knife
		w.C0 = part.CFrame:toObjectSpace(knife.CFrame)
		w.Parent = w.Part0
		
		touched:disconnect()
	end)
	table.insert(Knives, knife)
	knife.Parent = workspace
	
	game:GetService("Debris"):AddItem(knife, 3.5)
	delay(1, function()
		knife.Transparency = 1
	end)
	
	Remote:FireClient(getPlayer(), "PlayAnimation", "Throw")	
	
	Handle.Throw.Pitch = 0.8 + 0.4 * AttackPower
	Handle.Throw:Play()
	
	AttackPower = 0
end

function onRemote(player, func, ...)
	if player ~= getPlayer() then return end
	
	if func == "LeftDown" and CanThrow == true then
		CanThrow = false
		onLeftDown(...)
		wait(1)
		CanThrow = true
	end
end

function onEquip()
	Equipped = true
	equippedLoop()
end

function onUnequip()
	Equipped = false
end

script.Parent.Activated:Connect(function()
	
	
	
end)

Remote.OnServerEvent:connect(onRemote)
Tool.Equipped:connect(onEquip)
Tool.Unequipped:connect(onUnequip)


Server Morph Script w/ Event

local event = game.ReplicatedStorage.Events.Morph

event.OnServerEvent:Connect(function(player, model)
	print("--------")
	print("Player: "..player)
	print("--------")
	print("Morph: "..model)
	local Char = model:Clone()
	local Pos = player.Character:GetPrimaryPartCFrame()
	local Schar = game.StarterPlayer:FindFirstChild("StarterCharacter")
	game:GetService("StarterPlayer")
	player.Character:Destroy()
	player.Character = Char
	Char.Parent = workspace
	local p = Char:Clone()
	p.Parent = game.StarterPlayer
	Char:SetPrimaryPartCFrame(Pos)
	Schar:Destroy()
	wait(30)
	
end)

1 comment

0

Hm??