Files
red-valley/docs/dev_teams_api_reference.md
2026-03-29 21:41:17 +03:00

807 lines
38 KiB
Markdown

# Red Valley — Dev Teams API Reference (2nd Brain)
> Echipe: **17 Movement**, **Wasabi Scripts**, **Quasar Store**, **KuzQuality**, **rCore**, **T1GER**
> Documentație oficială + scan cod sursă. Ultima actualizare: 2026-03-29
---
## 🟠 17 MOVEMENT (17mov)
**Resurse pe server:** `17mov_CharacterSystem`, `17mov-plugin-char-creator`, `17mov_Hud`, `17mov_JobCenter`, `17mov_Electrician`, `17mov_BuilderJob`, `17mov_Deliverer`, `17mov_GarbageCollector`, `17mov_Lumberjack`, `17mov_Miner`, `17mov_OilRig`, `17mov_Postman`, `17mov_TreasureHunter`, `17mov_WindowCleaning`
**Docs:** https://docs.17movement.net/
### 17mov_CharacterSystem — Exports & Events
> **IMPORTANT**: Acest script bridge-uiește `qb-clothing`, `illenium-appearance`, `skinchanger`, `esx_skin`.
> Pentru exports illenium-appearance, folosește `exports["illenium-appearance"]` NU `exports["17mov_CharacterSystem"]`!
| Event/Export | Tip | Descriere |
|---|---|---|
| `TriggerEvent("17mov_CharacterSystem:SaveCurrentSkin")` | Client Event | Salvează skin-ul curent al playerului în DB |
| `TriggerEvent("17mov_CharacterSystem:OpenOutfitsMenu")` | Client Event | Deschide meniul de outfits |
| `TriggerEvent("qb-clothing:client:openOutfitMenu")` | Client Event (bridged) | Alias → deschide outfit menu |
| `TriggerEvent("qb-clothing:client:openMenu")` | Client Event (bridged) | Alias → deschide clothing full menu |
| `TriggerEvent("qb-clothing:client:openMenuCommand")` | Client Event (bridged) | Alias → clothing menu command |
| `TriggerEvent("qb-clothing:client:loadOutfit", data)` | Client Event (bridged) | Aplică un outfit (ex: parașută) |
| `TriggerServerEvent("qb-clothing:saveSkin", model, skin)` | Server Event (bridged) | Salvează skin pe server |
| `exports['qs-inventory']:setInClothing(bool)` | Export apelat | Blochează/deblochează inventory la clothing menu |
| `exports["illenium-appearance"]:setPedComponents()` | Export apelat | Setează componente ped (bridge) |
**Config critice:**
- `configs/Config.lua``Config.Outfits` (job outfits per gender/grade)
- `configs/Skin.lua` → Presets, BlacklistedInputValues
- `configs/Bridge.lua` → Selecția de clothing/housing bridges
**Cine apelează CharacterSystem:**
| Resursă | Ce apelează | Cum |
|---|---|---|
| t1ger_mechanic | `Config.Outfits['mechanic']` | Citește config pentru duty outfit |
| qs-housing | `qb-clothing:client:openOutfitMenu` | Wardrobe din casă |
| qs-advancedgarages | `qb-clothing:client:openOutfitMenu` | Wardrobe din garaj |
| qb-management | `qb-clothing:client:openOutfitMenu` | Boss/gang outfit menu |
| wasabi_ambulance | `qb-clothing:client:openMenu` | Clothing full menu |
| qb-smallresources | `qb-clothing:client:loadOutfit` | Parașută outfit load |
| 17mov-plugin-char-creator | `17mov_CharacterSystem:SaveCurrentSkin` | Ascultă save |
---
### 17mov_Hud — Exports & Events
**Docs:** https://docs.17movement.net/advanced-hud/usage-in-other-resources
| Export/Event | Tip | Params | Descriere |
|---|---|---|---|
| `exports["17mov_Hud"]:ShowNotification(text, type, title, time)` | Client Export | text:string, type:"info"/"error"/"success", title:string, time:ms | Arată notificare |
| `TriggerEvent("17mov_Hud:ShowNotification", text, type, title, time)` | Client Event | same | Alias event |
| `TriggerClientEvent("17mov_Hud:ShowNotification", src, text)` | Server→Client | same | Din server |
| `exports["17mov_Hud"]:ToggleDisplay(state)` | Client Export | state:boolean | Ascunde/arată HUD |
| `TriggerEvent("17mov_Hud:ToggleDisplay", state)` | Client Event | same | Alias |
| `exports["17mov_Hud"]:HideRadar(state)` | Client Export | state:boolean | Forțează radar hidden |
| `exports["17mov_Hud"]:ShowHelpNotification(text)` | Client Export | text:string | Help notification (fără loop!) |
| `exports["17mov_Hud"]:HideHelpNotification()` | Client Export | - | Ascunde help notif |
| `exports["17mov_Hud"]:ShowHelpNotificationWhile(text)` | Client Export | text:string | Help notif in while loop (auto-hide) |
| `exports["17mov_Hud"]:StartProgress(action, onStart, onTick, onFinish)` | Client Export | action:object | Progress bar |
| `exports["17mov_Hud"]:StopProgress()` | Client Export | - | Oprește progress bar |
| `exports["17mov_Hud"]:OpenSettings()` | Client Export | - | Deschide setări HUD |
| `exports["17mov_Hud"]:GetTheme(cb)` | Client Export | cb:function(theme) | Returnează culorile HUD |
| `exports["17mov_Hud"]:GetSettings(cb)` | Client Export | cb:function(settings) | Returnează setările HUD |
| `RegisterNetEvent("17mov_Hud:UpdateTheme", function(theme))` | Client Event | theme:object | Listener: când se schimbă tema |
| `RegisterNetEvent("17mov_Hud:UpdateSettings", function(settings))` | Client Event | settings:object | Listener: când se schimbă setările |
**HUD Stress/Needs Events (nu sunt 17mov-specifice, dar HUD le ascultă):**
| Event | Direcție | Cine emite |
|---|---|---|
| `hud:server:GainStress` | Client→Server | 17mov_Hud, qs-inventory |
| `hud:server:RelieveStress` | Client→Server | wasabi_ambulance, qs-inventory, qb-smallresources |
| `hud:client:UpdateNeeds` | Server→Client | qb-core, qs-inventory, wasabi_ambulance, luxu_admin, qb-smallresources |
| `hud:client:UpdateStress` | Server→Client | 17mov_Hud (server), qb-smallresources |
**Cine apelează HUD exports:**
| Resursă | Export/Event | Scop |
|---|---|---|
| qb-core | `exports["17mov_Hud"]:ShowNotification(...)` | Toate notificările QBCore |
| ox_lib | `exports["17mov_Hud"]:ShowNotification(...)` | ox_lib notify bridge |
| 0r_idcard | `exports["17mov_Hud"]:ShowNotification(...)` | Notificări ID |
| bit-driverschool | `exports["17mov_Hud"]:ShowNotification(...)` | Notificări școală auto |
| qb-smallresources | `TriggerClientEvent("17mov_Hud:ShowNotification")` | Stress relief notif |
---
## 🟢 WASABI SCRIPTS
**Resurse pe server:** `wasabi_bridge`, `wasabi_police`, `wasabi_ambulance` (v1)
**Versiune curentă:** V1 (upgrade la V2 planificat)
**Docs:** https://docs.wasabiscripts.com/wasabi-scripts
### wasabi_bridge — Framework Bridge
- **Scop**: Librărie Lua cu UI components — bridge pentru toate scripturile Wasabi
- **Folosit de**: wasabi_police, wasabi_ambulance (v1)
- **Funcționalitate**: Notifications, text UI, targets, frameworks abstraction
- **Config**: notifications, target system, framework selection
- **Dependințe**: qb-core (sau ESX)
**Bridge Events:**
| Event | Tip | Descriere |
|---|---|---|
| `wasabi_bridge:onPlayerDeath` | Client | Trigger la moartea playerului |
| `wasabi_bridge:onPlayerSpawn` | Client | Trigger la spawn |
| `QBCore:Client:OnPlayerLoaded` | Client (listener) | Detectează player loaded |
| `QBCore:Client:OnJobUpdate` | Client (listener) | Detectează schimbare job |
### wasabi_police — Job Poliție (V1) ✅ INSTALAT
- **Versiune**: 1.10.8
- **Dependențe**: wasabi_bridge, oxmysql, qb-core
- **Integrare cu**: qs-vehiclekeys (via bridge), qs-inventory, codem-mdt, codem-dispatch, rcore_prison
- **Job name**: `police` (definit în `qb-core/shared/jobs.lua`)
- **Config Jail**: `Config.Jail.jail = 'rcore'` — integrat cu rcore_prison
- **Provides**: `esx_policejob`, `qb-policejob`
**Exports Client:**
| Export | Return | Descriere |
|---|---|---|
| `exports['wasabi_police']:IsHandcuffed()` | `false`/`'soft'`/`'hard'` | Status cătușe player |
| `exports['wasabi_police']:openOutfits(station)` | void | Meniu uniformă |
| `exports['wasabi_police']:escortPlayer(targetId)` | void | Escortează player |
| `exports['wasabi_police']:searchPlayer(player)` | void | Percheziție inventar |
**Exports Server:**
| Export | Return | Descriere |
|---|---|---|
| `exports['wasabi_police']:getPoliceOnline()` | number | Polițiști on-duty |
| `exports['wasabi_police']:IsPlayerInJail(target)` | boolean | E în închisoare? |
**Events (triggerabile din alte resurse cu Config.AllowedResources):**
```lua
wasabi_police:handcuffPlayer -- încătușare
wasabi_police:escortPlayer -- escortare
wasabi_police:inVehiclePlayer -- pune în vehicul
wasabi_police:outVehiclePlayer -- scoate din vehicul
```
**State Bags:**
| State Bag | Valori | Descriere |
|---|---|---|
| `Player(id).state.isHandcuffed` | `false`/`'soft'`/`'hard'` | Status cătușe |
| `Player(id).state.isEscorted` | `boolean` | Status escortare |
**Items necesare (adăugate în qs-inventory + qb-core):**
- `handcuffs`, `bobby_pin`, `tracking_bracelet`
### wasabi_ambulance — Job Ambulanță (V1) ✅ INSTALAT
- **Versiune**: 1.14.2
- **Dependențe**: wasabi_bridge, oxmysql, ox_lib, qb-core
- **Integrare cu**: qs-inventory, 17mov_CharacterSystem, 17mov_Hud, codem-dispatch
- **Job name**: `ambulance` (definit în `qb-core/shared/jobs.lua`)
- **Provides**: `esx_ambulancejob`, `qb-ambulancejob`
**Exports Client (13):**
| Export | Params | Descriere |
|---|---|---|
| `isPlayerDead(serverId?)` | opt | `true/false` death status |
| `diagnosePlayer(target?)` | `true`/number/nil | Diagnose player |
| `treatPatient(injury)` | `'shot'`/`'stabbed'`/`'beat'`/`'burned'` | Tratează |
| `reviveTarget()` | — | CPR + revive (necesită defib) |
| `healTarget()` | — | Self-heal sau heal nearby |
| `useSedative()` | — | Sedează player |
| `placeInVehicle()` | — | Pune player în vehicul |
| `loadStretcher()` | — | Pune pe stretcher |
| `openOutfits(hospital)` | string | Meniu uniformă |
| `clearPlayerInjury(clearVitals)` | bool | Șterge injuries |
| `disableKnockoutLoop(disabled)` | bool | Disable knockout |
| `manuallyKnockout(enabled)` | bool | Force knockout |
**Exports Server (3):**
| Export | Params | Descriere |
|---|---|---|
| `RevivePlayer(serverId)` | number | Revive player |
| `disableKnockoutLoop(source, disabled)` | source, bool | Disable knockout server-side |
| `manuallyKnockout(source, enabled)` | source, bool | Force knockout server-side |
**State Bags:**
| State Bag | Valori | Descriere |
|---|---|---|
| `Player(id).state.dead` | `false`/`nil`/`'dead'`/`'laststand'` | Status death |
- **Cross-resource calls**:
- `TriggerEvent('qb-clothing:client:openMenu')` → 17mov_CharacterSystem
- `TriggerServerEvent('hud:server:RelieveStress', 100)` → 17mov_Hud
- `TriggerClientEvent('hud:client:UpdateNeeds', src, 100, 100)` → 17mov_Hud
- `Config.policeCanTreat` → wasabi_police (polițiștii pot trata pacienți)
### Upgrade V1 → V2 Notes
> V2 folosește un bridge complet diferit. Când faci upgrade:
> - wasabi_bridge se actualizează automat
> - Verifică custom events în `game/client/` și `game/server/`
> - Testează clothing integration cu 17mov_CharacterSystem
> - Testează stress/needs events cu 17mov_Hud
---
## 🔵 QUASAR STORE (qs)
**Resurse pe server:** `qs-inventory`, `qs-vehiclekeys`, `qs-advancedgarages`, `qs-shops`, `qs-smartphone-pro`, `qs-housing`, `qs-weed`
**Docs:** https://www.quasar-store.com/docs
### qs-inventory — Inventar
**Commands:**
| Command | Descriere |
|---|---|
| `/clearinv [id]` | Golește inventar |
| `/giveitem [id] [item] [amount]` | Dă item |
| `/resetinv` | Reset inventory |
**Key Exports (din scan cod sursă):**
| Export | Side | Descriere |
|---|---|---|
| `exports['qs-inventory']:GetItemByName(name)` | Client | Returnează datele item-ului |
| `exports['qs-inventory']:GetItemsByName(name)` | Client | Returnează toate instanțele |
| `exports['qs-inventory']:setInClothing(bool)` | Client | Lock inventory în clothing mode |
| `exports['qs-inventory']:OpenInventory()` | Client | Deschide inventarul |
| `exports['qs-inventory']:CloseInventory()` | Client | Închide inventarul |
| `exports['qs-inventory']:HasItem(item, amount)` | Client | Verifică dacă are item |
| `exports['qs-inventory']:AddItem(source, item, amount)` | Server | Adaugă item |
| `exports['qs-inventory']:RemoveItem(source, item, amount)` | Server | Scoate item |
| `exports['qs-inventory']:GetItemBySlot(source, slot)` | Server | Item din slot |
| `exports['qs-inventory']:CreateUsableItem(name, cb)` | Server | Înregistrează item usable |
| `exports['qs-inventory']:OpenInventoryById(source, type, slots, maxWeight, label, other)` | Server | Deschide stash |
| `exports['qs-inventory']:RegisterStash(id, label, slots, weight)` | Server | Registrează stash |
**Events emise:**
| Event | Descriere |
|---|---|
| `inventory:client:ItemBox` | Notificare item add/remove |
| `hud:client:UpdateNeeds` | Update hunger/thirst |
| `hud:server:GainStress` / `RelieveStress` | Stress via items |
### qs-vehiclekeys — Chei Vehicule 🔑
**Commands:**
| Command | Descriere |
|---|---|
| `/givekey [id]` | Dă cheie vehicul curent |
**Key Exports (din scan cod sursă):**
| Export | Side | Descriere |
|---|---|---|
| `exports['qs-vehiclekeys']:GetVehicleKeys(plate)` | Client | Verifică dacă are cheile |
| `exports['qs-vehiclekeys']:GiveKeys(plate)` | Client/Server | Dă cheile pentru plate |
| `exports['qs-vehiclekeys']:RemoveKeys(plate)` | Client/Server | Scoate cheile |
| `exports['qs-vehiclekeys']:SetVehicleLocked(vehicle, locked)` | Client | Lock/unlock vehicul |
| `exports['qs-vehiclekeys']:AreKeysJobShared(vehicle)` | Client | Verifică chei shared pt job |
| `exports['qs-vehiclekeys']:IsBlacklistedVehicle(vehicle)` | Client | Verifică blacklist |
**Cine apelează qs-vehiclekeys:**
| Resursă | Export | Scop |
|---|---|---|
| 0r_idcard | `GiveKeys` | La obținere permis |
| bit-driverschool | `GiveKeys` | La test auto |
| ac-carcontrol | `GetVehicleKeys / SetVehicleLocked` | Control vehicul |
| qs-advancedgarages | `GiveKeys / RemoveKeys` | La scos/pus mașina |
| qs-smartphone-pro | `SetVehicleLocked` | Remote lock/unlock |
| rcore_fuel | `GetVehicleKeys` | Verificare owner la pump |
| luxu_admin | `GiveKeys` | Admin key management |
| qb-target | `GetVehicleKeys` | Target interactions |
| wasabi_bridge | `GiveKeys` | Bridge police/ambulance |
### qs-advancedgarages — Garaje Avansate
**Key Exports:**
| Export | Side | Descriere |
|---|---|---|
| `exports['qs-advancedgarages']:GetVehicleGarage(plate)` | Server | Returnează garajul vehiculului |
**Dependințe directe:**
- qs-vehiclekeys (keys la scos/pus)
- qs-inventory (stash în garaj)
- 17mov_CharacterSystem (wardrobe bridge)
- qb-core, oxmysql
### qs-smartphone-pro — Telefon
**Key Exports:**
| Export | Side | Descriere |
|---|---|---|
| `exports['qs-smartphone-pro']:hasPhone()` | Client | Are telefon? |
| `exports['qs-smartphone-pro']:isPhoneOpen()` | Client | E telefonul deschis? |
| `exports['qs-smartphone-pro']:openPhone()` | Client | Deschide telefonul |
| `exports['qs-smartphone-pro']:closePhone()` | Client | Închide telefonul |
**Dependințe directe:**
- pma-voice (call system)
- qs-vehiclekeys (remote lock/unlock)
- qs-inventory (item telefon)
- phone-radio + xsound (radio)
- screenshot-basic (camera)
### qs-shops — Magazine
**Dependințe**: qb-core, qs-inventory, oxmysql
**Config**: `json/shops-inventory.json`
### qs-housing — Case
**Dependințe**: qb-core, qs-inventory, oxmysql
**Cross-resource**: `qb-clothing:client:openOutfitMenu` → 17mov_CharacterSystem
---
## 🔍 KEYWORD LOOKUP — Quick Search
### 🔑 "key" / "keys" — Tot ce se leagă de chei:
```
SISTEM PRINCIPAL: qs-vehiclekeys
├── Exports: GiveKeys, RemoveKeys, GetVehicleKeys, SetVehicleLocked
├── Command: /givekey [id]
├── DB: player_vehicles (keys column)
├── CINE DĂ CHEI:
│ ├── bit-driverschool → GiveKeys la test auto
│ ├── 0r_idcard → GiveKeys la driving license
│ ├── qs-advancedgarages → GiveKeys la scos mașina
│ ├── luxu_admin → giveVehicleKeys (admin)
│ ├── wasabi_bridge → GiveKeys (police/ambulance vehicles)
│ └── jg-dealerships → GiveKeys implicit la cumpărare
├── CINE VERIFICĂ CHEI:
│ ├── ac-carcontrol → GetVehicleKeys (lock/engine)
│ ├── qb-target → GetVehicleKeys (target menu pe vehicul)
│ ├── rcore_fuel → GetVehicleKeys (verificare owner la pump)
│ └── qs-smartphone-pro → remote lock (SetVehicleLocked)
├── CINE SCOATE CHEI:
│ ├── qs-advancedgarages → RemoveKeys la pus mașina
│ └── qb-smallresources → cleanup la disconnect
├── ITEMS LEGATE: vehiclekey (metadata cu plate)
├── CONFIG: qs-vehiclekeys/config.lua
└── HOTWIRE: dispatch → codem-dispatch / wasabi_police alert
```
### 👕 "outfit" / "clothing" / "skin" — Tot ce se leagă de haine:
```
SISTEM PRINCIPAL: 17mov_CharacterSystem
├── Events: SaveCurrentSkin, OpenOutfitsMenu, qb-clothing:*
├── Config: Config.Outfits (job outfits), Skin.lua (presets)
├── CINE SCHIMBĂ OUTFITS:
│ ├── t1ger_mechanic → duty outfit (mechanic)
│ ├── wasabi_police → duty outfit (police)
│ ├── wasabi_ambulance → clothing menu
│ ├── qs-housing → wardrobe
│ ├── qs-advancedgarages → wardrobe
│ └── qb-management → boss/gang outfit
├── FLOW: Duty ON → SaveCurrentSkin → Apply Job Outfit
│ Duty OFF → Restore Civil Outfit
├── INVENTORY LOCK: exports['qs-inventory']:setInClothing(true/false)
└── PLUGIN: 17mov-plugin-char-creator (ascultă SaveCurrentSkin)
```
### 📱 "phone" / "telefon" — Tot ce se leagă de telefon:
```
SISTEM PRINCIPAL: qs-smartphone-pro
├── Exports: hasPhone, isPhoneOpen, openPhone, closePhone
├── Item: phone (qs-inventory)
├── INTEGRĂRI:
│ ├── pma-voice → call system (apeluri)
│ ├── qs-vehiclekeys → remote lock/unlock
│ ├── phone-radio → radio (xsound)
│ ├── screenshot-basic → camera photos
│ ├── luxu_admin → phone control
│ └── qs-inventory → item management
├── EVENTS ASCULTATE:
│ ├── QBCore:Client:OnPlayerLoaded → init phone
│ └── QBCore:Client:OnJobUpdate → refresh job apps
└── WEBHOOK: Necesită configurare (pending)
```
### 🔔 "notify" / "notification" — Tot ce se leagă de notificări:
```
SISTEM PRINCIPAL: 17mov_Hud
├── Export: exports["17mov_Hud"]:ShowNotification(text, type, title, time)
├── Event: TriggerEvent("17mov_Hud:ShowNotification", ...)
├── CINE TRIMITE NOTIFICĂRI:
│ ├── qb-core → client/functions.lua (TOATE notificările QBCore)
│ ├── ox_lib → resource/interface/client/notify.lua (ox_lib → 17mov bridge)
│ ├── 0r_idcard → config.lua (direct export)
│ ├── bit-driverschool → config.lua (direct export)
│ └── qb-smallresources → server/consumables.lua (server→client event)
├── TIPURI: "info", "error", "success"
├── DEFAULT TITLE: Config.Lang["DefaultNotification"]
└── DEFAULT TIME: string.len(text) * 0.09 + 2000 ms
```
### 📦 "inventory" / "item" / "stash" — Tot ce se leagă de inventar:
```
SISTEM PRINCIPAL: qs-inventory
├── Exports: AddItem, RemoveItem, HasItem, CreateUsableItem, RegisterStash, ...
├── Items definite în: qb-core/shared/items.lua
├── CINE FOLOSEȘTE STASH:
│ ├── t1ger_lib → mechanic/tuning stash
│ ├── qs-advancedgarages → trunk/glovebox
│ ├── qs-housing → stash case
│ └── qs-shops → shop inventory
├── CINE ADAUGĂ/SCOATE ITEMS:
│ ├── qb-core → bridge AddItem/RemoveItem
│ ├── luxu_admin → admin item management
│ ├── qb-smallresources → consumables
│ └── mBossmenu → society items
└── HUD EVENTS:
├── hud:client:UpdateNeeds → hunger/thirst
├── hud:server:GainStress → stress
└── hud:server:RelieveStress → relax
```
### 💼 "job" / "duty" — Tot ce se leagă de joburi:
```
DEFINIȚII: qb-core/shared/jobs.lua
EVENTS: QBCore:Client:OnJobUpdate, QBCore:Server:SetDuty
├── JOBURI ACTIVE PE SERVER:
│ ├── police → wasabi_police (rv-mdt, codem-dispatch)
│ ├── ambulance → wasabi_ambulance
│ ├── mechanic → t1ger_mechanic (t1ger_lib, t1ger_tuningsystem)
│ ├── electrician → 17mov_Electrician
│ ├── bus → aty_busjob
│ └── unemployed → 17mov_JobCenter
├── DUTY TOGGLE FLOW:
│ 1. Player clicks duty point
│ 2. qb-core: TriggerEvent('QBCore:Server:SetDuty', src, true/false)
│ 3. 17mov_CharacterSystem: Save civilian → Apply job outfit (or restore)
│ 4. Listeners: 17mov_Hud, qb-target, qs-shops, qs-smartphone-pro, etc.
├── SOCIETY MONEY: qb-management (boss menu, billing)
├── OUTFIT SYSTEM: 17mov_CharacterSystem/configs/Config.lua → Config.Outfits
└── ASCULTĂ OnJobUpdate (30+ resurse):
17mov_Hud, 17mov_JobCenter, qs-shops, qs-smartphone-pro,
qs-advancedgarages, qs-housing, qb-target, qb-management,
wasabi_bridge, t1ger_mechanic, codem-mdt, codem-dispatch,
jg-dealerships, kq_carheist, kq_dyno, rcore_fuel, rcore_casino,
aty_busjob
```
---
## 🟡 KUZQUALITY (kq)
**Resurse pe server:** `kq_carheist`, `kq_dyno`, `kq_wheeldamage`
**Docs:** https://docs.kuzquality.com/
**Update System:** KQ Link (Git-based auto-update + licensing)
### kq_carheist — Car Heist Minigame
- **Descriere**: Script de furt vehicule cu misiuni, NPC, liste de mașini, dispatch alerts
- **Tip**: Standalone cu bridge QBCore
- **Dependințe directe**: qb-core (framework), oxmysql (DB)
- **Cross-resource**:
- `QBCore:Client:OnPlayerLoaded` → init player data
- `QBCore:Client:OnJobUpdate` → verificare job blacklist
- Dispatch event → `codem-dispatch` (policeAlert la furt)
- `qs-vehiclekeys` → hotwire implicit
- **Config**: `config.lua` — vehicle lists, spawn points, rewards, cooldowns
- **Items**: Necesită items definite în `qb-core/shared/items.lua`
### kq_dyno — Car Dyno Bench
- **Descriere**: Dyno bench testing — măsoară HP, torque, viteza vehiculelor
- **Tip**: Mostly standalone (vehicle physics native)
- **Dependințe directe**: qb-core (framework)
- **Cross-resource**:
- `QBCore:Client:OnPlayerLoaded` → player init
- `QBCore:Client:OnJobUpdate` → job check (mechanic access)
- Poate fi legat de `t1ger_mechanic` → acces dyno doar pt mecanici
- **Config**: `config.lua` — locații dyno, animații, restricții
- **Install**: Necesită KQ Link active
### kq_wheeldamage — Realistic Wheel Damage
- **Descriere**: Damage realist pe roți — burst, deformation, handling degradation
- **Tip**: Fully standalone (vehicle physics override)
- **Dependințe directe**: Niciuna (standalone, nu depinde de framework)
- **Cross-resource**: Niciun export/event cross-resource
- **Config**: `config.lua` — damage multipliers, burst thresholds, vehicle blacklist
### KQ Link — Update & License System
- **Scop**: Sistem de auto-update via Git pentru toate resursele KQ
- **Exports disponibile**:
- `exports['kq_link']:getVersion(resource)` → versiunea curentă
- `exports['kq_link']:checkUpdate(resource)` → check for updates
- **Docs**: https://docs.kuzquality.com/kq-link/developer-reference
**Impact KQ pe server:**
```
kq_carheist → qb-core (framework), codem-dispatch (police alert)
kq_dyno → qb-core (framework), t1ger_mechanic (job check opțional)
kq_wheeldamage → standalone (zero cross-resource deps)
```
---
## 🔴 RCORE (rc)
**Resurse pe server:** `rcore_fuel`, `rcore_casino`, `rcore_prison`, `rcore_doorlock`
**Docs:** https://documentation.rcore.cz/
**Licensing:** CFX Auth System (Cfx.re asset escrow)
### rcore_fuel — Sistem Combustibil
- **Descriere**: Fuel system complet — benzinării, jerry can, consum realistic, tipuri combustibil, fuel capacity per vehicul
- **Dependințe directe**: qb-core (framework), oxmysql (DB)
- **Cross-resource**:
- `qs-vehiclekeys` → verificare keys la pump (owner check)
- `QBCore:Client:OnPlayerLoaded` → init player data
- `QBCore:Client:OnJobUpdate` → job-based fuel stations
- `qs-inventory` → jerry can items
**Key Exports (Client):**
| Export | Return | Descriere |
|---|---|---|
| `exports["rcore_fuel"]:GetVehicleFuelLiters(vehicle)` | float | Fuel curent în litri |
| `exports["rcore_fuel"]:GetVehicleFuelPercentage(vehicle)` | float | Fuel curent 0-100% |
| `exports["rcore_fuel"]:GetMaximumFuelCapacityForVehicle(vehicle)` | float | Capacitate maximă litri |
| `exports["rcore_fuel"]:GetVehicleMaxCurrentDrivingRange(vehicle)` | float | Range maxim curent |
| `exports["rcore_fuel"]:GetVehicleFuelConsumptionEfficiency(vehicle)` | float | Eco-friendliness % |
| `exports["rcore_fuel"]:SetVehicleFuel(vehicle, percentage)` | void | Setează fuel % |
| `exports["rcore_fuel"]:AddVehicleFuelLiter(vehicle, fuel)` | void | Adaugă litri |
| `exports["rcore_fuel"]:RemoveVehicleFuelLiter(vehicle, fuel)` | void | Scoate litri |
| `exports["rcore_fuel"]:AddVehicleFuelPercentage(vehicle, pct)` | void | Adaugă % |
| `exports["rcore_fuel"]:RemoveVehicleFuelPercentage(vehicle, pct)` | void | Scoate % |
**Config**: `config.lua` — fuel stations, types (gasoline/diesel/electric), vehicle capacities, prices
**Items**: `jerrycan` (qs-inventory / qb-core items)
---
### rcore_casino — Casino Complet
- **Descriere**: Casino high-end — blackjack, poker, roulette, slots, lucky wheel, inside track, bar, VIP
- **Dependințe directe**: qb-core (framework), oxmysql (DB)
- **Cross-resource**:
- `QBCore:Client:OnPlayerLoaded` → init casino data
- `QBCore:Client:OnJobUpdate` → job casino (grad 1+ → deliver podium vehicle)
- `qs-inventory` → casino chips items, bar items
- `17mov_CharacterSystem` → clothing bridge (casino outfit opțional)
**CasinoControl Exports (Server):**
| Export / Function | Descriere |
|---|---|
| `exports["rcore_casino"]:GetCasinoControl()` | Returnează obiectul Casino Control |
| `Casino.GetCasinoPlayer(playerId)` | PlayerData (nil dacă nu e în casino) |
| `Casino.GetCasinoPlayers()` | Array toți jucătorii din casino |
| `Casino.IsPlayerInCasino(playerId)` | boolean — e în casino? |
| `Casino.IsPlayerBusy(playerId)` | boolean — joacă un joc? |
| `Casino.StopPlaying(playerId)` | Forțează stop joc |
| `Casino.BlockPlaying(playerId)` | Blochează accesul la jocuri |
| `Casino.AllowPlaying(playerId)` | Deblochează accesul |
| `Casino.KickPlayer(playerId)` | Kick din clădire |
| `Casino.ToggleVIP(playerId, vip)` | Toggle VIP membership |
| `Casino.ToggleCasino(enabled)` | Pornește/oprește casinoul |
| `Casino.ToggleCasinoActivity(activity, enabled)` | Toggle activitate specifică |
**Server Events:**
| Event | Descriere |
|---|---|
| `AddEventHandler("PlayerJoinedCasino", function(playerId))` | Când intră în casino |
| `AddEventHandler("PlayerLeftCasino", function(playerId))` | Când iese din casino |
**Client Events:**
| Event | Descriere |
|---|---|
| `TriggerEvent("Casino:GetPlayerState", function(o))` | Get local player state (chips, VIP, items) |
**Activities**: `slots`, `luckywheel`, `insidetrack`, `drinkingbar`, `roulette`, `poker`, `blackjack`, `cashier`, `seating`, `cameras`
**DB**: Tabele proprii (casino_players, casino_settings)
**Job**: `casino` (definit în qb-core/shared/jobs.lua)
---
### rcore_prison — Sistem Închisoare V2
- **Descriere**: Închisoare all-in-one — jail, sentence, activities, prison break, solitary, community service, gym
- **Tip**: Plug and Play (auto-DB, no SQL files needed)
- **Dependințe directe**: qb-core (framework), oxmysql (auto-managed)
- **Cross-resource**:
- `qs-inventory` → prison items, consumables
- `qb-target` → target interactions in prison
- `ox_lib` → context menus opțional
- `qb-menu` → menus opțional
- `17mov_CharacterSystem` → prison clothing (illenium-appearance bridge)
- `wasabi_police` → jail integration (police can jail via /jail)
- `codem-dispatch` → dispatch la prison break
**Commands:**
| Command | Descriere |
|---|---|
| `/jailcp` | Manage prisoners panel |
| `/jail [id] [time] [reason]` | Jail citizen |
| `/unjail [id]` | Unjail citizen |
| `/startcs [id] [amount]` | Community service |
| `/removescs [id]` | Remove community service |
| `/stopalarm` | Stop prison alarm |
| `/solitary [id] [time]` | Put in solitary |
| `/rsolitary [id]` | Remove from solitary |
**Supported Integrations**: QBCore, qs-inventory, qb-target, ox_lib, illenium-appearance, codem-dispatch, qb-smallresources
**API**: Client + Server events/exports (https://documentation.rcore.cz/paid-resources/rcore_prison/api)
---
### rcore_doorlock — Sistem Uși & Business
- **Descriere**: Door lock system — uși, business management, keychain, crafting, permissions, presets
- **Dependințe directe**: qb-core (framework), oxmysql (DB)
- **Cross-resource**:
- `qs-inventory` → keychain items, lockpick
- `qb-target` → door interactions
**Key Exports (Client):**
| Export | Return | Descriere |
|---|---|---|
| `exports.rcore_doorlock:openDoorsManagement()` | void | Deschide UI management uși |
| `exports.rcore_doorlock:getDoorsCreatedBy(createdBy)` | table | Uși create de admin/business |
| `exports.rcore_doorlock:openCrafting(businessName)` | void | Crafting pt business |
| `exports.rcore_doorlock:openBossActions(businessName)` | void | Boss actions business |
| `exports.rcore_doorlock:getBusinessGrade()` | grade, name | Grade jucător în business |
| `exports.rcore_doorlock:hasPlayerBusinessPermision(perm)` | boolean | Check permisiune |
| `exports.rcore_doorlock:changeDoorStateLocalNotPersist(id, state)` | boolean | Lock/unlock local |
**Key Exports (Server):**
| Export | Return | Descriere |
|---|---|---|
| `exports.rcore_doorlock:changeDoorState(doorId, state)` | boolean | Lock/unlock persistent (0=unlock, 1=lock) |
| `exports.rcore_doorlock:addDoor(door, client)` | boolean | Adaugă ușă în DB |
| `exports.rcore_doorlock:getPlayerBusiness(playerId)` | name, biz, job | Business-ul jucătorului |
| `exports.rcore_doorlock:getSqlDoors()` | table | Toate ușile din DB |
| `exports.rcore_doorlock:getLoadedDoors()` | table | Toate ușile încărcate |
**Shared Exports:**
| Export | Return | Descriere |
|---|---|---|
| `exports.rcore_doorlock:getBusinesses()` | table | Toate business-urile din config |
| `exports.rcore_doorlock:getBridgeInfo()` | table | Info bridge framework |
| `exports.rcore_doorlock:translate(key, ...)` | string | Traducere locale |
**Config**: `config.lua`, `config.business.lua` — doors, permissions, businesses
**Impact rCore pe server:**
```
rcore_fuel → qb-core, qs-vehiclekeys (verify keys), qs-inventory (jerry can)
rcore_casino → qb-core, qs-inventory (chips/items), oxmysql, casino job
rcore_prison → qb-core, qs-inventory, qb-target, 17mov_CharacterSystem (clothing), wasabi_police (jail), codem-dispatch (prison break)
rcore_doorlock → qb-core, qs-inventory (keychain), qb-target, oxmysql
```
---
## 📚 Docs Reference Links
| Echipă | Resursă | Docs URL |
|---|---|---|
| 17mov | CharacterSystem Exports | https://docs.17movement.net/character-system/exports-events |
| 17mov | HUD Usage in Resources | https://docs.17movement.net/advanced-hud/usage-in-other-resources |
| 17mov | HUD Custom Indicators | https://docs.17movement.net/advanced-hud/custom-indicators |
| 17mov | Multiplayer Jobs Structure | https://docs.17movement.net/multiplayer-jobs/understanding-our-structure |
| Wasabi | wasabi_bridge | https://docs.wasabiscripts.com/wasabi-scripts/dependency/wasabi_bridge |
| Wasabi | wasabi_police | https://docs.wasabiscripts.com/wasabi-scripts/advanced-series/wasabi_police |
| Wasabi | wasabi_ambulance v1 | https://docs.wasabiscripts.com/wasabi-scripts/advanced-series/wasabi_ambulance-v1 |
| Wasabi | wasabi_ambulance v2 | https://docs.wasabiscripts.com/wasabi-scripts/advanced-series/wasabi_ambulance_v2 |
| Quasar | qs-inventory Exports | https://www.quasar-store.com/docs/inventory/commands-and-exports |
| Quasar | qs-vehiclekeys Exports | https://www.quasar-store.com/docs/vehiclekeys/commands-and-exports |
| Quasar | qs-advancedgarages | https://www.quasar-store.com/docs/advanced-garages/commands-and-exports |
| Quasar | qs-smartphone-pro | https://www.quasar-store.com/docs/smartphone-pro/commands-and-exports |
| Quasar | qs-shops | https://www.quasar-store.com/docs/shops-creator/commands-and-exports |
| Quasar | qs-housing | https://www.quasar-store.com/docs/housing-creator/commands-and-exports |
| KuzQuality | Car Heist | https://docs.kuzquality.com/resources/premium-resources/car-heist |
| KuzQuality | Car Dyno | https://docs.kuzquality.com/resources/premium-resources/car-dyno |
| KuzQuality | Wheel Damage | https://docs.kuzquality.com/resources/premium-resources/realistic-wheel-damage |
| KuzQuality | KQ Link Dev Ref | https://docs.kuzquality.com/kq-link/developer-reference |
| rCore | rcore_fuel | https://documentation.rcore.cz/paid-resources/rcore_fuel |
| rCore | rcore_fuel API | https://documentation.rcore.cz/paid-resources/rcore_fuel/integrations/api |
| rCore | rcore_casino | https://documentation.rcore.cz/paid-resources/rcore_casino |
| rCore | rcore_casino Exports | https://documentation.rcore.cz/paid-resources/rcore_casino/casinocontrol-exports |
| rCore | rcore_prison | https://documentation.rcore.cz/paid-resources/rcore_prison |
| rCore | rcore_prison API | https://documentation.rcore.cz/paid-resources/rcore_prison/api |
| rCore | rcore_doorlock | https://documentation.rcore.cz/paid-resources/rcore_doorlock |
| rCore | rcore_doorlock API | https://documentation.rcore.cz/paid-resources/rcore_doorlock/api |
| T1GER | Overview | https://docs.t1ger.net/ |
| T1GER | t1ger_mechanic | https://docs.t1ger.net/resources/t1ger-mechanic |
| T1GER | t1ger_mechanic Exports | https://docs.t1ger.net/resources/t1ger-mechanic/exports |
| T1GER | t1ger_library | https://docs.t1ger.net/resources/t1ger-library |
| T1GER | t1ger_tuning-system | https://docs.t1ger.net/resources/t1ger-tuning-system |
| T1GER | t1ger_tuning API | https://docs.t1ger.net/resources/t1ger-tuning-system/api |
---
## 🟢 T1GER (t1ger)
**Resurse pe server:** `t1ger_mechanic`, `t1ger_tuningsystem`, `t1ger_lib`, `t1ger_carlift`, `t1ger_mechanicprops`
**Docs:** https://docs.t1ger.net/
### t1ger_lib (T1GER Library) — Core dependency
> Dependință obligatorie pt toate resursele T1GER. Bridge pentru framework, inventory, target, notifications, vehicle DB.
**Config critice (t1ger_lib/config.lua):**
- `Config.Framework``'qb-core'` / `'es_extended'` / `'qbox'`
- `Config.Inventory``'qs-inventory'` / `'ox_inventory'` / `'qb-inventory'`
- `Config.TargetSystem``'qb-target'` / `'ox_target'`
- `Config.UseFrameworkNotification``true` = QB/ESX notif, `false` = ox_lib
| Export | Tip | Descriere |
|---|---|---|
| `exports['t1ger_lib']:CreateVehicleMeta(plate, src)` | Server Export | Creează metadata vehicul + sync mecanic |
| `GetAllVehicles(citizenid)` | Server Function | Returnează lista de vehicule owned din DB |
| `UpdateOwnedVehicle(src, stored, garage, props)` | Server Function | Update stare vehicul (spawn/store) |
| `ShowNotification(data)` | Client Function | Notificare bridge ({title, message, type}) |
**DB tables folosite:** `owned_vehicles` / `player_vehicles`
**Coloane critice:** `plate`, `vehicle`/`mods`, `stored`/`state`, `garage`/`parking`, `fuel`, `engine`, `body`
### t1ger_mechanic — Exports & Features
> Cel mai imersiv script de mecanic pentru FiveM. Shop management dinamic, mileage tracking 1:1, componente realiste.
**Features principale:**
- Dynamic Shop Creation (in-game, no restart)
- Ownable mechanic shops cu duty, boss, garage, storage, crafting markers
- Realistic Component Structure (Service Parts + Core Parts)
- 1:1 Real-world Mileage Tracking
- Core Part Malfunctions (4 health states → engine disable)
- Service History per vehicle
- Body Repair System cu diagnostic tool
- Repair Kits (basic/advanced)
- Car Lifts & Jacks (custom props)
- Repair Stations (public pay-per-use)
- NPC Missions (tow, roadside, scrap)
- Flatbed Towing (attach/detach)
- Billing System (itemized invoices)
- Crafting Workbenches + Supplier System
| Export | Tip | Descriere |
|---|---|---|
| `exports['t1ger_mechanic']:TrimPlate(plate)` | Server | Formatează plate string |
| `exports['t1ger_mechanic']:IsPlayerEmployee(src, shopId)` | Server | Check dacă player e angajat la shop |
| `exports['t1ger_mechanic']:SaveVehicleData(plate, data)` | Server | Salvează date mecanice în DB |
| `exports['t1ger_mechanic']:AddServiceHistory(plate, shopId, mechanicId, serviceData)` | Server | Adaugă istoric service |
**Dependențe:** `qb-core`, `oxmysql`, `t1ger_lib`, `qb-target`, `qs-inventory`
**Cross-resource impact:**
- `17mov_CharacterSystem` → Config.Outfits['mechanic'] (duty outfit)
- `qs-inventory` → items mecanice, repair kits, crafting materials
- `qb-target` → interact cu vehicule, markers shop
- `qb-management` → society billing via t1ger_lib
### t1ger_tuningsystem — Features & API
> Tuning system complet — visual mods, engine swaps, dyno tuning, nitrous, mod orders.
**Features principale:**
- Admin Management Menu (create/manage tuner shops in-game)
- Tuner Shops cu markers: Duty, Boss, Garage, Storage, Workbench, Laptop, Customs, Tuning Bay
- Vehicle Tuning (all GTA mods incl. DLC, respray, custom plates)
- Advanced Pricing (tiered, escalation, parts acquisition cost)
- Tuner Tablet (diagnostics, bills, NPC jobs, mod orders)
- Mod Orders (workflow UI, item-based installation)
- Drift Tyres (install/reinstall stock)
- Engine Swaps (sound-only, per class, custom/GTA sounds)
- Nitrous System (kits, purge, burst, dyno-integrated)
- Dyno Tuning (torque, power, brakes modifiers)
- NPC Jobs (Salvage, Mobile Tuning)
- Mod Stations (self-service for whitelisted jobs)
- Billing System
| Export | Tip | Descriere |
|---|---|---|
| `exports['t1ger_tuningsystem']:IsPlayerTuner()` | Client | Returnează boolean, shopId |
| `exports['t1ger_tuningsystem']:GetVehicleNitrousProperties(veh)` | Client | NOS details instalat |
| `exports['t1ger_tuningsystem']:GetVehicleDynoProperties(veh)` | Client | Statistici performanță |
| `exports['t1ger_tuningsystem']:GetAccountMoney(shopId)` | Server | Banii shop-ului |
| `exports['t1ger_tuningsystem']:AddAccountMoney(shopId, amount)` | Server | Adaugă bani la shop |
| `exports['t1ger_tuningsystem']:RemoveAccountMoney(shopId, amount)` | Server | Scade bani din shop |
**Dependențe:** `qb-core` / `es_extended`, `oxmysql`, `t1ger_lib`, `qb-target` / `ox_target`, `qs-inventory` / `ox_inventory`
### t1ger_carlift — Car Lift Props
> Props custom pentru ridicare vehicule la mecanic. Integrare cu `t1ger_mechanic`.
### t1ger_mechanicprops — Stream Assets
> Prop-uri 3D custom pentru animații mecanice (unelte, piese, etc).