RE:NODE

Návody12 min čtení

Server BeamMP: nastavení, mapy a mody

Provozuj server BeamMP pro BeamNG.drive: auth key, ServerConfig.toml řádek po řádku, port 30814, klientské mody, pluginy v Lua a proč se hráčům rozjíždí synchronizace.

38 čtenářů

Server BeamMP je malý samostatný program, ne kopie BeamNG.drive. Přenáší stav vozidel mezi klienty, rozdává mody, když se lidé připojují, a spouští pluginy v Lua. Nesimuluje ani jedno kolo. Ten jediný fakt vysvětluje většinu toho, co následuje: server je nenáročný na CPU a paměť, náročný na šířku pásma a to, co skutečně omezuje počet hráčů, je to, co zvládnou simulovat počítače tvých hráčů, ne to, co si pronajmeš.

K začátku potřebuješ tři věci: binárku serveru, jeden port (ve výchozím stavu 30814, na TCP i UDP) a auth key z BeamMP Keymasteru. Klíč není volitelný a hosting ti ho dát nemůže - je vázaný na tvůj vlastní účet BeamMP. Všechno ostatní je jediný ServerConfig.toml.

Co je BeamMP a co dělá server#

BeamNG.drive nemá oficiální multiplayer. BeamMP je komunitní projekt, který ho přidává: klientský mod a launcher pro hráče a tenhle server, na kterém se všichni potkají.

Architekturu stojí za to pochopit dřív, než něco dimenzuješ nebo začneš z lagu obviňovat hosting:

  • Každý klient autoritativně simuluje své vlastní vozidlo. Tvoje fyzika běží na tvém počítači.
  • Vozidla ostatních se simulují také lokálně, opravována aktualizacemi stavu přicházejícími přes server. Proto vzdálené auto, které ztrácí pakety, na tvé obrazovce cuká, naskakuje nebo projede zdí, zatímco u něj doma vypadá v pořádku.
  • Server nedrží žádný fyzikální stav. Autentizuje hráče, sleduje, komu patří které vozidlo, přenáší aktualizace a spouští tvoje Lua.

Důsledky jsou okamžité. Server pro deset hráčů se čtyřmi auty každý znamená čtyřicet vozidel simulovaných na PC každého hráče, takže MaxCars je nastavení výkonu klienta, které se náhodou konfiguruje na serveru. A hráč, který si stěžuje na „lag serveru“, obvykle popisuje ztrátu paketů nebo vlastní CPU, ne přetížený hosting. Správnou slovní zásobu pro takový rozhovor dává latence, jitter a ztráta paketů.

stav vozidlastav vozidlaposílá se připojenýmauth keyHráč Asimuluje své autoHráč Bsimuluje své autoResources/Clientzipy modůServer BeamMPTCP a UDP 30814Backend BeamMPauth a výpis
BeamMP přenáší stav vozidel mezi klienty

Požadavky a využití zdrojů#

Na poměry herních serverů je tenhle drobný. Práce, kterou dělá, je kopírování paketů a při připojení posílání archivů modů.

HráčiRAMvCPUPoznámky
Až 8, bez modů2 GB1Pohodlné. Výchozí případ
10-16, pár modů3 GB1,5Jediná špička je přenos modů
20-30, velká sada modů4-6 GB2Skutečným omezením se stává šířka pásma
  • CPU: nízké a většinou jednovláknové. Pokud je tvůj server při deseti hráčích na 100 %, podívej se na plugin v Lua, který dělá něco hloupého na každém snímku, dřív než na tarif.
  • Disk: samotný server má pár desítek megabajtů. Roste tvoje složka Resources/Client - seriózní sada modů má snadno několik gigabajtů a každý z těch bajtů se pošle každému připojujícímu se hráči.
  • Šířka pásma: tu je třeba promyslet. Stav každého auta jde každému klientovi, takže provoz roste s počtem hráčů vynásobeným počtem aut a stahování modů přichází v dávkách pokaždé, když se někdo připojí. Počítej s citelně větším odchozím provozem než u serveru Minecraftu nebo Valheimu se stejným počtem lidí. Neměřený neznamená neomezený; rozdíl vysvětluje šířka pásma a fair use.

Praktická rada: na veřejném serveru omez MaxCars na 2 nebo 3 a zvyšuj ho jen pro skupinu, o které víš, že má na to hardware. Nic jiného, co nastavíš, neovlivní pocit ze serveru tolik.

Získání auth key#

