Donator Shop

Step-by-step installation guide, common issues & solutions, code snippets, error codes, config previews, locales previews, SQL previews, and changelogs; all in 1 easily accessible place.
Buy Here



Step 0 - First Steps

1. Download your resource from FiveM’s Keymaster.
2. Unzip the folder and place this folder in your server's resource folder.
3. Add the resource to your server start config (server.cfg): ensure cd_donatorshop. If you are using a framework, it must be placed anywhere below your framework resource e.g., es_extended, not above.
ensure es_extended
ensure cd_donatorshop

Step 0 - For existing customers

  • In the cd_donatorshop database table replace the char1: with license: or steam: depending on what your Config.IdentifierType is set to in the config.lua.

Step 1 - Fxmanifest

Depending on your framework and dependencies, you may need to make some changes inside the [cd_donatorshop/fxmanifest.lua]. We have made this easier by commenting on the lines you possibly need to change.

Step 2 - Configure Resource

You MUST read all configurable options inside the [cd_donatorshop/configs/config.lua] file and configure them to suit your server's needs. Please read the ”commented out help text” at the end of each line so you can understand what each config option does.
The most important sections are the options under the Framework and Important sections at the top of the config.lua. Everything else is optional.

Step 3 - SQL Database

You MUST import the SQL file to your database. This SQL file is located inside theREAD_ME_AFTER_PURCHASING folder; the file is named SQL_main.sql. Watch this video if you are unsure how to do this HeidiSQL / PHPMyAdmin.

Step 4 - Install Dependencies

Where can I find these dependencies?
Open the [cd_donatorshop/dependencies] folder. The folders inside are the required dependencies. You will find a text file inside each folder that includes a GitHub download link. Alternatively, they are listed in the table below.
Where should I put these dependencies?
These resources should be placed in your resources folder like any other, but remember, you shouldn't put them in the cd_donatorshop folder.
Do I need to add them to the server start config?
No, it will start automatically because it is listed as a dependency for this resource.
Resource Name
REQUIRED by default but can be replaced.

Step 5 - Create a Game Server

Create your game server on your Tebex Webstore to generate your secret key. Watch this Video Guide if you have not done this before.
Below is some important information from the Video guide above.
sv_tebexSecret CHANGE_ME
Paste the ConVar above into your server config along with your Tebex Secret Key.

Step 6 - Create a Product

Create a product on your Tebex Webstore and use the command we have provided below. Watch this Video Guide if you have not done this before.
Below is the command we speak about in the video.
tebex_purchase {"transaction_id":"{transaction}", "package":"{packageName}", "date":"{time} {date}", "buyer_name":"{purchaserName}", "buyer_email":"{email}"}
Subscriptions: To allow compatibility with monthly subscriptions, read here - #Subscriptions.

Step 7 - Config.TebexListings

The name of the product on your tebex webstore MUST be exactly the same as the ProductName inside the Config.TebexListings table in the configs/config.lua. The amount is the number of coins a player will receive when they purchase this product.
The product name on your Tebex Webstore.
The product name in the Config of cd_donatorshop.

Step 8 - Customise The UI

