ECheck V 4.1.4
Was geht? | Was geht nicht? | Installation | Aufruf | Umgebungsvariablen | ||||
---|---|---|---|---|---|---|---|---|
Eingaben | Meta-Befehle | Testergebnis | Sonstiges |
---|
ECheck ist ein Syntax-Checker für das PBeM Eressea. Er testet eine Zugdatei auf Rechtschreibfehler und meldet Fehler.
Das Programm läuft auch auf dem Spiel-Server und verschickt für alle eingehenden Züge das Testergebnis.
nach oben
Was ECheck kann
ECheck macht hauptsächlich eine "Rechtschreibprüfung", es werden also falsch geschriebene Befehle und Talente angemerkt.
In der Zugvorlage des Servers stehen aber auch Informationen über Anzahl und
Silbervorrat der Einheiten drin. Dies versucht ECheck auch zu
berücksichtigen, wenn Silber für die Ernährung, das Rekrutieren von neuen
Personen, den Gebäudeunterhalt oder teure Talente benötigt wird.
Trotzdem kann ECheck dabei natürlich nicht (bzw. nur eher mangelhaft)
berücksichtigen, daß Einheiten Geld verdienen können oder gar Silber von
Einheiten anderer Parteien bekommen.
Ebenso kann ECheck aus der Zugvorlage entnehmen, ob eine Einheit auf einem Schiff ist (in den [ ] im Kommentar steht sowas wie "s124", wenn die Einheit auf Schiff 124 ist, bzw. "S124", wenn sie das Kommando über Schiff 124 hat), ein Gebäude unterhalten muß (Markierung "U200" heißt, daß für ein Gebäude 200 Silber bezahlt werden muß, "U250+" sind 250 Silber und noch etwas anderes, wie z.B. Holz bei der Schmiede) und Untote oder Illusionen sind mit einem "I" markiert.
ECheck macht folgende Tests:
- Schreibfehler in den Befehlen
- hat die Einheit einen langen Befehl?
- Rekrutiert die TEMP-Einheit oder bekommt sie Personen?
- Ohne Option -l (Silberpool): bekommt die TEMP-Einheit genug Geld zum Rekrutieren?
- Test auf Geld und Personen
- Einheiten mit dem Befehl ARBEITE bekommen automatisch 11 Silber pro Person angerechnet, Einheiten mit TREIBE STEUERN EIN oder UNTERHALTE 20 Silber pro Person. Dadurch wird deren Versorgung sichergestellt und auch ohne Silber-Reserven keine Warnung ausgegeben. Trotzdem können natürlich Warnungen auftauchen, wenn die Einheiten eigentlich mehr verdienen (und damit die Ernährung anderer Einheiten sicherstellen), aber deren Silbervorrat vom Rundenanfang im Zug verbraucht wird.
- Test, ob RESERVIERE xxx SILBER nicht mehr Silber anfordert, als
in der Region vorhanden.
Gibt die Einheit Silber weg, muß RESERVIERE vor den Befehlen GIB und LIEFERE bzw. @GIB der Einheit stehen. - Test, ob Einheiten, die gelehrt werden, auch lernen, und ob Lehrer nicht mehr Personen lehren, als sie können.
- Einheiten, die Luxusgüter kaufen, bekommen den Grundpreis abgezogen.
Dies kann natürlich zu wenig sein, da nicht vorhersehbar ist, wieviele Güter letztlich zu welchem Preis gekauft werden. - Einheiten, die teure Talente (momentan Spionage, Magie, Alchemie, Taktik
und Kräuterkunde) lernen, bekommen die Lernkosten abgezogen, ebenso
werden die Kosten für Zauber abgezogen.
Unter Eressea sind die Lernkosten abhängig von den Talentpunkten der Einheit. Man kann mittels LERNE MAGIE silberbetrag die Lernkosten für ECheck angeben; dem Server ist die folgende Zahl egal.
ECheck trennt Einnahmen und den Silbervorrat der Einheiten und kann so Silbermangel erkennen, da alle Ausgaben außer der Ernährung vor sämtlichen Einnahmen stattfinden. - Einheiten, die ein Schiff verlassen und das Kommando innehatten,
übergeben es an die erste Einheit in der Zugvorlage, die auf dem Schiff
ist. Ebenso bekommen Einheiten, die als erste ein Schiff betreten, daß
Kommando darüber (was natürlich falsch sein kann, wenn das Schiff von
einer anderen Partei gesteuert wird).
Sicherer ist der Befehl GIB einheit KOMMANDO, der das Kommando auch an fremde Einheiten übergeben kann. Außerdem kann man damit auch das Kommando von Gebäuden übergeben und somit bei unterhaltspflichtigen Gebäuden sicherstellen, daß das Silber von der richtigen Einheit abgezogen wird. - Einheiten mit NACH und FAHRE (und passendem TRANSPORTIERE) werden getestet und deren Silber wechselt die Region.
- Schiffsbewegung, also Einheiten, die auf einem Schiff sind, welches sich bewegt, soweit möglich.
- Test, ob Lehrer- oder Schgüler-Einheiten nicht leer sind
- Test, ob Lehrer noch Plätze frei haben bzw. Schüler noch Lehrer gebrauchen könnten. Dies ist erst ab Warning-Level 5 aktiviert.
nach oben
Was ECheck nicht kann
ECheck hat nur wenige Daten über die Einheiten und die Partei. Daraus ergibt sich, daß folgende Tests in der Regel nicht möglich sind:
- hat die Einheit genug Geld und Personen?
ECheck liest die Anzahl Personen einer Einheit und deren Silbervorrat aus der Befehlsvorlage und berücksichtigt dies. Da alle Ausgaben vor Einnahmen gemacht werden, ist dieser Test nur so lange sicher, wie nicht Silber von anderen Parteien bekommen und verplant wird.
Der wirkliche Verdienst z.B. von UNTERHALTE kann nicht berücksichtigt werden, weil ECheck keine Informationen hat, welches Talent die Einheit hat und wieviel Silber zu verdienen ist. Dies führt vor allem bei knapper Kalkulation ("von der Hand in den Mund") zu Warnungen wegen Silbermangel.
Abhilfe schafft hier ein kleiner Trick: hinter UNTERHALTE und TREIBE kann man einen Silberbetrag angeben. Dies wird von ECheck und vom Server berücksichtigt.
Weiß man also z.B., daß man mit einer Einheit 6000 Silber durch Steuereintreiben verdient, so schreibt man einfach TREIBE 6000 in die Befehlsdatei, und schon stimmt es wieder. - hat die Einheit das passende Talent und Gegenstände?
Bei MACHE und anderen Befehlen kann ECheck nicht wissen, ob die Einheit überhaupt das passenden Talent hat und ihre Vorräte an Eisen, Holz, Steinen usw. reichen. - klappt die Bewegung?
ECheck weiß nichts von Pferden, Straßen und der Karte der Umgebung. Darum kann ECheck bei NACH, ROUTE usw. nicht testen, ob die Bewegung wie gewünscht klappen kann.
ECheck prüft unter Eressea bei ROUTE, ob diese zyklisch verläuft und warnt, wenn eine Route mit PAUSE beginnt. - genauere Tests zu Zaubern.
Bei Eressea werden die optionalen Parameter REGION x y und STUFE n zwar syntaktisch überprüft, aber ECheck weiß nicht, welche Zauber welche Parameter erlauben; hier obliegt es dem Spieler, entsprechend vorsichtig zu handeln.
Dadurch, daß ECheck keine wirklichen Einheiten-Daten hat, kann es also zu Fehlermeldungen kommen, die letztlich keine sind.
Der Silberpool-Modus (Option -l) ist nur bedingt anwendbar: Einheiten auf Schiffen, die von einer anderen Partei gesteuert werden, werden nicht aus der Region bewegt (weil deren Ziel nicht bekannt ist), ebenso passiert dies z.B. bei magischer Bewegung oder Bewegung in besondere Richtungen.
Von Spenden (HELFE SILBER) und Silber-Übergaben (GIB xxx yyy SILBER) anderer Parteien hat ECheck natürlich nicht die blasseste Ahnung. Daher sind hier Warnungen vorprogrammiert.
Auch der DEFAULT-Befehl kann zu Effekten führen, die als Fehler angemerkt werden, obwohl sie keine sind.
Einige der oben genannten Effekte lassen sich aber mit den Meta-Befehlen eingrenzen.
nach oben
Installation
Für eine komplette Installation braucht man neben dem Programm selber die Zusatzdateien seiner Sprache, in der alle Gegenstände, Talente, Zauber usw. aufgelistet sind. Das Format der Dateien ist in den Dateien selbst erklärt.
Wo das Programm und die Zusatzdateien liegen, ist völlig egal, solange das System das Programm findet und ECheck die Zusatzdateien finden kann; dazu gibt es drei Möglichkeiten:
- das Locale-Verzeichnis (z.B. de) muß in dem Verzeichnis liegen, wo der Aufruf stattfindet (unter Linux ist /usr/local/lib/echeck ebenfalls voreingestellt)
- die Umgebungsvariable ECHECKPATH zeigt auf das Verzeichnis, wo das Locale-Verzeichnis liegt (z.B. C:\Eressea\ECheck; dann müssen die Dateien in C:\Eressea\ECheck\de liegen)
- man benutzt den Parameter -Ppfad für einen Pfad (z.B. echeck -P/home/faroul/Eressea/zug ...)
nach oben
Aufruf
ECheck [-<Optionen>] Zugdatei
Optionen:
- -
- Verwendet stdin anstelle einer Eingabedatei.
- -b
- unterdrückt Warnungen und Fehler (brief)
- -q
- unterdrückt sonstige Ausgaben (quiet)
- -rnnn
- Legt Rekrutierungskosten auf nnn Silber fest
- -c
-
schreibt die Warnungen und Fehler in einer Compiler-ähnlichen Form:
dateiname|(zeile)|warnlevel|text
fette Texte stehen fest, die anderen sind sinngemäß zu ersetzen. Warnlevel 0 sind Fehler. - -m
-
schreibt die Warnungen und Fehler für Magellan lesbar:
dateiname|zeile|warnlevel|text
fette Texte stehen fest, die anderen sind sinngemäß zu ersetzen. Warnlevel 0 sind Fehler. - -e
- schreibt die geprüfte Datei auf stdout, Fehler nach stderr
- -E
- schreibt die geprüfte Datei auf stdout, Fehler auch nach stdout
- -h
- zeigt diese kleine Hilfe an
- -hb
- zeigt Liste der Befehle für befehle.txt
- -hp
- zeigt Liste der Parameter für parameter.txt
- -hr
- zeigt Liste der Richtungen für richtungen.txt
- -hm
- zeigt Liste der Meldungen für meldungen.txt
- -hf
- zeigt Liste der Dateien, die ECheck versucht, einzulesen
- -s
- verwendet stderr für Warnungen, Fehler etc., kein stdout
- -p
-
(zusammen mit -e) generiert eine "Piping-taugliche" Ausgabe: von
Gegenständen, Tränken und Kräutern wird nur der erste Teil des Namens
ausgegeben.
Dies ist für den DEFAULT-Befehl notwendig, wenn die Ausgabe von ECheck als Eingabe eines weiteren ECheck-Laufes benutzt wird. Dies geht nicht bei Zaubern, da dort das erste Wort nicht eindeutig ist! - -n
- zählt Zeilen mit NameMe-Kommentaren (;;) nicht mit
- -l
- Silberpool-Modus: fehlendes Silber wird aus der Region geholt
- -noship
- Keine Warnungen "Einheit will Schiff bewegen und hat evlt. kein Kommando"
- -nolost
- Keine Warnungen "Einheit verliert Silber und evtl. Gegenstände
- -noroute
- Keine Warnungen "ROUTE ist kein Kreis"
- -w[n]
-
Warnung der Stufe n (default: 4). Die Warning-Levels:
- - es werden keine Warnungen ausgegeben
- - Syntaktische Fehler
- - fehlende Texte, Anzahl/Nummer fehlt, langer Befehl fehlt, logische Fehler (LEHRE ohne LERNE usw.)
- - zu wenig Geld/Silber/Personen bei Einheiten, zu wenig Silber in Regionen, kein Kommando usw.
- - "Vorsichtshalber"; Warnungen, bei denen auch ECheck nicht sicher sein kann
- - Lehrer/Schüler-Check
- -x
- Normalerweise beginnt ECheck die Zeilenzählung am Anfang der Datei. Benutzt man -x, so beginnt ECheck bei PARTEI.
- -Ppfad
-
Pfadangabe für die Zusatz-Dateien.
Das ECheck-Locale wird angehängt (pfad/de/...). - -Lloc
- Setzt das ECheck-Locale auf loc.
- -vMainversion.Level
-
Da viele Spieler zum Teil völlig veraltete ECheck-Versionen benutzen,
wurde hier ein Mechanismus entwickelt, der die Spieler darauf
hinweist.
In der Zugvorlage des Servers wird immer die aktuelle ECheck-Version benutzt.
Beispiele:
- echeck -r80 Zug
- Testet die Datei Zug. Die Rekrutierungskosten sind auf 80 Silber festgelegt.
- echeck -c -e Zug >mailzug
- Testet die Datei "Zug". Die Fehlermeldungen werden Compiler-ähnlich ausgegeben, und die getestete Datei wird nach mailzug geschrieben.
nach oben
Umgebungsvariablen
ECheck liest direkt nach dem Start die Umgebungsvariablen ECHECKPATH, welche den Standard-Suchpfad enthält, und ECHECKOPTS, in der alle Optionen angegeben werden können. Beispiel:
setenv ECHECKOPTS "-c -l -r75" setenv ECHECKPATH "~/eressea/zug:/usr/local/lib/echeck:."
nach oben
Eingaben in der Zugdatei
Die meisten Optionen können auch in der Zugdatei angegeben werden. Dazu muß vor dem ersten REGION der Zugdatei eine Kommentarzeile stehen, die die Optionen enthält. Zur Erkennung muß diese Zeile mit dem Wort ECHECK beginnen:
; ECHECK -r80 -w2Gesperrt sind die Optionen -e, -E, -P, -s, -h und -?.
Man kann außerdem direkt nach dieser Zeile eine "Version" der Züge angeben. Diese Zeile wird komplett auf den Bildschirm ausgegeben und ist somit auch in der Zugbestätigung vom Server:
; VERSION .....oder
; ECHECK VERSION .....
In Eressea beendet das Ende der Zeile einen Befehl. Damit man längere Befehlszeilen eingeben kann ohne daß z.B. das Mailprogramm falsch Umbrüche einbaut, erkennt ECheck den Backslash \ als "Zeilenverlängerer".
Ebenso erkennt ECheck nicht-eindeutige Abkürzungen nicht "korrekt". Es sei jedem Spieler empfohlen, seine Befehle nur eindeutig abzukürzen, zumal ich BEN E "Lehrer" und G 76 7 J deutlich schwieriger zu lesen finde als Benenne Einheit "Lehrer" und Gib 76 7 Juwelen...
nach oben
Zu guter letzt gibt es einige "Meta-Kommandos" für ECheck. Diese Kommandos werden hinter dem Kommentar-Befehl // oder einem ; am Zeilenanfang gegeben.
- ECHECK NACH x y
- Hier kann man angeben, wohin eine Einheit z.B. auf einem Schiff einer anderen Partei befördert wird. ECheck berücksichtigt dies.
- ECHECK ROUTE
- Hiermit wird das "noroute"-Flag gewechselt. Hat ECheck also nicht-zyklische ROUTEn zuvor angemerkt, tut es das nach ECHECK ROUTE nicht mehr. Ein weiteres ECHECK ROUTE schaltet die Warnungen dann wieder an.
- ECHECK KOMMANDO [nummer]
- Die Einheit bekommt das Kommando über das Schiff, auf dem sie ist oder Schiff nummer. Dadurch unterbleibt die "hat kein Kommando"-Warnung.
- ECHECK EMPTY
- Der Einheit wird alles Silber genommen. Dadurch unterbleibt die "verliert Silber"-Warnung, wenn die Einheit alle Personen abgibt.
- ECHECK silberbetrag
- Der Region der Einheit wird der entsprechende Betrag als zum Silbervorrat addiert. So kann man z.B. für Botschafter, die von einer anderen Partei mit HELFE SILBER ernährt werden, die Warnung vermeiden.
- ECHECK LOHN silberbetrag
- Hiermit kann man festlegen, wieviel Silber in einer Region mit ARBEITE verdient werden kann. Die Zugvorlage des Servers enthält dies automatisch. Dieses Meta-Kommando muß zwischen REGION und dem ersten EINHEIT stehen.
- ECHECK NOWARN
- schaltet direkte Warnungen für die kommende Zeile ab. "Indiirekte Warnungen" wie z.B. zu wenig Silber, Lehrer/Schüler-Check werden hiervon nich beeinflußt.
nach oben
Ein "Testergebnis"
Folgende Befehle werden z.B. eingeschickt. Ich habe die Fehler darin einmal mit einem Kommentar versehen.
PARTEI 123 "EinsZweiDrei" ; ECHECK -l -w4 -r100 REGION 9,10 ; Ger Mani EINHEIT ki8; Herr Müller [1,0$] Unterhalte Gib 4800 1 Person EINHEIT 7530; Frau Müller und Sohn [2,60$] Lerne Unterhaltung EINHEIT alf; Alfred E. Neumann [1,0$] Unterhalte EINHEIT h3z; Ein Bauer [1,0$] Lere 1234 uh4q Temp 77 ; Tippfehler: LEHRE Betrete Burg 4r EINHEIT 5045; Handelsvertreter [1,110$] Lerne Uterhaltung ; Tippfehler: UNTERHALTUNG Gib 4jL 1000 Silber ; Soviel Silber hat die Einheit nicht Betrete Burg 4r REGION 6,10 ; Schubidu EINHEIT 43f; Wanderer [1,110$] Nach Westen REGION 1,10 ; Irgendwo EINHEIT rt4a; Kräuterfrau [1,0$] ; Einheit hat kein Silber Mache Kräuter EINHEIT bote; Bote [1,$30] ; Einheit hat genug Silber für beide, Nach Südosten ; doch sie verläßt die Region NAECHSTER
So sähe die Rückmeldung des Serves aus:
ECheck (Version 4.1.4, Sep 16 2001), Zug-Checker für Eressea - Freeware! Verarbeite Datei `name@email.de,0'.Der Dateiname ist die eMail-Adresse des Absenders, die Zahl hinter dem Komma gibt an, wieviele Züge von der Adresse schon eingetroffen sind.
Rekrutierungskosten auf 100 Silber gesetzt, Warning Level 4. Silberpool aktiviert. Fehler in Zeile 17: Befehl nicht erkannt. `Lere 1234 uh4q Temp 77' Warnung zur Zeile 16: Einheit h3z hat keinen langen Befehl bekommen. `EINHEIT h3z; Ein Bauer [1,0$]'Dies ist ein Folgefehler. Der falsche Befehl Lere, der natürlich Lehre sein sollte, ist so kein langer Befehl. Darum diese Meldung.
Fehler in Zeile 20: Talent nicht erkannt. `Lerne Uterhaltung'Hier stimmt zwar das Talent nicht, aber der Befehl Lerne ist richtig geschrieben und wird als langer Befehl vermerkt.
Warnung zur Zeile 21: Einheit 5045 hat evtl. zu wenig Silber. `Gib 4jL 1000 Silber'Man beachte das evtl.. Es könnte ja sein, daß die Einheit von einer anderen Partei Silber bekommt (wobei auch das schiefgehen könnte, wenn diese fremde Einheit später als die eigene Einheit drankommt...). Bekommt die Einheit von einer anderen Partei z.B. 800 Silber, kann man dies mit dem Meta-Befehl ; ECHECK: 800 "vermerken".
Warnung zur Zeile 30: Das Silber in Irgendwo (1,10) reicht evtl. nicht zum Leben; es fehlen 10 Silber.Auch hier evtl., denn eine fremde Partei könnte auch hier mit Silber aushelfen oder man verdient selber mehr Geld, als ECheck annimmt.
ECheck versucht nach bestem Wissen, die Einheiten auf Schiffen zu bewegen. Dies geht natürlich nur, wenn eine eigene Einheit das Schiff bewegt.
Einheiten, die auf fremden Schiffen sind, bleiben für ECheck an Ort und Stelle, so auch deren Silber. Man kann aber mit dem Meta-Befehl ; ECHECK NACH x y dafür sorgen, daß die Einheit in die Region x,y verschoben wird und so ECheck ggf. genug Silber in der Region vorfindet.
Warnung zur Zeile 19: Einheit 5045 hat -900 SilberDies ist eine weitere Meldung zum Gib 4jL 1000 Silber. Die Einheit hat 110 Silber, davon braucht sie 10 Silber zur Ernährung, kann also 100 Silber weggeben. Es fehlen also besagte 900 Silber.
Es wurden Befehle für 1 Partei und 7 Einheiten gelesen. Es wurden 2 Fehler und 4 Warnungen entdeckt.Meldet ECheck eine Region als Region (also kein Name), so ist keine Einheit dort vertreten, reist aber dorthin (NACH-Befehl). Da ECheck die Namen der Region aus der Zugvorlage liest, kennt es den Namen der Region darum nicht.
nach oben
Sonstiges
Wer Fehler in ECheck findet, schicke mir bitte eine Mail mit Versionsnummer und die Befehlsdatei (zumindest die Ausschnitte, die den Fehler hervorriefen) oder einer möglichst genauen Beschreibung, wo der Fehler auftrat.
ECheck sollte auf allen Systemen ohne Probleme zu compilieren sein. Beispielaufruf mit dem gcc:
gcc -s -O2 -o echeck echeck.c
Probleme mit Umlauten können ggf. durch -DUMLAUTE umgangen werden, da dann eigene Routinen benutzt werden.
ECheck kann man per Download in verschiedenen Formaten bekommen werden.
© 2005 Henning Peters