PHost - Datendateien (util.dat)PHost 4.1h |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Docs v4.x
|
Inhalt
EinleitungZusätzlich zu den normalen Result-Dateien erstellt PHost noch für jede Spieler eine utilX.dat. Diese Dateien vereinfachen die Anzeige der Informationen für Spieler. Traditionell lesen Programme die Subraumnachrichten, die der Host sendet, um Informationen wie die Positionen von Minenfeldern, Ergebnisse von Sensorabtastungen usw. zu erhalten. Dies ist schwierig und fehleranfällig, und verträgt sich nicht damit, dass PHost Nachrichten in mehreren Sprachen erzeugen kann. Um dieses Problem zu lösen, sendet PHost die meisten Nachrichten noch einmal in einem maschinenlesbaren Format, in der Datei utilX.dat. Idealerweise enthält utilX.dat alle wichtigen Informationen, falls dir also etwas fehlt, sag es uns ruhig. Die utilX.dat wird auch benutzt, um Spielern Dateien zu senden, die diese (mit dem send-Befehl) angefordert haben. Dieses Dokument beschreibt das Format der Datendateien. Es ist daher nur für Entwickler von Host- oder Client-Programmen interessant. Hosts sollten allerdings sicherstellen, dass ihre Spieler die utilX.dat zusammen mit ihrem Result erhalten. Dieses Dokument beschreibt auch andere Aspekte der Kommunikation des Hosts mit den Clients, nämlich Subraumnachrichten (messages) und Ufos. Die bevorzugte Methode der Kommunikation der Clients mit PHost sind Befehlsnachrichten, die auf ihrer eigenen Seite beschrieben sind. Zusammenfassung DateiformatDieser Abschnitt wird aus der Sicht eines Spielers bzw. dessen Programm geschrieben, der die Datei lesen will. Informationen für die Host-Seite finden sich weiter unten. Die Datei wird im DOS-Format gespeichert. Alle Einträge mit mehr als einem Byte sind daher Little-Endian, Zweierkomplement. Die folgenden Datentypen werden verwendet:
Jede utilX.dat besteht aus einer Anzahl Datensätze (records). Jeder Datensatz beginnt mit einem Header der Form:
Der Record Type gibt an, was für Daten der Eintrag enthält. Der Header wird vom eigentlichen Inhalt des Datensatzes gefolgt, die Länge dieser Daten ist mit Record Size angegeben. Alle Typen, die PHost verwendet, sind unten beschrieben. Die maximale Größe eines Eintrages inklusive Header beträgt 32k, um Probleme mit Programmen zu vermeiden, die die Record Size als vorzeichenbehafteten Wert interpretieren (in Programmiersprachen wie Java oder BASIC gibt es keine vorzeichenlosen Datentypen). Im Allgemeinen werden Zeichenfolgen (strings) im BASIC-Format abgespeichert, also mit Leerzeichen auf die Feldbreite aufgefüllt werden. Da PHost aus der C-Ecke stammt, erzeugen manche Versionen versehentlich C-Strings (mit Nullbyte abgeschlossen), einige Addons ebenfalls. Daher sollten deine Programme beide Formate unterstützen. In der Dateiformatliste gibt es weitere Hinweise. Es gibt keine allgemeine Konvention über den in Zeichenketten verwendeten Zeichensatz (außer 7-bit-ASCII). Die am häufigsten verwendeten erweiterten Zeichensätze sind höchstwahrscheinlich die DOS-Codeseiten, nicht die ISO-Latin-Zeichensätze oder Windows-Codeseiten. Dieses Problem betrifft vor allem Schiffs- und Spieler-Namen. Programme sollten das Record Size Feld auswerten, um zu ermitteln, wieviele Daten nach dem Header folgen, anstelle feste Werte zu verwenden. Damit kann das Programm neu eingeführte oder erweiterte Datensätze korrekt überspringen. Einige Datensätze wurden bereits erweitert und waren in älteren PHost-Versionen kürzer. Soweit bekannt werden solche Versionsabhängigkeiten hier erwähnt. Record Size kann 0 sein, dann folgt der nächste Datensatz direkt darauf, ohne Daten zu dem aktuellen Datensatz. Die Reihenfolge der Einträge entspricht im Groben dem Hostablauf. Wenn Informationen über ein Objekt mehrmals hintereinander folgen, steht die aktuellste Information also ganz hinten. Die Typnummern der Einträge haben mit der Reihenfolge in der Datei nichts zu tun. Jede utilX.dat beginnt mit einem Steuer-Datensatz (control record). Details zu den Datensätzen
Gesendet, wenn: Minenfeld gelegt/geräumt/gescannt Gesendet an: Besitzer des legenden/scannenden Schiffes, und Verbündete mit Vision-Privileg Diese Nachricht berichtet über eins von drei Ereignissen:
Ein Minenfeld kann mehr als einmal aufgelistet sein. Es wird einmal berichtet, wenn es gescannt wurde, und einmal für jedes Schiff das Minen hinzufügt oder räumt. Die letzte Nachricht über ein Minenfeld ist die, die die endgültige Größe des Minenfeldes (nach dem Legen und Räumen) enthält. Das Feld FCode Planet Id gibt den Planeten an, der den Kommandocode für das Minenfeld zur Verfügung stellt: der Minenfeld-Code ist der gleiche wie der des angegebenen Planeten. Dieses Feld ist nur für eigene Minenfelder und die deiner Verbündetetn, die dir Minen-Privileg bieten, gültig. Für andere Minenfelder steht hier 0. Das Feld Scan Type gibt an, woher dieser Eintrag stammt. Wurde ein Minenfeld gelegt, ist dieses Feld 0. Wurde ein gegnerisches Minenfeld (teilweise) geräumt, ist es 1. Handelt es sich um die abschließende Zusammenfassung aller Scans (für eigene und gegnerische Minenfelder), steht hier eine 2. Normalerweise kommen alle Typ-0-Einträge vor den Typ-1-Einträgen (da das Minenlegen vor dem Minenräumen kommt), welche wiederum vor den Typ-2-Einträgen stehen (da alle Minenfeld-Aktionen zum Schluss zusammengefasst werden). Wenn ein Spieler Winplan benutzt, sieht er seine Minenfelder automatisch auf diese Weise, auch ohne ausdrücklich danach zu suchen. Wenn du also Winplan benutzt und eins deiner Minenfelder nicht siehst, kannst du davon ausgehen, dass das Minenfeld nicht mehr existiert. Wenn ein Spieler AllowMoreThan500Minefields eingeschaltet hat, werden alle Minenfelder mit diesem Datensatz gemeldet. Wenn AllowMoreThan500Minefields ausgeschaltet ist, werden Minenfelder mit Id-Nummern über 500 stattdessen mit Datensatz 46 gemeldet.
Gesendet, wenn: Schiff explodiert im Kampf Gesendet an: alle Spieler
Gesendet, wenn: Schiff läuft auf eine Mine (Fangmine oder normal) Gesendet an: Besitzer des Minenfeldes und des Schiffes Die angegebene Position ist die des Minentreffers. Der angegebene Schaden ist der Gesamtschaden nach dem Treffer. Insbesondere bedeutet das, wenn das Schiff 99% Schaden (bzw. 150% bei Lizards) überschreitet, explodiert das Schiff. Siehe auch: Datensatz 58 - Explosion
Gesendet, wenn: Schiff scannt einen Planeten mittels Dark Sense Gesendet an: Besitzer des Schiffes, sowie alle, denen er eine Vision-Allianz bietet.
Gesendet, wenn: Schiff scannt einen Planeten mittels Super Spy (der Teil der Mission, der im Schritt SuperSpyMission passiert) Gesendet an: Besitzer des Schiffes, das spioniert, sowie alle, denen er eine Vision-Allianz bietet. Zusätzlich zu den Super-Spy-Informationen erhältst du noch einen Exploration-Datensatz.
Gesendet, wenn: Schiff mit Treibstoff umkreist einen fremden Planeten Gesendet an: Besitzer des Schiffes, das den Planeten scannt, sowie alle, denen er eine Vision-Allianz bietet. Colonists ist eine Anzahl Kolonisten, nicht Clans. Temperature ist die Temperatur in Grad-Fahrenheit, nicht der Temperaturcode aus der pdata.dat.
Gesendet, wenn: Schiff scannt einen Planeten mittels Sensor Sweep Gesendet an: Besitzer des Schiffes, das den Planeten scannt, sowie alle, denen er eine Vision-Allianz bietet. Das Feld Activity enthält die Stärke der industriellen Aktivität auf dem Planet. Es entspricht den Werten aus der Nachricht folgendermaßen:
PHost bis Version 4.1/3.5 melden auch einen Wert "5", der kein Äquivalent zur Subraumnachricht hat. In neueren Versionen ist dieser Wert auf den gleichen Wertevorrat wie die Nachricht beschränkt.
Gesendet, wenn: Kampf ausgetragen. Dieser Datensatz ist eine Ergänzung zum normalen vcr.dat-Eintrag. Gesendet an: Teilnehmer des Kampfes und Verbündete, denen sie die Kampf-, Schiffs- und Vision-Privilegien geboten haben. Jeder Kampf wird zwischen zwei Einheiten ausgetragen, für die dieser Eintrag das Ergebnis angibt (der Anfangszustand steht in der VCR-Datei). Wenn das Planet Flag null ist, sind beide Einheiten Schiffe; steht dort der Wert eins, ist die zweite Einheit ein Planet und die zweite Id-Nummer ist eine Planeten-Id. Das Feld Outcome beschreibt den Ausgang des Kampfes aus Sicht dieser Einheit:
In PHost können Schiffe Planeten kapern. Ergebnis 3 (No Ammo, kampfunfähig) entsteht, wenn eine Einheit am Ende des Kampfes keine Geschütze und auch keine Torpedos oder Raumjäger mehr hat. Dieses Ergebnis tritt nur bei Schiffen ohne wirksame Geschütze auf. Da Todesstrahlen gegen Planeten nicht wirken, kann solch ein Kampf ebenfalls mit diesem Ergebnis beendet werden. Das Feld Seed enthält den selben Wert wie in dem VCR-Datensatz. Zusammen mit den Id-Nummern kann somit der util.dat-Eintrag einem VCR-Datensatz zugeordnet werden.
Gesendet, wenn: ein großer Meteor schlägt auf einem Planeten ein Gesendet an: alle Spieler Die Nachricht enthält den Inhalt des Meteors, der zum Planetenkern (nicht zu den bereits abgebauten Mineralien) hinzugefügt wurde. Die Mineralien in einem großen Meteor werden mit LargeMeteorOreRanges eingestellt.
Gesendet, wenn: Meteoritenhagel auf einem Planeten Gesendet an: Besitzer des Planeten Die Nachricht enthält den Inhalt des Meteoritenhagels, der zum Planetenkern (nicht zu den bereits abgebauten Mineralien) hinzugefügt wurde. Die Mineralien in einem Meteoritenhagel werden mit MeteorShowerOreRanges eingestellt. Dieser Datensatz hat das gleiche Format wie Datensatz 8.
Gesendet, wenn: AllowMoreThan50Targets ist deaktiviert, aber es wurden mehr als 50 Schiffe gescannt, und der Spieler erhält ein RST im DOS-Format. Dieser Datensatz hat das gleiche Format wie ein Eintrag in targetX.dat. Die ersten 50 Schiffe sind im Result enthalten. Weitere Schiffe werden mit diesem Eintrag übertragen; falls der Spieler Winplan benutzt, stehen sie in einem besonderen Bereich des Results. Die meisten Elemente dieses Datensatzes sind selbsterklärend. Das Feld Heading enthält die Richtung, in die sich das Objekt bewegt (0 bis 359 Grad, dabei ist 0 im Norden und der Winkel wird im Uhrzeigersinn gemessen). Der Wert -1 (0xFFFF) gibt eine unbekannte Richtung an. Name ist ein 20-Byte-Feld mit dem Schiffsnamen. Target-Einträge unterscheiden sich von dem echten Schiff wie folgt:
Gesendet an: Verbündete, denen du die Planeten-Allianz anbietest Dieser Datensatz berichtet, dass der angegebene Spieler an dem angegebenen Planeten eine Sternenbasis hat.
Gesendet an: Verbündete, denen du die Planeten-Allianz anbietest Dieser Datensatz enthält Informationen über verbündete Planeten. Die Felder Native Government und Native Race können die folgenden Werte annehmen:
Die vier Mineralien-Einträge enthalten die Menge der Mineralien an der Planetenoberfläche, nicht die im Planetenkern. Für die Bevölkerung wird eine Menge Personen angegeben, nicht Clans. Temperature ist die Temperatur in Grad-Fahrenheit, nicht der Temperaturcode wie in pdata.dat.
Gesendet, wenn: Dieser Datensatz steht immer am Anfang der util.dat. Er dient zur Identifikation der Datei und assoziiert sie mit einem Result. Im Feld Host Run Time steht der gleiche Zeitstempel wie in der Resultdatei. Damit kann ein Programm sicherstellen, dass eine util.dat tatsächlich zu einem Result gehört, indem es dieses Feld, Turn Number und Player Number vergleicht. Die drei PHost Version-Felder geben an, welche PHost-Version die Datei erstellt hat. Bei PHost 3.4c wären die Felder beispielsweise Major=3, Minor=4 und Release='c'. Das Feld Release kann auch leer (Leerzeichen) sein. Die acht 32-Bit-Digest-Werte sollen es Programmen ermöglichen, zu überprüfen, ob die Schiffsliste auf Spieler-Seite die gleiche ist wie auf Host-Seite. Details sind auf Anfrage verfügbar. Das Feld Game Name enthält den Wert der GameName-Option.
Gesendet, wenn: ein Wurmloch wurde gescannt Gesendet an: Besitzer des Schiffes, das das Wurmloch scannt, sowie alle, denen er eine Vision-Allianz bietet. Dieser Datensatz beschreibt einen Wurmloch-Endpunkt, inklusive seiner Masse und einer Angabe der Stabilität.
Das Feld Id gibt die Wurmloch-Id an. Wurmloch-Ids sind geradzahlig, wenn es sich um einen Wurmloch-Eingang handelt, und ungerade, wenn es sich um den "Ausgang" eines bidirektionalen Wurmloches handelt. Der Ausgang hat immer eine Id-Nummer, die um eins größer ist als der Eingang. Nicht alle Id-Nummern müssen belegt sein, falls ein Wurmloch beispielsweise kollabiert ist, oder falls es sich um ein unidirektionales Wurmloch handelt (der Ausgang mit der ungeradzahligen Nummer ist für unidirektionale Wurmlöcher nicht sichtbar).
Gesendet, wenn: Schiff durchquert ein Wurmloch Gesendet an: Besitzer des Schiffes Mit Location und Wormhole Id wird der Ausgangspunkt der Reise angegeben. New Damage ist der Schaden, der durch die Reise angerichtet wurde, Total Damage der neue Gesamt-Schaden. Wenn der Gesamt-Schaden 100 oder mehr enthält, wurde das Schiff zerstört.
Gesendet, wenn: Schiff an Sternenbasis recycelt Gesendet an: Besitzer der Sternenbasis
Gesendet an: jeden Spieler Dieser Datensatz ist seit PHost 1.3 definiert, wird aber erst seit Version 4.0j verwendet. Er enthält Informationen über einen Ionensturm. PHost übermittelt immer alle Ionenstürme an alle Spieler.
Gesendet, wenn: ein Schiff wurde mittels Colonize verschrottet Gesendet an: Besitzer des Schiffes Dieser Datensatz wird nur gesendet, wenn das Schiff mittels Colonize gelandet wurde. Wenn der Planet normal durch Abladen von Kolonisten eingenommen wurde, wird er nicht gesendet (siehe aber Datensatz 28, Bodenkampf).
Gesendet, wenn: Schiff ergibt sich an einer Sternenbasis (Force surrender) Gesendet an: ehemaliger Besitzer des Schiffes, Besitzer der Sternenbasis In PHost 1.3 ist Datensatz 19 ein Schiff, das vom Feind übernommen wurde, und hat das folgende Format:
Gesendet, wenn: neues Schiff gebaut Gesendet an: Besitzer des Schiffes Das Clone flag gibt an, ob es sich um einen normalen Bauauftrag oder um ein zu klonendes Schiff handelt. In PHost 1.3 ist Datensatz 20 ein Schiff, das wir vom Feind übernommen haben, und hat das folgende Format:
Gesendet, wenn: Schiff wurde mit dem Kommandocode gsX oder dem Befehl give übergeben. Gesendet an: alter und neuer Besitzer
Gesendet an: alle Spieler, die in eine Allianz involviert sind Die vier Komponenten dieses Eintrages werden mit einer Spielernummer indiziert. Das erste Feld gibt an, welche Allianz-Privilegien (alliance levels) der Spieler den anderen Spielern bietet. Das zweite Feld enthält entsprechend die Angebote der anderen Spieler an den Empfänger dieses Datensatzes. Beispielsweise enthält das fünfte Element von Offered To die Allianz-Angebote dieses Spielers an die Privateers; das fünfte Element von Offers From enthält die Allianz-Angebote der Privateers an diesen Spieler. Jedes Element ist ein Bitfeld, welches folgendermaßen aufgebaut ist:
Zuerst ist Bit 5 (Wertigkeit 32): dieses Bit entscheidet, ob das Angebot überhaupt gültig ist (also der Spieler den Befehl allies add benutzt hat). Wenn das der Fall ist, stehen in den unteren 5 Bits die angebotenen Privilegien (siehe allies config). Die beiden höchstwertigen Bits sind reserviert und werden von PHost auf 0 gesetzt. Wenn beispielsweise das fünfte Offered To-Feld von Spieler 3 den Wert 00101010 (binär) hat, bedeutet das, dass Spieler 3 dem Spieler 5 ein Bündnis angeboten hat und die Privilegien "Planet" und "Kampf" anbietet. Für jeden Spieler N sollten die Felder, Offered To[N] und Offers From[N] den Wert 0 haben (man kann keine Allianz mit sich selbst eingehen). Die letzten beiden Felder dieses Datensatzes geben an, welche Allianz-Privilegien nur bedingt angeboten werden. Analog zu den Feldern Offered To und Offers From werden diese Felder mit einer Spielernummer indiziert. Ein gesetztes Bit markiert ein bedingtes Angebot, das nur aktiv wird, wenn der andere Spieler das gleiche Privileg ebenfalls (möglicherweise ebenfalls bedingt) anbietet. Die Codierung ist die gleiche wie für die ersten beiden Felder, allerdings ist das Active bit immer 0. Wenn ein Allianz-Privileg nicht angeboten wird, ist das entsprechende "Conditional"-Bit immer 0.
Gesendet, wenn: Planet wurde von Bioscanner erfasst Gesendet an: Besitzer des Schiffes, das den Planeten scannt, sowie alle, denen er eine Vision-Allianz bietet. Siehe den Planeten-Datensatz für eine Beschreibung der Felder. Die Eingeborenen-Population (und -Rasse) kann 0 sein, wenn der Planet keine Eingeborenen hat.
Gesendet, wenn: Glory Device wurde ausgelöst (mit trg oder pop) Gesendet an: Besitzer des Schiffes Dieser Eintrag wird nur für das Glory-Device-Schiff generiert, für alle anderen davon betroffenen Schiffe gibt es einen Datensatz 25.
Gesendet, wenn: Schiff wird von der Schockwelle eines Glory Device betroffen Gesendet an: Besitzer des Schiffes, und Besitzer des Glory Device Dieser Datensatz enthält ein Schiff, welches von einem Glory Device beschädigt wurde. Die Daten beschreiben das beschädigte Schiff, nicht das Glory Device. Das Feld New Damage enthält den neuen Schaden, nach der Explosion. Bei einem Wert von 100 oder mehr ist das Schiff explodiert.
Gesendet, wenn: Schiff wird geentert und übernommen (tow capture, siehe Mission Tow) Gesendet an: alter und neuer Besitzer des Schiffes Das Feld Ship Id enthält die Id des Schiffes, welches den Besitzer gewechselt hat; Boarding Ship Id ist die Id des Schiffes, welches das andere Schiff geentert hat.
Dieser Eintrag enthält eine Kopie von pconfig.src, ohne weitere Header. Seit PHost 2.10 wird dieser Datensatz nicht mehr verwendet, stattdessen wird der allgemeine Dateitransfer genutzt.
Gesendet, wenn: Planet wird mit dem normalen Bodenkampf (Kolonisten abladen) oder Imperial Assault angegriffen Gesendet an: Besitzer des Planeten und Angreifer Das Feld Outcome kann die folgenden Werte annehmen:
Gesendet, wenn: zwei Minenfelder explodieren, weil sie überlappen Gesendet an: alle Spieler Dieser Eintrag enthält die Id-Nummern und Positionen der beiden Minenfelder, sowie die Anzahl Minen-Einheiten, die aus beiden Minenfeldern entfernt wurden. Dieser Datensatz wird verwendet, wenn die Verluste symmetrisch sind: wenn zwei Minenfelder überlappen, verlieren beide die selbe Menge. In einigen Fällen sind die Verluste nicht symmetrisch, dann sendet PHost einen Datensatz vom Typ 53 für alle betroffenen Felder.
Dieser Datensatz ist der letzte in util.dat, der von PHost erzeugt wird. Der einzige Grund ist zu markieren, dass die folgenden Einträge von anderen Programmen oder Addons erzeugt wurden. Der Datensatz enthält keine Daten.
Gesendet, wenn: Schiff sammelt Minen aus einem Minenfeld auf und stellt Torpedos her Gesendet an: Besitzer des Schiffes Das Feld Torps Converted gibt die Anzahl umgewandelter Torpedos an. In Units Scooped befindet sich die Anzahl dafür aufgesammelter Minen-Einheiten.
Gesendet, wenn: Planet wird geplündert Gesendet an: Besitzer des Planeten, und Besitzer des Schiffes, das den Planeten plündert Im Gegensatz zu den anderen Datensätzen wird hier tatsächlich eine Clan-Anzahl berichtet.
Dieser Datensatz ist als Vorlage für Addons gedacht, die Objekte an Client-Programme melden wollen, ähnlich der ufo.hst von HOST. PHost selbst erzeugt diesen Datensatz nicht. Wir empfehlen allen Addon-Autoren, die neue Objekte im Universum erzeugen, diesen Datensatz zu nutzen. Dieser Eintrag kann in drei Abschnitte aufgeteilt werden:
Dieser Datensatz vereinfacht einem Client-Programm, Addon-Objekte darzustellen. Daher empfehlen wir allen Addon-Entwicklern, diesen Datensatz zu nutzen, um Objektpositionen zu übermitteln. Mindestens die folgenden Programme werten General-Object-Einträge aus: Es gibt eine Konvention bezüglich des Feldes Object Id: wenn das Objekt auch in der ufo.hst enthalten ist, sollte das Feld Object Id der Ufo-Id entsprechen. Damit können Client-Programme erkennen, dass es sich um das selbe Objekt handelt. Entsprechend sollten also Objekte, die nicht in der ufo.hst stehen, eine Object Id größer als 1000 haben (das ist die maximale Anzahl Objekte in ufo.hst). Siehe auch: General Object Destruction (Datensatz 42), die Datei UFO.HST
Gesendet, wenn: Spieler hat eine Datei vom Host angefordert (mit dem Befehl send), möglicherweise auch in anderen Fällen Gesendet an: betreffenden Spieler Mit diesem Datensatz kann eine Datei vom Host zum Spieler übertragen werden. Er enthält einen 13 Byte großen Header gefolgt vom Inhalt der Datei. Der File Name enthält den Dateinamen, falls nötig mit einem Nullbyte am Ende. Es sind nur 8.3-Dateinamen (DOS) zulässig, die maximal 12 Zeichen haben. Die Flags enthalten zusätzliche Informationen, die die Datei beschreiben. Momentan wird nur das niederwertigste Bit benutzt, alle anderen sind 0 (für spätere Verwendung reserviert).
Dateien größer als 32k können hiermit nicht gesendet werden. Wir planen eine Möglichkeit, das in naher Zukunft doch zuzulassen. Wenn du diese Funktionalität jetzt benötigst, nerv uns :-) Momentan wird dieser Datensatz für folgende Funktionen benutzt:
Addon-Programme können diesen Datensatz für ähnliche Zwecke nutzen.
Gesendet, wenn: Tarnung versagt auf einem Schiff Gesendet an: Besitzer des Schiffes Dieser Datensatz berichtet über versagte Tarnung. Bis auf Berichte von Tachyonen-Pulsen wird dieser Eintrag nur gesendet, wenn AllowCloakFailMessages aktiviert ist. Dieser Datensatz wurde durch die allgemeine Fehlermeldung ersetzt, siehe dort für eine Beschreibung des Feldes Reason. Dieser Datensatz wird der Kompatibilität wegen immer noch gesendet.
Gesendet, wenn: Loki enttarnt ein Schiff. In PHost 4.0/3.4d und eher wird dieser Datensatz nur gesendet, wenn das enttarnte Schiff einen Planeten orbitiert. Gesendet an: Besitzer des Loki, (v4.1c:) Besitzer des enttarnten Schiffs Das Feld Before Movement gibt an, ob die angegebene Position vor (1) oder nach (0) der Bewegung gescannt wurde. Wenn dieses Feld fehlt, kannst du die relative Position des Datensatzes in der Datei als Hinweis nutzen.
Mit diesem Datensatz werden die ursprünglichen Besitzer von ferngesteuerten Schiffen übertragen, die der Spieler diesen Zug sieht. Dieser Datensatz enthält ebenfalls Informationen über Schiffe des Spielers, die nicht für die Fernsteuerung freigegeben sind. Dieser Datensatz hat eine variable Größe, die von der Anzahl Schiffe abhängt. Wenn der Datensatz die Länge 4*N Bytes hat, enthält er N Einträge, die jeweils eine Schiffs-Id und den Status des Schiffes enthalten.
Gesendet, wenn: immer Gesendet an: jeden Spieler Dieser Datensatz enthält die Aktivitätspunkte (PAL) eines Spielers, sowie die Punkte, die diesen Zug dazugewonnen bzw. verfallen sind. PBPs: In PHost 4.0f/3.4i und neuer kann die Menge verbrauchter PBPs berechnet werden als
In vorigen PHost-Versionen ist Old Level der Stand nach dem Verbrauch der PBPs. Damit ergibt die Gleichung Null. In diesem Fall können die verbrauchten PBPs als Differenz zwischen dem New Level des letzten Zuges und dem Old Level dieses Zuges ermittelt werden. Wenn keine PBPs verwendet werden, ergeben beide Methoden einen PBP-Verbrauch von 0. Siehe Details zu Baupunkten für mehr Informationen.
Gesendet, wenn: Spieler hat wartende Bauaufträge Gesendet an: jeden Spieler Dieser Datensatz enthält die Baulisten-Eintrage eines Spielers. Die Länge des Datensatzes hängt von der Anzahl Bauaufträge ab, pro Bauauftrag ist ein Eintrag von 10 Bytes enthalten. Die Base Id ist die Sternenbasis, die das Schiff baut. Position ist die Position in der globalen Bauliste, an Position 1 steht das Schiff, das als nächstes gebaut wird. Priority ist die Priorität des Schiffes, die höchste Priorität wird zuerst gebaut. Bauaufträge können ihre Position von Zug zu Zug ändern, entsprechend ihrer Prioritäten. Ein Bauauftrag rutscht nicht zwingend ständig in der Liste vorwärts.
Gesendet, wenn: Schiff innerhalb eines Fangminenfeldes hat keinen Treibstoff mehr Gesendet an: Besitzer des Minenfeldes Schiffe können leerlaufen, wenn sie eine Fangmine treffen, oder wenn sie Treibstoff verlieren, weil sie einfach nur in dem Minenfeld stehen. Letzteres passiert nur bei Fangminenfeldern, die den Crystals gehören, ersteres passiert bei allen Fangminen. Wenn das Schiff einen Ramscoop hat, hat es nachher möglicherweise immer noch Treibstoff. Der Ramscoop produziert den Treibstoff nach der Bewegung, nachdem die Fangminen Sprit abgezogen haben.
Gesendet, wenn: Schiff führt Rebel Ground Attack aus Gesendet an: Besitzer des Schiffes, und Besitzer des Planeten Dieser Datensatz enthält nur die Information, ob der Planet Eingeborene hat oder nicht. Die Rasse der Eingeborenen wird nicht übertragen. Das Feld Rebel Player enthält den Besitzer des angreifenden Schiffes, falls mehrere Spieler die Rebels spielen.
Gesendet, wenn: ein General Object wurde zerstört Dieser Datensatz kann von Addon-Programmen genutzt werden, um die Zerstörung eines General Object zu melden. PHost selbst erzeugt diesen Eintrag nicht. Hiermit soll das Verwalten von Informationen durch Clients vereinfacht werden. Clients können somit veraltete Objekte automatisch verwerfen. Die utilX.dat sollte bezüglich dieses Eintrags in chronologischer Reihenfolge verarbeitet werden: ein General-Object-Eintrag, der direkt oder indirekt von diesem Eintrag (für das gleiche Objekt) gefolgt wird, berichtet von einem neuen Objekt, welches sofort wieder zerstört wurde. Folgt zuerst ein Bericht über eine Zerstörung und dann ein neues Objekt mit den selben Id/UtilCode, so wurde das Objekt zerstört und ein neues erschaffen. Nach den beiden hier definierten Feldern können Programm weitere Daten ablegen, zum Beispiel den Grund für die Zerstörung. Siehe auch: General Object (Datensatz 33)
Gesendet, wenn: Minenfeld-Restriktionen sind aktiv (MaximumMinefieldsPerPlayer) Gesendet an: alle Spieler Dieser Datensatz ist veraltet und wird möglicherweise in Zukunft entfernt. Die selben Informationen werden seit PHost 3.4d in Datensatz 51 übertragen. Dieser Eintrag wird gesendet, wenn Minenfeld-Limits aktiv sind. Das Feld Allowed enthält für jeden Spieler die erlaubte Anzahl Minenfelder (MaximumMinefieldsPerPlayer). Das Feld Laid enthält die Anzahl Minenfelder für jeden Spieler: du erfährst die Anzahlen deiner Verbündeten, die dir das Minenfeld-Privileg bieten. Positionen von Spielern, die du nicht sehen sollst, sind 0xFFFF (alle Bits 1).
Gesendet, wenn: eine Aktion schlägt fehl Gesendet an: Besitzer der Einheit, die die Aktion ausführen wollte Dieser Datensatz ist als eine allgemeine Möglichkeit zum Melden von Fehlern gedacht, damit man nicht so viel raten muss, wenn etwas schiefgelaufen ist. Das Feld Action identifiziert die fehlgeschlagene Aktion; per Konvention ist das eine utilX.dat-Datensatznummer, oder eine größere Zahl, falls kein dazugehöriger Datensatz existiert. Das Feld Cause gibt an, warum die Aktion fehlgeschlagen ist. Der Datensatz lässt Raum für zusätzliche Informationen. Fehlercodes: Die folgenden Werte für Cause sind momentan definiert. Noch nicht alle werden bereits verwendet. Die ersten Codes sind identisch zu denen, die bei der Meldung über fehlgeschlagene Tarnung benutzt werden.
Momentan benutzte Codes: Es folgen alle Kombinationen aus Action und Cause, die PHost momentan erzeugt.
Gesendet, wenn: Planet wurde mittels des Befehles give übergeben. Gesendet an: alter und neuer Besitzer Dieser Datensatz hat das gleiche Format wie der Bericht über Schiffshandel.
Dieser Datensatz hat das selbe Format und die selbe Bedeutung wie Datensatz 0, siehe dort für mehr Informationen. Mit diesem Datensatz werden Minenfelder mit Id-Nummern über 500 übermittelt. Wenn ein Spieler AllowMoreThan500Minefields ausgeschaltet hat, aber ein Minenfeld mit einer Id größer 500 zu melden ist, nutzt PHost diesen Datensatz. Wenn AllowMoreThan500Minefields eingeschaltet ist, werden alle Minenfelder mit Datensatz 0 gemeldet.
Gesendet, wenn: es gibt nicht belegte Planeten-Ids, du spielst also auf einer Karte mit weniger als 500 Planeten. Gesendet an: alle Spieler Dieser Datensatz listet alle Planeten-Ids, die nicht existieren. Clients können diese Informationen nutzen, um ihre Sternenkarte zu aktualisieren. Dieser Eintrag ist seit Version 3.4c definiert, wird aber erst seit Version 4.1a/3.5a tatsächlich generiert.
Gesendet, wenn: immer Gesendet an: jeden Spieler Dieser Datensatz ist veraltet und wird durch Datensatz 51 ersetzt, der verschiedene Punktestände berichten kann. Dieser Datensatz enthält die PAL-Werte aller Spieler. Die Option BuildPointReport definiert, welche Einträge enthalten sind. Werte, die du nicht wissen sollst, sind -1 (0xFFFFFFFF). Im Gegensatz zu der Subraumnachricht, die nur gesendet wird, wenn Daten von mehr als einem Spieler vorhanden sind, wird dieser Datensatz immer gesendet.
Dies ist eine Möglichkeit, allgemeine schiffsbezogene Punktestände zu melden. Der Name enthält einen menschenlesbaren Namen des Punktestands, der Score Type enthält eine Bezeichnung für den Punktestand, die von Programmen ausgewertet werden kann. Das Score Limit gibt eine wichtige Grenze für den Punktestand an (kein hartes Limit: Punktestände können höher werden, aber wenn das Limit erreicht wird, passiert etwas "interessantes"). Die Bedeutung dieses Feldes hängt von der Art des Punktestandes ab. Das Feld kann auch -1 (=65535) sein, wenn es kein Limit gibt. Programme können, dank des Name-Feldes, alle Punktestände sinnvoll bezeichnen. Wenn ein Programm nach einem bestimmten Punktestand sucht, kann es das Score Type-Feld nutzen. Die drei Steuer-Felder werden von einer Folge aus Schiffs-Ids und Schiffs-Punktestand gefolgt. Die Anzahl solcher Felder kann aus der Größe des Datensatzes ermittelt werden. Punktestände:
Dieser Datensatz hat das gleiche Format wie der Datensatz mit den Planeten-Punkteständen. Wenn möglich haben die Bezeichner der Punktestände die gleichen Werte.
Dies ist eine Möglichkeit, allgemeine planetenbezogene Punktestände zu melden. Dieser Datensatz hat das selbe Format wie Datensatz 49 (Schiffs-Punktestand). Die drei Steuer-Felder werden von einer Folge aus Planeten-Ids und Planeten-Punktestand gefolgt. Die Anzahl solcher Felder kann aus der Größe des Datensatzes ermittelt werden. Punktestände:
Dieser Datensatz ist eine allgemeine Möglichkeit, Punktestände zu übermitteln. Der Name ist der Name dieser Punktetabelle in menschenlesbarer Form. Der Score Type enthält eine Bezeichnung der Punktetabelle, die von Programmen benutzt werden kann. Das Win Limit gibt an, wie viele Punkte ein Spieler erreichen muss, um das Spiel zu gewinnen, das Turn Limit gibt an, wie lange er diesen Punktestand halten muss. Beide Werte können -1 sein, wenn es kein solches Limit gibt. Das Feld Scores enthält schließlich die Punktestände aller 11 Spieler. Wenn der Empfänger des Datensatzes einen Wert nicht sehen darf, steht in dem entsprechenden Feld eine -1 (=0xFFFFFFFF). Programme können, dank des Name-Feldes, alle Punktestände sinnvoll bezeichnen. Wenn ein Programm nach einem bestimmten Punktestand sucht, kann es das Score Type-Feld nutzen. Punktestände:
Gesendet an: jeden, der das Schiff sieht Dieser Datensatz enthält die schiffsspezifischen Funktionen für ein Schiff (siehe AssignTo=Ship). Jeder Datensatz kann mehrere Funktionen enthalten, es können aber auch mehrere Datensatz für ein Schiff auftreten. Funktionsnummern sind ganze Zahlen, die folgende Werte annehmen können:
Dieser Eintrag enthält nur Funktionen, die dem Schiff direkt zugewiesen wurden (AssignTo=Ship). Funktionen, die einem bestimmten Schiffstyp zugewiesen wurden (AssignTo=Hull) werden nicht so übermittelt, dafür muss hullfunc.txt gelesen werden.
Gesendet, wenn: zwei Minenfelder explodieren, weil sie überlappen Gesendet an: alle Spieler Dieser Eintrag wird erzeugt, wenn nach MinesDestroyMines zu viele Rundungsfehler aufgetreten sind, um die Situation auf symmetrische Weise (Eintrag 29) aufzulösen. PHost verwendet Typ 53 und Typ 29 je nach Bedarf.
Gesendet an: alle Spieler, die jemanden zum Feind deklariert haben Dieser Datensatz wird an jeden Spieler gesendet, der mit dem Befehl enemies add andere Spieler als seine Feinde deklariert hat. Mit diesem Eintrag wird der aktuelle Zustand übermittelt, als Erinnerung für den Spieler. Der Datensatz besteht aus einem Wort, welches pro Spieler ein Bit enthält:
Jedes Bit ist 1, wenn du mit den entsprechenden Spieler als Gegner definiert hast. Das niederwertigste Bit und die Bits 12 bis 15 sind unbenutzt und haben den Wert 0.
Gesendet, wenn: ein Schiff hat etwas produziert Gesendet an: Besitzer des Schiffes, sowie Remote-Control-Besitzer Es gibt eine Anzahl Schiffsfunktionen, Missionen und Kommandocode-Aktionen, mit denen ein Schiff Dinge produziert. Mit diesem Eintrag wird der Erfolg gemeldet. Das Feld Cargo Type enthält die Art des produzierten Materials:
Das Feld How Produced erläutert, was zur Produktion verbraucht wurde:
Gesendet, wenn: ein Schiff wurde repariert Gesendet an: Besitzer des Schiffes, sowie Remote-Control-Besitzer Dieser Datensatz wird gesendet, wenn ein Schiff irgendwie repariert wurde. Er beschreibt den Umfang der Reparaturen. Wenn eine andere Einheit an der Reparatur beteiligt war, wird sie hier ebenfalls identifiziert.
Gesendet, wenn: es gibt stufenbeschränkte Schiffsfunktionen Gesendet an: alle Spieler Dieser Eintrag gibt die Nummern an, die PHost für modifizierte Schiffsfunktionen in Eintrag 52 verwendet. Das Feld Function Id enthält die Nummer, die in Eintrag 52 auftaucht 52 (z.B. 65). Das Feld Basic Function ist die zugrundeliegende Schiffsfunktion, zum Beispiel 10 für AntiCloak. Das Feld Experience Level Mask enthält ein Bitfeld mit all den Erfahrungsstufen, auf denen das Gerät funktioniert. Bit 0 bezeichnet dabei die Basis-Stufe, Bit 1 bezeichnet Stufe 1, und so weiter. Jeden Zug werden die Zuordnungen an alle Spieler gemeldet. Während eines Zuges sind die Zuordnungen konstant, können sich aber zwischen Zügen ändern. Falls ein künftiger PHost neue Modifikatoren einführt, wird dieser Datensatz erweitert um auch die neuen Definitionen zu übermitteln.
Gesendet, wenn: ein Schiff explodiert in einem Minenfeld Gesendet an: alle Spieler Dieser Eintrag wird an alle Spieler gesendet, wenn ein Schiff in einem Minenfeld so viel Schaden bekommt, dass es explodiert. Der Datensatz wird zusätzlich zu Eintrag 2 gesendet, welcher nur an beteiligte Spieler geht. Dieser Eintrag enthält keine Identifikation des explodierten Schiffes, sondern signalisiert den Spielern nur, dass an diesem Punkt im Universum etwas passiert. Winplan-Nutzer erhalten bis zu 50 dieser Datensätze in einem eigenen Bereich ihres Results, so dass Winplan diese auf der Sternenkarte darstellt. Siehe auch: Datensatz 2 - Minentreffer Informationen für Host-Addon-EntwicklerDieser Abschnitt enthält Informationen für Entwickler von Programmen, die Daten vom Host an die Spieler senden wollen. Externe DatenAddon-Programme können ihre eigenen Daten in utilX.dat schreiben. Es ist dem Programm freigestellt, welche Informationen es schreibt, du kannst neue Datensätze einführen, wenn du magst. Um Kollisionen zu vermeiden, kannst du die einen Bereich Datensatz-Nummern reservieren. Kontaktiere dazu die PHost-Gruppe. Momentan sind folgende Bereiche reserviert:
Um Daten in eine utilX.dat aufzunehmen, schreibe sie einfach in utilX.ext. Wenn PHost die endgültige utilX.dat erstellt, hängt er die utilX.ext automatisch an. Dies passiert in Phase 3 des Hostlaufes (während der Erzeugung der utilX.dat). Beispielsweise hängt PHost den Inhalt der util1.ext, falls diese im Spielverzeichnis existiert, an die util1.dat an, nachdem er seine eigenen Daten geschrieben hat. Danach wird die util1.ext gelöscht. Es ist deine Aufgabe, beim Schreiben der utilX.ext auf Plattformunabhängigkeit (Datenfeld-Größen, Endianness) zu achten. Versuche nicht, Clients durcheinander zu bringen, erzeuge keine Datensätze größer als 32k, und verwende die PHost-Einträge nicht für Dinge, für die sie nicht zuständig sind. PHost überprüft den Inhalt der utilX.ext nicht. Host-Schritte ersetzenDer Inhalt von utilX.ext kommt immer nach den normalen PHost-Meldungen. Das ist nicht immer erwünscht, insbesondere, wenn du einen Host-Schritt ersetzt. Wenn du beispielsweise den Befehl give extern behandelst, sollten die Einträge zu Schiffsübergaben vor den Einträgen zu Kämpfen kommen, um Programme, die Protokoll über die Besitzer eines Schiffes führen, nicht durcheinander zu bringen. Um dies zu erreichen, kannst du auch in util.tmp statt utilX.ext schreiben. PHost sammelt Einträge in util.tmp, bevor die endgültigen utilX.dat erstellt werden. Jeder Eintrag in util.tmp hat folgendes Format:
Hierbei ist Receiver der Empfänger des Datensatzes, der Rest entspricht den Informationen aus utilX.dat. Obwohl PHost vor 4.0/3.4d ebenfalls eine Datei util.tmp benutzt, kann diese nicht beim Ersetzen von Host-Schritten auf diese Weise genutzt werden. Diese Versionen nutzen ein anderes Dateiformat und halten teilweise die Datei auf eine Weise offen, dass andere Programme sie nicht öffnen können. Ufos - UFO.HSTZusätzlich zu den General Object-Datensätzen gibt es eine weitere Möglichkeit namens Ufos, mit der man Spielern Objekte anzeigen kann. Diese Methode wurde mit HOST 3.20 und Winplan 3.5 eingeführt. PHost unterstützt diese Ufos ebenfalls. Um den Spielern ein Objekt anzuzeigen, schreibst du es einfach in ufo.hst, PHost erledigt den Rest. ufo.hst besteht aus 100 oder 1000 Einträgen des folgenden Formats:
Das Feld Color ist von Null verschieden, wenn dieser Ufo-Eintrag verwendet wird. Es gibt die Farbe an, in der das Ufo auf der Sternkarte angezeigt wird. Dabei werden die normalen VGA-Farben verwendet:
Die Scan Range-Felder geben an, aus welcher Entfernung ein Planet bzw. Schiff dieses Objekt sehen kann. Der Host wertet diese Felder aus und filtert die Datei entsprechend. Der Object Type gibt den Typ des Objektes an. Deine Programme sollten nur Einträge nutzen, die sie kennen, oder die noch frei sind. PHost sendet Spielern auch Ufos mit Wurmlöchern, mit Id-Nummern beginnend bei WormholeUFOsStartAt. Alle Ufos in diesem Bereich werden dadurch ausgeblendet. Vorteile: Ufos funktionieren mit HOST und PHost. Viele Client-Programme unterstützen Ufos. Bekannte Programme sind unter anderem EchoView, PCC, VPA, sowie natürlich Winplan. Ufos sind einfach zu handhaben. Nachteile: General Objects sind flexibler, da hier der Addon-Autor entscheiden kann, wer das Objekt sieht. Außerdem können mit diesen Objekten zusätzliche Informationen übertragen werden. Subraum-NachrichtenutilX.dat wird Subraumnachrichten nicht ersetzen, Spieler wollen immer noch lesen. Damit Client-Programme Nachrichten mit Sternkarten-Positionen in Verbindung bringen können, sind sie seit HOST 3.20 mit Kennungen (message tags) versehen. PHost benutzt diese teilweise seit Version 2.6, und verwendet sie durchgehend seit 3.3b. Die Kennung steht am Anfang der ersten Zeile der Nachricht und sieht so aus:
Hier sind alle bekannten Nachrichten-Kennungen:
Letzte Aktualisierung 31 May 2015. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
support@phost.de for support, ideas, bug reports, questions. Contact Details | Mail