RE:NODE

Návody12 min čtení

FiveM frameworky: ESX vs QBCore vs Qbox, který zvolit

Jak se liší ESX, QBCore a Qbox, co každý potřebuje pod sebou, jak se načítají resources a který framework zvolit pro nový roleplay server.

14 čtenářů

Vyber jeden framework a postav na něm všechno. ESX Legacy má největší zásobu volných resources a ukládá jobs do databáze. QBCore je výchozí volba pro nové roleplay servery a drží skoro všechno v souborech Lua, které si můžeš přečíst. Qbox je QBCore přestavěný na stacku ox_*, čistší a rychlejší, ale s méně hotovými resources. Všechny tři běží na stejném FXServeru, všechny tři dnes pod sebou čekají oxmysql a ox_lib a žádný z nich nespustí jobové skripty toho druhého bez práce navíc. Framework je jediné rozhodnutí na FiveM serveru, které je později opravdu drahé měnit, a proto stojí za dvacet minut, než cokoli nainstaluješ.

Co framework vlastně je#

Samotný FXServer ti dá multiplayerovou relaci GTA bez pravidel: hráči se objeví a tím to končí. Framework je balík resources, který přidává věci, které roleplay server předpokládá - trvalou postavu navázanou na řádek v databázi, peníze na účtech, inventář, jobs s hodnostmi, způsob, jak se jeden resource může druhého zeptat, jestli je hráč policista.

Je to stejně tak konvence jako kód. Když autor resource napíše „vyžaduje ESX“, myslí tím, že jeho skript volá sdílený objekt ESX a očekává názvy eventů ESX, jeho databázové tabulky a jeho definice itemů. To je celý důvod, proč míchání frameworků nefunguje: resource esx_, který se ptá na xPlayer.getJob(), nedostane od qb-core vůbec nic, protože ta funkce tam neexistuje.

Server s frameworkem proto není jedno stažení. Je to jádro plus databázové schéma plus zhruba 60 až 400 dalších resources, a právě tam žije zábava i způsoby, jak věci selhávají. Vrstvu nad touto pokrývá článek FiveM server a txAdmin; tento je o tom, co dáváš dovnitř resources/.

ESX, QBCore a Qbox vedle sebe#

ESX LegacyQBCoreQbox
Jádroes_extendedqb-coreqbx_core
Jobs definované vdatabázových tabulkáchshared/jobs.luashared/jobs.lua
Itemy definované vdatabázové tabulceshared/items.luaox_inventory
Inventářvolitelnýqb-inventoryox_inventory
Zásoba volných resourcesnejvětšívelmi velkánejmenší
Styl kódunejstarší, různorodýúhledný, rozvláčnýnejpřísnější, nejnovější

ESX Legacy je udržovaná větev nejstaršího frameworku, který se stále široce používá, vydávaná jako esx_core - jeden repozitář obsahující es_extended plus jeho resources pro menu, notifikace a progress bary. Novější verze vyžadují oxmysql a ox_lib; starší používaly mysql-async a tutoriál, který ti radí instalovat mysql-async, je zastaralý. Pro ESX je typické, že jobs a hodnosti jsou řádky v tabulkách jobs a job_grades, ne řádky v konfiguračním souboru, takže přidání jobu znamená napsat SQL nebo proklikat phpMyAdmin. Někomu to vyhovuje. Většině je to na ESX nejvíc protivné.

QBCore je framework, na kterém začíná většina nových roleplay serverů a na který míří nejvíc tutoriálů, videí na YouTube i placených skriptů. Jeho konfigurace žije v obyčejné Lua pod qb-core/shared/ - items.lua, jobs.lua, gangs.lua, vehicles.lua, weapons.lua, locations.lua - takže přidání jobu je jeden záznam v tabulce a restart. Cenou je, že kódová základna rychle rostla, kvalita napříč resources qb-* kolísá a hodně z toho, co lidé provozují, je fork forku.

