Compare commits

...

13 Commits

Author SHA1 Message Date
redvalley 1bcf0d9282 docs: sync knowledge base with April 8-10 changes
Synchronized docs/ folder with Knowledge Base (was behind since April 3):
- changelog.md: added qb-target migration (Apr 8) + resource cleanup (Apr 10) entries
- server_knowledge.md: complete resource structure post-cleanup, target section update
- cross_resource_modifications.md: added qb-target migration checklist
- resource_dependency_map.md: removed rv-qb-target, updated qb-target (ld-target engine)
- resource_map.html: updated qb-target node + 17mov_Electrician qtarget link
2026-06-17 16:53:15 +03:00
redvalley 3dcff3ce6d curatenie si fix target 2026-04-10 14:04:59 +03:00
redvalley 24b682532e f 2026-04-08 12:50:29 +03:00
redvalley 5e23b3e966 target system custom 2026-04-03 07:04:17 +03:00
redvalley 4d73d4a013 qb-target migration + DrawText suppression + time freeze
- qb-core/client/drawtext.lua: Global [E] prompt suppression (all DrawText functions are no-ops) - qs-housing/qb.lua: DrawText3D/DrawText3Ds/DrawTextBoard no-ops when UseTarget=true - qs-housing/qb-target.lua: Added BoxZone target on Real Estate NPC (executes /housebrowser) - qb-weathersync: Time freeze at 14:00 (BaseTime=14, FreezeTime=true)
2026-04-03 04:12:32 +03:00
redvalley e756e29294 fix(qb-core): post-update recovery + centralizare notify 17mov_Hud
Restaurat jobs.lua din git (Quasar fork a suprascris joburile 17mov). Adăugat item map în items.lua (lipsea, rupt rv-maphold). Setat licences.driver = false în config.lua. Override QBCore.Functions.Notify + QBCore:Notify event → 17mov_Hud:ShowNotification (toate notificările merg automat prin 17mov_Hud).
2026-04-03 02:47:59 +03:00
redvalley 06414ed181 Update client.lua 2026-04-02 22:10:34 +03:00
redvalley 818eadbd46 Update items.json 2026-04-02 02:21:45 +03:00
redvalley 373d179cfb resursa iteme vizibile pe corp cu admin menu + disable idle cam
- rv-itemsonback v2.0: afișare props pe corp din inventar (medikit etc.)
- Admin menu /itemsonback cu ox_lib (search items, adjust pos/rot, select bone)
- Live preview cu auto-cleanup + /clearpreview emergency
- Config persistent JSON (data/items.json)
- Disable idle camera + idle animations (InvalidateIdleCam)
- resources.cfg: safety net ensure qs-weaponsonback
- fix(qs-inventory): Config.Genders[0]=Male pt QBCore compatibility
2026-04-02 02:11:26 +03:00
redvalley a3d124dc45 fix(qs-inventory, 0r_idcard): id_card metadata + gender mapping + pcall clothing
- Fix Config.Genders: adăugat [0]=Male (QBCore folosește 0/1, nu 1/2)
- Fix 0r_idcard: addItem trimite acum metadata (firstname, lastname etc)
- pcall pe handleDeleteItem în RemoveItem.lua (qs-smartphone-pro compat)
- Framework forțat QB, debug dezactivat
2026-04-02 00:47:45 +03:00
redvalley 8cf412c266 fix(qs-inventory): pcall pe handleDeleteItem qs-smartphone-pro
Export-ul handleDeleteItem nu există în versiunea curentă de qs-smartphone-pro. Wrappat cu pcall pe liniile 84, 117, 154 din RemoveItem.lua ca să nu mai blocheze equip/unequip de haine.
2026-04-02 00:26:24 +03:00
redvalley e2b6726108 Create README.md 2026-04-02 00:24:12 +03:00
redvalley cefe558c9a update inventar+phone+map
phone props
- Adăugat global CreateUsableItem alias în qb-core/server/functions.lua
  (qs-inventory apelează CreateUsableItem ca funcție globală, nu QBCore.Functions)
- Fixat 16 stringuri sparte în qb-core/shared/items.lua (descrieri cu apostrofuri
  neînchise care blocau parsarea și împiedicau boot-ul qb-core)
- Adăugat USE action pe itemul 'map' în rv-maphold: deschide pause menu cu
  animație hartă în mână din inventar
2026-04-02 00:18:57 +03:00
2797 changed files with 74593 additions and 183246 deletions
+1
View File
@@ -15,3 +15,4 @@ _check_dupes.py
_find_dupes.py _find_dupes.py
artifacts/crashes/136f1640-ac9a-4693-824a-5ccd58f1b359-full.dmp artifacts/crashes/136f1640-ac9a-4693-824a-5ccd58f1b359-full.dmp
artifacts/crashes/136f1640-ac9a-4693-824a-5ccd58f1b359.dmp artifacts/crashes/136f1640-ac9a-4693-824a-5ccd58f1b359.dmp
/artifacts/crashes
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+93 -2
View File
@@ -7,6 +7,93 @@ git tkn: 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
--- ---
## 2026-04-10 — Resource Cleanup + Knowledge Base Update
### 🧹 Resource Cleanup
- Mutat resurse neutilizate în `_preLoad/_backups 10-04-2026/`
- Verificat complet structura resurselor post-cleanup
- Actualizat knowledge base: `server_knowledge.md`, `resource_dependency_map.md`, `changelog.md`, `todo_lists.md`, `cross_resource_modifications.md`, `resource_map.html`
---
## 2026-04-08 — qb-target Migration (ld-target engine)
### 🎯 Target System Migration: rv-target → qb-target (ld-target engine)
- **Cauza erorilor**: Folderul se numea `rv-target` cu `provide 'qb-target'` — resursele nu găseau exporturile
- **Fix**: Folder redenumit la `qb-target` (cum era distribuit ld-target original)
- **provide qtarget**: Adăugat `provide 'qtarget'` în fxmanifest.lua pt compatibilitate cu `17mov_Electrician`
- **Demo peds cleanup**: `Config.Peds = {}` (golit tabel demo Lunny)
- **Blue branding NUI**: `#00F8B9``#5c97f7` în style.css, interaction.css, script.js, index.html
- **DrawSprite albastru**: Zone markers RGB(92,151,247) în client.lua
- **Fresh copy**: client.lua și NUI copiate proaspăt din `_preLoad/ld-target/Standalone/`
- **F8 curat**: Toate erorile `No such export` rezolvate
**Fișiere modificate:**
| Acțiune | Fișier |
|---------|--------|
| 🔄 REDENUMIT | `rv-target/``qb-target/` (folder rename) |
| ✏️ MOD | `qb-target/fxmanifest.lua` — name='qb-target', provide 'qtarget' |
| ✏️ MOD | `qb-target/init.lua` — Config.Peds = {} |
| ✏️ MOD | `qb-target/client.lua` — DrawSprite RGB(92,151,247) albastru |
| ✏️ MOD | `qb-target/html/style.css`#00F8B9#5c97f7 |
| ✏️ MOD | `qb-target/html/interaction.css`#00F8B9#5c97f7 |
| ✏️ MOD | `qb-target/html/script.js`#00F8B9#5c97f7 |
| ✏️ MOD | `qb-target/html/index.html`#00F8B9#5c97f7 |
---
## 2026-04-03 — Stabilizare Post-Migrare Quasar Inventory + Notify Centralizat
### 🔧 Fix: qb-core Post-Update Recovery (Quasar fork a suprascris custom changes)
- ✏️ `resources/[framework]/[core]/qb-core/shared/jobs.lua`**RESTAURAT din git** — Quasar fork a suprascris toate joburile 17mov (deliverer, garbage, bus, builder, electrician, etc.) cu defaults
- ✏️ `resources/[framework]/[core]/qb-core/shared/items.lua` — adăugat item `map` (lipsea complet, rupt rv-maphold StarterItems)
- ✏️ `resources/[framework]/[core]/qb-core/config.lua``metadata.licences.driver = false` (Quasar pune `true` default, trebuie `false` pt bit-driverschool)
- ✏️ `resources/[framework]/[core]/qb-core/server/player.lua` — playertables: comentat `apartments`, `phone_messages`, `player_contacts`, `player_mails` (nu au coloana `citizenid`)
### 🔔 Centralizare Notificări → 17mov_Hud
- ✏️ `resources/[framework]/[core]/qb-core/client/functions.lua` — Override `QBCore.Functions.Notify()``exports['17mov_Hud']:ShowNotification()` (linia ~171)
- ✏️ `resources/[framework]/[core]/qb-core/client/events.lua` — Override `QBCore:Notify` event → `exports['17mov_Hud']:ShowNotification()` (linia ~193)
- **Efect:** TOATE resursele de pe server afișează notificări prin 17mov_Hud automat, fără modificări individuale
### 🎯 Suprimare DrawText [E] Global + qb-target Migration
- ✏️ `resources/[framework]/[core]/qb-core/client/drawtext.lua`**SUPRIMAT GLOBAL** — toate funcțiile DrawText/ChangeText/HideText/KeyPressed sunt no-ops. Resursele nu mai pot afișa prompt-uri [E]. Exporturile rămân funcționale (nu crashuiesc), dar nu fac nimic.
- ✏️ `resources/[framework]/[addons]/[housing]/qs-housing/client/custom/framework/qb.lua` — DrawText3D/DrawText3Ds/DrawTextBoard suprimare condițională: când `Config.UseTarget = true`, funcțiile devin no-ops (elimină textele [E] din codul encrypted)
- ✏️ `resources/[framework]/[addons]/[housing]/qs-housing/client/custom/target/qb-target.lua` — Adăugat BoxZone qb-target pe NPC-ul Real Estate + floating text "Agent Imobiliar" deasupra capului (utilizează native GTA, nu DrawText3D suprimat)
- **Efect:** Prompt-urile [E] au dispărut de pe tot serverul. Interacțiunile se fac prin qb-target (dot/eye target). Resursele cu `Config.UseTarget` rămân de setat individual pe `true` pe rând.
### ⏰ Time Freeze la 14:00
- ✏️ `resources/[framework]/[addons]/qb-weathersync/config.lua``Config.BaseTime = 14`, `Config.FreezeTime = true` (server locked la 14:00)
### 📋 Workflow & Rulebook Updates
- ✏️ `.agents/workflows/rulebook.md` — Regula 5 rescrisă complet: workflow obligatoriu `/resource-update`, qb-core checklist cu 7 puncte
- 🆕 `.agents/workflows/resource-update.md` — Workflow nou: git diff înainte/după, cross_resource_modifications.md check, post-update verificare
- ✏️ `cross_resource_modifications.md` — Adăugat puncte 4 (jobs.lua), 5 (config.lua driver), 6 (functions.lua notify), 7 (events.lua notify)
### 📱 qs-smartphone-pro SQL Analysis
- Analizat `_preLoad/[smartphone].pack/[smartphone]/[sql]/qb.sql` — confirmat tabelele phone NU au `citizenid`:
- `phone_messages``phone` (VARCHAR)
- `player_contacts``identifier` (VARCHAR)
- `player_mails``taker` (VARCHAR)
**Fișiere modificate:**
| Acțiune | Fișier |
|---------|--------|
| 🔄 RESTAURAT | `qb-core/shared/jobs.lua` — din git (toate joburile 17mov) |
| ✏️ MOD | `qb-core/shared/items.lua` — adăugat `map` item |
| ✏️ MOD | `qb-core/config.lua``licences.driver = false` |
| ✏️ MOD | `qb-core/server/player.lua` — playertables cleanup |
| ✏️ MOD | `qb-core/client/functions.lua` — notify override 17mov_Hud |
| ✏️ MOD | `qb-core/client/events.lua` — notify event override 17mov_Hud |
| 🆕 NOU | `.agents/workflows/resource-update.md` |
| ✏️ MOD | `.agents/workflows/rulebook.md` — regula 5 extinsă |
| ✏️ MOD | `cross_resource_modifications.md` — 7 puncte checklist qb-core |
| ✏️ SUPRIMAT | `qb-core/client/drawtext.lua` — DrawText/HideText no-ops global |
| ✏️ MOD | `qs-housing/client/custom/framework/qb.lua` — DrawText3D no-op când UseTarget=true |
| ✏️ MOD | `qs-housing/client/custom/target/qb-target.lua` — +NPC Real Estate target + floating text |
| ✏️ MOD | `qb-weathersync/config.lua` — time freeze 14:00 |
---
## 2026-03-31 — Migrare Interacțiuni la qb-target + Skills Upgrade + Bus Icon + Animație Tabletă ## 2026-03-31 — Migrare Interacțiuni la qb-target + Skills Upgrade + Bus Icon + Animație Tabletă
### 🎬 Animație Tabletă la Job Center ### 🎬 Animație Tabletă la Job Center
@@ -771,7 +858,11 @@ Toate resursele care foloseau DrawText3D `[E]` / Markers au fost trecute pe **qb
- [x] **t1ger_tuningsystem debug**: Eliminat 6× console.log din NUI JS (2026-03-29) - [x] **t1ger_tuningsystem debug**: Eliminat 6× console.log din NUI JS (2026-03-29)
- [ ] **Webhooks** `qs-smartphone-pro`: configurare în `server/custom/webhooks/webhooks.lua` - [ ] **Webhooks** `qs-smartphone-pro`: configurare în `server/custom/webhooks/webhooks.lua`
- [ ] **Webhooks** `qs-advancedgarages`: configurare în `server/custom/misc/*.lua` - [ ] **Webhooks** `qs-advancedgarages`: configurare în `server/custom/misc/*.lua`
- [ ] **oxmysql oversized query**: `SELECT * FROM crypto_history` (2339 results) — trebuie paginare sau LIMIT - [ ] **oxmysql oversized query**: `SELECT * FROM crypto_history` (4016 results) — trebuie paginare sau LIMIT
- [ ] **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 - [ ] **Version updates**: `qs-vehiclekeys` 4.0.13→4.0.29, `t1ger_mechanic` 3.6.7→3.6.9
- [ ] **Admin outfit setup**: Configurare Luxu panel Clone Yourself + testare outfit stack - [ ] **Admin outfit setup**: Configurare Luxu panel Clone Yourself + testare outfit stack
- [ ] **Admin jacket blacklist**: Adăugare în `Skin.BlacklistedInputValues` - [ ] **Admin jacket blacklist**: Adăugare în `Skin.BlacklistedInputValues`
- [ ] **qs-smartphone-pro setup**: Import SQL-uri, configurare completă telefon, re-evaluare playertables după setup
- [ ] **map.png**: Verificare imagine map în qs-inventory/html/images/ (userul a copiat manual)
- [x] **qb-core post-update recovery**: jobs.lua restaurat, items.lua map adăugat, config.lua driver=false, notify centralizat (2026-04-03)
+132 -17
View File
@@ -5,6 +5,23 @@ Util pentru tracking git — aceste fișiere aparțin altor resurse dar au fost
--- ---
## ⚠️ CRITICAL: Checklist la Update qb-core
Când se face update la `qb-core` (orice versiune/fork), OBLIGATORIU verifică:
1. **`shared/main.lua`** → `QBShared.StarterItems` — DOAR `phone` + `map`! (NU id_card, NU driver_license)
2. **`server/player.lua`** → `playertables` — FĂRĂ `apartments` (tabel inexistent), FĂRĂ `phone_messages` (nu are citizenid)
- ⚠️ **ATENȚIE:** Repo-ul OFICIAL Quasar qb-core vine MEREU cu `apartments` + `phone_messages` in playertables. La FIECARE update trebuie comentate!
- 📱 **TODO (qs-smartphone-pro setup):** Când se configurează qs-smartphone-pro complet, REVERIFICÃ tabelele `player_contacts`, `player_mails`, `phone_messages`, `phone_invoices`. Dacă schema lor are coloana `citizenid`, reactivează-le. Dacă nu, adaugă cleanup custom cu coloana corectă (ex: `number`, `phone_number`).
3. **`shared/items.lua`** → Clothing items: `chain`, `vest`, `bracelets`, `watch` + `map` (rv-maphold) TREBUIE să existe
4. **`shared/jobs.lua`** → TOATE joburile 17mov TREBUIE păstrate: `deliverer`, `garbage`, `postman`, `lumberjack`, `bus`, `builder`, `electrician`, `windowcleaner`, `treasurehunter`, `miner`, `oilrig`, `mechanic`, `unemployed`. Quasar fork SUPRASCRIE cu joburi default!
- ⚠️ **FIX RAPID:** `git checkout HEAD -- "resources/[framework]/[core]/qb-core/shared/jobs.lua"` restaurează din git
5. **`config.lua`** → `metadata.licences.driver = false` (linia 87) — Quasar pune `true` default, TREBUIE setat `false` (permisul se obține la bit-driverschool)
6. **`client/functions.lua`** → `QBCore.Functions.Notify` override la `exports['17mov_Hud']:ShowNotification` (linia ~171)
7. **`client/events.lua`** → `QBCore:Notify` event override la `exports['17mov_Hud']:ShowNotification` (linia ~193)
---
## Feature: Mechanic Job Outfit (lucrat pe `t1ger_mechanic`) ## Feature: Mechanic Job Outfit (lucrat pe `t1ger_mechanic`)
### Fișiere modificate în alte resurse: ### Fișiere modificate în alte resurse:
@@ -47,23 +64,6 @@ Util pentru tracking git — aceste fișiere aparțin altor resurse dar au fost
--- ---
## Rezumat rapid — Toate fișierele modificate
```
resources/[framework]/[core]/qb-core/shared/jobs.lua ← MODIFICAT
resources/[framework]/[base]/[auth]/17mov_CharacterSystem/configs/Config.lua ← MODIFICAT
resources/[framework]/[base]/[jobs]/[legal]/[mechanic]/t1ger_mechanic/
└── client/shop/markers/duty.lua ← MODIFICAT
└── client/shop/markers/getoutfit.lua ← NOU
resources/[stream]/[admin-outfit]/AdminPack/fxmanifest.lua ← NOU
resources.cfg ← MODIFICAT
start_server.ps1 ← NOU
_preLoad/AdminPack/fxmanifest.lua ← NOU
.agents/workflows/job-outfit-setup.md ← NOU
```
---
## Feature: Wasabi Police Install (lucrat pe `wasabi_police` — 2026-03-29) ## Feature: Wasabi Police Install (lucrat pe `wasabi_police` — 2026-03-29)
### Fișiere modificate în alte resurse: ### Fișiere modificate în alte resurse:
@@ -86,3 +86,118 @@ _preLoad/AdminPack/fxmanifest.lua ← NOU
- SQL-urile ESX din `_install_first/esx/sql/` nu au fost executate (suntem pe QBCore) - SQL-urile ESX din `_install_first/esx/sql/` nu au fost executate (suntem pe QBCore)
- Resursa se încarcă automat via `ensure [jobs]` din `resources.cfg` - Resursa se încarcă automat via `ensure [jobs]` din `resources.cfg`
---
## Feature: Quasar Advanced Inventory Migration (qb-core fork Quasar 1.3.0 — 2026-04-02)
### Fișiere modificate în qb-core:
| Fișier | Linie | Ce s-a modificat |
|--------|-------|------------------|
| `shared/main.lua` | L6-11 | **StarterItems** — DOAR `phone` + `map`. Comentat `id_card` (de la mugshot) și `driver_license` (de la școala de șoferi) |
| `shared/items.lua` | L4765+ | Adăugat 4 clothing items lipsă: `chain`, `vest`, `bracelets`, `watch` (copiate din qs-inventory/shared/items.lua) |
| `server/player.lua` | L541-554 | **playertables** — comentat `apartments` (tabel inexistent) și `phone_messages` (nu are coloana citizenid, qs-smartphone-pro) |
### Fișiere modificate în qs-inventory:
| Fișier | Linie | Ce s-a modificat |
|--------|-------|------------------|
| `config/config.lua` | L26 | `Config.Language = 'ro'` |
| `config/config.lua` | L72 | `Config.ServerName = 'RED VALLEY'` |
| `config/config.lua` | L935 | `Config.Debug = true` (temporar, de setat `false` la producție) |
### Rezumat rapid — Toate fișierele modificate (Quasar migration)
```
resources/[framework]/[core]/qb-core/shared/main.lua ← StarterItems: phone + map ONLY
resources/[framework]/[core]/qb-core/shared/items.lua ← +chain, +vest, +bracelets, +watch
resources/[framework]/[core]/qb-core/server/player.lua ← playertables: -apartments, -phone_messages
resources/[framework]/[core]/[inventory]/qs-inventory/config/config.lua ← lang, servername, debug
```
---
## Feature: Global [E] Prompt Suppression → qb-target (2026-04-03)
### ⚠️ CRITICAL: Checklist la Update qb-core (drawtext)
Când se face update la `qb-core`, verifică:
- **`client/drawtext.lua`** → TOATE funcțiile sunt no-ops (DrawText, ChangeText, HideText, KeyPressed). La update, Quasar va restaura funcțiile originale!
### Fișiere modificate:
| Fișier | Resursă | Ce s-a modificat |
|--------|---------|------------------|
| `client/drawtext.lua` | `qb-core` | **SUPRIMAT GLOBAL** — DrawText/ChangeText/HideText/KeyPressed sunt no-ops cu `function() end`. Exporturile există dar nu fac nimic. |
### Note:
- Supresia este globală — NICIO resursă nu poate afișa prompt-uri [E] prin qb-core exports
- Resursele nu crashuiesc, dar textul nu apare
- Aceasta forțează migrarea la qb-target (dot/eye target) pe tot serverul
- Resursele trebuie setate individual cu `Config.UseTarget = true`
---
## Feature: qs-housing qb-target Migration (2026-04-03)
### ⚠️ CRITICAL: Checklist la Update qs-housing
Când se face update la `qs-housing`, verifică:
1. **`client/custom/framework/qb.lua`** → DrawText3D/DrawText3Ds/DrawTextBoard sunt no-ops când `Config.UseTarget = true`. Update-ul Quasar va restaura funcțiile originale!
2. **`client/custom/target/qb-target.lua`** → BoxZone `rv_realestate_npc` + floating text "Agent Imobiliar" pe NPC Real Estate. Secțiunea RED VALLEY de la sfârșitul fișierului!
### Fișiere modificate:
| Fișier | Resursă | Ce s-a modificat |
|--------|---------|------------------|
| `client/custom/framework/qb.lua` | `qs-housing` | DrawText3D/DrawText3Ds/DrawTextBoard devin no-ops condițional (doar când `Config.UseTarget = true`). Codul encrypted apelează aceste funcții native GTA, deci suprimarea din qb-core nu le prindea. |
| `client/custom/target/qb-target.lua` | `qs-housing` | Adăugat BoxZone qb-target pe NPC-ul Real Estate (`rv_realestate_npc`) la coordonatele din `Config.RealeStateNPC.location`. Opțiune: "Open House Browser" (execută `/housebrowser`). Floating text nativ "Agent Imobiliar" cu LOS check. |
### NPC Real Estate — Configurare:
- **Model:** `a_m_m_business_01` (din `Config.RealeStateNPC.pedModel`)
- **Locație:** `vec4(-253.978027, -970.457153, 31.217529, 161.574799)` (din `Config.RealeStateNPC.location`)
- **Target zone:** BoxZone 1.5×1.5, distance 2.5
- **Floating text:** Native GTA rendering, LOS check, 15m range
---
## Feature: Time Freeze 14:00 (2026-04-03)
### Fișiere modificate:
| Fișier | Resursă | Ce s-a modificat |
|--------|---------|------------------|
| `config.lua` | `qb-weathersync` | `Config.BaseTime = 14`, `Config.FreezeTime = true` — server locked la ora 14:00 permanent |
### Note:
- Necesită restart complet de server (ensure nu funcționează)
- `Config.RealTimeSync` era deja `false` (setat 2026-03-28)
---
## Feature: qb-target Migration (ld-target engine — 2026-04-08)
### ⚠️ CRITICAL: Checklist la Update qb-target
Când se face update/înlocuire la `qb-target`, verifică:
1. **`fxmanifest.lua`** → `provide 'qtarget'` TREBUIE să existe (17mov_Electrician depinde de el)
2. **`init.lua`** → `Config.Peds = {}` (fără demo NPC-uri Lunny)
3. **`client.lua`** → DrawSprite zone markers: RGB(92, 151, 247) = albastru
4. **`html/`** → Culorile NUI: `#5c97f7` albastru (style.css, interaction.css, script.js, index.html)
### Fișiere modificate:
| Fișier | Resursă | Ce s-a modificat |
|--------|---------|------------------|
| `fxmanifest.lua` | `qb-target` | `name='qb-target'`, `provide 'qtarget'` adăugat |
| `init.lua` | `qb-target` | `Config.Peds = {}` — golit tabel demo peds Lunny |
| `client.lua` | `qb-target` | DrawSprite zone markers: `(255,255,255)``(92,151,247)` albastru |
| `html/style.css` | `qb-target` | `#00F8B9``#5c97f7` |
| `html/interaction.css` | `qb-target` | `#00F8B9``#5c97f7` |
| `html/script.js` | `qb-target` | `#00F8B9``#5c97f7` |
| `html/index.html` | `qb-target` | `#00F8B9``#5c97f7` |
### Note:
- Folderul TREBUIE să se numească `qb-target` (nu `rv-target`) — resursele terțe hardcode `exports['qb-target']`
- `provide 'qtarget'` permite `exports['qtarget']` să rezolve la același resource
- Engine-ul este ld-target open-source (NP 4.0 inspired)
- Zone markers (puncte la distanță) funcționează doar pe **Zones** (BoxZone, CircleZone), NU pe entități adăugate cu `AddTargetEntity()`
- Sursele originale se găsesc în `_preLoad/ld-target/Standalone/`
+11 -9
View File
@@ -1,7 +1,7 @@
# Red Valley Roleplay — Resource Dependency Map # Red Valley Roleplay — Resource Dependency Map
> Scanat din codul sursă: exports, TriggerEvent, TriggerServerEvent, TriggerClientEvent. > Scanat din codul sursă: exports, TriggerEvent, TriggerServerEvent, TriggerClientEvent.
> Ultima actualizare: 2026-04-01 > Ultima actualizare: 2026-04-10
--- ---
@@ -305,12 +305,16 @@
└── Dependințe → niciunul (standalone stream resource) └── Dependințe → niciunul (standalone stream resource)
``` ```
### Dacă modifici `rv-qb-target` (Target QoL — în dezvoltare): ### Dacă modifici `qb-target` (ld-target engine):
``` ```
├── Depinde de → qb-target (exports + event trigger) ├── Engine → ld-target (NP 4.0 inspired, open-source)
├── Funcționalitate → Highlight entități interactabile la ALT ├── Provides → qb-target + qtarget (17mov_Electrician)
├── Vizual → DrawSprite deasupra capului (vizibil prin ziduri) ├── Exports → AddBoxZone, AddTargetEntity, AddTargetModel, etc.
── CPU → Zero când inactiv (event-driven) ── Consumatori → t1ger_lib, toate resursele cu target options
├── NUI → html/ (style.css, interaction.css, script.js)
├── Texturi → stream/ (circle_marker.ytd, lunny_ui.ytd)
├── Zone markers → DrawSprite pe Zones (nu pe entități externe)
└── Dependență → PolyZone
``` ```
--- ---
@@ -359,7 +363,6 @@ graph TD
TL --> |society| QM TL --> |society| QM
RVP[rv-props] --> |prop_rv_tablet| JC[17mov_JobCenter] RVP[rv-props] --> |prop_rv_tablet| JC[17mov_JobCenter]
RVQBT[rv-qb-target] -.-> |exports + events| QBT
IDC --> |notif| HUD IDC --> |notif| HUD
BDS --> |notif| HUD BDS --> |notif| HUD
@@ -375,7 +378,6 @@ graph TD
style HUD fill:#ff9900,color:#fff style HUD fill:#ff9900,color:#fff
style LA fill:#9933cc,color:#fff style LA fill:#9933cc,color:#fff
style RVP fill:#33aa33,color:#fff style RVP fill:#33aa33,color:#fff
style RVQBT fill:#33aa33,color:#fff
style JC fill:#3399ff,color:#fff style JC fill:#3399ff,color:#fff
``` ```
@@ -399,4 +401,4 @@ graph TD
| Stash/storage | qs-inventory, t1ger_lib | | Stash/storage | qs-inventory, t1ger_lib |
| Phone features | qs-smartphone-pro ↔ pma-voice, qs-vehiclekeys | | Phone features | qs-smartphone-pro ↔ pma-voice, qs-vehiclekeys |
| Custom props (rv-props) | 17mov_JobCenter (prop_rv_tablet) | | Custom props (rv-props) | 17mov_JobCenter (prop_rv_tablet) |
| qb-target behavior | rv-qb-target, t1ger_lib, toate resursele cu AddTargetEntity/Model | | qb-target behavior | t1ger_lib, toate resursele cu AddTargetEntity/Model, 17mov_Electrician (qtarget) |
+2 -1
View File
@@ -113,7 +113,7 @@ const teamMap={"17mov":"17 Movement",wasabi:"Wasabi",quasar:"Quasar",kq:"KuzQual
const nodes=[ const nodes=[
// === QBCORE === // === QBCORE ===
{id:"qb-core",team:"qb",r:32,desc:"Nucleul QBCore — jobs, items, player, events",keywords:"framework core player job item shared"}, {id:"qb-core",team:"qb",r:32,desc:"Nucleul QBCore — jobs, items, player, events",keywords:"framework core player job item shared"},
{id:"qb-target",team:"qb",r:16,desc:"Target system — interact cu entități",keywords:"target interact eye"}, {id:"qb-target",team:"qb",r:18,desc:"Target system (ld-target engine) — provides qb-target + qtarget",keywords:"target interact eye ld-target qtarget provide"},
{id:"qb-menu",team:"qb",r:10,desc:"Menu system QBCore",keywords:"menu context"}, {id:"qb-menu",team:"qb",r:10,desc:"Menu system QBCore",keywords:"menu context"},
{id:"qb-smallresources",team:"qb",r:14,desc:"Consumables, AFK, seatbelt etc",keywords:"consumable food drink stress seatbelt"}, {id:"qb-smallresources",team:"qb",r:14,desc:"Consumables, AFK, seatbelt etc",keywords:"consumable food drink stress seatbelt"},
{id:"qb-input",team:"qb",r:8,desc:"Input dialog QBCore",keywords:"input dialog form"}, {id:"qb-input",team:"qb",r:8,desc:"Input dialog QBCore",keywords:"input dialog form"},
@@ -246,6 +246,7 @@ const links=[
{s:"wasabi_bridge",t:"qb-core",type:"export",label:"GetCoreObject"}, {s:"wasabi_bridge",t:"qb-core",type:"export",label:"GetCoreObject"},
{s:"luxu_admin",t:"qb-core",type:"export",label:"GetCoreObject"}, {s:"luxu_admin",t:"qb-core",type:"export",label:"GetCoreObject"},
{s:"qb-target",t:"qb-core",type:"export",label:"GetCoreObject"}, {s:"qb-target",t:"qb-core",type:"export",label:"GetCoreObject"},
{s:"17mov_Electrician",t:"qb-target",type:"export",label:"AddTargetEntity (via qtarget provide)"},
{s:"qb-menu",t:"qb-core",type:"export",label:"GetCoreObject"}, {s:"qb-menu",t:"qb-core",type:"export",label:"GetCoreObject"},
{s:"qb-smallresources",t:"qb-core",type:"export",label:"GetCoreObject"}, {s:"qb-smallresources",t:"qb-core",type:"export",label:"GetCoreObject"},
{s:"qb-management",t:"qb-core",type:"export",label:"GetCoreObject"}, {s:"qb-management",t:"qb-core",type:"export",label:"GetCoreObject"},
+171 -49
View File
@@ -20,7 +20,7 @@
| **Mechanic Job** | t1ger_mechanic | | **Mechanic Job** | t1ger_mechanic |
| **HUD** | 17mov_Hud | | **HUD** | 17mov_Hud |
| **Voice** | pma-voice | | **Voice** | pma-voice |
| **Target System** | qb-target | | **Target System** | qb-target (ld-target engine, provides qtarget) |
| **Server Port** | 30110 | | **Server Port** | 30110 |
| **Max Clients** | 8 | | **Max Clients** | 8 |
| **Game Build** | 3570 | | **Game Build** | 3570 |
@@ -34,12 +34,28 @@
``` ```
resources/ resources/
├── [cfx-default]/ # CFX default resources ├── [cfx-default]/
│ ├── [local]/ # .gitkeep (empty)
│ ├── [managers]/
│ │ ├── mapmanager/
│ │ └── spawnmanager/
│ └── [system]/
│ ├── [builders]/
│ ├── baseevents/
│ └── sessionmanager/
├── [framework]/ ├── [framework]/
│ ├── [core]/ │ ├── [core]/
│ │ ├── qb-core/ # QBCore framework │ │ ├── qb-core/ # QBCore framework (Quasar fork 1.3.0)
│ │ ├── qb-target/ # Target system │ │ ├── qb-target/ # Target system (ld-target engine, provides qtarget)
│ │ ├── qs-inventory/ # Quasar inventory │ │ ├── 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 │ │ └── no-npc/ # Remove ambient NPCs
│ ├── [base]/ │ ├── [base]/
│ │ ├── [auth]/ │ │ ├── [auth]/
@@ -47,20 +63,20 @@ resources/
│ │ │ ├── 17mov-plugin-char-creator/ # Spawn outfit in creator │ │ │ ├── 17mov-plugin-char-creator/ # Spawn outfit in creator
│ │ │ └── connectqueue/ # Queue system │ │ │ └── connectqueue/ # Queue system
│ │ ├── [ui]/ │ │ ├── [ui]/
│ │ │ ── 17mov_Hud/ # HUD system │ │ │ ── 17mov_Hud/ # HUD system
│ │ │ └── rv-chat/ # ★ Custom RV chat (VPS only, lipsește din LOCAL — trebuie copiat)
│ │ └── [jobs]/ │ │ └── [jobs]/
│ │ ├── 17mov_JobCenter/ # Job listing & apply (NUI, FXAP encrypted) │ │ ├── 17mov_JobCenter/ # Job listing & apply (NUI, FXAP encrypted)
│ │ │ ├── Config.lua # ★ Editable: jobs, blips, NUI settings
│ │ │ ├── bridge/qb/server/main.lua # ★ Editable: SetPlayerJob (license check here)
│ │ │ ├── bridge/qb/client/main.lua # ★ Editable: events, UI hooks
│ │ │ ├── server/utils.lua # ★ Editable: FormatMoney
│ │ │ └── client/utils.lua # ★ Editable: target system
│ │ ├── [citizen]/ │ │ ├── [citizen]/
│ │ │ ├── 17mov_GarbageCollector/ # Garbage job (★ license check in server/functions.lua) │ │ │ ├── 17mov_BuilderJob/ # Builder job
│ │ │ ├── 17mov_Deliverer/ # Delivery job │ │ │ ├── 17mov_Deliverer/ # Delivery job
│ │ │ ├── 17mov_Postman/ # Postman job │ │ │ ├── 17mov_Electrician/ # Electrician job (uses qtarget)
│ │ │ ├── 17mov_GarbageCollector/ # Garbage job (★ license check)
│ │ │ ├── 17mov_Lumberjack/ # Lumberjack job │ │ │ ├── 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 │ │ │ └── aty_busjob/ # Bus driver job
│ │ └── [legal]/ │ │ └── [legal]/
│ │ ├── [police]/ │ │ ├── [police]/
@@ -69,49 +85,72 @@ resources/
│ │ │ ├── codem-dispatch/ # Dispatch alerts │ │ │ ├── codem-dispatch/ # Dispatch alerts
│ │ │ └── codem-mdtProp/ # MDT prop │ │ │ └── codem-mdtProp/ # MDT prop
│ │ ├── [ambulance]/ │ │ ├── [ambulance]/
│ │ │ └── wasabi_ambulance/ # Ambulance job (provides qb-ambulancejob) │ │ │ └── wasabi_ambulance/ # Ambulance job
│ │ ├── [mechanic]/ │ │ ├── [mechanic]/
│ │ │ ── t1ger_mechanic/ # Mechanic job │ │ │ ── t1ger_mechanic/ # Mechanic job
│ │ │ ├── t1ger_carlift/ # Car lift
│ │ │ ├── t1ger_mechanicprops/ # Mechanic props
│ │ │ └── jo_towtruck/ # Tow truck
│ │ └── [tuner]/ │ │ └── [tuner]/
│ │ ── t1ger_tuningsystem/ # Tuning system │ │ ── t1ger_tuningsystem/ # Tuning system
│ │ └── t1ger_lib/ # T1GER library
│ ├── [depends]/ │ ├── [depends]/
│ │ ├── bob74_ipl/ # IPL loader v2.6.0 (interiors, DLC maps) │ │ ├── Howdy-Minigame/ # Minigame lib
│ │ ├── ox_lib/ # Overextended lib │ │ ├── MugShotBase64/ # Mugshot generation
│ │ ├── PolyZone/ # Zone management │ │ ├── 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 │ │ ├── progressbar/ # Progress bars
│ │ ├── screenshot-basic/ # Screenshots │ │ ├── screenshot-basic/ # Screenshots
│ │ ├── VehicleDeformation/ # Vehicle damage
│ │ ├── wasabi_bridge/ # Wasabi framework bridge │ │ ├── wasabi_bridge/ # Wasabi framework bridge
│ │ └── xsound/ # Sound system │ │ └── xsound/ # Sound system
│ └── [addons]/ │ └── [addons]/
│ ├── 0r_idcard/ # ID card system │ ├── 0r_idcard/ # ID card system
│ ├── bit-driverschool/ # Driving school (licences in metadata.licences) │ ├── [housing]/
├── rv-license-dialog/ # ★ RED VALLEY: NUI dialog permis de conducere │ ├── qs-housing/ # Housing (Quasar)
│ ├── qs-advancedgarages/ # Garages (Quasar) ├── qs-weed/ # Weed growing
├── qs-housing/ # Housing (Quasar) │ └── [dlc/img/props/shells/sql]/ # Housing assets
│ ├── qs-shops/ # Shops (Quasar) │ ├── [notify]/
├── kq_* / [kq]/ # Kuzkay addons (LOCAL: scattered, VPS: grouped in [kq]/) │ └── qs-notify/ # Quasar notifications
── qb-weathersync/ # Weather & time ── [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]/ ├── [stream]/
│ ├── [admin-outfit]/AdminPack/ # Admin clothing streaming
│ ├── [mlos]/ # Map interiors │ ├── [mlos]/ # Map interiors
│ ├── soloty-southside-custom/ # Mechanic shop MLO │ ├── [vehs]/ # Custom vehicles
│ ├── rfc_los_santos_customs/ # Los Santos Customs MLO │ ├── minimap/ # Custom minimap
│ ├── cfx-fm-fleeca-banks-v2/ # Fleeca banks │ ├── phone-props/ # Phone props
│ ├── cfx-fm-mrpd/ # Mission Row PD │ ├── rv-props/ # RV custom props
│ └── ... # + hospital, prison, gas stations, etc. │ └── squidgame/ # Squid game MLO
│ └── [vehs]/ # Custom vehicles
├── [voice]/ ├── [voice]/
── pma-voice/ # Voice system ── pma-voice/ # Voice system
│ └── codem-radio/ # Radio system (VPS only — NU e pe LOCAL)
└── luxu_admin/ # Admin panel (top-level) └── luxu_admin/ # Admin panel (top-level)
``` ```
### Load Order (`resources.cfg`) ### Load Order (`resources.cfg`)
``` ```
[cfx-default] → ox_lib → [core] → [depends] → [voice] → [auth] → [ui] → [cfx-default] → ox_lib → [core] → [depends] → [inventory] → [voice] → [auth] → [ui] →
[jobs] → [addons] → rv-license-dialog → kq_carheist → [mlos] → [vehs] → minimap → phone-props → [jobs] → [addons] → qs-weaponsonback → rv-license-dialog → kq_carheist →
[casino] → [stream] → luxu_admin → [weapons] [mlos] → [vehs] → minimap → phone-props → [casino] → [stream] → luxu_admin
``` ```
--- ---
@@ -214,8 +253,8 @@ qbcore.god → group.admin → qbcore.admin → qbcore.mod
- **DB Name**: `red-valley` - **DB Name**: `red-valley`
- **Connection**: `server=127.0.0.1;database=red-valley;userid=root;` (via oxmysql) - **Connection**: `server=127.0.0.1;database=red-valley;userid=root;` (via oxmysql)
- **Character Delete** (`qb-core/server/player.lua`): Many default tables commented out (apartments, bank_accounts, crypto_transactions, phone_invoices, phone_messages, player_contacts, player_houses, player_mails) — only `players`, `playerskins`, `player_outfits`, `player_vehicles` active - **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 ~2,343 rows causing oversized queries — needs periodic cleanup or LIMIT - **⚠️ PENDING**: `crypto_history` table has ~3,971 rows causing oversized queries — needs periodic cleanup or LIMIT
--- ---
@@ -433,9 +472,26 @@ Toate resursele 17mov au fișiere encrypted (FXAP) dar următoarele sunt **edita
--- ---
## 🎯 Interaction System (qb-target) ## 🎯 Interaction System (qb-target / ld-target engine)
De la **2026-03-31**, toate resursele folosesc **qb-target** (third-eye system) ca sistem de interacțiune. 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 ### Config Flag per DevTeam
| DevTeam | Config Key | Valoare | | DevTeam | Config Key | Valoare |
@@ -451,6 +507,11 @@ De la **2026-03-31**, toate resursele folosesc **qb-target** (third-eye system)
### Excepție ### Excepție
- **qs-advancedgarages** — nu suportă qb-target (doar ox_target / qb-radialmenu / none) - **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 ## 🖥️ 17mov_Hud — API Reference
@@ -507,11 +568,72 @@ exports["17mov_Hud"]:ToggleComponentVisibility("name", bool) -- arată/ascund
- **Consumat de**: 17mov_JobCenter (tabletă animație) - **Consumat de**: 17mov_JobCenter (tabletă animație)
- **Tip**: Standalone (stream, zero cod Lua) - **Tip**: Standalone (stream, zero cod Lua)
### rv-qb-target (Target QoL — în dezvoltare) ### qb-target (ld-target engine — migrat 2026-04-08)
- **Locație**: `resources/[framework]/[core]/rv-qb-target/` - **Locație**: `resources/[framework]/[core]/qb-target/`
- **Scop**: Highlight entități interactabile când qb-target e activ (ALT) - **Engine**: ld-target (open-source, NP 4.0 inspired)
- **Design**: DrawSprite deasupra capului, vizibil prin ziduri, doar entități cu target înregistrat - **provide**: `qtarget` (compatibilitate 17mov_Electrician)
- **Depinde de**: qb-target (exports + event trigger) - **Config.Peds**: Golit (fără demo NPC-uri Lunny)
- **Status**: Planificat, research complet, cod nescris - **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 |
+2 -4
View File
@@ -2,17 +2,15 @@ ensure [cfx-default]
ensure ox_lib ensure ox_lib
ensure [core] ensure [core]
ensure [depends] ensure [depends]
ensure [inventory]
ensure [voice] ensure [voice]
ensure [auth] ensure [auth]
ensure [ui] ensure [ui]
ensure [jobs] ensure [jobs]
ensure [addons] ensure [addons]
ensure qs-weaponsonback # safety net ne asiguram ca se incarca
ensure rv-license-dialog ensure rv-license-dialog
ensure kq_carheist
ensure [mlos] ensure [mlos]
ensure [vehs] ensure [vehs]
ensure minimap
ensure phone-props
ensure [casino]
ensure [stream] ensure [stream]
ensure luxu_admin ensure luxu_admin
@@ -7,6 +7,20 @@ RegisterNetEvent("0r_idcard:server:saveHeadshot", function(shot)
local player = getExtendedPlayer(src) local player = getExtendedPlayer(src)
local license = getPlayerLicense(player) local license = getPlayerLicense(player)
-- Build metadata for qs-inventory id_card display
local cardInfo = {}
if Config.Framework == "qb" then
local charinfo = player.PlayerData.charinfo
cardInfo = {
citizenid = player.PlayerData.citizenid,
firstname = charinfo.firstname,
lastname = charinfo.lastname,
birthdate = charinfo.birthdate,
gender = charinfo.gender == 0 and 'Male' or 'Female',
nationality = charinfo.nationality or 'Unknown'
}
end
if license then if license then
local result = mysqlQuery("SELECT id_card_given FROM 0r_idcard WHERE license = @license", {["@license"] = license}) local result = mysqlQuery("SELECT id_card_given FROM 0r_idcard WHERE license = @license", {["@license"] = license})
@@ -15,12 +29,12 @@ RegisterNetEvent("0r_idcard:server:saveHeadshot", function(shot)
mysqlQuery("UPDATE 0r_idcard SET photo = @photo WHERE license = @license", {["@photo"] = shot, ["@license"] = license}) mysqlQuery("UPDATE 0r_idcard SET photo = @photo WHERE license = @license", {["@photo"] = shot, ["@license"] = license})
-- Give id_card only once (first mugshot) -- Give id_card only once (first mugshot)
if result[1].id_card_given == 0 then if result[1].id_card_given == 0 then
addItem(src, Config.IdCard, 1) addItem(src, Config.IdCard, 1, cardInfo)
mysqlQuery("UPDATE 0r_idcard SET id_card_given = 1 WHERE license = @license", {["@license"] = license}) mysqlQuery("UPDATE 0r_idcard SET id_card_given = 1 WHERE license = @license", {["@license"] = license})
end end
else else
mysqlQuery("INSERT INTO 0r_idcard (license, photo, id_card_given) VALUES (@license, @photo, 1)", {["@license"] = license, ["@photo"] = shot}) mysqlQuery("INSERT INTO 0r_idcard (license, photo, id_card_given) VALUES (@license, @photo, 1)", {["@license"] = license, ["@photo"] = shot})
addItem(src, Config.IdCard, 1) addItem(src, Config.IdCard, 1, cardInfo)
end end
end end
end) end)
@@ -99,7 +99,7 @@ function removeMoney(src, amount)
return false return false
end end
function addItem(src, item, amoumt) function addItem(src, item, amoumt, info)
local player = getExtendedPlayer(src) local player = getExtendedPlayer(src)
while player == nil do while player == nil do
@@ -108,7 +108,7 @@ function addItem(src, item, amoumt)
end end
if Config.Framework == "qb" then if Config.Framework == "qb" then
player.Functions.AddItem(item, amoumt) player.Functions.AddItem(item, amoumt, nil, info)
elseif Config.Framework == "esx" then elseif Config.Framework == "esx" then
player.addInventoryItem(item, amoumt) player.addInventoryItem(item, amoumt)
end end
@@ -1,3 +0,0 @@
You can view the guide here
https://documentation.rcore.cz/paid-resources/rcore_casino/lucky-wheel-and-podium-vehicle#replacing-the-podium-vehicle
@@ -1,296 +0,0 @@
QBCore = nil
ESX = nil
PlayerData = {}
function RefreshPlayerData()
if Framework.Active == 1 then
PlayerData = ESX.GetPlayerData()
elseif Framework.Active == 2 then
PlayerData = UpdatePlayerDataForQBCore()
elseif Framework.Active == 3 then
PlayerData = UpdatePlayerDataForStandalone()
elseif Framework.Active == 4 then
PlayerData = UpdatePlayerDataForCustomFramework()
end
return PlayerData
end
function IsPlayerWorkingAtCasino()
return (PlayerData.job and PlayerData.job.name == Config.JobName)
end
--- @param job string
--- @param GradeArray table
--- will return true/False if player is in this grade.
function IsAtJob(job, GradeArray, MinGrade, MaxGrade)
if PlayerData == nil or PlayerData.job == nil then
return false
end
if not MaxGrade then
MaxGrade = MinGrade
end
local gradeLevel = PlayerData.job.grade
if not gradeLevel then
gradeLevel = 0
end
if GradeArray == nil then
return PlayerData.job.name == job and gradeLevel >= MinGrade and gradeLevel <= MaxGrade
end
return PlayerData.job.name == job and
(GradeArray[PlayerData.job.grade_name] or (gradeLevel >= MinGrade and gradeLevel <= MaxGrade))
end
function RemovePlayerHunger(itemName)
if Framework.Active == 1 then
TriggerEvent('esx_status:add', 'hunger', 200000)
end
if Framework.Active == 2 then
TriggerEvent("consumables:client:Eat", itemName)
end
if Framework.Active == 4 then
-- implement function that removes player hunger
end
end
function RemovePlayerThirst(itemName)
if Framework.Active == 1 then
TriggerEvent('esx_status:add', 'thirst', 200000)
end
if Framework.Active == 2 then
TriggerEvent("consumables:client:Drink", itemName)
end
if Framework.Active == 4 then
-- implement function that removes player thirst
end
end
if Framework.Active == 1 then
CreateThread(function()
GetCoreObject(Framework.Active, Framework.ES_EXTENDED_RESOURCE_NAME, function(object)
ESX = object
if ESX and ESX.IsPlayerLoaded() then
PlayerData = ESX.GetPlayerData()
TriggerEvent("rcore_casino:PlayerDataLoaded")
end
end)
end, "GetPlayerData ESX")
RegisterNetEvent(Events.ES_PLAYER_LOADED, function(data)
PlayerData = data
TriggerEvent("rcore_casino:DataHasChanged")
end)
RegisterNetEvent(Events.ES_PLAYER_JOB_UPDATE, function(data)
PlayerData.job = data
TriggerEvent("rcore_casino:DataHasChanged")
end)
end
if Framework.Active == 4 then
function UpdatePlayerDataForCustomFramework()
local inventory = {}
local accounts = {}
local job = {}
-- client side player inventory
table.insert(inventory, {
name = "casino_chips",
count = 123
})
-- client side player accounts
table.insert(accounts, {
money = 123,
name = "cash",
label = "cash"
})
table.insert(accounts, {
money = 123,
name = "bank",
label = "bank"
})
-- client side player job data
job = {
id = -1,
name = "unemployed",
label = "unemployed",
grade_name = "unemployed",
grade = 0,
}
local structure = {
job = job,
inventory = inventory,
accounts = accounts
}
return structure
end
PlayerData = UpdatePlayerDataForCustomFramework()
end
if Framework.Active == 3 then
function UpdatePlayerDataForStandalone()
if not PLAYER_CACHE then
return {}
end
local inventory = {}
for k, v in pairs(PLAYER_CACHE.fakeInventory) do
table.insert(inventory, {
name = k,
count = v
})
end
local accounts = {}
for k, v in pairs(PLAYER_CACHE.fakeAccounts or {}) do
table.insert(accounts, {
money = v,
name = k,
label = k
})
end
local x = {
job = {
id = -1,
name = PLAYER_CACHE.jobGrade and "casino" or "unemployed",
label = PLAYER_CACHE.jobGrade and "casino" or "unemployed",
grade_name = PLAYER_CACHE.jobGrade,
grade = PLAYER_CACHE.jobGrade
},
inventory = inventory,
accounts = accounts
}
return x
end
PlayerData = UpdatePlayerDataForStandalone()
end
if Framework.Active == 2 then
function UpdatePlayerDataForQBCore()
local pData = QBCore.Functions.GetPlayerData()
local jobName = "none"
local gradeName = "none"
local grade = 0
if pData.job then
jobName = pData.job.name or "none"
-- I am not sure if I should check if its nil or not so I will just make sure so it wont break anything.
if pData.job.grade then
local gradeData = pData.job.grade
gradeName = gradeData.name
if gradeData.level then
grade = gradeData.level
end
elseif pData.job.grades then
grade = GetGreatestNumber(pData.job.grades)
end
end
local stacked = {}
local inventory = {}
if pData.items then
for slot = 1, 50, 1 do
local v = pData.items[slot]
if v and v.name then
if stacked[v.name] then
stacked[v.name] = stacked[v.name] + (v.amount or v.count)
else
stacked[v.name] = (v.amount or v.count)
end
end
end
end
for k, v in pairs(stacked) do
table.insert(inventory, {
name = k,
count = v
})
end
local accounts = {}
for k, v in pairs(pData.money or {}) do
table.insert(accounts, {
money = v,
name = k,
label = k
})
end
local x = {
job = {
id = -1,
name = jobName,
grade_name = gradeName,
grade = grade
},
inventory = inventory,
accounts = accounts
}
return x
end
CreateThread(function()
GetCoreObject(Framework.Active, Framework.QB_CORE_RESOURCE_NAME, function(object)
QBCore = object
if QBCore and QBCore.Functions.GetPlayerData() then
PlayerData = UpdatePlayerDataForQBCore()
TriggerEvent("rcore_casino:PlayerDataLoaded")
end
end)
end, "GetPlayerData QBCore")
RegisterNetEvent(Events.QB_PLAYER_LOADED, function()
PlayerData = UpdatePlayerDataForQBCore()
TriggerEvent("rcore_casino:DataHasChanged")
end)
RegisterNetEvent(Events.QB_PLAYER_JOB_UPDATE, function()
PlayerData = UpdatePlayerDataForQBCore()
TriggerEvent("rcore_casino:DataHasChanged")
end)
end
-- Built-In HUD
function RegisterBuiltInHud()
if not Framework.BUILTIN_HUD_CHIPS then
return
end
if Framework.Active == 1 then
local chipTpl = '<div><img src="img/accounts/' .. Framework.BUILTIN_HUD_CHIPS_ICON .. '"/>&nbsp;{{chips}}</div>'
ESX.UI.HUD.RegisterElement('casinochips', 0, 0, chipTpl, {
chips = ESX.Math.GroupDigits(PLAYER_CHIPS)
})
end
end
function UpdateBuiltInHud()
if not Framework.BUILTIN_HUD_CHIPS then
return
end
if Framework.Active == 1 then
ESX.UI.HUD.UpdateElement("casinochips", {
chips = ESX.Math.GroupDigits(PLAYER_CHIPS)
})
end
end
function UnregisterBuiltInHud()
if not Framework.BUILTIN_HUD_CHIPS then
return
end
if Framework.Active == 1 then
ESX.UI.HUD.RemoveElement("casinochips")
end
end
@@ -1,65 +0,0 @@
.key {
font-family: 'Segoe UI Light', sans-serif;
color: black;
background: white;
border-radius: 2px;
user-select: none;
height: 2.8vh;
line-height: 2.8vh;
margin-right: 0.7vh;
margin-left: 1.0vh;
display: inline-block;
text-align: center;
}
.keySmall {
-webkit-text-stroke: 1.00px;
font-size: 1.70vh;
width: 2.8vh;
justify-content: center;
}
.keyBig {
-webkit-text-stroke: 0.50px;
font-size: 1.50vh;
width: 4.5vh;
}
.keyCustom {
height: 2.8vh;
width: 2.8vh;
margin-right: 1.0vh;
margin-left: 0.8vh;
}
#instbuttons {
background: #000000c6;
color: white;
width: fit-content;
display: none;
justify-content: center;
align-items: center;
height: 3.5vh;
padding-left: 1.0vh;
position: absolute;
font-family: 'Segoe UI Light', sans-serif;
font-weight: 100;
font-size: 1.70vh;
line-height: 1.70vh;
-webkit-text-stroke: 0.10px;
border-radius: 3px;
position: absolute;
bottom: 1.70vh;
right: 1.35vw;
}
.justText {
user-select: none;
margin-top: 1.2vh;
margin-left: 1.2vh;
}
body {
background: url(./img/unknown.png);
}
@@ -1,21 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="./css/instbuttons.css" type="text/css">
</head>
<body style="background: transparent !important;">
<div id="instbuttons">
</div>
<div id="nuichips" style="height: 5vh;display:none;">
<img style="float: left; width: auto; height: 100%;"
src=" data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFUAAABVCAYAAAA49ahaAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAC4jAAAuIwF4pT92AAABiklEQVR42u2aWw6DMBDEQtX7X5l+gSpoIZCdfSD7AMmOW0EYaA0AAAAAAAAAAAAAIIgpeoCFeZ7n4TDTlCJP2BAWEk/DBUl23dRD5N+gjoJdNoqUuQvsIFe6QSaZu+BCubKFMwtdw4vEShatIHQVIBBrvmAloasEY7Gmi1UUuoowFPuKDvNEkCoAqQKQKgCpApAqgHNqsz+n8k8VwGNqhcfUhQpiSxUqC5nFlqz+vskkt3xJvYXXKTdYpJ0F8JTbO4uldGn1d2VQ71fUI7OezmG10JGYLO/jvWZ8eweJEOx9LXeR+i+gUnDkTdFd6lHwEcmpjm3WC2YK1y2BQiU/FCoUKsbhKxYqreWUqz7WUago9vAMRKFygyvlRJYvqR9bqFgKvrtnGamjAx/Jtl6znFTV8FnnolARkOrZP6pQsf5xQ1uqLZnOsyPw7C+4BNFSCXjkjaI7PIWKYWgKFePAFCqGQasWKr1k+kJFsqf3hlsUgqM/3giX+osroqMFAgAAAAAAAAAAAACk4gPL3+w48nO4igAAAABJRU5ErkJggg==" />
<div id="nuichipsvalue"
style="float: left; line-height: 5vh;vertical-align:middle; font-size: 3vh; font-weight: bold; color: white;">
12345</div>
</div>
</body>
<script src="./scripts/instbuttons.js" type="text/javascript"></script>
</html>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 372 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 352 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 341 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 304 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 568 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 690 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 761 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 903 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

@@ -1,111 +0,0 @@
var container = document.getElementById("instbuttons");
var inputId = 0;
var keyMap = {
44: [0, "Q.png", 2, "rb.png"],
46: [0, "E.png", 2, "dirr.png"],
49: [0, "F", 2, "y.png"],
134: [0, "D", 2, "rb.png"],
139: [0, "S", 0, "RT"],
176: [0, "176_pc.png", 2, "a.png"],
177: [1, "177_pc.png", 2, "b.png"],
187: [0, "187.png", 2, "dird.png"],
188: [0, "188.png", 2, "diru.png"],
189: [0, "189_pc.png", 2, "dirl.png"],
190: [0, "190_pc.png", 2, "dirr.png"],
193: [0, "193_pc.png", 2, "x.png"],
201: [0, "176_pc.png", 2, "a.png"],
202: [0, "Esc.png", 2, "b.png"],
203: [0, "193_pc.png", 2, "x.png"],
204: [0, "Tab.png", 2, "y.png"],
206: [0, "E.png", 2, "rb.png"],
207: [1, "207.png", 0, "LT"],
208: [1, "208.png", 0, "RT"],
210: [1, "LCtrl.png", 2, "r.png"],
237: [2, "237.png", 2, "237.png"],
238: [2, "238.png", 2, "238.png"],
};
function CreateKey(keyType, keyContent) {
if (keyType == 0) {
// square key small
var o = document.createElement("span");
o.className = "key keySmall";
if (keyContent.includes(".png")) {
o.innerHTML = "<img src='./keys/" + keyContent + "' style='width:100%;height:100%'>";
}
else {
o.innerHTML = keyContent;
}
return o;
}
else if (keyType == 1) {
//square key large
// square key small
var o = document.createElement("span");
o.className = "key keyBig";
if (keyContent.includes(".png")) {
o.innerHTML = "<img src='./keys/" + keyContent + "' style='width:100%;height:100%'>";
}
else {
o.innerHTML = keyContent;
}
return o;
}
else if (keyType == 2) {
//no square, just img
var o = document.createElement("span");
o.className = "keyCustom";
o.innerHTML = "<img src='./keys/" + keyContent + "' style='width:100%;height:100%'>";
return o;
}
}
function AppendKey(keyCode, keyCaption, extraKey) {
var keyType = keyMap[keyCode][inputId];
var keyContent = keyMap[keyCode][inputId + 1]
var c = document.createElement("p");
c.innerHTML = keyCaption;
c.className = "justText";
container.appendChild(c);
container.appendChild(CreateKey(keyType, keyContent));
if (extraKey) {
keyType = keyMap[extraKey][inputId];
keyContent = keyMap[extraKey][inputId + 1]
var o = CreateKey(keyType, keyContent);
o.style.marginLeft = "-0.00vh";
container.appendChild(o);
}
}
window.addEventListener('message', (event) => {
let action = event.data.action;
if (action == "drawInstButtons") {
container.innerHTML = "";
var buttons = event.data.buttons;
inputId = event.data.isGamepad == true ? 2 : 0;
container.style.display = (buttons && buttons.length > 0 ? "flex" : "none");
if (buttons) {
for (let index = buttons.length - 1; index >= 0; index--) {
const el = buttons[index];
AppendKey(el.key, el.title, el.extraKey)
}
}
}
if (action == "chipshud") {
document.getElementById("nuichipsvalue").innerHTML = event.data.chips;
document.getElementById("nuichips").style.display = event.data.chips != -1 ? "block" : "none";
}
})
@@ -1,342 +0,0 @@
-- cashier instances
local cashiers = {}
local history = {}
-- session
local s_cashierCoords = nil
local s_myCashier = nil
local s_lastMoneyLimit = 100
-- get cashier instance from coords
local function GetCashierFromCoords(coords)
if not coords then
return
end
DebugStart("GetCashierFromCoords")
for _, o in pairs(cashiers) do
if #(coords - o.coords) < 0.2 then
return o
end
end
return nil
end
-- generate list of balances (rageui)
function CashierGetBalanceOptions(balance, max)
DebugStart("CashierGetBalanceOptions")
if max < balance then
balance = max
end
local options = {}
local c = 0
local x = 0
while x < balance do
c = c + 1
if x < 100 then
x = x + 10
elseif x < 1000 then
x = x + 100
elseif x < 10000 then
x = x + 500
elseif x < 100000 then
x = x + 10000
elseif x < 1000000 then
x = x + 100000
else
x = x + 1000000
end
local option = Clamp(x, 1, balance)
option = math.ceil(option)
option = math.round(option / 10) * 10
if option >= 10 and balance >= option then
table.insert(options, option)
end
if c > 200 then
break
end
end
if #(options) == 0 then
table.insert(options, 0)
end
return options
end
function CashierGetMoneyBalanceOptions(balance)
DebugStart("CashierGetBalanceOptions")
local options = {}
local c = 0
local x = 0
balance = math.ceil(balance / Config.ExchangeRate)
while x < balance do
c = c + 1
if x < 100 then
x = x + 10
elseif x < 1000 then
x = x + 100
elseif x < 10000 then
x = x + 500
elseif x < 100000 then
x = x + 10000
elseif x < 1000000 then
x = x + 100000
else
x = x + 1000000
end
local option = Clamp(x, 1, balance)
option = math.ceil(option)
option = math.round(option / 10) * 10
if option >= 10 and balance >= option then
table.insert(options, option)
end
if c > 200 then
break
end
end
if #(options) == 0 then
table.insert(options, 0)
end
return options
end
-- get chips, pay with money
function Cashier_AcquireChips(amount)
DebugStart("Cashier_AcquireChips")
BlockPlayerInteraction(1500)
TriggerServerEvent("rcore_casino:AcquireChips", amount)
Stats_Increase("rcore_casino_cashier_used", 1)
end
-- get money, pay with chips
function Cashier_TradeInChips(amount)
DebugStart("Cashier_TradeInChips")
BlockPlayerInteraction(1500)
TriggerServerEvent("rcore_casino:TradeInChips", amount)
Stats_Increase("rcore_casino_cashier_used", 1)
end
-- get daily bonus, if enabled
function Cashier_DailyBonus()
DebugStart("Cashier_DailyBonus")
if Config.CASHIER_DAILY_BONUS == 0 then
return
end
if PLAYER_CACHE.lastDailyBonus and PLAYER_CACHE.lastDailyBonus == SERVER_DATE then
return
end
BlockPlayerInteraction(2000)
TriggerServerEvent("rcore_casino:DailyBonus")
end
function Cashier_RequestVIP()
if PROMPT_ACTIVE then
return
end
Cashier_OnQuit()
local message = string.format(Translation.Get("CASHIER_VIP_CONFIRM_MSG"), FormatPrice(Config.CASHIER_VIP_PRICE))
if Config.CASHIER_VIP_DURATION then
message = message ..
string.format(Translation.Get("CASHIER_VIP_CONFIRM_MSG_2"),
FormatTimestamp(Config.CASHIER_VIP_DURATION))
end
FullscreenPrompt(Translation.Get("CASHIER_VIP_CONFIRM_CAPT"), message, function(yes)
if yes then
DebugStart("Cashier_RequestVIP")
TriggerServerEvent("rcore_casino:BecomeVIP")
ResetCashierUISelection(s_lastMoneyLimit)
end
end)
end
function Cashier_OnInteraction(forceCoords)
if forceCoords then
s_cashierCoords = forceCoords
end
DebugStart("Cashier_OnInteraction")
if not CAN_INTERACT then
return
end
if PLAYER_DRUNK_LEVEL >= 1.0 then
return
end
BlockPlayerInteraction(2000)
local usedBefore = history[s_cashierCoords] and true or false
local isDrunk = PLAYER_DRUNK_LEVEL > 0.5
TriggerServerEvent("rcore_casino:Cashier:Use", s_cashierCoords, usedBefore, isDrunk)
end
function Cashier_OnBecomeVIP()
DebugStart("Cashier_OnBecomeVIP")
ResetCashierUISelection(s_lastMoneyLimit)
end
function Cashier_ShowNotifyUI(coords)
if Config.UseTarget then
return
end
DebugStart("Cashier_ShowNotifyUI")
local cashier = GetCashierFromCoords(coords)
if not cashier then
return
end
if cashier.playerId ~= -1 then
InfoPanel_UpdateNotification(Translation.Get("CASHIER_BEING_USED"))
return
end
InfoPanel_UpdateNotification(Translation.Get("CASHIER_PRESS_TO_USE"))
s_cashierCoords = coords
end
-- load cashiers
function Cashier_Load()
DebugStart("Cashier_Load")
for _, o in pairs(CashierDatas) do
if o.enabled then
local coords = o.coords
local head = o.heading
local model = GetHashKey(o.model)
RequestModelAndWait(model)
local cashier = {}
cashier.playerId = -1
cashier.coords = coords
cashier.ped = CreatePed(2, model, coords, head, false, false)
o.ped = cashier.ped
SetPedBrave(cashier.ped)
table.insert(cashiers, cashier)
-- target
local targetOffset = GetObjectOffsetFromCoords(coords, head, 0.0, 0.2, 0.5)
local targetData = {{
num = 1,
type = "client",
event = "rcore_casino:Target",
icon = 'fas fa-cash-register',
label = removePlaceholderText(Translation.Get("CASHIER_PRESS_TO_USE")),
targeticon = 'fas fa-cash-register',
canInteract = function(entity, distance, data)
return CAN_INTERACT
end,
drawColor = {255, 255, 255, 255},
successDrawColor = {30, 144, 255, 255},
eventAction = "cashier_enter",
cashierCoords = coords
}}
if Config.TargetUsePeds then
CreateTargetEntity(cashier.ped, targetData)
else
CreateTargetZone(vector3(targetOffset.x, targetOffset.y, targetOffset.z), 3.5, 6.0, 0.0, targetData)
end
end
end
SetCasinoBlip(cashiers[1].coords, 683, Translation.Get("BLIP_CASHIER"), false)
end
RegisterNetEvent("rcore_casino:Cashier:Use")
AddEventHandler("rcore_casino:Cashier:Use", function(coords, playerId, greetings, moneyLimit, canPurchaseVIP, maxMoney, extraData)
local cashier = GetCashierFromCoords(coords)
if not cashier then
return
end
cashier.playerId = playerId
PlayPedAmbientSpeechWithVoiceNative(cashier.ped, greetings, "u_f_m_casinocash_01", "SPEECH_PARAMS_FORCE_NORMAL", 0)
if playerId == GetMyPlayerId() then
UnblockPlayerInteraction()
SetInventoryBusy(true)
SetLastStartedGameType("cashier")
Cashier_ShowMenu(moneyLimit, canPurchaseVIP, maxMoney, extraData)
s_lastMoneyLimit = moneyLimit
s_cashierCoords = coords
s_myCashier = cashier
CAN_MOVE = false
end
end)
RegisterNetEvent("rcore_casino:Cashier:Sessions")
AddEventHandler("rcore_casino:Cashier:Sessions", function(sessions)
for _, v in pairs(sessions) do
local cashier = GetCashierFromCoords(v.coords)
if not cashier then
goto continue
end
cashier.playerId = v.playerId
cashier.coords = v.coords
::continue::
end
end)
RegisterNetEvent("rcore_casino:Cashier:Quit")
AddEventHandler("rcore_casino:Cashier:Quit", function(coords, playerId)
local cashier = GetCashierFromCoords(coords)
if playerId == GetMyPlayerId() then
CAN_MOVE = true
end
if not cashier then
return
end
cashier.playerId = -1
end)
-- trade results
RegisterNetEvent("rcore_casino:TradeResults")
AddEventHandler("rcore_casino:TradeResults", function(chipsNow, moneyNow, comment, moneyLimit, societyNow, pCache)
if chipsNow and chipsNow ~= -1 then
PLAYER_CHIPS = chipsNow
PLAYER_MONEY = moneyNow
s_lastMoneyLimit = moneyLimit
if pCache and type(pCache) == "table" then
PLAYER_CACHE = pCache
end
Casino_AnimateBalance()
if s_myCashier ~= nil then
PlayPedAmbientSpeechWithVoiceNative(s_myCashier.ped, comment, "u_f_m_casinocash_01",
"SPEECH_PARAMS_FORCE_NORMAL", 0)
ResetCashierUISelection(moneyLimit, societyNow)
end
else
Cashier_OnQuit()
local societyMoney = moneyNow
FullscreenPrompt(Translation.Get("CASHIER_TRADEIN_FAILED_CAPT"), Translation.Get("CASHIER_TRADEIN_FAILED_MSG"),
nil, string.format(Translation.Get("CASHIER_SOCIETY_BALANCE"), FormatPrice(societyMoney)))
PlaySound("CHECKPOINT_MISSED", "HUD_MINI_GAME_SOUNDSET")
end
end)
-- on quit
function Cashier_OnQuit()
DebugStart("Cashier_OnQuit")
if Config.CASHIER_MULTITASK then
local cashier = GetCashierFromCoords(s_cashierCoords)
if cashier then
cashier.playerId = -1
end
end
TriggerServerEvent("rcore_casino:Cashier:Quit")
CloseAllMenus()
CAN_MOVE = true
SetInventoryBusy(false)
ForgotLastStartedGameType("cashier")
end
-- destroy all cashiers
function Cashier_Destroy()
DebugStart("Cashier_Destroy")
for _, o in pairs(cashiers) do
ForceDeleteEntity(o.ped)
end
cashiers = {}
end
@@ -1,217 +0,0 @@
DoorSystem = {}
DoorSystem.Pool = {}
DoorSystem.Uid = 0
DoorSystem.EntranceLock = true
function DoorSystem:RegisterDoor(entity, coords, heading, model, group)
if entity then
coords = GetEntityCoords(entity)
model = GetEntityModel(entity)
if not heading then
heading = GetEntityHeading(heading) -- of closed state
end
end
if not group then
group = "casino"
end
local o = {}
o.handle = GetHashKey("casinodoors_" .. DoorSystem.Uid)
o.coords = coords
o.model = model
o.heading = heading
o.entity = entity
o.state = -1
o.group = group
local exist, existHandle = DoorSystemFindExistingDoor(coords.x, coords.y, coords.z, model)
if exist then
o.handle = existHandle
end
if not IsDoorRegisteredWithSystem(o.handle) then
AddDoorToSystem(o.handle, o.model, o.coords.x, o.coords.y, o.coords.z, false, false, false)
end
o.setState = function(state)
if o.state == state then
return
end
o.state = state
DoorSystemSetDoorState(o.handle, state, false, false)
end
o.refresh = function(relink)
if o.state >= 3 then -- this frame only states
DoorSystemSetDoorState(o.handle, o.state, false, true)
end
if not o.entity and relink then
o.entity = GetClosestObjectOfType(o.coords.x, o.coords.y, o.coords.z, 0.10, o.model, false, false, false)
end
if DoesEntityExist(o.entity) and (o.state == 1 or o.state == 4) then -- locked states
SetEntityHeading(o.entity, o.heading)
end
end
o.unlock = function()
o.setState(0)
end
o.lock = function()
o.setState(1)
end
o.open = function(forceUpdate)
o.unlock()
if not forceUpdate then
forceUpdate = false
end
DoorSystemSetOpenRatio(o.handle, -1.0, false, forceUpdate)
end
o.close = function(forceUpdate)
if not forceUpdate then
forceUpdate = false
end
DoorSystemSetOpenRatio(o.handle, 0.0, false, forceUpdate)
end
o.lockLoop = function()
o.setState(4)
end
o.unlockLoop = function()
o.setState(3)
end
o.openLoop = function()
o.open()
o.setState(5)
end
o.closeLoop = function()
o.close()
o.setState(6)
end
table.insert(DoorSystem.Pool, o)
DoorSystem.Uid = DoorSystem.Uid + 1
return o
end
function DoorSystem:GetDoors(group)
local list = {}
for k, v in pairs(DoorSystem.Pool) do
if v.group == group then
table.insert(list, v)
end
end
return list
end
function DoorSystem:Unregister(o)
for i = 1, #DoorSystem.Pool do
if DoorSystem.Pool[i] == o then
table.remove(DoorSystem.Pool, i)
break
end
end
end
function DoorSystem:InitializeCasino()
if #DoorSystem.Pool > 0 then
return
end
-- left wings (entrance)
DoorSystem:RegisterDoor(nil, vector3(927.676880, 49.645515, 81.543098), 328.15661621094 - 90.0, 21324050, "entrance")
DoorSystem:RegisterDoor(nil, vector3(926.188293, 47.248829, 81.543098), 328.15661621094 - 90.0, 21324050, "entrance")
DoorSystem:RegisterDoor(nil, vector3(924.706238, 44.862366, 81.543098), 328.15661621094 - 90.0, 21324050, "entrance")
-- right wings (entrance)
DoorSystem:RegisterDoor(nil, vector3(926.347046, 47.515320, 81.543098), 328.15661621094 + 90.0, 21324050, "entrance")
DoorSystem:RegisterDoor(nil, vector3(924.859009, 45.119484, 81.543098), 328.15661621094 + 90.0, 21324050, "entrance")
DoorSystem:RegisterDoor(nil, vector3(923.376038, 42.731743, 81.543098), 328.15661621094 + 90.0, 21324050, "entrance")
if Config.MapType == 1 then
-- garage <=> interior
DoorSystem:RegisterDoor(nil, vector3(930.422791, 33.263103, 81.242676), 150.0, 901693952, "int2garage")
-- office elevator (normal)
DoorSystem:RegisterDoor(nil, vector3(952.656677, 57.975616, 74.432373), 60.0, -1240156945, "officeelevator")
DoorSystem:RegisterDoor(nil, vector3(953.451599, 59.247688, 74.432373), -120.0, -1240156945, "officeelevator")
-- office elevator (down) (normal)
DoorSystem:RegisterDoor(nil, vector3(976.157166, 73.089081, 69.232674), 60.0, -1240156945, "officeelevator")
DoorSystem:RegisterDoor(nil, vector3(977.429199, 72.294205, 69.232674), -120.0, -1240156945, "officeelevator")
if CASHIER_DOORS then
-- casino staff cashier
local cashierDoors = DoorSystem:RegisterDoor(nil, CASHIER_DOORS.pos, CASHIER_DOORS.heading, 1266543998,
"cashier")
cashierDoors.close()
cashierDoors.lock()
end
elseif Config.MapType == 2 or Config.MapType == 3 then
-- office elevator (gabz)
DoorSystem:RegisterDoor(nil, vector3(993.200623, 55.761406, 74.059692), 60.0, -1240156945, "officeelevator")
DoorSystem:RegisterDoor(nil, vector3(993.992004, 57.035648, 74.059692), -120.0, -1240156945, "officeelevator")
-- office elevator (down) (gabz)
DoorSystem:RegisterDoor(nil, vector3(1016.659668, 70.939056, 68.859993), 60.0, -1240156945, "officeelevator")
DoorSystem:RegisterDoor(nil, vector3(1017.933899, 70.147675, 68.859993), -120.0, -1240156945, "officeelevator")
end
local elevators = DoorSystem:GetDoors("officeelevator")
for k, v in pairs(elevators) do
v.close(true)
end
end
local function RecheckEntranceLock()
local lock = IsActivityEnabled("casinoentrance")
if Config.LeaveThroughTeleport then
lock = false -- always lock if leaving through teleports
end
if lock ~= DoorSystem.EntranceLock then
DoorSystem.EntranceLock = lock
for k, v in pairs(DoorSystem.Pool) do
if v.group == "entrance" or v.group == "int2garage" then
if lock then
v.close()
v.unlock()
else
v.lockLoop()
v.close()
end
end
end
end
end
local function HandleDoors(relink)
local playerPosition = GetEntityCoords(PlayerPedId())
local sleepTime = 1000
if relink then
RecheckEntranceLock()
end
for k, v in pairs(DoorSystem.Pool) do
if #(playerPosition - v.coords) < 10.0 then
v.refresh(relink)
sleepTime = 0
end
end
Wait(sleepTime)
end
DoorSystem:InitializeCasino()
CreateThread(function()
local checkTime = GetGameTimer() + 2000
while true do
local timer = GetGameTimer()
local check = timer > checkTime
HandleDoors(check)
if check then
checkTime = timer + 2000
end
end
end, true)
@@ -1,85 +0,0 @@
2434503858;-2.3212890625;19.685930252075;-0.19699859619141;53.98041229248;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
2526968950;-18.206115722656;5.7392959594727;0.19771575927734;341.53660888672;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL_EATING;NOANIM;NOANIM;3
2600762591;-18.9736328125;-19.563510894775;0.44073486328125;54.179363250732;0/3/0;1/0/0;2/3/0;3/5/0;4/3/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-35.496276855469;-14.365493774414;0.069168090820313;159.56734924316;0/9/0;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-32.623840332031;-22.029476165771;0.45345306396484;162.71843261719;0/2/1;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;-20.952941894531;5.3609809875488;-0.15920257568359;100.40215301514;0/4/0;1/0/0;2/8/1;3/5/2;4/4/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;9.7550659179688;-9.0881958007813;-0.7998046875;202.15742492676;0/11/2;1/0/0;2/14/1;3/13/2;4/8/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-31.058898925781;-9.5620651245117;0.46534729003906;154.19045715332;0/12/2;1/0/0;2/15/1;3/15/2;4/10/2;5/0/0;6/7/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;2
279228114;-34.730529785156;-13.453735351563;0.041999816894531;-30.239999771118;0/3/0;1/0/0;2/7/0;3/3/1;4/2/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
337826907;-22.536804199219;-30.46821975708;1.2356948852539;42.482411193848;0/4/0;1/1/0;2/4/0;3/1/0;4/0/0;5/0/0;6/1/0;7/2/0;8/3/0;9/0/0;10/1/0;11/1/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;1
2600762591;-9.4402465820313;7.5219421386719;-0.59600067138672;23.760000228882;0/10/2;1/0/0;2/15/0;3/1/1;4/11/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
337826907;13.319458007813;0.85515213012695;-0.97772979736328;253.39671020508;0/5/0;1/0/0;2/5/0;3/0/4;4/1/0;5/0/0;6/0/0;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;1
279228114;0.71099853515625;11.82998085022;-0.55995941162109;125.95603637695;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-33.015808105469;-3.6640548706055;0.44068908691406;144.64302062988;0/6/1;1/0/0;2/3/0;3/6/0;4/3/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;8.0192260742188;22.348573684692;-0.55995941162109;191.12475585938;0/5/2;1/0/0;2/4/0;3/5/2;4/2/2;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;check_out_b;clothingshirt;3
2600762591;-8.8323364257813;6.7239532470703;-0.59600067138672;222.76583557129;0/11/1;1/0/0;2/11/0;3/12/0;4/10/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
553826858;-12.514831542969;18.159801483154;0.035446166992188;29.78155708313;0/1/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_DECKCHAIR_DRINK;NOANIM;NOANIM;3
2434503858;-10.096435546875;6.5718841552734;-0.59600067138672;144.0;0/6/1;1/0/0;2/8/1;3/9/5;4/4/3;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
1278330017;-31.090637207031;-8.3707122802734;0.44069671630859;350.85969238281;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MUSCLE_FLEX;NOANIM;NOANIM;2
279228114;-35.916564941406;-13.393447875977;0.067863464355469;36.659759521484;0/1/2;1/0/0;2/4/0;3/1/2;4/1/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2600762591;-4.4703979492188;11.47047996521;-0.56785583496094;221.87998657227;0/0/0;1/0/0;2/12/0;3/0/0;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;2
279228114;-9.700927734375;1.3271408081055;-0.18263244628906;127.49905395508;0/4/2;1/0/0;2/9/0;3/6/2;4/5/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-10.754211425781;-24.333232879639;0.44069671630859;174.93353271484;0/4/1;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
553826858;9.237548828125;-2.7126541137695;-0.82183837890625;347.5698425293;0/5/0;1/0/0;2/4/0;3/3/0;4/2/0;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
2600762591;-9.149658203125;-1.6710662841797;-0.15850067138672;-88.380012512207;0/13/2;1/0/0;2/9/0;3/13/2;4/9/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;8.816162109375;-8.6635551452637;-0.79960632324219;148.41452026367;0/3/2;1/0/0;2/7/2;3/4/2;4/3/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SECURITY_SHINE_TORCH;interview_short_anton;missmic4premiere;3
279228114;-17.254150390625;10.492946624756;-0.006988525390625;232.8263671875;0/0/2;1/0/0;2/0/0;3/1/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_COMPUTER;NOANIM;NOANIM;2
553826858;-17.671813964844;-20.024723052979;0.44068908691406;316.77166748047;0/7/1;1/0/0;2/3/0;3/7/2;4/4/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;11.544921875;-9.9813842773438;-0.7996826171875;229.26098632813;0/7/0;1/0/0;2/3/0;3/6/1;4/4/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;3
553826858;7.6781616210938;19.367282867432;-0.55995941162109;183.16337585449;0/7/2;1/0/0;2/3/0;3/6/2;4/3/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_WINDOW_SHOP_BROWSE;NOANIM;NOANIM;3
4150317356;-14.908264160156;1.1704330444336;-0.15917205810547;80.89026184082;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_STANDING;NOANIM;NOANIM;3
553826858;-8.1075439453125;-3.9700012207031;-0.18000030517578;-148.45899963379;0/3/1;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;0.44256591796875;12.959438323975;-0.56001281738281;35.283293914795;0/2/2;1/0/0;2/5/0;3/2/1;4/1/1;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;-5.4266357421875;11.56548500061;-0.59600067138672;90.391998291016;0/9/1;1/0/0;2/11/2;3/12/2;4/7/1;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;9.5970458984375;-4.2397727966309;-0.79525756835938;231.06343383789;0/0/1;1/0/0;2/5/1;3/2/0;4/0/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_CASINO_TERRACE;NOANIM;NOANIM;1
279228114;-20.054809570313;5.9362335205078;-0.15920257568359;319.75811767578;0/1/2;1/0/0;2/2/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
55858852;13.678283691406;-5.1783676147461;-0.59566497802734;279.58372802734;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
3138220789;-34.43603515625;6.0365447998047;0.44069671630859;6.3087017059326;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MOBILE_FILM_SHOCKING;NOANIM;NOANIM;3
279228114;-8.7015380859375;-3.2505035400391;-0.16000366210938;42.865997314453;0/2/1;1/0/0;2/1/1;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
2434503858;5.7977294921875;16.442882537842;-0.54164123535156;129.04111938477;0/11/1;1/0/0;2/13/0;3/14/1;4/9/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;10.246154785156;6.8676071166992;-1.0139999389648;227.17247314453;0/0/1;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_FACILITY;NOANIM;NOANIM;1
2600762591;9.1370849609375;6.6064262390137;-1.000114440918;151.72654724121;0/12/0;1/0/0;2/8/1;3/13/1;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-37.6806640625;-17.387680053711;0.43772125244141;3.7649207115173;0/2/2;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CLUBHOUSE;NOANIM;NOANIM;1
2434503858;7.3496704101563;0.65901947021484;-1.0001678466797;181.88602905273;0/10/1;1/0/0;2/12/2;3/12/1;4/7/0;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;9.3544921875;7.8700561523438;-1.0359954833984;43.959365844727;0/1/1;1/0/0;2/4/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MAP;NOANIM;NOANIM;1
553826858;-9.026123046875;16.151987075806;-0.57041931152344;4.5585260391235;0/8/1;1/0/0;2/1/0;3/8/0;4/6/0;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;1
279228114;5.8204956054688;12.256853103638;-0.56000518798828;243.84157104492;0/2/1;1/0/0;2/3/0;3/0/1;4/1/1;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT;NOANIM;NOANIM;2
553826858;-16.626098632813;5.791446685791;-0.56474304199219;45.98267364502;0/3/0;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
2600762591;5.399169921875;13.381549835205;-0.54174041748047;334.91586303711;0/9/0;1/0/0;2/1/0;3/10/4;4/7/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
2600762591;12.949584960938;19.80983543396;-0.56000518798828;275.12399291992;0/5/0;1/0/0;2/4/1;3/6/0;4/4/3;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;3
279228114;-8.8939819335938;14.512456893921;-0.56764984130859;189.77952880859;0/4/0;1/0/0;2/9/1;3/6/1;4/5/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;1.642822265625;12.49750328064;-0.57600402832031;272.04014892578;0/0/0;1/0/0;2/5/1;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;2.5347290039063;6.9387321472168;-0.20298767089844;159.70381469727;0/3/1;1/0/0;2/5/2;3/5/2;4/2/0;5/0/0;6/1/3;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
279228114;-11.734680175781;18.750513076782;-0.035064697265625;23.184113693237;0/2/2;1/0/0;2/2/0;3/2/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;3
450271392;-4.5588989257813;22.353923797607;-0.56000518798828;13.837906837463;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;3
4188740747;-0.9521484375;18.75630569458;-0.29718017578125;-48.959999084473;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;2
2600762591;-31.840637207031;-3.4384803771973;0.44069671630859;237.34228820801;0/7/1;1/0/0;2/7/0;3/8/3;4/5/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
967594628;-1.6597290039063;22.329448699951;-0.55992889404297;285.9864074707;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_LOW_CLASS;NOANIM;NOANIM;3
279228114;-32.937072753906;-2.4253196716309;0.44069671630859;341.03814697266;0/3/2;1/0/0;2/6/2;3/3/2;4/2/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;8.1873779296875;-4.0992813110352;-0.79987335205078;86.88433380127;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_FACILITY;NOANIM;NOANIM;1
553826858;-45.362609863281;4.3761596679688;0.44078826904297;79.912719726563;0/0/0;1/0/0;2/2/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE;NOANIM;NOANIM;1
279228114;-9.0543212890625;1.9701614379883;-0.25605010986328;283.49948120117;0/1/2;1/0/0;2/1/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;-31.920166015625;-20.994541168213;0.45345306396484;324.58986206055;0/4/2;1/0/0;2/8/0;3/5/1;4/4/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1415150394;-0.20037841796875;17.305589675903;-0.27812957763672;291.30180053711;0/0/0;1/-1/255;2/0/0;3/0/0;4/0/0;5/-1/255;6/0/0;7/-1/255;8/-1/255;9/-1/255;10/-1/255;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
-1860463438;11.875;6.2086639404297;-1.0001907348633;341.09956665039;0/7/1;1/0/0;2/9/0;3/8/1;4/4/2;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;-36.5263671875;7.1977615356445;0.44081878662109;297.2998046875;0/3/1;1/0/0;2/7/1;3/4/0;4/3/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT;NOANIM;NOANIM;3
279228114;-52.217895507813;-14.667984008789;1.4408645629883;221.72512817383;0/4/1;1/0/0;2/9/1;3/6/0;4/5/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
-1860463438;-37.584777832031;7.0065307617188;0.44082641601563;26.39906578064;0/6/0;1/0/0;2/8/0;3/9/4;4/4/1;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-28.341613769531;-0.0093727111816406;0.4407958984375;352.19938964844;0/0/2;1/0/0;2/2/0;3/1/0;4/1/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
279228114;-53.113586425781;-14.065052032471;1.4428405761719;59.699509429932;0/1/1;1/0/0;2/3/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1860463438;-53.912719726563;-6.995174407959;1.3979949951172;305.39948730469;0/9/0;1/0/0;2/12/0;3/12/0;4/7/2;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-63.516784667969;-3.9238929748535;1.4413681030273;65.999870300293;0/1/2;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-43.256530761719;-25.443897247314;1.0408248901367;238.19868774414;0/3/2;1/0/0;2/3/2;3/1/3;4/1/0;5/0/0;6/0/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-59.064392089844;-22.138889312744;1.4408569335938;184.74311828613;0/3/1;1/0/0;2/3/1;3/0/2;4/1/0;5/0/0;6/0/1;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_STAND_MOBILE;NOANIM;NOANIM;1
-1860463438;-54.520812988281;-31.258235931396;1.0408248901367;43.798686218262;0/5/0;1/0/0;2/6/1;3/6/2;4/3/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MAID_CLEAN;NOANIM;NOANIM;1
553826858;-41.940856933594;1.7172203063965;0.44113922119141;192.89949035645;0/4/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_FACILITY;NOANIM;NOANIM;1
-1694204705;-23.35546875;-7.073802947998;-0.15924835205078;154.49736022949;0/6/2;1/0/0;2/6/2;3/8/1;4/6/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRUG_DEALER_HARD;NOANIM;NOANIM;3
553826858;-30.47998046875;-29.383121490479;0.44069671630859;150.89926452637;0/8/0;1/0/0;2/0/0;3/8/1;4/6/1;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STUPOR_CLUBHOUSE;NOANIM;NOANIM;3
279228114;-15.574096679688;-28.165584564209;0.82003021240234;360.24982910156;0/0/0;1/0/0;2/0/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MOBILE;NOANIM;NOANIM;3
-1860463438;-31.451416015625;-28.793575286865;0.44167327880859;88.578625488281;0/8/1;1/0/0;2/10/2;3/11/1;4/6/1;5/0/0;6/4/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_JOG_STANDING;NOANIM;NOANIM;3
279228114;-25.285339355469;-20.848438262939;0.44087219238281;18.0;0/0/1;1/0/0;2/1/0;3/2/0;4/1/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-26.120056152344;-21.742847442627;0.44075775146484;89.999969482422;0/2/0;1/0/0;2/5/0;3/1/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-12.392761230469;-27.024753570557;0.84078216552734;268.74055175781;0/4/1;1/0/0;2/8/1;3/5/0;4/4/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_SLUMPED;NOANIM;NOANIM;3
553826858;-22.664489746094;-27.572383880615;0.82898712158203;275.99908447266;0/6/0;1/0/0;2/3/0;3/7/1;4/4/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
279228114;-23.663146972656;-27.995822906494;0.84578704833984;128.99987792969;0/0/2;1/0/0;2/5/1;3/1/0;4/1/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
@@ -1,26 +0,0 @@
951767867;-1547.1401367188;-595.23504638672;31.284715652466;226.82543945312;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_LEANING_CASINO_TERRACE;NOANIM;NOANIM;2
-1106743555;-1514.6903076172;-607.78692626953;31.284715652466;347.08923339844;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_LEANING_CASINO_TERRACE;NOANIM;NOANIM;2
808859815;-1531.8341064453;-601.88714599609;31.284715652466;140.11024475098;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;2
808859815;-1532.4754638672;-602.65447998047;31.284715652466;320.11026000977;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1750583735;-1512.1911621094;-580.49200439453;31.284715652466;151.92321777344;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
1750583735;-1513.0399169922;-581.02075195312;31.284715652466;271.92044067383;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1750583735;-1512.1575927734;-581.49145507812;31.284715652466;31.922561645508;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-781039234;-1505.9663085938;-580.94018554688;35.246990203857;159.03387451172;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
808859815;-1507.3817138672;-580.75457763672;35.215034484863;186.89027404785;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
-1106743555;-1507.5667724609;-595.17730712891;31.284715652466;25.52347946167;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1106743555;-1507.9976806641;-594.27484130859;31.284715652466;205.52346801758;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
951767867;-1502.6485595703;-600.09118652344;31.284715652466;140.0563659668;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1674107025;-1503.6446533203;-600.17932128906;31.284715652466;230.05635070801;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
115168927;-1503.5565185547;-601.17541503906;31.284715652466;320.05639648438;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;2
-1106743555;-1502.5604248047;-601.08728027344;31.284715652466;50.056381225586;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
808859815;-1530.3522949219;-593.97863769531;31.284715652466;140.28826904297;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
808859815;-1531.2902832031;-594.32537841797;31.284715652466;260.28671264648;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
808859815;-1530.5209960938;-594.96435546875;31.284715652466;20.28737449646;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1760377969;-1499.4295654297;-581.31561279297;31.284715652466;180.16958618164;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-573920724;-1499.9270019531;-582.18304443359;31.284715652466;300.16485595703;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1106743555;-1498.9270019531;-582.18017578125;31.284715652466;60.16646194458;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
-1760377969;-1534.7135009766;-597.88433837891;31.284715652466;140.0563659668;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
-1760377969;-1535.7095947266;-597.97247314453;31.284715652466;230.05635070801;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1106743555;-1535.6214599609;-598.96856689453;31.284715652466;320.05639648438;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1606864033;-1534.6253662109;-598.88043212891;31.284715652466;50.056381225586;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-88831029;-1500.0230712891;-604.65411376953;35.246990203857;78.819747924805;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MOBILE_FILM_SHOCKING;NOANIM;NOANIM;2
@@ -1,57 +0,0 @@
2434503858;-16.539428710938;20.066440582275;0.062034606933594;242.67785644531;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
2526968950;9.0155029296875;21.547157287598;-0.53272247314453;352.89311523437;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL_EATING;NOANIM;NOANIM;3
2600762591;-29.576232910156;34.75;-0.99781799316406;54.179363250732;0/3/0;1/0/0;2/3/0;3/5/0;4/3/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-26.527709960938;22.44149017334;-0.99781799316406;159.56734924316;0/9/0;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-23.619934082031;41.76953125;-0.74790954589844;37.689247131348;0/2/1;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
2434503858;27.448669433594;54.079345703125;-0.75228881835938;170.31623840332;0/12/2;1/0/0;2/15/1;3/15/2;4/10/2;5/0/0;6/7/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;2
279228114;34.248046875;59.236511230469;-0.75218200683594;270.63166503906;0/3/0;1/0/0;2/7/0;3/3/1;4/2/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
337826907;0.126220703125;6.9256782531738;-0.997802734375;99.109677124023;0/4/0;1/1/0;2/4/0;3/1/0;4/0/0;5/0/0;6/1/0;7/2/0;8/3/0;9/0/0;10/1/0;11/1/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;1
2600762591;-17.272521972656;14.673774719238;0.0020751953125;100.14435577393;0/10/2;1/0/0;2/15/0;3/1/1;4/11/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
553826858;-13.441101074219;39.570388793945;-0.74790954589844;197.78056335449;0/5/2;1/0/0;2/4/0;3/5/2;4/2/2;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;check_out_b;clothingshirt;3
2600762591;-26.021240234375;15.276123046875;-0.997802734375;14.268159866333;0/11/1;1/0/0;2/11/0;3/12/0;4/10/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
553826858;4.5505981445312;29.812873840332;-1.4491424560547;181.53439025879;0/1/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_DECKCHAIR_DRINK;NOANIM;NOANIM;3
1278330017;3.6876831054688;55.551239013672;-0.75191497802734;5.8032531738281;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MUSCLE_FLEX;NOANIM;NOANIM;2
279228114;9.8182983398438;54.887462615967;-0.74814605712891;237.46920471191;0/1/2;1/0/0;2/4/0;3/1/2;4/1/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2600762591;-31.528137207031;21.700531005859;-0.99781799316406;146.87956237793;0/0/0;1/0/0;2/12/0;3/0/0;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;2
2600762591;-5.8760986328125;63.231460571289;-0.997802734375;284.92987060547;0/13/2;1/0/0;2/9/0;3/13/2;4/9/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;-9.0887451171875;44.741523742676;-1.4879760742188;292.76510620117;0/0/2;1/0/0;2/0/0;3/1/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_COMPUTER;NOANIM;NOANIM;2
553826858;-7.312744140625;63.198497772217;-0.98562622070312;66.095741271973;0/7/1;1/0/0;2/3/0;3/7/2;4/4/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
4150317356;-34.441711425781;29.110229492188;-0.99781799316406;80.89026184082;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_STANDING;NOANIM;NOANIM;3
553826858;0.9083251953125;42.507026672363;-1.9978561401367;67.79065246582;0/3/1;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;-26.050476074219;29.326293945312;-0.99781799316406;338.28314208984;0/2/2;1/0/0;2/5/0;3/2/1;4/1/1;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
55858852;-23.331237792969;48.051246643066;-0.53583526611328;53.355727386475;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
3138220789;-15.37548828125;58.843601226807;-1.0047302246094;353.63372802734;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MOBILE_FILM_SHOCKING;NOANIM;NOANIM;3
279228114;8.7046508789062;55.618816375732;-0.75180053710938;50.41070098877;0/2/1;1/0/0;2/1/1;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
2434503858;-6.4005126953125;26.978115081787;-0.7479248046875;251.22888183594;0/11/1;1/0/0;2/13/0;3/14/1;4/9/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-8.3335571289062;0.19869995117188;-0.99755096435547;160.42750549316;0/0/1;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_FACILITY;NOANIM;NOANIM;1
2600762591;-34.260803222656;37.929870605469;-0.99781799316406;138.22598571777;0/12/0;1/0/0;2/8/1;3/13/1;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-37.065185546875;10.761161804199;-0.49797058105469;125.33883666992;0/2/2;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CLUBHOUSE;NOANIM;NOANIM;1
2434503858;-33.299865722656;38.499885559082;-0.99781799316406;328.88531494141;0/10/1;1/0/0;2/12/2;3/12/1;4/7/0;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;-14.153198242188;40.867530822754;-0.74791717529297;22.014518737793;0/1/1;1/0/0;2/4/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MAP;NOANIM;NOANIM;1
279228114;1.0282592773438;62.239521026611;-0.99401092529297;336.11703491211;0/2/1;1/0/0;2/3/0;3/0/1;4/1/1;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT;NOANIM;NOANIM;2
553826858;-23.837219238281;17.645526885986;-0.99775695800781;303.89767456055;0/3/0;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
2600762591;-38.518371582031;33.700042724609;-0.99781799316406;175.91569519043;0/9/0;1/0/0;2/1/0;3/10/4;4/7/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
279228114;13.83984375;58.789855957031;-0.49789428710938;32.13843421936;0/0/0;1/0/0;2/5/1;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-11.468872070312;13.684150695801;0.080093383789062;322.46450805664;0/3/1;1/0/0;2/5/2;3/5/2;4/2/0;5/0/0;6/1/3;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
279228114;32.301208496094;64.924987792969;0.50986480712891;348.60534667969;0/2/2;1/0/0;2/2/0;3/2/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;3
450271392;-26.030639648438;27.808471679688;-0.99781799316406;208.83740234375;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;3
4188740747;14.342468261719;23.734668731689;-0.53607940673828;45.757423400879;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;2
279228114;-25.882080078125;14.029033660889;-0.99785614013672;165.37129211426;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_FACILITY;NOANIM;NOANIM;1
553826858;-27.284729003906;28.546020507812;-0.99781799316406;79.912719726563;0/0/0;1/0/0;2/2/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE;NOANIM;NOANIM;1
279228114;27.373779296875;55.725070953369;-0.75210571289062;339.65982055664;0/1/2;1/0/0;2/1/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
1415150394;-39.432434082031;36.948738098145;-0.99781799316406;291.30180053711;0/0/0;1/-1/255;2/0/0;3/0/0;4/0/0;5/-1/255;6/0/0;7/-1/255;8/-1/255;9/-1/255;10/-1/255;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
-1860463438;-26.393127441406;23.680450439453;-0.99781799316406;341.09956665039;0/7/1;1/0/0;2/9/0;3/8/1;4/4/2;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
-1860463438;-33.304443359375;28.243522644043;-0.99781799316406;236.39855957031;0/6/0;1/0/0;2/8/0;3/9/4;4/4/1;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT_CLUBHOUSE;NOANIM;NOANIM;3
-1860463438;-15.694519042969;24.434471130371;0.0020751953125;95.439849853516;0/9/0;1/0/0;2/12/0;3/12/0;4/7/2;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-3.3563232421875;22.884216308594;-0.74485015869141;307.41641235352;0/1/2;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-16.415222167969;14.173160552979;0.0021438598632812;237.56948852539;0/3/1;1/0/0;2/3/1;3/0/2;4/1/0;5/0/0;6/0/1;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_STAND_MOBILE;NOANIM;NOANIM;1
-1860463438;-7.6656494140625;43.495449066162;-1.9978637695312;176.58346252441;0/5/0;1/0/0;2/6/1;3/6/2;4/3/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MAID_CLEAN;NOANIM;NOANIM;1
553826858;-18.405334472656;28.540252685547;-0.99781799316406;192.89949035645;0/4/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_FACILITY;NOANIM;NOANIM;1
-1694204705;-7.8748779296875;27.049724578857;-0.74791717529297;68.834759521484;0/6/2;1/0/0;2/6/2;3/8/1;4/6/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRUG_DEALER_HARD;NOANIM;NOANIM;3
553826858;-14.379638671875;49.119934082031;-0.99996948242188;295.34315795898;0/8/0;1/0/0;2/0/0;3/8/1;4/6/1;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STUPOR_CLUBHOUSE;NOANIM;NOANIM;3
279228114;-31.107788085938;33.973937988281;-0.99785614013672;263.70142822266;0/0/0;1/0/0;2/0/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MOBILE;NOANIM;NOANIM;3
-1860463438;2.6519775390625;11.619575500488;-0.99782562255859;36.653053283691;0/8/1;1/0/0;2/10/2;3/11/1;4/6/1;5/0/0;6/4/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_JOG_STANDING;NOANIM;NOANIM;3
279228114;-14.629516601562;25.195140838623;0.0020751953125;323.02557373047;0/0/1;1/0/0;2/1/0;3/2/0;4/1/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;14.603271484375;57.999443054199;-0.49337768554688;237.84196166992;0/2/0;1/0/0;2/5/0;3/1/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-6.6162109375;31.428741455078;0.0679931640625;308.77313232422;0/4/1;1/0/0;2/8/1;3/5/0;4/4/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_DECKCHAIR_DRINK;intro_loop_ped_d;anim@heists@fleeca_bank@hostages@intro;3
553826858;28.305786132812;54.878395080566;-0.74781799316406;254.76569824219;0/6/0;1/0/0;2/3/0;3/7/1;4/4/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
@@ -1,85 +0,0 @@
2434503858;-2.3212890625;19.685930252075;-0.19699859619141;53.98041229248;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
2526968950;-18.206115722656;5.7392959594727;0.19771575927734;341.53660888672;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL_EATING;NOANIM;NOANIM;3
2600762591;-18.855163574219;-20.024723052979;0.44068908691406;54.179363250732;0/3/0;1/0/0;2/3/0;3/5/0;4/3/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-35.496276855469;-14.365493774414;0.069168090820313;159.56734924316;0/9/0;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-32.623840332031;-22.029476165771;0.45345306396484;162.71843261719;0/2/1;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;-20.952941894531;5.3609809875488;-0.15920257568359;100.40215301514;0/4/0;1/0/0;2/8/1;3/5/2;4/4/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;10.11376953125;-7.6902618408203;-0.7998046875;128.056640625;0/11/2;1/0/0;2/14/1;3/13/2;4/8/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-31.058898925781;-9.5620651245117;0.46534729003906;154.19045715332;0/12/2;1/0/0;2/15/1;3/15/2;4/10/2;5/0/0;6/7/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;2
279228114;-34.730529785156;-13.453735351563;0.041999816894531;-30.239999771118;0/3/0;1/0/0;2/7/0;3/3/1;4/2/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
337826907;-22.536804199219;-30.46821975708;1.2389907836914;42.482411193848;0/4/0;1/1/0;2/4/0;3/1/0;4/0/0;5/0/0;6/1/0;7/2/0;8/3/0;9/0/0;10/1/0;11/1/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;1
2600762591;-9.4402465820313;7.5219421386719;-0.59600067138672;23.760000228882;0/10/2;1/0/0;2/15/0;3/1/1;4/11/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
337826907;13.319458007813;0.85515213012695;-0.97772979736328;222.79661560059;0/5/0;1/0/0;2/5/0;3/0/4;4/1/0;5/0/0;6/0/0;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;1
279228114;0.71099853515625;11.82998085022;-0.55995941162109;125.95603637695;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-33.015808105469;-3.6640548706055;0.44068908691406;144.64302062988;0/6/1;1/0/0;2/3/0;3/6/0;4/3/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;8.0192260742188;22.348573684692;-0.55995941162109;191.12475585938;0/5/2;1/0/0;2/4/0;3/5/2;4/2/2;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;check_out_b;clothingshirt;3
2600762591;-8.8323364257813;6.7239532470703;-0.59600067138672;222.76583557129;0/11/1;1/0/0;2/11/0;3/12/0;4/10/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
553826858;-12.514831542969;18.159801483154;0.035446166992188;29.78155708313;0/1/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_DECKCHAIR_DRINK;NOANIM;NOANIM;3
2434503858;-10.096435546875;6.5718841552734;-0.59600067138672;144.0;0/6/1;1/0/0;2/8/1;3/9/5;4/4/3;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
1278330017;-31.090637207031;-8.3707122802734;0.44069671630859;350.85969238281;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MUSCLE_FLEX;NOANIM;NOANIM;2
279228114;-35.916564941406;-13.393447875977;0.067863464355469;36.659759521484;0/1/2;1/0/0;2/4/0;3/1/2;4/1/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2600762591;-4.4703979492188;11.47047996521;-0.56785583496094;221.87998657227;0/0/0;1/0/0;2/12/0;3/0/0;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;2
279228114;-9.700927734375;1.3271408081055;-0.18263244628906;127.49905395508;0/4/2;1/0/0;2/9/0;3/6/2;4/5/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-10.754211425781;-24.333232879639;0.44069671630859;174.93353271484;0/4/1;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
553826858;10.245727539063;-3.0544052124023;-0.82183837890625;166.66883544922;0/5/0;1/0/0;2/4/0;3/3/0;4/2/0;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
2600762591;-9.149658203125;-1.6710662841797;-0.15850067138672;-88.380012512207;0/13/2;1/0/0;2/9/0;3/13/2;4/9/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;14.890075683594;-3.6628456115723;-0.79960632324219;148.1124420166;0/3/2;1/0/0;2/7/2;3/4/2;4/3/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SECURITY_SHINE_TORCH;interview_short_anton;missmic4premiere;3
279228114;-17.254150390625;10.492946624756;-0.006988525390625;232.8263671875;0/0/2;1/0/0;2/0/0;3/1/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_COMPUTER;NOANIM;NOANIM;2
553826858;-17.671813964844;-20.024723052979;0.44068908691406;316.77166748047;0/7/1;1/0/0;2/3/0;3/7/2;4/4/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;11.544921875;-9.9813842773438;-0.7996826171875;229.26098632813;0/7/0;1/0/0;2/3/0;3/6/1;4/4/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;3
553826858;7.6781616210938;19.367282867432;-0.55995941162109;183.16337585449;0/7/2;1/0/0;2/3/0;3/6/2;4/3/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_WINDOW_SHOP_BROWSE;NOANIM;NOANIM;3
4150317356;-14.908264160156;1.1704330444336;-0.15917205810547;80.89026184082;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_STANDING;NOANIM;NOANIM;3
553826858;-8.1075439453125;-3.9700012207031;-0.18000030517578;-148.45899963379;0/3/1;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;0.44256591796875;12.959438323975;-0.56001281738281;35.283293914795;0/2/2;1/0/0;2/5/0;3/2/1;4/1/1;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;-5.4266357421875;11.56548500061;-0.59600067138672;90.391998291016;0/9/1;1/0/0;2/11/2;3/12/2;4/7/1;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;10.828247070313;-2.1398582458496;-0.79525756835938;231.06343383789;0/0/1;1/0/0;2/5/1;3/2/0;4/0/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_CASINO_TERRACE;NOANIM;NOANIM;1
279228114;-20.054809570313;5.9362335205078;-0.15920257568359;319.75811767578;0/1/2;1/0/0;2/2/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
55858852;8.4107666015625;-5.4996795654297;-0.59566497802734;161.08085327148;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
3138220789;-34.43603515625;6.0365447998047;0.44069671630859;6.3087017059326;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MOBILE_FILM_SHOCKING;NOANIM;NOANIM;3
279228114;-8.7015380859375;-3.2505035400391;-0.16000366210938;42.865997314453;0/2/1;1/0/0;2/1/1;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
2434503858;5.7977294921875;16.442882537842;-0.54164123535156;129.04111938477;0/11/1;1/0/0;2/13/0;3/14/1;4/9/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;10.246154785156;6.8676071166992;-1.0139999389648;227.17247314453;0/0/1;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_FACILITY;NOANIM;NOANIM;1
2600762591;9.1370849609375;6.6064262390137;-1.000114440918;151.72654724121;0/12/0;1/0/0;2/8/1;3/13/1;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-37.6806640625;-17.387680053711;0.43772125244141;3.7649207115173;0/2/2;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CLUBHOUSE;NOANIM;NOANIM;1
2434503858;7.3496704101563;0.65901947021484;-1.0001678466797;181.88602905273;0/10/1;1/0/0;2/12/2;3/12/1;4/7/0;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;9.3544921875;7.8700561523438;-1.0359954833984;43.959365844727;0/1/1;1/0/0;2/4/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MAP;NOANIM;NOANIM;1
553826858;-9.026123046875;16.151987075806;-0.57041931152344;4.5585260391235;0/8/1;1/0/0;2/1/0;3/8/0;4/6/0;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;1
279228114;5.8204956054688;12.256853103638;-0.56000518798828;243.84157104492;0/2/1;1/0/0;2/3/0;3/0/1;4/1/1;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT;NOANIM;NOANIM;2
553826858;-16.626098632813;5.791446685791;-0.56474304199219;45.98267364502;0/3/0;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
2600762591;5.399169921875;13.381549835205;-0.54174041748047;334.91586303711;0/9/0;1/0/0;2/1/0;3/10/4;4/7/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
2600762591;12.949584960938;19.80983543396;-0.56000518798828;275.12399291992;0/5/0;1/0/0;2/4/1;3/6/0;4/4/3;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;3
279228114;-8.8939819335938;14.512456893921;-0.56764984130859;189.77952880859;0/4/0;1/0/0;2/9/1;3/6/1;4/5/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;1.642822265625;12.49750328064;-0.57600402832031;272.04014892578;0/0/0;1/0/0;2/5/1;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;2.5347290039063;6.9387321472168;-0.20298767089844;159.70381469727;0/3/1;1/0/0;2/5/2;3/5/2;4/2/0;5/0/0;6/1/3;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
279228114;-11.734680175781;18.750513076782;-0.035064697265625;23.184113693237;0/2/2;1/0/0;2/2/0;3/2/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;3
450271392;-4.5588989257813;22.353923797607;-0.56000518798828;13.837906837463;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;3
4188740747;-0.9521484375;18.75630569458;-0.29718017578125;-48.959999084473;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;2
2600762591;-31.840637207031;-3.4384803771973;0.44069671630859;237.34228820801;0/7/1;1/0/0;2/7/0;3/8/3;4/5/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
967594628;-1.6597290039063;22.329448699951;-0.55992889404297;285.9864074707;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_LOW_CLASS;NOANIM;NOANIM;3
279228114;-32.937072753906;-2.4253196716309;0.44069671630859;341.03814697266;0/3/2;1/0/0;2/6/2;3/3/2;4/2/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;9.7188720703125;-1.9393692016602;-0.79987335205078;86.88433380127;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_FACILITY;NOANIM;NOANIM;1
553826858;-45.362609863281;4.3761596679688;0.44078826904297;79.912719726563;0/0/0;1/0/0;2/2/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE;NOANIM;NOANIM;1
279228114;-9.0543212890625;1.9701614379883;-0.25605010986328;283.49948120117;0/1/2;1/0/0;2/1/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;-31.920166015625;-20.994541168213;0.45345306396484;324.58986206055;0/4/2;1/0/0;2/8/0;3/5/1;4/4/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1415150394;-0.20037841796875;17.305589675903;-0.27812957763672;291.30180053711;0/0/0;1/-1/255;2/0/0;3/0/0;4/0/0;5/-1/255;6/0/0;7/-1/255;8/-1/255;9/-1/255;10/-1/255;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
-1860463438;11.875;6.2086639404297;-1.0001907348633;341.09956665039;0/7/1;1/0/0;2/9/0;3/8/1;4/4/2;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;-36.5263671875;7.1977615356445;0.44081878662109;297.2998046875;0/3/1;1/0/0;2/7/1;3/4/0;4/3/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT;NOANIM;NOANIM;3
279228114;-52.217956542969;-14.667984008789;1.4408645629883;221.72512817383;0/4/1;1/0/0;2/9/1;3/6/0;4/5/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
-1860463438;-37.584777832031;7.0065307617188;0.44082641601563;26.39906578064;0/6/0;1/0/0;2/8/0;3/9/4;4/4/1;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-28.341613769531;-0.0093727111816406;0.4407958984375;352.19938964844;0/0/2;1/0/0;2/2/0;3/1/0;4/1/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
279228114;-53.113586425781;-14.065052032471;1.4428405761719;59.699509429932;0/1/1;1/0/0;2/3/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1860463438;-53.912780761719;-6.995174407959;1.3979949951172;305.39948730469;0/9/0;1/0/0;2/12/0;3/12/0;4/7/2;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-63.516784667969;-3.9238929748535;1.4413681030273;65.999870300293;0/1/2;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-59.064392089844;-22.138889312744;1.4408569335938;184.74311828613;0/3/1;1/0/0;2/3/1;3/0/2;4/1/0;5/0/0;6/0/1;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_STAND_MOBILE;NOANIM;NOANIM;1
-1860463438;-54.520812988281;-31.258235931396;1.0408248901367;43.798686218262;0/5/0;1/0/0;2/6/1;3/6/2;4/3/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MAID_CLEAN;NOANIM;NOANIM;1
553826858;-41.940856933594;1.7172203063965;0.44113922119141;192.89949035645;0/4/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_FACILITY;NOANIM;NOANIM;1
-1694204705;-23.35546875;-7.073802947998;-0.15924835205078;154.49736022949;0/6/2;1/0/0;2/6/2;3/8/1;4/6/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRUG_DEALER_HARD;NOANIM;NOANIM;3
553826858;-30.47998046875;-29.697948455811;0.44069671630859;175.4988067627;0/8/0;1/0/0;2/0/0;3/8/1;4/6/1;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STUPOR_CLUBHOUSE;NOANIM;NOANIM;3
279228114;-15.423950195313;-28.315578460693;0.82003021240234;360.24982910156;0/0/0;1/0/0;2/0/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MOBILE;NOANIM;NOANIM;3
-1860463438;-31.451416015625;-28.793575286865;0.44167327880859;88.578625488281;0/8/1;1/0/0;2/10/2;3/11/1;4/6/1;5/0/0;6/4/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_JOG_STANDING;NOANIM;NOANIM;3
279228114;-25.285339355469;-20.848438262939;0.44087219238281;18.0;0/0/1;1/0/0;2/1/0;3/2/0;4/1/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-26.120056152344;-21.742847442627;0.44075775146484;89.999969482422;0/2/0;1/0/0;2/5/0;3/1/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-12.018310546875;-26.574199676514;1.452751159668;296.35328369141;0/4/1;1/0/0;2/8/1;3/5/0;4/4/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_DECKCHAIR_DRINK;intro_loop_ped_d;anim@heists@fleeca_bank@hostages@intro;3
553826858;-22.664489746094;-27.572383880615;0.83346557617188;275.99908447266;0/6/0;1/0/0;2/3/0;3/7/1;4/4/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
279228114;-23.663146972656;-27.995822906494;0.84578704833984;128.99987792969;0/0/2;1/0/0;2/5/1;3/1/0;4/1/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
337826907;-43.363220214844;-25.368274688721;1.0408325195313;248.69999694824;0/2/1;1/0/0;2/2/0;3/0/3;4/1/0;5/0/0;6/0/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND;NOANIM;NOANIM;3
@@ -1,86 +0,0 @@
2434503858;-13.5732421875;19.082153320313;-0.048599243164063;30.89669342041;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
2526968950;-18.288818359375;-4.8194274902344;0.16125869750977;354.98463745117;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL_EATING;NOANIM;NOANIM;3
2600762591;-4.771728515625;-26.612487792969;0.40897369384766;322.75564575195;0/3/0;1/0/0;2/3/0;3/5/0;4/3/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-39.382568359375;-3.3134155273438;0.069168090820313;159.56734924316;0/9/0;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-37.111328125;-11.207763671875;0.45345306396484;162.71843261719;0/2/1;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;-0.416015625;12.747192382813;-0.59174346923828;45.252239227295;0/4/0;1/0/0;2/8/1;3/5/2;4/4/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;-5.093994140625;-2.5357055664063;-0.99837493896484;109.15727233887;0/11/2;1/0/0;2/14/1;3/13/2;4/8/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-33.892578125;1.8054809570313;0.46534729003906;154.19045715332;0/12/2;1/0/0;2/15/1;3/15/2;4/10/2;5/0/0;6/7/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;2
279228114;-21.4853515625;-24.458312988281;0.408935546875;205.65797424316;0/3/0;1/0/0;2/7/0;3/3/1;4/2/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
337826907;-0.5859375;-36.301284790039;1.2090873718262;43.745446014404;0/4/0;1/1/0;2/4/0;3/1/0;4/0/0;5/0/0;6/1/0;7/2/0;8/3/0;9/0/0;10/1/0;11/1/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;1
2600762591;3.93994140625;-3.7120666503906;-1.0216178894043;217.79685974121;0/10/2;1/0/0;2/15/0;3/1/1;4/11/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
337826907;-3.352294921875;-5.2702331542969;-1.0163269042969;303.4961730957;0/5/0;1/0/0;2/5/0;3/0/4;4/1/0;5/0/0;6/0/0;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;1
279228114;11.18408203125;4.2882385253906;-0.83496475219727;21.42064781189;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-42.044189453125;-35.110260009766;1.4089164733887;49.039932250977;0/6/1;1/0/0;2/3/0;3/6/0;4/3/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-1.07666015625;29.732391357422;-0.55995941162109;191.12475585938;0/5/2;1/0/0;2/4/0;3/5/2;4/2/2;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;check_out_b;clothingshirt;3
2600762591;-12.741943359375;5.5121154785156;-0.59174728393555;116.42286682129;0/11/1;1/0/0;2/11/0;3/12/0;4/10/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
553826858;-20.212158203125;8.3562622070313;-0.012851715087891;58.932732391357;0/1/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_DECKCHAIR_DRINK;NOANIM;NOANIM;3
2434503858;-22.789794921875;-31.328582763672;0.007293701171875;111.67665863037;0/6/1;1/0/0;2/8/1;3/9/5;4/4/3;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
1278330017;-22.383544921875;-23.826431274414;0.44069671630859;41.859588623047;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MUSCLE_FLEX;NOANIM;NOANIM;2
279228114;-24.526611328125;-16.135284423828;0.50440216064453;36.659759521484;0/1/2;1/0/0;2/4/0;3/1/2;4/1/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2600762591;-10.65771484375;5.421630859375;-0.59173202514648;253.89924621582;0/0/0;1/0/0;2/12/0;3/0/0;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;2
279228114;3.62109375;11.665588378906;-1.0057983398438;54.070674133301;0/4/2;1/0/0;2/9/0;3/6/2;4/5/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-16.979736328125;-17.825958251953;-0.16488265991211;174.93353271484;0/4/1;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
553826858;4.57373046875;-25.612670898438;0.40896987915039;233.4513092041;0/5/0;1/0/0;2/4/0;3/3/0;4/2/0;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
2600762591;-15.71630859375;-36.045700073242;0.40888595581055;225.82611083984;0/13/2;1/0/0;2/9/0;3/13/2;4/9/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;-2.894775390625;14.588287353516;-0.59175872802734;321.28866577148;0/3/2;1/0/0;2/7/2;3/4/2;4/3/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE;interview_short_anton;missmic4premiere;3
279228114;-28.95751953125;9.9549865722656;-0.006988525390625;232.8263671875;0/0/2;1/0/0;2/0/0;3/1/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_COMPUTER;NOANIM;NOANIM;2
553826858;-5.917236328125;-27.344268798828;0.40898132324219;147.80230712891;0/7/1;1/0/0;2/3/0;3/7/2;4/4/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;10.595947265625;7.5359802246094;-1.0052909851074;269.87001342773;0/7/0;1/0/0;2/3/0;3/6/1;4/4/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;3
553826858;-0.306640625;27.939727783203;-0.55995941162109;183.16337585449;0/7/2;1/0/0;2/3/0;3/6/2;4/3/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_WINDOW_SHOP_BROWSE;NOANIM;NOANIM;3
4150317356;-13.653076171875;-7.4779968261719;-0.19110870361328;75.460891723633;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_STANDING;NOANIM;NOANIM;3
553826858;-19.68798828125;1.8592224121094;-0.5653076171875;25.839921951294;0/3/1;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_PATROL;NOANIM;NOANIM;1
279228114;-7.8095703125;8.1486511230469;-0.59173202514648;145.72909545898;0/2/2;1/0/0;2/5/0;3/2/1;4/1/1;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;-6.884521484375;9.6104736328125;-0.59170532226563;351.57077026367;0/9/1;1/0/0;2/11/2;3/12/2;4/7/1;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;16.960205078125;3.6361999511719;-0.86564254760742;43.004718780518;0/0/1;1/0/0;2/5/1;3/2/0;4/0/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_CASINO_TERRACE;NOANIM;NOANIM;1
279228114;-20.5947265625;-5.3287963867188;-0.15920257568359;30.557552337646;0/1/2;1/0/0;2/2/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
55858852;10.192626953125;0.016754150390625;-0.63654327392578;179.74023132324;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
3138220789;-32.482177734375;-13.078338623047;0.41983413696289;37.753075408936;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MOBILE_FILM_SHOCKING;NOANIM;NOANIM;3
279228114;-10.235107421875;0.53091430664063;-0.59174346923828;210.88955688477;0/2/1;1/0/0;2/1/1;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
2434503858;8.063720703125;27.936950683594;-0.54164123535156;129.04111938477;0/11/1;1/0/0;2/13/0;3/14/1;4/9/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-5.639892578125;-18.439712524414;-0.19110870361328;202.60032653809;0/0/1;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_FACILITY;NOANIM;NOANIM;1
2600762591;0.703857421875;12.374053955078;-0.59170913696289;309.30047607422;0/12/0;1/0/0;2/8/1;3/13/1;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-38.900146484375;-50.631622314453;1.4089202880859;189.63984680176;0/2/2;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CLUBHOUSE;NOANIM;NOANIM;1
2434503858;6.26416015625;4.3052062988281;-1.030330657959;202.58579711914;0/10/1;1/0/0;2/12/2;3/12/1;4/7/0;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;5.165771484375;11.414093017578;-1.0058135986328;251.85249023438;0/1/1;1/0/0;2/4/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MAP;NOANIM;NOANIM;1
553826858;-16.988525390625;3.79296875;-0.59170913696289;121.62433624268;0/8/1;1/0/0;2/1/0;3/8/0;4/6/0;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;1
279228114;-6.27294921875;8.4688110351563;-0.59170532226563;243.84157104492;0/2/1;1/0/0;2/3/0;3/0/1;4/1/1;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT;NOANIM;NOANIM;2
553826858;-26.22265625;-20.429656982422;0.40893173217773;133.40716552734;0/3/0;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
2600762591;-21.150146484375;-6.3165283203125;-0.19109344482422;158.85913085938;0/9/0;1/0/0;2/1/0;3/10/4;4/7/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
279228114;-8.770751953125;-30.092514038086;0.40898132324219;310.716796875;0/3/1;1/0/0;2/6/0;3/3/0;4/2/0;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;-10.02490234375;2.1296691894531;-0.59174728393555;329.93286132813;0/0/0;1/0/0;2/5/1;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-1.3779296875;17.9814453125;-0.20298767089844;159.70381469727;0/3/1;1/0/0;2/5/2;3/5/2;4/2/0;5/0/0;6/1/3;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
279228114;-20.5439453125;7.7368774414063;-0.018733978271484;59.994819641113;0/2/2;1/0/0;2/2/0;3/2/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;3
450271392;-9.806396484375;19.048797607422;-0.59174728393555;324.65447998047;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;3
4188740747;-12.35107421875;15.538024902344;-0.28887557983398;4.6533505439758;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;2
2600762591;-23.363037109375;-38.781524658203;0.3933219909668;135.68293762207;0/7/1;1/0/0;2/7/0;3/8/3;4/5/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
967594628;-10.4072265625;18.010192871094;-0.59170532226563;152.51422119141;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_LOW_CLASS;NOANIM;NOANIM;3
279228114;-39.653076171875;-22.253692626953;0.408935546875;163.98332214355;0/3/2;1/0/0;2/6/2;3/3/2;4/2/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;17.581298828125;2.9004821777344;-0.79987335205078;86.88433380127;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_FACILITY;NOANIM;NOANIM;1
553826858;-35.187744140625;10.183898925781;0.44078826904297;79.912719726563;0/0/0;1/0/0;2/2/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE;NOANIM;NOANIM;1
279228114;-11.266357421875;1.4255676269531;-0.59174728393555;83.41187286377;0/1/2;1/0/0;2/1/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;-36.900146484375;-40.341003417969;1.4089393615723;235.8763885498;0/4/2;1/0/0;2/8/0;3/5/1;4/4/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1415150394;-10.84375;15.41650390625;-0.29487609863281;353.35062866211;0/0/0;1/-1/255;2/0/0;3/0/0;4/0/0;5/-1/255;6/0/0;7/-1/255;8/-1/255;9/-1/255;10/-1/255;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
-1860463438;11.334228515625;2.9382934570313;-0.83710479736328;194.09878540039;0/7/1;1/0/0;2/9/0;3/8/1;4/4/2;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;-41.084228515625;-3.5946655273438;0.44081878662109;297.2998046875;0/3/1;1/0/0;2/7/1;3/4/0;4/3/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT;NOANIM;NOANIM;3
279228114;-9.53076171875;-31.380828857422;0.40898132324219;150.59912109375;0/4/1;1/0/0;2/9/1;3/6/0;4/5/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
-1860463438;-26.864990234375;2.2797546386719;0.44082641601563;28.199049758911;0/6/0;1/0/0;2/8/0;3/9/4;4/4/1;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-22.1328125;-9.9440307617188;0.4407958984375;352.19938964844;0/0/2;1/0/0;2/2/0;3/1/0;4/1/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
279228114;-40.210205078125;-21.170944213867;0.38017654418945;59.21212387085;0/1/1;1/0/0;2/3/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1860463438;12.467529296875;3.3342590332031;-0.83204650878906;229.77044677734;0/9/0;1/0/0;2/12/0;3/12/0;4/7/2;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-23.667236328125;-44.602325439453;1.0090484619141;263.33177490234;0/1/2;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-54.858154296875;-27.075225830078;1.0408248901367;238.19868774414;0/3/2;1/0/0;2/3/2;3/1/3;4/1/0;5/0/0;6/0/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-20.707275390625;6.1807250976563;-0.59172439575195;60.761502075195;0/3/1;1/0/0;2/3/1;3/0/2;4/1/0;5/0/0;6/0/1;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_STAND_MOBILE;NOANIM;NOANIM;1
-1860463438;-29.437255859375;-56.013214111328;0.99850463867188;57.2177734375;0/5/0;1/0/0;2/6/1;3/6/2;4/3/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MAID_CLEAN;NOANIM;NOANIM;1
553826858;-51.260986328125;8.8157653808594;0.44113922119141;192.89949035645;0/4/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_FACILITY;NOANIM;NOANIM;1
-1694204705;-26.25;4.2784729003906;-0.5504035949707;103.49549407959;0/6/2;1/0/0;2/6/2;3/8/1;4/6/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRUG_DEALER_HARD;NOANIM;NOANIM;3
553826858;-11.3466796875;-42.34944152832;0.40894317626953;207.55474853516;0/8/0;1/0/0;2/0/0;3/8/1;4/6/1;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STUPOR_CLUBHOUSE;NOANIM;NOANIM;3
279228114;-8.035400390625;-37.1328125;0.82003021240234;360.24982910156;0/0/0;1/0/0;2/0/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MOBILE;NOANIM;NOANIM;3
-1860463438;-13.244873046875;-41.6650390625;0.40895462036133;80.652603149414;0/8/1;1/0/0;2/10/2;3/11/1;4/6/1;5/0/0;6/4/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_JOG_STANDING;NOANIM;NOANIM;3
279228114;-15.371337890625;-27.090316772461;0.44087219238281;18.0;0/0/1;1/0/0;2/1/0;3/2/0;4/1/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;4.607666015625;-24.341110229492;0.40898895263672;342.3327331543;0/2/0;1/0/0;2/5/0;3/1/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;base;anim@amb@office@boardroom@boss@female@;1
279228114;3.045654296875;-30.727813720703;0.80910110473633;14.54231262207;0/4/1;1/0/0;2/8/1;3/5/0;4/4/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_SLUMPED;NOANIM;NOANIM;3
553826858;-30.8310546875;-35.971939086914;1.0158615112305;272.70567626953;0/6/0;1/0/0;2/3/0;3/7/1;4/4/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
279228114;-23.257080078125;-16.341064453125;0.44073867797852;263.99914550781;0/0/2;1/0/0;2/5/1;3/1/0;4/1/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
279228114;-21.9384765625;-30.499206542969;0.0088920593261719;305.99966430664;0/2/0;1/0/0;2/0/1;3/1/1;4/1/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;base;anim@amb@office@boardroom@boss@female@;3
279228114;-21.723388671875;-38.674728393555;0.40880966186523;277.17681884766;0/3/0;1/0/0;2/6/1;3/4/1;4/3/0;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
@@ -1,77 +0,0 @@
2434503858;-8.7872924804688;23.961009979248;-0.25996398925781;-0.020168560743332;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
2526968950;16.277465820313;18.272291183472;-0.11618041992188;326.27932739258;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL_EATING;NOANIM;NOANIM;3
2600762591;-18.864318847656;-19.675247192383;-0.70819091796875;54.179363250732;0/3/0;1/0/0;2/3/0;3/5/0;4/3/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-12.779235839844;15.591951370239;-0.67390441894531;110.77623748779;0/9/0;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
553826858;30.58642578125;-5.018985748291;-0.7552490234375;68.124870300293;0/2/1;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;-4.3040161132813;-32.721099853516;-0.67387390136719;336.61962890625;0/4/0;1/0/0;2/8/1;3/5/2;4/4/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;11.405029296875;-6.0403289794922;-0.6871337890625;86.056533813477;0/11/2;1/0/0;2/14/1;3/13/2;4/8/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-13.685974121094;-18.847267150879;-0.67822265625;217.37690734863;0/12/2;1/0/0;2/15/1;3/15/2;4/10/2;5/0/0;6/7/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;2
279228114;-28.88818359375;-14.186309814453;-0.67391967773438;63.763027191162;0/3/0;1/0/0;2/7/0;3/3/1;4/2/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
337826907;1.8112182617188;-7.6772880554199;-0.69148254394531;191.28015136719;0/5/0;1/0/0;2/5/0;3/0/4;4/1/0;5/0/0;6/0/0;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;1
279228114;-2.0689086914063;18.453989028931;-0.66619873046875;112.45561523438;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;30.411071777344;3.8069267272949;-0.67398071289063;234.56781005859;0/6/1;1/0/0;2/3/0;3/6/0;4/3/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-0.23419189453125;13.93713760376;-0.67386627197266;48.884963989258;0/5/2;1/0/0;2/4/0;3/5/2;4/2/2;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;check_out_b;clothingshirt;3
2600762591;-8.1416625976563;6.1239776611328;-0.66889953613281;342.76519775391;0/11/1;1/0/0;2/11/0;3/12/0;4/10/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
553826858;30.428283691406;-14.059211730957;0.030380249023438;216.07926635742;0/1/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_DECKCHAIR_DRINK;NOANIM;NOANIM;3
2434503858;-8.68505859375;5.3419342041016;-0.66512298583984;144.89999084473;0/6/1;1/0/0;2/8/1;3/9/5;4/4/3;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
1278330017;-14.859130859375;-18.609802246094;-0.6590576171875;92.956588745117;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MUSCLE_FLEX;NOANIM;NOANIM;2
279228114;12.797424316406;-26.692459106445;-0.67387390136719;186.74208068848;0/1/2;1/0/0;2/4/0;3/1/2;4/1/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2600762591;-5.9449462890625;12.739471435547;-0.66284942626953;221.87998657227;0/0/0;1/0/0;2/12/0;3/0/0;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;2
279228114;-10.22900390625;2.704345703125;-0.65725708007813;106.49894714355;0/4/2;1/0/0;2/9/0;3/6/2;4/5/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-14.779968261719;-25.711486816406;-0.67388153076172;174.93353271484;0/4/1;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
553826858;10.816284179688;-3.3903579711914;-0.69092559814453;179.86836242676;0/5/0;1/0/0;2/4/0;3/3/0;4/2/0;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
2600762591;-7.91845703125;-4.1009788513184;-0.65665435791016;274.61987304688;0/13/2;1/0/0;2/9/0;3/13/2;4/9/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;14.529724121094;-3.6628456115723;-0.68708801269531;208.11218261719;0/3/2;1/0/0;2/7/2;3/4/2;4/3/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SECURITY_SHINE_TORCH;interview_short_anton;missmic4premiere;3
279228114;4.1708984375;24.064912796021;-0.10147094726563;139.71432495117;0/0/2;1/0/0;2/0/0;3/1/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_COMPUTER;NOANIM;NOANIM;2
553826858;-15.090759277344;-14.147415161133;-0.66891479492188;45.870944976807;0/7/1;1/0/0;2/3/0;3/7/2;4/4/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;11.544921875;-9.9813842773438;-0.7996826171875;229.26098632813;0/7/0;1/0/0;2/3/0;3/6/1;4/4/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;3
553826858;8.3779296875;19.84729385376;-0.733154296875;321.16220092773;0/7/2;1/0/0;2/3/0;3/6/2;4/3/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_WINDOW_SHOP_BROWSE;NOANIM;NOANIM;3
4150317356;-22.207153320313;-24.72492980957;-0.67391204833984;74.806259155273;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_STANDING;NOANIM;NOANIM;3
553826858;-8.6715087890625;-5.350414276123;-0.67018890380859;-148.45899963379;0/3/1;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;-1.6362915039063;19.790523529053;-0.64662170410156;25.383219909668;0/2/2;1/0/0;2/5/0;3/2/1;4/1/1;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;-7.1082763671875;12.82543182373;-0.66837310791016;93.391899108887;0/9/1;1/0/0;2/11/2;3/12/2;4/7/1;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;11.49462890625;-2.0588569641113;-0.68126678466797;296.16398925781;0/0/1;1/0/0;2/5/1;3/2/0;4/0/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_CASINO_TERRACE;NOANIM;NOANIM;1
279228114;1.5167846679688;-24.610343933105;-0.75183868408203;6.0595998764038;0/1/2;1/0/0;2/2/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
55858852;24.944091796875;-13.559906005859;-0.35398101806641;140.65014343262;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
3138220789;18.698974609375;9.9356842041016;-0.67382049560547;185.33483581543;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MOBILE_FILM_SHOCKING;NOANIM;NOANIM;3
279228114;-9.4822998046875;-4.0004692077637;-0.67018890380859;42.865997314453;0/2/1;1/0/0;2/1/1;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
2434503858;5.6478271484375;13.493465423584;-0.66499328613281;165.04089355469;0/11/1;1/0/0;2/13/0;3/14/1;4/9/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
2600762591;23.150939941406;-14.019443511963;-0.57590484619141;141.49633789063;0/12/0;1/0/0;2/8/1;3/13/1;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;12.711547851563;19.106533050537;-0.67390441894531;330.55627441406;0/2/2;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CLUBHOUSE;NOANIM;NOANIM;1
2434503858;7.3496704101563;0.65901947021484;-1.0001678466797;181.88602905273;0/10/1;1/0/0;2/12/2;3/12/1;4/7/0;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;9.3544921875;7.8700561523438;-1.0359954833984;43.959365844727;0/1/1;1/0/0;2/4/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MAP;NOANIM;NOANIM;1
553826858;-12.275817871094;16.312839508057;-0.67397308349609;29.177249908447;0/8/1;1/0/0;2/1/0;3/8/0;4/6/0;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;1
279228114;4.7060546875;12.79080581665;-0.66825103759766;243.84157104492;0/2/1;1/0/0;2/3/0;3/0/1;4/1/1;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT;NOANIM;NOANIM;2
553826858;-17.613159179688;-1.2354278564453;-0.67396545410156;96.303718566895;0/3/0;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
2600762591;24.3603515625;10.715633392334;-0.67380523681641;298.25578613281;0/9/0;1/0/0;2/1/0;3/10/4;4/7/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
279228114;-7.5050659179688;-7.9612846374512;-0.67391967773438;272.57165527344;0/4/0;1/0/0;2/9/1;3/6/1;4/5/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;-0.59619140625;18.482517242432;-0.66362762451172;280.13953857422;0/0/0;1/0/0;2/5/1;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;3.2254028320313;3.212947845459;-0.20298767089844;153.4035369873;0/3/1;1/0/0;2/5/2;3/5/2;4/2/0;5/0/0;6/1/3;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
450271392;0.6334228515625;35.269824981689;-0.67389678955078;339.43181152344;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;3
2600762591;14.848815917969;18.41828918457;-0.67387390136719;-1.1043182611465;0/7/1;1/0/0;2/7/0;3/8/3;4/5/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
967594628;-4.896728515625;28.99919128418;-0.67389678955078;350.97969360352;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_LOW_CLASS;NOANIM;NOANIM;3
279228114;-4.9805908203125;-33.754745483398;-0.67396545410156;92.30640411377;0/3/2;1/0/0;2/6/2;3/3/2;4/2/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;9.8928833007813;-2.8846740722656;-0.69168090820313;91.536666870117;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_FACILITY;NOANIM;NOANIM;1
553826858;-17.99072265625;-8.7537727355957;-0.67391967773438;258.76701660156;0/0/0;1/0/0;2/2/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE;NOANIM;NOANIM;1
279228114;-8.9125366210938;2.7949981689453;-0.64796447753906;274.49938964844;0/1/2;1/0/0;2/1/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;31.346923828125;-5.9255180358887;-0.76172637939453;225.64598083496;0/4/2;1/0/0;2/8/0;3/5/1;4/4/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1860463438;11.875;6.2086639404297;-1.0001907348633;341.09956665039;0/7/1;1/0/0;2/9/0;3/8/1;4/4/2;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;24.313049316406;11.93147277832;-0.67381286621094;292.57995605469;0/3/1;1/0/0;2/7/1;3/4/0;4/3/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT;NOANIM;NOANIM;3
279228114;15.574768066406;1.7040901184082;-0.69168853759766;143.32348632813;0/4/1;1/0/0;2/9/1;3/6/0;4/5/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
-1860463438;-14.354614257813;-9.681468963623;-0.67396545410156;154.81707763672;0/6/0;1/0/0;2/8/0;3/9/4;4/4/1;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT_CLUBHOUSE;NOANIM;NOANIM;3
279228114;0.3314208984375;12.971771240234;-0.67397308349609;158.36950683594;0/1/1;1/0/0;2/3/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1860463438;-14.920471191406;-8.4204750061035;-0.67397308349609;45.343883514404;0/9/0;1/0/0;2/12/0;3/12/0;4/7/2;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;17.108093261719;0.73680114746094;-0.67396545410156;319.08322143555;0/1/2;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-6.0908203125;19.376499176025;-0.67393493652344;56.572829437256;0/3/2;1/0/0;2/3/2;3/1/3;4/1/0;5/0/0;6/0/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;15.346069335938;-14.009948730469;-0.67397308349609;31.769347000122;0/3/1;1/0/0;2/3/1;3/0/2;4/1/0;5/0/0;6/0/1;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_STAND_MOBILE;NOANIM;NOANIM;1
-1860463438;0.9892578125;23.701154708862;-0.7557373046875;79.969654846191;0/5/0;1/0/0;2/6/1;3/6/2;4/3/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MAID_CLEAN;NOANIM;NOANIM;1
553826858;-7.4312133789063;-15.935153961182;-0.67396545410156;164.74014587402;0/4/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_FACILITY;NOANIM;NOANIM;1
-1694204705;-25.307373046875;-4.5838394165039;-0.66722869873047;118.49718475342;0/6/2;1/0/0;2/6/2;3/8/1;4/6/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRUG_DEALER_HARD;NOANIM;NOANIM;3
553826858;23.643737792969;4.3163871765137;-0.687255859375;126.12964630127;0/8/0;1/0/0;2/0/0;3/8/1;4/6/1;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STUPOR_CLUBHOUSE;NOANIM;NOANIM;3
279228114;-4.7685546875;-24.110244750977;-0.66854858398438;32.302276611328;0/0/0;1/0/0;2/0/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MOBILE;NOANIM;NOANIM;3
-1860463438;23.78125;5.5352439880371;-0.66900634765625;-0.32176947593689;0/8/1;1/0/0;2/10/2;3/11/1;4/6/1;5/0/0;6/4/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_JOG_STANDING;NOANIM;NOANIM;3
279228114;22.073547363281;-24.316719055176;-0.67396545410156;202.77962036133;0/0/1;1/0/0;2/1/0;3/2/0;4/1/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-26.83056640625;-21.726509094238;-0.67394256591797;171.5920715332;0/2/0;1/0/0;2/5/0;3/1/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;2.4996337890625;-25.996803283691;-0.5816650390625;244.27853393555;0/4/1;1/0/0;2/8/1;3/5/0;4/4/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_SLUMPED;NOANIM;NOANIM;3
553826858;-28.075927734375;-15.321235656738;-0.65979766845703;130.39946746826;0/6/0;1/0/0;2/3/0;3/7/1;4/4/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
279228114;-27.674072265625;-13.950191497803;-0.67387390136719;350.48880004883;0/0/2;1/0/0;2/5/1;3/1/0;4/1/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
@@ -1,67 +0,0 @@
2434503858;-19.838256835938;-29.570804595947;-1.1579742431641;97.981251525879;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
2526968950;-3.2247314453125;6.0386700630188;-1.1584243774414;5.1603555679321;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL_EATING;NOANIM;NOANIM;3
2600762591;-18.581481933594;-2.7016830444336;3.2426452636719;122.91455841064;0/3/0;1/0/0;2/3/0;3/5/0;4/3/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-18.634338378906;-24.216781616211;3.2424926757812;258.56672668457;0/9/0;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
279228114;-3.8907470703125;-7.5634326934814;-1.1578826904297;183.09489440918;0/4/0;1/0/0;2/8/1;3/5/2;4/4/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;-20.777893066406;-46.473964691162;-1.1580352783203;294.24591064453;0/11/2;1/0/0;2/14/1;3/13/2;4/8/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-36.887329101562;-4.6235961914062;3.2421417236328;70.489926147461;0/12/2;1/0/0;2/15/1;3/15/2;4/10/2;5/0/0;6/7/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;2
279228114;-17.838562011719;25.154922485352;-1.1591644287109;351.74349975586;0/3/0;1/0/0;2/7/0;3/3/1;4/2/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
337826907;-41.81640625;-19.90637588501;4.0841064453125;69.922569274902;0/4/0;1/1/0;2/4/0;3/1/0;4/0/0;5/0/0;6/1/0;7/2/0;8/3/0;9/0/0;10/1/0;11/1/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;1
2600762591;-16.094177246094;-12.426784515381;3.2424926757812;311.759765625;0/10/2;1/0/0;2/15/0;3/1/1;4/11/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
337826907;-14.289001464844;-15.702922821045;3.2422027587891;270.19537353516;0/5/0;1/0/0;2/5/0;3/0/4;4/1/0;5/0/0;6/0/0;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;1
279228114;-64.581298828125;-47.360157012939;-1.1587371826172;77.157054138184;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-21.361694335938;-24.310531616211;-1.1582260131836;134.51545715332;0/5/2;1/0/0;2/4/0;3/5/2;4/2/2;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;check_out_b;clothingshirt;3
2600762591;-23.511413574219;-16.296873092651;3.2424926757812;262.96563720703;0/11/1;1/0/0;2/11/0;3/12/0;4/10/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
2434503858;-17.903015136719;19.85259437561;-1.1586074829102;331.38000488281;0/6/1;1/0/0;2/8/1;3/9/5;4/4/3;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
1278330017;-23.456359863281;-1.909478187561;3.2424621582031;23.738506317139;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MUSCLE_FLEX;NOANIM;NOANIM;2
279228114;-42.659729003906;-51.848621368408;-1.1586303710938;62.385772705078;0/1/2;1/0/0;2/4/0;3/1/2;4/1/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2600762591;-2.8207397460938;-19.76473236084;-1.1576538085938;88.169021606445;0/0/0;1/0/0;2/12/0;3/0/0;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;2
279228114;-41.066284179688;-57.056888580322;-1.1588287353516;41.132080078125;0/4/2;1/0/0;2/9/0;3/6/2;4/5/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-59.837280273438;-14.758823394775;-1.1579437255859;349.84075927734;0/4/1;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
553826858;-30.496154785156;-54.54740524292;-1.1585845947266;34.151985168457;0/5/0;1/0/0;2/4/0;3/3/0;4/2/0;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
279228114;-27.9765625;-7.6263027191162;3.2424697875977;184.26542663574;0/3/2;1/0/0;2/7/2;3/4/2;4/3/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SECURITY_SHINE_TORCH;interview_short_anton;missmic4premiere;3
553826858;-34.851257324219;-0.90953826904297;3.2424926757812;102.87080383301;0/7/1;1/0/0;2/3/0;3/7/2;4/4/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-18.226257324219;-7.8966808319092;3.2424926757812;263.46086425781;0/7/0;1/0/0;2/3/0;3/6/1;4/4/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;3
553826858;-23.898803710938;-10.473737716675;3.2424926757812;-148.45899963379;0/3/1;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;-37.531372070312;20.085004806519;-1.1582336425781;247.05068969727;0/2/2;1/0/0;2/5/0;3/2/1;4/1/1;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;-24.970703125;2.373908996582;3.2419586181641;104.87320709229;0/9/1;1/0/0;2/11/2;3/12/2;4/7/1;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;-23.373229980469;-12.906795501709;3.2424926757812;231.06343383789;0/0/1;1/0/0;2/5/1;3/2/0;4/0/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_CASINO_TERRACE;NOANIM;NOANIM;1
55858852;-24.515319824219;-16.84888458252;3.2424926757812;83.982151794434;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
279228114;-4.0256958007812;-6.6103439331055;-1.1578826904297;8.6422243118286;0/2/1;1/0/0;2/1/1;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
2434503858;-62.109436035156;-54.607326507568;-0.76171875;237.62396240234;0/11/1;1/0/0;2/13/0;3/14/1;4/9/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-26.574279785156;-9.4267177581787;3.2424926757812;146.17247009277;0/0/1;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_FACILITY;NOANIM;NOANIM;1
2600762591;-20.761779785156;-24.113594055176;-1.1578063964844;358.81484985352;0/12/0;1/0/0;2/8/1;3/13/1;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;0.9691162109375;-13.886451721191;-1.1577987670898;232.85092163086;0/2/2;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CLUBHOUSE;NOANIM;NOANIM;1
2434503858;-21.216735839844;-22.905567169189;-1.1572723388672;235.99612426758;0/10/1;1/0/0;2/12/2;3/12/1;4/7/0;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;-23.967529296875;3.2760448455811;3.2424545288086;344.47076416016;0/1/1;1/0/0;2/4/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MAP;NOANIM;NOANIM;1
553826858;-1.73388671875;-20.017433166504;-1.1577606201172;239.91159057617;0/8/1;1/0/0;2/1/0;3/8/0;4/6/0;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;1
279228114;-50.34912109375;-57.829402923584;-1.1599960327148;178.48895263672;0/2/1;1/0/0;2/3/0;3/0/1;4/1/1;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT;NOANIM;NOANIM;2
553826858;-6.7276611328125;-7.3364143371582;-1.1577987670898;113.85373687744;0/3/0;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
2600762591;-23.480895996094;2.1632041931152;3.242301940918;280.94766235352;0/9/0;1/0/0;2/1/0;3/10/4;4/7/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
279228114;-38.39892578125;20.574663162231;-1.1583251953125;81.252288818359;0/4/0;1/0/0;2/9/1;3/6/1;4/5/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;-17.408569335938;-1.9984741210938;3.2425231933594;291.28167724609;0/0/0;1/0/0;2/5/1;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-31.609375;-7.935697555542;3.2904663085938;159.70381469727;0/3/1;1/0/0;2/5/2;3/5/2;4/2/0;5/0/0;6/1/3;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
279228114;-32.47314453125;-54.054599761963;-0.6007080078125;138.40638427734;0/2/2;1/0/0;2/2/0;3/2/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;3
450271392;-27.932067871094;25.281848907471;-1.1593322753906;297.02154541016;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;3
4188740747;-30.648803710938;-28.622646331787;3.2215423583984;84.741188049316;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;2
2600762591;-22.3310546875;-2.6285591125488;3.2424926757812;237.34228820801;0/7/1;1/0/0;2/7/0;3/8/3;4/5/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
967594628;-17.1943359375;-3.2479820251465;3.2424011230469;234.16453552246;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_LOW_CLASS;NOANIM;NOANIM;3
279228114;-17.928466796875;18.786331176758;-1.1584548950195;151.4581451416;0/3/2;1/0/0;2/6/2;3/3/2;4/2/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;-41.748474121094;-52.03600692749;-1.1585006713867;294.05926513672;0/1/2;1/0/0;2/1/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
1415150394;-17.000854492188;-6.6426639556885;2.9756393432617;239.10246582031;0/0/0;1/-1/255;2/0/0;3/0/0;4/0/0;5/-1/255;6/0/0;7/-1/255;8/-1/255;9/-1/255;10/-1/255;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
-1860463438;-28.666687011719;13.520670890808;-1.1578521728516;42.178745269775;0/7/1;1/0/0;2/9/0;3/8/1;4/4/2;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;-23.137817382812;-3.1716976165771;3.2424774169922;189.8394317627;0/3/1;1/0/0;2/7/1;3/4/0;4/3/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT;NOANIM;NOANIM;3
279228114;-28.9453125;24.763179779053;-1.1584167480469;70.567970275879;0/4/1;1/0/0;2/9/1;3/6/0;4/5/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;-21.824951171875;-47.222465515137;-1.1579742431641;103.42781524658;0/1/1;1/0/0;2/3/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1860463438;-28.252807617188;-6.6486511230469;3.2424545288086;29.282115936279;0/9/0;1/0/0;2/12/0;3/12/0;4/7/2;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-52.179626464844;-16.19548034668;3.1614761352539;63.538203430176;0/1/2;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-30.06640625;-55.486919403076;-1.1589050292969;178.40603637695;0/3/2;1/0/0;2/3/2;3/1/3;4/1/0;5/0/0;6/0/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
-1860463438;-12.838806152344;13.818646430969;-1.1583099365234;266.32236938477;0/5/0;1/0/0;2/6/1;3/6/2;4/3/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MAID_CLEAN;NOANIM;NOANIM;1
-1694204705;-0.46539306640625;-5.6159629821777;-1.1578903198242;65.928462219238;0/6/2;1/0/0;2/6/2;3/8/1;4/6/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRUG_DEALER_HARD;NOANIM;NOANIM;3
553826858;-30.702453613281;12.143587112427;3.2414321899414;51.978393554688;0/8/0;1/0/0;2/0/0;3/8/1;4/6/1;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STUPOR_CLUBHOUSE;NOANIM;NOANIM;3
279228114;-30.720703125;-4.3775596618652;3.2424926757812;255.25027770996;0/0/0;1/0/0;2/0/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MOBILE;NOANIM;NOANIM;3
-1860463438;-67.253784179688;-48.930229187012;-0.76409912109375;354.1537902832;0/8/1;1/0/0;2/10/2;3/11/1;4/6/1;5/0/0;6/4/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_JOG_STANDING;NOANIM;NOANIM;3
279228114;-55.75927734375;-55.550403594971;-1.1589965820312;125.26559448242;0/0/1;1/0/0;2/1/0;3/2/0;4/1/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-24.664611816406;-12.861818313599;3.2424926757812;89.999969482422;0/2/0;1/0/0;2/5/0;3/1/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-36.048950195312;-3.2915649414062;3.2424926757812;31.740230560303;0/4/1;1/0/0;2/8/1;3/5/0;4/4/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_SLUMPED;NOANIM;NOANIM;3
279228114;-40.436889648438;-57.659236907959;-1.1587524414062;232.07540893555;0/0/2;1/0/0;2/5/1;3/1/0;4/1/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
@@ -1,85 +0,0 @@
2434503858;-2.3212890625;19.685930252075;-0.19699859619141;53.98041229248;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
2526968950;-18.206115722656;5.7392959594727;0.19771575927734;341.53660888672;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL_EATING;NOANIM;NOANIM;3
2600762591;-18.9736328125;-19.563507080078;0.44073486328125;54.179363250732;0/3/0;1/0/0;2/3/0;3/5/0;4/3/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-35.496276855469;-14.365493774414;0.069168090820313;159.56734924316;0/9/0;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-32.623840332031;-22.029472351074;0.45345306396484;162.71843261719;0/2/1;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;-20.952941894531;5.3609809875488;-0.15920257568359;100.40215301514;0/4/0;1/0/0;2/8/1;3/5/2;4/4/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;9.7550659179688;-9.0881958007813;-0.7998046875;202.15742492676;0/11/2;1/0/0;2/14/1;3/13/2;4/8/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;-31.058898925781;-9.5620651245117;0.46534729003906;154.19045715332;0/12/2;1/0/0;2/15/1;3/15/2;4/10/2;5/0/0;6/7/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;2
279228114;-34.730529785156;-13.453735351563;0.041999816894531;-30.239999771118;0/3/0;1/0/0;2/7/0;3/3/1;4/2/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
337826907;-22.536804199219;-30.468215942383;1.2356948852539;42.482411193848;0/4/0;1/1/0;2/4/0;3/1/0;4/0/0;5/0/0;6/1/0;7/2/0;8/3/0;9/0/0;10/1/0;11/1/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;1
2600762591;-9.4402465820313;7.5219421386719;-0.59600067138672;23.760000228882;0/10/2;1/0/0;2/15/0;3/1/1;4/11/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
337826907;13.319458007813;0.85515213012695;-0.97772979736328;253.39671020508;0/5/0;1/0/0;2/5/0;3/0/4;4/1/0;5/0/0;6/0/0;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;1
279228114;0.71099853515625;11.829982757568;-0.55995941162109;125.95603637695;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-33.015808105469;-3.6640548706055;0.44068908691406;144.64302062988;0/6/1;1/0/0;2/3/0;3/6/0;4/3/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;8.0192260742188;22.348573684692;-0.55995941162109;191.12475585938;0/5/2;1/0/0;2/4/0;3/5/2;4/2/2;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;check_out_b;clothingshirt;3
2600762591;-8.8323364257813;6.7239532470703;-0.59600067138672;222.76583557129;0/11/1;1/0/0;2/11/0;3/12/0;4/10/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
553826858;-12.514831542969;18.159801483154;0.035446166992188;29.78155708313;0/1/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_DECKCHAIR_DRINK;NOANIM;NOANIM;3
2434503858;-10.096435546875;6.5718841552734;-0.59600067138672;144.0;0/6/1;1/0/0;2/8/1;3/9/5;4/4/3;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
1278330017;-31.090637207031;-8.3707122802734;0.44069671630859;350.85969238281;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MUSCLE_FLEX;NOANIM;NOANIM;2
279228114;-35.916564941406;-13.393447875977;0.067863464355469;36.659759521484;0/1/2;1/0/0;2/4/0;3/1/2;4/1/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2600762591;-4.4703979492188;11.470481872559;-0.56785583496094;221.87998657227;0/0/0;1/0/0;2/12/0;3/0/0;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;2
279228114;-9.700927734375;1.3271408081055;-0.18263244628906;127.49905395508;0/4/2;1/0/0;2/9/0;3/6/2;4/5/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
553826858;-10.754211425781;-24.333236694336;0.44069671630859;174.93353271484;0/4/1;1/0/0;2/2/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
553826858;9.237548828125;-2.7126541137695;-0.82183837890625;347.5698425293;0/5/0;1/0/0;2/4/0;3/3/0;4/2/0;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
2600762591;-9.149658203125;-1.6710662841797;-0.15850067138672;-88.380012512207;0/13/2;1/0/0;2/9/0;3/13/2;4/9/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;8.816162109375;-8.6635551452637;-0.79960632324219;148.41452026367;0/3/2;1/0/0;2/7/2;3/4/2;4/3/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SECURITY_SHINE_TORCH;interview_short_anton;missmic4premiere;3
279228114;-17.254150390625;10.492946624756;-0.006988525390625;232.8263671875;0/0/2;1/0/0;2/0/0;3/1/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_COMPUTER;NOANIM;NOANIM;2
553826858;-17.671813964844;-20.024726867676;0.44068908691406;316.77166748047;0/7/1;1/0/0;2/3/0;3/7/2;4/4/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;11.544921875;-9.9813842773438;-0.7996826171875;229.26098632813;0/7/0;1/0/0;2/3/0;3/6/1;4/4/0;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;3
553826858;7.6781616210938;19.367282867432;-0.55995941162109;183.16337585449;0/7/2;1/0/0;2/3/0;3/6/2;4/3/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_WINDOW_SHOP_BROWSE;NOANIM;NOANIM;3
4150317356;-14.908264160156;1.1704330444336;-0.15917205810547;80.89026184082;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_STANDING;NOANIM;NOANIM;3
553826858;-8.1075439453125;-3.9700012207031;-0.18000030517578;-148.45899963379;0/3/1;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;0.44256591796875;12.959438323975;-0.56001281738281;35.283293914795;0/2/2;1/0/0;2/5/0;3/2/1;4/1/1;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
2434503858;-5.4266357421875;11.565483093262;-0.59600067138672;90.391998291016;0/9/1;1/0/0;2/11/2;3/12/2;4/7/1;5/0/0;6/5/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
279228114;9.5970458984375;-4.2397727966309;-0.79525756835938;231.06343383789;0/0/1;1/0/0;2/5/1;3/2/0;4/0/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_CASINO_TERRACE;NOANIM;NOANIM;1
279228114;-20.054809570313;5.9362335205078;-0.15920257568359;319.75811767578;0/1/2;1/0/0;2/2/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
55858852;8.4437255859375;-5.532341003418;-0.59566497802734;148.78296203613;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
3138220789;-34.43603515625;6.0365447998047;0.44069671630859;6.3087017059326;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MOBILE_FILM_SHOCKING;NOANIM;NOANIM;3
279228114;-8.7015380859375;-3.2505035400391;-0.16000366210938;42.865997314453;0/2/1;1/0/0;2/1/1;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
2434503858;5.7977294921875;16.442882537842;-0.54164123535156;129.04111938477;0/11/1;1/0/0;2/13/0;3/14/1;4/9/1;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;10.246154785156;6.8676071166992;-1.0139999389648;227.17247314453;0/0/1;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_FACILITY;NOANIM;NOANIM;1
2600762591;9.1370849609375;6.6064262390137;-1.000114440918;151.72654724121;0/12/0;1/0/0;2/8/1;3/13/1;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
553826858;-37.6806640625;-17.387680053711;0.43772125244141;3.7649207115173;0/2/2;1/0/0;2/2/0;3/1/0;4/0/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CLUBHOUSE;NOANIM;NOANIM;1
2434503858;7.3496704101563;0.65901947021484;-1.0001678466797;181.88602905273;0/10/1;1/0/0;2/12/2;3/12/1;4/7/0;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;9.3544921875;7.8700561523438;-1.0359954833984;43.959365844727;0/1/1;1/0/0;2/4/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MAP;NOANIM;NOANIM;1
553826858;-9.026123046875;16.151987075806;-0.57041931152344;4.5585260391235;0/8/1;1/0/0;2/1/0;3/8/0;4/6/0;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;EAR_TO_TEXT;NOANIM;NOANIM;1
279228114;5.8204956054688;12.256855010986;-0.56000518798828;243.84157104492;0/2/1;1/0/0;2/3/0;3/0/1;4/1/1;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT;NOANIM;NOANIM;2
553826858;-16.626098632813;5.791446685791;-0.56474304199219;45.98267364502;0/3/0;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
2600762591;5.399169921875;13.381549835205;-0.54174041748047;334.91586303711;0/9/0;1/0/0;2/1/0;3/10/4;4/7/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
2600762591;12.949584960938;19.80983543396;-0.56000518798828;275.12399291992;0/5/0;1/0/0;2/4/1;3/6/0;4/4/3;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;3
279228114;-8.8939819335938;14.51245880127;-0.56764984130859;189.77952880859;0/4/0;1/0/0;2/9/1;3/6/1;4/5/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
279228114;1.642822265625;12.497505187988;-0.57600402832031;272.04014892578;0/0/0;1/0/0;2/5/1;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;3
2434503858;2.5347290039063;6.9387321472168;-0.20298767089844;159.70381469727;0/3/1;1/0/0;2/5/2;3/5/2;4/2/0;5/0/0;6/1/3;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SEAT_WALL;NOANIM;NOANIM;3
279228114;-11.734680175781;18.750513076782;-0.035064697265625;23.184113693237;0/2/2;1/0/0;2/2/0;3/2/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;3
450271392;-4.5588989257813;22.353923797607;-0.56000518798828;13.837906837463;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_HIGH_CLASS;NOANIM;NOANIM;3
4188740747;-0.9521484375;18.75630569458;-0.29718017578125;-48.959999084473;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;PROP_HUMAN_SEAT_BENCH_DRINK_BEER;NOANIM;NOANIM;2
2600762591;-31.840637207031;-3.4384803771973;0.44069671630859;237.34228820801;0/7/1;1/0/0;2/7/0;3/8/3;4/5/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
967594628;-1.6597290039063;22.329448699951;-0.55992889404297;285.9864074707;0/0/0;1/0/0;2/0/0;3/0/0;4/0/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PROSTITUTE_LOW_CLASS;NOANIM;NOANIM;3
279228114;-32.937072753906;-2.4253196716309;0.44069671630859;341.03814697266;0/3/2;1/0/0;2/6/2;3/3/2;4/2/1;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;8.1873779296875;-4.0992813110352;-0.79987335205078;86.88433380127;0/1/0;1/0/0;2/2/1;3/0/2;4/1/2;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRINKING_FACILITY;NOANIM;NOANIM;1
553826858;-45.362609863281;4.3761596679688;0.44078826904297;79.912719726563;0/0/0;1/0/0;2/2/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE_UPRIGHT_CLUBHOUSE;NOANIM;NOANIM;1
279228114;-9.0543212890625;1.9701614379883;-0.25605010986328;283.49948120117;0/1/2;1/0/0;2/1/0;3/1/2;4/0/2;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;3
279228114;-31.920166015625;-20.99454498291;0.45345306396484;324.58986206055;0/4/2;1/0/0;2/8/0;3/5/1;4/4/1;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1415150394;-0.20037841796875;17.305589675903;-0.27812957763672;291.30180053711;0/0/0;1/-1/255;2/0/0;3/0/0;4/0/0;5/-1/255;6/0/0;7/-1/255;8/-1/255;9/-1/255;10/-1/255;11/0/0;PROP_HUMAN_SEAT_CHAIR_FOOD;NOANIM;NOANIM;2
-1860463438;11.875;6.2086639404297;-1.0001907348633;341.09956665039;0/7/1;1/0/0;2/9/0;3/8/1;4/4/2;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;3
279228114;-36.5263671875;7.1977615356445;0.44081878662109;297.2998046875;0/3/1;1/0/0;2/7/1;3/4/0;4/3/2;5/0/0;6/0/0;7/0/0;8/5/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT;NOANIM;NOANIM;3
279228114;-52.217895507813;-14.667984008789;1.4408645629883;221.72512817383;0/4/1;1/0/0;2/9/1;3/6/0;4/5/2;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
-1860463438;-37.584777832031;7.0065307617188;0.44082641601563;26.39906578064;0/6/0;1/0/0;2/8/0;3/9/4;4/4/1;5/0/0;6/3/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING_POT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-28.341613769531;-0.0093727111816406;0.4407958984375;352.19938964844;0/0/2;1/0/0;2/2/0;3/1/0;4/1/0;5/0/0;6/1/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
279228114;-53.113586425781;-14.065052032471;1.4428405761719;59.699509429932;0/1/1;1/0/0;2/3/0;3/2/2;4/0/2;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1860463438;-53.912719726563;-6.995174407959;1.3979949951172;305.39948730469;0/9/0;1/0/0;2/12/0;3/12/0;4/7/2;5/0/0;6/5/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT_CLUBHOUSE;NOANIM;NOANIM;3
553826858;-63.516845703125;-3.9238929748535;1.4413681030273;65.999870300293;0/1/2;1/0/0;2/2/0;3/2/0;4/0/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-43.256530761719;-25.443893432617;1.0408248901367;238.19868774414;0/3/2;1/0/0;2/3/2;3/1/3;4/1/0;5/0/0;6/0/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;1
337826907;-59.064392089844;-22.138885498047;1.4408569335938;184.74311828613;0/3/1;1/0/0;2/3/1;3/0/2;4/1/0;5/0/0;6/0/1;7/3/0;8/2/0;9/0/0;10/2/0;11/2/0;WORLD_HUMAN_STAND_MOBILE;NOANIM;NOANIM;1
-1860463438;-54.520812988281;-31.258232116699;1.0408248901367;43.798686218262;0/5/0;1/0/0;2/6/1;3/6/2;4/3/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MAID_CLEAN;NOANIM;NOANIM;1
553826858;-41.940856933594;1.7172203063965;0.44113922119141;192.89949035645;0/4/0;1/0/0;2/2/0;3/2/0;4/1/0;5/0/0;6/2/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_FACILITY;NOANIM;NOANIM;1
-1694204705;-23.35546875;-7.073802947998;-0.15924835205078;154.49736022949;0/6/2;1/0/0;2/6/2;3/8/1;4/6/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_DRUG_DEALER_HARD;NOANIM;NOANIM;3
553826858;-30.47998046875;-29.383125305176;0.44069671630859;150.89926452637;0/8/0;1/0/0;2/0/0;3/8/1;4/6/1;5/0/0;6/3/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STUPOR_CLUBHOUSE;NOANIM;NOANIM;3
279228114;-15.574096679688;-28.165588378906;0.82003021240234;360.24982910156;0/0/0;1/0/0;2/0/0;3/0/0;4/1/0;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_TOURIST_MOBILE;NOANIM;NOANIM;3
-1860463438;-31.451416015625;-28.793571472168;0.44167327880859;88.578625488281;0/8/1;1/0/0;2/10/2;3/11/1;4/6/1;5/0/0;6/4/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_JOG_STANDING;NOANIM;NOANIM;3
279228114;-25.285339355469;-20.848434448242;0.44087219238281;18.0;0/0/1;1/0/0;2/1/0;3/2/0;4/1/0;5/0/0;6/0/0;7/0/0;8/3/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-26.120056152344;-21.742851257324;0.44075775146484;89.999969482422;0/2/0;1/0/0;2/5/0;3/1/1;4/0/1;5/0/0;6/0/0;7/0/0;8/2/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;1
279228114;-12.392761230469;-27.024757385254;0.84078216552734;268.74055175781;0/4/1;1/0/0;2/8/1;3/5/0;4/4/0;5/0/0;6/0/0;7/0/0;8/6/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_BUM_SLUMPED;NOANIM;NOANIM;3
553826858;-22.664489746094;-27.572380065918;0.82898712158203;275.99908447266;0/6/0;1/0/0;2/3/0;3/7/1;4/4/2;5/0/0;6/6/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
279228114;-23.663146972656;-27.995819091797;0.84578704833984;128.99987792969;0/0/2;1/0/0;2/5/1;3/1/0;4/1/0;5/0/0;6/0/0;7/0/0;8/4/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET_CLUBHOUSE;NOANIM;NOANIM;2
@@ -1,6 +0,0 @@
-1519253631;-1925.2986;-1326.1562;-2.6549;170.32;0/1/1;1/0/0;2/2/0;3/1/0;4/0/3;5/0/0;6/0/0;7/0/0;8/1/1;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_LEANING_CASINO_TERRACE;NOANIM;NOANIM;1
-1106743555;-1934.0895;-1337.6454;-2.6589;197.30;0/1/0;1/0/0;2/1/0;3/0/3;4/1/1;5/0/0;6/0/0;7/0/0;8/1/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
-771835772;-1933.7921;-1338.6002;-2.6589;17.30;0/0/1;1/0/0;2/0/0;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
-1606864033;-1924.4449;-1345.0160;-2.6665;111.35;0/1/0;1/0/0;2/1/0;3/1/2;4/1/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;1
-1606864033;-1925.4336;-1344.8656;-2.6665;231.35;0/0/0;1/0/0;2/0/1;3/0/1;4/0/1;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;1
-781039234;-1925.0695;-1345.7970;-2.6665;351.35;0/1/0;1/0/0;2/1/0;3/0/1;4/0/2;5/0/0;6/0/0;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;1
@@ -1,37 +0,0 @@
-1760377969;-1373.4498291016;-1060.470703125;11.466174125671;306.86770629883;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;2
1750583735;-1350.9283447266;-1064.3785400391;7.0069794654846;216.15802001953;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_LEANING_CASINO_TERRACE;NOANIM;NOANIM;2
1328415626;-1352.8482666016;-1072.0590820312;11.467930793762;140.0007019043;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1328415626;-1353.8458251953;-1071.9892578125;11.467930793762;212.00015258789;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_MOBILE_FILM_SHOCKING;NOANIM;NOANIM;2
-1606864033;-1354.2204589844;-1072.9165039062;11.467930793762;284.00036621094;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1106743555;-1353.4543457031;-1073.5593261719;11.467930793762;356.00103759766;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
-88831029;-1352.6063232422;-1073.029296875;11.467930793762;68.003150939941;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1106743555;-1346.2290039062;-1051.2973632812;11.473196983337;139.99722290039;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
532905404;-1347.6236572266;-1051.4193115234;11.473196983337;229.99723815918;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
951767867;-1347.5017089844;-1052.8139648438;11.473196983337;319.99722290039;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_MOBILE;NOANIM;NOANIM;2
808859815;-1346.1070556641;-1052.6920166016;11.473196983337;49.997222900391;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;2
-1106743555;-1351.5688476562;-1088.7530517578;14.461860656738;243.13638305664;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1606864033;-1351.1953125;-1089.8934326172;14.461860656738;333.13635253906;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;2
-1106743555;-1350.0549316406;-1089.5198974609;14.461860656738;63.136360168457;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;2
808859815;-1350.4284667969;-1088.3795166016;14.461860656738;153.13635253906;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1519253631;-1333.9119873047;-1057.4927978516;12.472941398621;88.437103271484;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-771835772;-1334.7640380859;-1056.9693603516;12.472941398621;208.43449401855;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;2
-150026812;-1334.7913818359;-1057.9689941406;12.472941398621;328.43374633789;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;2
808859815;-1357.7598876953;-1081.0675048828;14.461861610413;210.42828369141;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_LEANING_CASINO_TERRACE;NOANIM;NOANIM;2
-1029146878;-1319.0225830078;-1051.01953125;12.472941398621;157.19375610352;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;2
951767867;-1319.978515625;-1051.7448730469;12.472941398621;277.18634033203;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1328415626;-1318.8723144531;-1052.2100830078;12.472941398621;37.194969177246;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;2
532905404;-1354.3010253906;-1094.9360351562;14.461860656738;149.99716186523;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_SMOKING;NOANIM;NOANIM;2
1699403886;-1355.3403320312;-1095.5360107422;14.461860656738;270.0;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
1004114196;-1354.3010253906;-1096.1359863281;14.461860656738;30.002820968628;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
808859815;-1353.4924316406;-1069.5164794922;6.9393043518066;82.702194213867;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-88831029;-1354.4471435547;-1068.7893066406;6.9393043518066;202.70683288574;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
1750583735;-1354.5994873047;-1069.9796142578;6.9393043518066;322.70404052734;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1760377969;-1348.1529541016;-1075.0477294922;7.0343465805054;210.42851257324;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;2
1699403886;-1353.4696044922;-1051.2901611328;11.466174125671;140.00311279297;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_GUARD_STAND_CASINO;NOANIM;NOANIM;2
-771835772;-1354.5971679688;-1051.7005615234;11.466174125671;259.99493408203;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1519253631;-1353.6779785156;-1052.4719238281;11.466174125671;19.999492645264;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_HANG_OUT_STREET;NOANIM;NOANIM;2
-1606864033;-1339.2288818359;-1068.5532226562;11.467930793762;172.81280517578;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
532905404;-1339.3790283203;-1069.7438964844;11.467930793762;352.8127746582;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
-1760377969;-1360.1525878906;-1096.7788085938;14.607006072998;295.40869140625;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_LEANING_CASINO_TERRACE;NOANIM;NOANIM;2
1004114196;-1354.6751708984;-1079.1682128906;6.9393043518066;203.02227783203;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_PARTYING;NOANIM;NOANIM;2
532905404;-1354.2840576172;-1080.0886230469;6.9393043518066;23.022274017334;0/12/0;1/0/0;2/15/2;3/15/1;4/10/1;5/0/0;6/7/1;7/0/0;8/0/0;9/0/0;10/0/0;11/0/0;WORLD_HUMAN_STAND_IMPATIENT;NOANIM;NOANIM;2
@@ -1,205 +0,0 @@
local bossMenu = createMarker()
local vehReplacenent = createMarker()
local enterTeleport = nil
CreateThread(function()
bossMenu.setType(1)
bossMenu.setPosition(OfficeBossMarkerPosition)
bossMenu.setScale(vector3(1, 1, 1))
bossMenu.setInRadius(1.3)
bossMenu.setColor({
r = 225,
g = 125,
b = 250,
a = 50
})
bossMenu.setRotation(true)
bossMenu.setKeys({38})
bossMenu.on("enter", function()
ShowHelpNotification(Translation.Get("PRESS_TO_OPEN_BOSSMENU"))
end)
bossMenu.on("leave", function()
if ESX then
if ESX.UI then
ESX.UI.Menu.CloseAll()
end
end
-- I didnt found any way to close the qbcore menu seems like there isnt anything for this?
-- if you know the answer please contact us support and dont hesitate to help us!
if QBCore then
end
end)
bossMenu.setRenderJob(Config.JobName)
bossMenu.setGrades({
[Config.BossName] = true
})
bossMenu.setMinGrade(Config.BossGrade)
bossMenu.on("key", function()
if Framework.Active == 1 then
TriggerEvent(Events.ES_BOSS_MENU, Config.JobName, function(data, menu)
if menu then
menu.close()
end
end, {
withdraw = true,
deposit = true,
wash = true,
employees = true,
grades = true
})
elseif Framework.Active == 2 then
TriggerEvent(Events.QB_BOSS_MENU)
elseif Framework.Active == 4 then
-- implement function that opens bossmenu
end
end)
vehReplacenent.setType(36)
vehReplacenent.setPosition(vehicleReplacementCoords)
vehReplacenent.setScale(vector3(1, 1, 1))
vehReplacenent.setRotation(true)
vehReplacenent.setOnlyVehicle(1)
vehReplacenent.setInRadius(3.0)
vehReplacenent.setKeys({38})
vehReplacenent.setColor({
r = 255,
g = 255,
b = 255,
a = 125
})
vehReplacenent.setRenderJob(Config.JobName)
vehReplacenent.setGrades({
[Config.BossName] = true
})
vehReplacenent.setMinGrade(1)
vehReplacenent.on("enter", function()
ShowHelpNotification(Translation.Get("PRESS_TO_GIFT_LUCKYWHEEL_VEH"))
end)
vehReplacenent.on("key", function(key)
CasinoGarage_OnInteraction()
end)
vehReplacenent.on("leave", function()
if ESX then
if ESX.UI then
ESX.UI.Menu.CloseAll()
end
end
-- I didnt found any way to close the qbcore menu seems like there isnt anything for this?
-- if you know the answer please contact us support and dont hesitate to help us!
if QBCore then
end
end)
end)
-- Teleports
local function CreateTeleport(fromCoord, toCoord, message)
local enterTeleport = createMarker()
enterTeleport.setActivity("casinoteleporter")
enterTeleport.setType(1)
enterTeleport.setPosition(fromCoord)
enterTeleport.setScale(vector3(1.0, 1.0, 1.0))
enterTeleport.setRotation(true)
enterTeleport.setInRadius(3.0)
enterTeleport.setKeys({38})
enterTeleport.setColor({
r = 225,
g = 125,
b = 250,
a = 125
})
enterTeleport.on("enter", function()
ShowHelpNotification(message)
end)
enterTeleport.on("key", function(key)
CreateThread(function()
DoScreenFadeOut(500)
Wait(500)
SetEntityCoordsNoOffset(PlayerPedId(), toCoord)
Wait(500)
DoScreenFadeIn(500)
end, "custom tp")
end)
end
function BossMenu_Refresh()
bossMenu.setPosition(OfficeBossMarkerPosition)
vehReplacenent.setPosition(vehicleReplacementCoords)
-- refresh leave teleport for 5
if enterTeleport then
enterTeleport.destroy()
enterTeleport = nil
end
if Config.LeaveThroughTeleport then
enterTeleport = createMarker()
enterTeleport.setActivity("casinoteleporter")
enterTeleport.setType(1)
enterTeleport.setPosition(Config.EnterCheckpointPosition)
enterTeleport.setScale(vector3(1.0, 1.0, 1.0))
enterTeleport.setRotation(true)
enterTeleport.setInRadius(3.0)
enterTeleport.setKeys({38})
enterTeleport.setColor({
r = 225,
g = 125,
b = 250,
a = 125
})
enterTeleport.on("enter", function()
if OPEN_STATE[1] == true then
ShowHelpNotification(Translation.Get("PRESS_TO_ENTER_CASINO"))
else
local m = string.format(Translation.Get("OPENINGHOURS_CLOSED"), OPEN_STATE[2])
if FORCE_CLOSED then
m = Translation.Get("CASINO_TEMPORARY_CLOSED")
end
ShowHelpNotification(m)
end
end)
enterTeleport.on("key", function(key)
if OPEN_STATE[1] == true then
CreateThread(function()
Wait(500)
if Config.MapType ~= 5 then
DoScreenFadeOut(500)
SetEntityCoordsNoOffset(PlayerPedId(), Config.EnterPosition)
else
StartGTAOTPScene()
end
end, "teleport thread to casino")
else
Casino_ShowNotInOpenHoursPrompt(false)
end
end)
end
end
--[[
-- from casino to roof
CreateTeleport(vec3(919.722412, 41.050205, 80.095779), vec3(964.190613, 59.005474, 112.552979),
"Press [E] to go to the rooftop")
-- back
CreateTeleport(vec3(964.190613, 59.005474, 111.552979), vec3(919.722412, 41.050205, 80.095779),
"Press [E] to go back to the casino")
]]
File diff suppressed because it is too large Load Diff
@@ -1,273 +0,0 @@
local targetId = 5
local usedTargetModels = {}
local usedBoxZones = {}
local usedEntities = {}
local function GetUniqueTargetName()
targetId = targetId + 1
return "casinotarget_" .. targetId
end
TargetType = {
NO_TARGET = 0,
Q_TARGET = 1,
BT_TARGET = 2,
QB_TARGET = 3,
OX_TARGET = 4
}
TargetTypeResourceName = {
[TargetType.NO_TARGET] = "none",
[TargetType.Q_TARGET] = "qtarget",
[TargetType.BT_TARGET] = "bt-target",
[TargetType.QB_TARGET] = "qb-target",
[TargetType.OX_TARGET] = "ox_target"
}
function CreateTargetZone(coords, length, width, heading, options)
if not Config.UseTarget then
return
end
Config.ShowHowToPlayUI = 0
local resourceName = TargetTypeResourceName[Config.TargetZoneType]
local targetName = GetUniqueTargetName()
local job = TargetType.BT_TARGET and {"all"} or nil
local sameExports = {
[TargetType.Q_TARGET] = true,
[TargetType.BT_TARGET] = true,
[TargetType.QB_TARGET] = true
}
if Config.TargetZoneType == TargetType.OX_TARGET then
coords = vector3(coords.x, coords.y, coords.z - 0.5)
local zoneId = exports.ox_target:addBoxZone({
name = targetName,
coords = coords,
size = vector3(width, length, 2.0),
rotation = heading,
-- debug = true,
minZ = coords.z - length,
maxZ = coords.z + length,
options = options,
distance = 5.0
})
usedBoxZones[zoneId] = true
elseif sameExports[Config.TargetZoneType] then
local targetoptions = {
options = options,
distance = 5.0,
heading = heading,
job = job
}
exports[resourceName]:AddBoxZone(targetName, coords, length, width, {
name = targetName,
heading = heading,
-- debugPoly = true,
minZ = coords.z - length,
maxZ = coords.z + length
}, targetoptions)
end
end
function CreateTargetModel(model, options)
if not Config.UseTarget then
return
end
if not tonumber(model) then
model = GetHashKey(model)
end
usedTargetModels[model] = true
Config.ShowHowToPlayUI = 0
local resourceName = TargetTypeResourceName[Config.TargetZoneType]
local targetName = GetUniqueTargetName()
local job = TargetType.BT_TARGET and {"all"} or nil
local sameExports = {
[TargetType.Q_TARGET] = true,
[TargetType.BT_TARGET] = true,
[TargetType.QB_TARGET] = true
}
if Config.TargetZoneType == TargetType.OX_TARGET then
exports.ox_target:addModel(model, options)
elseif sameExports[Config.TargetZoneType] then
local targetoptions = {
options = options,
distance = 5.0,
job = job
}
if Config.TargetZoneType == TargetType.BT_TARGET then
model = {model}
end
exports[resourceName]:AddTargetModel(model, targetoptions)
end
end
function CreateTargetEntity(entity, options)
if not Config.UseTarget then
return
end
if usedEntities[entity] then
return
end
usedEntities[entity] = true
local resourceName = TargetTypeResourceName[Config.TargetZoneType]
if Config.TargetZoneType == TargetType.OX_TARGET then
exports[resourceName]:addLocalEntity(entity, options)
elseif Config.TargetZoneType == TargetType.QB_TARGET then
exports[resourceName]:AddTargetEntity(entity, {
distance = 5.0,
options = options
})
elseif Config.TargetZoneType == TargetType.Q_TARGET then
exports[resourceName]:AddTargetEntity(entity, options)
elseif Config.TargetZoneType == TargetType.BT_TARGET then
local entityCoords = GetEntityCoords(entity)
CreateTargetZone(entityCoords, 1.0, 1.0, GetEntityHeading(entity), options)
end
end
function RemoveAllTargetEntities()
local resourceName = TargetTypeResourceName[Config.TargetZoneType]
for entityId, v in pairs(usedEntities) do
if Config.TargetZoneType == TargetType.OX_TARGET then
exports[resourceName]:removeLocalEntity(entityId)
elseif Config.TargetZoneType == TargetType.QB_TARGET then
exports[resourceName]:RemoveTargetEntity(entityId)
elseif Config.TargetZoneType == TargetType.Q_TARGET then
exports[resourceName]:RemoveTargetEntity(entityId)
end
end
usedEntities = {}
end
function RemoveAllTargetZones()
if not Config.UseTarget then
return
end
local resourceName = TargetTypeResourceName[Config.TargetZoneType]
local targetName = GetUniqueTargetName()
local sameExports = {
[TargetType.Q_TARGET] = true,
[TargetType.BT_TARGET] = true,
[TargetType.QB_TARGET] = true
}
if Config.TargetZoneType == TargetType.OX_TARGET then
for k, v in pairs(usedTargetModels) do
exports.ox_target:removeModel(k)
end
for k, v in pairs(usedBoxZones) do
exports.ox_target:removeZone(k)
end
elseif sameExports[Config.TargetZoneType] then
for i = 5, targetId, 1 do
exports[resourceName]:RemoveZone("casinotarget_" .. i)
end
if Config.TargetZoneType ~= TargetType.BT_TARGET then -- bt target doesn't have RemoveTargetModel
for k, v in pairs(usedTargetModels) do
exports[resourceName]:RemoveTargetModel(k)
end
end
end
usedTargetModels = {}
usedBoxZones = {}
RemoveAllTargetEntities()
end
RegisterNetEvent("rcore_casino:Target")
AddEventHandler("rcore_casino:Target", function(data)
if not CAN_INTERACT or LAST_STARTED_GAME_TYPE ~= nil then
return
end
if not data or not data.eventAction then
return
end
if data.eventAction == "wheel_enter" then
LAST_INTERACTION_GAME = "luckywheel"
LuckyWheel_OnInteraction(true)
elseif data.eventAction == "wheel_info" then
LuckyWheel_ShowWelcome()
elseif data.eventAction == "slots_start" then
LAST_INTERACTION_GAME = "slots"
if not data.entity or not DoesEntityExist(data.entity) then
return
end
local model = GetEntityModel(data.entity)
local machineData = machineModels[model]
if not machineData then
return
end
Slots_OnInteraction(data.entity)
elseif data.eventAction == "slots_info" then
if not data.entity or not DoesEntityExist(data.entity) then
return
end
local model = GetEntityModel(data.entity)
Slots_ShowWelcome(model)
elseif data.eventAction == "cashier_enter" then
LAST_INTERACTION_GAME = "cashier"
Cashier_OnInteraction(data.cashierCoords)
elseif data.eventAction == "drinkingbar_ped" then
LAST_INTERACTION_GAME = "drinkingbar"
DrinkingBar_OnInteraction(data.bartenderCoords)
elseif data.eventAction == "drinkingbar_chair" then
LAST_INTERACTION_GAME = "drinkingbar"
Drinkingbar_UseChair(data.chairCoords)
elseif data.eventAction == "bj_enter" then
if not data.entity or not DoesEntityExist(data.entity) then
return
end
local tableCoords = GetEntityCoords(data.entity)
LAST_INTERACTION_GAME = "blackjack"
Blackjack_OnInteraction(tableCoords)
elseif data.eventAction == "bj_info" then
if not data.color or not BlackjackTableDatas[data.color] then
return
end
Blackjack_ShowWelcome(data.color)
elseif data.eventAction == "poker_enter" then
if not data.entity or not DoesEntityExist(data.entity) then
return
end
local tableCoords = GetEntityCoords(data.entity)
LAST_INTERACTION_GAME = "poker"
Poker_OnInteraction(tableCoords)
elseif data.eventAction == "poker_info" then
if not data.color or not PokerTableDatas[data.color] then
return
end
Poker_ShowWelcome(data.color)
elseif data.eventAction == "rl_enter" then
if not data.entity or not DoesEntityExist(data.entity) then
return
end
local tableCoords = GetEntityCoords(data.entity)
LAST_INTERACTION_GAME = "roulette"
Roulette_OnInteraction(tableCoords)
elseif data.eventAction == "rl_info" then
if not data.color or not RouletteTableDatas[data.color] then
return
end
Roulette_ShowWelcome(data.color)
elseif data.eventAction == "it_start" then
if not data.chairId then
return
end
LAST_INTERACTION_GAME = "insidetrack"
InsideTrack_OnInteraction()
elseif data.eventAction == "it_info" then
InsideTrack_ShowWelcome()
elseif data.eventAction == "podium_info" then
Podium_ShowFullscreenInfo()
elseif data.eventAction == "seat_enter" then
LAST_INTERACTION_GAME = "seating"
Seating_OnInteraction(data.chairIndex)
elseif data.eventAction == "elevator_enter" then
StartElevatorScene(data.elevator)
elseif data.eventAction == "cameras_enter" then
LAST_INTERACTION_GAME_TYPE = "cameras"
LAST_INTERACTION_GAME = "cameras"
Office.OnInteraction()
end
end)
File diff suppressed because it is too large Load Diff
@@ -1,185 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- created at [24/05/2021 10:02]
---
---CreateMenu
---@param Title string
---@param Subtitle string
---@param X number
---@param Y number
---@param TextureDictionary string
---@param TextureName string
---@param R number
---@param G number
---@param B number
---@param A number
---@return RageUIMenus
---@public
function RageUI.CreateMenu(Title, Subtitle, X, Y, TextureDictionary, TextureName, R, G, B, A)
local Menu = {}
Menu.Display = {};
Menu.ConfirmCaption = Translation.Get("BTN_CONFIRM")
Menu.ConfirmKey = 176
Menu.Display.Header = true
Menu.Display.Subtitle = true
Menu.Display.Background = true
Menu.Display.Navigation = true
Menu.Display.PageCounter = true
Menu.IsPlayerList = false
Menu.MugshotCache = {}
Menu.Title = Title or ""
Menu.TitleFont = 1
Menu.TitleScale = 1.2
Menu.Subtitle = string.upper(Subtitle) or nil
Menu.SubtitleHeight = -37
Menu.Description = nil
Menu.DescriptionHeight = RageUI.Settings.Items.Description.Background.Height
Menu.X = X or 0
Menu.Y = Y or 0
Menu.Parent = nil
Menu.WidthOffset = 0
Menu.Open = false
Menu.Controls = RageUI.Settings.Controls
Menu.Index = 1
Menu.Sprite = {
Dictionary = TextureDictionary or "commonmenu",
Texture = TextureName or "interaction_bgd",
Color = {
R = R,
G = G,
B = B,
A = A
}
}
Menu.Rectangle = nil
Menu.Pagination = {
Minimum = 1,
Maximum = 10,
Total = 10
}
Menu.Safezone = true
Menu.SafeZoneSize = nil
Menu.EnableMouse = false
Menu.Options = 0
Menu.Closable = false
if string.starts(Menu.Subtitle, "~") then
Menu.PageCounterColour = string.lower(string.sub(Menu.Subtitle, 1, 3))
else
Menu.PageCounterColour = ""
end
if Menu.Subtitle ~= "" then
local SubtitleLineCount = Graphics.GetLineCount(Menu.Subtitle, Menu.X + RageUI.Settings.Items.Subtitle.Text.X,
Menu.Y + RageUI.Settings.Items.Subtitle.Text.Y, 0, RageUI.Settings.Items.Subtitle.Text.Scale, 245, 245, 245,
255, nil, false, false, RageUI.Settings.Items.Subtitle.Background.Width + Menu.WidthOffset)
if SubtitleLineCount > 1 then
Menu.SubtitleHeight = 18 * SubtitleLineCount
else
Menu.SubtitleHeight = 0
end
end
return setmetatable(Menu, RageUIMenus)
end
---CreateSubMenu
---@param ParentMenu function
---@param Title string
---@param Subtitle string
---@param X number
---@param Y number
---@param TextureDictionary string
---@param TextureName string
---@param R number
---@param G number
---@param B number
---@param A number
---@return RageUIMenus
---@public
function RageUI.CreateSubMenu(ParentMenu, Title, Subtitle, X, Y, TextureDictionary, TextureName, R, G, B, A)
if ParentMenu ~= nil then
if ParentMenu() then
local Menu = RageUI.CreateMenu(Title or ParentMenu.Title,
string.upper(Subtitle) or string.upper(ParentMenu.Subtitle), X or ParentMenu.X, Y or ParentMenu.Y)
Menu.Parent = ParentMenu
Menu.WidthOffset = ParentMenu.WidthOffset
Menu.Safezone = ParentMenu.Safezone
if ParentMenu.Sprite then
Menu.Sprite = {
Dictionary = TextureDictionary or ParentMenu.Sprite.Dictionary,
Texture = TextureName or ParentMenu.Sprite.Texture,
Color = {
R = R or ParentMenu.Sprite.Color.R,
G = G or ParentMenu.Sprite.Color.G,
B = B or ParentMenu.Sprite.Color.B,
A = A or ParentMenu.Sprite.Color.A
}
}
else
Menu.Rectangle = ParentMenu.Rectangle
end
return setmetatable(Menu, RageUIMenus)
else
return nil
end
else
return nil
end
end
---SetSubtitle
---@param Subtitle string
---@return nil
---@public
function RageUIMenus:SetSubtitle(Subtitle)
self.Subtitle = string.upper(Subtitle) or string.upper(self.Subtitle)
if string.starts(self.Subtitle, "~") then
self.PageCounterColour = string.lower(string.sub(self.Subtitle, 1, 3))
else
self.PageCounterColour = ""
end
if self.Subtitle ~= "" then
local SubtitleLineCount = Graphics.GetLineCount(self.Subtitle, self.X + RageUI.Settings.Items.Subtitle.Text.X,
self.Y + RageUI.Settings.Items.Subtitle.Text.Y, 0, RageUI.Settings.Items.Subtitle.Text.Scale, 245, 245, 245,
255, nil, false, false, RageUI.Settings.Items.Subtitle.Background.Width + self.WidthOffset)
if SubtitleLineCount > 1 then
self.SubtitleHeight = 18 * SubtitleLineCount
else
self.SubtitleHeight = 0
end
else
self.SubtitleHeight = -37
end
end
---IsVisible
---@param Item fun(Item:Items)
---@param Panel fun(Panel:Panels)
function RageUIMenus:IsVisible(Item, Panel)
if (RageUI.Visible(self)) and (UpdateOnscreenKeyboard() ~= 0) and (UpdateOnscreenKeyboard() ~= 3) then
RageUI.Banner()
RageUI.Subtitle()
Item(Items);
RageUI.Background();
RageUI.Navigation();
RageUI.Description();
Panel(Panels);
RageUI.PoolMenus.Timer = 1
RageUI.Render()
end
end
function RageUIMenus:KeysRegister(Controls, ControlName, Description, Action)
RegisterKeyMapping(string.format('riv-%s', ControlName), Description, "keyboard", Controls)
RegisterCommand(string.format('riv-%s', ControlName), function(source, args)
if (Action ~= nil) then
Action();
end
end, false)
end
@@ -1,380 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- created at [24/05/2021 10:02]
---
RageUI.LastControl = false
local ControlActions = {'Left', 'Right', 'Select', 'Click'}
---GoUp
---@param Options number
---@return nil
---@public
function RageUI.GoUp(Options)
local CurrentMenu = RageUI.CurrentMenu;
if CurrentMenu ~= nil then
Options = CurrentMenu.Options
if CurrentMenu() then
if (Options ~= 0) then
if Options > CurrentMenu.Pagination.Total then
if CurrentMenu.Index <= CurrentMenu.Pagination.Minimum then
if CurrentMenu.Index == 1 then
CurrentMenu.Pagination.Minimum = Options - (CurrentMenu.Pagination.Total - 1)
CurrentMenu.Pagination.Maximum = Options
CurrentMenu.Index = Options
else
CurrentMenu.Pagination.Minimum = (CurrentMenu.Pagination.Minimum - 1)
CurrentMenu.Pagination.Maximum = (CurrentMenu.Pagination.Maximum - 1)
CurrentMenu.Index = CurrentMenu.Index - 1
end
else
CurrentMenu.Index = CurrentMenu.Index - 1
end
else
if CurrentMenu.Index == 1 then
CurrentMenu.Pagination.Minimum = Options - (CurrentMenu.Pagination.Total - 1)
CurrentMenu.Pagination.Maximum = Options
CurrentMenu.Index = Options
else
CurrentMenu.Index = CurrentMenu.Index - 1
end
end
if CurrentMenu.Options > 1 then
Audio.PlaySound(RageUI.Settings.Audio.UpDown.audioName, RageUI.Settings.Audio.UpDown.audioRef)
end
RageUI.LastControl = true
if (CurrentMenu.onIndexChange ~= nil) then
CurrentMenu.onIndexChange(CurrentMenu.Index)
end
else
Audio.PlaySound(RageUI.Settings.Audio.Error.audioName, RageUI.Settings.Audio.Error.audioRef)
end
end
end
end
---GoDown
---@param Options number
---@return nil
---@public
function RageUI.GoDown(Options)
local CurrentMenu = RageUI.CurrentMenu;
if CurrentMenu ~= nil then
Options = CurrentMenu.Options
if CurrentMenu() then
if (Options ~= 0) then
if Options > CurrentMenu.Pagination.Total then
if CurrentMenu.Index >= CurrentMenu.Pagination.Maximum then
if CurrentMenu.Index == Options then
CurrentMenu.Pagination.Minimum = 1
CurrentMenu.Pagination.Maximum = CurrentMenu.Pagination.Total
CurrentMenu.Index = 1
else
CurrentMenu.Pagination.Maximum = (CurrentMenu.Pagination.Maximum + 1)
CurrentMenu.Pagination.Minimum =
CurrentMenu.Pagination.Maximum - (CurrentMenu.Pagination.Total - 1)
CurrentMenu.Index = CurrentMenu.Index + 1
end
else
CurrentMenu.Index = CurrentMenu.Index + 1
end
else
if CurrentMenu.Index == Options then
CurrentMenu.Pagination.Minimum = 1
CurrentMenu.Pagination.Maximum = CurrentMenu.Pagination.Total
CurrentMenu.Index = 1
else
CurrentMenu.Index = CurrentMenu.Index + 1
end
end
if CurrentMenu.Options > 1 then
Audio.PlaySound(RageUI.Settings.Audio.UpDown.audioName, RageUI.Settings.Audio.UpDown.audioRef)
end
RageUI.LastControl = false
if (CurrentMenu.onIndexChange ~= nil) then
CurrentMenu.onIndexChange(CurrentMenu.Index)
end
else
Audio.PlaySound(RageUI.Settings.Audio.Error.audioName, RageUI.Settings.Audio.Error.audioRef)
end
end
end
end
function RageUI.GoActionControl(Controls, Action)
if Controls[Action or 'Left'].Enabled then
for Index = 1, #Controls[Action or 'Left'].Keys do
if not Controls[Action or 'Left'].Pressed then
if IsDisabledControlJustPressed(Controls[Action or 'Left'].Keys[Index][1],
Controls[Action or 'Left'].Keys[Index][2]) then
Controls[Action or 'Left'].Pressed = true
Citizen.CreateThread(function()
Controls[Action or 'Left'].Active = true
Citizen.Wait(0.01)
Controls[Action or 'Left'].Active = false
Citizen.Wait(175)
while Controls[Action or 'Left'].Enabled and
IsDisabledControlPressed(Controls[Action or 'Left'].Keys[Index][1],
Controls[Action or 'Left'].Keys[Index][2]) do
Controls[Action or 'Left'].Active = true
Citizen.Wait(1)
Controls[Action or 'Left'].Active = false
Citizen.Wait(124)
end
Controls[Action or 'Left'].Pressed = false
if (Action ~= ControlActions[5]) then
Citizen.Wait(10)
end
end)
break
end
end
end
end
end
function RageUI.GoActionControlSlider(Controls, Action)
if Controls[Action].Enabled then
for Index = 1, #Controls[Action].Keys do
if not Controls[Action].Pressed then
if IsDisabledControlJustPressed(Controls[Action].Keys[Index][1], Controls[Action].Keys[Index][2]) then
Controls[Action].Pressed = true
Citizen.CreateThread(function()
Controls[Action].Active = true
Citizen.Wait(1)
Controls[Action].Active = false
while Controls[Action].Enabled and
IsDisabledControlPressed(Controls[Action].Keys[Index][1], Controls[Action].Keys[Index][2]) do
Controls[Action].Active = true
Citizen.Wait(1)
Controls[Action].Active = false
end
Controls[Action].Pressed = false
end)
break
end
end
end
end
end
---Controls
---@return nil
---@public
function RageUI.Controls()
local CurrentMenu = RageUI.CurrentMenu;
if CurrentMenu ~= nil then
if CurrentMenu() then
if CurrentMenu.Open then
local Controls = CurrentMenu.Controls;
local Options = CurrentMenu.Options
RageUI.Options = CurrentMenu.Options
if CurrentMenu.EnableMouse then
DisableAllControlActions(2)
end
if not IsInputDisabled(2) then
for Index = 1, #Controls.Enabled.Controller do
EnableControlAction(Controls.Enabled.Controller[Index][1],
Controls.Enabled.Controller[Index][2], true)
end
else
for Index = 1, #Controls.Enabled.Keyboard do
EnableControlAction(Controls.Enabled.Keyboard[Index][1], Controls.Enabled.Keyboard[Index][2],
true)
end
end
if Controls.Up.Enabled then
for Index = 1, #Controls.Up.Keys do
if not Controls.Up.Pressed then
if IsDisabledControlJustPressed(Controls.Up.Keys[Index][1], Controls.Up.Keys[Index][2]) then
Controls.Up.Pressed = true
Citizen.CreateThread(function()
RageUI.GoUp(Options)
Citizen.Wait(175)
while Controls.Up.Enabled and
IsDisabledControlPressed(Controls.Up.Keys[Index][1], Controls.Up.Keys[Index][2]) do
RageUI.GoUp(Options)
Citizen.Wait(50)
end
Controls.Up.Pressed = false
end)
break
end
end
end
end
if Controls.Down.Enabled then
for Index = 1, #Controls.Down.Keys do
if not Controls.Down.Pressed then
if IsDisabledControlJustPressed(Controls.Down.Keys[Index][1], Controls.Down.Keys[Index][2]) then
Controls.Down.Pressed = true
Citizen.CreateThread(function()
RageUI.GoDown(Options)
Citizen.Wait(175)
while Controls.Down.Enabled and
IsDisabledControlPressed(Controls.Down.Keys[Index][1],
Controls.Down.Keys[Index][2]) do
RageUI.GoDown(Options)
Citizen.Wait(50)
end
Controls.Down.Pressed = false
end)
break
end
end
end
end
for i = 1, #ControlActions do
RageUI.GoActionControl(Controls, ControlActions[i])
end
RageUI.GoActionControlSlider(Controls, 'SliderLeft')
RageUI.GoActionControlSlider(Controls, 'SliderRight')
if Controls.Back.Enabled then
for Index = 1, #Controls.Back.Keys do
if not Controls.Back.Pressed then
if IsDisabledControlJustPressed(Controls.Back.Keys[Index][1], Controls.Back.Keys[Index][2]) then
Controls.Back.Pressed = true
Citizen.CreateThread(function()
Citizen.Wait(175)
Controls.Down.Pressed = false
end)
break
end
end
end
end
end
end
end
end
---Navigation
---@return nil
---@public
function RageUI.Navigation()
local CurrentMenu = RageUI.CurrentMenu;
if CurrentMenu ~= nil then
if CurrentMenu() and (CurrentMenu.Display.Navigation) then
if CurrentMenu.EnableMouse then
SetMouseCursorActiveThisFrame()
end
if RageUI.Options > CurrentMenu.Pagination.Total then
local UpHovered = false
local DownHovered = false
if not CurrentMenu.SafeZoneSize then
CurrentMenu.SafeZoneSize = {
X = 0,
Y = 0
}
if CurrentMenu.Safezone then
CurrentMenu.SafeZoneSize = RageUI.GetSafeZoneBounds()
SetScriptGfxAlign(76, 84)
SetScriptGfxAlignParams(0, 0, 0, 0)
end
end
if CurrentMenu.EnableMouse then
UpHovered = Graphics.IsMouseInBounds(CurrentMenu.X + CurrentMenu.SafeZoneSize.X, CurrentMenu.Y +
CurrentMenu.SafeZoneSize.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, RageUI.Settings
.Items.Navigation.Rectangle.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Navigation.Rectangle.Height)
DownHovered = Graphics.IsMouseInBounds(CurrentMenu.X + CurrentMenu.SafeZoneSize.X,
CurrentMenu.Y + RageUI.Settings.Items.Navigation.Rectangle.Height + CurrentMenu.SafeZoneSize.Y +
CurrentMenu.SubtitleHeight + RageUI.ItemOffset, RageUI.Settings.Items.Navigation.Rectangle
.Width + CurrentMenu.WidthOffset, RageUI.Settings.Items.Navigation.Rectangle.Height)
if CurrentMenu.Controls.Click.Active then
if UpHovered then
RageUI.GoUp(RageUI.Options)
elseif DownHovered then
RageUI.GoDown(RageUI.Options)
end
end
if UpHovered then
Graphics.Rectangle(CurrentMenu.X,
CurrentMenu.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, RageUI.Settings.Items
.Navigation.Rectangle.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Navigation.Rectangle.Height, 30, 30, 30, 255)
else
Graphics.Rectangle(CurrentMenu.X,
CurrentMenu.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, RageUI.Settings.Items
.Navigation.Rectangle.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Navigation.Rectangle.Height, 0, 0, 0, 200)
end
if DownHovered then
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y +
RageUI.Settings.Items.Navigation.Rectangle.Height + CurrentMenu.SubtitleHeight +
RageUI.ItemOffset,
RageUI.Settings.Items.Navigation.Rectangle.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Navigation.Rectangle.Height, 30, 30, 30, 255)
else
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y +
RageUI.Settings.Items.Navigation.Rectangle.Height + CurrentMenu.SubtitleHeight +
RageUI.ItemOffset,
RageUI.Settings.Items.Navigation.Rectangle.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Navigation.Rectangle.Height, 0, 0, 0, 200)
end
else
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
RageUI.Settings.Items.Navigation.Rectangle.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Navigation.Rectangle.Height, 0, 0, 0, 200)
Graphics.Rectangle(CurrentMenu.X,
CurrentMenu.Y + RageUI.Settings.Items.Navigation.Rectangle.Height + CurrentMenu.SubtitleHeight +
RageUI.ItemOffset,
RageUI.Settings.Items.Navigation.Rectangle.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Navigation.Rectangle.Height, 0, 0, 0, 200)
end
Graphics.Sprite(RageUI.Settings.Items.Navigation.Arrows.Dictionary,
RageUI.Settings.Items.Navigation.Arrows.Texture, CurrentMenu.X +
RageUI.Settings.Items.Navigation.Arrows.X + (CurrentMenu.WidthOffset / 2), CurrentMenu.Y +
RageUI.Settings.Items.Navigation.Arrows.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
RageUI.Settings.Items.Navigation.Arrows.Width, RageUI.Settings.Items.Navigation.Arrows.Height)
RageUI.ItemOffset = RageUI.ItemOffset + (RageUI.Settings.Items.Navigation.Rectangle.Height * 2)
end
end
end
end
---GoBack
---@return nil
---@public
function RageUI.GoBack()
local CurrentMenu = RageUI.CurrentMenu
if CurrentMenu ~= nil then
Audio.PlaySound(RageUI.Settings.Audio.Back.audioName, RageUI.Settings.Audio.Back.audioRef)
if CurrentMenu.Parent ~= nil then
if CurrentMenu.Parent() then
RageUI.NextMenu = CurrentMenu.Parent
else
RageUI.NextMenu = nil
RageUI.Visible(CurrentMenu, false)
end
else
RageUI.NextMenu = nil
RageUI.Visible(CurrentMenu, false)
end
end
end
@@ -1,479 +0,0 @@
-- cashier UI selection
local menu_TradeInListIndex = 1
local menu_AcquireListIndex = 1
local menu_confirmedIndex = -1
local moneyOptions = {0}
local chipsOptions = {0}
local dailyBonusUsed = false
local dailyDesc = nil
local vipItemDescription = nil
local vipItemEnabled = false
local confirmMessage = nil
local moneyPercentage = 100
local withdrawBadge = RageUI.BadgeStyle.None
local withdrawDesc = Translation.Get("CASHIER_TRADEIN_DESC")
local canPurchaseVIP = true
local extraTransferInfo = nil
local maxSocietyMoney = 0
local function RefreshCashierVIPItem()
vipItemEnabled = true
if PLAYER_IS_VIP then
vipItemDescription = string.format(Translation.Get("CASHIER_VIP_PURCHASE_COMPLETE"),
CommaValue(Config.CASHIER_VIP_PRICE), Config.PRICES_CURRENCY)
if Config.CASHIER_VIP_DURATION then
vipItemDescription = vipItemDescription ..
string.format(" " .. Translation.Get("CASHIER_VIP_VALID_FOR"),
FormatTimestamp(PLAYER_CACHE.vipUntil - SERVER_TIMER))
end
vipItemEnabled = false
else
if PLAYER_MONEY < Config.CASHIER_VIP_PRICE then
vipItemDescription = Translation.Get("CASHIER_VIP_NO_MONEY")
vipItemEnabled = true
else
vipItemDescription = string.format(Translation.Get("CASHIER_VIP_MEMBERSHIP_DESC"),
CommaValue(Config.CASHIER_VIP_PRICE), Config.PRICES_CURRENCY)
end
end
if not canPurchaseVIP then
vipItemEnabled = false
vipItemDescription = Translation.Get("CASHIER_VIP_PASS_ERROR")
end
end
function ResetCashierUISelection(moneyLimit, societyMoney)
moneyPercentage = moneyLimit
if societyMoney then
maxSocietyMoney = societyMoney
end
menu_TradeInListIndex = 1
menu_AcquireListIndex = 1
menu_confirmedIndex = -1
moneyOptions = CashierGetMoneyBalanceOptions(PLAYER_MONEY)
chipsOptions = CashierGetBalanceOptions(PLAYER_CHIPS, maxSocietyMoney / Config.ExchangeRate)
withdrawBadge = moneyPercentage == 100 and RageUI.BadgeStyle.None or RageUI.BadgeStyle.Alert
withdrawDesc = Translation.Get("CASHIER_TRADEIN_DESC")
if moneyPercentage == 0 then
withdrawDesc = Translation.Get("SOCIETY_CASHIER_MONEY_LIMIT_3")
elseif moneyPercentage < 100 then
withdrawDesc = withdrawDesc .. " " ..
string.format(Translation.Get("SOCIETY_CASHIER_MONEY_LIMIT"), moneyPercentage)
end
dailyBonusUsed = PLAYER_CACHE.lastDailyBonus and PLAYER_CACHE.lastDailyBonus == SERVER_DATE
dailyDesc = dailyBonusUsed and Translation.Get("CASHIER_DAILY_BONUS_USED") or
string.format(Translation.Get("CASHIER_DAILY_BONUS_DESC"), Config.CASHIER_DAILY_BONUS)
end
-- show cashier ui
function Cashier_ShowMenu(moneyLimit, vipAllowed, maxMoney, extraData)
canPurchaseVIP = vipAllowed
maxSocietyMoney = maxMoney
ResetCashierUISelection(moneyLimit, maxSocietyMoney)
InfoPanel_UpdateNotification(nil)
local cashierMenu = RageUI.CreateMenu("", Translation.Get("CASHIER_CAPT"), 25, 25, "shopui_title_casino_banner",
"shopui_title_casino_banner")
local exchangeRateDesc = nil
if Config.ExchangeRate ~= 1 then
exchangeRateDesc = string.format(Translation.Get("CASHIER_EXCHANGE_RATE_DESC"),
FormatPrice(math.ceil(10 * Config.ExchangeRate)))
end
function RageUI.PoolMenus:CashierUI()
cashierMenu:IsVisible(function(i)
RefreshCashierVIPItem()
if not Config.UseOnlyMoney then
i:AddList(Translation.Get("CASHIER_ACQUIRE_CAPT"), moneyOptions, menu_AcquireListIndex,
(menu_AcquireListIndex == menu_confirmedIndex and confirmMessage or
Translation.Get("CASHIER_ACQUIRE_DESC")), {
IsDisabled = moneyOptions[menu_AcquireListIndex] == 0 or not CAN_INTERACT
}, function(Index, onSelected, onListChange)
if (onListChange) then
menu_AcquireListIndex = Index;
menu_confirmedIndex = -1
end
if onSelected then
if not CAN_INTERACT then
return
end
if moneyOptions[Index] == nil then
return
end
if menu_confirmedIndex ~= Index then
menu_confirmedIndex = Index
local amount = CommaValue(moneyOptions[Index])
local realChipsValue = math.ceil(moneyOptions[Index] * Config.ExchangeRate)
confirmMessage = string.format(Translation.Get("CASHIER_YOU_SURE_ACQUIRE"), amount,
FormatPrice(realChipsValue))
if Config.ExchangeRate ~= 1 then
confirmMessage = string.format(Translation.Get("CASHIER_TRANSFER_INFO"),
CommaValue(amount), FormatPrice(realChipsValue)) .. confirmMessage
end
return
end
Cashier_AcquireChips(moneyOptions[Index])
end
end)
i:AddList(Translation.Get("CASHIER_TRADEIN_CAPT"), chipsOptions, menu_TradeInListIndex,
(menu_TradeInListIndex == menu_confirmedIndex and confirmMessage or withdrawDesc), {
IsDisabled = chipsOptions[menu_TradeInListIndex] == 0 or moneyPercentage <= 0 or
not CAN_INTERACT,
LeftBadge = withdrawBadge
}, function(Index, onSelected, onListChange)
if (onListChange) then
menu_TradeInListIndex = Index;
menu_confirmedIndex = -1
end
if onSelected then
if not CAN_INTERACT then
return
end
if chipsOptions[Index] == nil then
return
end
if menu_confirmedIndex ~= Index then
menu_confirmedIndex = Index
local amount = CommaValue(chipsOptions[Index])
local realChipsValue = math.ceil(chipsOptions[Index] * Config.ExchangeRate)
confirmMessage = string.format(Translation.Get("CASHIER_YOU_SURE_TRADE_IN"), amount)
if Config.ExchangeRate ~= 1 then
confirmMessage = string.format(Translation.Get("CASHIER_TRANSFER_INFO"),
CommaValue(amount), FormatPrice(realChipsValue)) .. confirmMessage
end
if moneyPercentage < 100 then
local reducedMoney = math.ceil((realChipsValue / 100) * moneyPercentage)
confirmMessage = confirmMessage .. " " ..
string.format(Translation.Get("SOCIETY_CASHIER_MONEY_LIMIT_2"),
CommaValue(reducedMoney), Config.PRICES_CURRENCY, amount, moneyPercentage)
end
return
end
Cashier_TradeInChips(chipsOptions[Index])
end
end)
end
if Config.CASHIER_DAILY_BONUS ~= 0 then
i:AddButton(Translation.Get("CASHIER_DAILY_BONUS_CAPT"), dailyDesc, {
IsDisabled = dailyBonusUsed,
RightLabelColor = RageUI.ItemsColour.White
}, nil, function()
Cashier_DailyBonus()
end)
end
i:AddButton(Translation.Get("CASHIER_VIP_MEMBERSHIP_CAPT"), vipItemDescription, {
IsDisabled = vipItemEnabled == false,
RightLabelColor = RageUI.ItemsColour.White,
RightBadge = RageUI.BadgeStyle.CasinoVIP
}, nil, function()
Cashier_RequestVIP()
end)
local canOrderDelivery = extraData.MoneyLoad and Config.JobsEnabled and
Config.Jobs.MONEYLOAD_STARTFROMCASHIERUI and
IsAtJob(Config.JobName, nil, Config.Jobs.MONEYLOAD_STARTJOBGRADE,
Config.Jobs.MONEYLOAD_STARTJOBGRADE)
if MONEYLOAD_TAKE or canOrderDelivery then
i:AddSeparator("Mission Options")
end
if MONEYLOAD_TAKE then
i:AddButton(Translation.Get("MONEYLOAD_CASHIER_CAPTION"),
string.format(Translation.Get("MONEYLOAD_CASHIER_DESC"), FormatPrice(MONEYLOAD_TAKE)), {
IsDisabled = dailyBonusUsed,
RightLabelColor = RageUI.ItemsColour.White,
RightBadge = RageUI.BadgeStyle.Package
}, nil, function()
MONEYLOAD_TAKE = nil
TriggerServerEvent("rcore_casino:CasinoMission:MoneyLoad:DeliverMoney")
Cashier_OnQuit()
RemoveMissionBlip("cashier")
-- give take animation
Citizen.CreateThread(function()
RequestAnimDictAndWait("mp_common")
if HasAnimDictLoaded("mp_common") then
TaskPlayAnim(PlayerPedId(), "mp_common", "givetake2_b", 3.0, 3.0, -1, 0, 0, true, true,
true)
for k, v in pairs(CashierDatas) do
if v.enabled and v.ped then
PlayPedAmbientSpeechWithVoiceNative(v.ped, "WELCOME_BACK_WINNER",
"u_f_m_casinocash_01", "SPEECH_PARAMS_FORCE_NORMAL", 0)
TaskPlayAnim(v.ped, "mp_common", "givetake2_a", 3.0, 3.0, -1, 0, 0, true, true,
true)
break
end
end
end
end)
end)
else
if canOrderDelivery then
local oderAllowed = true
local orderDesc = string.format(Translation.Get("MONEYLOAD_CASHIER_ORDER_DELIVERY_DESC"),
FormatPrice(Config.Jobs.MONEYLOAD_TAKE))
if #extraData.MoneyLoad.jobMembers > 0 then
orderDesc = orderDesc .. " " ..
string.format(Translation.Get("MONEYLOAD_CASHIER_MEMBERLIST"),
extraData.MoneyLoad.memberNames)
else
oderAllowed = false
orderDesc = Translation.Get("MONEYLOAD_CASHIER_MEMBERLIST_EMPTY")
end
if extraData.MoneyLoad.missionActive then
oderAllowed = false
orderDesc = Translation.Get("MONEYLOAD_CASHIER_ORDER_DELIVERY_ALREADYACTIVE")
end
i:AddButton(Translation.Get("MONEYLOAD_CASHIER_ORDER_DELIVERY"), orderDesc, {
IsDisabled = not oderAllowed,
RightLabelColor = RageUI.ItemsColour.White,
RightBadge = RageUI.BadgeStyle.Package
}, nil, function()
Cashier_OnQuit()
TriggerServerEvent("rcore_casino:CasinoMission:MoneyLoad:Order")
end)
end
end
if exchangeRateDesc then
i:AddSeparator(exchangeRateDesc, RageUI.ItemsColour.Yellow)
end
if Config.EnableSociety and Config.CASHIER_SHOW_SOCIETY_BALANCE then
i:AddSeparator(string.format(Translation.Get("AVAIABLE_SOCIETY_BALANCE"), FormatPrice(maxMoney)),
RageUI.ItemsColour.Yellow)
end
end, function(Panels)
end)
end
RageUI.Visible(cashierMenu, true)
end
-- opens up sitting menu (choose from snacks to eat/drink while sitting at the bar)
function DrinkingBar_ShowSittingMenu()
InfoPanel_UpdateNotification(nil)
local sittingMenu = RageUI.CreateMenu("", Translation.Get("BAR_SNACKS_CAPT"), 25, 25, "shopui_title_casino_banner",
"shopui_title_casino_banner")
function RageUI.PoolMenus:DrinksUI()
sittingMenu:IsVisible(function(i)
for x = 1, #CasinoInventoryItems do
local v = CasinoInventoryItems[x]
if v.itemType == 1 then
local key = v.key
if PLAYER_ITEMS[key] and PLAYER_ITEMS[key] > 0 then
i:AddButton(v.title, Translation.Get("BAR_SNACKS_DESC"), {
IsDisabled = false,
RightLabel = PLAYER_ITEMS[key],
RightLabelColor = RageUI.ItemsColour.White
}, nil, function()
SittingMenu_SnackSelected(key)
end)
end
end
end
end, function(Panels)
end)
end
RageUI.Visible(sittingMenu, true)
end
function DrinkingBar_ShowMenu()
-- CAN_MOVE = false
InfoPanel_UpdateNotification(nil)
local drinksMenu = RageUI.CreateMenu("", Translation.Get("BAR_MENU_TITLE"), 25, 25, "shopui_title_casino_banner",
"shopui_title_casino_banner")
function RageUI.PoolMenus:DrinksUI()
drinksMenu:IsVisible(function(i)
if Config.BarShowSnacks then
i:AddSeparator(Translation.Get("BAR_SNACKS_SEPARATOR_DRINKS"))
end
for x = 1, #CasinoInventoryItems do
local v = CasinoInventoryItems[x]
local k = v.key
if v.itemType == 2 then
local price = FormatPrice(v.price)
local forFree = v.luckyWheelAffected and PLAYER_CACHE.freeDrinksUntil and SERVER_TIMER <
PLAYER_CACHE.freeDrinksUntil
if forFree then
price = Translation.Get("BAR_SNACKS_PRICE_FREE")
end
local itemDescription = PLAYER_MONEY >= v.price and Translation.Get("BAR_MENU_DESC") or
string.format(Translation.Get("BAR_MENU_NO_MONEY"), price)
local itemDisabled = (forFree == false and PLAYER_MONEY < v.price)
if v.vip and not PLAYER_IS_VIP then
itemDisabled = true
itemDescription = Translation.Get("BUYING_ITEMS_VIP_RESTRICTION")
end
i:AddButton(v.title, itemDescription, {
IsDisabled = itemDisabled,
RightLabel = price,
RightLabelColor = RageUI.ItemsColour.GreenLight
}, nil, function()
DrinksMenu_DrinkSelected(k)
end)
end
end
if Config.BarShowSnacks then
i:AddSeparator(Translation.Get("BAR_SNACKS_SEPARATOR_SNACKS"))
for x = 1, #CasinoInventoryItems do
local v = CasinoInventoryItems[x]
local k = v.key
if v.itemType == 1 and x ~= 10 then
local price = FormatPrice(v.price)
i:AddButton(v.title, PLAYER_MONEY >= v.price and Translation.Get("BAR_MENU_DESC2") or
string.format(Translation.Get("BAR_MENU_NO_MONEY"), price), {
IsDisabled = PLAYER_MONEY < v.price,
RightLabel = FormatPrice(v.price),
RightLabelColor = RageUI.ItemsColour.OrangeLight
}, nil, function()
DrinksMenu_DrinkSelected(k)
end)
end
end
end
end, function(Panels)
end)
end
RageUI.Visible(drinksMenu, true)
end
function GameStates_ChipManagement(playerList)
InfoPanel_UpdateNotification(nil)
CloseAllMenus()
local playersMenu = RageUI.CreateMenu("", Translation.Get("ADMIN_MENU_CHIP_MNG"), 25, 25,
"shopui_title_casino_banner", "shopui_title_casino_banner")
function RageUI.PoolMenus:ChipMngUI()
playersMenu:IsVisible(function(i)
for k, v in pairs(playerList) do
i:AddButton(v.name, nil, {
IsDisabled = false,
RightLabel = v.chips,
RightLabelColor = RageUI.ItemsColour.White
}, nil, function()
ShowTextInputBox(Translation.Get("ADMIN_MENU_CHIPS_NEWBALANCE"), v.chips, function(newBalance)
newBalance = tonumber(newBalance)
if newBalance then
v.chips = newBalance
GameStates_ChipManagement(playerList)
TriggerServerEvent("rcore_casino:AdminEditPlayerChips", v.playerId, newBalance)
end
end)
end)
end
i:AddSeparator(" ")
i:AddButton(Translation.Get("BTN_CLOSE"), nil, {
IsDisabled = false,
RightLabelColor = RageUI.ItemsColour.White,
RightBadge = RageUI.BadgeStyle.Alert
}, nil, function()
CloseAllMenus()
end)
end, function(Panels)
end)
end
RageUI.Visible(playersMenu, true)
end
function GameStates_ShowMenu()
InfoPanel_UpdateNotification(nil)
CloseAllMenus()
local statesMenu = RageUI.CreateMenu("", Translation.Get("GAME_STATE_MENU_TITLE"), 25, 25,
"shopui_title_casino_banner", "shopui_title_casino_banner")
function RageUI.PoolMenus:CashierUI()
statesMenu:IsVisible(function(i)
i:AddSeparator(Translation.Get("ADMIN_MENU_CHIP_MNG"))
i:AddButton(Translation.Get("ADMIN_MENU_CHIP_MNG"), nil, {
IsDisabled = false,
RightLabelColor = RageUI.ItemsColour.White
}, nil, function()
TriggerServerEvent("rcore_casino:AdminChipManagement")
end)
i:AddSeparator(Translation.Get("ADMIN_MENU_GAMESTATES"))
for n = 1, #GameStates do
local v = GameStates[n]
i:AddButton(v.title, nil, {
IsDisabled = false,
RightLabelColor = RageUI.ItemsColour.White,
RightBadge = v.enabled and RageUI.BadgeStyle.Tick or RageUI.BadgeStyle.Lock
}, nil, function()
if v.enabled then
v.enabled = false
else
v.enabled = true
end
TriggerServerEvent("rcore_casino:AdminUpdateStates", GameStates)
end)
end
i:AddSeparator(" ")
i:AddButton(Translation.Get("BTN_CLOSE"), nil, {
IsDisabled = false,
RightLabelColor = RageUI.ItemsColour.White,
RightBadge = RageUI.BadgeStyle.Alert
}, nil, function()
CloseAllMenus()
end)
end, function(Panels)
end)
end
RageUI.Visible(statesMenu, true)
end
-- standalone: manage casino workers menu
function Workers_ShowMenu(workers)
InfoPanel_UpdateNotification(nil)
CloseAllMenus()
local gradeOptions = {"Unemployed", "Grade 0", "Grade 1", "Grade 2 (Boss)"}
local workersMenu = RageUI.CreateMenu("", "Casino Workers", 25, 25, "shopui_title_casino_banner",
"shopui_title_casino_banner")
function RageUI.PoolMenus:CashierUI()
workersMenu:IsVisible(function(i)
for k, v in pairs(workers) do
i:AddList(v.name, gradeOptions, v.actual, nil, {
IsDisabled = false
}, function(Index, onSelected, onListChange)
if (onListChange) then
v.actual = Index
local newGrade = v.actual - 2
TriggerServerEvent("rcore_casino:AdminEditWorkerGrade", v.playerId, newGrade)
end
if onSelected then
CloseAllMenus()
end
end)
end
end, function(Panels)
end)
end
RageUI.Visible(workersMenu, true)
end
function CloseAllMenus()
RageUI.CloseAll()
end
function OnMenusClosed()
-- print("Menus were closed.")
end
@@ -1,661 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- created at [24/05/2021 10:02]
---
RageUI = {};
---@class RageUIMenus
RageUIMenus = setmetatable({}, RageUIMenus)
---@return boolean
RageUIMenus.__call = function()
return true
end
RageUIMenus.__index = RageUIMenus
RageUI.CurrentMenu = nil
RageUI.NextMenu = nil
RageUI.Options = 0
RageUI.ItemOffset = 0
RageUI.StatisticPanelCount = 0
RageUI.PoolMenus = RageUI.PoolMenus or {
Timer = 0,
Name = nil
};
---@class Settings
RageUI.Settings = {
Debug = false,
Controls = {
Up = {
Enabled = true,
Active = false,
Pressed = false,
Keys = {{0, 172}, {1, 172}, {2, 172}, {0, 241}, {1, 241}, {2, 241}}
},
Down = {
Enabled = true,
Active = false,
Pressed = false,
Keys = {{0, 173}, {1, 173}, {2, 173}, {0, 242}, {1, 242}, {2, 242}}
},
Left = {
Enabled = true,
Active = false,
Pressed = false,
Keys = {{0, 174}, {1, 174}, {2, 174}}
},
Right = {
Enabled = true,
Pressed = false,
Active = false,
Keys = {{0, 175}, {1, 175}, {2, 175}}
},
SliderLeft = {
Enabled = true,
Active = false,
Pressed = false,
Keys = {{0, 174}, {1, 174}, {2, 174}}
},
SliderRight = {
Enabled = true,
Pressed = false,
Active = false,
Keys = {{0, 175}, {1, 175}, {2, 175}}
},
Select = {
Enabled = true,
Pressed = false,
Active = false,
Keys = {{0, 201}, {1, 201}, {2, 201}}
},
Back = {
Enabled = true,
Active = false,
Pressed = false,
Keys = {{0, 177}, {1, 177}, {2, 177}, {0, 199}, {1, 199}, {2, 199}}
},
Click = {
Enabled = true,
Active = false,
Pressed = false,
Keys = {{0, 24}}
},
Enabled = {
Controller = {{0, 2}, -- Look Up and Down
{0, 1}, -- Look Left and Right
{0, 25}, -- Aim
{0, 24} -- Attack
},
Keyboard = {{0, 201}, -- Select
{0, 195}, -- X axis
{0, 196}, -- Y axis
{0, 187}, -- Down
{0, 188}, -- Up
{0, 189}, -- Left
{0, 190}, -- Right
{0, 202}, -- Back
{0, 217}, -- Select
{0, 242}, -- Scroll down
{0, 241}, -- Scroll up
{0, 239}, -- Cursor X
{0, 240}, -- Cursor Y
{0, 31}, -- Move Up and Down
{0, 30}, -- Move Left and Right
{0, 21}, -- Sprint
{0, 22}, -- Jump
{0, 23}, -- Enter
{0, 75}, -- Exit Vehicle
{0, 71}, -- Accelerate Vehicle
{0, 72}, -- Vehicle Brake
{0, 59}, -- Move Vehicle Left and Right
{0, 89}, -- Fly Yaw Left
{0, 9}, -- Fly Left and Right
{0, 8}, -- Fly Up and Down
{0, 90}, -- Fly Yaw Right
{0, 76} -- Vehicle Handbrake
}
}
},
Audio = {
Id = nil,
UpDown = {
audioName = "HUD_FRONTEND_DEFAULT_SOUNDSET",
audioRef = "NAV_UP_DOWN"
},
LeftRight = {
audioName = "HUD_FRONTEND_DEFAULT_SOUNDSET",
audioRef = "NAV_LEFT_RIGHT"
},
Select = {
audioName = "HUD_FRONTEND_DEFAULT_SOUNDSET",
audioRef = "SELECT"
},
Back = {
audioName = "HUD_FRONTEND_DEFAULT_SOUNDSET",
audioRef = "BACK"
},
Error = {
audioName = "HUD_FRONTEND_DEFAULT_SOUNDSET",
audioRef = "ERROR"
},
Slider = {
audioName = "HUD_FRONTEND_DEFAULT_SOUNDSET",
audioRef = "CONTINUOUS_SLIDER",
Id = nil
}
},
Items = {
Title = {
Background = {
Width = 431,
Height = 107
},
Text = {
X = 215,
Y = 20,
Scale = 1.15
}
},
Subtitle = {
Background = {
Width = 431,
Height = 37
},
Text = {
X = 8,
Y = 3,
Scale = 0.35
},
PreText = {
X = 425,
Y = 3,
Scale = 0.35
}
},
Background = {
Dictionary = "commonmenu",
Texture = "gradient_bgd",
Y = 0,
Width = 431
},
Navigation = {
Rectangle = {
Width = 431,
Height = 18
},
Offset = 5,
Arrows = {
Dictionary = "commonmenu",
Texture = "shop_arrows_upanddown",
X = 190,
Y = -6,
Width = 50,
Height = 50
}
},
Description = {
Bar = {
Y = 4,
Width = 431,
Height = 4
},
Background = {
Dictionary = "commonmenu",
Texture = "gradient_bgd",
Y = 4,
Width = 431,
Height = 30
},
Text = {
X = 8,
Y = 10,
Scale = 0.35
}
}
},
Panels = {
Grid = {
Background = {
Dictionary = "commonmenu",
Texture = "gradient_bgd",
Y = 4,
Width = 431,
Height = 275
},
Grid = {
Dictionary = "pause_menu_pages_char_mom_dad",
Texture = "nose_grid",
X = 115.5,
Y = 47.5,
Width = 200,
Height = 200
},
Circle = {
Dictionary = "mpinventory",
Texture = "in_world_circle",
X = 115.5,
Y = 47.5,
Width = 20,
Height = 20
},
Text = {
Top = {
X = 215.5,
Y = 15,
Scale = 0.35
},
Bottom = {
X = 215.5,
Y = 250,
Scale = 0.35
},
Left = {
X = 57.75,
Y = 130,
Scale = 0.35
},
Right = {
X = 373.25,
Y = 130,
Scale = 0.35
}
}
},
Percentage = {
Background = {
Dictionary = "commonmenu",
Texture = "gradient_bgd",
Y = 4,
Width = 431,
Height = 76
},
Bar = {
X = 9,
Y = 50,
Width = 413,
Height = 10
},
Text = {
Left = {
X = 25,
Y = 15,
Scale = 0.35
},
Middle = {
X = 215.5,
Y = 15,
Scale = 0.35
},
Right = {
X = 398,
Y = 15,
Scale = 0.35
}
}
}
}
}
function RageUI.GetSafeZoneBounds()
local SafeSize = GetSafeZoneSize()
SafeSize = math.round(SafeSize, 2)
SafeSize = (SafeSize * 100) - 90
SafeSize = 10 - SafeSize
local W, H = 1920, 1080
return {
X = math.round(SafeSize * ((W / H) * 5.4)),
Y = math.round(SafeSize * 5.4)
}
end
RageUI.LastInstructionalState = nil
RageUI.LastInstructionalDevice = nil
-- RageUI.CurrentMenu.Pagination.Maximum
function RageUI.ShowInstructionalButtonsNUI()
local confirmKey = RageUI.CurrentMenu.ConfirmKey and RageUI.CurrentMenu.ConfirmKey or 176
local confirmCaption = RageUI.CurrentMenu.ConfirmCaption and RageUI.CurrentMenu.ConfirmCaption or "???"
local keys = {{
key = 177,
title = Translation.Get("MENU_LEAVE_OPTION")
}, {
key = 187,
title = Translation.Get("MENU_NAVIGATE_OPTION"),
extraKey = 188
}, {
key = confirmKey,
title = confirmCaption
}}
PushNUIInstructionalButtons(keys)
end
function RageUI.RefreshNUIInstructionalState()
local actualState = (RageUI.CurrentMenu and not RageUI.CurrentMenu.Closed)
local actualDevice = IsGamepadControl()
if actualState ~= RageUI.LastInstructionalState or actualDevice ~= RageUI.LastInstructionalDevice then
if actualState and not RageUI.CurrentMenu.NoHud then
RageUI.ShowInstructionalButtonsNUI()
elseif RageUI.WaitForClose and not PROMPT_ACTIVE then
RageUI.WaitForClose = false
PushNUIInstructionalButtons(nil)
end
RageUI.LastInstructionalDevice = actualDevice
RageUI.LastInstructionalState = actualState
end
end
RageUI.WaitForClose = false
function RageUI.Visible(Menu, Value)
if Menu ~= nil and Menu() then
if not Menu.NoHud then
RageUI.WaitForClose = true
end
if Value == true or Value == false then
if Value then
if RageUI.CurrentMenu ~= nil then
if RageUI.CurrentMenu.Closed ~= nil then
RageUI.CurrentMenu.Closed()
end
RageUI.CurrentMenu.Open = not Value
end
RageUI.CurrentMenu = Menu
else
RageUI.CurrentMenu = nil
end
Menu.Open = Value
RageUI.Options = 0
RageUI.ItemOffset = 0
RageUI.LastControl = false
else
return Menu.Open
end
end
end
function RageUI.CloseAll()
if RageUI.CurrentMenu ~= nil then
Audio.PlaySound(RageUI.Settings.Audio.Back.audioName, RageUI.Settings.Audio.Back.audioRef)
local parent = RageUI.CurrentMenu.Parent
while parent ~= nil do
parent.Index = 1
parent.Pagination.Minimum = 1
parent.Pagination.Maximum = parent.Pagination.Total
parent = parent.Parent
end
RageUI.CurrentMenu.Index = 1
RageUI.CurrentMenu.Pagination.Minimum = 1
RageUI.CurrentMenu.Pagination.Maximum = RageUI.CurrentMenu.Pagination.Total
RageUI.CurrentMenu.Open = false
RageUI.CurrentMenu = nil
end
RageUI.Options = 0
RageUI.ItemOffset = 0
RageUI.PoolMenus = {}
ResetScriptGfxAlign()
OnMenusClosed()
end
function RageUI.Banner()
local CurrentMenu = RageUI.CurrentMenu
if (CurrentMenu.Display.Header) then
RageUI.ItemsSafeZone(CurrentMenu)
if CurrentMenu.Sprite ~= nil then
if CurrentMenu.Sprite.Dictionary ~= nil then
if CurrentMenu.Sprite.Dictionary == "commonmenu" then
Graphics.Sprite(CurrentMenu.Sprite.Dictionary, CurrentMenu.Sprite.Texture, CurrentMenu.X,
CurrentMenu.Y, RageUI.Settings.Items.Title.Background.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Title.Background.Height, CurrentMenu.Sprite.Color.R,
CurrentMenu.Sprite.Color.G, CurrentMenu.Sprite.Color.B, CurrentMenu.Sprite.Color.A)
else
Graphics.Sprite(CurrentMenu.Sprite.Dictionary, CurrentMenu.Sprite.Texture, CurrentMenu.X,
CurrentMenu.Y, RageUI.Settings.Items.Title.Background.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Title.Background.Height, nil)
end
else
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y,
RageUI.Settings.Items.Title.Background.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Title.Background.Height, CurrentMenu.Rectangle.R, CurrentMenu.Rectangle.G,
CurrentMenu.Rectangle.B, CurrentMenu.Rectangle.A)
end
else
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y,
RageUI.Settings.Items.Title.Background.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Title.Background.Height, CurrentMenu.Rectangle.R, CurrentMenu.Rectangle.G,
CurrentMenu.Rectangle.B, CurrentMenu.Rectangle.A)
end
Graphics.Text(CurrentMenu.Title,
CurrentMenu.X + RageUI.Settings.Items.Title.Text.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + RageUI.Settings.Items.Title.Text.Y, CurrentMenu.TitleFont, CurrentMenu.TitleScale, 255, 255,
255, 255, 1)
RageUI.ItemOffset = RageUI.ItemOffset + RageUI.Settings.Items.Title.Background.Height
end
end
function RageUI.Subtitle()
local CurrentMenu = RageUI.CurrentMenu
if (CurrentMenu.Display.Subtitle) then
RageUI.ItemsSafeZone(CurrentMenu)
if CurrentMenu.Subtitle ~= "" then
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y + RageUI.ItemOffset,
RageUI.Settings.Items.Subtitle.Background.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Subtitle.Background.Height + CurrentMenu.SubtitleHeight,
CurrentMenu.SubColorR and CurrentMenu.SubColorR or 0,
CurrentMenu.SubColorG and CurrentMenu.SubColorG or 0,
CurrentMenu.SubColorB and CurrentMenu.SubColorB or 0,
CurrentMenu.SubColorA and CurrentMenu.SubColorA or 255)
Graphics.Text(CurrentMenu.PageCounterColour .. CurrentMenu.Subtitle,
CurrentMenu.X + RageUI.Settings.Items.Subtitle.Text.X,
CurrentMenu.Y + RageUI.Settings.Items.Subtitle.Text.Y + RageUI.ItemOffset, 0,
RageUI.Settings.Items.Subtitle.Text.Scale, 245, 245, 245, 255, nil, false, false,
RageUI.Settings.Items.Subtitle.Background.Width + CurrentMenu.WidthOffset)
if CurrentMenu.Index > CurrentMenu.Options or CurrentMenu.Index < 0 then
CurrentMenu.Index = 1
end
if (CurrentMenu ~= nil) then
if (CurrentMenu.Index > CurrentMenu.Pagination.Total) then
local offset = CurrentMenu.Index - CurrentMenu.Pagination.Total
CurrentMenu.Pagination.Minimum = 1 + offset
CurrentMenu.Pagination.Maximum = CurrentMenu.Pagination.Total + offset
else
CurrentMenu.Pagination.Minimum = 1
CurrentMenu.Pagination.Maximum = CurrentMenu.Pagination.Total
end
end
if CurrentMenu.Display.PageCounter then
if CurrentMenu.PageCounter == nil then
local counterContent = CurrentMenu.CustomCounter and CurrentMenu.CustomCounter or
(CurrentMenu.PageCounterColour .. CurrentMenu.Index .. " / " ..
CurrentMenu.Options)
Graphics.Text(counterContent,
CurrentMenu.X + RageUI.Settings.Items.Subtitle.PreText.X + CurrentMenu.WidthOffset,
CurrentMenu.Y + RageUI.Settings.Items.Subtitle.PreText.Y + RageUI.ItemOffset, 0,
RageUI.Settings.Items.Subtitle.PreText.Scale, 245, 245, 245, 255, 2)
else
Graphics.Text(CurrentMenu.PageCounter,
CurrentMenu.X + RageUI.Settings.Items.Subtitle.PreText.X + CurrentMenu.WidthOffset,
CurrentMenu.Y + RageUI.Settings.Items.Subtitle.PreText.Y + RageUI.ItemOffset, 0,
RageUI.Settings.Items.Subtitle.PreText.Scale, 245, 245, 245, 255, 2)
end
end
RageUI.ItemOffset = RageUI.ItemOffset + RageUI.Settings.Items.Subtitle.Background.Height
end
end
end
function RageUI.Background()
if RageUI.CurrentMenu == nil then
return
end
local CurrentMenu = RageUI.CurrentMenu;
if (CurrentMenu.Display.Background) then
RageUI.ItemsSafeZone(CurrentMenu)
SetScriptGfxDrawOrder(0)
Graphics.Sprite(RageUI.Settings.Items.Background.Dictionary, RageUI.Settings.Items.Background.Texture,
CurrentMenu.X, CurrentMenu.Y + RageUI.Settings.Items.Background.Y + CurrentMenu.SubtitleHeight,
RageUI.Settings.Items.Background.Width + CurrentMenu.WidthOffset, RageUI.ItemOffset, 0, 0, 0, 0, 255)
SetScriptGfxDrawOrder(1)
end
end
function RageUI.Description()
if RageUI.CurrentMenu == nil then
return
end
local CurrentMenu = RageUI.CurrentMenu;
local Description = RageUI.Settings.Items.Description;
if CurrentMenu.Description ~= nil then
RageUI.ItemsSafeZone(CurrentMenu)
Graphics.Rectangle(CurrentMenu.X,
CurrentMenu.Y + Description.Bar.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
Description.Bar.Width + CurrentMenu.WidthOffset, Description.Bar.Height, 0, 0, 0, 255)
Graphics.Sprite(Description.Background.Dictionary, Description.Background.Texture, CurrentMenu.X,
CurrentMenu.Y + Description.Background.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
Description.Background.Width + CurrentMenu.WidthOffset, CurrentMenu.DescriptionHeight, 0, 0, 0, 255)
Graphics.Text(CurrentMenu.Description, CurrentMenu.X + Description.Text.X,
CurrentMenu.Y + Description.Text.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Description.Text.Scale, 255, 255, 255, 255, nil, false, false,
Description.Background.Width + CurrentMenu.WidthOffset - 8.0)
RageUI.ItemOffset = RageUI.ItemOffset + CurrentMenu.DescriptionHeight + Description.Bar.Y
end
end
function RageUI.Render()
if RageUI.CurrentMenu == nil then
return
end
local CurrentMenu = RageUI.CurrentMenu;
if CurrentMenu.Safezone then
ResetScriptGfxAlign()
end
CurrentMenu.Options = RageUI.Options
CurrentMenu.SafeZoneSize = nil
RageUI.Controls()
RageUI.Options = 0
RageUI.StatisticPanelCount = 0
RageUI.ItemOffset = 0
if CurrentMenu.Controls.Back.Enabled then
if CurrentMenu.Controls.Back.Pressed and CurrentMenu.Closable then
CurrentMenu.Controls.Back.Pressed = false
Audio.PlaySound(RageUI.Settings.Audio.Back.audioName, RageUI.Settings.Audio.Back.audioRef)
if CurrentMenu.Closed ~= nil then
collectgarbage()
CurrentMenu.Closed()
end
if CurrentMenu.Parent ~= nil then
if CurrentMenu.Parent() then
RageUI.NextMenu = CurrentMenu.Parent
else
RageUI.NextMenu = nil
RageUI.Visible(CurrentMenu, false)
end
else
RageUI.NextMenu = nil
RageUI.Visible(CurrentMenu, false)
end
elseif CurrentMenu.Controls.Back.Pressed and not CurrentMenu.Closable then
CurrentMenu.Controls.Back.Pressed = false
end
end
if RageUI.NextMenu ~= nil then
if RageUI.NextMenu() then
RageUI.Visible(CurrentMenu, false)
RageUI.Visible(RageUI.NextMenu, true)
CurrentMenu.Controls.Select.Active = false
RageUI.NextMenu = nil
RageUI.LastControl = false
end
end
end
function RageUI.ItemsDescription(Description)
local CurrentMenu = RageUI.CurrentMenu;
if Description ~= "" or Description ~= nil then
if CurrentMenu.Description ~= Description then
CurrentMenu.Description = Description or nil;
local SettingsDescription = RageUI.Settings.Items.Description;
local DescriptionLineCount = Graphics.GetLineCount(CurrentMenu.Description,
CurrentMenu.X + SettingsDescription.Text.X, CurrentMenu.Y + SettingsDescription.Text.Y +
CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, SettingsDescription.Text.Scale, 255, 255, 255,
255, nil, false, false, SettingsDescription.Background.Width + (CurrentMenu.WidthOffset - 5.0))
if DescriptionLineCount > 1 then
CurrentMenu.DescriptionHeight = SettingsDescription.Background.Height * DescriptionLineCount
else
CurrentMenu.DescriptionHeight = SettingsDescription.Background.Height + 7
end
end
else
CurrentMenu.Description = nil;
end
end
function RageUI.ItemsMouseBounds(CurrentMenu, Selected, Option, SettingsButton)
local Hovered = false
Hovered = Graphics.IsMouseInBounds(CurrentMenu.X + CurrentMenu.SafeZoneSize.X,
CurrentMenu.Y + SettingsButton.Rectangle.Y + CurrentMenu.SafeZoneSize.Y + CurrentMenu.SubtitleHeight +
RageUI.ItemOffset, SettingsButton.Rectangle.Width + CurrentMenu.WidthOffset, SettingsButton.Rectangle.Height)
if Hovered and not Selected then
Graphics.Rectangle(CurrentMenu.X,
CurrentMenu.Y + SettingsButton.Rectangle.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
SettingsButton.Rectangle.Width + CurrentMenu.WidthOffset, SettingsButton.Rectangle.Height, 255, 255, 255, 20)
if CurrentMenu.Controls.Click.Active then
CurrentMenu.Index = Option
Audio.PlaySound(RageUI.Settings.Audio.UpDown.audioName, RageUI.Settings.Audio.UpDown.audioRef)
end
end
return Hovered;
end
function RageUI.ItemsSafeZone(CurrentMenu)
if not CurrentMenu.SafeZoneSize then
CurrentMenu.SafeZoneSize = {
X = 0,
Y = 0
}
if CurrentMenu.Safezone then
CurrentMenu.SafeZoneSize = RageUI.GetSafeZoneBounds()
SetScriptGfxAlign(76, 84)
SetScriptGfxAlignParams(0, 0, 0, 0)
end
end
end
function RageUI.Pool()
for name, callback in pairs(RageUI.PoolMenus) do
if type(callback) == "function" and name ~= RageUI.PoolMenus.Name then
callback()
if RageUI.PoolMenus.Timer == 1 then
RageUI.PoolMenus.Name = name
return
end
end
end
end
Citizen.CreateThread(function()
while true do
RageUI.PoolMenus.Timer = 250
if RageUI.PoolMenus.Name ~= nil then
RageUI.PoolMenus[RageUI.PoolMenus.Name]()
end
Citizen.Wait(RageUI.PoolMenus.Timer)
if RageUI.PoolMenus.Timer == 250 then
RageUI.PoolMenus.Name = nil
RageUI.Pool();
end
end
end)
@@ -1,449 +0,0 @@
TimerBar = {}
-- consts
TimerBar.gfxAlignWidth = 0.952
TimerBar.gfxAlignHeight = 0.949
TimerBar.initialX = 0.795
TimerBar.initialY = 0.923
TimerBar.initialBusySpinnerY = 0.887
TimerBar.bgBaseX = 0.874
TimerBar.progressBaseX = 0.913
TimerBar.checkpointBaseX = 0.9445
TimerBar.bgOffset = 0.008
TimerBar.bgThinOffset = 0.012
TimerBar.textOffset = -0.006
TimerBar.playerTitleOffset = -0.005
TimerBar.barOffset = 0.012
TimerBar.checkpointOffsetX = 0.0094
TimerBar.checkpointOffsetY = 0.012
TimerBar.timerBarWidth = 0.165
TimerBar.timerBarHeight = 0.035
TimerBar.timerBarThinHeight = 0.028
TimerBar.timerBarMargin = 0.0399
TimerBar.timerBarThinMargin = 0.0319
TimerBar.progressWidth = 0.069
TimerBar.progressHeight = 0.011
TimerBar.checkpointWidth = 0.012
TimerBar.checkpointHeight = 0.023
TimerBar.titleScale = 0.288
TimerBar.titleWrap = 0.867
TimerBar.textScale = 0.494
TimerBar.textWrap = 0.95
TimerBar.playertitleScale = 0.447
TimerBar.timerbarUnique = 0
-- list of all created timerbars
TimerBar.pool = {}
-- timerbar types
TimerBar.Progress = 0
TimerBar.Player = 1
TimerBar.Text = 2
TimerBar.Checkpoint = 3
local function DrawTextLabel(label, position, options)
options.font = Config.UIFontID
SetTextFont(options.font)
SetTextScale(0.0, options.scale)
SetTextColour(options.color[1], options.color[2], options.color[3], options.color[4])
SetTextJustification(options.justification);
if options.wrap then
SetTextWrap(0.0, options.wrap);
end
if options.shadow then
SetTextDropShadow()
end
if options.outline then
SetTextOutline()
end
BeginTextCommandDisplayText(label);
EndTextCommandDisplayText(position[1], position[2]);
end
local function CreateTimerBarBase(title)
local o = {}
-- assign unique ID
TimerBar.timerbarUnique = TimerBar.timerbarUnique + 1
o._id = TimerBar.timerbarUnique
-- set initial styling props
o._thin = false
o._highlightColor = nil
-- assign TextEntry for title
o._titleGxtName = "TMRB_TITLE_" .. o._id
o._title = title
AddTextEntry(o._titleGxtName, title)
-- set initial styling for title
o.titleDrawParams = {
font = 0,
color = {240, 240, 240, 255},
scale = TimerBar.titleScale,
justification = 2,
wrap = TimerBar.titleWrap,
shadow = false,
outline = false
}
-- set new title
o.setTitle = function(title)
o._title = title
AddTextEntry(o._titleGxtName, title)
end
-- set new title color
o.setTitleColor = function(titleColor)
o.titleDrawParams.color = titleColor
end
-- set new highlight color
o.setHighlightColor = function(highlightColor)
o._highlightColor = highlightColor
end
-- draw background
o.drawBackground = function(y)
y = y + (o._thin and TimerBar.bgThinOffset or TimerBar.bgThinOffset)
-- draw highlight side of gradient, if it's set
if o._highlightColor then
DrawSprite("timerbars", "all_white_bg", TimerBar.bgBaseX, y, TimerBar.timerBarWidth,
(o._thin and TimerBar.timerBarThinHeight or TimerBar.timerBarHeight), 0.0, o._highlightColor[1],
o._highlightColor[2], o._highlightColor[3], o._highlightColor[4])
end
-- draw black side of gradient background
DrawSprite("timerbars", "all_black_bg", TimerBar.bgBaseX, y, TimerBar.timerBarWidth,
(o._thin and TimerBar.timerBarThinHeight or TimerBar.timerBarHeight), 0.0, 255, 255, 255, 140)
end
-- draw title
o.drawTitle = function(y)
DrawTextLabel(o._titleGxtName, {TimerBar.initialX, y}, o.titleDrawParams)
end
-- draw
o.draw = function(y)
-- draws background & title
o.drawBackground(y)
o.drawTitle(y)
end
-- on destroy
o.onDestroy = function()
AddTextEntry(o._titleGxtName, "")
end
return o
end
local function CreateBarTimerBar(title, progress)
local o = {}
-- create base class
o.base = CreateTimerBarBase(title)
-- progress background and fill props
o._bgColor = {155, 155, 155, 255};
o._fgColor = {240, 240, 240, 255};
o._fgWidth = 0.0;
o._fgX = 0.0;
-- set new progress
o.setProgress = function(v)
o._progress = Clamp(v, 0.0, 1.0)
o._fgWidth = TimerBar.progressWidth * o._progress
o._fgX = (TimerBar.progressBaseX - TimerBar.progressWidth * 0.5) + (o._fgWidth * 0.5)
end
o.draw = function(y)
-- draw TimerBarBase
o.base.draw(y)
-- draw progress
y = y + TimerBar.barOffset
-- progress background
DrawRect(TimerBar.progressBaseX, y, TimerBar.progressWidth, TimerBar.progressHeight, o._bgColor[1],
o._bgColor[2], o._bgColor[3], o._bgColor[4])
-- progress fill
DrawRect(o._fgX, y, o._fgWidth, TimerBar.progressHeight, o._fgColor[1], o._fgColor[2], o._fgColor[3],
o._fgColor[4])
end
o.setBackgroundColor = function(color)
o._bgColor = color
end
o.setForegroundColor = function(color)
o._fgColor = color
end
-- set initial progress
o._progress = progress;
-- show initial progress
o.setProgress(progress)
o.setHighlightColor = o.base.setHighlightColor
o.setTitleColor = o.base.setTitleColor
o._thin = o.base._thin
o._id = o.base._id
-- on destroy
o.onDestroy = function()
o.base.onDestroy()
end
return o
end
local function CreateTextTimerBar(title, text)
local o = {}
-- create base class
o.base = CreateTimerBarBase(title)
-- assign TextEntry for text
o._textGxtName = "TMRB_TEXT_" .. o.base._id
o._text = text
AddTextEntry(o._textGxtName, text)
-- assign defailt text params
o.textDrawParams = {
font = 0,
color = {238, 232, 170, 255},
scale = TimerBar.textScale,
justification = 2,
wrap = TimerBar.textWrap
};
o.setText = function(newText)
AddTextEntry(o._textGxtName, newText)
end
o.setTextColor = function(color)
o.textDrawParams.color = color
end
-- draw
o.draw = function(y)
-- draw TimerBarBase
o.base.draw(y)
-- draw text
y = y + TimerBar.textOffset;
DrawTextLabel(o._textGxtName, {TimerBar.initialX, y}, o.textDrawParams)
end
o.setHighlightColor = o.base.setHighlightColor
o.setTitleColor = o.base.setTitleColor
o._thin = o.base._thin
o._id = o.base._id
o.setTitle = o.base.setTitle
-- on destroy
o.onDestroy = function()
o.base.onDestroy()
AddTextEntry(o._textGxtName, "")
end
return o
end
local function CreatePlayerTimerBar(title, text)
local o = {}
-- create base class
o.base = CreateTextTimerBar(title, text)
-- override TextTimerBars title styling
local titleDrawParams = o.base.base.titleDrawParams
titleDrawParams.font = 4
titleDrawParams.color = {238, 232, 170, 255}
titleDrawParams.scale = TimerBar.playertitleScale
titleDrawParams.justification = 2
titleDrawParams.wrap = TimerBar.titleWrap
titleDrawParams.shadow = true
o.draw = function(y)
-- draw TimerBarBase background
o.base.base.drawBackground(y)
-- draw title
DrawTextLabel(o.base.base._titleGxtName, {TimerBar.initialX, y + TimerBar.playerTitleOffset}, titleDrawParams)
-- draw text
DrawTextLabel(o.base._textGxtName, {TimerBar.initialX, y + TimerBar.textOffset}, o.base.textDrawParams)
end
o.setTextColor = o.base.setTextColor
o.setHighlightColor = o.base.base.setHighlightColor
o.setTitleColor = o.base.base.setTitleColor
o._thin = o.base.base._thin
o._id = o.base.base._id
-- on destroy
o.onDestroy = function()
o.base.onDestroy()
end
return o
end
local function CreateCheckpointTimerBar(title, numCheckpoints)
local o = {}
-- create base class
o.base = CreateTimerBarBase(title)
o.base._thin = false
-- checkpoints
o._checkpointStates = {}
o._numCheckpoints = numCheckpoints
-- colors
o._color = {113, 204, 111, 255}
o._inProgressColor = {255, 255, 255, 51}
o._failedColor = {0, 0, 0, 255}
-- initialize list
for i = 1, numCheckpoints, 1 do
o._checkpointStates[i] = 0
end
-- set value on all checkpoints
o.toggleAll = function(toggle)
for i = 1, numCheckpoints, 1 do
o._checkpointStates[i] = toggle
end
end
-- change num checkpoints
o.changeNumCheckpoints = function(newCount)
o._numCheckpoints = newCount
-- initialize list
for i = 1, numCheckpoints, 1 do
o._checkpointStates[i] = 0
end
end
-- set all checkpoints checked
o.checkAll = function()
o.toggleAll(1)
end
-- set all checkpoints unchecked
o.uncheckAll = function()
o.toggleAll(0)
end
-- set checkpoint state
o.setCheckpointState = function(index, state)
if o._checkpointStates[index] == nil then
return
end
o._checkpointStates[index] = state
end
-- draw
o.draw = function(y)
o.base.draw(y)
y = y + TimerBar.checkpointOffsetY
local cpX = TimerBar.checkpointBaseX
for i = 1, o._numCheckpoints, 1 do
local state = o._checkpointStates[i]
local drawColor = (state == 0 and o._inProgressColor or (state == -1 and o._failedColor or o._color))
DrawSprite("timerbars", "circle_checkpoints", cpX, y, TimerBar.checkpointWidth, TimerBar.checkpointHeight,
0.0, drawColor[1], drawColor[2], drawColor[3], drawColor[4])
cpX = cpX - TimerBar.checkpointOffsetX;
end
end
o.setHighlightColor = o.base.setHighlightColor
o.setTitleColor = o.base.setTitleColor
o._thin = o.base._thin
o._id = o.base._id
o.setTextColor = o.base.setTextColor
-- on destroy
o.onDestroy = function()
o.base.onDestroy()
end
return o
end
TimerBar.Create = function(type, title, value)
local o = nil
if type == 0 then
o = CreateBarTimerBar(title, value)
elseif type == 1 then
o = CreatePlayerTimerBar(title, value)
elseif type == 2 then
o = CreateTextTimerBar(title, value)
elseif type == 3 then
o = CreateCheckpointTimerBar(title, value)
end
table.insert(TimerBar.pool, o)
o.visible = true
return o
end
TimerBar.Destroy = function(bar)
for index, value in pairs(TimerBar.pool) do
if value == bar then
bar.onDestroy()
table.remove(TimerBar.pool, index)
end
end
end
TimerBar.DestroyAll = function()
for index, value in pairs(TimerBar.pool) do
value.onDestroy()
end
TimerBar.pool = {}
end
TimerBar.BeginDraw = function()
HideHudComponentThisFrame(6); -- HUD_VEHICLE_NAME
HideHudComponentThisFrame(7); -- HUD_AREA_NAME
HideHudComponentThisFrame(8); -- HUD_VEHICLE_CLASS
HideHudComponentThisFrame(9); -- HUD_STREET_NAME
SetScriptGfxAlign(82, 66)
SetScriptGfxAlignParams(0.0, 0.0, TimerBar.gfxAlignWidth, TimerBar.gfxAlignHeight)
end
TimerBar.EndDraw = function()
ResetScriptGfxAlign()
end
TimerBar.DrawAll = function()
if #(TimerBar.pool) == 0 then
return
end
if not ENABLE_HUD then
return
end
TimerBar.BeginDraw()
local busySpinner = BusyspinnerIsOn()
local drawY = ((busySpinner or INSTRUCTIONAL_BUTTONS_ACTIVE) and TimerBar.initialBusySpinnerY or TimerBar.initialY)
for _, v in pairs(TimerBar.pool) do
if v.visible then
v.draw(drawY)
drawY = drawY - (v._thin and TimerBar.timerBarThinMargin or TimerBar.timerBarMargin);
end
end
TimerBar.EndDraw()
end
@@ -1,34 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- File created at [24/05/2021 00:00]
---
Audio = {}
---PlaySound
---
--- Reference : N/A
---
---@param Library string
---@param Sound string
---@param IsLooped boolean
---@return nil
---@public
function Audio.PlaySound(Library, Sound, IsLooped)
local audioId
if not IsLooped then
PlaySoundFrontend(-1, Sound, Library, true)
else
if not audioId then
Citizen.CreateThread(function()
audioId = GetSoundId()
PlaySoundFrontend(audioId, Sound, Library, true)
Citizen.Wait(0.01)
StopSound(audioId)
ReleaseSoundId(audioId)
audioId = nil
end)
end
end
end
@@ -1,176 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- File created at [24/05/2021 00:00]
---
local function StringToArray(str)
local charCount = #str
local strCount = math.ceil(charCount / 99)
local strings = {}
for i = 1, strCount do
local start = (i - 1) * 99 + 1
local clamp = math.clamp(#string.sub(str, start), 0, 99)
local finish = ((i ~= 1) and (start - 1) or 0) + clamp
strings[i] = string.sub(str, start, finish)
end
return strings
end
local function AddText(str)
local str = tostring(str)
local charCount = #str
if charCount < 100 then
AddTextComponentSubstringPlayerName(str)
else
local strings = StringToArray(str)
for s = 1, #strings do
AddTextComponentSubstringPlayerName(strings[s])
end
end
end
local function RText(text, x, y, font, scale, r, g, b, a, alignment, dropShadow, outline, wordWrap)
local Text, X, Y = text, (x or 0) / 1920, (y or 0) / 1080
SetTextFont(Config.UIFontID)
SetTextScale(1.0, scale or 0)
SetTextColour(r or 255, g or 255, b or 255, a or 255)
if dropShadow then
SetTextDropShadow()
end
if outline then
SetTextOutline()
end
if alignment ~= nil then
if alignment == 1 or alignment == "Center" or alignment == "Centre" then
SetTextCentre(true)
elseif alignment == 2 or alignment == "Right" then
SetTextRightJustify(true)
end
end
if wordWrap and wordWrap ~= 0 then
if alignment == 1 or alignment == "Center" or alignment == "Centre" then
SetTextWrap(X - ((wordWrap / 1920) / 2), X + ((wordWrap / 1920) / 2))
elseif alignment == 2 or alignment == "Right" then
SetTextWrap(0, X)
else
SetTextWrap(X, X + (wordWrap / 1920))
end
else
if alignment == 2 or alignment == "Right" then
SetTextWrap(0, X)
end
end
return Text, X, Y
end
Graphics = {};
function Graphics.MeasureStringWidth(str, font, scale)
BeginTextCommandGetWidth("CELL_EMAIL_BCON")
AddTextComponentSubstringPlayerName(str)
SetTextFont(Config.UIFontID)
SetTextScale(1.0, scale or 0)
return EndTextCommandGetWidth(true) * 1920
end
function Graphics.Rectangle(x, y, width, height, r, g, b, a)
local X, Y, Width, Height = (x or 0) / 1920, (y or 0) / 1080, (width or 0) / 1920, (height or 0) / 1080
DrawRect(X + Width * 0.5, Y + Height * 0.5, Width, Height, r or 255, g or 255, b or 255, a or 255)
end
function Graphics.Sprite(dictionary, name, x, y, width, height, heading, r, g, b, a)
local X, Y, Width, Height = (x or 0) / 1920, (y or 0) / 1080, (width or 0) / 1920, (height or 0) / 1080
if not HasStreamedTextureDictLoaded(dictionary) then
RequestStreamedTextureDict(dictionary, true)
end
DrawSprite(dictionary, name, X + Width * 0.5, Y + Height * 0.5, Width, Height, heading or 0, r or 255, g or 255,
b or 255, a or 255)
end
Graphics.LineCache = {}
function Graphics.GetLineCount(text, x, y, font, scale, r, g, b, a, alignment, dropShadow, outline, wordWrap)
if not text then
return 1
end
if Graphics.LineCache[text] then
return Graphics.LineCache[text]
end
local Text, X, Y = RText(text, x, y, font, scale, r, g, b, a, alignment, dropShadow, outline, wordWrap)
BeginTextCommandLineCount("CELL_EMAIL_BCON")
AddText(Text)
local cached = EndTextCommandLineCount(X, Y)
Graphics.LineCache[text] = cached
return cached
end
function Graphics.Text(text, x, y, font, scale, r, g, b, a, alignment, dropShadow, outline, wordWrap)
local Text, X, Y = RText(text, x, y, font, scale, r, g, b, a, alignment, dropShadow, outline, wordWrap)
BeginTextCommandDisplayText("CELL_EMAIL_BCON")
AddText(Text)
EndTextCommandDisplayText(X, Y)
end
function Graphics.IsMouseInBounds(X, Y, Width, Height)
local MX, MY = math.round(GetControlNormal(2, 239) * 1920) / 1920,
math.round(GetControlNormal(2, 240) * 1080) / 1080
X, Y = X / 1920, Y / 1080
Width, Height = Width / 1920, Height / 1080
return (MX >= X and MX <= X + Width) and (MY > Y and MY < Y + Height)
end
function Graphics.ConvertToPixel(x, y)
return (x * 1920), (y * 1080)
end
function Graphics.ScreenToWorld(distance, flags)
local camRot = GetGameplayCamRot(0)
local camPos = GetGameplayCamCoord()
local mouse = vector2(GetControlNormal(2, 239), GetControlNormal(2, 240))
local cam3DPos, forwardDir = Graphics.ScreenRelToWorld(camPos, camRot, mouse)
local direction = camPos + forwardDir * distance
local rayHandle = StartExpensiveSynchronousShapeTestLosProbe(cam3DPos, direction, flags, 0, 0)
local _, hit, endCoords, surfaceNormal, entityHit = GetShapeTestResult(rayHandle)
return (hit == 1 and true or false), endCoords, surfaceNormal, entityHit,
(entityHit >= 1 and GetEntityType(entityHit) or 0), direction, mouse
end
function Graphics.ScreenRelToWorld(camPos, camRot, cursor)
local camForward = Graphics.RotationToDirection(camRot)
local rotUp = vector3(camRot.x + 1.0, camRot.y, camRot.z)
local rotDown = vector3(camRot.x - 1.0, camRot.y, camRot.z)
local rotLeft = vector3(camRot.x, camRot.y, camRot.z - 1.0)
local rotRight = vector3(camRot.x, camRot.y, camRot.z + 1.0)
local camRight = Graphics.RotationToDirection(rotRight) - Graphics.RotationToDirection(rotLeft)
local camUp = Graphics.RotationToDirection(rotUp) - Graphics.RotationToDirection(rotDown)
local rollRad = -(camRot.y * math.pi / 180.0)
local camRightRoll = camRight * math.cos(rollRad) - camUp * math.sin(rollRad)
local camUpRoll = camRight * math.sin(rollRad) + camUp * math.cos(rollRad)
local point3DZero = camPos + camForward * 1.0
local point3D = point3DZero + camRightRoll + camUpRoll
local point2D = Graphics.World3DToScreen2D(point3D)
local point2DZero = Graphics.World3DToScreen2D(point3DZero)
local scaleX = (cursor.x - point2DZero.x) / (point2D.x - point2DZero.x)
local scaleY = (cursor.y - point2DZero.y) / (point2D.y - point2DZero.y)
local point3Dret = point3DZero + camRightRoll * scaleX + camUpRoll * scaleY
local forwardDir = camForward + camRightRoll * scaleX + camUpRoll * scaleY
return point3Dret, forwardDir
end
function Graphics.RotationToDirection(rotation)
local x, z = (rotation.x * math.pi / 180.0), (rotation.z * math.pi / 180.0)
local num = math.abs(math.cos(x))
return vector3((-math.sin(z) * num), (math.cos(z) * num), math.sin(x))
end
function Graphics.World3DToScreen2D(pos)
local _, sX, sY = GetScreenCoordFromWorldCoord(pos.x, pos.y, pos.z)
return vector2(sX, sY)
end
@@ -1,22 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- File created at [24/05/2021 00:00]
---
Keys = {};
---Register
---@param Controls string
---@param ControlName string
---@param Description string
---@param Action function
---@return Keys
---@public
function Keys.Register(Controls, ControlName, Description, Action)
RegisterKeyMapping(string.format('keys-%s', ControlName), Description, "keyboard", Controls)
RegisterCommand(string.format('keys-%s', ControlName), function()
if (Action ~= nil) then
Action();
end
end, false)
end
@@ -1,12 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- File created at [24/05/2021 09:57]
---
function math.round(num, numDecimalPlaces)
return tonumber(string.format("%." .. (numDecimalPlaces or 0) .. "f", num))
end
function string.starts(String, Start)
return string.sub(String, 1, string.len(Start)) == Start
end
@@ -1,85 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- File created at [24/05/2021 00:00]
---
Visual = {};
local function AddLongString(txt)
for i = 100, string.len(txt), 99 do
local sub = string.sub(txt, i, i + 99)
AddTextComponentSubstringPlayerName(sub)
end
end
function Visual.Notification(args)
if (not args.dict) and (args.name) then
args.dict = args.name
end
if not HasStreamedTextureDictLoaded(args.dict) then
RequestStreamedTextureDict(args.dict, false)
while not HasStreamedTextureDictLoaded(args.dict) do
Wait(0)
end
end
if (args.backId) then
ThefeedNextPostBackgroundColor(args.backId)
end
BeginTextCommandThefeedPost("jamyfafi")
if (args.message) then
AddTextComponentSubstringPlayerName(args.message)
if string.len(args.message) > 99 then
AddLongString(args.message)
end
end
if (args.title) and (args.subtitle) and (args.name) then
EndTextCommandThefeedPostMessagetext(args.dict or "CHAR_DEFAULT", args.name or "CHAR_DEFAULT", true,
args.icon or 0, args.title or "", args.subtitle or "")
SetStreamedTextureDictAsNoLongerNeeded(args.dict)
end
EndTextCommandThefeedPostTicker(false, true)
end
function Visual.Subtitle(text, time)
ClearPrints()
BeginTextCommandPrint("STRING")
AddTextComponentSubstringPlayerName(text)
EndTextCommandPrint(time and math.ceil(time) or 0, true)
end
function Visual.FloatingHelpText(text, sound, loop)
BeginTextCommandDisplayHelp("jamyfafi")
AddTextComponentSubstringPlayerName(text)
if string.len(text) > 99 then
AddLongString(text)
end
EndTextCommandDisplayHelp(0, loop or 0, sound or false, -1)
end
function Visual.Prompt(text, spinner)
BeginTextCommandBusyspinnerOn("STRING")
AddTextComponentSubstringPlayerName(text)
EndTextCommandBusyspinnerOn(spinner or 1)
end
function Visual.PromptDuration(duration, text, spinner)
Citizen.CreateThread(function()
Citizen.Wait(0)
Visual.Prompt(text, spinner)
Citizen.Wait(duration)
if (BusyspinnerIsOn()) then
BusyspinnerOff();
end
end)
end
function Visual.FloatingHelpTextToEntity(text, x, y)
SetFloatingHelpTextScreenPosition(1, x, y)
SetFloatingHelpTextStyle(1, 1, 2, -1, 3, 0)
BeginTextCommandDisplayHelp("jamyfafi")
AddTextComponentSubstringPlayerName(text)
if string.len(text) > 99 then
AddLongString(text)
end
EndTextCommandDisplayHelp(2, false, false, -1)
end
@@ -1,337 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- created at [24/05/2021 10:02]
---
RageUI.BadgeStyle = {
-- DEFAULT BADGE
None = function()
return {
BadgeTexture = "",
BadgeDictionary = "commonmenu"
}
end,
BronzeMedal = function()
return {
BadgeTexture = "mp_medal_bronze"
}
end,
GoldMedal = function()
return {
BadgeTexture = "mp_medal_gold"
}
end,
SilverMedal = function()
return {
BadgeTexture = "medal_silver"
}
end,
Alert = function()
return {
BadgeTexture = "mp_alerttriangle"
}
end,
Crown = function(Selected)
return {
BadgeTexture = "mp_hostcrown",
BadgeColour = Selected and {
R = 0,
G = 0,
B = 0,
A = 255
} or {
R = 255,
G = 255,
B = 255,
A = 255
}
}
end,
Ammo = function(Selected)
return {
BadgeTexture = Selected and "shop_ammo_icon_b" or "shop_ammo_icon_a"
}
end,
Armour = function(Selected)
return {
BadgeTexture = Selected and "shop_armour_icon_b" or "shop_armour_icon_a"
}
end,
Barber = function(Selected)
return {
BadgeTexture = Selected and "shop_barber_icon_b" or "shop_barber_icon_a"
}
end,
Clothes = function(Selected)
return {
BadgeTexture = Selected and "shop_clothing_icon_b" or "shop_clothing_icon_a"
}
end,
Franklin = function(Selected)
return {
BadgeTexture = Selected and "shop_franklin_icon_b" or "shop_franklin_icon_a"
}
end,
Bike = function(Selected)
return {
BadgeTexture = Selected and "shop_garage_bike_icon_b" or "shop_garage_bike_icon_a"
}
end,
Car = function(Selected)
return {
BadgeTexture = Selected and "shop_garage_icon_b" or "shop_garage_icon_a"
}
end,
Boat = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_boat_black" or "mp_specitem_boat",
BadgeDictionary = "mpinventory"
}
end,
Heli = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_heli_black" or "mp_specitem_heli",
BadgeDictionary = "mpinventory"
}
end,
Plane = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_plane_black" or "mp_specitem_plane",
BadgeDictionary = "mpinventory"
}
end,
BoatPickup = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_boatpickup_black" or "mp_specitem_boatpickup",
BadgeDictionary = "mpinventory"
}
end,
Card = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_keycard_black" or "mp_specitem_keycard",
BadgeDictionary = "mpinventory"
}
end,
Gun = function(Selected)
return {
BadgeTexture = Selected and "shop_gunclub_icon_b" or "shop_gunclub_icon_a"
}
end,
Heart = function(Selected)
return {
BadgeTexture = Selected and "shop_health_icon_b" or "shop_health_icon_a"
}
end,
CasinoVIP = function(Selected)
return {
BadgeTexture = Selected and "shop_health_icon_b" or "shop_health_icon_a",
BadgeColour = Selected and {
R = 255,
G = 0,
B = 93,
A = 255
} or {
R = 255,
G = 0,
B = 93,
A = 255
}
}
end,
Makeup = function(Selected)
return {
BadgeTexture = Selected and "shop_makeup_icon_b" or "shop_makeup_icon_a"
}
end,
Mask = function(Selected)
return {
BadgeTexture = Selected and "shop_mask_icon_b" or "shop_mask_icon_a"
}
end,
Michael = function(Selected)
return {
BadgeTexture = Selected and "shop_michael_icon_b" or "shop_michael_icon_a"
}
end,
Star = function()
return {
BadgeTexture = "shop_new_star"
}
end,
Tattoo = function(Selected)
return {
BadgeTexture = Selected and "shop_tattoos_icon_b" or "shop_tattoos_icon_a"
}
end,
Trevor = function(Selected)
return {
BadgeTexture = Selected and "shop_trevor_icon_b" or "shop_trevor_icon_a"
}
end,
Lock = function(Selected)
return {
BadgeTexture = "shop_lock",
BadgeColour = Selected and {
R = 0,
G = 0,
B = 0,
A = 255
} or {
R = 255,
G = 255,
B = 255,
A = 255
}
}
end,
Tick = function(Selected)
return {
BadgeTexture = "shop_tick_icon",
BadgeColour = Selected and {
R = 0,
G = 0,
B = 0,
A = 255
} or {
R = 255,
G = 255,
B = 255,
A = 255
}
}
end,
Key = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_cuffkeys_black" or "mp_specitem_cuffkeys",
BadgeDictionary = "mpinventory"
}
end,
Coke = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_coke_black" or "mp_specitem_coke",
BadgeDictionary = "mpinventory"
}
end,
Heroin = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_heroin_black" or "mp_specitem_heroin",
BadgeDictionary = "mpinventory"
}
end,
Meth = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_meth_black" or "mp_specitem_meth",
BadgeDictionary = "mpinventory"
}
end,
Weed = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_weed_black" or "mp_specitem_weed",
BadgeDictionary = "mpinventory"
}
end,
Package = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_package_black" or "mp_specitem_package",
BadgeDictionary = "mpinventory"
}
end,
Cash = function(Selected)
return {
BadgeTexture = Selected and "mp_specitem_cash_black" or "mp_specitem_cash",
BadgeDictionary = "mpinventory"
}
end,
RP = function(Selected)
return {
BadgeTexture = "mp_anim_rp",
BadgeDictionary = "mphud"
}
end,
LSPD = function()
return {
BadgeTexture = "mpgroundlogo_cops",
BadgeDictionary = "3dtextures"
}
end,
Vagos = function()
return {
BadgeTexture = "mpgroundlogo_vagos",
BadgeDictionary = "3dtextures"
}
end,
Bikers = function()
return {
BadgeTexture = "mpgroundlogo_bikers",
BadgeDictionary = "3dtextures"
}
end,
-- CASINO
Badbeat = function()
return {
BadgeTexture = "badbeat",
BadgeDictionary = "mpawardcasino"
}
end,
CashingOut = function()
return {
BadgeTexture = "cashingout",
BadgeDictionary = "mpawardcasino"
}
end,
FullHouse = function()
return {
BadgeTexture = "fullhouse",
BadgeDictionary = "mpawardcasino"
}
end,
HighRoller = function()
return {
BadgeTexture = "highroller",
BadgeDictionary = "mpawardcasino"
}
end,
HouseKeeping = function()
return {
BadgeTexture = "housekeeping",
BadgeDictionary = "mpawardcasino"
}
end,
LooseCheng = function()
return {
BadgeTexture = "loosecheng",
BadgeDictionary = "mpawardcasino"
}
end,
LuckyLucky = function()
return {
BadgeTexture = "luckylucky",
BadgeDictionary = "mpawardcasino"
}
end,
PlayToWin = function()
return {
BadgeTexture = "playtowin",
BadgeDictionary = "mpawardcasino"
}
end,
StraightFlush = function()
return {
BadgeTexture = "straightflush",
BadgeDictionary = "mpawardcasino"
}
end,
StrongArmTactics = function()
return {
BadgeTexture = "strongarmtactics",
BadgeDictionary = "mpawardcasino"
}
end,
TopPair = function()
return {
BadgeTexture = "toppair",
BadgeDictionary = "mpawardcasino"
}
end
}
@@ -1,227 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- created at [24/05/2021 10:02]
---
RageUI.ItemsColour = {
MyRed = {255, 20, 20, 255},
MyOrange = {255, 141, 20, 255},
MyGreen = {82, 255, 20, 255},
PureWhite = {255, 255, 255, 255},
White = {240, 240, 240, 255},
Black = {0, 0, 0, 255},
Grey = {155, 155, 155, 255},
GreyLight = {205, 205, 205, 255},
GreyDark = {77, 77, 77, 255},
Red = {224, 50, 50, 255},
RedLight = {240, 153, 153, 255},
RedDark = {112, 25, 25, 255},
Blue = {93, 182, 229, 255},
BlueLight = {174, 219, 242, 255},
BlueDark = {47, 92, 115, 255},
Yellow = {240, 200, 80, 255},
YellowLight = {254, 235, 169, 255},
YellowDark = {126, 107, 41, 255},
Orange = {255, 133, 85, 255},
OrangeLight = {255, 194, 170, 255},
OrangeDark = {127, 66, 42, 255},
Green = {114, 204, 114, 255},
GreenLight = {185, 230, 185, 255},
GreenDark = {57, 102, 57, 255},
Purple = {132, 102, 226, 255},
PurpleLight = {192, 179, 239, 255},
PurpleDark = {67, 57, 111, 255},
Pink = {203, 54, 148, 255},
RadarHealth = {53, 154, 71, 255},
RadarArmour = {93, 182, 229, 255},
RadarDamage = {235, 36, 39, 255},
NetPlayer1 = {194, 80, 80, 255},
NetPlayer2 = {156, 110, 175, 255},
NetPlayer3 = {255, 123, 196, 255},
NetPlayer4 = {247, 159, 123, 255},
NetPlayer5 = {178, 144, 132, 255},
NetPlayer6 = {141, 206, 167, 255},
NetPlayer7 = {113, 169, 175, 255},
NetPlayer8 = {211, 209, 231, 255},
NetPlayer9 = {144, 127, 153, 255},
NetPlayer10 = {106, 196, 191, 255},
NetPlayer11 = {214, 196, 153, 255},
NetPlayer12 = {234, 142, 80, 255},
NetPlayer13 = {152, 203, 234, 255},
NetPlayer14 = {178, 98, 135, 255},
NetPlayer15 = {144, 142, 122, 255},
NetPlayer16 = {166, 117, 94, 255},
NetPlayer17 = {175, 168, 168, 255},
NetPlayer18 = {232, 142, 155, 255},
NetPlayer19 = {187, 214, 91, 255},
NetPlayer20 = {12, 123, 86, 255},
NetPlayer21 = {123, 196, 255, 255},
NetPlayer22 = {171, 60, 230, 255},
NetPlayer23 = {206, 169, 13, 255},
NetPlayer24 = {71, 99, 173, 255},
NetPlayer25 = {42, 166, 185, 255},
NetPlayer26 = {186, 157, 125, 255},
NetPlayer27 = {201, 225, 255, 255},
NetPlayer28 = {240, 240, 150, 255},
NetPlayer29 = {237, 140, 161, 255},
NetPlayer30 = {249, 138, 138, 255},
NetPlayer31 = {252, 239, 166, 255},
NetPlayer32 = {240, 240, 240, 255},
SimpleBlipDefault = {159, 201, 166, 255},
MenuBlue = {140, 140, 140, 255},
MenuGreyLight = {140, 140, 140, 255},
MenuBlueExtraDark = {40, 40, 40, 255},
MenuYellow = {240, 160, 0, 255},
MenuYellowDark = {240, 160, 0, 255},
MenuGreen = {240, 160, 0, 255},
MenuGrey = {140, 140, 140, 255},
MenuGreyDark = {60, 60, 60, 255},
MenuHighlight = {30, 30, 30, 255},
MenuStandard = {140, 140, 140, 255},
MenuDimmed = {75, 75, 75, 255},
MenuExtraDimmed = {50, 50, 50, 255},
BriefTitle = {95, 95, 95, 255},
MidGreyMp = {100, 100, 100, 255},
NetPlayer1Dark = {93, 39, 39, 255},
NetPlayer2Dark = {77, 55, 89, 255},
NetPlayer3Dark = {124, 62, 99, 255},
NetPlayer4Dark = {120, 80, 80, 255},
NetPlayer5Dark = {87, 72, 66, 255},
NetPlayer6Dark = {74, 103, 83, 255},
NetPlayer7Dark = {60, 85, 88, 255},
NetPlayer8Dark = {105, 105, 64, 255},
NetPlayer9Dark = {72, 63, 76, 255},
NetPlayer10Dark = {53, 98, 95, 255},
NetPlayer11Dark = {107, 98, 76, 255},
NetPlayer12Dark = {117, 71, 40, 255},
NetPlayer13Dark = {76, 101, 117, 255},
NetPlayer14Dark = {65, 35, 47, 255},
NetPlayer15Dark = {72, 71, 61, 255},
NetPlayer16Dark = {85, 58, 47, 255},
NetPlayer17Dark = {87, 84, 84, 255},
NetPlayer18Dark = {116, 71, 77, 255},
NetPlayer19Dark = {93, 107, 45, 255},
NetPlayer20Dark = {6, 61, 43, 255},
NetPlayer21Dark = {61, 98, 127, 255},
NetPlayer22Dark = {85, 30, 115, 255},
NetPlayer23Dark = {103, 84, 6, 255},
NetPlayer24Dark = {35, 49, 86, 255},
NetPlayer25Dark = {21, 83, 92, 255},
NetPlayer26Dark = {93, 98, 62, 255},
NetPlayer27Dark = {100, 112, 127, 255},
NetPlayer28Dark = {120, 120, 75, 255},
NetPlayer29Dark = {152, 76, 93, 255},
NetPlayer30Dark = {124, 69, 69, 255},
NetPlayer31Dark = {10, 43, 50, 255},
NetPlayer32Dark = {95, 95, 10, 255},
Bronze = {180, 130, 97, 255},
Silver = {150, 153, 161, 255},
Gold = {214, 181, 99, 255},
Platinum = {166, 221, 190, 255},
Gang1 = {29, 100, 153, 255},
Gang2 = {214, 116, 15, 255},
Gang3 = {135, 125, 142, 255},
Gang4 = {229, 119, 185, 255},
SameCrew = {252, 239, 166, 255},
Freemode = {45, 110, 185, 255},
PauseBg = {0, 0, 0, 255},
Friendly = {93, 182, 229, 255},
Enemy = {194, 80, 80, 255},
Location = {240, 200, 80, 255},
Pickup = {114, 204, 114, 255},
PauseSingleplayer = {114, 204, 114, 255},
FreemodeDark = {22, 55, 92, 255},
InactiveMission = {154, 154, 154, 255},
Damage = {194, 80, 80, 255},
PinkLight = {252, 115, 201, 255},
PmMitemHighlight = {252, 177, 49, 255},
ScriptVariable = {0, 0, 0, 255},
Yoga = {109, 247, 204, 255},
Tennis = {241, 101, 34, 255},
Golf = {214, 189, 97, 255},
ShootingRange = {112, 25, 25, 255},
FlightSchool = {47, 92, 115, 255},
NorthBlue = {93, 182, 229, 255},
SocialClub = {234, 153, 28, 255},
PlatformBlue = {11, 55, 123, 255},
PlatformGreen = {146, 200, 62, 255},
PlatformGrey = {234, 153, 28, 255},
FacebookBlue = {66, 89, 148, 255},
IngameBg = {0, 0, 0, 255},
Darts = {114, 204, 114, 255},
Waypoint = {164, 76, 242, 255},
Michael = {101, 180, 212, 255},
Franklin = {171, 237, 171, 255},
Trevor = {255, 163, 87, 255},
GolfP1 = {240, 240, 240, 255},
GolfP2 = {235, 239, 30, 255},
GolfP3 = {255, 149, 14, 255},
GolfP4 = {246, 60, 161, 255},
WaypointLight = {210, 166, 249, 255},
WaypointDark = {82, 38, 121, 255},
PanelLight = {0, 0, 0, 255},
MichaelDark = {72, 103, 116, 255},
FranklinDark = {85, 118, 85, 255},
TrevorDark = {127, 81, 43, 255},
ObjectiveRoute = {240, 200, 80, 255},
PausemapTint = {0, 0, 0, 255},
PauseDeselect = {100, 100, 100, 255},
PmWeaponsPurchasable = {45, 110, 185, 255},
PmWeaponsLocked = {240, 240, 240, 255},
ScreenBg = {0, 0, 0, 255},
Chop = {224, 50, 50, 255},
PausemapTintHalf = {0, 0, 0, 255},
NorthBlueOfficial = {0, 71, 133, 255},
ScriptVariable2 = {0, 0, 0, 255},
H = {33, 118, 37, 255},
HDark = {37, 102, 40, 255},
T = {234, 153, 28, 255},
TDark = {225, 140, 8, 255},
HShard = {20, 40, 0, 255},
ControllerMichael = {48, 255, 255, 255},
ControllerFranklin = {48, 255, 0, 255},
ControllerTrevor = {176, 80, 0, 255},
ControllerChop = {127, 0, 0, 255},
VideoEditorVideo = {53, 166, 224, 255},
VideoEditorAudio = {162, 79, 157, 255},
VideoEditorText = {104, 192, 141, 255},
HbBlue = {29, 100, 153, 255},
HbYellow = {234, 153, 28, 255},
VideoEditorScore = {240, 160, 1, 255},
VideoEditorAudioFadeout = {59, 34, 57, 255},
VideoEditorTextFadeout = {41, 68, 53, 255},
VideoEditorScoreFadeout = {82, 58, 10, 255},
HeistBackground = {37, 102, 40, 255},
VideoEditorAmbient = {240, 200, 80, 255},
VideoEditorAmbientFadeout = {80, 70, 34, 255},
Gb = {255, 133, 85, 255},
G = {255, 194, 170, 255},
B = {255, 133, 85, 255},
LowFlow = {240, 200, 80, 255},
LowFlowDark = {126, 107, 41, 255},
G1 = {247, 159, 123, 255},
G2 = {226, 134, 187, 255},
G3 = {239, 238, 151, 255},
G4 = {113, 169, 175, 255},
G5 = {160, 140, 193, 255},
G6 = {141, 206, 167, 255},
G7 = {181, 214, 234, 255},
G8 = {178, 144, 132, 255},
G9 = {0, 132, 114, 255},
G10 = {216, 85, 117, 255},
G11 = {30, 100, 152, 255},
G12 = {43, 181, 117, 255},
G13 = {233, 141, 79, 255},
G14 = {137, 210, 215, 255},
G15 = {134, 125, 141, 255},
Adversary = {109, 34, 33, 255},
DegenRed = {255, 0, 0, 255},
DegenYellow = {255, 255, 0, 255},
DegenGreen = {0, 255, 0, 255},
DegenCyan = {0, 255, 255, 255},
DegenBlue = {0, 0, 255, 255},
DegenMagenta = {255, 0, 255, 255},
Stunt1 = {38, 136, 234, 255},
Stunt2 = {224, 50, 50, 255}
}
@@ -1,73 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- created at [24/05/2021 10:02]
---
RageUI.PanelColour = {
HairCut = {{22, 19, 19}, -- 0
{30, 28, 25}, -- 1
{76, 56, 45}, -- 2
{69, 34, 24}, -- 3
{123, 59, 31}, -- 4
{149, 68, 35}, -- 5
{165, 87, 50}, -- 6
{175, 111, 72}, -- 7
{159, 105, 68}, -- 8
{198, 152, 108}, -- 9
{213, 170, 115}, -- 10
{223, 187, 132}, -- 11
{202, 164, 110}, -- 12
{238, 204, 130}, -- 13
{229, 190, 126}, -- 14
{250, 225, 167}, -- 15
{187, 140, 96}, -- 16
{163, 92, 60}, -- 17
{144, 52, 37}, -- 18
{134, 21, 17}, -- 19
{164, 24, 18}, -- 20
{195, 33, 24}, -- 21
{221, 69, 34}, -- 22
{229, 71, 30}, -- 23
{208, 97, 56}, -- 24
{113, 79, 38}, -- 25
{132, 107, 95}, -- 26
{185, 164, 150}, -- 27
{218, 196, 180}, -- 28
{247, 230, 217}, -- 29
{102, 72, 93}, -- 30
{162, 105, 138}, -- 31
{171, 174, 11}, -- 32
{239, 61, 200}, -- 33
{255, 69, 152}, -- 34
{255, 178, 191}, -- 35
{12, 168, 146}, -- 36
{8, 146, 165}, -- 37
{11, 82, 134}, -- 38
{118, 190, 117}, -- 39
{52, 156, 104}, -- 40
{22, 86, 85}, -- 41
{152, 177, 40}, -- 42
{127, 162, 23}, -- 43
{241, 200, 98}, -- 44
{238, 178, 16}, -- 45
{224, 134, 14}, -- 46
{247, 157, 15}, -- 47
{243, 143, 16}, -- 48
{231, 70, 15}, -- 49
{255, 101, 21}, -- 50
{254, 91, 34}, -- 51
{252, 67, 21}, -- 52
{196, 12, 15}, -- 53
{143, 10, 14}, -- 54
{44, 27, 22}, -- 55
{80, 51, 37}, -- 56
{98, 54, 37}, -- 57
{60, 31, 24}, -- 58
{69, 43, 32}, -- 59
{8, 10, 14}, -- 60
{212, 185, 158}, -- 61
{212, 185, 158}, -- 62
{213, 170, 115} -- 63
}
}
@@ -1,689 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- created at [24/05/2021 10:02]
---
local ItemsSettings = {
CheckBox = {
Textures = {"shop_box_blankb", -- 1
"shop_box_tickb", -- 2
"shop_box_blank", -- 3
"shop_box_tick", -- 4
"shop_box_crossb", -- 5
"shop_box_cross" -- 6
},
X = 380,
Y = -6,
Width = 50,
Height = 50
},
Rectangle = {
Y = 0,
Width = 431,
Height = 38
}
}
local function StyleCheckBox(Selected, Checked, Box, BoxSelect, OffSet)
local CurrentMenu = RageUI.CurrentMenu;
if OffSet == nil then
OffSet = 0
end
if Selected then
if Checked then
Graphics.Sprite("commonmenu", ItemsSettings.CheckBox.Textures[Box],
CurrentMenu.X + 380 + CurrentMenu.WidthOffset - OffSet,
CurrentMenu.Y + -6 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 50, 50)
else
Graphics.Sprite("commonmenu", ItemsSettings.CheckBox.Textures[1],
CurrentMenu.X + 380 + CurrentMenu.WidthOffset - OffSet,
CurrentMenu.Y + -6 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 50, 50)
end
else
if Checked then
Graphics.Sprite("commonmenu", ItemsSettings.CheckBox.Textures[BoxSelect],
CurrentMenu.X + 380 + CurrentMenu.WidthOffset - OffSet,
CurrentMenu.Y + -6 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 50, 50)
else
Graphics.Sprite("commonmenu", ItemsSettings.CheckBox.Textures[3],
CurrentMenu.X + 380 + CurrentMenu.WidthOffset - OffSet,
CurrentMenu.Y + -6 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 50, 50)
end
end
end
---@class Items
Items = {}
---AddButton
---
--- Add items button.
---
---@param Label string
---@param Description string
---@param Style table
---@param Actions fun(onSelected:boolean, onActive:boolean)
---@param Submenu any
---@public
---@return void
function Items:AddButton(Label, Description, Style, Actions, Submenu)
if not RageUI.CurrentMenu then
return
end
local CurrentMenu = RageUI.CurrentMenu
local Option = RageUI.Options + 1
if CurrentMenu.Pagination.Minimum <= Option and CurrentMenu.Pagination.Maximum >= Option then
local Active = CurrentMenu.Index == Option
RageUI.ItemsSafeZone(CurrentMenu)
local haveLeftBadge = Style.LeftBadge and Style.LeftBadge ~= RageUI.BadgeStyle.None
local haveRightBadge = (Style.RightBadge and Style.RightBadge ~= RageUI.BadgeStyle.None)
local LeftBadgeOffset = haveLeftBadge and 27 or 0
local RightBadgeOffset = haveRightBadge and 32 or 0
if Style.Color and Style.Color.BackgroundColor then
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y + 0 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
431 + CurrentMenu.WidthOffset, 38, Style.Color.BackgroundColor[1], Style.Color.BackgroundColor[2],
Style.Color.BackgroundColor[3], Style.Color.BackgroundColor[4])
end
if Active then
if Style.Color and Style.Color.HightLightColor then
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y + 0 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
431 + CurrentMenu.WidthOffset, 38, Style.Color.HightLightColor[1], Style.Color.HightLightColor[2],
Style.Color.HightLightColor[3], Style.Color.HightLightColor[4])
else
Graphics.Sprite("commonmenu", "gradient_nav", CurrentMenu.X,
CurrentMenu.Y + 0 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 431 + CurrentMenu.WidthOffset,
38)
end
end
if not (Style.IsDisabled) then
if haveLeftBadge then
if (Style.LeftBadge ~= nil) then
local LeftBadge = Style.LeftBadge(Active)
Graphics.Sprite(LeftBadge.BadgeDictionary or "commonmenu", LeftBadge.BadgeTexture or "",
CurrentMenu.X, CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
LeftBadge.BadgeColour and LeftBadge.BadgeColour.R or 255,
LeftBadge.BadgeColour and LeftBadge.BadgeColour.G or 255,
LeftBadge.BadgeColour and LeftBadge.BadgeColour.B or 255,
LeftBadge.BadgeColour and LeftBadge.BadgeColour.A or 255)
end
end
if haveRightBadge then
if (Style.RightBadge ~= nil) then
local RightBadge = Style.RightBadge(Active)
Graphics.Sprite(RightBadge.BadgeDictionary or "commonmenu", RightBadge.BadgeTexture or "",
CurrentMenu.X + 385 + CurrentMenu.WidthOffset,
CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
RightBadge.BadgeColour and RightBadge.BadgeColour.R or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.G or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.B or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.A or 255)
end
end
if Style.RightLabel then
Graphics.Text(Style.RightLabel, CurrentMenu.X + 420 - RightBadgeOffset + CurrentMenu.WidthOffset,
CurrentMenu.Y + 4 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35,
Active and 0 or Style.RightLabelColor[1], Active and 0 or Style.RightLabelColor[2],
Active and 0 or Style.RightLabelColor[3], 255, 2)
end
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, Active and 0 or 245,
Active and 0 or 245, Active and 0 or 245, 255)
else
local RightBadge = RageUI.BadgeStyle.Lock(Active)
Graphics.Sprite(RightBadge.BadgeDictionary or "commonmenu", RightBadge.BadgeTexture or "",
CurrentMenu.X + 385 + CurrentMenu.WidthOffset,
CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
RightBadge.BadgeColour and RightBadge.BadgeColour.R or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.G or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.B or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.A or 255)
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 163, 159, 148, 255)
end
RageUI.ItemOffset = RageUI.ItemOffset + 38
if (Active) then
RageUI.ItemsDescription(Description);
if not (Style.IsDisabled) then
local Selected = (CurrentMenu.Controls.Select.Active)
if Actions ~= nil then
Actions(Selected, Active)
end
if Selected then
Audio.PlaySound(RageUI.Settings.Audio.Select.audioName, RageUI.Settings.Audio.Select.audioRef)
if Submenu and Submenu() then
RageUI.NextMenu = Submenu
end
end
end
end
end
RageUI.Options = RageUI.Options + 1
end
function Items:AddExtraSubtitle(Label, RightLabel, R, G, B, A)
if not RageUI.CurrentMenu then
return
end
local CurrentMenu = RageUI.CurrentMenu
RageUI.ItemsSafeZone(CurrentMenu)
if CurrentMenu.Subtitle ~= "" then
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y + RageUI.ItemOffset,
RageUI.Settings.Items.Subtitle.Background.Width + CurrentMenu.WidthOffset,
RageUI.Settings.Items.Subtitle.Background.Height + CurrentMenu.SubtitleHeight, R, G, B, A)
Graphics.Text(Label, CurrentMenu.X + RageUI.Settings.Items.Subtitle.Text.X,
CurrentMenu.Y + RageUI.Settings.Items.Subtitle.Text.Y + RageUI.ItemOffset, 0,
RageUI.Settings.Items.Subtitle.Text.Scale, 245, 245, 245, 255, nil, false, false,
RageUI.Settings.Items.Subtitle.Background.Width + CurrentMenu.WidthOffset)
if CurrentMenu.Index > CurrentMenu.Options or CurrentMenu.Index < 0 then
CurrentMenu.Index = 1
end
if (CurrentMenu ~= nil) then
if (CurrentMenu.Index > CurrentMenu.Pagination.Total) then
local offset = CurrentMenu.Index - CurrentMenu.Pagination.Total
CurrentMenu.Pagination.Minimum = 1 + offset
CurrentMenu.Pagination.Maximum = CurrentMenu.Pagination.Total + offset
else
CurrentMenu.Pagination.Minimum = 1
CurrentMenu.Pagination.Maximum = CurrentMenu.Pagination.Total
end
end
Graphics.Text(RightLabel, CurrentMenu.X + RageUI.Settings.Items.Subtitle.PreText.X + CurrentMenu.WidthOffset,
CurrentMenu.Y + RageUI.Settings.Items.Subtitle.PreText.Y + RageUI.ItemOffset, 0,
RageUI.Settings.Items.Subtitle.PreText.Scale, 245, 245, 245, 255, 2)
RageUI.ItemOffset = RageUI.ItemOffset + RageUI.Settings.Items.Subtitle.Background.Height
end
end
function Items:AddEmpty()
if not RageUI.CurrentMenu then
return
end
local CurrentMenu = RageUI.CurrentMenu
RageUI.ItemsSafeZone(CurrentMenu)
if CurrentMenu.Subtitle ~= "" then
if CurrentMenu.Index > CurrentMenu.Options or CurrentMenu.Index < 0 then
CurrentMenu.Index = 1
end
if (CurrentMenu ~= nil) then
if (CurrentMenu.Index > CurrentMenu.Pagination.Total) then
local offset = CurrentMenu.Index - CurrentMenu.Pagination.Total
CurrentMenu.Pagination.Minimum = 1 + offset
CurrentMenu.Pagination.Maximum = CurrentMenu.Pagination.Total + offset
else
CurrentMenu.Pagination.Minimum = 1
CurrentMenu.Pagination.Maximum = CurrentMenu.Pagination.Total
end
end
end
end
function Items:AddWinnerLoser(Label, Winnings, Mugshot, Description, Style, Actions, Submenu)
if not RageUI.CurrentMenu then
return
end
local CurrentMenu = RageUI.CurrentMenu
local Option = RageUI.Options + 1
if CurrentMenu.Pagination.Minimum <= Option and CurrentMenu.Pagination.Maximum >= Option then
local Active = CurrentMenu.Index == Option
RageUI.ItemsSafeZone(CurrentMenu)
local haveLeftBadge = Style.LeftBadge and Style.LeftBadge ~= RageUI.BadgeStyle.None
local haveRightBadge = (Style.RightBadge and Style.RightBadge ~= RageUI.BadgeStyle.None)
local LeftBadgeOffset = haveLeftBadge and 27 or 0
local RightBadgeOffset = haveRightBadge and 32 or 0
if Style.Color and Style.Color.BackgroundColor then
Graphics.Rectangle(CurrentMenu.X, CurrentMenu.Y + 0 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
431 + CurrentMenu.WidthOffset, 38, Style.Color.BackgroundColor[1], Style.Color.BackgroundColor[2],
Style.Color.BackgroundColor[3], Style.Color.BackgroundColor[4])
end
if not (Style.IsDisabled) then
if haveLeftBadge then
if (Style.LeftBadge ~= nil) then
local LeftBadge = Style.LeftBadge(Active)
Graphics.Sprite(LeftBadge.BadgeDictionary or "commonmenu", LeftBadge.BadgeTexture or "",
CurrentMenu.X, CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
LeftBadge.BadgeColour and LeftBadge.BadgeColour.R or 255,
LeftBadge.BadgeColour and LeftBadge.BadgeColour.G or 255,
LeftBadge.BadgeColour and LeftBadge.BadgeColour.B or 255,
LeftBadge.BadgeColour and LeftBadge.BadgeColour.A or 255)
end
end
if haveRightBadge then
if (Style.RightBadge ~= nil) then
local RightBadge = Style.RightBadge(Active)
Graphics.Sprite(RightBadge.BadgeDictionary or "commonmenu", RightBadge.BadgeTexture or "",
CurrentMenu.X + 385 + CurrentMenu.WidthOffset,
CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
RightBadge.BadgeColour and RightBadge.BadgeColour.R or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.G or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.B or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.A or 255)
end
end
if Style.RightLabel then
Graphics.Text(Style.RightLabel, CurrentMenu.X + 420 - RightBadgeOffset + CurrentMenu.WidthOffset,
CurrentMenu.Y + 4 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35,
Style.RightLabelColor[1], Style.RightLabelColor[2], Style.RightLabelColor[3],
Style.RightLabelColor[4], 2)
end
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset + 35,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 2, 0, 0.33,
Style.TextLabelColor[1], Style.TextLabelColor[2], Style.TextLabelColor[3], Style.TextLabelColor[4])
if Mugshot then
Graphics.Sprite(Mugshot, Mugshot, CurrentMenu.X,
CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 2, 37, 37, 0, 255, 255, 255,
255)
end
else
local RightBadge = RageUI.BadgeStyle.Lock(Active)
Graphics.Sprite(RightBadge.BadgeDictionary or "commonmenu", RightBadge.BadgeTexture or "",
CurrentMenu.X + 385 + CurrentMenu.WidthOffset,
CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
RightBadge.BadgeColour and RightBadge.BadgeColour.R or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.G or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.B or 255,
RightBadge.BadgeColour and RightBadge.BadgeColour.A or 255)
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 163, 159, 148, 255)
end
RageUI.ItemOffset = RageUI.ItemOffset + 38
if (Active) then
RageUI.ItemsDescription(Description);
if not (Style.IsDisabled) then
local Selected = (CurrentMenu.Controls.Select.Active)
if Actions ~= nil then
Actions(Selected, Active)
end
if Selected then
Audio.PlaySound(RageUI.Settings.Audio.Select.audioName, RageUI.Settings.Audio.Select.audioRef)
if Submenu and Submenu() then
RageUI.NextMenu = Submenu
end
end
end
end
end
RageUI.Options = RageUI.Options + 1
end
---CheckBox
---@param Label string
---@param Description string
---@param Checked boolean
---@param Style table
---@param Actions fun(onSelected:boolean, IsChecked:boolean)
function Items:CheckBox(Label, Description, Checked, Style, Actions)
local CurrentMenu = RageUI.CurrentMenu;
local Option = RageUI.Options + 1
if CurrentMenu.Pagination.Minimum <= Option and CurrentMenu.Pagination.Maximum >= Option then
local Active = CurrentMenu.Index == Option;
local Selected = false;
local LeftBadgeOffset = ((Style.LeftBadge == RageUI.BadgeStyle.None or Style.LeftBadge == nil) and 0 or 27)
local RightBadgeOffset = ((Style.RightBadge == RageUI.BadgeStyle.None or Style.RightBadge == nil) and 0 or 32)
local BoxOffset = 0
RageUI.ItemsSafeZone(CurrentMenu)
if (Active) then
Graphics.Sprite("commonmenu", "gradient_nav", CurrentMenu.X,
CurrentMenu.Y + 0 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 431 + CurrentMenu.WidthOffset, 38)
end
if (Style.IsDisabled == nil) or not (Style.IsDisabled) then
if Active then
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 0, 0, 0, 255)
else
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 245, 245, 245, 255)
end
if Style.LeftBadge ~= nil then
if Style.LeftBadge ~= RageUI.BadgeStyle.None then
local BadgeData = Style.LeftBadge(Active)
Graphics.Sprite(BadgeData.BadgeDictionary or "commonmenu", BadgeData.BadgeTexture or "",
CurrentMenu.X, CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
BadgeData.BadgeColour and BadgeData.BadgeColour.R or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.G or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.B or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.A or 255)
end
end
if Style.RightBadge ~= nil then
if Style.RightBadge ~= RageUI.BadgeStyle.None then
local BadgeData = Style.RightBadge(Active)
Graphics.Sprite(BadgeData.BadgeDictionary or "commonmenu", BadgeData.BadgeTexture or "",
CurrentMenu.X + 385 + CurrentMenu.WidthOffset,
CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
BadgeData.BadgeColour and BadgeData.BadgeColour.R or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.G or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.B or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.A or 255)
end
end
else
local LeftBadge = RageUI.BadgeStyle.Lock
LeftBadgeOffset = ((LeftBadge == RageUI.BadgeStyle.None or LeftBadge == nil) and 0 or 27)
if Active then
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 0, 0, 0, 255)
else
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 163, 159, 148, 255)
end
if LeftBadge ~= RageUI.BadgeStyle.None and LeftBadge ~= nil then
local BadgeData = LeftBadge(Active)
Graphics.Sprite(BadgeData.BadgeDictionary or "commonmenu", BadgeData.BadgeTexture or "", CurrentMenu.X,
CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
BadgeData.BadgeColour.R or 255, BadgeData.BadgeColour.G or 255, BadgeData.BadgeColour.B or 255,
BadgeData.BadgeColour.A or 255)
end
end
if (Active) then
if Style.RightLabel ~= nil and Style.RightLabel ~= "" then
Graphics.Text(Style.RightLabel, CurrentMenu.X + 420 - RightBadgeOffset + CurrentMenu.WidthOffset,
CurrentMenu.Y + 4 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35, 0, 0, 0, 255, 2)
BoxOffset = MeasureStringWidth(Style.RightLabel, 0, 0.35)
end
else
if Style.RightLabel ~= nil and Style.RightLabel ~= "" then
Graphics.Text(Style.RightLabel, CurrentMenu.X + 420 - RightBadgeOffset + CurrentMenu.WidthOffset,
CurrentMenu.Y + 4 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35, 245, 245, 245, 255, 2)
BoxOffset = MeasureStringWidth(Style.RightLabel, 0, 0.35)
end
end
BoxOffset = RightBadgeOffset + BoxOffset
if Style.Style ~= nil then
if Style.Style == 1 then
StyleCheckBox(Active, Checked, 2, 4, BoxOffset)
elseif Style.Style == 2 then
StyleCheckBox(Active, Checked, 5, 6, BoxOffset)
else
StyleCheckBox(Active, Checked, 2, 4, BoxOffset)
end
else
StyleCheckBox(Active, Checked, 2, 4, BoxOffset)
end
if (Active) and (CurrentMenu.Controls.Select.Active) then
Selected = true;
Checked = not Checked
Audio.PlaySound(RageUI.Settings.Audio.Select.audioName, RageUI.Settings.Audio.Select.audioRef)
end
if (Active) then
Actions(Selected, Checked)
RageUI.ItemsDescription(Description)
end
RageUI.ItemOffset = RageUI.ItemOffset + 38
end
RageUI.Options = RageUI.Options + 1
end
---AddSeparator
---
--- Add separator
---
---@param Label string
---@public
---@return void
function Items:AddSeparator(Label, Color)
if not RageUI.CurrentMenu then
return
end
if not Color then
Color = {245, 245, 245, 150}
end
local CurrentMenu = RageUI.CurrentMenu
local Option = RageUI.Options + 1
if CurrentMenu.Pagination.Minimum <= Option and CurrentMenu.Pagination.Maximum >= Option then
local Active = CurrentMenu.Index == Option;
if (Label ~= nil) then
Graphics.Text(Label, CurrentMenu.X + 0 +
(CurrentMenu.WidthOffset * 2.5 ~= 0 and CurrentMenu.WidthOffset * 2.5 or 200),
CurrentMenu.Y + 4 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, Color[1], Color[2],
Color[3], Color[4], 1)
end
RageUI.ItemOffset = RageUI.ItemOffset + 38
if (Active) then
if (RageUI.LastControl) then
CurrentMenu.Index = Option - 1
if (CurrentMenu.Index < 1) then
CurrentMenu.Index = RageUI.CurrentMenu.Options
end
else
CurrentMenu.Index = Option + 1
end
RageUI.ItemsDescription(nil)
end
end
RageUI.Options = RageUI.Options + 1
end
---AddSeparator
---
--- Add separator
---
---@param Label string
---@public
---@return void
function Items:AddText(Label, yoffset)
if not RageUI.CurrentMenu then
return
end
local CurrentMenu = RageUI.CurrentMenu
local Option = RageUI.Options + 1
if CurrentMenu.Pagination.Minimum <= Option and CurrentMenu.Pagination.Maximum >= Option then
local Active = CurrentMenu.Index == Option;
if (Label ~= nil) then
local extraOffsetY = yoffset and yoffset or 0
Graphics.Text(Label, CurrentMenu.X + 0 +
(CurrentMenu.WidthOffset * 2.5 ~= 0 and CurrentMenu.WidthOffset * 2.5 or 10),
CurrentMenu.Y + 0 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 7 + extraOffsetY, 0, 0.33, 245,
245, 245, 255, 0, false, false, 410)
end
local lineCount = Graphics.GetLineCount(Label, CurrentMenu.X + 0 +
(CurrentMenu.WidthOffset * 2.5 ~= 0 and CurrentMenu.WidthOffset * 2.5 or 10),
CurrentMenu.Y + 0 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 245, 245, 245, 255, 0, false,
false, 410)
local totalTextHeight = 27 * lineCount
RageUI.ItemOffset = RageUI.ItemOffset + totalTextHeight
if (Active) then
if (RageUI.LastControl) then
CurrentMenu.Index = Option - 1
if (CurrentMenu.Index < 1) then
CurrentMenu.Index = RageUI.CurrentMenu.Options
end
else
CurrentMenu.Index = Option + 1
end
RageUI.ItemsDescription(nil)
end
end
RageUI.Options = RageUI.Options + 1
end
---AddList
---@param Label string
---@param Items table<any, any>
---@param Index number
---@param Style table<any, any>
---@param Description string
---@param Actions fun(Index:number, onSelected:boolean, onListChange:boolean))
---@param Submenu any
function Items:AddList(Label, Items, Index, Description, Style, Actions, Submenu)
if not RageUI.CurrentMenu then
return
end
local CurrentMenu = RageUI.CurrentMenu;
if not CurrentMenu then
return
end
local Option = RageUI.Options + 1
if CurrentMenu.Pagination.Minimum <= Option and CurrentMenu.Pagination.Maximum >= Option then
local Active = CurrentMenu.Index == Option;
local onListChange = false;
RageUI.ItemsSafeZone(CurrentMenu)
local LeftBadgeOffset = ((Style.LeftBadge == RageUI.BadgeStyle.None or Style.LeftBadge == nil) and 0 or 27)
local RightBadgeOffset = ((Style.RightBadge == RageUI.BadgeStyle.None or Style.RightBadge == nil) and 0 or 32)
local RightOffset = 0
local ListText = (type(Items[Index]) == "table") and string.format("← %s →", Items[Index].Name) or
string.format("← %s →", Items[Index]) or "NIL"
if (Active) then
Graphics.Sprite("commonmenu", "gradient_nav", CurrentMenu.X,
CurrentMenu.Y + 0 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 431 + CurrentMenu.WidthOffset, 38)
end
if (not Style.IsDisabled) then
if Active then
if Style.RightLabel ~= nil and Style.RightLabel ~= "" then
Graphics.Text(Style.RightLabel, CurrentMenu.X + 420 - RightBadgeOffset + CurrentMenu.WidthOffset,
CurrentMenu.Y + 4 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35, 0, 0, 0, 255, 2)
RightOffset = Graphics.MeasureStringWidth(Style.RightLabel, 0, 0.35)
end
else
if Style.RightLabel ~= nil and Style.RightLabel ~= "" then
RightOffset = Graphics.MeasureStringWidth(Style.RightLabel, 0, 0.35)
Graphics.Text(Style.RightLabel, CurrentMenu.X + 420 - RightBadgeOffset + CurrentMenu.WidthOffset,
CurrentMenu.Y + 4 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35, 245, 245, 245, 255,
2)
end
end
end
RightOffset = RightBadgeOffset * 1.3 + RightOffset
if (not Style.IsDisabled) then
if (Active) then
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 0, 0, 0, 255)
Graphics.Text(ListText, CurrentMenu.X + 403 + 15 + CurrentMenu.WidthOffset - RightOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35, 0, 0, 0, 255, 2)
else
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 245, 245, 245, 255)
Graphics.Text(ListText, CurrentMenu.X + 403 + 15 + CurrentMenu.WidthOffset - RightOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35, 245, 245, 245, 255, 2)
end
else
Graphics.Text(Label, CurrentMenu.X + 8 + LeftBadgeOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.33, 163, 159, 148, 255)
Graphics.Text(ListText, CurrentMenu.X + 403 + 15 + CurrentMenu.WidthOffset,
CurrentMenu.Y + 3 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0, 0.35, 163, 159, 148, 255, 2)
end
if type(Style) == "table" then
if Style.Enabled == true or Style.Enabled == nil then
if type(Style) == 'table' then
if Style.LeftBadge ~= nil then
if Style.LeftBadge ~= RageUI.BadgeStyle.None then
local BadgeData = Style.LeftBadge(Active)
Graphics.Sprite(BadgeData.BadgeDictionary or "commonmenu", BadgeData.BadgeTexture or "",
CurrentMenu.X, CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40,
40, 0, BadgeData.BadgeColour and BadgeData.BadgeColour.R or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.G or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.B or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.A or 255)
end
end
if Style.RightBadge ~= nil then
if Style.RightBadge ~= RageUI.BadgeStyle.None then
local BadgeData = Style.RightBadge(Active)
Graphics.Sprite(BadgeData.BadgeDictionary or "commonmenu", BadgeData.BadgeTexture or "",
CurrentMenu.X + 385 + CurrentMenu.WidthOffset,
CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
BadgeData.BadgeColour and BadgeData.BadgeColour.R or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.G or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.B or 255,
BadgeData.BadgeColour and BadgeData.BadgeColour.A or 255)
end
end
end
else
local LeftBadge = RageUI.BadgeStyle.Lock
if LeftBadge ~= RageUI.BadgeStyle.None and LeftBadge ~= nil then
local BadgeData = LeftBadge(Active)
Graphics.Sprite(BadgeData.BadgeDictionary or "commonmenu", BadgeData.BadgeTexture or "",
CurrentMenu.X, CurrentMenu.Y + -2 + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 40, 40, 0,
BadgeData.BadgeColour.R or 255, BadgeData.BadgeColour.G or 255, BadgeData.BadgeColour.B or 255,
BadgeData.BadgeColour.A or 255)
end
end
else
error("UICheckBox Style is not a `table`")
end
RageUI.ItemOffset = RageUI.ItemOffset + 38
if (Active) then
RageUI.ItemsDescription(Description);
if (not Style.IsDisabled) then
if (CurrentMenu.Controls.Left.Active) and not (CurrentMenu.Controls.Right.Active) then
Index = Index - 1
if Index < 1 then
Index = #Items
end
onListChange = true
Audio.PlaySound(RageUI.Settings.Audio.LeftRight.audioName, RageUI.Settings.Audio.LeftRight.audioRef)
elseif (CurrentMenu.Controls.Right.Active) and not (CurrentMenu.Controls.Left.Active) then
Index = Index + 1
if Index > #Items then
Index = 1
end
onListChange = true
Audio.PlaySound(RageUI.Settings.Audio.LeftRight.audioName, RageUI.Settings.Audio.LeftRight.audioRef)
end
local Selected = (CurrentMenu.Controls.Select.Active)
Actions(Index, Selected, onListChange, Active)
if (Selected) then
Audio.PlaySound(RageUI.Settings.Audio.Select.audioName, RageUI.Settings.Audio.Select.audioRef)
if Submenu ~= nil and type(Submenu) == "table" then
RageUI.NextMenu = Submenu[Index]
end
end
end
end
end
RageUI.Options = RageUI.Options + 1
end
---Heritage
---@param Mum number
---@param Dad number
function Items:Heritage(Mum, Dad)
local CurrentMenu = RageUI.CurrentMenu;
if Mum < 0 or Mum > 21 then
Mum = 0
end
if Dad < 0 or Dad > 23 then
Dad = 0
end
if Mum == 21 then
Mum = "special_female_" .. (tonumber(string.sub(Mum, 2, 2)) - 1)
else
Mum = "female_" .. Mum
end
if Dad >= 21 then
Dad = "special_male_" .. (tonumber(string.sub(Dad, 2, 2)) - 1)
else
Dad = "male_" .. Dad
end
Graphics.Sprite("pause_menu_pages_char_mom_dad", "mumdadbg", CurrentMenu.X,
CurrentMenu.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 431 + (CurrentMenu.WidthOffset / 1), 228)
Graphics.Sprite("char_creator_portraits", Dad, CurrentMenu.X + 195 + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 228, 228)
Graphics.Sprite("char_creator_portraits", Mum, CurrentMenu.X + 25 + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 228, 228)
RageUI.ItemOffset = RageUI.ItemOffset + 228
end
@@ -1,225 +0,0 @@
---
--- @author Dylan MALANDAIN, Kalyptus
--- @version 1.0.0
--- created at [24/05/2021 10:02]
---
---@class Panels
Panels = {};
local GridType = {
Default = 1,
Horizontal = 2,
Vertical = 3
}
local GridSprite = {
[GridType.Default] = {
Dictionary = "pause_menu_pages_char_mom_dad",
Texture = "nose_grid"
},
[GridType.Horizontal] = {
Dictionary = "RageUI_",
Texture = "horizontal_grid"
},
[GridType.Vertical] = {
Dictionary = "RageUI_",
Texture = "vertical_grid"
}
}
local Grid = {
Background = {
Dictionary = "commonmenu",
Texture = "gradient_bgd",
Y = 4,
Width = 431,
Height = 275
},
Grid = {
X = 115.5,
Y = 47.5,
Width = 200,
Height = 200
},
Circle = {
Dictionary = "mpinventory",
Texture = "in_world_circle",
X = 115.5,
Y = 47.5,
Width = 20,
Height = 20
},
Text = {
Top = {
X = 215.5,
Y = 15,
Scale = 0.35
},
Bottom = {
X = 215.5,
Y = 250,
Scale = 0.35
},
Left = {
X = 57.75,
Y = 130,
Scale = 0.35
},
Right = {
X = 373.25,
Y = 130,
Scale = 0.35
}
}
}
local function UIGridPanel(Type, StartedX, StartedY, TopText, BottomText, LeftText, RightText, Action, Index)
local CurrentMenu = RageUI.CurrentMenu
if (CurrentMenu.Index == Index) then
local X = Type == GridType.Default and StartedX or Type == GridType.Horizontal and StartedX or Type ==
GridType.Vertical and 0.5
local Y = Type == GridType.Default and StartedY or Type == GridType.Horizontal and 0.5 or Type ==
GridType.Vertical and StartedY
local Hovered = Graphics.IsMouseInBounds(CurrentMenu.X + Grid.Grid.X + CurrentMenu.SafeZoneSize.X + 20,
CurrentMenu.Y + Grid.Grid.Y + CurrentMenu.SafeZoneSize.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset +
20, Grid.Grid.Width + CurrentMenu.WidthOffset - 40, Grid.Grid.Height - 40)
local Selected = false
local CircleX = CurrentMenu.X + Grid.Grid.X + (CurrentMenu.WidthOffset / 2) + 20
local CircleY = CurrentMenu.Y + Grid.Grid.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 20
if X < 0.0 or X > 1.0 then
X = 0.0
end
if Y < 0.0 or Y > 1.0 then
Y = 0.0
end
CircleX = CircleX + ((Grid.Grid.Width - 40) * X) - (Grid.Circle.Width / 2)
CircleY = CircleY + ((Grid.Grid.Height - 40) * Y) - (Grid.Circle.Height / 2)
Graphics.Sprite("commonmenu", "gradient_bgd", CurrentMenu.X,
CurrentMenu.Y + Grid.Background.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset,
Grid.Background.Width + CurrentMenu.WidthOffset, Grid.Background.Height)
Graphics.Sprite(GridSprite[Type].Dictionary, GridSprite[Type].Texture,
CurrentMenu.X + Grid.Grid.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Grid.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, Grid.Grid.Width,
Grid.Grid.Height)
Graphics.Sprite(Grid.Circle.Dictionary, Grid.Circle.Texture, CircleX, CircleY, Grid.Circle.Width,
Grid.Circle.Height)
if (Type == GridType.Default) then
Graphics.Text(TopText or "", CurrentMenu.X + Grid.Text.Top.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Text.Top.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Grid.Text.Top.Scale, 245, 245, 245, 255, 1)
Graphics.Text(BottomText or "", CurrentMenu.X + Grid.Text.Bottom.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Text.Bottom.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Grid.Text.Bottom.Scale, 245, 245, 245, 255, 1)
Graphics.Text(LeftText or "", CurrentMenu.X + Grid.Text.Left.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Text.Left.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Grid.Text.Left.Scale, 245, 245, 245, 255, 1)
Graphics.Text(RightText or "", CurrentMenu.X + Grid.Text.Right.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Text.Right.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Grid.Text.Right.Scale, 245, 245, 245, 255, 1)
end
if (Type == GridType.Vertical) then
Graphics.Text(TopText or "", CurrentMenu.X + Grid.Text.Top.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Text.Top.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Grid.Text.Top.Scale, 245, 245, 245, 255, 1)
Graphics.Text(BottomText or "", CurrentMenu.X + Grid.Text.Bottom.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Text.Bottom.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Grid.Text.Bottom.Scale, 245, 245, 245, 255, 1)
end
if (Type == GridType.Horizontal) then
Graphics.Text(LeftText or "", CurrentMenu.X + Grid.Text.Left.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Text.Left.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Grid.Text.Left.Scale, 245, 245, 245, 255, 1)
Graphics.Text(RightText or "", CurrentMenu.X + Grid.Text.Right.X + (CurrentMenu.WidthOffset / 2),
CurrentMenu.Y + Grid.Text.Right.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset, 0,
Grid.Text.Right.Scale, 245, 245, 245, 255, 1)
end
if Hovered then
if IsDisabledControlPressed(0, 24) then
Selected = true
CircleX = math.round(GetControlNormal(2, 239) * 1920) - CurrentMenu.SafeZoneSize.X -
(Grid.Circle.Width / 2)
CircleY = math.round(GetControlNormal(2, 240) * 1080) - CurrentMenu.SafeZoneSize.Y -
(Grid.Circle.Height / 2)
if CircleX > (CurrentMenu.X + Grid.Grid.X + (CurrentMenu.WidthOffset / 2) + 20 + Grid.Grid.Width - 40) then
CircleX = CurrentMenu.X + Grid.Grid.X + (CurrentMenu.WidthOffset / 2) + 20 + Grid.Grid.Width - 40
elseif CircleX < (CurrentMenu.X + Grid.Grid.X + 20 - (Grid.Circle.Width / 2)) then
CircleX = CurrentMenu.X + Grid.Grid.X + 20 - (Grid.Circle.Width / 2)
end
if CircleY >
(CurrentMenu.Y + Grid.Grid.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 20 +
Grid.Grid.Height - 40) then
CircleY = CurrentMenu.Y + Grid.Grid.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 20 +
Grid.Grid.Height - 40
elseif CircleY <
(CurrentMenu.Y + Grid.Grid.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 20 -
(Grid.Circle.Height / 2)) then
CircleY = CurrentMenu.Y + Grid.Grid.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 20 -
(Grid.Circle.Height / 2)
end
X = math.round((CircleX - (CurrentMenu.X + Grid.Grid.X + (CurrentMenu.WidthOffset / 2) + 20) +
(Grid.Circle.Width / 2)) / (Grid.Grid.Width - 40), 2)
Y = math.round((CircleY -
(CurrentMenu.Y + Grid.Grid.Y + CurrentMenu.SubtitleHeight + RageUI.ItemOffset + 20) +
(Grid.Circle.Height / 2)) / (Grid.Grid.Height - 40), 2)
if (X ~= StartedX) and (Y ~= StartedY) then
Action(X, Y, (X * 2 - 1), (Y * 2 - 1))
-- Action.onPositionChange(X, Y, (X * 2 - 1), (Y * 2 - 1))
end
StartedX = X;
StartedY = Y;
if X > 1.0 then
X = 1.0
end
if Y > 1.0 then
Y = 1.0
end
end
end
RageUI.ItemOffset = RageUI.ItemOffset + Grid.Background.Height + Grid.Background.Y
if Hovered and Selected then
Audio.PlaySound(RageUI.Settings.Audio.Slider.audioName, RageUI.Settings.Audio.Slider.audioRef, true)
-- if (Action.onSelected ~= nil) then
-- Action.onSelected(X, Y, (X * 2 - 1), (Y * 2 - 1));
-- end
end
end
end
---Grid
---@param StartedX number
---@param StartedY number
---@param TopText string
---@param BottomText string
---@param LeftText string
---@param RightText string
---@param Action fun(X:number, Y:number, CharacterX:number, CharacterY:number)
---@param Index number
---@public
---@return void
function Panels:Grid(StartedX, StartedY, TopText, BottomText, LeftText, RightText, Action, Index)
UIGridPanel(GridType.Default, StartedX, StartedY, TopText, BottomText, LeftText, RightText, Action, Index)
end
---GridHorizontal
---@param StartedX number
---@param LeftText string
---@param RightText string
---@param Action fun(X:number, Y:number, CharacterX:number, CharacterY:number)
---@param Index number
---@public
---@return void
function Panels:GridHorizontal(StartedX, LeftText, RightText, Action, Index)
UIGridPanel(GridType.Horizontal, StartedX, nil, nil, nil, LeftText, RightText, Action, Index)
end
---GridVertical
---@param StartedY number
---@param TopText string
---@param BottomText string
---@param Action fun(X:number, Y:number, CharacterX:number, CharacterY:number)
---@param Index number
---@public
---@return void
function Panels:GridVertical(StartedY, TopText, BottomText, Action, Index)
UIGridPanel(GridType.Vertical, nil, StartedY, TopText, BottomText, nil, nil, Action, Index)
end

Some files were not shown because too many files have changed in this diff Show More