# Red Valley Roleplay — Server Knowledge Base ## 🔑 Quick Reference | Key | Value | |-----|-------| | **Server Name** | Red Valley Roleplay | | **Framework** | QBCore | | **Database** | MySQL (`red-valley`) via `oxmysql` | | **Character System** | 17mov_CharacterSystem v1.2.5 | | **Admin Panel** | Luxu Admin | | **Inventory** | qs-inventory (Quasar) | | **Phone** | qs-smartphone-pro (Quasar) | | **Garages** | qs-advancedgarages v5.0.20 (Quasar) | | **Housing** | qs-housing (Quasar) | | **Vehicle Keys** | qs-vehiclekeys (Quasar) | | **Police Job** | wasabi_police v1.10.8 (Wasabi) | | **Ambulance Job** | wasabi_ambulance v1.14.2 (Wasabi) | | **Police MDT** | codem-mdt (CodeM) | | **Mechanic Job** | t1ger_mechanic | | **HUD** | 17mov_Hud | | **Voice** | pma-voice | | **Target System** | qb-target (ld-target engine, provides qtarget) | | **Server Port** | 30110 | | **Max Clients** | 8 | | **Game Build** | 3570 | | **Locale** | ro-RO | | **OneSync** | On (Infinity + Beyond) | | **phpMyAdmin** | http://localhost/phpmyadmin/ | --- ## 📁 Resource Structure ``` resources/ ├── [cfx-default]/ │ ├── [local]/ # .gitkeep (empty) │ ├── [managers]/ │ │ ├── mapmanager/ │ │ └── spawnmanager/ │ └── [system]/ │ ├── [builders]/ │ ├── baseevents/ │ └── sessionmanager/ ├── [framework]/ │ ├── [core]/ │ │ ├── qb-core/ # QBCore framework (Quasar fork 1.3.0) │ │ ├── qb-target/ # ★ Target system (ld-target engine, provides qtarget) │ │ ├── qb-menu/ # QBCore menu │ │ ├── qb-smallresources/ # QBCore small resources │ │ ├── ox_lib/ # Overextended lib │ │ ├── [inventory]/ # ★ Quasar Advanced Inventory v1.5.66 │ │ │ ├── qs-inventory/ # Resursa principală │ │ │ ├── qs-inventory-objects/ # Props stream │ │ │ ├── qs-advancedshops/ # Shopuri avansate │ │ │ ├── [sql]/ # SQL importat │ │ │ └── [dlc]/ │ │ └── no-npc/ # Remove ambient NPCs │ ├── [base]/ │ │ ├── [auth]/ │ │ │ ├── 17mov_CharacterSystem/ # Character select + creation │ │ │ ├── 17mov-plugin-char-creator/ # Spawn outfit in creator │ │ │ └── connectqueue/ # Queue system │ │ ├── [ui]/ │ │ │ └── 17mov_Hud/ # HUD system │ │ └── [jobs]/ │ │ ├── 17mov_JobCenter/ # Job listing & apply (NUI, FXAP encrypted) │ │ ├── [citizen]/ │ │ │ ├── 17mov_BuilderJob/ # Builder job │ │ │ ├── 17mov_Deliverer/ # Delivery job │ │ │ ├── 17mov_Electrician/ # Electrician job (uses qtarget) │ │ │ ├── 17mov_GarbageCollector/ # Garbage job (★ license check) │ │ │ ├── 17mov_Lumberjack/ # Lumberjack job │ │ │ ├── 17mov_Miner/ # Miner job │ │ │ ├── 17mov_OilRig/ # Oil rig job │ │ │ ├── 17mov_Postman/ # Postman job │ │ │ ├── 17mov_TreasureHunter/ # Treasure hunter job │ │ │ ├── 17mov_WindowCleaning/ # Window cleaning job │ │ │ └── aty_busjob/ # Bus driver job │ │ └── [legal]/ │ │ ├── [police]/ │ │ │ ├── wasabi_police/ # Police job (provides qb-policejob) │ │ │ ├── codem-mdt/ # Police MDT │ │ │ ├── codem-dispatch/ # Dispatch alerts │ │ │ └── codem-mdtProp/ # MDT prop │ │ ├── [ambulance]/ │ │ │ └── wasabi_ambulance/ # Ambulance job │ │ ├── [mechanic]/ │ │ │ ├── t1ger_mechanic/ # Mechanic job │ │ │ ├── t1ger_carlift/ # Car lift │ │ │ ├── t1ger_mechanicprops/ # Mechanic props │ │ │ └── jo_towtruck/ # Tow truck │ │ └── [tuner]/ │ │ ├── t1ger_tuningsystem/ # Tuning system │ │ └── t1ger_lib/ # T1GER library │ ├── [depends]/ │ │ ├── Howdy-Minigame/ # Minigame lib │ │ ├── MugShotBase64/ # Mugshot generation │ │ ├── PolyZone/ # Zone management │ │ ├── VehicleDeformation/ # Vehicle damage │ │ ├── bob74_ipl/ # IPL loader v2.6.0 │ │ ├── interact-sound/ # Sound interactions │ │ ├── mhacking/ # Hacking minigame │ │ ├── oxmysql/ # MySQL adapter │ │ ├── phone-radio/ # Phone radio │ │ ├── phone-recorder/ # Phone recorder │ │ ├── phone-render/ # Phone render │ │ ├── progressbar/ # Progress bars │ │ ├── screenshot-basic/ # Screenshots │ │ ├── wasabi_bridge/ # Wasabi framework bridge │ │ └── xsound/ # Sound system │ └── [addons]/ │ ├── 0r_idcard/ # ID card system │ ├── [housing]/ │ │ ├── qs-housing/ # Housing (Quasar) │ │ ├── qs-weed/ # Weed growing │ │ └── [dlc/img/props/shells/sql]/ # Housing assets │ ├── [notify]/ │ │ └── qs-notify/ # Quasar notifications │ ├── [quasar]/ │ │ ├── qs-advancedgarages/ # Garages v5.0.20 │ │ ├── qs-shops/ # Shops │ │ ├── qs-smartphone-pro/ # Smartphone PRO │ │ └── qs-vehiclekeys/ # Vehicle keys v4.0.13 │ ├── ac-carcontrol/ # Car control │ ├── bit-driverschool/ # Driving school │ ├── qb-input/ # QBCore input dialog │ ├── qb-interior/ # QBCore interiors │ ├── qb-management/ # Boss/gang menus │ ├── qb-weathersync/ # Weather & time │ ├── rv-devtools/ # ★ RV dev tools │ ├── rv-itemsonback/ # ★ RV items on back │ ├── rv-license-dialog/ # ★ RV license dialog NUI │ ├── rv-maphold/ # ★ RV map hold │ └── svdden_banking/ # Banking system ├── [stream]/ │ ├── [mlos]/ # Map interiors │ ├── [vehs]/ # Custom vehicles │ ├── minimap/ # Custom minimap │ ├── phone-props/ # Phone props │ ├── rv-props/ # RV custom props │ └── squidgame/ # Squid game MLO ├── [voice]/ │ └── pma-voice/ # Voice system └── luxu_admin/ # Admin panel (top-level) ``` ### Load Order (`resources.cfg`) ``` [cfx-default] → ox_lib → [core] → [depends] → [inventory] → [voice] → [auth] → [ui] → [jobs] → [addons] → qs-weaponsonback → rv-license-dialog → kq_carheist → [mlos] → [vehs] → minimap → phone-props → [casino] → [stream] → luxu_admin ``` --- ## 🎭 Character & Outfit System ### Character Creation Flow 1. Player connects → `connectqueue` (priority queue) 2. `17mov_CharacterSystem` → character select / create 3. **New character** → `creator` preset (DNA + Details only, 2 tabs) 4. `17mov-plugin-char-creator` → per-frame outfit loop on ped in creator (citizenid tracking) 5. After save → `ApplySpawnOutfit()` → gender-specific default clothes 6. `SaveCurrentSkin` → persist to DB (`playerskins`) ### Skin Menu Presets | Context | Preset | Tabs Available | |---------|--------|----------------| | Character Creator | `creator` | DNA + Details (2 tabs) | | Clothing Shop / Ambulance / Boss | `shop` | Details + Clothing + Accessories (3 tabs) | | Admin `/skin` command | `skinCommand` | All 4 tabs | ### Spawn Outfit Defaults - **Male:** torso2=539/2, pants=200/2, arms=96/0, shoes=77/8, t-shirt=15/0 - **Female:** torso2=583/1, pants=214/1, arms=18/0, shoes=81/10, t-shirt=15/0 - No mask for either gender ### Job Outfit System (pattern from mechanic) - **ON duty** → `SaveCurrentOutfit()` saves civilian clothes → `ApplyOutfit(jobOutfit)` applies uniform - **OFF duty** → `ApplyOutfit(savedCivilOutfit)` restores civilian clothes - Outfit data per job stored in `17mov_CharacterSystem/configs/Config.lua` → `Config.Outfits['JOBNAME']` - Structure: `[grade][outfitIndex]{outfitLabel, outfitData}` for male and female - Workflow defined in `.agents/workflows/job-outfit-setup.md` - **IMPORTANT**: Outfits NU apar la clothing shop-uri publice — se afișează DOAR prin `Config.ClothingRooms` - ClothingRooms verifică `job.name == v.requiredJob` (stores.lua:285) - Wasabi cloakroom pe QBCore e HIDDEN automat ("WILL NOT SHOW IN QBCORE") ### GTA Component IDs ``` Component 1 = mask Component 5 = bag Component 3 = arms Component 6 = shoes Component 4 = pants Component 7 = accessory (neck) Component 8 = t-shirt Component 9 = vest Component 11 = torso2 Prop 0 = hat, Prop 1 = glasses ``` --- ## 🗄️ Key Cross-Resource Dependencies | Central File | Resources That Depend On It | |--------------|-----------------------------| | `qb-core/shared/jobs.lua` | wasabi_police, wasabi_ambulance, codem-mdt, codem-dispatch, luxu_admin, t1ger_mechanic, qs-inventory | | `qb-core/shared/items.lua` | qs-inventory, qs-shops, wasabi_police (bobby_pin, tracking_bracelet, handcuffs) | | `qb-core/server/events.lua` | All QBCore resources | | `ox_lib/locales/ro.json` | All translated notifications | | `17mov_CharacterSystem/configs/Bridge.lua` | Bridge selections: clothing, apartments, housing | | `17mov_CharacterSystem/configs/Config.lua` | t1ger_mechanic (outfit system), wasabi_police (outfit system) | | `wasabi_bridge/` | wasabi_police, wasabi_ambulance | | `resources.cfg` | Ensure order — ensure [jobs] loads all legal jobs | ### Bridge Configuration (`17mov_CharacterSystem/configs/Bridge.lua`) - `Config.Housing = "standalone"` (qs-housing not auto-detected) - `Config.Apartments = "standalone"` - Clothing bridge: `qb-clothing` --- ## 🔔 Notification System - **Standard**: `17mov_Hud` native notifications ```lua exports['17mov_Hud']:ShowNotification(message, type) ``` - Previous systems migrated from: `qs-notify`, `codem-notification`, `jg-hud` --- ## 🛡️ Admin & Permissions ### Admin Identifiers | FiveM ID | Name | Permissions | |----------|------|-------------| | `fivem:44269` | Kotzu | group.admin | | `fivem:6428737` | cata | group.admin + qbcore.god | | `steam:11000013f508340` | rausse | group.admin + qbcore.god | | `fivem:16062886` | kotzu pc | group.admin + qbcore.god | ### Permission Hierarchy ``` qbcore.god → group.admin → qbcore.admin → qbcore.mod ``` ### Luxu Admin - API Key configured in server.cfg - Web panel with outfit system (Clone Yourself feature) - `set luxu_admin_api_key` in server.cfg --- ## 📦 Database Notes - **DB Name**: `red-valley` - **Connection**: `server=127.0.0.1;database=red-valley;userid=root;` (via oxmysql) - **Character Delete** (`qb-core/server/player.lua` L541): `playertables` — comentat `apartments` (tabel inexistent) și `phone_messages` (coloana citizenid nu există, qs-smartphone-pro). Restul active: players, bank_accounts, crypto_transactions, phone_invoices, playerskins, player_contacts, player_houses, player_mails, player_outfits, player_vehicles - **⚠️ PENDING**: `crypto_history` table has ~3,971 rows causing oversized queries — needs periodic cleanup or LIMIT --- ## ⏳ Pending Tasks (from changelog) - [x] **wasabi_police install**: Copiat din _preLoad, jail='rcore', items adăugate în qs-inventory - [x] **wasabi_ambulance**: Deja pe server (v1.14.2) - [x] **wasabi_police config review**: Eliminat 'reporter' din policeJobs, confirmat cloakroom QBCore=17mov (2026-03-29) - [x] **wasabi_police outfit**: Config.Outfits['police'] EXISTA DEJA în 17mov (grade 0-4, male+female, 5 variante) (2026-03-29) - [x] **Synapse Map update**: wasabi_police + wasabi_ambulance nodes + conexiuni (2026-03-29) - [x] **t1ger_tuningsystem debug**: Eliminat 6× console.log din NUI JS `web/assets/index-DkGtvbUP.js` (2026-03-29) - [x] **License Check NUI Custom**: Resursa `rv-license-dialog` cu NUI custom matching tema Job Center (bg #0D0F11, accent #ff1a35, border #121416). Backup ox_lib comentat în codul bridge/client. Ensure adăugat în resources.cfg. - [x] **License Check Server Logic**: Verificare `metadata.licences.driver` în Job Center (`bridge/qb/server/main.lua`) + GarbageCollector (`server/functions.lua`). Joburi blocate: garbage, deliverer, postman, lumberjack, bus. - [ ] **License Check Replicare**: Adaugă check permis în `IsHaveRequiredItem()` la Deliverer, Postman, Lumberjack, Busjob (aceeași structură ca GarbageCollector) - [ ] **Webhooks** `qs-smartphone-pro`: configure in `server/custom/webhooks/webhooks.lua` - [ ] **Webhooks** `qs-advancedgarages`: configure in `server/custom/misc/*.lua` - [ ] **oxmysql oversized query**: `crypto_history` cleanup (DELETE rows older than 7 days) - [ ] **Version updates**: `qs-inventory` 3.7.16→3.7.17, `qs-vehiclekeys` 4.0.13→4.0.29, `t1ger_mechanic` 3.6.7→3.6.9 - [ ] **Admin outfit setup**: Configure Luxu panel Clone Yourself + test outfit stack - [ ] **Admin jacket blacklist**: Add in `Skin.BlacklistedInputValues` - [ ] **spawn_mask** item: Custom usable item (mask 134/2 male, 134/3 female) - [ ] **Copiat rv-chat din VPS → LOCAL**: `_preLoad/server-v2-main/resources/[framework]/[base]/[ui]/rv-chat/` → `resources/[framework]/[base]/[ui]/rv-chat/` - [ ] **Copiat codem-radio din VPS → LOCAL**: `_preLoad/server-v2-main/resources/[voice]/codem-radio/` - [ ] **Sincronizare VPS**: Upload `rv-license-dialog/` + ensure line + modificări JobCenter/GarbageCollector pe VPS - [ ] **qs-inventory update**: Portal v3.7.17 → LOCAL (merge safe: păstrează `shared/items.lua`, `config/*`, `html/images/*`, `client/custom/**`, `server/custom/**`) - [ ] **KQ plugins path unify**: Pe VPS sunt în `[kq]/`, pe LOCAL direct în `[addons]/` — de unificat --- ## 📋 Quasar Resources Documentation Status | Resource | Status | |----------|--------| | qs-inventory | ✅ Documented (`docs/qs_inventory_reference.md`) | | qs-housing | ⚠️ Partial | | qs-advancedgarages | ❌ Not documented | | qs-shops | ❌ Not documented | | qs-smartphone-pro | ❌ Not documented | | qs-vehiclekeys | ❌ Not documented | --- ## 🔧 Useful Commands & Exports ### qs-inventory (Server) ```lua exports['qs-inventory']:AddItem(source, item, amount, slot, info) exports['qs-inventory']:RemoveItem(source, item, amount, slot) exports['qs-inventory']:GetInventory(source) exports['qs-inventory']:RegisterStash(id, slots, weight) ``` ### Admin Commands - `/getoutfit` — Print clothing component IDs (from `t1ger_mechanic/getoutfit.lua`) - `/skin` — Open full skin menu (all 4 tabs, `skinCommand` preset) ### 🖥️ Server Start (din IDE terminal) ```powershell # Pornire server simplu cmd /c "e:\FiveMserver\server\start.bat" ``` - **CWD**: `e:\FiveMserver\server` - **start.bat v2.0** = launcher compact (RED VALLEY header, `[OK]` checks, separator `=======`) - **Console Wrapper Demo**: `console_demo.ps1` — ANSI Shadow banner, loading bar, categorized output - **Console Template**: `docs/console_display_template.md` — full display spec + char mappings - **Next**: `start_console.ps1` — real wrapper (pipes start.bat → filtered display) - **Stop**: Ctrl+C → apoi tastezi `quit` în consolă - **Artifact**: `E:\FiveMserver\server\artifacts\FXServer.exe` - **IMPORTANT**: Nu porni serverul de mai multe ori — verifică cu `Get-Process FXServer` înainte ### 🔇 Console Cleanup History | Resursă | Fix | Metodă | |---------|-----|--------| | t1ger_mechanic | DETECTED SYSTEMS/GARAGE/KEYS | Comentat print-uri (bridge/init.lua) | | t1ger_tuningsystem | 6× console.log NUI | Eliminat din web/assets | | t1ger_tuningsystem | has mechanic system | Comentat print (shared/config.lua:258) | | rcore_casino | [Casino] Framework/drunk | Print filter override (const.lua) | | pma-voice | Starting/finished init | Comentat print-uri (client/init/init.lua) | | qs-inventory | jobs_creator warning | Comentat Warning() (jaksam.lua:5) | | qs-vehiclekeys | Debug prints | `Config.Debug = false` (deja setat) | | bit-driverschool | 5× outdated warning | Comentat version.lua din fxmanifest | | 17mov_CharacterSystem | ASCII banner + changelog | Config: DisplayAsciiArt/Changelog/Files = false | | cfx-gabz-mapdata | Parse error | ⚠️ Nerezolvabil (compiled bytecode) | --- ## 📂 Key File Locations | Purpose | Path | |---------|------| | Server config | `server.cfg` | | Resource load order | `resources.cfg` | | QBCore jobs | `resources/[framework]/[core]/qb-core/shared/jobs.lua` | | QBCore items | `resources/[framework]/[core]/qb-core/shared/items.lua` | | Character system | `resources/[framework]/[base]/[auth]/17mov_CharacterSystem/` | | Skin presets | `17mov_CharacterSystem/configs/Skin.lua` | | Job outfits config | `17mov_CharacterSystem/configs/Config.lua` | | Bridge config | `17mov_CharacterSystem/configs/Bridge.lua` | | HUD config | `resources/[framework]/[base]/[ui]/17mov_Hud/Config.lua` | | Mechanic job | `resources/[framework]/[base]/[jobs]/[legal]/[mechanic]/t1ger_mechanic/` | | Police job | `resources/[framework]/[base]/[jobs]/[legal]/[police]/wasabi_police/` | | Ambulance job | `resources/[framework]/[base]/[jobs]/[legal]/[ambulance]/wasabi_ambulance/` | | Police MDT | `resources/[framework]/[base]/[jobs]/[legal]/[police]/codem-mdt/` | | Dispatch | `resources/[framework]/[base]/[jobs]/[legal]/[police]/codem-dispatch/` | | Changelog | `changelog.md` | | Cross-resource tracking | `cross_resource_modifications.md` | | DB SQL dump | `red-valley.sql` (430KB) | | Server start script | `start.bat` | | Pre-load assets | `_preLoad/` | | Cfx.re catalog | `docs/cfx_assets_catalog.md` (142 assets total) | | Resource comparison | `docs/resource_comparison.md` (LOCAL vs VPS diff) | | NUI Simulator | `nui-simulator/` (Node.js standalone, `node server.js --open`, port 3200) | | VPS backup | `_preLoad/server-v2-main/resources/` (snapshot producție) | --- ## 🚗 Cfx.re Assets Overview (142 total) Key devTeams: Quasar Store, ak4y, Malizniakk (17mov), T1GER, Kuzkay, rcore, wasabirobby, ThaC (CodeM), Eichenholz (sky_), OnexScripts, Gabz, 0Resmondev Notable assets on server: - 17mov Character System, 17mov Hud, 17mov multiplayer jobs (12+) - T1GER Mechanic System, Tuning System, Car Lift, Prop Pack - Quasar: Inventory, Housing, Garages, Shops, Smartphone PRO, Vehicle Keys, Banking, Fuel, etc. - Wasabi: Police, Ambulance, Bridge, Evidence, Crutch - rcore: Casino, Prison, Doorlock, Tattoos, Clothes, Fuel, Stats, Shortcuts - Luxu Admin - Various MLO packs (Gabz PDM, MRPD, Vespucci LSPD, Fleeca Banks) --- ## 📜 Changelog Summary (reverse chronological) | Date | Focus | |------|-------| | 2026-03-30 | NUI Simulator standalone (Node.js), Resource comparison LOCAL vs VPS (raport complet), qs-inventory item icons sync (7 imagini VPS→LOCAL), rv-chat descoperit pe VPS (lipsește local) | | 2026-03-29 | wasabi_police install + config review, console cleanup (10 resurse), start.bat v2.0, bit-driverschool fix, 17mov banner off, bob74_ipl v2.6.0, Synapse Map, License Check system (Job Center + GarbageCollector), rv-license-dialog NUI | | 2026-03-28 | Driving School integration, ID Card notifications, Weather sync | | 2026-03-27 | Spawn Outfit System, Character Delete fix, Skin presets, Char Creator plugin | | 2026-03-04 | Mechanic Job Outfit System (auto-equip on duty) | | 2026-03-03 | Mechanic Garage & Keys, 6 Bug Fixes, 17mov update v1.2.4→v1.2.5 | | 2026-03-02 | Server Architecture Research, Cfx.re Audit, Admin Outfit Research | | 2026-03-01 | HUD Migration (jg-hud→17mov), Luxu Admin update, No-NPC, QBCore updates | | 2026-02-27 | Luxu Admin install, rv-mdt creation, BMW M3 F80, QBCore server events refactor | | 2026-02-19 | Remove mChat, resource updates | | 2026-02-17 | QS-Inventory core update | | 2026-02-02 | Remove codem-pausemenu, vehicle swaps, TLS | | 2026-01-19 | Helnius Xero24 Gas Station MLO | | 2026-01-18 | ConnectQueue, Wasabi Police, Bank MLO, Codem Radio, QS-Shops | | 2026-01-07 | Cache cleanup | --- ## 🔐 License Check System (Red Valley Custom) ### Architecture ``` Player Apply @ Job Center Player DutyToggle @ Job Location │ │ ▼ ▼ bridge/qb/server/main.lua server/functions.lua SetPlayerJob() IsHaveRequiredItem() │ │ ▼ ▼ Check metadata.licences.driver Check metadata.licences.driver │ │ ┌────┴────┐ ┌────┴────┐ Has No License Has No License │ │ │ │ ▼ ▼ ▼ ▼ SetJob return false continue return false + TriggerClient + Notify "rv:showLicenseDialog" + TriggerClient "rv:showLicenseDialog" ``` ### Resursa `rv-license-dialog` - **Locație**: `resources/[framework]/[addons]/rv-license-dialog/` - **Fișiere**: `fxmanifest.lua`, `client.lua`, `html/index.html` - **Event**: `rv:showLicenseDialog` (server → client) - **NUI Callbacks**: `close` (închide dialog), `route` (waypoint la școală) - **Coordonate Școală**: `vector3(214.45, -1400.163, 30.57)` (bit-driverschool) - **Tema**: Job Center (bg #0D0F11, accent #ff1a35, border #121416) - **Backup ox_lib**: Comentat în `bridge/qb/client/main.lua` și `client/functions.lua` ### Jobs cu License Check | Job | Locație Check | Note | |-----|--------------|-------| | garbage | ✅ Job Center + ✅ IsHaveRequiredItem | Implementat complet | | deliverer | ✅ Job Center | TODO: IsHaveRequiredItem | | postman | ✅ Job Center | TODO: IsHaveRequiredItem | | lumberjack | ✅ Job Center | TODO: IsHaveRequiredItem | | bus | ✅ Job Center | TODO: IsHaveRequiredItem | ### 17mov Jobs — Editable Files (escrow_ignore) Toate resursele 17mov au fișiere encrypted (FXAP) dar următoarele sunt **editabile**: - `Config.lua` — configurație completă - `client/functions.lua` — hooks client-side (Notify, ChangeClothes, etc.) - `client/target.lua` — target system hooks - `server/functions.lua` — `IsHaveRequiredItem()`, `Pay()`, `PayPenalty()`, `GetPlayerJob()` - `locale/*.lua` — traduceri - `bridge/**/*.lua` — framework bridge (QB/ESX) ### Driver License Storage (bit-driverschool → QBCore) ```lua -- Stored in: PlayerData.metadata.licences { driver = true/false, -- Permis B (mașină) — Config.licenseNameCar = "driver" moto = true/false, -- Permis A (motocicletă) — Config.licenseNameMoto = "moto" truck = true/false -- Permis C (camion) — Config.licenseNameTruck = "truck" } -- Persistent in SQL: players.metadata JSON column -- Also gives item: driver_license (but item can be in car/stash, metadata is authoritative) ``` --- ## 🎯 Interaction System (qb-target / ld-target engine) De la **2026-04-08**, sistemul de target este **qb-target** bazat pe **ld-target** (engine open-source NP 4.0 inspired). ### Fișiere Cheie | Fișier | Scop | |--------|------| | `fxmanifest.lua` | `provide 'qtarget'` — compatibilitate cu 17mov_Electrician | | `client.lua` | Engine principal (raycast, exports, zone markers) | | `init.lua` | Config (DrawSprite=true, Peds={}) | | `interaction/interaction.lua` | 3-stage interaction (dot→hexagon→menu) | | `html/` | NUI (style.css, interaction.css, script.js, index.html) | | `stream/` | circle_marker.ytd + lunny_ui.ytd (texturi interacțiune) | ### Exports Disponibile `AddBoxZone`, `AddCircleZone`, `AddPolyZone`, `AddEntityZone`, `AddComboZone`, `RemoveZone`, `AddTargetEntity`, `RemoveTargetEntity`, `AddTargetModel`, `RemoveTargetModel`, `AddTargetBone`, `RemoveTargetBone`, `AddGlobalPed`, `AddGlobalVehicle`, `AddGlobalObject`, `AddGlobalPlayer`, `RemoveGlobalPed`, `RemoveGlobalVehicle`, `RemoveGlobalObject`, `RemoveGlobalPlayer`, `SpawnPed`, `RemoveSpawnedPed`, `DeletePeds`, `IsTargetActive`, `IsTargetSuccess` ### Config Flag per DevTeam | DevTeam | Config Key | Valoare | |--------|-----------|---------| | **17mov** | `Config.UseTarget = true` | în Config.lua | | **Quasar** | `Config.UseTarget = true` | în config/config.lua | | **QBCore** | `setr UseTarget true` | în server.cfg | | **rcore** | `UseTarget = true, TargetZoneType = 3` | în config.lua | | **aty_busjob** | `Target = "qb"` | în config.lua | | **wasabi** | `Config.useTarget = true` | era deja activat | | **T1GER** | via t1ger_lib | era deja activat | ### Excepție - **qs-advancedgarages** — nu suportă qb-target (doar ox_target / qb-radialmenu / none) ### Zone Markers - Circle dots apar pe **Zones** (BoxZone, CircleZone) când ALT e ținut apăsat - Entitățile adăugate cu `AddTargetEntity()` NU au markere la distanță (design original ld-target) - Culoare DrawSprite: RGB(92, 151, 247) = #5c97f7 albastru --- ## 🖥️ 17mov_Hud — API Reference > Full docs: `docs/17mov-hud-api-reference.md` > Sursă: https://docs.17movement.net/advanced-hud/ ### Exports disponibile din alte resurse | Export | Ce face | |--------|---------| | `ToggleDisplay(bool)` | Ascunde/afișează HUD complet | | `HideRadar(bool)` | Forțează ascundere minimap | | `ShowNotification(text, type, title, time)` | Notificare (info/error/success) | | `ShowHelpNotification(text)` | Help text (suportă ~INPUT_CONTEXT~) | | `HideHelpNotification()` | Ascunde help | | `ShowHelpNotificationWhile(text)` | Help pt while loops (auto-hide) | | `StartProgress(action, onStart, onTick, onFinish)` | Progress bar cu animație + props | | `StopProgress()` | Oprește progress bar | | `OpenSettings()` | Deschide setări HUD | | `GetTheme(callback)` | Returnează culori HUD ca hex | | `GetSettings(callback)` | Returnează setări curente | ### Custom Indicators (adaugă elemente noi pe HUD) ```lua -- Adaugă cerc (ca viața) sau card (text colț) exports["17mov_Hud"]:RegisterComponent("name", { type="status"|"card", label="...", icon={...} }) exports["17mov_Hud"]:UpdateComponentValue("name", value) -- float 0-1 sau string exports["17mov_Hud"]:ToggleComponentVisibility("name", bool) -- arată/ascunde ``` ### Fișiere NUI Configurabile | Fișier | Locație | Ce controlează | |--------|---------|----------------| | `colors.css` | `17mov_CharacterSystem/web/web/colors.css` | Toate culorile NUI | | `config.json` (loading) | `17mov_CharacterSystem/web/web/loadingscreen/config.json` | Loading screen | | `images/` (loading) | `17mov_CharacterSystem/web/web/loadingscreen/images/` | Logo + slides | | `songs/` (loading) | `17mov_CharacterSystem/web/web/loadingscreen/songs/` | Muzică loading | > ⚠️ Folderul `web/loadingscreen/` (fără web/) NU e cel activ! Config-ul real e în `web/web/loadingscreen/`. ### Culori Red Valley (aplicate 2026-04-01) ```css --color-accent: 255 26 53; /* Roșu RV (#ff1a35) — loading bar, titluri, accente */ --color-background-primary: 255 255 255; /* Alb transparent — carduri UI */ ``` --- ## 🆕 Resurse Custom Red Valley ### rv-props (Custom Props) - **Locație**: `resources/[stream]/rv-props/` - **Scop**: Props custom branded (prop_rv_tablet) - **Consumat de**: 17mov_JobCenter (tabletă animație) - **Tip**: Standalone (stream, zero cod Lua) ### qb-target (ld-target engine — migrat 2026-04-08) - **Locație**: `resources/[framework]/[core]/qb-target/` - **Engine**: ld-target (open-source, NP 4.0 inspired) - **provide**: `qtarget` (compatibilitate 17mov_Electrician) - **Config.Peds**: Golit (fără demo NPC-uri Lunny) - **Culori NUI**: Teal original (#00F8B9) — planificat switch la #5c97f7 albastru - **Dependență**: PolyZone - **Status**: ✅ Funcțional complet, exports verificate, F8 curat ### rv-itemsonback (Items vizibile pe corp + Admin Menu) - **Locație**: `resources/[framework]/[addons]/rv-itemsonback/` - **Scop**: Afișare props pe corpul jucătorului din inventar (medikit, etc.) + admin menu live edit - **Fișiere**: `fxmanifest.lua`, `config.lua`, `client.lua`, `server.lua`, `data/items.json` - **Dependențe**: ox_lib, qb-core - **Manifest**: `fx_version 'bodacious'` (NU cerulean — nu încarcă scripturile!) - **Admin Menu**: `/itemsonback` — ox_lib context menu - Search items din QBCore.Shared.Items - Ajustare live pos/rot cu preview transparent - Selectare bone (pelvis, spine, etc.) - Salvare persistentă în `data/items.json` - `/clearpreview` — cleanup emergency prop - **Auto-cleanup**: Safety thread curăță preview-ul dacă rămâne blocat (3s) - **Disable Idle**: `InvalidateIdleCam()` + `N_0xf4f2c0d4ee209e20()` + `SetPedCanPlayAmbientAnims(false)` - **Target Dummy**: `/spawndummy` (NPC random, stă pe loc, rănibil, rămâne mort), `/killdummy` (cleanup) - **Ensure**: În `[addons]` folder, pornește cu `ensure [addons]` ### qs-inventory Fixes (2026-04-01) - **Config.Genders**: Adăugat `[0] = 'Male', [1] = 'Female'` — QBCore folosește 0-indexed, Quasar 1-indexed - **Config.Framework**: Forțat `'qb'` (auto-detect eșua) - **Config.Debug**: `false` (elimină spam consolă) - **RemoveItem.lua**: `pcall` la `handleDeleteItem` export (previne crash qs-smartphone-pro vechi) ### Quasar Advanced Inventory Migration (2026-04-02) - **qb-core fork**: Instalat Quasar pre-configured qb-core 1.3.0 - **StarterItems** (`qb-core/shared/main.lua` L6): DOAR `phone` + `map` (id_card de la mugshot, driver_license de la școală) - **Clothing items** (`qb-core/shared/items.lua`): Adăugat `chain`, `vest`, `bracelets`, `watch` (copiate din qs-inventory items.lua) - **playertables** (`qb-core/server/player.lua` L541): Comentat `apartments` + `phone_messages` - **qs-inventory config**: `Language='ro'`, `ServerName='RED VALLEY'`, `Debug=true` (temporar) - **qs-housing SQL**: Importat din docs + folder (houselocations, player_houses, house_decorations, etc.) ### ⚠️ CRITICAL: Checklist la Update qb-core 1. `shared/main.lua` → StarterItems: DOAR phone + map 2. `server/player.lua` → playertables: FĂRĂ apartments, FĂRĂ phone_messages 3. `shared/items.lua` → Clothing: chain, vest, bracelets, watch TREBUIE să existe --- ## 📜 Changelog Summary (reverse chronological) | Date | Focus | |------|-------| | 2026-04-10 | **Resource cleanup**: mutat resurse neutilizate în backup, verificat structura completă, actualizat knowledge base | | 2026-04-08 | **qb-target migration** (ld-target engine): folder rename rv-target→qb-target, provide qtarget, demo peds cleanup, blue branding NUI (#5c97f7), fresh copy din ld-target original, F8 erori rezolvate (toate exporturile funcționale) | | 2026-04-02 | **Quasar Advanced Inventory migration** (v1.5.66), qb-core fork Quasar 1.3.0, qs-housing SQL import, clothing items fix (+chain/vest/bracelets/watch), playertables fix (-apartments/-phone_messages), StarterItems fix (phone+map only), rv-itemsonback v2.0 | | 2026-03-30 | NUI Simulator standalone (Node.js), Resource comparison LOCAL vs VPS (raport complet), qs-inventory item icons sync (7 imagini VPS→LOCAL), rv-chat descoperit pe VPS (lipsește local) | | 2026-03-29 | wasabi_police install + config review, console cleanup (10 resurse), start.bat v2.0, bit-driverschool fix, 17mov banner off, bob74_ipl v2.6.0, Synapse Map, License Check system (Job Center + GarbageCollector), rv-license-dialog NUI | | 2026-03-28 | Driving School integration, ID Card notifications, Weather sync | | 2026-03-27 | Spawn Outfit System, Character Delete fix, Skin presets, Char Creator plugin | | 2026-03-04 | Mechanic Job Outfit System (auto-equip on duty) | | 2026-03-03 | Mechanic Garage & Keys, 6 Bug Fixes, 17mov update v1.2.4→v1.2.5 | | 2026-03-02 | Server Architecture Research, Cfx.re Audit, Admin Outfit Research | | 2026-03-01 | HUD Migration (jg-hud→17mov), Luxu Admin update, No-NPC, QBCore updates | | 2026-02-27 | Luxu Admin install, rv-mdt creation, BMW M3 F80, QBCore server events refactor | | 2026-02-19 | Remove mChat, resource updates | | 2026-02-17 | QS-Inventory core update | | 2026-02-02 | Remove codem-pausemenu, vehicle swaps, TLS | | 2026-01-19 | Helnius Xero24 Gas Station MLO | | 2026-01-18 | ConnectQueue, Wasabi Police, Bank MLO, Codem Radio, QS-Shops | | 2026-01-07 | Cache cleanup |