Przejdź do głównej zawartości

GMCP — protokół dla klientów

GMCP (Generic Mud Communication Protocol) to strukturalny kanał obok zwykłego tekstu. Serwer wysyła nim dane, których nie trzeba parsować z opisów: stan postaci, zawartość pokoju, ekwipunek, pogodę.

Ta strona jest dla osób piszących klienta albo skrypty. Do grania nie jest potrzebna.

TransportAdresJak leci GMCP
telnetport 9600negocjacja IAC (opcja 201), ładunek JSON
WebSocketport 9601, ścieżka /wsramki JSON, bez negocjacji

Na telnecie klient musi zgłosić obsługę GMCP w negocjacji — bez tego serwer nie wyśle ani jednego pakietu. Połączenie WebSocket ma GMCP włączone od razu.

Nazwa pakietu i ładunek są rozdzielone: pakiet to tekst w rodzaju Char.State, ładunek to obiekt JSON.

PakietKiedyCo niesie
Ability.Cooldownużycie zdolnościstan odnowienia
Ability.Listpodgląd zdolności; ponownie po reconnect i transferze shardówpoznane zdolności z polem slot (1–5 albo 0) i passive (tylko bierne)
Ability.Slotslogowanie i każda zmiana slotuslots — mapa "1"…"5" (wpis z passive dla biernej), oraz max_slots
Account.Characterspo zalogowaniu, gdy konto ma postaciecharacters[] — {id, name, race, gender, …}, max, admin
Account.LoginErrornieudane logowanie lub weryfikacjamessage
Account.RegisterErrornieudana rejestracjamessage
Account.Verifiedkonto potwierdzonepuste
Account.Verifyklient → serwer: kod weryfikacyjny; także serwer → klient jako prośba o kodod klienta code; od serwera email, message
Boat.Statetylko klient z Core.Supports „Gfx”, tylko z sharda prowadzącego kadłub: wejście na pokład, zmiana roli, każda zmiana stanu łodzi (kotwica, cumy, żagiel) i tick, gdy coś się zmieniło; zejście z pokładu — {aboard: false}aboard, id, def_id, label, has_sail, sail_up, anchor, state, beached, heading (kurs, w który gracz wierzy), rowing, hold, speed (m/s, ta sama co kurs), speed_word, hp, max_hp, helm_phrase, role, mine, board (cmd, label — wejście na zaczepiony wrak albo łódź)
Build.Celltylko klient z Core.Supports „Gfx”: wejście na kratkę Traktu Osadniczego albo osady, każda zmiana na niej (postęp kroku, ścięte drzewo, zniesiony materiał, wybór, nowy etap) i zmiana prawa do budowy; zejście z kratek — {} razroom, kind (road/osada), typ (trakt/wjazd/pas/parcela), seq, stage, title, etap, clearing (trees, stumps, logs), step (label, verb, n, of, done, need), deny, settlement, build/target/gate (el, name, tier, tier_name), options[] (key, group, label, tier, ok, why, detail, stock, cmd, chosen) — te same wybory co gołe buduj/rozbuduj, stake[] (kind, dir, label, cmd) — kierunki wytycz, found[] (dir, label, cmd, ok, why) — kierunki załóż osadę z werdyktem miejsca, tym samym zdaniem co komenda
Char.Buffstylko klient z Core.Supports „Gfx”: nałożenie i zdjęcie efektu, Char.Request o buffsbuffs[] (name, kind — buff/perk/dungeon/food, remaining_s — -1 dla trwałych, detail); te same wiersze co efekty
Char.Climbingkażda zmiana stanu wspinaczki (także wbicie i wyciągnięcie haka, zjazd po linie na ziemię)active, route, height, total, status, opis odcinka, piton_here (hak na tej wysokości), rope (wspinaczka na linie), partner (numer obiektu drugiej strony liny w tym samym pokoju albo false)
Char.Combat.Stylelogowanie (z opóźnieniem) i każde walcz <styl>style i jego skutki
Char.Creationkolejny krok kreatora postacistep, prompt, options[] — {value, label}
Char.Currencylogowanie i każda zmiana stanu sakiewkimithril, gold, silver, copper, total
Char.Deliveryprzyjęcie, dostarczenie, zwrot i przekazanie paczki kurierskiej; ponownie po logowaniu, reconnekcie, transferze shardów i reloadactive; przy aktywnym zleceniu recipient_npc, recipient_name, recipient_desc, recipient_room (STRINGOWE id pokoju), recipient_area, recipient_where, reward, tier, hops, sender_*; przy rozliczeniu dodatkowo delivered i paid, przy zwrocie returned
Char.Delivery.Offerzapytaj <npc> o pracę i odmów — oferta OCZEKUJĄCA, osobno od zlecenia, bo jest efemeryczna i ginie przy reloadpending; przy oczekującej ofercie te same pola adresata i nagrody co w Char.Delivery
Char.Emotestylko klient z Core.Supports „Gfx”: raz po włączeniu trybuemotes[] (cmd — słowo komendy, label — nazwa po polsku, target — none/optional/required)
Char.Fishingkażda zmiana fazy łowienia (zarzucenie, branie, poderwanie, takt holu) i KAŻDE zakończenie, zdjęcie przynęty — wynik (landed/lost), a po nim zawsze zamykające idle (także po zwiń wędkę, stój, ruchu, wejściu w walkę i rozłączeniu)state (idle/cast/bite/tug/landed/lost), bait, source (land/boat), environment, depth; cancel_action w trakcie, expected_action i window przy braniu, timeout przy zarzuceniu, score (player, fish, target) przy holu, fish (id, name, weight_kg, value, rarity) przy landed, reason przy lost i przerwanym idle; hook_bait — przynęta na haku albo false, w każdym stanie
Char.Infopo zalogowaniupodstawowe dane postaci
Char.Items.Listlogowanie i każda zmiana plecaka lub wyposażenialista przedmiotów wraz z założonymi
Char.Namepo zalogowaniu i po transferze między shardaminame, fullname
Char.Needszmiana sytości i pragnienia, zmiana STOPNIA upojenia, Char.Request o needshunger, thirst (0–100), drunk — nazwa stopnia upojenia jak w stan albo pusty napis
Char.PvPlogowanie i każde rozliczone starcie z graczemrating, rank, peak, wins, losses, infamy (zła sława, osobna oś od ratingu), position (0 = poza rankingiem), shield (tarcza nowicjusza)
Char.Questszmiana stanu zadańaktywne zadania i ich etapy: name, journal_text, hint_text, storyline, objectives[] (label, progress, target, done), seek — dokąd iść (npc, name, where, room); na wierzchu next — następny trop osi albo {none: true}, gdy gracz jej nie prowadzi
Char.Reputationlogowanie i zmiana reputacjizones — mapa strefa → {name, level, xp, tier, …}
Char.Shardslogowanie, reconnect i każda zmiana stanu odprysków spojeniaokruch, odprysk, rdzen, total — TRZY OSOBNE liczniki, nie nominały jednej liczby jak w Char.Currency: tiery odprysków są rozróżnialne, bo sink może zażądać konkretnego
Char.Skillspodgląd umiejętnościpostęp każdej umiejętności
Char.Skills.Updatekażde zdobyte doświadczenietylko umiejętności, które się zmieniły (dołóż do pełnej listy z Char.Skills)
Char.Slowstart i koniec spowolnienia ruchuefektywne opóźnienie i jego źródła
Char.Statelogowanie, zmiana HP, wejście i wyjście z walkihp/stamina/mana (PROCENTY 0–100), state, fatigue, encumbrance — aktualizacje częściowe z trzech nadawców, klient scala pola
Char.Statspodgląd cechsześć cech i ich doświadczenie
Char.Titleslogowanie, zmiana tytułu lub pochodzeniaearned[], active, active_name, origin
Choice.Closetylko klient z Core.Supports „Gfx”: decyzja zapadła dowolną drogą (przycisk, wpisana komenda), wygasła albo przestała być aktualnaid
Choice.Opentylko klient z Core.Supports „Gfx”: gdy gra czeka na odpowiedź gracza — zlecenie kurierskie, wyzwanie, podana lina, zaproszenie do drużyny, wymarsz i zbiórka przed lochem, zatrzymanie przez straż, wybór wzmocnienia w lochu; powtarzany przy ponownym włączeniu trybuid (rodzaj decyzji; nowe Open z tym samym id zastępuje stare), title, text (ta sama treść co w logu, bez ANSI), options[] (label, cmd — zwykła komenda; bez cmd przycisk tylko zamyka okno, tone — ok/no), expires_in (sekundy, opcjonalne)
Client.GUIwejście do gry (player.connect)version, url — Mudlet porównuje wersję z zapamiętaną i sam pobiera oraz instaluje paczkę kliencką; inni klienci ignorują
Climb.Routestylko klient z Core.Supports „Gfx”: wejście pod ścianę z drogami i drogiroom, routes[] (id, name, height, difficulty, difficulty_label, known, bonus, cmd — wspinaj się <nazwa>)
Combat.Deathtylko klient z Core.Supports „Gfx”: postać w pokoju pada (śmierć albo utrata przytomności), raznum, by
Combat.Hittylko klient z Core.Supports „Gfx”: każdy zamach, zdolność, czar, tyknięcie trucizny i leczenie w twoim pokojua, t (numery obiektów albo false), out (hit/dodge/parry/block/miss/heal), dmg, crit, part, off; przy zdolnościach i czarach src (ability/spell/dot), kind (rodzaj: fire, ice, heal, bow…) i name
Combat.Revivetylko klient z Core.Supports „Gfx”: postać w twoim pokoju odzyskuje przytomność (po śmierci, w lochu, po ogłuszeniu) — wstajenum
Comm.Channel.Emoteemotkichannel, talker, text
Comm.Channel.Textpowiedz i pokrewnechannel, talker, text
Core.LoginErrornieudane Core.Loginmessage — tekst błędu
Craft.Donetylko klient z Core.Supports „Gfx”: koniec kanału rzemieślniczego — tym samym widzom co Craft.Progressnum, id, reason (done/missing/cancel)
Craft.Progresstylko klient z Core.Supports „Gfx”: start i każdy tick kanału rzemieślniczego (wytop, kucie, szycie, warzenie, gotowanie, stolarstwo, kamieniarstwo, szkutnictwo, wozownia, trakt i osady, zioła, włamanie, wraki) — wykonawcy i każdemu, kto go widzi w pokojunum (wykonawca), id (deskryptor), label (nazwa czynności), secs, step, total
Craft.Recipestylko klient z Core.Supports „Gfx”: wejście na stanowisko rzemiosła, zmiana plecaka na nim i komenda rzemiosła bez argumentu — jeden pakiet na rodzinęcraft, room, title, station (nazwa dla człowieka), station_id (rodzaj stanowiska w scenie: furnace, slipway… — także przy pustych rows), skill {id, level}, axes[] (opcjonalnie: key, label, options[]), rows[] (key, label, cmd, out, req, sel, inputs[] {def_id, name, n, have}, ok, why)
Dungeon.Enterwejście do instancjidane wyprawy
Dungeon.Exitopuszczenie instancjipuste
Dungeon.Levelzmiana poziomu lochunumer poziomu
Dungeon.Roomzmiana pokoju w instancjipozycja na mapie lochu, tile (kafel trybu graficznego)
Haggle.Statetylko klient z Core.Supports „Gfx”: otwarcie targu (targuj się), każda wymiana i każdy koniec targuactive; przy trwającym: mode (sell/buy), stake, npc, adv (−100…100), pct, max_pct, left (wymiany do końca cierpliwości kupca), lock_s (zamek kadencji), respond_s (czas na odpowiedź)
Herb.Dryertylko klient z Core.Supports „Gfx”: wejście do suszarni, suszarnia, położenie i zdjęcie ziołaroom, cap, put (wzorzec susz {n} {uid}), slots[] (uid, herb_id, name, def_id, done, remaining_s, dry_s, cmd — zabierz z suszarki <uid>); brak slots znaczy pustą suszarnię
Housing.Leasetylko klient z Core.Supports „Gfx”: czynsz, przejrzyj w kancelarii i po wynajęciu, dopłacie albo wypowiedzeniulease (false albo {address, district, state — wynajeta/karencja/utracona, paid_s, grace_s, rent}), office, max_weeks, free[] (address, district, rent) — tylko przy kancelarii
Hunt.Carcasstylko klient z Core.Supports „Gfx”: obejrzyj ciała zwierzyny i każde rozstrzygnięcie cięciauid, parts[] (part, label, state — open/done/ruined, cmd przy otwartych: wytnij <część> z <uid>), gone (true: ciała już nie ma, okno się zamyka)
Hunt.Maptylko klient z Core.Supports „Gfx”: wejście do lasu myśliwskiego, każdy krok w nim, odzyskanie orientacji; {active: false} raz przy wyjściuactive, band (1–7), band_name, tile, you — pozycja, w którą gracz WIERZY (x, y, heading, sure)
Hunt.Sighttylko klient z Core.Supports „Gfx”: rozstrzygnięcie wypatrujstate (seen/hidden/nothing), seen[] (dir, dir_label, label, bird, aimable, cmd; size/species jak w Hunt.Tracks)
Hunt.Trackstylko klient z Core.Supports „Gfx”: każdy krok w lesie, tropy i każda zmiana tropu (znalezienie, porzucenie, utrata)active, tracks[] (slot, label, blood 0–2, fresh 0–4, fresh_label, dir, dir_label, on_trail; size od środkowego szczebla rozpoznania, species tylko rozpoznany) — brak pola tracks znaczy „żadnych”
Info.Texttylko klient z Core.Supports „Gfx”: wynik komendy-odczytu (kto, ranking, listy gończe, zioła, ryby…) — ten sam tekst, który idzie do dziennikaid (nazwa komendy), title, text (ANSI, wiersze \r\n), links[] (label, cmd albo walk), more (tekst ucięty do 16 KB)
Item.Looktylko klient z Core.Supports „Gfx”: obejrzyj pojedynczego przedmiotu (w plecaku, na sobie albo na ziemi)uid, def_id, text — ten sam opis, który poszedł do logu, z kodami kolorów; okno ekwipunku pokazuje go pod listą
Item.Verbstylko klient z Core.Supports „Gfx”: każda zmiana plecaka, wejście do pokoju (stanowisko), zapalenie i zgaszenie; tylko gdy lista się zmieniłaverbs: uid sztuki → [{verb, label, icon, cmd}], wyłącznie sztuki z czasownikiem (czytaj, skosztuj, analizuj, rozpoznaj, zatruj, zgaś, napełnij); bramki z rejestru item_verb właścicieli komend
Line.Typetuż PRZED każdą linią walki (ciosy, zdolności, śmierć celu) — znacznik, nie tekst; linia przychodzi zwykłym tekstemtype (combat.avatar — ja biję albo mnie biją, combat.team — walczy ktoś z mojej drużyny, combat.others — cudza walka w pokoju), lines — ile kolejnych linii dotyczy (zwykle 1)
Mining.Collapsezawał — rozsyłane do wszystkich graczy na shardziemine_id, współrzędne
Mining.Leavewyjście z kopalnipuste
Mining.Mapwejście do pokoju kopalnisiatka tuneli wokół gracza: najwyżej 600 pokoi najbliższych (najpierw bieżący poziom), more — ile się nie zmieściło; każdy pokój z tile (kafel trybu graficznego)
Mining.OreFoundznalezienie rudyrodzaj i ilość
Mining.Progresskażde uderzenie kilofempostęp rozbijania ściany
Mining.Stopprzerwanie kopaniapuste
Mining.Supportwejście do komory kopalni, wzmocnij/napraw ściany, każda zmiana lampy (powieś lampę, uzupełnij, zdemontuj, wypalenie) — wszystkim w komorzewytrzymałość i wzmocnienie ścian nośnych; lamp (def_id, name, burn_s, max_s, magic, lit) albo false
Mining.WallBrokenprzebicie ścianykierunek i nowy pokój
NPC.Dialoguerozmowa z NPCtematy i odpowiedzi
NPC.Replytylko klient z Core.Supports „Gfx”: każda kwestia istoty skierowana do ciebie (odpowiedź na zapytaj, oferta, odmowa)num, name, text, links[] (word — słowo w odpowiedzi, topic — temat TEJ istoty, o który można zapytać), known[] — tematy uniwersalne i te, o które już pytałeś; pełnej listy tematów nie ma z premedytacją; przy kwestii z kilku zdań parts[] (zdania jak w dzienniku) i pace (sekundy między nimi)
NPC.Topicstylko klient z Core.Supports „Gfx”: komenda tematy <kogo> (menu „Zapytaj o…”)num (numer obiektu istoty), name, topics[] (key — do zapytaj <kogo> o <key>, label); pełna lista bez aliasów i bez tematów zamkniętych reputacją, plus zadanie, praca i nagroda, gdy coś za nimi stoi
Objects.Dataspójrz, zmiana HP, start i koniec walki, zmiana zasłony, każda zmiana celu, ruchopisy obiektów wraz z polem uid — patrz ostrzeżenie o identyfikatorach niżej; invited_me przy graczu, który zaprosił cię do drużyny; aim (część ciała z celuj albo false) tylko we własnym wpisie; hidden (ukryty — widz dostaje taki wpis tylko o sobie i o tych, których wykrył)
Objects.Looktylko klient z Core.Supports „Gfx” (tryb graficzny): przy Objects.Data i przy zmianie ekwipunku, wyłącznie wpisy, które się zmieniłynumer obiektu → wygląd: kind (body/creature), body, class, skin, hair_style, hair_color, gear (slot → id przedmiotu, tylko widoczne), lit, npc (shop, talk, train, delivery, services — laundry/tailor); albo creature
Objects.Numsspójrz i wejście do pokojutablica identyfikatorów obiektów w pokoju
Road.Leavezejście z Traktu Osadniczegoidentyfikator drogi
Road.Mapwejście na Trakt Osadniczy albo do osady gracza i każda zmiana etapu budowycały trakt i osady graczy: obszar mapy, kratki z pozycją, etapem i połączeniem (skąd i w którą stronę), kratki osad z nazwą osady, rodzajem (wjazd, ulica, plac, budynek) i przeznaczeniem urządzonego budynku; każda kratka z tile (kafel trybu graficznego), kratka osady z el (element: kuznia, wjazd…)
Room.Actionstylko klient z Core.Supports „Gfx”: wejście do pokoju, zmiana ekwipunku albo plecaka, zmiana zadań, usiądź/wstań, zmiana stanu drzwi i wrót — wyłącznie gdy lista się zmieniłaroom, actions[] (verb, label, icon, arg: none/item/text/dir/workshop; przy workshop także craft — otwiera okno Warsztat na tej zakładce, bez komendy) — czynności miejsca: przycisk Warsztat zamiast czasowników rzemiosła stanowiska, komendy lokalne w zasięgu, akcje pokoju, na które czeka zadanie, woda i siedzenia; w ciemności pusta; looks[] (key, label) — detale pokoju dla obejrzyj <key>, bez detali akcji zadania, którego gracz nie prowadzi; locks[] (drzwi i wrota pokoju: id, kind door/gate, dir, label, state, cmds z adresem lock:<id>) — bez stanu zamka skrzyń
Room.Infospójrz i każde przejścienum, name (w ciemności „Ciemne miejsce”), area, environment, exits, tile (kafel trybu graficznego, grunt[/obiekt]; wnętrze stoi na gruncie okolicy), floor (podłoga sceny wnętrza, np. interior), building (budynek z kilku pokoi, w którym stoisz), mark (rodzaj punktu), dark
Room.Itemstylko klient z Core.Supports „Gfx”: przy Objects.Data i przy każdej zmianie przedmiotów na ziemi, wyłącznie gdy lista się zmieniłaroom, items[] (uid, def_id, name z liczbą, n; ciało także corpse: true i look — wygląd z chwili śmierci), more; w ciemności dark: true bez listy; lock: true przy skrzyni z zamkiem (bez stanu)
Room.Markstylko klient z Core.Supports „Gfx”: przy Objects.Data i przy każdej zmianie stanu zadań, wyłącznie gdy mapa się zmieniłaroom, marks — numer obiektu → ? (istota ma zadanie do wzięcia) albo ! (bieżący etap prowadzi do niej); te same znaczniki co [?]/[!] w opisie lokacji, w ciemności pusto
Room.Movetylko klient z Core.Supports „Gfx”: każdy ruch z kierunkiem kogoś, kogo widzisz w swoim pokojunum (numer obiektu), op (leave/arrive), dir — kierunek ruchu
Room.Nearbytylko klient z Core.Supports „Gfx”: wejście do lokacji, okolica, ruch kogokolwiek w promieniu trzech lokacji albo członka drużyny, i przemiatacz co 5 s (wyłącznie przy zmianie)room; team[] (num, name, room, area, here, leader) — członkowie drużyny bez względu na odległość; nearby[] (room, dist 1–3, dir — pierwszy krok, n) — obcy BEZ imienia, tylko otwartymi wyjściami; ukryci, niewidzialni i stojący po ciemku bez światła pominięci
Room.Playersspójrz i każde przejścieplayers[]
Room.Propstylko klient z Core.Supports „Gfx”: przy Objects.Data, przy każdej zmianie wozu albo zwierzęcia w pokoju i przy rozpaleniu i wygaśnięciu ogniskaroom, props[] (id — adres veh:<id> przyjmowany przez komendy wozów albo campfire, kind — wagon/animal/campfire, def_id, label, mine, harnessed; tylko przy własnym: state, reins, riding, capacity, cargo (kg), u zwierzęcia can_pull, can_ride, tack {saddle, bridle, juki}, u wozu self_pushed)
Scene.Bubbletylko klient z Core.Supports „Gfx”: powiedz w pokoju, kwestie istot i emocjenum (mówiący albo false, gdy go nie widzisz), kind (say/npc/emote), text — emocja w gwiazdkach i w twojej osobie („uśmiechasz się” albo „uśmiecha się”)
Scene.Worktylko klient z Core.Supports „Gfx”: start i koniec pracy (kanał rzemieślniczy, ścinanie, rąbanie, karczowanie, kopanie) — wykonawcy i każdemu w pokoju, kto go widzi; trwające prace przy wejściu do pokojunum, pose (chop/dig/hammer/saw/stir/cut/chisel/fish/stoop/climb, false = koniec), target (`{kind: tree
Sea.Mapkarta morska na pokładzie łodzi: przy wejściu, przy przekroczeniu granicy kilometra, przy zmianie widoczności i przy zejściu na brzegaboard, rows[] (. woda, # ląd, @ przystań, ? poza zasięgiem wzroku, poza mapą; stałe płótno 17×17), origin_gx/gy, vis_km, compass, wind, you (gx/gy/col/row/heading/sure), docks[]
Service.Listtylko klient z Core.Supports „Gfx”: menu usługi istoty po gołym czasowniku (upierz u praczki, lataj u krawca) — te same wiersze, które gołe słowo wypisuje w tekścieid, kind (laundry, tailor), title, npc (numer istoty albo false), room, rows[] (key — uid albo all, label, detail, price w miedziakach, ok, why, cmd), more (wierszy ponad 60)
Ship.Projecttylko klient z Core.Supports „Gfx”: wejście do szkutni, przegląd/budowa i każda zmiana projektu (stępka, praca, zniesienie materiału, porzucenie, zwodowanie)active; przy trwającym: hull, label, wood, wood_label, stage, stages, stage_name, hint, cmd (czasownik etapu albo zwoduj), done, need, ready, fail_p, open[]/per[] (def_id, name, n, have, to_finish), ok, why
Shop.Listtylko klient z Core.Supports „Gfx”: przejrzyj u kupca oraz po udanym kup/zamów i po sprzedaj przy tym samym kupcunpc, title, tavern, filter, rows[] (idx — numer dla kup/pokaż, item_id, name, price w miedziakach, stock, out, consumable), more; te same wiersze co tekst przejrzyj
Shop.Looktylko klient z Core.Supports „Gfx”: pokaż <numer> u kupcaitem_id, text — ten sam opis towaru co w logu, z kodami kolorów
Shop.SellQuotestylko klient z Core.Supports „Gfx”: z każdym Shop.List i przy zmianie plecaka, gdy okno Handel jest otwarte przy tym kupcunpc, prices — uid → cena jednej sztuki, refused — uid → zdanie odmowy, more; ta sama droga co sprzedaj
Stash.Viewtylko klient z Core.Supports „Gfx”: przejrzyj przy schowku (depozyt, bakista, skrytka i skrzynia osady, ładunek wozu) i przy każdej zmianie plecaka, póki okno dotyczy tego pokojuid, kind (deposit/bakista/locker/cargo), title, room, unit (slots/kg), cap, used, rows[] (uid, def_id, name, n), more, take/put — wzorce komend z {n} i {uid} (N <uid> = N sztuk takich jak ta)
Tutorial.Stepkażdy krok samouczka; w krokach ruchu także po każdym pokojustep (liczba albo "complete"), hint, opcjonalnie popup; dla trybu graficznego hint_gfx (zdanie bez komendy), action (label, cmd — komenda, którą przepuszcza blokada kroku) i dir w krokach ruchu
Wagon.Projecttylko klient z Core.Supports „Gfx”: wejście do wozowni, zmiana plecaka w niej i każda zmiana projektu wozuactive; przy trwającym: type, label, wood, wood_label, room, step, steps, cmd (złóż wóz), inputs[] (def_id, name, n, have, any — dowolny metal/skóra), ok, why
Wood.Standtylko klient z Core.Supports „Gfx”: wejście do lasu, drzewa, zmiana plecaka (siekiera) i każda zmiana rejestru ścinki pokoju (ścięcie, rąbanie, nacięcie)room, axe (false = siekiery nie ma w rękach — listy puste, pasek znika), trees[] (index, species, name, phase, diam, req, notch, notch_max, ok, why), logs[] (index, species, name, diam, chops, ok, why), stumps[] (index, species, name, diam, grub, regrow_s, notch), far — drzewa ponad horyzont, tylko liczba
World.Timezmiana pory dniaczas i faza doby
World.Weatherzmiana pogody w regioniezjawisko i jego natężenie
core.pingodpowiedź na Core.Pingpuste

Serwer reaguje tylko na te pakiety. Wszystko inne jest ignorowane.

PakietKiedy wysłaćŁadunek
Account.CreateCharacterklient → serwer: start kreatora postacipuste
Account.DeleteCharacterklient → serwer: usunięcie postacicharacter_id
Account.Impersonateklient → serwer: wejście do gry cudzą postacią (tylko konta administracyjne; serwer odmawia pozostałym)name — imię postaci
Account.Loginklient → serwer: logowanie na e-mailemail, password
Account.Registerklient → serwer: rejestracja na e-mailemail, password
Account.ResendCodeklient → serwer: wyślij kod jeszcze razpuste
Account.SelectCharacterklient → serwer: wybór postacicharacter_id
Account.Verifyklient → serwer: kod weryfikacyjny; także serwer → klient jako prośba o kodod klienta code; od serwera email, message
Char.Creationkolejny krok kreatora postacistep, prompt, options[] — {value, label}
Char.Requestklient → serwer, tylko w trybie graficznym: okno prosi o świeże dane postaciwhat[] — stats, skills, titles, reputation, pvp, shards, needs, currency, buffs, quests, abilities; serwer odsyła istniejące pakiety, najwyżej raz na 2 s na rodzaj, bez echa w logu
Client.Usageklient → serwer, tylko w trybie graficznym, co 5 min i przy schowaniu karty: liczniki komend wpisanych i klikniętychv, period_s, counts — czasownik → {typed, ui, auto}; serwer zapisuje sam czasownik w nazwie kanonicznej, bez treści i bez autora
Core.Loginklient → serwer: logowanie po nazwie postaciname, password
Core.Pingklient → serwer, dowolniepuste; serwer odsyła core.ping

Klient wybiera jedną i się jej trzyma.

Po nazwie postaci — Core.Login z name i password. Błąd wraca jako Core.LoginError. Gdy konto ma więcej postaci, serwer odsyła Account.Characters.

Po koncie e-mail — Account.Register → Account.Verify (serwer prosi o kod) → Account.Verify z code → Account.Verified. Potem Account.Login, a dalej Account.SelectCharacter albo Account.CreateCharacter. Kreator prowadzi Char.Creation: serwer podaje step, prompt i listę options, klient odsyła wybraną wartość.

To jest miejsce, w którym najłatwiej napisać klienta, który wygląda dobrze i nie działa.

Objects.Data niesie dla każdego obiektu pole uid — i tylko ta wartość jest rozumiana przez serwer w komendach typu weź czy zabij. Wygląda jak ob_miecz_42 dla przedmiotów i NPC.

Jeżeli twój klient trzyma własną numerację obiektów, musisz podmienić ją na uid tuż przed wysłaniem komendy, a nie wcześniej — inaczej gracz zobaczy w oknie sensowne „zaatakuj rozbójnika”, a serwer odpowie „Nie widzisz tu takiej osoby”.

Char.State bywa wysyłany z częścią pól. Klient powinien scalać przychodzące dane ze swoim stanem, a nie podmieniać go w całości — inaczej brakujące pole wyzeruje ci pasek życia.