Can't equip a tool without it being in workspace

Basically, I have disabled the backpack core gui, and so I’m using hum:equiptool to equip the tool, but when the tool isn’t in workspace, it doesn’t equip to my character, It just becomes visible and sits where it starts, and this also wont go to my character when the tool is anchored beforehand, for example, If the tool is anchored and then I unanchor and equip it to my humanoid, the tool just wont stick to the character and will do the same thing, become visible and sit there. Can anyone help me fix this? It’s not necessary to have a secret bunker of tools

1 Like

You can parent the Tool to the player’s Character which should cause them to equip it as well

how about you move the tool to workspace just before you call Humanoid:EquipTool, and move it back to somewhere else just after calling the unequip function?

Weirdly, only equip tool works when the backpack is disabled, and it just stays in the same position.

I tried this and it done the exact same thing, just became visible and sat there, not in my hand, but when it is in workspace beforehand, somehow it works…

Are you using a server Script or a LocalScript to equip the Tool?

Localscript

[I hate the minimum word thingy]

I would suggest using a server Script to make the character equip the Tool. I’ll see if I can find a way to replicate your problem so I can test it too

Okay, thank you, and please tell me your results

1 Like

During testing I’m noticing something important: Does your Tool have a handle? If it doesn’t then the character won’t hold out their hand even if the Tool is successfully equipped

Yes, it does indeed have a handle named “Handle”

I noticed that in the serverscript, even if it’s in replicated storage, parenting the tool to char actually does work.

1 Like

I’m unable to replicate you issue when testing using a Tool that has a Handle, so I’ll need to see your current script if possible

Okay, here

Code:

local closet = workspace.Closet
local closetProx = closet:WaitForChild(“closetProximity”):WaitForChild(“ProximityPrompt”)
local dad = workspace:WaitForChild(“Father”)
local dhp = dad:WaitForChild(“HumanoidRootPart”)
local askDad = dad:WaitForChild(“Torso”):WaitForChild(“askDad”)
local plr = game.Players.LocalPlayer
local char = plr.Character or plr.CharacterAdded:Wait()
local hrp = char:FindFirstChild(“HumanoidRootPart”)
local hum = char:FindFirstChild(“Humanoid”)
local Control = require(game.ReplicatedStorage:WaitForChild(“Modules”):WaitForChild(“plrControl”))
local objective = plr.PlayerGui.Main.Objective
local dialogue = plr.PlayerGui.Main.Dialogue
local cam = workspace.CurrentCamera
local SCam = workspace:WaitForChild(“SCam”)
local animate = char:WaitForChild(“Animate”)
local washingMachine = workspace.WashingMachine
local washingProx = washingMachine:WaitForChild(“proxPart”):WaitForChild(“ProximityPrompt”)

local walk = animate:WaitForChild(“walk”):WaitForChild(“WalkAnim”)
local normalWalk = walk.AnimationId
local idle = animate:WaitForChild(“idle”):WaitForChild(“Animation1”)
local normalIdle = idle.AnimationId
local idle1 = animate:WaitForChild(“idle”):WaitForChild(“Animation2”)
local normalIdle1 = idle1.AnimationId
local cartoonFootsteps = “rbxassetid://15996127789”
local noJumpId = “”
local walkID = “rbxassetid://16029212356”
local tap = workspace:WaitForChild(“Tap”)
local tapProx = tap:WaitForChild(“tapProx”):WaitForChild(“ProximityPrompt”)
local cleanPlates = workspace:WaitForChild(“CleanPlates”)
local dirtyPlates = tap:WaitForChild(“DirtyPlates”)
local tapWater = tap:WaitForChild(“tapWater”)
local water = tap:WaitForChild(“water”)
local ts = game:GetService(“TweenService”)
local ti = TweenInfo.new(3)
local waterTween = ts:Create(water, ti, {Size = water.Size + Vector3.new(0,1.5,0)})
local idleID = “rbxassetid://16029335566”
local soundID = game.ReplicatedStorage:WaitForChild(“Events”):WaitForChild(“SoundID”)
local bigstepsID = “rbxassetid://1244506786”
local normalSteps = “rbxassetid://15996127789”
local DCam = workspace:WaitForChild(“DCam”)
local Time = 0
local skipTime = 0
local bin = workspace:WaitForChild(“Bin”)
local binProx = bin:WaitForChild(“proxPart”):WaitForChild(“ProximityPrompt”)
local trash = workspace:WaitForChild(“Trash”)
local trashProx = trash:WaitForChild(“proxPart”):WaitForChild(“ProximityPrompt”)
local trashTool = workspace:WaitForChild(“TrashTool”)

