1. Data Persistence and Realism (Metadata)
The script fully saves the owner’s data in the inventory metadata. This means that even if the document is handed over to another player (or stolen), it will always display the rightful owner’s data that was saved at the time of its issuance.
2. License Verification
The document issuance menu dynamically adapts to the player. Options are available only if the player holds the appropriate permissions (e.g., the option to obtain a firearm license document will not appear until the player actually acquires that license within the system).
3. Immersive Issuance Process
To obtain any document, the player must first have a photo taken. This small detail significantly enhances immersion and adds an extra step to the gameplay, making the process of visiting the city hall much more realistic.
5. Flexibility and Easy Addition of New Documents (Open Source)
By default, the script includes an ID card, driver’s license, firearm license, and hunting license. However, you can easily add your own custom documents (such as police badges, EMS ID cards, or passes). The code is fully open source, allowing for unrestricted modifications.
This is how config looks like
Config = {}
Config.Distance = 3.0
Config.Framework = 'ESX' -- ESX | QB
Config.Notification = function(title, msg, type)
if Config.Framework == 'QB' then
exports['qb-core']:GetCoreObject().Functions.Notify(msg, type, 5000)
else
lib.notify({
title = title,
description = msg,
type = type
})
end
end
Config.PhotoPrice = 40
Config.IdCardPrice = 50
Config.DrivingCardPrice = 50
Config.WeaponCardPrice = 50
Config.HuntingCardPrice = 50
Config.Documents = {
["photo"] = {
item = 'photo',
animation = { "random@atmrobberygen", "a_atm_mugging" },
animationTimeout = 2500,
notifyText = "You showed photo",
notifyYourSelfText = "You saw photo",
},
["id_card"] = {
item = 'idcard',
color = "#005d84",
animation = { "random@atmrobberygen", "a_atm_mugging" },
animationTimeout = 2500,
background = "idcard",
notifyText = "You showed id card",
notifyYourSelfText = "You saw id card",
},
["id_drive"] = {
item = 'drivingcard',
color = "#005d84",
animation = { "random@atmrobberygen", "a_atm_mugging" },
animationTimeout = 2500,
background = "drivingcard",
notifyText = "You showed driving license",
notifyYourSelfText = "You saw driving license",
},
["id_weapon"] = {
item = 'weaponcard',
color = "#502015",
animation = { "random@atmrobberygen", "a_atm_mugging" },
animationTimeout = 2500,
background = "weaponcard",
notifyText = "You showed weapon license",
notifyYourSelfText = "You saw weapon license",
},
["id_hunt"] = {
item = 'huntingcard',
color = "black",
animation = { "random@atmrobberygen", "a_atm_mugging" },
animationTimeout = 2500,
background = "huntingcard",
notifyText = "You showed hunting license",
notifyYourSelfText = "You saw hunting license",
},
}
Config.Texts = {
["notify_title"] = "ID",
["notify_title_photo"] = "City Hall",
["no_have_photo"] = "You haven't taken a photo for the document, you need to take one first",
["error_with_document"] = "Error obtaining the document",
["you_paid_for_photo"] = "You took a photo for the document",
["you_do_photo"] = "You took a photo for the document",
["not_have_money"] = "You don't have enough money",
["press_to_take_photo"] = "Press [E] to take a photo",
['photo_is_not_yours'] = 'This photo doesn`t belong to you'
}
Update: 1.1.0
- Added support for qb-core
- Completely reworked document graphics
- The entire system has been reworked for metadata inventory and no longer save data in a database
- Changed the way character photos are taken (significantly improving graphics)
| Code is accessible | Yes |
| Subscription-based | No |
| Lines (approximately) | about 1000 |
| Requirements | ESX / QB-CORE, INVENTORY with metadata support |
| Support | Yes |
Need support or have a question? Join to my discord
My other resources:




