---
title: Sell items
description: Part of the Adventure Game Series in Roblox. Code how to sell items in a Roblox experience.
next: /education/adventure-game-series/buying-upgrades
prev: /education/adventure-game-series/collect-items
---
For the next stage of the game loop, players need to sell their items for gold to allow them to purchase more space in their backpacks.
## Create a sell platform
Players will sell their items by stepping onto a platform that gives them gold for each item in their bag.
### Set up the platform
The platform can be any part and will include a script that handles selling.
1. Create a new part named SellPlatform. Customize it to fit the theme of your experience.
2. In SellPlatform, create a new script named SellScript and add a comment.
3. In SellScript, type `local sellPart = script.Parent` to get the SellPlatform part.
```lua
-- Sells all a player's items and gives them gold
local sellPart = script.Parent
```
### Handle touch events
To use the platform, the script needs a function to check if any players touch it.
1. Create a function named `onTouch()` that checks if a player is touching the platform.
```lua
local function onTouch(partTouched)
local character = partTouched.Parent
end
```
2. To change any of the stats on the leaderboard, the script needs to know what player is controlling the character. In the if statement, use the `GetPlayerFromCharacter()` function to find a player.
```lua
local Players = game:GetService("Players")
local player = Players:GetPlayerFromCharacter(character)
```
3. On the next line, get that player's leaderstats container.
```lua
local Players = game:GetService("Players")
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Gets the player's leaderboard. Needed to get items and money
local playerStats = player:FindFirstChild("leaderstats")
end
```
4. On the next line, create variables to get the player's money and items.
```lua
local Players = game:GetService("Players")
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Gets the player's leaderboard. Needed to get items and money
local playerStats = player:FindFirstChild("leaderstats")
if playerStats then
-- Gets the player's items and money
local playerItems = playerStats:FindFirstChild("Items")
local playerGold = playerStats:FindFirstChild("Gold")
end
end
```
Make sure the names of everything in `FindFirstChild()` is exactly like the names written in the PlayerSetup script. For example, if your money is "Rubies" in PlayerSetup, playerGold should look for "Rubies" instead of "Gold".
5. To check your work, add a print statement that will run if a player touched sellPart.
```lua
local playerItems = playerStats:FindFirstChild("Items")
local playerGold = playerStats:FindFirstChild("Gold")
print("A player touched sellPart")
```
6. At the bottom of the script, connect the `onTouch()` to sellPart's Touched event.
```lua
local Players = game:GetService("Players")
local function onTouch(partTouched)
local character = partTouched.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Gets the player's leaderboard. Needed to get items and money
local playerStats = player:FindFirstChild("leaderstats")
if playerStats then
-- Gets the player's items and money
local playerItems = playerStats:FindFirstChild("Items")
local playerGold = playerStats:FindFirstChild("Gold")
print("A player touched sellPart")
end
end
end
sellPart.Touched:Connect(onTouch)
```
7. Play your project and step on sellPart; you should see the message `"A Player touched sellPart"` in the Output window.
## Sell items
In this experience, a player will get 100 Gold for each item. After getting money, their items will be set back to 0, letting players explore the world for more items.
### Code a new sell function
1. Under the variables, create a function named `sellItems()` that gets two parameters named `playerItems` and `playerGold`.
```lua
-- Sells all a player's items and gives them gold
local sellPart = script.Parent
local function sellItems(playerItems, playerGold)
end
local function onTouch(partTouched)
```
2. To give players the right amount of gold, take the value of the `playerItems` and multiply it by the amount of gold they should receive per item. This example gives one hundred gold pieces per item.
In the `sellItems()` function, type `local totalSell = playerItems.Value * 100`
```lua
local function sellItems(playerItems, playerGold)
-- Gets how many items the player has and multiplies that by item worth.
local totalSell = playerItems.Value * 100
end
```
3. Type `playerGold.Value += totalSell` to add the gold for the items to their current gold.
```lua
local function sellItems(playerItems, playerGold)
local totalSell = playerItems.Value * 100
-- Add how much the player earns to their money
playerGold.Value += totalSell
end
```
4. Type `playerItems.Value = 0`. This sets a player's items back to 0. If a player's items aren't set back to 0, the script will keep giving players gold without stopping.
```lua
local function sellItems(playerItems, playerGold)
local totalSell = playerItems.Value * 100
playerGold.Value += totalSell
playerItems.Value = 0
end
```
5. In the `onTouch()` function, **under the second if statement**, call the `sellItems()` function. Pass in the parameters, `playerItems` and `playerGold` so they can be changed.
```lua
local Players = game:GetService("Players")
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Gets the player's leaderboard. Needed to get items and money
local playerStats = player:FindFirstChild("leaderstats")
if playerStats then
-- Gets the player's items and money
local playerItems = playerStats:FindFirstChild("Items")
local playerGold = playerStats:FindFirstChild("Gold")
if playerItems and playerGold then
sellItems(playerItems, playerGold)
end
end
end
```
6. Play your project; check that whenever a player steps on the platform, their gold increases and items are set to 0.
### Troubleshooting Tips
At this point, selling items doesn't work as intended, try one of the following below.
- `sellItems()` is called in the **second** if statement that checks the player's items.
- Any IntValue, like playerItems, uses .Value at the end if you're making a change to it. Value is always capitalized.
- `sellPart.Touched:Connect(onTouch)` is typed at the **bottom** of the script.
- `sellItems(playerItems, playerGold)` is typed before the end of the if humanoid then statement.