Skip to content

VorlageDokuCmdFunc

Steffen Schuemann edited this page Oct 12, 2019 · 1 revision

#func

Implementation einer Funktion zur Berechnung eines Wertes

Syntax

#func <Name> [$Argname1 [$Argname2 [...]]]

Beschreibung

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.

Parameter

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.

Beispiel

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)

Referenzen

#proc, #return

Clone this wiki locally