You can add or remove products in the Config.Shop config table in the configs/config.lua. There are commented-out examples at the bottom of the config.lua that will explain everything you need to know to create custom products that your server can sell in-game. You can also remove or add more products on the in-game shop UI.
If you are using QBCore and wish to sell "character name changes" or "phone number changes" in your shop UI, you must add this code snippet below into qb-core/server/player.lua.
AddEventHandler('cd_donatorshop:UpdateCharInfo', function(source, action, data)
if action == 'charname' then
QBCore.Players[source].PlayerData.charinfo.firstname = data.firstname
QBCore.Players[source].PlayerData.charinfo.lastname = data.lastname
elseif action == 'phone' then
QBCore.Players[source] =

Step 9 - Redeem a Purchase

When a player has purchased a product from your tebex webstore, tebex will trigger a chat command on your server within 2-10 minutes to log the purchase information to your database. After this is done, the player can do the following chat command in-game - /redeem (tebex_transaction_id_here) , which will then save the player's donator coins to the database, and they will be available to spend.


This section is to help you understand how the built-in features of this resource work and, if applicable, how you can make them compatible with other resources. These features are not required. They are optional and can be configured in the [configs/config.lua].


To allow compatibility with reoccurring/monthly subscriptions, repeat the final part of #Step 6 where you add a command, but on the 2nd command, change when the command is sent - as seen in this screenshot. This will automatically add the same amount of donator tokens to a player when their subscription renews.

Vehicle Stock

How does vehicle stock work?
This allows you to limit each vehicle that can be sold through the VIP shop. The vehicle stock is saved in the database and can be changed anytime. Only the vehicles you add to the database will have limited stock. If a vehicle is not in the vehicle stock database, it can be sold unlimited times.
How do I use this vehicle stock feature?
  1. 1.
    Make sure Config.VehicleStock is enabled in the [configs/config.lua].
  2. 2.
    Go to your server's database and find the [cd_vipshop_vehiclestock] database table - EXAMPLE.
  3. 3.
    Vehicle stock can only be changed in the database. You must add the vehicle spawn model and the vehicle stock amount to the database. Here is a VIDEO EXAMPLE.

zdiscord Integration

Add the 3 files in the download below into your zdiscord/server/commands folder. Then you can use the bot commands below in your discord. This is currently QBCore only unless you modify the code.
/pointlist [cid]
/pointadd [cid] [points_to_add]
/pointremove [cid] [points_to_remove]
credits to #sudokill9#2754


Chat Commands

These chat commands can be renamed and/or disabled in the Keys and Commands section of the [configs/config.lua].
The exact usage for each command will be displayed in the chat suggestions when using the commands in-game.
/redeem tbx-8832421a77453-etd002
The command to redeem donator coins after their purchase.
/add_balance 1 10
(Staff Command) The example command will add 10 donator coins to id 1.
/remove_balance 2 20
(Staff Command) The example command will remove 20 donator tokens from id 2.


These exports are completely optional; you can use them if needed.
Get Balance
Returns a players balance (numberm).
Add Balance
Adds tokens to a player.
exports['cd_donatorshop']:AddBalance(source, amount)
Remove Balance
Removes tokens from a player.
exports['cd_donatorshop']:RemoveBalance(source, amount)
Can Purchase Check
Checks if a player can afford to make a purchase.
exports['cd_donatorshop']:CanPurchaseCheck(source, cost)


Please check out our Troubleshooting Guide before contacting our support.
🔔 Folder Name Make sure the name of the folder is cd_donatorshop.
Can’t Redeem a Purchase?
eg., if a player has made a purchase on your tebex store and the purchase is still not able to be redeemed in game after 10 minutes.
✔️ Assuming you have followed the steps above correctly; if tebex is not sending the purchase data to your server the problem might be that your sv_tebexSecret key is active on one of your test/dev/local host servers and therefore tebex is sending the data to the wrong server instead, so remove this sv_tebexSecret key from your other servers. Or the issue may simply be that tebex is having issues on their side.
SQL Unknown Column?
eg., if you see an SQL error in the server console similar to this example - ER_BAD_FIELD_ERROR: Unknown colum 'job_personalspawn' in 'where clause'.
✔️ You are missing one of the required database columns. The SQL file can be found in the "READ_ME_AFTER_PURCHASING" folder.
Tebex Secret Key?
eg., if you see this authentication error In your server console [cd_donatorshop] - Unable To Start (sv_tebexSecret is nil).
✔️ This means [#Step 5] has not been completed correctly.
Redeemed 0 Balance?
eg., if a player redeems a purchase and it say they redeemed 0 balance in the notification when it should clearly be a higher number.
✔️ This can only happen if the Product Name on your tebex store does not match with the ProductName in the Config.TebexListings. They must match exactly - caps lock, spaces and punctuation marks.
Not All Display Vehicles Spawned?
eg., if some of the display vehicles just stopped spawning and the vehicle UI isnt visible.
✔️ This happens because the [Model] for one of the vehicles you added to the Config.Vehicle table in the [configs/config.lua] file was the wrong spawn name. An easy way to identify the problem vehicle is to look for the last vehicle that spawned successfully and it will be the next vehicle in the list.


If you see an error code not listed below, please open a script support ticket in the Codesign Discord.
0886 - The GetIdentifier function in the configs/server_customise_me.lua is returning a nil value instead of a string containing the player's identifier.
4454 - This means a player is trying to use the "tebex_purchase". This command is only supposed to be triggered from the server-side by tebex when a player makes a purchase on your tebex store.
7742 - This could mean you are triggering the "tebex_purchase" from the server console, which you shouldn't be. This command is only supposed to be triggered from the server-side by tebex when a player makes a purchase on your tebex store. The other reason is that tebex is not sending the correct data due to Step 2 - Configure Resource not being completed correctly.
0811 - This means the number of display vehicles you have configured to be on display in Config.DisplayVehicles.RandomizeVehicles.display_vehicle_count, is higher than the number of possible vehicle locations in Config.DisplayVehicles.VehicleCoords['manually_set'].
0822 - This means the number of display vehicles you have configured to be on display in Config.DisplayVehicles.Vehicles, is higher than the number of possible vehicle locations in Config.DisplayVehicles.VehicleCoords['manually_set'].


Files Changed
Not every update requires you to replace the whole folder. We do this because we understand it's a pain to redo the configs for every update.
  • All Files - This means you should delete your old cd_donatorshop folder, download and add in the latest version, reconfigure the configs folder and restart your server.
  • All Files Except config.lua - This means you should do all of the above (in the All Files section) but additionally make a backup of the config.lua file and replace the new config.lua file with the one you made a backup of.
  • Specific Files - This means you can copy and paste the SPECIFIC new files over the old ones and restart the server.
Update Type
On rare occasions, you are forced to update to the latest version. Mostly due to authentication updates where the old versions will no longer work.
  • Mandatory - This means you MUST update to this new version, or the old versions will no longer work.
  • Optional - This means it's completely your choice whether you wish to update to the latest version. But we do not offer support for old versions for obvious reasons; they are old.
Skipping Updates
If you are attempting to update to the latest version but have skipped previous updates, you should update all files just to be safe. For example., let's say you are currently on v4.0.1, you did not update when v4.0.2 was released, and now v4.0.3 is released, and you want to update; you should always use the “All Files” update method.

17/03/2021 - 08/11/1021

v1.0.0 - v1.0.5
Files Changed:
  • All Files
  • All Files Except config.lua
  • Specific Files
Update Type:
  • Mandatory
  • Optional
  • Development Stage: COMPLETE
  • Alpha Test Stage: COMPLETE
  • Beta Test Stage: COMPLETE
  • Added ability to blacklist words in the plate change.
  • Added locales for the identifiers UI.
  • Added a server print to notify server owners when a purchase has been made.
  • Added a new shop product - Character Name Changes. There are several checks put in place to make sure players enter a first and last name and it also checks for blacklisted words.
  • Added a new shop product - Vehicle packs. Meaning full vehicle packs can be configured and sold through the main shop UI. Also added extra protection against lua injectors with discord webhooks.
  • Added a computer desk at the location of the donator shop UI to mark its location.
  • Added the ability to manually place each donator vehicles coords instead of the script automatically generating the coords. This is a config option so it can be toggled.
  • Added the ability to set a maximum allowed character slot limit in the config when using the Codesign Multicharacter script.
  • Added discord logs to the staff add/remove token command.
  • Notifications on the UI now stack.
  • Success notifications on the UI now display more info after a purchase has been made successfully.
  • Fixed vehicle plate change bug when not using cd_garage.
  • Fixed notification typo on the staff add/remove balance command.
  • Fixed esx perms check typo.
  • Fixed random linux crashing bug.
  • Fixed the purchase command so players cant use it.
  • Fixed missing locale for the item rewards on the UI notification.
  • Fixed the total cost when purchasing multiple character slots.
  • Fixed a random bug where you would see an visual error when exiting the donator shop referring to "VehicleTable".
  • Fixed various typos in the locales.lua.
  • Fixed bug where you could purchase a product with 0 quantity chosen and you would see the "NaN" error.
  • Fixed a typo in the previous version causing the 7784 error code.
  • Fixed the date not saving in the cd_donatorshp_logs database table.
  • Temporary fix for the canary issue until the new Tebex FiveM license system is ready to launch, when this is released we will be fully switching over to the new system.


Files Changed:
  • All Files
  • All Files Except config.lua
  • Specific Files
Update Type:
  • Mandatory
  • Optional
  • We are now using the official Authentication System provided by FiveM. The old auth system will be taken offline 1 week from now (give or take a few days if needed).
  • Added drag-and-drop compatibility with the QBcore framework.
  • Added support for oxmysql.
  • Added duplicate checks to make sure players cant change their phone number to one that already exists.
  • Added server exports to check, get and remove donator points from the database from other scripts.
  • Added a config option to use steam or license as a, identifier type.
  • Cleaned up the code a little bit to be easier to understand for newer developers.
  • Added a new get identifier type, (1 for the unique characters id and 1 for the players global id) so servers using the advanced multicharacter method can redeem and use their donator perks across all of their characters.
  • Reworked the vehicle related code to work with the new garage v4.0.0 update.
  • Allowed ability for you to choose which identifiers display on the shop UI.
  • Fixed a bug with the inside vehicles not deleting when you purchasing a car pack.
  • Fixed the version check from erroring when github is having issues.
  • Fixed a bug where if you had 5 tokens and you purchased a product for 10 tokens it would not send a error message informing the player they don't have enough tokens.
  • Fixed the bug where the display vehicles would show model names instead of labels from the config.
  • Fixed the blacklisted word check not checking correctly when the word was capitalized.
  • Fixed the bug where players could change the plate even if the new plate was nil.
  • Fixed the bug where when purchasing a character slot the new max_chars number in the database turned into a float instead of an integer.
  • Fixed the bug where if you had a product on your Tebex store named $100,000 and another product named $100,000,000 and a player redeemed the $100,000,000 product, it would give the amount of tokens for the $100,000 product instead of the $100,000,000 one.
  • Fixed the item/weapon spawn names from showing on notifications instead of the labels.


Files Changed:
  • All Files
  • All Files Except config.lua
  • Specific Files
fxmanifest.lua - (IMPORTANT)
server/server.lua - (IMPORTANT)
Update Type:
  • Mandatory
  • Optional
  • Added accurately translated locales - 'CZ' / 'ES' / 'FI' / 'FR' / 'NL' / 'SE' / 'SK'
  • Fixed an issue with multiple products being purchased from Tebex not adding the correct donator coins amount to player.
  • Fixed the wrong data being saved in database when using QBCore.
  • Fixed a bug with car pack purchases.


Files Changed:
  • All Files
  • All Files Except config.lua
  • Specific Files
Update Type:
  • Mandatory
  • Optional
  • Logs from the UI purchases will send a lot faster after a purchase is made.
  • Fixed the balance showing as NaN on the UI.
  • Fixed the undefined message on the UI's checkout page when adding 0 amount.
  • Fixed a potential exploit when purchasing a vehicle while items are still queued and being purchased from the UI.
  • Fixed an issue with the UI purchase logs not showing the correct total amount.


Files Changed:
  • All Files
  • All Files Except config.lua
  • Specific Files
Update Type:
  • Mandatory
  • Optional
  • Added the ability to test drive display vehicles with the option choose how long they can test drive them for, option to spawn test vehicles max, option to only allow players to test drive vehicles if they enough tokens to purchase them and the option to disable it completely.
  • Added compatibility with the new oxsql version.
  • Added new locales in lua and js.
  • You now need to press E twice to purchase a display vehicle to make sure people don't accidently purchase.
  • Fixed openPage error randomly showing up.
  • Fixed the prop table spawning in the air.
  • Fixed weapons not having serial numbers on QBCore.


Files Changed:
  • All Files
  • All Files Except config.lua
  • Specific Files
fxmanifest.lua - (IMPORTANT)
Update Type:
  • Mandatory
  • Optional
  • Fixed people being able to abuse the test vehicle by giving the vehicle to another player.
  • Fixed QBCore perms.


Files Changed:
  • All Files
  • All Files Except config.lua
  • Specific Files
Update Type:
  • Mandatory
  • Optional
  • Cleaned up the code and reshuffles some files.
  • Updated the locales.
  • Fixed an issue when purchasing extra multicharacter slots.

16/06/2023 - NOT RELEASED YET

Files Changed:
  • All Files
  • All Files Except config.lua
  • Specific Files
Update Type:
  • Mandatory
  • Optional
  • Item Packs Added item packs (multiple different items all in 1 package)
  • Weapon Packs Added weapon packs (multiple different weapons all in 1 package)
  • Bundles Added bundles (multiple different items, weapons, vehicles and money all in 1 package).
  • Require In-game Money Added the option to also require in-game money when purchasing a display vehicle or packages from the shop UI,
  • Mystery Boxes Added mystery boxes. Random items, weapons and money are all based on a % chance.
  • Vehicle Stock Added a vehicle stock system for you to manage the selling of unique vehicles in-game.
  • Random Display Vehicles Added the option to randomize the display vehicles. Every x amount of minutes, the vehicles will switch.
  • MLO Support The VIP shop can now be placed anywhere, such as MLO's or anywhere on the map. You are no longer restricted to only using the hanger ipl.
  • Auto Framework Detection We have added a new feature we are calling 'auto_detect', which will automatically identify your framework, SQL database resource, and notification resource and apply the appropriate default settings.
  • Auto SQL Insert If you set Config.AutoInsertSQL in [configs/config.lua] to true, the resource will automatically insert the SQL for you. You can set this to false after the SQL has been inserted.
  • Added the option to choose your exact plate format on newly purchased vehicles.
  • The display vehicles no longer automatically spawn in when entering the hanger ipl. You have to press G at the shop desk for them to spawn in.
  • Added the option to disable the display vehicles feature.
  • Added pre-configured compatibility with various 3rd party fuel, keys and persistent vehicle resources.
  • The majority of the script has been rewrote. Files have been organised to allow easier customisation by you, and optimisations have been made.
  • When moving too far away from the display vehicles, they despawn.
  • Big update to the discord logs. They now provide much more information.
  • Updated the version check to provide more information.
  • All purchased items, money and weapons are received instantly. No more waiting for them to be added 1 by 1.
  • Added debug information to Config.Debug.
  • The resource name has been changed from cd_donatotshop to cd_vip shop due to the word "donator" not being appropriate for tebex.
  • Improved the pre-purchase checks. The whole transaction will cancel if, for example, a player can't carry the item, or the plate has a blacklisted word etc.
  • Fixed cars not deleting correctly when players are inside on test drive vehicles.
  • Fixed the issue where you would sometimes receive the same plate as another owned vehicle when purchasing vehicles.
  • The display vehicles now despawn when you move far enough away from them.
  • Fixed and improvided the checks for QBCore's shared vehicle file when it is wrongly formatted, or vehicles are missing from it.
  • Fixed blacklisted word checks.