How to swap tools on click?

Hello devs! So, I wanted to know, how can I swap tools? I tried to make it but apparently it doesn’t work.

ItemModule
--// ServerStorage Variables
local ItemFolder = game.ServerStorage.Items
local ItemModelsFolder = game.ServerStorage.ItemModels

--// SetUpItemsInEvents Variables
local UnlockSound = script.UnlockSound
local ItemClickDetector = script.ItemClickDetector

--// Other Variables
local debounce = false

--// Main
function item:PickUpItem(itemFolder)
	for _, Item in pairs(itemFolder:GetChildren()) do
		ItemClickDetector:Clone().Parent = Item.Handle.Hitbox
		
		--// Normal picking up
		Item.Handle.Hitbox.ItemClickDetector.MouseClick:Connect(function(plr)
			if ItemFolder:FindFirstChild(Item.Name) then
				local pickedUpItem = ItemFolder:FindFirstChild(Item.Name):Clone()
				
				Item:Destroy()
				pickedUpItem.Parent = plr.Backpack
				
				--// Swapping items
				for _, bckpckItem in pairs(plr.Backpack:GetChildren()) do
					if #plr.Backpack:GetChildren() == 1 then
						if bckpckItem:IsA("Tool") then
							local swappingItem = ItemModelsFolder:FindFirstChild(bckpckItem.Name)
							
							if swappingItem then
								swappingItem:Clone().Parent = itemFolder
								swappingItem.Handle.CFrame = pickedUpItem.Handle.CFrame
							end
						end
					end
				end
			end
		end)
	end
end
MainScript
local chapter = Round:SetChapter()
chapter.Parent = game.Workspace

if chapter:FindFirstChild("ItemFolder") then
		Item:PickUpItem(chapter.ItemFolder)
	else
		warn("Could not find ItemFolder.")
	end

Any help would be really appreciated :slight_smile:

  • AridFights1
1 Like

If the tool is equipped it’s parent is the character.

Did you mean to destroy Item? That’s destroying the items you have stored in the chapter’s ItemFolder, which you appear to be using as more of a template you clone from.

What you need to know

Not really but swapping the tools in the workspace I’ve a folder named “ItemFolder” in which all the items are stored. Now in the ServerStorage there are 2 more folders, one is named “ItemModelsFolder” and the other is “ItemFolder”

Where are stuff located

ServerStorge

  • ItemFolder: Contains tools(aka items)
  • ItemModelsFolder: Contains the model of the tool(aka items)

Workspace

  • ItemFolder: Contains the models which are the same in the ItemModelsFolder

Have you tried adding a few prints to verify the click event is being triggered, and that swappingItem isnt nil?

Problem: It doesn’t swap it just adds the items to my inventory

The tool you’re trying to swap out is bckpckItem, right? You don’t do anything with that after finding the swappingItem. I think you might have wanted to either destroy that, or parent it back into ItemFolder?

if swappingItem then
    swappingItem:Clone().Parent = itemFolder
    swappingItem.Handle.CFrame = pickedUpItem.Handle.CFrame
    bckpckItem.Parent = itemFolder -- if you meant to put it back
    bckpckItem:Destroy() -- or if you meant to remove it entirely 
end
1 Like

Sorry for making you wait my studio is a bit laggy.


So, I suppose these were printed out after I clicked the ClickDetector. But still it’s not swapping.

Well you’re not doing anything with the old bckpckItem like I mentioned in my previous reply. You need to remove it from the player’s backpack by some means.

This gamer has a cool gaming chair.
Thanks to this gamer and @InfinityDesign for helping out! Video Link