Vorlage Dokumentation#func
Allgemeines
   Aufruf
   Einleitung
   Installation
   Konfiguration
   Syntax
Einführung
   MetabefehlsAusdruecke
   MetabefehlsSyntax
   RegulaereAusdruecke
   VordefinierteVariablen
Funktionen
   abs()
   after()
   and()
   antoi()
   before()
   ceil()
   change()
   close()
   crop()
   equals()
   exp()
   flatten()
   float()
   floor()
   int()
   isnothing()
   itoan()
   length()
   log()
   log10()
   match()
   not()
   open()
   or()
   random()
   read()
   readline()
   sign()
   status()
   statustext()
   substr()
   system()
   time()
   tolower()
   toupper()
   typeof()
   write()
   writeline()
   xname()
   xor()
Metabefehle
   #after
   #array
   #break
   #call
   #config
   #const
   #debug
   #default
   #dict
   #else
   #every
   #forever
   #func
   #if
   #ifregion
   #ifunit
   #include
   #input
   #message
   #next
   #notrace
   #proc
   #return
   #sort
   #table
   #tag
   #trace
   #var
   #while
Rückruf-Prozeduren
   CalcUnitCapacities
   CreateRegionHeader
   CreateUnitHeader
   EndRegion
   EndUnit
   OnBuilding
   OnExit
   OnInit
   OnRegion
   OnShip
   OnUnit
   OutputLineFilter
Report-Objekte
   building
   grenze
   partei
   preise
   races
   region
   report
   ship
   things
   unit
Anhang
   Danksagungen
   SkriptDebugger
   VorlageFAQ

#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.

ALERT! 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

Revision 22 Jul 2003

Page design, graphics and contents (c) copyright 1999-2004
by S.Schümann and contributing authors