local skipTime1 = 0
local skipTime2 = 0
local tpPart = workspace.dialogueTp
local skip = plr.PlayerGui.Main.Skip
local laundry = false
local event = game.ReplicatedStorage:WaitForChild(“Events”):WaitForChild(“Cutscene”)
local skipped = false
local uis = game:GetService(“UserInputService”)
local LaundryProx = workspace:WaitForChild(“Laundry”):WaitForChild(“proxPart”):WaitForChild(“ProximityPrompt”)
closetProx.Triggered:Connect(function()
closetProx:Destroy()
askDad.Enabled = true
char:WaitForChild(“Pants”).PantsTemplate = “”
char:WaitForChild(“Shirt”).ShirtTemplate = “”
objective.Objective.Text = “Ask father if you can do your essay”
end)

tapProx.Triggered:Connect(function()
tapWater.Transparency = 0
water.Transparency = 0
tapProx.Parent:Destroy()
waterTween:Play()
tapWater:WaitForChild(“FaucetSound”):Play()
wait(3)
tapWater:WaitForChild(“FaucetSound”):Stop()
tapWater:Destroy()
dirtyPlates:Destroy()
for i,v in pairs(cleanPlates:GetChildren()) do
if v:IsA(“Part”) then
v.Transparency = 0
end
end
objective.Objective.Text = “Ask father if you can do your essay”
askDad.Enabled = true
end)

trashProx.Triggered:Connect(function()
for i,v in pairs(trashTool:GetChildren()) do
if v:IsA(“Part”) then
v.Transparency = 0
v.Anchored = false
v.CanCollide = false
end
end

trash:Destroy()
hum:EquipTool(trashTool)
Control.Uncontrol(hum)
walk.AnimationId = walkID
idle.AnimationId = idleID
idle1.AnimationId = idleID

binProx.Enabled = true
game.SoundService["The Entertainer (a)"]:Stop()
game.SoundService["heavy long scream"]:Play()

wait(0.2)
hrp:WaitForChild("Running").SoundId = bigstepsID
hrp:WaitForChild("Running").PlaybackSpeed = 0.8
hum.WalkSpeed = 9
hum.JumpPower = 0

end)

binProx.Triggered:Connect(function()

hum:UnequipTools()
Control.Uncontrol(hum)
walk.AnimationId = normalWalk
idle.AnimationId = normalIdle
idle1.AnimationId = normalIdle1
binProx:Destroy()
game.SoundService["The Entertainer (a)"]:Play()
game.SoundService["heavy long scream"]:Stop()
bin:WaitForChild("Part"):WaitForChild("binSound"):Play()
wait(0.2)
hrp:WaitForChild("Running").SoundId = cartoonFootsteps
hrp:WaitForChild("Running").PlaybackSpeed = 1
hum.WalkSpeed = 25
hum.JumpPower = 53
objective.Objective.Text = "Ask father if you can do your essay"

end)

LaundryProx.Triggered:Connect(function()
local laundry = workspace:WaitForChild(“LaundryBasket”)
for i,v in pairs(laundry:GetChildren()) do
if v:IsA(“Part”) then
v.Transparency = 0
v.Anchored = false
end
end

workspace:WaitForChild("Laundry"):Destroy()

hum:EquipTool(laundry)
Control.Uncontrol(hum)

walk.AnimationId = walkID
idle.AnimationId = idleID
idle1.AnimationId = idleID

washingProx.Enabled = true
game.SoundService["The Entertainer (a)"]:Stop()
game.SoundService["heavy long scream"]:Play()
wait(0.2)

hrp:WaitForChild("Running").SoundId = bigstepsID
hrp:WaitForChild("Running").PlaybackSpeed = 0.8

hum.WalkSpeed = 9
hum.JumpPower = 0

end)

