Specyfikacja GMCP na Arkadii

Forum techniczne Arkadii.
Awatar użytkownika
Rafgart
Posty: 899
Rejestracja: 09 lut 2009 10:10

Specyfikacja GMCP na Arkadii

Postautor: Rafgart » 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:

Kod: Zaznacz cały

Core.Supports.Set [ "Char", "Room" ]


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.

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

Wróć do „Forum Techniczne”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość