Specyfikacja GMCP na Arkadii
: 27 wrz 2015 23:51
GMCP jest protokolem sluzacym do dwustronnego przesylania danych pomiedzy mudem i klientem, tak by byly one niewidoczne dla gracza.
Oryginalna specyfikacja zostala stworzona przez Zuggsoft i Iron Realms, mozna o niej (i o wszelkich mniej istotnych szczegolach technicznych) poczytac sobie tu:
http://www.gammon.com.au/gmcp
http://www.achaea.com/local/Achaea_GMCP ... 140311.pdf
Na Arkadii mamy wlasne wdrozenie, dostosowane do naszych skromnych potrzeb.
Przesylane poprzez GMCP wiadomosci skladaja sie z naglowkow oraz ladunku. Naglowki okreslaja modul danych.
Moduly dostepne na Arkadii: Core, Char, Room, Objects, Gmcp_msgs, Mail.
Przy polaczeniu z mudem klient powinien zasygnalizowac, z ktorych modulow bedzie korzystal za pomoca pakietu Supports z modulu Core.
Przykladowo:
Na Arkadii domyslnie dla kazdego wlaczone sa moduly Core, Char i Room. Nie sa wspierane wersje modulow, ani wlaczanie/wylaczanie poszczegolnych pakietow.
Wielkosc liter w nazwach modulow nie ma znaczenia.
Oryginalna specyfikacja zostala stworzona przez Zuggsoft i Iron Realms, mozna o niej (i o wszelkich mniej istotnych szczegolach technicznych) poczytac sobie tu:
http://www.gammon.com.au/gmcp
http://www.achaea.com/local/Achaea_GMCP ... 140311.pdf
Na Arkadii mamy wlasne wdrozenie, dostosowane do naszych skromnych potrzeb.
Przesylane poprzez GMCP wiadomosci skladaja sie z naglowkow oraz ladunku. Naglowki okreslaja modul danych.
Moduly dostepne na Arkadii: Core, Char, Room, Objects, Gmcp_msgs, Mail.
Przy polaczeniu z mudem klient powinien zasygnalizowac, z ktorych modulow bedzie korzystal za pomoca pakietu Supports z modulu Core.
Przykladowo:
Kod: Zaznacz cały
Core.Supports.Set [ "Char", "Room" ]
Wielkosc liter w nazwach modulow nie ma znaczenia.
Kod: Zaznacz cały
Core.Ping
Komunikat dwustronny, sluzy do pingowanie muda, Arkadia odpowie taka sama wiadomoscia.
Kod: Zaznacz cały
Core.Supports.Add
Core.Supports.Remove
Core.Supports.Set
Komunikaty jednostronne, tylko od klienta do muda. Sluza do wlaczania/wylaczania modulow.
Dane powinny miec postac listy z nazwami modulow.
Kod: Zaznacz cały
Core.Options.Add
Core.Options.Remove
Core.Options.Set
Komunikaty jednostronne, tylko od klienta do muda. Sluza do wlaczania/wylaczania opcji gmcp.
Dane powinny miec postac listy z nazwami opcji.
Dostepne opcje:
base64_gmcp_msgs - po wlaczeniu atrybut 'text' w komunikatach przesylanych przez gmcp
(modul gmcp_msgs) bedzie zakodowany wedlug standardu base64
Kod: Zaznacz cały
Char.Info
Komunikat dwustronny, Arkadia przesyla dane o postaci, klient moze ja odpytac.
Komunikat jest automatycznie wysylany przez muda przy logowaniu.
Dane maja postac obiektu JSON i zawieraja parametry:
name - STRING imie
id - INTEGER unikalny identyfikator postaci
object_num - INTEGER numer obiektu postaci, jak w module Objects
gender - STRING plec
race - STRING rasa
new_player - BOOLEAN czy gracz jest uznawany za zoltodzioba
guild_race - STRING opcjonalnie nazwa gildii pochodzeniowej
guild_lay - STRING opcjonalnie nazwa stowarzyszenia
guild_occ - STRING opcjonalnie nazwa zawodu
Kod: Zaznacz cały
Char.State
Komunikat dwustronny, Arkadia przesyla informacje o stanie postaci, klient moze ja odpytac.
Komunikat jest automatycznie wysylany przez muda przy logowaniu oraz przy zmianie
danego stanu postaci. W drugim przypadku dane sa wysylane z minimalnym opoznieniem.
Dane maja postac obiektu JSON i zawieraja parametry:
hp - INTEGER, od 0 do 6, poziom kondycji
mana - INTEGER, od 0 do 8, poziom many
fatigue - INTEGER, od 0 do 8, poziom zmeczenia
improve - INTEGER, od 0 do 14, poziom postepow
form - INTEGER, od 0 do 6, poziom formy
intox - INTEGER, od 0 do 9, poziom upicia
headache - INTEGER, od 0 do 5, poziom kaca
stuffed - INTEGER, od 0 do 2, poziom glodu
soaked - INTEGER, od 0 do 2, poziom pragnienia
encumbrance - INTEGER, od 0 do 5, poziom obciazenia
panic - INTEGER, od 0 do 4, poziom paniki
Kod: Zaznacz cały
Char.Colors
Komunikat dwustronny, Arkadia przesyla informacje o ustawieniach kolorow, klient moze ja odpytac
(nalezy przeslac brak ladunku lub pusty JSON) lub zmienic ustawienia (nalezy przeslac ladunek ze
zmienianymi ustawieniami, Arkadia odpowie komunikatem z ladunkiem zawierajacym ustawienia
po zmianie).
Komunikat jest automatycznie wysylany po zalogowaniu oraz przy zmianie ustawien komenda 'kolor'.
Dane maja postac obiektu JSON i moga zawierac parametry:
attack_target, current_target, defence_target, emote, enemy, general_combat,
high_inflicted_damage, high_received_damage, high_state, long_desc_autumn,
long_desc_spring, long_desc_summer, long_desc_winter, low_inflicted_damage,
low_received_damage, low_state, medium_inflicted_damage, medium_received_damage,
medium_state, met_char, no_inflicted_damage, no_received_damage, noob, other_char,
room_exits, short_desc_day, short_desc_night, shout, talk, team_member, text, whisper
Kazdy z nich moze przyjmowac wartosc NULL dla koloru wylaczonego lub INTEGER, od 0 do
255, gdzie pierwsze 16 to kolory ANSI a nastepnie XTERM.
Kod: Zaznacz cały
Char.Options
Komunikat dwustronny, Arkadia przesyla informacje o ustawieniach opcji, klient moze ja odpytac
(nalezy przeslac brak ladunku lub pusty JSON) lub zmienic ustawienia (nalezy przeslac ladunek ze
zmienianymi ustawieniami, Arkadia odpowie komunikatem z ladunkiem zawierajacym ustawienia
po zmianie, dla ustawien, ktorych nie udalo sie zmienic, automatycznie dolaczy pakiet
Char.Options.Info).
Komunikat jest automatycznie wysylany po zalogowaniu oraz przy zmianie ustawien komenda 'opcje'.
Dane maja postac obiektu JSON i moga zawierac parametry:
autocorrect, blood, boards_hidden, brief, colors, common_hidden, condition, death_startloc,
echo, form, group_cover, hand, keepalive, knowledge_hidden, mail_hidden, max_idle_time,
more_len, no_get_items, no_prompt, order_attack, order_block, order_break_cover,
order_cover, panic, parsing_order, relations_hidden, screen_width, special, state_info,
stop_combat_escape, stop_combat_hide, title_extra, title_lay, title_race, who_presence,
withdrawal
Dopuszczalne wartosci moga sie dynamicznie zmieniac, mozna je poznac za pomoca pakietu
Char.Options.Info. Pakiet Info jest dodatkowo automatycznie wysylany przy odpytywaniu muda
przez klienta.
Kod: Zaznacz cały
Char.Options.Info
Komunikat dwustronny, Arkadia przesyla informacje o mozliwych wartosciach ustawien opcji, klient
moze ja odpytac.
Komunikat jest automatycznie wysylany po zalogowaniu, przy zmianie ustawien komenda 'opcje' oraz
przy kazdym odpytaniu muda pakietem Char.Options.
Dane maja postac obiektu JSON i moga zawierac parametry:
autocorrect, blood, boards_hidden, brief, colors, common_hidden, condition, death_startloc,
echo, form, group_cover, hand, keepalive, knowledge_hidden, mail_hidden, max_idle_time,
more_len, no_get_items, no_prompt, order_attack, order_block, order_break_cover,
order_cover, panic, parsing_order, relations_hidden, screen_width, special, state_info,
stop_combat_escape, stop_combat_hide, title_extra, title_lay, title_race, who_presence,
withdrawal
Kazdy z nich przyjmuje wartosc tablicy ARRAY zawierajacej dopuszczalne wartosci danej opcji.
Ze wzgledu na zaszlosci historyczne niektore wartosci moga byc nielogiczne (nie zawsze 1 oznacza
opcje wlaczona, a 0 wylaczona).
Kod: Zaznacz cały
Room.Info
Komunikat dwustronny, Arkadia przesyla informacje o lokacji, w ktorej znajduje sie postac,
klient moze ja odpytac.
Komunikat jest automatycznie wysylany wraz z komenda zerknij, spojrz lub wejsciem na lokacje.
Ilosc wysylanych informacji zalezy od tego, czy na lokacji jest dla postaci ciemno.
Dane maja postac obiektu JSON i zawieraja parametry:
exits - ARRAY, widoczne wyjscia z lokacji
map - OBJECT, wspolrzedne lokacji na mapie klienta WWW
Kod: Zaznacz cały
Room.Time
Komunikat dwustronny, Arkadia przesyla informacje o aktualnym czasie na lokacji,
klient moze ja odpytac.
Komunikat jest automatycznie wysylany wraz ze zmiana pory dnia.
Ilosc wysylanych informacji zalezy od tego, czy na lokacji jest dla postaci ciemno.
Dane maja postac obiektu JSON i zawieraja parametry:
daylight - BOOLEAN, czy na lokacji jest dzien
season - INTEGER, od 0 do 3, pora roku (wiosna, lato, jesien, zima)
Kod: Zaznacz cały
Objects.Nums
Objects.Data
Komunikaty dwustronne, Arkadia przesyla informacje o obiektach na lokacji, w ktorej znajduje sie
postac gracza, klient moze muda odpytac.
Komunikat jest automatycznie wysylany wraz z pojawieniem/zniknieciem obiektow na/z lokacji lub ze
wraz zmiana jednego z ich parametrow. Dane sa wysylane z minimalnym opoznieniem.
Obiekty maja swoje unikalne identyfikatory. Mozna je wykorzystywac w komendach po dodaniu
przedrostka 'ob_'. Czyli obiekt o identifkatorze 123 zostanie obejrzany po wpisaniu komendy
'obejrzyj ob_123'.
Na te chwile przesylane sa tylko dane o istotach zywych (gracze, npce).
Ilosc wysylanych informacji zalezy od tego, czy postac gracza widzi dany obiekt.
Dane przesylane sa za pomoca dwoch typow wiadomosci:
Objects.Nums - dane maja postac uporzadkowanej tablicy z identyfikatorami wszystkich obiektow na lokacji,
w momencie znikniecia/pojawienia sie obiektu przesylana jest nowa tablica, informacje o
obiektach, ktore w niej sie nie znajduja przestaja byc aktualne
Objects.Data - dane maja postac obiektu JSON i dla poszczegolnych obiektow na lokacji zawierajacego
parametry, ktore ulegly zmianie (lub wszystkie, jesli obiekt pojawil sie na lokacji).
Parametry to:
living - BOOLEAN, czy obiekt to istota zywa, na te chwile zawsze tak, nalezy to
jednak sprawdzac, bo kiedys moze to ulec zmianie
avatar - BOOLEAN, czy obiekt to postac gracza
hp - INTEGER, od 0 do 6, poziom kondycji
enemy - BOOLEAN, czy obiekt jest wrogiem w walce postaci gracza
attack_num - INTEGER, identyfikator przeciwnika danego obiektu w walce
team - BOOLEAN, czy obiekt jest w druzynie postaci gracza
team_leader - BOOLEAN, czy obiekt jest przywodca druzyny postaci gracza
avatar_target - BOOLEAN, czy postac gracza koncentruje sie w walce na tym obiekcie
attack_target - BOOLEAN, czy obiekt jest celem ataku druzyny postaci gracza
defense_target - BOOLEAN, czy obiekt jest celem obrony druzyny postaci gracza
hidden - BOOLEAN, czy obiekt jest ukryty
can_see_in_room - BOOLEAN, czy postac gracza widzi cos na lokacji
paralyzed - BOOLEAN, czy postac gracza jest sparalizowana
editing - BOOLEAN, czy postac gracza jest sparalizowana przez pisanie tekstu
Kod: Zaznacz cały
Gmcp_msgs
Komunikat jednostronny, Arkadia nie wysyla tekstu okreslonego typu poprzez czysty telnet, lecz
poprzez GMCP, tak by klient mogl go odpowiednio przekierowac (na przyklad do innego okna).
Dane maja postac obiektu JSON i zawieraja parametry:
text - STRING, komunikat
type - STRING, typ komunikatu, mozliwe wartosci:
combat.avatar - komunikaty walki postaci gracza
combat.team - komunikaty walki druzyny postaci gracza
combat.others - komunikaty walki innych osob
emotes - emocje skierowane do postaci gracza
comm - komunikaty zwiazane z mowieniem/szeptaniem/krzyczeniem
room.combat - komunikaty zawierajace opis walki na lokacji
room.long - komunikaty zawierajace dlugi opis lokacji
room.short - komunikaty zawierajace krotki opis lokacji
room.item - komunikaty zawierajace opisy szczegolowych przedmiotow na lokacji
room.exits - komunikaty zawierajace opisy wyjsc z lokacji
room.contents.living - komunikaty zawierajace opis istot zywych na lokacji
room.contents.object - komunikaty zawierajace opis obiektow na lokacji nie bedacych istotami zywymi
room.contents - komunikaty zawierajace opis nieokreslonych obiektow na lokacji
living.long - komunikaty zawierajace dlugi opis zywej istoty
object.long - komunikaty zawierajace dlugi opis kazdego innego obiektu
system - komunikaty systemowe
system.login - komunikaty zwiazane z logowaniem i obsluga konta
mail - komunikaty zwiazane z poczta
editor.mail - komunikaty zwiazane z edycja listow
editor - komunikaty zwiazane z edycja pozostalych tekstow
notification.mail - powiadomienia zwiazane z poczta
notification.common - powiadomienia zwiazane z Wiesciami
notification.knowledge - powiadomienia zwiazane z wiedza
notification.relations - powiadomienia zwiazane z relacjami
notification.boards - powiadomienia zwiazane z notkami na tablicach
notification - pozostale powiadomienia
prompt - komunikaty ze znakiem zachety terminala
other - wszystkie pozostale komunikaty
Kod: Zaznacz cały
Mail.State
Komunikat dwustronny, Arkadia przesyla informacje czy postac ma nieprzeczytana poczte, klient
moze ja odpytac.
Komunikat jest automatycznie wysylany po zalogowaniu oraz przy otrzymywaniu i czytaniu poczty.
Dane maja postac obiektu JSON i zawieraja parametr:
unread - BOOLEAN, czy postac ma nieprzeczytana poczte
unreceived - BOOLEAN, czy postac ma nieodebrana poczte
unsent - BOOLEAN, czy postac ma niewyslana poczte