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.
Jak się połączyć
Dział zatytułowany „Jak się połączyć”| Transport | Adres | Jak leci GMCP |
|---|---|---|
| telnet | port 9600 | negocjacja IAC (opcja 201), ładunek JSON |
| WebSocket | port 9601, ścieżka /ws | ramki 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.
Serwer → klient (100)
Dział zatytułowany „Serwer → klient (100)”| Pakiet | Kiedy | Co niesie |
|---|---|---|
Ability.Cooldown | użycie zdolności | stan odnowienia |
Ability.List | podgląd zdolności; ponownie po reconnect i transferze shardów | poznane zdolności z polem slot (1–5 albo 0) i passive (tylko bierne) |
Ability.Slots | logowanie i każda zmiana slotu | slots — mapa "1"…"5" (wpis z passive dla biernej), oraz max_slots |
Account.Characters | po zalogowaniu, gdy konto ma postacie | characters[] — {id, name, race, gender, …}, max, admin |
Account.LoginError | nieudane logowanie lub weryfikacja | message |
Account.RegisterError | nieudana rejestracja | message |
Account.Verified | konto potwierdzone | puste |
Account.Verify | klient → serwer: kod weryfikacyjny; także serwer → klient jako prośba o kod | od klienta code; od serwera email, message |
Boat.State | tylko 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.Cell | tylko 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 — {} raz | room, 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.Buffs | tylko klient z Core.Supports „Gfx”: nałożenie i zdjęcie efektu, Char.Request o buffs | buffs[] (name, kind — buff/perk/dungeon/food, remaining_s — -1 dla trwałych, detail); te same wiersze co efekty |
Char.Climbing | każ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.Style | logowanie (z opóźnieniem) i każde walcz <styl> | style i jego skutki |
Char.Creation | kolejny krok kreatora postaci | step, prompt, options[] — {value, label} |
Char.Currency | logowanie i każda zmiana stanu sakiewki | mithril, gold, silver, copper, total |
Char.Delivery | przyjęcie, dostarczenie, zwrot i przekazanie paczki kurierskiej; ponownie po logowaniu, reconnekcie, transferze shardów i reload | active; 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.Offer | zapytaj <npc> o pracę i odmów — oferta OCZEKUJĄCA, osobno od zlecenia, bo jest efemeryczna i ginie przy reload | pending; przy oczekującej ofercie te same pola adresata i nagrody co w Char.Delivery |
Char.Emotes | tylko klient z Core.Supports „Gfx”: raz po włączeniu trybu | emotes[] (cmd — słowo komendy, label — nazwa po polsku, target — none/optional/required) |
Char.Fishing | każ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.Info | po zalogowaniu | podstawowe dane postaci |
Char.Items.List | logowanie i każda zmiana plecaka lub wyposażenia | lista przedmiotów wraz z założonymi |
Char.Name | po zalogowaniu i po transferze między shardami | name, fullname |
Char.Needs | zmiana sytości i pragnienia, zmiana STOPNIA upojenia, Char.Request o needs | hunger, thirst (0–100), drunk — nazwa stopnia upojenia jak w stan albo pusty napis |
Char.PvP | logowanie i każde rozliczone starcie z graczem | rating, rank, peak, wins, losses, infamy (zła sława, osobna oś od ratingu), position (0 = poza rankingiem), shield (tarcza nowicjusza) |
Char.Quests | zmiana 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.Reputation | logowanie i zmiana reputacji | zones — mapa strefa → {name, level, xp, tier, …} |
Char.Shards | logowanie, reconnect i każda zmiana stanu odprysków spojenia | okruch, 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.Skills | podgląd umiejętności | postęp każdej umiejętności |
Char.Skills.Update | każde zdobyte doświadczenie | tylko umiejętności, które się zmieniły (dołóż do pełnej listy z Char.Skills) |
Char.Slow | start i koniec spowolnienia ruchu | efektywne opóźnienie i jego źródła |
Char.State | logowanie, zmiana HP, wejście i wyjście z walki | hp/stamina/mana (PROCENTY 0–100), state, fatigue, encumbrance — aktualizacje częściowe z trzech nadawców, klient scala pola |
Char.Stats | podgląd cech | sześć cech i ich doświadczenie |
Char.Titles | logowanie, zmiana tytułu lub pochodzenia | earned[], active, active_name, origin |
Choice.Close | tylko klient z Core.Supports „Gfx”: decyzja zapadła dowolną drogą (przycisk, wpisana komenda), wygasła albo przestała być aktualna | id |
Choice.Open | tylko 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 trybu | id (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.GUI | wejś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.Routes | tylko klient z Core.Supports „Gfx”: wejście pod ścianę z drogami i drogi | room, routes[] (id, name, height, difficulty, difficulty_label, known, bonus, cmd — wspinaj się <nazwa>) |
Combat.Death | tylko klient z Core.Supports „Gfx”: postać w pokoju pada (śmierć albo utrata przytomności), raz | num, by |
Combat.Hit | tylko klient z Core.Supports „Gfx”: każdy zamach, zdolność, czar, tyknięcie trucizny i leczenie w twoim pokoju | a, 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.Revive | tylko klient z Core.Supports „Gfx”: postać w twoim pokoju odzyskuje przytomność (po śmierci, w lochu, po ogłuszeniu) — wstaje | num |
Comm.Channel.Emote | emotki | channel, talker, text |
Comm.Channel.Text | powiedz i pokrewne | channel, talker, text |
Core.LoginError | nieudane Core.Login | message — tekst błędu |
Craft.Done | tylko klient z Core.Supports „Gfx”: koniec kanału rzemieślniczego — tym samym widzom co Craft.Progress | num, id, reason (done/missing/cancel) |
Craft.Progress | tylko 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 pokoju | num (wykonawca), id (deskryptor), label (nazwa czynności), secs, step, total |
Craft.Recipes | tylko 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.Enter | wejście do instancji | dane wyprawy |
Dungeon.Exit | opuszczenie instancji | puste |
Dungeon.Level | zmiana poziomu lochu | numer poziomu |
Dungeon.Room | zmiana pokoju w instancji | pozycja na mapie lochu, tile (kafel trybu graficznego) |
Haggle.State | tylko klient z Core.Supports „Gfx”: otwarcie targu (targuj się), każda wymiana i każdy koniec targu | active; 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.Dryer | tylko klient z Core.Supports „Gfx”: wejście do suszarni, suszarnia, położenie i zdjęcie zioła | room, 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.Lease | tylko klient z Core.Supports „Gfx”: czynsz, przejrzyj w kancelarii i po wynajęciu, dopłacie albo wypowiedzeniu | lease (false albo {address, district, state — wynajeta/karencja/utracona, paid_s, grace_s, rent}), office, max_weeks, free[] (address, district, rent) — tylko przy kancelarii |
Hunt.Carcass | tylko klient z Core.Supports „Gfx”: obejrzyj ciała zwierzyny i każde rozstrzygnięcie cięcia | uid, 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.Map | tylko klient z Core.Supports „Gfx”: wejście do lasu myśliwskiego, każdy krok w nim, odzyskanie orientacji; {active: false} raz przy wyjściu | active, band (1–7), band_name, tile, you — pozycja, w którą gracz WIERZY (x, y, heading, sure) |
Hunt.Sight | tylko klient z Core.Supports „Gfx”: rozstrzygnięcie wypatruj | state (seen/hidden/nothing), seen[] (dir, dir_label, label, bird, aimable, cmd; size/species jak w Hunt.Tracks) |
Hunt.Tracks | tylko 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.Text | tylko klient z Core.Supports „Gfx”: wynik komendy-odczytu (kto, ranking, listy gończe, zioła, ryby…) — ten sam tekst, który idzie do dziennika | id (nazwa komendy), title, text (ANSI, wiersze \r\n), links[] (label, cmd albo walk), more (tekst ucięty do 16 KB) |
Item.Look | tylko 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.Verbs | tylko klient z Core.Supports „Gfx”: każda zmiana plecaka, wejście do pokoju (stanowisko), zapalenie i zgaszenie; tylko gdy lista się zmieniła | verbs: 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.Type | tuż PRZED każdą linią walki (ciosy, zdolności, śmierć celu) — znacznik, nie tekst; linia przychodzi zwykłym tekstem | type (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.Collapse | zawał — rozsyłane do wszystkich graczy na shardzie | mine_id, współrzędne |
Mining.Leave | wyjście z kopalni | puste |
Mining.Map | wejście do pokoju kopalni | siatka 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.OreFound | znalezienie rudy | rodzaj i ilość |
Mining.Progress | każde uderzenie kilofem | postęp rozbijania ściany |
Mining.Stop | przerwanie kopania | puste |
Mining.Support | wejście do komory kopalni, wzmocnij/napraw ściany, każda zmiana lampy (powieś lampę, uzupełnij, zdemontuj, wypalenie) — wszystkim w komorze | wytrzymałość i wzmocnienie ścian nośnych; lamp (def_id, name, burn_s, max_s, magic, lit) albo false |
Mining.WallBroken | przebicie ściany | kierunek i nowy pokój |
NPC.Dialogue | rozmowa z NPC | tematy i odpowiedzi |
NPC.Reply | tylko 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.Topics | tylko 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.Data | spójrz, zmiana HP, start i koniec walki, zmiana zasłony, każda zmiana celu, ruch | opisy 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.Look | tylko klient z Core.Supports „Gfx” (tryb graficzny): przy Objects.Data i przy zmianie ekwipunku, wyłącznie wpisy, które się zmieniły | numer 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.Nums | spójrz i wejście do pokoju | tablica identyfikatorów obiektów w pokoju |
Road.Leave | zejście z Traktu Osadniczego | identyfikator drogi |
Road.Map | wejście na Trakt Osadniczy albo do osady gracza i każda zmiana etapu budowy | cał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.Actions | tylko 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ła | room, 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.Info | spójrz i każde przejście | num, 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.Items | tylko klient z Core.Supports „Gfx”: przy Objects.Data i przy każdej zmianie przedmiotów na ziemi, wyłącznie gdy lista się zmieniła | room, 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.Marks | tylko klient z Core.Supports „Gfx”: przy Objects.Data i przy każdej zmianie stanu zadań, wyłącznie gdy mapa się zmieniła | room, 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.Move | tylko klient z Core.Supports „Gfx”: każdy ruch z kierunkiem kogoś, kogo widzisz w swoim pokoju | num (numer obiektu), op (leave/arrive), dir — kierunek ruchu |
Room.Nearby | tylko 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.Players | spójrz i każde przejście | players[] |
Room.Props | tylko 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 ogniska | room, 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.Bubble | tylko klient z Core.Supports „Gfx”: powiedz w pokoju, kwestie istot i emocje | num (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.Work | tylko 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 pokoju | num, pose (chop/dig/hammer/saw/stir/cut/chisel/fish/stoop/climb, false = koniec), target (`{kind: tree |
Sea.Map | karta morska na pokładzie łodzi: przy wejściu, przy przekroczeniu granicy kilometra, przy zmianie widoczności i przy zejściu na brzeg | aboard, 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.List | tylko 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ście | id, 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.Project | tylko 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.List | tylko klient z Core.Supports „Gfx”: przejrzyj u kupca oraz po udanym kup/zamów i po sprzedaj przy tym samym kupcu | npc, 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.Look | tylko klient z Core.Supports „Gfx”: pokaż <numer> u kupca | item_id, text — ten sam opis towaru co w logu, z kodami kolorów |
Shop.SellQuotes | tylko klient z Core.Supports „Gfx”: z każdym Shop.List i przy zmianie plecaka, gdy okno Handel jest otwarte przy tym kupcu | npc, prices — uid → cena jednej sztuki, refused — uid → zdanie odmowy, more; ta sama droga co sprzedaj |
Stash.View | tylko 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 pokoju | id, 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.Step | każdy krok samouczka; w krokach ruchu także po każdym pokoju | step (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.Project | tylko klient z Core.Supports „Gfx”: wejście do wozowni, zmiana plecaka w niej i każda zmiana projektu wozu | active; 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.Stand | tylko 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.Time | zmiana pory dnia | czas i faza doby |
World.Weather | zmiana pogody w regionie | zjawisko i jego natężenie |
core.ping | odpowiedź na Core.Ping | puste |
Klient → serwer (13)
Dział zatytułowany „Klient → serwer (13)”Serwer reaguje tylko na te pakiety. Wszystko inne jest ignorowane.
| Pakiet | Kiedy wysłać | Ładunek |
|---|---|---|
Account.CreateCharacter | klient → serwer: start kreatora postaci | puste |
Account.DeleteCharacter | klient → serwer: usunięcie postaci | character_id |
Account.Impersonate | klient → serwer: wejście do gry cudzą postacią (tylko konta administracyjne; serwer odmawia pozostałym) | name — imię postaci |
Account.Login | klient → serwer: logowanie na e-mail | email, password |
Account.Register | klient → serwer: rejestracja na e-mail | email, password |
Account.ResendCode | klient → serwer: wyślij kod jeszcze raz | puste |
Account.SelectCharacter | klient → serwer: wybór postaci | character_id |
Account.Verify | klient → serwer: kod weryfikacyjny; także serwer → klient jako prośba o kod | od klienta code; od serwera email, message |
Char.Creation | kolejny krok kreatora postaci | step, prompt, options[] — {value, label} |
Char.Request | klient → serwer, tylko w trybie graficznym: okno prosi o świeże dane postaci | what[] — 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.Usage | klient → serwer, tylko w trybie graficznym, co 5 min i przy schowaniu karty: liczniki komend wpisanych i klikniętych | v, period_s, counts — czasownik → {typed, ui, auto}; serwer zapisuje sam czasownik w nazwie kanonicznej, bez treści i bez autora |
Core.Login | klient → serwer: logowanie po nazwie postaci | name, password |
Core.Ping | klient → serwer, dowolnie | puste; serwer odsyła core.ping |
Dwie ścieżki logowania
Dział zatytułowany „Dwie ścieżki logowania”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ść.
Uwaga o identyfikatorach obiektów
Dział zatytułowany „Uwaga o identyfikatorach obiektów”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”.
Aktualizacje częściowe
Dział zatytułowany „Aktualizacje częściowe”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.