Každý server BeamMP potřebuje auth key, i soukromý. Klíč identifikuje server vůči backendu BeamMP, který autentizuje připojující se hráče. Bez něj server odmítne nastartovat.

  1. Jdi do BeamMP Keymasteru na keymaster.beammp.com a přihlas se přes Discord.
  2. Vytvoř klíč, dej mu název, který později poznáš, a zkopíruj řetězec.
  3. Vlož ho do AuthKey v ServerConfig.toml.

Klíč patří k tvému účtu, ne k poskytovateli hostingu. Nikdo ti ho nemůže vystavit a měl bys s ním zacházet jako s heslem: jeden klíč na server, nikdy ho nevkládej do veřejného kanálu a pokud unikne, vygeneruj nový. Stejná úvaha platí pro jakékoli přihlašovací údaje, které server drží - viz proměnné prostředí a tajné údaje.

Na RE:NODE je to jedna z her, které potřebují tvé vlastní přihlašovací údaje. Server vznikne, jakmile se platba zpracuje, a instalace čeká na záložce Setup, než vložíš klíč; tam se také vrátíš, když ho budeš chtít vyměnit.

Instalace a první spuštění#

Stáhni build serveru pro svou platformu z projektu BeamMP, dej ho do vlastního adresáře a jednou ho spusť. Vedle sebe vytvoří výchozí ServerConfig.toml, vypíše stížnost na chybějící auth key a skončí. To se očekává - doplň klíč a spusť ho znovu.

code
BeamMP-ServerServerConfig.tomlResources/  Client/  Server/

Na hostingu s panelem už binárka i struktura složek existují; ServerConfig.toml upravuješ v prohlížeči a mody dáváš do Resources/Client přes SFTP nebo správce souborů. Podrobnosti o připojení jsou v SFTP a správce souborů a je to rozumný způsob, jak nahrát sadu modů o několika gigabajtech.

Udržuj verzi serveru aktuální. BeamMP se aktualizuje společně s vydáními BeamNG a server s tím starším protokolem aktualizovaní klienti odmítnou - stejná past jako u každé modované hry. Zvyk, který stojí za to mít, popisuje co dělat, když aktualizace modu něco rozbije: znej svoji funkční verzi, měj kopii konfigurace a neaktualizuj večer, kdy na tebe čekají lidé.

Tady není žádný stav světa, o který bys mohl přijít, takže zálohy jsou neobvykle jednoduché a neobvykle snadno se na ně zapomíná. Za uchování stojí ServerConfig.toml, všechno pod Resources/Server a seznam toho, co je v Resources/Client. Konfiguraci znovu postavíš za pět minut; sadu pluginů v Lua vyladěnou za rok ne, a stejně tak ne přesnou kombinaci verzí modů, které spolu právě fungují. Zálohuj před každou změnou modů a před každou aktualizací serveru a drž zálohu někde, kde server není - zálohy, které opravdu obnovíš to vysvětlí lépe než odrážka.

ServerConfig.toml řádek po řádku#

Soubor je TOML, takže řetězce potřebují uvozovky a booleovské hodnoty ne. Syntaktická chyba server zastaví místo toho, aby se ignorovala, což je vlastně laskavost.

ServerConfig.toml
[General]Port = 30814AuthKey = "paste-your-keymaster-key-here"Name = "Sunday Night Cruise"Description = "Slow driving. No ramming. Italy."Tags = "Freeroam,Cruise,Europe"Map = "/levels/italy/info.json"MaxPlayers = 10MaxCars = 2Private = falseAllowGuests = falseLogChat = trueDebug = falseIP = "::"InformationPacket = trueResourceFolder = "Resources"
KlíčCo dělá
PortPort, na který se hráči připojují. Potřebuje otevřené TCP i UDP
AuthKeyTvůj klíč z Keymasteru. Server bez něj nenastartuje
NameNázev v seznamu serverů. Podporuje formátovací kódy
DescriptionDva řádky textu zobrazené po výběru serveru
TagsKategorie oddělené čárkou, které používají filtry ve hře
MapCesta k souboru info.json levelu, viz níže
MaxPlayersSloty
MaxCarsVozidla na hráče. Nejdůležitější nastavení výkonu
Privatetrue drží server mimo veřejný seznam
AllowGuestsZda se mohou připojit hráči bez účtu BeamMP
LogChatZapisuje chat do logu serveru. Užitečné pro moderaci
DebugPodrobné logování. Nech vypnuté, log rychle roste
IPNa kterou adresu se naváže. :: nebo 0.0.0.0 znamená všechny
InformationPacketDovolí neautentizovaným klientům dotazovat se na údaje o serveru
ResourceFolderKde leží složky s mody a pluginy

