If you’ve ever had a tool in your inventory (which you probably have), you’ll know that tools have an interesting property involving slots.
When a player removes an item from their inventory, and it occupied slot 1, if they have a second tool (originally occupying slot 2), it will retain the keybind.
To explain this better:
I have two tools, Key1 and Key2.
They are assigned inventory slots 1 and 2.
If I dropped the first key (Key1) Key2 will still remain in the second inventory slot.
This is a very strange mechanic in my opinion, but I understand how this may come in handy for players who want to remember their tool keybinds. However, this makes it difficult to find specific tools in specific slots as they do not constantly update according to tool replacement.
How would I write a script so that it would find which tool occupied a specific inventory slot? Like, if Key1 occupied the first slot it would return true, and else it would return false.
Another solution might be to simply temporarly remove each tool from the inventory and re-parent it. This way the inventory will be updated.
for i, v in pairs(player.Backpack:GetChildren()) do
v.Parent = nil --very quickly remove it from existence
v.Parent = player.Backpack --and parent it back to the backpack
end
This would be a solution, however I have a question. Would it retain it’s children if I were to delete it? If it had an IntValue, would the value retain this information? I’m assuming not, as I’d wipe out all tool data.
No it will actually retain them, if you re-parent something its children are still under it. Setting the parent of something to nil isn’t really removing it, it’s like parenting it to somewhere outside of game so it’s no longer visible.