A FlexHour luxusóra-rendszer FiveM-re. A játékosok egy butik eladójától vesznek órát, összeállítják, hordják, mutogatják, szervizeltetik és elcserélik. Mellette egy teljes hamisítvány-kereskedelem is fut.
A csomag két resource: concept_flexhour (a script) és flexhour_boutique (a besétálható butik belső tere). A butiknak saját útmutatója van: FlexHour butik.
A FlexHour Cfx Asset Escrow-t használ. A Tebexes fizetés után a resource-ok a Keymasteren jelennek meg a Granted Assets alatt, azon a Cfx.re fiókon, amellyel fizetéskor beléptél.
concept_flexhour és a flexhour_boutique ugyanabban a vásárlásban jön, két külön letöltésként. Töltsd le és telepítsd mindkettőt.concept_flexhour néven hívják a scriptet. Ha átnevezed a mappát, ezt kapod: No such export useBox in resource concept_flexhour.config.lua és a locales/ fájlok szerkeszthetők maradnak. A többi escrow-védett.| Resource | Megjegyzés |
|---|---|
ox_lib |
Callbackekhez és nyelvi fájlokhoz. A menüket, űrlapokat, igen/nem ablakokat és a folyamatjelzőt a FlexHour maga rajzolja. |
oxmysql |
Az adatbázistáblák az első indításkor jönnek létre. |
concept_bridge 1.1.0 vagy újabb |
1.1.1-gyel tesztelve. Ingyenes, különálló GPL-3.0 resource: concept_bridge. Nincs benne ebben a csomagban. Csak egy bridge fusson. |
| Egy framework | QBCore, qbx_core, ESX vagy ox_core |
| Itemenkénti metaadatot kezelő inventory | Az ox_inventory ajánlott (lásd lent) |
| Egy target resource | ox_target, qb-target vagy sleepless_interact |
concept_flexhour és a flexhour_boutique mappát a resources mappádba.server.cfg-hez a függőségeik után. A bridge a már futó resource-okból tölti be a moduljait, ezért a frameworköd, az inventoryd és a targeted után indítsd:ensure ox_lib
ensure oxmysql
ensure your_framework # es_extended / qb-core / qbx_core / ox_core
ensure ox_inventory # or your inventory
ensure ox_target # or your target
ensure concept_bridge
ensure concept_flexhour
ensure flexhour_boutique # the boutique interior, after concept_flexhour
add_ace group.admin flexhour.admin allow
/fhmodels parancsot. Kilistázza azokat az óramodelleket, amelyek nincsenek streamelve. Ha a lista üres, a stream/ mappa teljes.Minden óramodell külön item, fh_ néven. Az összeállítás az item metaadatában tárolódik: tokfém, számlap, lünetta, jég, sorozatszám, gravírozás és állapot. Boltok, cserék és más scriptek is kioszthatnak egy adott modellt.
ox_inventory
docs/ox_items.lua tartalmát (mind a 23 modell) az ox_inventory/data/items.lua fájlba.['flexhour_box'] = {
label = 'FlexHour Box',
weight = 450,
stack = false,
close = true,
description = 'Something shiny inside.',
client = { export = 'concept_flexhour.useBox' },
},
['flexhour_replica_kit'] = {
label = 'Replica Kit',
weight = 900,
stack = true,
close = true,
description = 'Blank case, cheap movement, dial stencils, gold plating. Not from any boutique.',
},
web/img/*.png és a web/img/items/*.png fájlokat az ox_inventory/web/images/ mappába. 78 óraikon van: modellenként és tokanyagonként egy, plusz limitált kiadásonként egy. Minden óra a metadata.image mezőn keresztül mutat a saját ikonjára.qb-stílusú inventoryk
Add hozzá az itemeket a docs/qb_items.lua fájlból (QBCore formátum). A FlexHour induláskor használhatóként regisztrálja őket. Ezeken az inventorykon az item a modell nevét és képét mutatja. Az összeállítás részletei az item info mezőjében és a megtekintő nézetben vannak (I, amíg viseled az órát).
A FlexHour a concept_bridge-en keresztül éri el a frameworköt (pénz, azonosító, munkák), az inventoryt, a targetet és az értesítéseket.
| Rész | Támogatott | Állapot |
|---|---|---|
| Framework | QBCore, qbx_core, ESX, ox_core | A pénzszámlák a cash és a bank. A bridge a cash-t az ESX money számlájára fordítja. |
| Inventory | ox_inventory | Ajánlott. Játékban tesztelve. |
| Inventory | qb-inventory, ps-inventory, qs-inventory, tgiann-inventory, origen_inventory, codem-inventory, core_inventory, one-inventory | Meg kell tartania az itemenkénti metaadatot. Automatikus tesztek fedik le, játékban még nincs tesztelve. |
| Inventory | Az ESX beépített inventoryja | Nem támogatott. Nincs benne item metaadat és slot, egy óra pedig maga a metaadata. A konzol induláskor figyelmeztet. |
| Target | ox_target, qb-target, sleepless_interact | Target helyett gombos feliratot is használhatsz: lásd Config.Interaction. |
A config.lua tartalmaz minden beállítást, amit egy szerver megváltoztathat. Írd át az értéket, és indítsd újra a resource-ot. Ha kihagysz egy beállítást, a FlexHour a gyári alapértékét használja. Ami nem beállítás, azt a config.lua-ból nem lehet felülírni.
| Beállítás | Alapérték | Mit csinál |
|---|---|---|
Config.PayAccounts |
{ 'cash', 'bank' } |
A terhelendő számlák, sorrendben. Az első, amelyik fedezi az árat, fizet. |
Config.Delivery |
'box' |
'box': a vásárlás dobozban érkezik, és a játékos kicsomagolja. 'direct': az óra egyenesen az inventoryba kerül. |
Config.Interaction |
{ mode = 'target', key = 38, keyName = 'E' } |
Hogyan használják a játékosok az eladókat, vitrineket és helyszíneket: targettel vagy gombos felirattal. |
Config.Notify |
{ system = 'flexhour', position = 'top-right' } |
A FlexHour saját értesítései, vagy a szervered sajátjai (a bridge-en keresztül). |
Config.InspectKey |
'I' |
Gomb a viselt órád megtekintéséhez. A játékosok a GTA billentyű-beállításaiban átállíthatják. |
Config.FlexCommand |
'flex' |
Parancs a csuklóvillantáshoz. |
Config.FlexLoopCommand |
'flex2' |
Parancs az ismétlődő villantáshoz. |
Config.AdminAce |
'flexhour.admin' |
ACE jogosultság az admin eszközökhöz. |
Config.AdminOpenToAll |
false |
true esetén minden játékos admin. Csak teszteléshez használd. |
Config.TryOnSeconds |
12 |
Meddig tart egy felpróbálás az eladónál. |
A Config.Clerks a butik eladóinak listája. A gyári eladó Vinewoodban áll a_f_y_business_02 modellel, WORLD_HUMAN_STAND_IMPATIENT scenarióval és bliple (sprite 617, szín 46, méret 0.8), és a budget, mid, luxury és mythic szinteket árulja.
Ha a flexhour_boutique fut, az eladója a butik pultja mögött áll. Ez a pozíció a data/clerks.json fájlba mentődik, amely elsőbbséget élvez a config.lua-val szemben. Ha butik nélkül futtatod a FlexHourt, nyisd meg a /fhclerk menüt, és válaszd a Put the config.lua clerks back lehetőséget.
Config.Negotiate)| Beállítás | Alapérték | Mit csinál |
|---|---|---|
enabled |
true |
A játékosok alkudozhatnak az eladókkal. |
rounds |
3 |
Minijáték-körök a végső ajánlat előtt: az eladó olvasása, egy találós kérdés és egy memóriajáték. |
cooldownSeconds |
90 |
Várakozási idő játékosonként minden alkudozás után. |
showFloor |
true |
Mutassa a legalacsonyabb árat, amit az eladó még elfogadna. |
onWalkAway |
'list' |
'list': a játékos továbbra is megveheti listaáron. 'abort': az eladás véget ér. |
Config.Services)| Beállítás | Alapérték | Mit csinál |
|---|---|---|
strapSwap |
1500 |
Szíjcsere díja, plusz a szíjak közti árkülönbség. |
replatePercent |
0.35 |
Újrabevonat ára a listaár arányában. |
replateMin |
2500 |
A legalacsonyabb újrabevonati ár. |
icePerLevel |
0.40 |
Minden jégszint ára a tok listaárának arányában. |
engrave |
750 |
Gravírozás (legfeljebb 24 karakter). |
polish |
400 |
Polírozás, amely helyreállítja az állapotot. |
authenticate |
150 |
Eredetiségigazolás. |
authDays |
14 |
Hány napig érvényes az igazolás. A 0 örökre szól. |
Config.Limited)A Config.Limited adja meg, hogy az egyes limitált modellekből összesen hány darab létezhet. Lásd: Limitált kiadások.
Config.Wear)| Beállítás | Alapérték | Mit csinál |
|---|---|---|
keepWorn |
false |
false: a viselt óra inventory item marad. true: viselés közben a FlexHour a saját táblájában tartja, így nem veszhet el. Lásd: Viselt órák. |
restoreOnSpawn |
true |
Az óra újracsatlakozás után is a csuklón van. keepWorn = false esetén érvényes. A megtartott óra mindig rajta marad. |
gameWatch |
'hide' |
Mi történjen a GTA saját csuklókiegészítőivel. 'hide': lekerülnek, amíg FlexHour órát viselsz. 'block': a bal csukló slotja mindig üres marad. 'off': nem nyúl hozzájuk. |
conditionLossPerHour |
0.5 |
Óránkénti állapotvesztés viselés közben. A replikák gyorsabban kopnak. |
hideInVehicle |
false |
Órák elrejtése járműben. |
playerAdjust |
true |
A játékosok a /watchfit paranccsal finomhangolhatják a saját illesztésüket. A többiek is az eredményt látják. |
allowScale |
true |
Az illesztő gizmo az óra méretét is állíthatja (0.75 és 1.25 között). |
fitPresets |
3 |
Mentett illesztési helyek játékosonként, a /watchpreset paranccsal. |
sleeve.enabled |
true |
A játékosok a /watchsleeve paranccsal felhúzhatják az ujjukat. |
Config.Wear.rob)| Beállítás | Alapérték | Mit csinál |
|---|---|---|
enabled |
true |
A viselt óra elrabolható. |
seconds |
6 |
Mennyi ideig tart elvenni az órát. |
when |
{ dead = true, handsUp = true, cuffed = true } |
Azok az állapotok, amelyekben a viselőnek lennie kell. |
cooldownMinutes |
10 |
Mennyit vár a rabló, mielőtt újra rabolhat. |
protectMinutes |
30 |
Meddig védett az áldozat a rablás után. |
command |
'stealwatch' |
A rablás parancsa. false kikapcsolja a parancsot. |
handsUpAnims |
{} |
A szervered saját „kezeket fel” animációi: { { 'dict', 'clip' }, ... }. |
minigame |
false |
Saját minijátékod: function(victim) return true end. true a folytatáshoz, false, ha nem sikerült. |
Config.Fakes)| Beállítás | Alapérték | Mit csinál |
|---|---|---|
enabled |
true |
A hamisítvány-kereskedelem be van kapcsolva. |
dealer.coords / dealer.model |
a config.lua-ban / g_m_y_ballaeast_01 |
Hol áll a készletárus díler, és milyen ped modell. |
dealer.kitPrice |
2500 |
A készlet alapára. A készlet szintje szorozza. |
dealer.cooldown |
900 |
Másodperc karakterenként két készlet között. |
workshop.coords / workshop.prop |
a config.lua-ban / 'prop_tool_bench02' |
Hol van a munkapad. prop = false esetén a térkép egy asztalát használja pad helyett. |
fence.coords / fence.model |
a config.lua-ban / s_m_y_dealer_01 |
Hol áll az orgazda, és milyen ped modell. |
fence.account |
'cash' |
A számla, ahová az orgazda fizet. Használd a 'black_money'-t, ha a frameworködben van ilyen. |
fence.maxPayout |
30000 |
A legtöbb, amit az orgazda egy óráért fizet. |
fence.cooldown |
600 |
Másodperc karakterenként két eladás között. |
fence.alertChance |
0.10 |
Az esély, hogy egy eladást jelentenek a rendőrségnek. |
fence.alertChanceFake |
0.25 |
Ugyanez az esély, ha az óra replika. |
onAlert |
function(src, coords, build) end |
Szerveroldali hook a dispatch scriptedhez. |
A három helyszínt játékon belül a /fhfake dealer, /fhfake workshop vagy /fhfake fence paranccsal teheted le. A letett helyszínek a data/fakes.json fájlba mentődnek, amely elsőbbséget élvez a config.lua-val szemben.
Minden, amit a játékosok olvasnak, a locales/.json fájlokból jön: értesítések, menük, a bolt oldala (ui_*), az alkudozás kártyái (card_*), az eladó árulkodó jelei (tell_*), és amit az eladók, az orgazda és a díler mondanak (neg_*).
Mellékelt nyelvek: angol (en), magyar (hu), német (de), spanyol (es) és francia (fr). A FlexHour az ox_lib nyelvi beállítását használja. Írd a server.cfg-be:
setr ox:locale "en" # or "hu", "de", "es", "fr"
Új nyelv hozzáadásához másold az en.json-t .json néven, és fordítsd le az értékeket. Az alkudozás találós kérdései mind az öt nyelven a szerveren vannak. Az órák, anyagok és szíjak nevei terméknevek, nem fordítjuk őket.
| Parancs | Mit csinál |
|---|---|
/watch |
Óra fel- vagy levétele. |
/watchfit |
Az illesztés finomhangolása gizmóval (lásd lent). |
/watchhand |
Az óra áthelyezése a másik csuklóra. |
/watchsleeve |
Az ujj felhúzása vagy leengedése. |
/watchpreset |
Illesztési preset mentése vagy betöltése. |
/flex |
Csuklóvillantás. |
/flex2 |
Ismétlődő villantás. |
I |
A viselt órád megtekintése. |
X |
A kezedben tartott óradoboz elrakása. Átállítható. |
/stealwatch |
Viselt óra elrablása (lásd Rablás). |
/fhhelp |
A parancsok listája a chatben. |
Az illesztő gizmo így működik:
allowScale be van kapcsolva.flexhour.admin)| Parancs | Mit csinál |
|---|---|
/fhclerk |
A letett eladók mozgatása, átnevezése vagy eltávolítása, illetve a config.lua eladóinak visszaállítása. |
/fhclerk |
Új eladó letétele. Célozd a szellemet oda, ahová a doboznak kell kerülnie a pulton. |
/fhstand |
Vitrin letétele oda, ahol állsz. |
/fhfake [dealer|workshop|fence] |
A hamisítvány-helyszínek kezelése vagy letétele. |
/fhgive [id] |
Dobozos óra adása, az összeállítás kiválasztásával. |
/fhwrist |
Csuklóillesztő gizmo. A G a ped modelled szerveres alapértelmezéseként menti az illesztést. |
/fhmodels |
A nem streamelt óramodellek listája. |
Az admin eszközök a Config.AdminAce ACE-t ellenőrzik (alapértelmezés: flexhour.admin):
add_ace group.admin flexhour.admin allow
Mielőtt játékosok csatlakoznak, győződj meg róla, hogy a Config.AdminOpenToAll értéke false. true esetén minden játékos admin: adhatnak maguknak órát, letehetnek eladókat és vitrineket, és az ACE sor semmit sem ér. Amíg be van kapcsolva, a konzol minden indításkor piros figyelmeztetést ír ki.
Az eladó nyitja meg a boltot. A játékos kiválaszt egy modellt, majd a tokfémet, a számlapot, a szíjat és a szíj színét, a lünettát, a mutatókat és a jégszintet. Minden szintnek saját opciói vannak. A játékos TryOnSeconds ideig felpróbálhatja az órát, aztán megveheti, vagy előbb alkudhat. Delivery = 'box' esetén az óra egy flexhour_box dobozban érkezik. A doboz használata kicsomagolási rituálét játszik le a pulton, és a játékos addig tartja a dobozt, amíg az X-szel el nem rakja.
Minden eredeti óra egyedi sorozatszámot kap (FH-…), amely a nyilvántartásba kerül (flexhour_serials).
Minden eladó minden alkalommal rejtett személyiséget kap, öt vonásból: hiúság, kapzsiság, büszkeség, hűség és idegesség. A testbeszéd utalásokat ad. A játékos kártyákat játszik ki — például Bók, Készpénz, Lealkudás, Blöff, Törzsvásárló, Konkurens, Csomag és Történet —, és vegyes körökön megy végig: az eladó olvasása, találós kérdések és egy memóriajáték. Az eredmény a végső ajánlat. A díler és az orgazda ugyanígy egy utcai paklit használ.
Az adminok a /fhstand paranccsal tesznek le vitrineket, és a vitrin menüjéből töltik fel minden párnáját. A vitrinek a címkén lévő áron adnak el, amelynek a listaár 70–160%-a között kell lennie, és a készletük korlátlan. A 30 m-en belül lévő vitrinnél az adott eladóval lehet alkudni. Ebben a verzióban a játékosoknak nem lehet saját vitrinjük, és limitált kiadás nem tehető vitrinbe.
Egy játékos egyszerre egy órát visel, bármelyik csuklón. A beépített illesztések lefedik a freemode karaktereket. Egyedi pedekhez az adminok ped modellenként mentenek illesztést, a játékosok pedig finomhangolhatják a sajátjukat. A többi játékos közelről látja az órát: élő mutatók, csillanások, és éjjel világító kövek. A játékos műveletei: villantás, megtekintés és ujjhúzás.
Az eladó szíjcserét, újrabevonatot, jegelést, gravírozást, polírozást és eredetiségvizsgálatot kínál. Az eredetiségvizsgálat egy eredeti órának authDays napig érvényes papírokat ad. Replikánál kimutatja, hogy hamisítvány.
14 számozott darab van. Mindegyik rögzített összeállítás, olyan számlappal, kivitellel vagy szíjjal, amilyen egyik szériaórának sem lehet. A szerver korlátozza, hány létezhet, és minden vevő saját számot kap (például „No. 3 / 10”). Ha minden darab elkelt, a kiadás eltűnik a boltból. Az eladók a bolt listájának Limited editions csoportjában árulják őket.
Limitált kiadáson a jegelés, a gravírozás és a polírozás engedélyezett. A szíjcserét és az újrabevonatot elutasítják, hogy a darab eredeti maradjon.
A hamisítvány-kereskedelem három lépésben működik:
A replika valódinak tűnik az inventoryban, de a sorozatszáma nincs a nyilvántartásban, és minél gyengébb a minősége, annál több árulkodó jelet mutat: ferde számlapnyomat, elcsúszó idő, akadozó vagy álló másodpercmutató, gyorsabb kopás és átkopó aranybevonat.
Az alapértelmezett Config.Wear.keepWorn = false mellett az óra mindig inventory item, viselés közben is. A helyén marad, és ami az inventoryval történik, az az órával is: halál utáni törlés, motozás vagy egy másik rablós script.
keepWorn = true esetén az óra felvételekor kikerül az inventoryból, és a FlexHour a flexhour_wrist táblában tartja. Levéve újra item lesz. Viselés közben semmi, ami az inventoryval történik, nem veheti el: halál utáni törlés, elkobzás, motozás, eldobás, stash vagy csomagtartó. Az óra eladásához, elajándékozásához, eltárolásához vagy szervizeltetéséhez a játékosnak előbb le kell vennie a /watch paranccsal.
Ha a keepWorn értékét visszaállítod false-ra, minden karakter a következő belépéskor visszakapja a viselt óráját az inventoryjába.
Viselt órát csak egy módon lehet elvenni: a FlexHour rablásával. Egy játékos, aki olyan viselő mellett áll, aki halott, feltartja a kezét vagy bilincsben van, a target opcióval, az [E] felirattal vagy a /stealwatch paranccsal elveheti az órát. Ugyanaz az óra, ugyanazzal a sorozatszámmal kerül a rabló zsebébe. Más resource-ok a flexhour:watchRobbed eseményre reagálhatnak.
A játék ruhamenüi órát tehetnek a bal csuklóra (prop slot 6) vagy karkötőt a jobbra (slot 7). gameWatch = 'hide' esetén a GTA kiegészítő lekerül, amíg FlexHour óra van azon a csuklón. Ha egy ruhamenü ezalatt menti az öltözéket, az a kiegészítő nélkül mentődik. Vagy vedd le a FlexHour órát az öltözék mentése előtt, vagy állítsd a gameWatch értékét 'off'-ra.
-- Give a player a watch. build = { base = '', material = ..., dial = ..., strap = ..., iced = 0 }
-- Only base is required; anything you leave out or set to something invalid falls back to that model's defaults.
-- boxed = true (default) delivers it in a flexhour_box. Returns true, serial.
local ok, serial = exports.concept_flexhour:GiveWatch(source, { base = 'timor_basic' }, true)
-- Release the watch a deleted or banned character was wearing (keepWorn = true).
-- identifier = the character id from your framework (the owner column of flexhour_wrist), or an online player's server id.
-- Returns true, serial, or false when nothing was on that wrist.
local released, serial = exports.concept_flexhour:ReleaseWrist(identifier)
A modell-azonosítókat a shared/catalog.lua fájlban találod (FH.BaseOrder). Az fh_ előtag nélküli itemnév is működik.
A concept_flexhour.useBox és a concept_flexhour.useWatch azok az item exportok, amelyeket az inventory hív. Neked nem kell meghívnod őket.
| Esemény | Paraméterek | Mikor |
|---|---|---|
flexhour:purchased |
src, build, price, kind |
Egy játékos órát vett. |
flexhour:watchRobbed |
robber, victim, serial, build |
Egy viselt órát elraboltak. |
flexhour:fenceAlert |
src, coords, build |
Egy orgazdás eladást jelentettek. A Config.Fakes.onAlert is meghívódik. |
flexhour:wristReleased |
owner, serial, build |
A ReleaseWrist eltávolított egy viselt órát. |
flexhour:suspect |
src, reason, serial |
Lehetséges duplikáció ('duplicate', 'watch_twice'). |
AddEventHandler('flexhour:watchRobbed', function(robber, victim, serial, build)
-- log it, alert the police, ...
end)
A táblák az első indításkor jönnek létre:
| Tábla | Tartalma |
|---|---|
flexhour_serials |
Az eredeti órák nyilvántartása (sorozatszám, összeállítás, tulajdonos). |
flexhour_wrist |
A FlexHour által tartott viselt órák (keepWorn = true). |
flexhour_worn |
Mi van rajta az egyes karaktereken. |
flexhour_fit |
Mentett csuklóillesztések. |
flexhour_fit_presets |
A játékosok illesztési presetjei. |
flexhour_stands |
A vitrinek és készletük. |
flexhour_meta |
Belső állapot. |
A FlexHour csak azt építi meg, amit ténylegesen látsz. A korlátok rögzítettek:
| Probléma | Megoldás |
|---|---|
missing ox_inventory items a konzolban |
Add hozzá az itemeket az Itemek rész szerint. |
model "fh_…" is not streamed az F8-ban |
A stream/ mappa hiányos. Futtasd a /fhmodels parancsot, majd másold át újra a stream/ mappát a letöltésből. |
| Az óra a kéz mellett lebeg | Futtasd a /watchfit parancsot. Egy teljes ped modellhez egy admin a G-vel menti alapértelmezésként az illesztést. |
No such export useBox in resource concept_flexhour |
Átnevezték a mappát. Hagyd concept_flexhour néven. |
ESX's built-in inventory cannot hold a watch |
Telepíts item metaadatot kezelő inventoryt. |
| Felvételkor eltűnik az óra az inventoryból | Ez a keepWorn = true: az óra a csuklón van. A /watch leveszi. |
| Az eladó vagy az orgazda nem listázza az órámat | A csuklódon van. Előbb vedd le. |
| Nem vonja le vagy nem fizeti ki a pénzt | A Config.PayAccounts olyan számlaneveket használjon, amelyeket a frameworköd a bridge-en keresztül ismer (cash, bank, money). |
| Mindenki használhatja az admin parancsokat | Állítsd be: Config.AdminOpenToAll = false. |
Az inventory nem ír minden változást azonnal az adatbázisba, így egy kemény összeomlás néhány percet visszaállíthat.
A szervert a txAdminon keresztül állítsd le, ne az ablak bezárásával.
Config.AdminOpenToAll értéke false./fhmodels nem listáz semmit.setr ox:locale).flexhour_boutique a concept_flexhour után indul.We aim to reply on Discord within 24 hours on business days.
Segítség kell a beállításhoz? Csatlakozz Discordon vagy support@conceptstudio.store.