Implementation einer Funktion zur Berechnung eines Wertes
#func <Name> [$Argname1 [$Argname2 [...]]]
Dieser Metabefehl ermöglicht es eigene Funktionen zu schreiben, die dann in Ausdrücken verwendet werden können. Es können mehrere Parameter festgelegt werden die diese Funktion dann beim Aufruf erwartet.
Der errechnete Wert wird dann mittels #return zurückgegeben.
Funktionen werden genauso wie Prozeduren in eine externe Skript-Datei geschrieben und diese beim Aufruf von Vorlage mit der Option '-i' eingebunden. Sie können nicht direkt in der Zugvorlage geschrieben werden.
Achtung: Der interne Mechanismus erfordert (noch), das die #func-Zeile alleine steht und die '{' der Funktion in der nächsten Zeile (ohne Leer- oder Kommentarzeilen) steht.
Name | Name unter dem die Funktion aufgerufen werden kann. Der Name ist wie bei #proc casesensitiv, also kommt es auf Groß- und Kleinschreibung an. |
Argname1, Argname2 | Variable unter denen die Argumente übergeben werden. |
Will man zum Beispiel für einen beliebigen Wagenzug wissen wieviel Gewichtseinheiten er verträgt, so kann man als erste Näherung folgende Funktion verwenden:
#func Kapazitaet $Einheit
{
$Pferde=unit[$Einheit].pferd
$Wagen=unit[$Einheit].wagen
$FreiePferde=$Pferde-$Wagen*2
#if unit[$Einheit].typ=='Trolle'
{
$KutscherGewicht=unit[$Einheit].anzahl*20
}
else
{
$KutscherGewicht=unit[$Einheit].anzahl*10
}
#return $Wagen*140+$FreiePferde*20-$KutscherGewicht
}
Diese Funktion könnte eine Steinbau-Einheit nun verwenden um einen pendelnden Transport (Einheit (puL1 )) automatisch zu beladen:
EINHEIT klop; Die Steineklopper [10,400$] kämpft nicht
// #forever { MACHE Stein }
// #ifunit puL1 { GIB puL1 Kapazitaet(puL1)/60 Stein }
MACHE Stein
Diese Einheit macht also immer Steine, wenn aber der Transport (z.b. mit einem Menschen-Kutscher, 12 Pferden und 6 Wagen) in die Region kommt erzeugt Vorlage:
EINHEIT klop; Die Steineklopper [10,400$] kämpft nicht
// #forever { MACHE Stein }
// #ifunit puL1 { GIB puL1 Kapazitaet(puL1)/60 Stein }
MACHE Stein
GIB puL1 13 Stein
Dieses Beispiel geht allerdings von folgenden Vereinfachungen aus, die aber in der Praxis durchaus akzeptabel sein können:
- Die Wagen kommen leer, oder werden in der Region immer entladen (evtl. auch automatisch)
- Die Transporteinheit hat genügend Reiter um überhaupt zu reisen
- Es sind auf dem Transport keine Wagen geladen (also nicht mehr als Pferde/2 Wagen)
#proc, #return Revision 22 Jul 2003
|