Qbox je pokračování QBCore přestavěné na stacku Overextended: ox_lib, oxmysql, ox_inventory, ox_target, ox_doorlock. Zahazuje věci, které QBCore držel kvůli kompatibilitě, vyžaduje Lua 5.4 a aktuální build FXServeru a přesouvá definice itemů z jádra do ox_inventory/data/items.lua. Dodává vrstvu kompatibility, která odpovídá jako qb-core, takže slušný počet resources qb-* běží beze změny - ale ne ty, které sahají na inventář, a ne ty, které zapisují přímo do tabulek QBCore. Pokud je tvůj seznam resources většinou to, co si napíšeš nebo výrazně upravíš sám, je Qbox příjemnější místo k práci. Pokud je většinou to, co sis stáhl, bude s tebou QBCore bojovat méně.

Ještě dva další, které uvidíš zmiňované. ox_core je vlastní framework Overextended: malý, názorový, s minimem hotového obsahu, určený lidem, kteří chtějí psát vlastní server. vRP je předek většiny z toho a nejlépe ho nechat v minulosti. Ať čteš na fóru cokoli, žádný framework není „nejrychlejší“ tak, abys to pocítil - framework stojí zlomek milisekundy na tick a těch 200 resources, které na něj naskládáš, stojí všechno ostatní.

Co musí běžet pod všemi třemi#

Žádný z frameworků není samostatný. Než nastartuje jádro, musí běžet tyto věci:

  • `oxmysql` - databázový most, který používá každý současný framework. Čte connection string z convaru a zpřístupňuje funkce dotazů všem ostatním resources. Podrobnosti v FiveM databáze a oxmysql.
  • `ox_lib` - sdílená knihovna pro callbacky, notifikace, kontextová menu, progress bary, zóny a body. Načítá se jako sdílený skript přes @ox_lib/init.lua a vyžaduje ji rostoucí počet resources, ať jsi zvolil Qbox, nebo ne.
  • Hlasový resource - obvyklou volnou volbou je pma-voice a potřebuje provoz mumble, takže ho nech být, pokud nevíš, proč ho měníš.
  • Základní resources Cfx - mapmanager, chat, spawnmanager, sessionmanager a hardcap, dodávané ve výchozích datech serveru. Frameworky nahrazují spawn a výběr postavy, ale pořád čekají, že části pro session a chat existují.
  • `screenshot-basic` - malý a txAdmin ho používá pro snímky obrazovky hráčů.

Pořadí načítání není kosmetické. Resource, který volá MySQL.query, zatímco oxmysql teprve startuje, vyhodí chybu, a jobový resource, který žádá o sdílený objekt dřív, než jádro běží, dostane nil a po zbytek relace tiše nedělá nic. V server.cfg to znamená:

server.cfg - order matters
ensure oxmysqlensure ox_libensure es_extended        # or qb-core, or qbx_coreensure ox_inventoryensure pma-voice# anything that depends on the framework goes after the frameworkensure esx_policejob

ensure resource spustí, nebo ho restartuje, pokud už běží, a proto je to správné sloveso do konfiguračního souboru. Každý řádek souboru je rozebraný v FiveM server.cfg vysvětleno.

Instalace: recepty txAdminu, nebo ručně#

Deployer txAdminu umí postavit server z receptu - souboru YAML, který stáhne repozitáře, rozbalí je do resources/, naimportuje SQL a zapíše výchozí server.cfg. Při nastavení se zeptá na connection string k databázi a vytvoří tabulky v jakékoli databázi, na kterou ho nasměruješ. Seznam receptů zahrnoval výchozí šablonu Cfx, build ESX Legacy a komunitní buildy a mezi verzemi txAdminu se mění, takže čti, co ti tvá instalace opravdu nabízí, ne co ukazuje dva roky staré video.

Recepty stojí za použití přesně k jednomu: za deset minut dostat první fungující server, abys viděl, jak vypadá framework, když není rozbitý. Pak se podívej, co ti dal.

code
resources/  [system]/            # build helpers from the default server data  [standalone]/    oxmysql/    ox_lib/    pma-voice/  [core]/    es_extended/    ox_inventory/  [jobs]/    esx_policejob/    esx_ambulancejob/

FXServer prochází resources/ a hledá složky, jejichž názvy jsou v hranatých závorkách, a rekurzivně se do nich dívá. Složka bez závorek se bere jako samotný resource a musí obsahovat fxmanifest.lua, jinak je neviditelná. ensure vždy bere název resource, nikdy cestu, takže ensure esx_policejob funguje, ať je zanořený jakkoli hluboko.

