JSON Protokoll
Das Ingame JSON Protokoll kennt in Serverrichtung Commands und in Clientrichtung Events.
Commands
Die Commands müssen mindestens ein action
Attribut enthalten welches folgende Werte annehmen kann (keys in Klammern sind optional):
Action | Keys | Beispiel | Bemerkung |
---|---|---|---|
NOOP |
keiner | {"@action":"NOOP"} |
Command der in regelmäßigen Abständen abgeschickt werden kann, um die Verbindung aufrecht zu erhalten. |
START_GAME |
keiner | {"@action":"START_GAME"} |
Startet das Spiel wenn jeder Spieler ein Startfeld gewählt hat. |
LEAVE_GAME |
keiner | {"@action":"LEAVE_GAME"} |
Verlässt das aktuelle Spiel. |
MESSAGE |
message, (audience)?, (recipient)? | {"@action":"MESSAGE","properties":{"entry":{"key":"message","value":"Hallo"},"entry":{"key":"audience","value":"USER"},"entry":{"key":"recipient","value":"zenobios"}}} |
Verschickt eine Nachricht an alle oder den angegebenen User/Team. Der Parameter audience erlaubt folgende Werte:ALL, USER, TEAM.Folgende Kombinationen von audience und recipient sind möglich:audience: leer, recipient:leer -> Nachricht wird an alle User im Spiel geschicktaudience: leer, recipient:nicht leer -> Nachricht wird nicht verschicktaudience: ALL, recipient:leer -> Nachricht wird an alle User im Spiel geschickt audience: ALL, recipient:nicht leer-> Nachricht wird nicht verschicktaudience: USER, recipient:leer -> Nachricht wird nicht verschickt audience: USER, recipient:username -> Nachricht wird an user username verschicktaudience: TEAM, recipient:leer -> Nachricht wird an das eigene Team geschickt audience: TEAM, recipient:teamname -> Nachricht wird an das Team teamname verschicktEvents, die durch diesen Command ausgelöst werden übergeben die Art der Message mit, um im Client eine Unterscheidung durchführen zu können. Mögliche Werte sind:ERROR, MESSAGE, PUBLIC_MESSAGE, USER_MESSAGE, TEAM_MESSAGE |
CHANGE_USER_COLOR |
color | {"@action":"CHANGE_USER_COLOR","properties":{"entry":{"key":"color","value":"FFFF00"}}} |
Ändert die Userfarbe. |
CHOOSE_FIELD |
field | {"@action":"CHOOSE_FIELD","properties":{"entry":{"key":"field","value":"Field@1a3b6f"}}} |
Wählt das Startfeld aus. field muss eine ID sein. |
CREATE_DEFENSE |
defensetype, cell | {"@action":"CREATE_DEFENSE","properties":{"entry":{"key":"defensetype","value":"SWASH"},"entry":{"key":"cell","value":"Cell@d54a23"}}} |
Baut eine Verteidigungsanlage des Typs defensetype auf der Zelle cell . |
CHANGE_DEFENSE |
defense, action | {"@action":"CHANGE_DEFENSE","properties":{"entry":{"key":"defense","value":"Defense@d43b23"},"entry":{"key":"action","value":"SELL"}}} |
Die Verteidigungsanlage defense kann mit diesem Command angepasst werden. Es stehen folgende zwei Werte für action zur Auswahl:SELL – Die Verteidigungsanlage wird verkauft. Der Verkauf bringt 75% des Kaufpreises ein. Es können nur eigene Verteidigungsanlage verkauft werden.
UPGRADE – Wertet die Verteidigungsanlage um ein Level auf, wenn möglich. |
CHANGE_DEFENSE_STRATEGY |
defense, strategy | {"@action":"CHANGE_DEFENSE_STRATEGY","properties":{"entry":{"key":"defense","value":"Defense@5974b827"}, "entry":{"key":"strategy","value":"FASTEST"}}} |
Wechselt die Strategie der Verteidigungsanlage mit der ID defense auf die Strategie strategy . Es stehen folgende Strategien zur Auswahl:CLOSEST, FASTEST, STRONGEST, FARTHEST, WEAKEST |
CREATE_ZOMBIE |
zombietype | {"@action":"CREATE_ZOMBIE","properties":{"entry":{"key":"zombietype","value":"CHASER"}}} |
Erzeugt einen Zombie des Typs zombietype |
Events
Der Server schickt Events in der Form
{"@ts":"1336475335153","@src":"User@a4d93e3","@prop":"nickname","@nv":"akoch"}
In diesem Fall wurde zum Timestamp 1336475335153 von der source User@a4d93e3 die property nickname auf akoch (new value) geändert.
Wer sich die Events vom Server genauer anschaut wird feststellen, dass Werte die null
sind in JSON wegoptimiert werden. In diesem Beispiel fehlt z.B. die Property @ov.
Tipp: Das nötige Datenmodell lässt sich größtenteils aus dem Eventstream ableiten.