washingProx.Triggered:Connect(function()
hum:UnequipTools()
washingProx:Destroy()
walk.AnimationId = normalWalk
idle.AnimationId = normalIdle
idle1.AnimationId = normalIdle1
Control.Uncontrol(hum)
hrp:WaitForChild(“Running”).SoundId = cartoonFootsteps
hrp:WaitForChild(“Running”).PlaybackSpeed = 1
workspace:WaitForChild(“WashingMachine”):WaitForChild(“proxPart”):WaitForChild(“washingMachine”):Play()
wait(0.2)
Control.Control(hum)
game.SoundService[“heavy long scream”]:Stop()
game.SoundService[“The Entertainer (a)”]:Play()
objective.Objective.Text = “Ask father if you do your essay”
askDad.Enabled = true
wait(3)
workspace:WaitForChild(“WashingMachine”):WaitForChild(“proxPart”):WaitForChild(“washingMachine”):Stop()
end)

askDad.Triggered:Connect(function()
game.SoundService[“The Entertainer (a)”]:Stop()
game.SoundService[“Peculiar Clock”]:Play()
event:FireServer(true)
if Time == 0 then
dhp.CFrame = CFrame.lookAt(dhp.Position, hrp.Position)
askDad.Enabled = false
Time += 1

	Control.Uncontrol(hum)
	cam.CameraType = Enum.CameraType.Scriptable
	dialogue.Visible = true
	objective.Visible = false
	skip.Visible = true
	cam.CFrame = SCam.CFrame
	hrp.CFrame = tpPart.CFrame
	dialogue.Dialogue.Text = "Father! Can I please do my essay, I know I haven't done anything around the house today, but that's just because I've been so busy with school"
	skip.MouseButton1Click:Connect(function()
		
		if skipTime == 0 then
			skipTime += 1
			cam.CFrame = DCam.CFrame
			dialogue.Dialogue.Text = "Well, now that I think abou-, NO!"
		elseif skipTime == 1 then
			skipTime += 1
			dialogue.Dialogue.Text = "You know I can't let you do your essay yet, I need help around the house! It's been hard since your brother passed. Go do the laundry!"
		elseif skipTime == 2 then
			dialogue.Dialogue.Text = "Ahh, I get it.."
			cam.CFrame = SCam.CFrame
			skipTime += 1 
		elseif skipTime == 3 then
			dialogue.Dialogue.Text = "(Ugh! He's always talking about my brother, I haven't even met him! I bet he's allowed to do his essays..)"
			skipTime += 1
		elseif skipTime == 4 then
			dialogue.Visible = false
			cam.CameraType = Enum.CameraType.Custom
			Control.Control(hum)
			skip.Visible = false
			objective.Visible = true
			objective.Objective.Text = "Do the laundry"
			LaundryProx.Enabled = true
			skipTime += 1
			
			game.SoundService["Peculiar Clock"]:Stop()
			game.SoundService["The Entertainer (a)"]:Play()
			event:FireServer(false)
			
			end
	end)
elseif Time == 1 then 
	dhp.CFrame = CFrame.lookAt(dhp.Position, hrp.Position)
	askDad.Enabled = false
	Time += 1 
	
	Control.Uncontrol(hum)
	cam.CameraType = Enum.CameraType.Scriptable
	dialogue.Visible = true
	objective.Visible = false
	skip.Visible = true
	cam.CFrame = SCam.CFrame
	hrp.CFrame = tpPart.CFrame
	dialogue.Dialogue.Text = "Hello father! May I please do my essay as I have finished doing the laundry?"
	skip.MouseButton1Click:Connect(function()
		
		if skipTime1 == 0 then
			skipTime1 += 1 
			cam.CFrame = DCam.CFrame
			dialogue.Dialogue.Text = "Like I said son, in the real world, you don't get let off when you need to do a little something, you should be thanking me for training you."
		elseif skipTime1 == 1 then
			skipTime1 += 1 
			cam.CFrame = SCam.CFrame
			dialogue.Dialogue.Text = "BUT I DONT NEED TO DO A LITTLE SOMETHING, I NEED TO DO THE BIGGEST ESSAY EVER !"
		elseif skipTime1 == 2 then
			cam.CFrame = DCam.CFrame
			skipTime1 += 1
			dialogue.Dialogue.Text = "If it really was the biggest essay ever, you'd be disobeying me!"
		elseif skipTime1 == 3 then
			dialogue.Dialogue.Text = "Go and wash up the plates"
			skipTime1 += 1
		elseif skipTime1 == 4 then
			cam.CFrame = SCam.CFrame
			skipTime1 += 1
			dialogue.Dialogue.Text = "(I need to go wash these plates quickly, I NEED to do my essay!)"
		elseif skipTime1 == 5 then
			skipTime1 += 1
			cam.CameraType = Enum.CameraType.Custom
			Control.Control(hum)
			game.SoundService["Peculiar Clock"]:Stop()
			game.SoundService["The Entertainer (a)"]:Play()
			event:FireServer(false)
			objective.Visible = true
			dialogue.Visible = false
			objective.Objective.Text = "Wash up the plates"
			skip.Visible = false
			tapProx.Enabled = true
			
			end
	end)
elseif Time == 2 then
	dhp.CFrame = CFrame.lookAt(dhp.Position, hrp.Position)
	askDad.Enabled = false
	Time += 1 
	
	Control.Uncontrol(hum)
	cam.CameraType = Enum.CameraType.Scriptable
	dialogue.Visible = true
	objective.Visible = false
	skip.Visible = true
	cam.CFrame = SCam.CFrame
	hrp.CFrame = tpPart.CFrame
	dialogue.Dialogue.Text = "I have finished washing the plates, they are the shiniest objects I have ever observed. May I do my essay?"
	skip.MouseButton1Click:Connect(function()
		
		if skipTime2 == 0 then
			
			skipTime2 += 1
			cam.CFrame = DCam.CFrame
			dialogue.Dialogue.Text = "Hmm, there is a still a few things that you have to do, but then you can do the essay"
			elseif skipTime2 == 1 then
				cam.CFrame = SCam.CFrame
				skipTime2 += 1
				dialogue.Dialogue.Text = "Eh, to be honest, this doesn't sound like a completely bad idea to me.."
				elseif skipTime2 == 2 then
					cam.CFrame = DCam.CFrame
					skipTime2 += 1
					dialogue.Dialogue.Text = "Well then, go ahead and take out the trash"
					elseif skipTime2 == 3 then
						
						skipTime2 += 1
						cam.CameraType = Enum.CameraType.Custom
						dialogue.Visible = false
						objective.Visible = true
						skip.Visible = false
						game.SoundService["Peculiar Clock"]:Stop()
						game.SoundService["The Entertainer (a)"]:Play()
						event:FireServer(false)
					    objective.Objective.Text = "Take out the trash"
						Control.Control(hum)
						trashProx.Enabled = true
			
		end
	end)
end

end)

1 Like

It is trashProx.Triggered [---------------------]

I think I found the cause of the problem: When equipping a Tool within a LocalScript using Humanoid:EquipTool nothing seems to actually happen but when doing so within a server Script it works but only if the Tool is inside of workspace, not ReplicatedStorage

But if the tool is in workspace, then using equiptool with the local script works, right? It just can’t be anchored before hand, but instead cancollide true so it doesn’t fall into the void

I should have worded that reply better but what I meant was using the Humanoid:EquipTool function in a LocalScript doesn’t seem to actually do anything in the testing I did, it only worked when used inside of a server Script and the Tool was inside of workspace. I mentioned ReplicatedStorage because during testing I also tried storing the Tool inside of it but the function still didn’t work

Yes, I get that but it’s looks like you’re saying equipping it in a local script doesn’t work whatsoever, it works for me but the tool has to be in the workspace and can’t be anchored at all when the game starts

My bad, I accidentally left the server script enabled and it was interfering with the LocalScript’s result. Humanoid:EquipTool does work inside of LocalScripts so the issue is something else

I got good news actually because I’ve found a way to perfectly replicate the issue you’re experiencing, I’ll see if I can find a way to fix this