Specyfikacja GMCP na Arkadii

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

Specyfikacja GMCP na Arkadii

Post autor: Rafgart »

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
Zablokowany