Novější verze serveru přidávají sekce vedle [General], typicky blok [Misc] s přepínači připomínek aktualizací jako ImScaredOfUpdates a UpdateReminderTime a blok HTTP pro volitelný vestavěný webový endpoint. Soubor, který server vygeneruje, je autoritou pro to, které z nich tvůj build má; co server nezapsal, to tvůj build pravděpodobně nečte.

Mapy a klientské mody#

Hodnota Map je cesta do struktury levelů, ne přívětivý název. Výchozí je /levels/gridmap_v2/info.json a oficiální levely používají tyto názvy složek:

LevelSložka
Gridmap v2gridmap_v2
Small gridsmallgrid
East Coast USAeast_coast_usa
West Coast USAwest_coast_usa
Italyitaly
Utahutah
Johnson Valleyjohnson_valley
Jungle Rock Islandjungle_rock_island
Small Islandsmall_island
Hirochi Racewayhirochi_raceway
Automation Test Trackautomation_test_track
Driver Trainingdriver_training
Industrial Siteindustrial
Derby Arenaderby

Mody fungují nahráním, ne přes workshop. Hoď .zip modu rovnou do Resources/Client a pošle se každému hráči při připojení a pak se automaticky načte. Vozidla nepotřebují nic dalšího. Mod mapy potřebuje zip na stejném místě plus změněný řádek Map, aby mířil na složku levelu uvnitř toho zipu - otevři archiv a podívej se na název složky pod levels/, protože málokdy odpovídá názvu na stránce ke stažení.

Tři věci tu předvídatelně selhávají:

  • Cesta k mapě je špatně, takže server nastartuje na výchozím levelu nebo žádný nenačte. Přečti si zip, nehádej.
  • Sada modů je obrovská, takže noví hráči sedí několikaminutové stahování a polovina to vzdá. Drž sadu tak malou, jak koncept serveru dovolí, a velikost napiš na Discord.
  • Mod není kompatibilní s aktuální verzí hry. Aktualizace BeamNG pravidelně rozbíjejí mody vozidel. Když vyjde patch, nejrychlejší diagnóza je odsunout složku s mody a nastartovat načisto.

Serverové pluginy v Lua patří do Resources/Server a klientům se nikdy neposílají.

Pluginy v Lua#

Plugin je složka pod Resources/Server obsahující main.lua. Server ho při startu načte a ty zachytíš události, které tě zajímají:

Resources/Server/Welcome/main.lua
local function onInit()    print("Welcome plugin loaded")    MP.RegisterEvent("onPlayerJoin", "greet")    MP.RegisterEvent("onChatMessage", "filter")endfunction greet(playerID)    local name = MP.GetPlayerName(playerID)    MP.SendChatMessage(-1, name .. " joined. Rules are in the Discord.")endfunction filter(playerID, name, message)    if string.find(message, "badword") then        MP.SendChatMessage(playerID, "That word is not welcome here.")        return 1    endendonInit()

Události, které budeš používat nejčastěji, jsou onInit, onPlayerAuth, onPlayerConnecting, onPlayerJoining, onPlayerJoin, onPlayerDisconnect, onChatMessage, onVehicleSpawn, onVehicleEdited a onVehicleDeleted. Vrácení 1 ze zrušitelné obslužné funkce, jako je onChatMessage nebo onVehicleSpawn, akci zablokuje. Funkce, po kterých sáhneš, jsou MP.SendChatMessage (s -1 pro všechny), MP.DropPlayer, MP.GetPlayerName, MP.GetPlayers, MP.GetPlayerIdentifiers a MP.CreateEventTimer pro cokoli periodického.

Signatury se mezi hlavními verzemi serveru měnily, takže stažený plugin porovnej s dokumentací verze, kterou provozuješ, a nepředpokládej, že tři roky starý skript pořád funguje. Odsud také pocházejí whitelisty, zákazy vozidel, pravidla proti naražení a propojení s Discordem - BeamMP nemá žádný vestavěný admin systém, který by za to stál, a každý dobře vedený server je dobře vedený proto, že někdo napsal nebo nainstaloval Lua.

Řízení přístupu visí na onPlayerAuth, která se spustí dřív, než je hráč vpuštěn, a dostane jeho identifikátory - jméno účtu a číselný identifikátor BeamMP, za který ručil backend. Whitelist je tabulka těchto identifikátorů kontrolovaná v té obslužné funkci a MP.DropPlayer pro každého, kdo v ní není. Důvod stavět na identifikátoru místo na zobrazovaném jménu je zřejmý: jména se dají měnit, identifikátory ne. Když se někdo chová špatně, loguj obojí, protože až ho budeš banovat, jméno na tvém screenshotu už může patřit nikomu.

