I already have it so when the player unequipes the tool it respawns and when the player dies it respawns but now I need the tool to respawn when the player leaves.
My current code I have is this:
local DefaultPosValue = script.Parent:WaitForChild("DefaultCFrame")
local Handle = script.Parent.Handle
local Tool = script.Parent
DefaultPosValue.Value = Handle.CFrame
local AttachedHumanoid = Tool:FindFirstChild("ReplacementHumanoid")
local CurrentPos = script.Parent:WaitForChild("CurrentPos")
Tool.Unequipped:Connect(function()
task.wait()
Tool.Parent = workspace
print(CurrentPos.Value)
Handle.CFrame = DefaultPosValue.Value
end)
while wait() do
CurrentPos.Value = Handle.Position
if Tool.Parent:FindFirstChildWhichIsA("Humanoid") then
AttachedHumanoid = Tool.Parent:FindFirstChildWhichIsA("Humanoid")
if AttachedHumanoid.Health == 0 then
task.wait()
Tool.Parent = workspace
print(CurrentPos.Value)
Handle.CFrame = DefaultPosValue.Value
end
end
end
Is there any way that I can make it respawn to workspace when the player leaves the game?
I forgot to put this image because my internet almost went out:
yeah, There is a player event called PlayerRemoving or something like that, which will fire when a player leaves, connect that to the player which has the tool, and if the tool is switched between players make sure to disconnect the functions too
Then make a copy of that tool, put it in serverstorage, and when the player left, or if the tool doesnt exist anymore copy the tool from the serverstorage and clone it and parent it to workspace, or where you want your tool to be.
I cant figure out how i can implement this but is this close? I dont understand how scripts work with clones.
local DefaultPosValue = script.Parent:WaitForChild("DefaultCFrame")
local Handle = script.Parent.Handle
local Tool = script.Parent
DefaultPosValue.Value = Handle.CFrame
local AttachedHumanoid = Tool:FindFirstChild("ReplacementHumanoid")
local CurrentPos = script.Parent:WaitForChild("CurrentPos")
local Plrs = game:GetService("Players")
if script.Parent.IsCopy.Value == false then
Copy = Tool:Clone()
Copy.Parent = game.ServerStorage.ToolCopys
Copy.IsCopy.Value = true
end
function Respawn()
Tool.Parent = workspace
print(CurrentPos.Value)
Handle.CFrame = DefaultPosValue.Value
end
Tool.Unequipped:Connect(function()
if script.Parent.IsCopy.Value == false then
task.wait()
Respawn()
end
end)
while wait() do
if script.Parent.IsCopy.Value == false then
CurrentPos.Value = Handle.Position
if Tool.Parent:FindFirstChildWhichIsA("Humanoid") then
AttachedHumanoid = Tool.Parent:FindFirstChildWhichIsA("Humanoid")
if AttachedHumanoid.Health == 0 then
task.wait()
Respawn()
end
Copy.CurrentHumanoid.Value = AttachedHumanoid
end
end
end
Plrs.PlayerRemoving:Connect(function(plr)
if script.Parent.IsCopy == true then
if script.Parent.CurrentHumanoid.Value == plr.Character.Humanoid then
local CurrentClone = Tool:Clone()
Tool.Parent = workspace
Tool.Handle.CFrame = DefaultPosValue.Value
end
end
end)
well then how is it going to copy itself if it gets deleted? then the script gets deleted too, make a second script and put it in ServerScriptService, i can give you an example how this would work:
local tool = workspace:FindFirstChild("tool") -- change this to your tools name and where it is
local ClonedTool = game.ServerStorage.tool -- change this to your needs.
while task.wait(1) do
if not tool then -- if the tool doesn't exist then its going to clone the tool from ServerStorage (copy your tool first in ServerStorage)
local clonetool = ClonedTool:clone()
clonetool.Parent = -- where you want it to be parented to
clonetool.Position = -- what position you want it to be
else
print("Tool exists!") -- if the tool exists, it should print this out, you can remove this if you want
end
end
this is just an example, you can try it out and modify it to your needs. and you can add more, like some stuff maybe you want it to have a different name then just add: clonetool.Name = “hello”
Sorry but it doesent work and its prob because i modified it abit but what else can I do I dont have the exact CFrame
Also is there a way to just put to tool back in workspace before the player leaves?
local tool = workspace:FindFirstChild("Hammer")
local tCFrame = tool.DefaultCFrame
local ClonedTool = game.ServerStorage.tool
wait(1)
tCFrame = tCFrame.Value
while task.wait(1) do
if not tool then
local clonetool = ClonedTool:clone()
clonetool.Parent = workspace
clonetool.Position = tCFrame
else
print("Tool exists!")
end
end
local ClonedTool = game.ServerStorage.tool -- i think your tools name is hammer so change this to hammer
did you forget replacing the name?
also this is wrong and will make your code break:
clonetool.Position = tCFrame
okay wait why did you put a value on the cframe and also why did you make the position to itself, if you want to actually position it then do:
clonetool.Position = workspace.part.Position
make sure to replace part with your actual part where you want to place it.
if you dont want to Position it and parent it to something then you can remove the position thingy
Also
well that script clones the tool from the ServerStorage (if you firstly duplicated your tool and put it in there) and if the tool doesnt exist, it puts it into the workspace. (if the player leaves the tool is gone / deleted so the script just respawns it after the tool is gone)
note: this script searches the workspace for the tool, and since players have tools in themselves inside, i don’t think it would work then, instead of searching then in workspace for the tool you can maybe do something like :GetDescendants() so it will look through the workspace, not only the models but also every child inside of them.
this is an example:
for _, v in pairs(workspace:GetDescendants()) do -- Searches through every single thing
if not v:IsA("Tool") then -- if its not a tool then it executes code
-- Code that will get executed (clone and insert the tool to workspace or where you like)
end
end