Veřejně dostupná data
Veřejně dostupná data
Firma InnoGames dává pro Divoké Kmeny (Tribal Wars) k dipozici veřejně dostupná data. Data využitelná pro statistiky, mapy či jiné uživatelské programy.
Nabízené informace řadím do třech kategorií:
1) Obecná data: takřka neměnná, společná pro všechny servery (země) nebo alespoň společná pro daný server.
2) Data konfigurační: individuální pro každý svět, ale v čase takřka neměnná.
3) Data proměnná: individuální pro každý svět a proměnná v čase.
Obecná data
Společná pro mnoho světů či serverů. (Prakticky) neměnná.
1. Grafický balíček
Originální grafické balíčky ke stažení: (společné pro všechny servery a světy)
- http://die-staemme.de/graphic/graphic.zip (asi původní, únor 2007)
- http://ftp.innogames.net/~stuff/graphic.zip (novější - v době psaní příspěvku z "leden 2008" )
- Balíčky byly, k 26.12.2008, stále přístupné a jsou určené pro DK verzi hry 4.5 a menší.
- DK verze 5.0 má trochu jiné umístění souborů, takže při grafickém náhledu vesnice jsou problémy. Mapa, ikonky a ostatní grafika by měla být OK.
2. Podklad mapy
Na mapě DK se zobrazují i lesy, rybníky, a další krajina. Tento základ je stejný pro všechny servery a světy* - jen vesnice se do ní pro každý každý svět generují náhodně. Zdroj informací (link)
* ale přímo ve hře se (v kruhu od centra) na zatím neobsazených vnějších kontinentech místo krajiny zobrazuje jen tráva. Zatím jsem nepřišel na to jak pro daný svět zjistit, kam až je "kruh" včetně krajiny a odkud dál je holá zem.
Binární data:
http://die-staemme.de/stuff/world.dat
- Velikost 1.000.000 bytes (odpovídá mapě 1000*1000)
- Pole uložena sekvenčně, nejprve dle osy X, pak Y, každé bajt odpovídá jednomu poli na mapě (adresa = X + 1000*Y)
Každý bajt může nabývat hodnot:
0-3 Grass (tráva)
8-11 Mountain (hory)
12 Sea (moře)
16-31 Forest (les)
(Ve hře na malé mapě (ta vpravo) se vše co je více než tráva (odpovídající bajt z world.dat má hodnotu větší než 3) zobrazuje tmavší zelenou, 0-3 je světle zelená. Pochopitelně mimo vesnic, které mají vlastní barvy.)
3. Seznamy světů daného serveru
Na každém serveru je možno hrát několik světů. A každý server nabízí pro strojové zpracování seznam všech právě běžících světů (Tedy bez již uzavřených. A včetně speedů - objevujících se a mizících dle toho zda speed právě běží či ne).
Seznam je k nalezení na adrese serveru + cesty "/backend/get_servers.php". Pro Divoké Kmeny je to tedy www.divokekmeny.cz/backend/get_servers.php
Data jsou v tzv. serializovaném tvaru pro php a je možné využít funkci PHP:unserialize
PHP kód:
$file = file_get_contents('http://www.die-staemme.de/backend/get_servers.php');
$servers = unserialize($file);
Poté je vytvořeno pole ve tvaru zkratka_světa => URL_světa
Praktický příklad použití (link)
Konfigurační data
Každý svět má své globální nastavení. Nastavení se může lišit svět od světa, ale jakmile je jednou dáno, tak se dobu trvání světa takřka nemění.(Měnit lze např. po dohodě s hráči, u nás to byla třeba změna dosahu šlechtice na cs1).
Data pro daný svět jsou k nalezení na URL adrese světa (ne obecném serveru země, ale už konkrétního světa), přidáním určité cesty.
Základní konfigurační soubor: config
Cesta: "/interface.php?func=get_config" (pro cs1: http://cs1.divokekmeny.cz/interface.php?func=get_config)
Budovy - popis nastavení budov
Cesta: "/interface.php?func=get_building_info" (pro cs1: http://cs1.divokekmeny.cz/interface...._building_info)
Jednotky - popis nastavení jednotek
Cesta: "/interface.php?func=get_unit_info" (pro cs1: http://cs1.divokekmeny.cz/interface....=get_unit_info)
Obsahuje např. základní rychlost jednotek - každé jednotky zvlášť. (Reálná, absolutní, rychlost se bere z této základní, násobené rychlostí světa a rychlostí jednotek z konfiguračního souboru)
V čitelné podobě nabízí zobrazení konfigurace různé externí servery, např. twstats, pro daný server a svět pod odkazem Nastavení světa. Twplus dává seznam výpis vč jednotek a budov.
Proměnná data světa
Každý svět jak se vyvíjí, mění se. Přibývají hráči, mění se majitelé vesnic, kmeny a podobně. Pro externí statistiky a mapy dává InnoGames k dispozici "aktuální" stav. Aktuální píši v uvozovkách, protože dle pravidel nelze statistiky stahovat více než 1* za hodinu (přetížil by se server). Navíc by nám to nebylo nic platné. Odzkoušel jsem, že níže zmiňované údaje (až na výjimky) jsou stejně na serveru připraveny jednou za cca dvě hodiny a pak po dobu té hodiny-dvou stahujeme stále stejné hodnoty.
Všechny soubory jsou ve formátu "comma delimited" - texty oddělené čárkou (zde vždy bez případného uvození), každá řádka ukončená UNIXovým typem konce řádky (tedy jen samotné '\n').
Všechny soubory používají pro národní a speciální znaky kódování UTF-8. Některé údaje (typicky názvy) jsou navíc zakódovány pro přímé zobrazení v adresové řádce prohlížeče. Pro srozumitelnější formát nutné použít urldecode a případně ještě navíc html_entity_decode (po urldecode).
Opět, adresa dat se získá z URL adresy světa přidáním místní cesty. (Přímé odkazy tentokrát nedávám, některé soubory mají i 4MB zabalené, 12MB v rozbaleném tvaru. Nechci zbytečně zatěžovat server, jak by na .txt klepnul každý BFU co sem zabrousí)
Informace o vesnicích:
-/map/village.txt nebo -/map/village.txt.gz:
$id, $name, $x, $y, $tribe, $points, $bonus
$id - id vesnice
$name - jméno vesnice /html_entity_decode(urldecode($name)/
$x,$y - souřadnice vesnice na mapě
$tribe - ID hráče, kterému vesnice právě patří (0 pro šedivky)
$points - kolik bodů má vesnice
$bonus- jaký typ bonusu má vesnice
Informace o hráčích:
-/map/tribe.txt nebo -/map/tribe.txt.gz
$id, $name, $ally, $villages, $points, $rank
$id - ID hráče
$name - jméno hráče /urldecode($name)/
$ally - ID kmenu, ve kterém hráč právě je (0 bez kmenu)
$villages - počet vesnic hráče
$points - počet bodů hráče
$rank - pořadí hráče v žebříčku hráčů
Informace o kmenech:
-/map/ally.txt nebo -/map/ally.txt.gz
$id, $name, $tag, $members, $villages, $points, $all_points, $rank
$id - ID kmenu
$name - jméno kmenu /html_entity_decode(urldecode($name)/
$tag - tag kmenu /html_entity_decode(urldecode($tag)/
$members - počet členů kmenu
$villages - počet vesnic kmenu (součet vesnic všech hráčů kmenu)
$points - součet bodů prvních 40 hráčů kmenu
$all_points - součet bodů všech hráčů kmenu
$rank - pořadí kmenu v žebříčku kmenů (tedy, počítáno dle bodů prvních 40 hráčů)
Informace o profilech hráčů:
-/map/profile.txt nebo -/map/profile.txt.gz
$tribe_id, Geburtstag, Geschlecht, Wohnort
EN/DE nápověda zmiňuje i další data /Profiltext (als XHTML), Profilbild-Dateiname/ ale ta jsem nikdy neviděl, že by byla poskytována.
$tribe_id - ID hráče, jehož profil je zmiňován
Geburtstag - datum narození /ve tvaru YYYY-MM-DD/
Geschlecht - pohlaví /nevyplněno, m, f/
Wohnort - bydliště
Informace o bodech poražený protivníky:
v útoku: -/map/kill_att.txt nebo -/map/kill_att.txt.gz
v obraně: -/map/kill_def.txt nebo -/map/kill_def.txt.gz
celkem: -/map/kill_all.txt nebo -/map/kill_all.txt.gz (pouhý součet att+def)
$rank, $tribe_id, $kills
$rank - pořadí v žebříčku poražených protivníků (útoku / obrany / celkovém)
$tribe_id - ID hráče, jehož body poražených protivníků řádka popisuje
$kills - počet bodů poražených protivníků
Informace o zabírání vesnic:
-/map/conquer.txt nebo -/map/conquer.txt.gz
Kompletní seznam všech záborů od začátku světa. Pozor, zešednutí vesnice soubor neobsahuje (ale obráceně, zabrání šedivek ano). Stejně tak zde nejsou nové vesnice (když se přihlásí nový hráč do světa). Je to seznam záborů pomocí šlechtice v doslovném výrazu.
$village_id, $unix_timestamp, $new_owner, $old_owner
$village_id - ID vesnice která byla zabrána
$unix_timestamp - čas záboru ve formátu unix timestamp
$new_owner - ID hráče nového vlastníka (vždy různé od 0)
$old_owner - ID starého hráče (0, šlo-li o šedivku)
A speciální soubor záborů (max. za posledních 24h):
-/interface.php?func=get_conquer&since=unix_timestamp
Jedná se o soubor ve stejném formátu jako "conquer.txt" a popisuje zábory během poslední doby. Místo unix_timestamp je nutné dosadit reálný čas (ne starší 24h), odkdy chceme zábory zjistit. Dostaneme seznam záborů od unix_timestamp až do současné chvíle.
Také je to asi jediný případ, kdy se na serveru (asi) sahá přímo do databáze a dostaneme tak údaje opravdu aktuální. Ne zpožděné o hodinu-dvě. Dlužno poznamenat, že v CZ nápovědě není tento odkaz zmiňován a v EN či DE jsem nenašel povolení z něj tahat častěji (než onu povolenou 1* za hodinu) - nevím, zda jde opět o nedotaženost pravidel nebo úmysl - takže častěji jak 1* za hodinu se zvenku o zabrání vesnic stejně nemáme šanci legálně dozvědět.
Autor: Turgon