How would you make a Player Customized Sticker Placing System (i.e. Decorating a Skateboard)?

Hello Team,

Setting the stage: I’m a couple of months into my Studio/Scripting learning, and a good 2.5x + older than the average dev here I’m sure (so take pity)

Not looking for anyone to write a single line of script for me here, just a nudge in the right direction to orient my thinking, and perhaps point toward the right resources for techniques I need to learn.


tl;dr – Placing stickers from a local inventory onto a surface GUI that everyone can see, and is saved. What is the best way to do this? See Vid Below.


I’m building a skateboarding game where a player will earn stickers they place on a large picture of their board. I have this working but in very hacky ways for a few stickers and board slots. I’m sure I won’t be able to scale it, and I’m not able to figure out how to disable a sticker from my inventory once its placed on the board.

Local – Player GUI Sticker Inventory: includes image buttons for every possible sticker, which are made visible if the player has earned the sticker. (i.e – player value “OllieLearned.Value = true” the corresponding sticker is visible in the local inventory.

Server - Board GUI placed in parts on the Workspace. It gets claimed by a player who touches a specific claim-part, and can then only be accessed by that player. The board is covered with a frame full of image buttons.

When the player clicks the sticker in their inventory, a value in the player called “SelectedSticker” is set to that sticker’s image url. When the player clicks an open spot on the board GUI, that board image button’s image is set to the image url in the player value “SelectedSticker.

Here is a video of this working – again, completely hacked together. My goal is a system like this, but with ~50 potential stickers and board slots, and of course, saved to data store which reloads in when the player rejoins and claims a spot.

If you’ve ever played Bee Swarm Simulator, think of the board as the hive.

Like I said - Only looking for general guidance here: A summary of how some of you pros would go about this.

Thanks very much!

1 Like

Your way of making the sticker appear for the placing player is perfectly fine. Now you just need to replicate it to all players and save it for the future.

You can use a RemoteEvent to notify the server that a player wants to place a sticker in a specific spot. The server can then verify all of this (does the player own the sticker, is the spot free, etc.). If the request is valid, it can make the sticker appear to every player.

To make it appear to everyone, you can either create it on the server, or signal to every player that the placing player’s sticker combination has changed with a RemoteEvent.

In the first case, you need to notify the placing player that their request to place a sticker was successful, and that player should react by removing the version of it that they placed them self, otherwise there will appear to be two overlapping stickers. In the other case, every player must listen for that RemoteEvent and update the appearance of the placing players board.

As for saving the sticker pattern, you can use DataStore or DataStore2. Either way, you can save the contents of each slot as an image URL or as a number indicating which entry in a table of image URLs is saved in that slot, or nil if it’s empty. You can store it in a table and use a single datastore key, or one datastore key for each slot (not recommended). Since you’re likely to have other player data you want to store, the best way is probably to have a single data store for each player, containing all of their data in dictionary, e.g.

local playerData = {
	stickerSlotContents = {
		stickerURL1,
		nil,
		stickerURL5
	},
	points = 93,
	joinData = 018320213,
	inventory = {
		headSlot = helmetTypes.bucket,
		legSlot = clothingTypes.jeans
	}
}
1 Like

@ThanksRoBama - Thank you so much for taking the time to detail all of that out. Good advice, and I’m going to rework a bit to implement some of what you said.

I’ve been trying to keep the large board GUI handled on the server as opposed to passing data through remote events, but I think that approach is leading to my challenges.

My challenge in saying my current system is not scalable is due to the way I’m passing data or sticker ownership validation back and forth. Right now I have 60 stickers in a player’s inventory (tagged as either owned-and shown- or not), then I have 6 slots(image buttons) on the board. Once I place a sticker in any one of the 60 board slots (simply changing that button’s image to that of the sticker) I need to somehow set the owned sticker’s status to “used” or “placed” so that it’s not used again.

Going to continue experimenting - Again, thanks much for the feedback here.