====== Khans&Kings ======
===== Moduły =====
* Strona serwera:
* KKserver - serwer gry, obsługuje rządania klientów: dołączanie do gry, zakończenie gry
* KKlogic - obsługuje logikę gry: dodawanie surowców, rozstrzyganie walk
* Strona klienta:
* KKwaitingroom - interfejs pozwalajączy połączyć się z serwerem, poczekać na graczy, wybrać scenariusz oraz rozpocząć grę
* KKmap - moduł rysujący mapę gry (eksportowana jako Image), oraz przechwytujący kliknięcia w poszczególne podprowincje
* KKgame - główny interfejs gry
* KKresearch - rysuje drzewko technologii, oraz pozwala nimi zarządzać
===== Format mapy =====
Mapy do gry K&K są zapisywanie w prostym formacie tekstowym, z rozszerzeniem: .kkmap . Format inspirowany jest formatem OSM.
1200x2050 #wielkość mapy w pikselach
way [ID] [atrybuty]: (15,12) (57,53) #definiowanie ścierzek oraz ich punktów kontrolnych
way mongolskokazachskaN border river: (15, 15) (72,11) #możliwe atrybuty: border, river
area [type][attributes]: [ways] #type: country, province, subprovince, lake, see
area province Wschodnia Mongolia: mongolskokazachskaN
area subprovince forest: mongolskokazachskaN # atrybuty podprowincji: forest, capital(tylko jedna na prowincję)
area subprovince forest capital: a45
area country[Wielkie Imperium Mongolskie]: mongolskokazachskaN, mongolsko kazachskaS
Ścierzki nie muszą tworzyć idealnie zamkniętych obszarów o ile da się taki obszar jednoznacznie określić.
===== KKserver (strona serwera) =====
Serwer do gry K&K został oparty na protokole 9P2000. Przestrzeń nazw eksportowana przez serwer, wygląda następująco:
* ctl (OWRITE)
* - posiadana ilość zasobu
* <[int] - ilość zasobu do dodania(lub odjęcia w przypadku liczby ujemnej)
* wood (ORDWR)
* > - posiadana ilość zasobu
* <[int] - ilość zasobu do dodania(lub odjęcia w przypadku liczby ujemnej)
* stone (ORDWR)
* > - posiadana ilość zasobu
* <[int] - ilość zasobu do dodania(lub odjęcia w przypadku liczby ujemnej)
* ore (ORDWR)
* > - posiadana ilość zasobu
* <[int] - ilość zasobu do dodania(lub odjęcia w przypadku liczby ujemnej)
* gold (ORDWR)
* > - posiadana ilość zasobu
* <[int] - ilość zasobu do dodania(lub odjęcia w przypadku liczby ujemnej)
* techs/
* technology_name (ORDWR)
* > podaje informacje o technologi i jej wymaganiach; format:
* wymaganie1, wymaganie2
* +1 do stanu jednostek
* etc.
* < technologia zostaje aktywowane, jeżeli spełnione są wymagania; zasoby zostąną odjęte z puli
* units/
* id/ (uid)
* class (OREAD) - zwraca klasę jednostki (w K&K2 zwaną nazwą)
* type (OREDA) - zwraca typ jednostki
* group (ORDWR) - grupa do której należy oddział. Grupy poruszają się i atakują wspólnie
* > nazwa grupy
* < przyłącz jednostkę do nowej grupy
* name (ORDWR) - nazwa jednostki nadana przez gracza
* > nazwa jednostki
* < nowa nazwa dla jednostki
* level (ORDWR) - poziom jednostki
* > odczytaj poziom jednostik
* < [int] zwiększ poziom jednostki o [int]
* ex (ORDWR) - doświadczenie
* > ilość posiadanego doświadczenia
* <[int] ilość doświadczenia do dodania
* pp (ORDWR) - punkty promocji: ile nowych promocji gracz może sobie dodać
* > ilość punktów promocji
* <[int] ilość pp do dodania
* range (OREAD) - qid prowincji w zasięgu ruchu: "154\n125"
* str (ORDWD) - atak jednostki
* > zwraca wartość współczynnika
* <[int] ilość współczynnika do dodania(lub odjęcia w przypadku liczby ujemnej)
* def (ORDWR)
* > zwraca wartość współczynnika
* <[int] ilość współczynnika do dodania(lub odjęcia w przypadku liczby ujemnej)
* qua (ORDWR) - stan jednostki
* > zwraca wartość współczynnika
* <[int] ilość współczynnika do dodania(lub odjęcia w przypadku liczby ujemnej)
* rel (ORDWR) - niechęć jednstki
* > zwraca wartość współczynnika
* <[int] ilość współczynnika do dodania(lub odjęcia w przypadku liczby ujemnej)
* spd (ORDWR) - szybkość jednostki
* > zwraca wartość współczynnika
* <[int] ilość współczynnika do dodania(lub odjęcia w przypadku liczby ujemnej)
* bonuses (ORDWR)
* >zwraca premie jednostki oddzielone '\n':
* +50% ataku na stepie [premia podstawowa]
* +25% ataku w lesie [premia dodatkowa]
* etc.
* < dodaje nową premię
* provinces/
* subprovince_id/ (qid)
* province (OREAD) - nazwa prowincji do której należy
* ulimit (OREAD) - maksymalna liczba garnizonów mogących stacjonować w prowincji
* units (ORDWR) - jednostki stacjonujące w podprowincji
* > lista jednostek: "uid1\n uid2"
* <[uid] przesuń jednostkę na tę prowincję
* buldings (ORDWR) - lista budynków w podprowincji:
* > lista budynków: "Młyn: +1 do żywności\n Fort: +1 do Obrony, +1 do pojemności"
===== KKlogic (strona serwera) =====
Logika gry, obsługuje zapytania graczy do serwera i rostrzyga, czy są zgodne z zasadami.