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)