I'm trying to create a custom tool gui and i am stuck at how i should get the tools I've tried using Backpack:GetChildren() but it was really bad because when i equipped a tool it would disappear I need some help with getting all of the tools as objects (if they are equipped or not) in a array
How should i get all the tools the player has?
3 answers
When tools are equipped, they are parented to the player's character model, meaning we would have to check their character for any tools as well.
local player = --path to player
for i,v in pairs(player.BackPack:GetChildren()) do
if v:IsA("Tool") then
--v is a tool
end
end
for i,v in pairs(player.Character:GetChildren()) do
if v:IsA("Tool") then
--v is a tool
end
end
Hello. When tools get equipped, they get placed in the player's character, a descendant of Workspace. So, instead of just searching the player's backpack, search the player's character for a tool. Try this:
local player = game:GetService("Players").LocalPlayer
local backpack = player:WaitForChild("Backpack")
local function checkForTools()
local character = player.Character or player.CharacterAdded:Wait()
local tools = backpack:GetChildren()
for i, v in pairs(character:GetChildren()) do
if v:IsA("Tool") then
table.insert(tools, 1, v)
end
end
return tools
end
local tools = checkForTools()
When the function is called, it will make a variable called tools which are the tools in the backpack. Then, I used an in pairs loop to loop through the player's character. If there was a tool in there, it would insert it into the tools array. Finally, the function returns the tools as an array. Note that I'm using a LocalScript. You can also use a ServerScript, but make sure you change the player variable to the player via RBXScriptSignal (PlayerAdded, ClickDetector, :GetPlayerFromCharacter(), etc.)
Please accept and upvote this answer if it helped.
Hey!
When a tool is equipped, it needs to be shown to the world somehow, right? It can't do this from the backpack, so when you equip a tool, it's parented to the character (it needs to be a descendant of Workspace). If you wanted to get all of the tools, equipped or not, you can create a function that'll grab all the tools from your backpack and grab the equipped tool, if there is one. I've provided an example of this function below...
local Player = game.Players.LocalPlayer
local Character = Player.Character
local function GetAllTools()
local Tools = {} -- This is where we'll put all of the tools; it'll be returned at the end.
for _,v in pairs(Player.Backpack:GetChildren()) do
if v:IsA("Tool") then -- We'll make sure it's a tool because sometimes people like to parent other things to the backpack
table.insert(Tools, v)
end
end
local EquippedTool = Character:FindFirstChildOfClass("Tool") -- This will find any tool parented to the character
if EquippedTool then
table.insert(Tools, EquippedTool)
end
return Tools
end
From here, we just call our GetAllTools() function and it'll return all of the tools, equipped and unequipped!
If you only wanted to get the currently equipped tool, you could just use FirstFirstChildOfClass to see if there's a tool in the character like so...
local EquippedTool = Character:FindFirstChildOfClass("Tool")
if EquippedTool then
print("Player has", EquippedTool, "equipped!")
else
print("Player has nothing equipped")
end
And lastly, if you just wanted to get the tools that you don't have equipped, you can just use Player.Backpack:GetChildren() and it'll return an array with just the tools that are in your backpack currently.
Hope this helped! If it did, please remember to mark as answered and upvote.
This discussion is preserved as it was. New answers, comments, and votes are closed.