Ruční postup má čtyři kroky a měl bys je zvládnout:

  1. Stáhni release jádra frameworku, rozbal ho do resources/[core]/ a zkontroluj, že název složky odpovídá tomu, co dokumentace říká pro ensure.
  2. Naimportuj SQL dump frameworku do databáze. Udělej to před prvním startem, ne až po zaseknutí.
  3. Dej connection string do server.cfg a přidej řádky ensure v pořadí závislostí.
  4. Spusť server s otevřenou konzolí a čti každý řádek, dokud se první hráč nedokáže objevit ve hře.

Manifest a co z něj poznáš#

Každý resource má fxmanifest.lua. Přečíst si ho před instalací ti řekne víc než příspěvek na fóru, ze kterého pochází.

fxmanifest.lua
fx_version 'cerulean'game 'gta5'lua54 'yes'author 'someone'version '1.2.0'shared_scripts {    '@ox_lib/init.lua',    'config.lua',}client_scripts { 'client/*.lua' }server_scripts {    '@oxmysql/lib/MySQL.lua',    'server/*.lua',}dependencies { 'ox_lib', 'oxmysql' }

Tvar @resource/file.lua vytáhne soubor z jiného resource, takhle se vkládají oxmysql a ox_lib. fx_version 'cerulean' je aktuální generace manifestu; adamant a bodacious jsou starší a pořád fungují. lua54 'yes' přihlásí resource k Lua 5.4 a vyžadují ho resources pro Qbox. Blok escrow_ignore znamená, že resource je částečně zašifrovaný přes Cfx asset escrow, což je u placených skriptů normální a znamená, že jeho chyby neopravíš sám.

Na co se podívat, než spustíš cizí resource: os.execute, PerformHttpRequest na doménu, kterou neznáš, dlouhý řetězec base64 předaný do load, nebo jakýkoli add_ace zapsaný v souboru Lua. Uniklé placené skripty jsou hlavní cestou, jak se na FiveM servery dostávají zadní vrátka, a nálož bývá jedna z těchto čtyř věcí. Udržování modovaného serveru čistého je obecná verze této úvahy.

Psaní proti frameworku#

Tvar je všude stejný: získej objekt frameworku jednou, získej objekt hráče podle ID serveru, volej na něm metody.

ESX Legacy, server side
local ESX = exports['es_extended']:getSharedObject()RegisterCommand('wage', function(source)    local xPlayer = ESX.GetPlayerFromId(source)    if not xPlayer then return end    xPlayer.addAccountMoney('bank', 500)end, true)
QBCore, server side
local QBCore = exports['qb-core']:GetCoreObject()RegisterCommand('wage', function(source)    local Player = QBCore.Functions.GetPlayer(source)    if not Player then return end    Player.Functions.AddMoney('bank', 500, 'weekly-wage')end, true)

Qbox vystavuje své jádro přímo jako exports.qbx_core, takže stejná práce je exports.qbx_core:GetPlayer(source) s funkcemi hráče visícími na výsledku. Starší tutoriály k ESX používají místo exportu TriggerEvent('esx:getSharedObject', ...); v Legacy to pořád funguje, ale v novém kódu piš export, protože se nemůže střetnout s pořadím startu resources.

true na konci RegisterCommand je příznak restricted. Způsobí, že příkaz vyžaduje oprávnění ACE a není otevřený všem, což je rozdíl mezi adminským příkazem a dárkem pro prvního, kdo si přečte seznam tvých resources.

Výkon a kde framework za problém nemůže#

Server s frameworkem, který sekává, málokdy trpí nedostatkem hardwaru. Než cokoli koupíš, měř:

  • resmon 1 v klientské konzoli F8 vypíše každý resource s jeho CPU časem na snímek. Cokoli, co drží nad 0,5 ms, když se nic neděje, dělá práci, kterou dělat nemusí.
  • Monitor resources v txAdminu ukazuje stranu serveru, kde se objevují databázové dotazy ve smyčkách.
  • Konzole je druhá polovina příběhu. Resource, který hází chybu každý tick, ochotně sní jádro procesoru a přitom vypisuje důvod - viz čtení konzole.

Typické hodnoty pro server s normálním seznamem roleplay resources:

