Ich habe, weil ich ursprünglich nicht vorhatte Vorlage überhaupt zu veröffentlichen,
und weil auch ich ein fauler Mensch bin, Templates und Klassen verwendet deren
Benutzung mir erlaubt ist, die Veröffentlichung des Quelltextes jedoch nicht. Nun
kann man darüber streiten ob das klug war, aber die Tatsache bleibt bestehen. Solange
ich also nicht eine Version ohne diese Anteile schreibe, kann der Source nicht
freigegeben werden.
Es ist leider sehr schwierig diese Teile zu entfernen, weil sie
sehr tiefgreifend in Vorlage verwendet werden und das Programm quasi darum aufgebaut
ist. Ich habe schon vor langer Zeit begonnen eine Version ohne solche Klassen
zu schreiben, aber meine Zeit reicht kaum, dort nennenswerte Fortschritte zu erzielen,
darum wird dies wohl noch eine Weile dauern. Einen auch nur geschätzten Termin gebe
ich nicht bekannt, da ich damit schonmal gründlich daneben lag.
Vorlage ist eine Konsolenanwendung, d.h. es wird z.B. unter Windows nicht durch Doppelklick gestartet, sondern über die Eingabeaufforderung (das "DOS-Fenster"). Wie Vorlage richtig zu benutzen ist erfährt man am besten im Abschnitt über den Aufruf, oder man benutzt im Windows-Fall z.B. WinVorlage.
Achtung: WinVorlage ist sehr veraltet und unterstützt die aktuelle Version von Vorlage nur noch bedingt. Abhilfe ist z.B. Vorlage GUI von Ronny Gorzelitz. Alternativ kann man Vorlage auch aus Magellan, einem komfortablen grafischen Eressea-Java-Client, heraus benutzen.
Parameter für Metabefehle werden, wie auch bei Eressea-Befehlen durch Leerzeichen getrennt. Daraus resultiert, das in Ausdrücken im Gegensatz zu vielen anderen Programmiersprachen keine Leerzeichen vorkommen dürfen. Es empfiehlt sich also danach mal zu schauen.
Vorlage sollte nicht abhängig davon sein, welche Attribute mir zum Zeitpunkt der Implementation bekannt sind. Daher kann es nicht wissen, ob es ein Attribut gibt, und gibt im Zweifelsfall eben nichts (oder 0) zurück. Um das zu unterbinden, bietet sich die Option '--pedantic' an. Sie erzwingt, das die Attribute Vorlage bekannt sein müssen (neue also in der Konfigurationsdatei nachgepflegt werden müssen).
Vorlage berechnet die Kapazität ohne die Fahrer des Wagenzuges abzuziehen. Dies ist halt das tatsächliche Fassungsvermögen (eben die Kapazität) des Zuges. Natürlich kann man ohne die Kutscher nicht fahren, aber das macht den Wert nicht falsch. Um die nutzbare Kapazität zu bekommen muß man das Gewicht der Einheit abziehen, z.B. in einer Funktion:
#func ReitKapazitaet $ENr
{
$kutscher=unit[$ENr].anzahl*races[unit[$ENr].rasse].Gewicht
#return unit[$ENr].kap.reiten-$kutscher
}
Vorlage gibt für region.eisen oder region.laen u.U. negative Werte zurück. Eine -1 bedeutet
dabei, dass es kein Eisen gibt, eine -2 hingegen, das man keine Einheit mit genug Talent in der Region hat, um die Frage
zu beantworten. Ob ein Terrain Eisen oder Laen enthalten kann, legen die entsprechenden Spalten im Kapitel [Terrains] der
Konfigurationsdateien fest. Man muß also vor dem Aufaddieren jeweils prüfen ob der Wert größer 0 ist.
Garnicht. Vorlage verhindert die Ausgabe von Anführungszeichen, weil es bisher in der Strukturbeschreibung
keine Aussagen bezüglich der Behandlung gibt. Die Message-Regeln im CR verwenden allerdings inzwischen den
Backslash zum escapen, so das sich das vermutlich in Zukunft ändern wird. In der Zwischenzeit kann man
sich der Alternativform mit Tilden (~) bedienen.
// Achtung falsch:
// #after 2 { BENENNE EINHEIT "Botschafter Kosh" }
wird zu
// Besser:
// #after 2 { BENENNE EINHEIT Botschafter~Kosh }
bzw. in Ausdrücken
// Wenn es ein Ausdruck ist (unsinniges Beispiel):
// #after 2 { BENENNE REGION '|'+region[0,0].name+'|' }
// oder
// #after 2 { BENENNE REGION change(region[0,0].name,' ','~') }
Eressea behandelt "Foo bar" und Foo~bar gleich, d.h. im späteren Report
sind die Tilden nicht mehr enthalten.
Früher war der übliche Weg eine Einheit zu markieren, ihr in den Befehlen einen
speziellen Kommentar zu geben:
#message 'bestaetigt'
ergibt
; bestaetigt
Und wird dann vom Client u.U. erkannt.
Wenn man einen CR erzeugt, ist aber inzwischen speziell für Magellan üblich,
ein zusätzliches Tag ejcOrdersConfirmed in den CR einzufügen. Folgender Code
erledigt dies:
#tag EINHEIT ejcOrdersConfirmed 1
Wem das zu lang ist, der kapselt das halt in einer Prozedur mit kurzem Namen.
Basierend auf einem Code von Hubert Mackenberg in Vorlage-Skript übertragen:
; Code based on C Code by Hubert Mackenberg. Thanks.
; Abstand zwischen $x1,$y1 und $x2,$y2 berechnen
#func HexDistance $x1 $y1 $x2 $y2
{
#var $dx $dy
$dx=$x1-$x2
$dy=$y1-$y2
; Bei negativem dy am Ursprung spiegeln, das veraendert
; den Abstand nicht
#if $dy<0
{
$dy=-$dy
$dx=-$dx
}
; dy ist jetzt >=0, fuer dx sind 3 Faelle zu untescheiden
#if $dx>=0
{
#return $dx+$dy
}
#else
{
#if -$dx>=$dy { #return -$dx }
#else { #return $dy }
}
}
Revision 11 Jan 2006
|