Buď zdrženlivý v tom, co instaluješ. Serverový plugin běží s oprávněními serveru a vidí každou zprávu v chatu i každé připojení, takže plugin z anonymního příspěvku na fóru si zaslouží přečíst, než ho vložíš do složky, která se při startu načítá automaticky. Stejný instinkt platí pro klientské mody, které posíláš na cizí počítače; přesně o takové hygieně je udržování modovaného serveru čistého.

Drž pluginy ve verzovacím systému nebo alespoň měj kopie mimo server. Jsou to část nastavení, kterou si znovu nestáhneš.

Porty, připojení a firewally#

PortProtokolÚčel
30814TCPNavázání spojení, přenos modů
30814UDPStav vozidel

Jedno číslo portu, oba protokoly, oba směry. Otevření jen TCP dává klasický příznak: hráči se připojí, vidí načtení mapy a pak se nikdo nehýbe - protože proud stavu nikdy nedorazí. Proč hry dělí provoz takhle, vysvětluje porty herních serverů.

Hráči najdou server v seznamu BeamMP ve hře, když je Private = false, nebo se připojí přímo adresou a portem. Přímé připojení funguje bez ohledu na seznam, takže je to správný test, když si nejsi jistý, zda je server rozbitý, nebo jen nevypsaný. Pokud chceš rozdávat jméno místo adresy, záznam A funguje bez problémů - podrobnosti jsou v připojení domény k herním serveru a BeamMP nepotřebuje žádné triky se záznamy SRV.

Řešení problémů#

Server hned po startu skončí. Téměř vždy kvůli auth key: chybí, je s překlepem nebo je to pořád zástupný text. Řádek v logu to říká, ale rychle odroluje.

Server běží a není v seznamu. Zkontroluj Private, pak zkontroluj, zda se stroj dostane k backendu BeamMP odchozím spojením, a počkej pár minut. Mezitím testuj přímým připojením.

Hráči se připojí a pak vyprší čas při „loading“. Obvykle přenos modů. Velká složka Resources/Client přes pomalý upload narazí na timeout na straně klienta. Zmenši sadu, nebo se smiř s pomalým prvním připojením.

Všichni cukají, když jsou blízko sebe. Příliš mnoho aut. Sniž MaxCars, pak MaxPlayers. Pamatuj, že simulace běží na jejich PC, takže je to náklad klienta, který spravuješ ze serveru.

Jeden hráč je nehratelný a všichni ostatní jsou v pořádku. Jeho připojení nebo jeho CPU. Ať si před jakoukoli centrální změnou zkontroluje ztrátu paketů k adrese serveru.

Nesoulad verzí při připojení. Build serveru je starší než klientský mod. Aktualizuj server. Stává se to po každém vydání BeamNG, tak s tím počítej, ať tě to nepřekvapí.

Plugin v Lua nic nedělá. Zkontroluj, že názvy funkcí předané do MP.RegisterEvent jsou globální, že main.lua leží ve vlastní složce pod Resources/Server a že v logu serveru není syntaktická chyba z doby načítání.

FAQ#

Potřebuju na serveru nainstalovat BeamNG.drive?

Ne. Server BeamMP je samostatný program, který přenáší stav a poskytuje mody. Hru potřebují jen hráči plus klientský mod BeamMP.

Může mi hosting dát auth key?

Ne. Klíč pochází z BeamMP Keymasteru a je vázaný na tvůj vlastní účet BeamMP. Každý hosting tě požádá, abys vložil ten svůj, protože neexistuje legitimní způsob, jak by ho mohl vygenerovat za tebe.

Kolik hráčů zvládne server BeamMP?

Deset je pohodlný výchozí počet a vytížené veřejné servery jich mají víc, ale skutečný limit je výkon klientů: každý hráč simuluje každé přítomné vozidlo. Snížení MaxCars zvedne praktický strop hráčů mnohem víc než větší tarif.

Kam dát mody vozidel a map?

Do Resources/Client jako soubory .zip. Při připojení se posílají hráčům. U modu mapy musíš navíc nastavit Map na složku levelu uvnitř archivu, která se často liší od názvu souboru.

Podporuje BeamMP hesla?

Ne jako volbu konfigurace. Private = true jen odebere server z veřejného seznamu. Skutečné řízení přístupu znamená plugin v Lua, který kontroluje identifikátory hráčů při autentizaci.

Proč ostatní auta cukají nebo se teleportují?

Protože vzdálená vozidla se simulují lokálně a opravují podle síťových aktualizací. Ztráta paketů mezi hráčem a serverem se projeví přesně takhle a je to problém připojení, ne kapacity hostingu.


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