HráčiResourcesRAMPoznámky
Testování, 1-560-1002 GBHolé jádro plus pár jobs
16-32100-2004 GBBěžný první veřejný server
32-64200-3006-8 GBStreamované assety začínají hrát roli
64-128300+8-12 GBPotřebuje někoho, kdo resources audituje

Dvě věci, které opravdu stojí paměť, a ne CPU, jsou streamované assety - vlastní vozidla, MLO, oblečení - a resources, které cachují velké tabulky pro každého hráče. Obojí roste se seznamem resources a nic se nezmenší, když hráči odejdou, proto je týdenní restart na roleplay serverech standardní praxe.

Aktualizace frameworku bez ztraceného víkendu#

Aktualizace frameworku nejsou jako aktualizace pluginů. Release jádra může změnit sloupce v databázi, přejmenovat eventy a najednou rozbít každý resource napsaný proti starým názvům.

  1. Přečti si poznámky k vydání kvůli zásadním změnám, než cokoli stáhneš. Major verze ESX nebo QBCore má obvykle seznam migrací.
  2. Nejdřív exportuj databázi. Každá aktualizace jádra, která sahá na schéma, je cestou zpět nevratná.
  3. Spusť nové jádro na druhém serveru s kopií databáze a tvým skutečným seznamem resources a přihlas se. Testovací server na stejném účtu stojí jeden malý tarif a ušetří přesně tenhle večer.
  4. Aktualizuj framework a resources, které na něm závisejí, společně, ne po jednom.
  5. Starou složku resources/ ponech jako archiv, dokud nová nepřežije celou hráčskou relaci. Disciplínu vracení zpět pokrývá co dělat, když aktualizace modu něco rozbije.

Na RE:NODE mají FiveM servery k dispozici txAdmin, správce souborů rozbaluje archivy na místě, takže release resource jde rovnou do resources/, SFTP je na každém serveru pro hromadné nahrávání a záložka Schedules zvládne týdenní restart. Licenční klíč je tvůj z portálu Cfx.re, ne náš, takže se stěhuje s tebou.

FAQ#

Můžu na jednom serveru provozovat resources pro ESX i QBCore?

Ne. Vystavují jiné objekty, jiné eventy a jiná databázová schémata. Několik resources je napsaných tak, že detekují oba, a Qbox z kompatibility záměrně odpovídá jako qb-core, ale jobový skript esx_ na serveru s QBCore je třeba přepsat, ne nakonfigurovat.

Který framework by měl zvolit úplně nový server?

QBCore, pokud nemáš konkrétní důvod. Předpokládá ho většina volných resources, většina placených skriptů a téměř všechny tutoriály, a to záleží mnohem víc, když o půlnoci vězíš na místě, než jakýkoli architektonický argument. Qbox zvol, pokud zamýšlíš psát vlastní resources a nevadí ti číst zdrojový kód.

Musím za resources platit?

Ne, ale většina serverů platí. Volná zásoba pokryje jobs, obchody, garáže a inventáře naprosto dostatečně. Placené skripty kupují vyladění a podporu. Co nesmíš, je instalovat uniklé placené skripty: jsou nejčastější cestou zadních vrátek na FiveM server a ten, kdo ti soubor dal, není autor.

Odkud se berou jobs v jednotlivých frameworcích?

ESX je čte z tabulek jobs a job_grades v databázi, takže nový job je insert. QBCore a Qbox je čtou ze sdíleného souboru Lua, takže nový job je záznam v tabulce a restart. Všechny tři pak potřebují jobový resource, který tomu jobu dá nějakou náplň.

Kolik paměti potřebuje server s frameworkem?

Dva gigabajty zvládnou jádro a pár jobs na testování. Čtyři je realistické minimum pro veřejný server a plný seznam roleplay resources při 64 hráčích obvykle sedí mezi šesti a osmi. Pokud jsi nad tím s méně než 200 resources, něco uniká, místo aby bylo vytížené.

Potřebuju vlastní licenční klíč?

Ano. FXServer nenastartuje bez licenčního klíče Cfx.re vydaného tobě z portálu Cfx.re a je vázaný na adresu, na které běží, takže přesun serveru znamená vydat klíč znovu, ne ho zkopírovat.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000