Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level2:countdowns

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
scripting:tutorials:level2:countdowns [2023/11/30 11:04] fritz_98scripting:tutorials:level2:countdowns [2024/02/10 16:57] (aktuell) fritz_98
Zeile 15: Zeile 15:
          
     if MyCounter >= MyCounterLimit then     if MyCounter >= MyCounterLimit then
 +        -- Der Zähler wird zurückgesetzt
 +        MyCounter = 0
         -- hier geschehen Dinge         -- hier geschehen Dinge
         MyCounterEvent()         MyCounterEvent()
Zeile 23: Zeile 25:
 </code> </code>
  
-**Hinweis**: Die Variable ''MyCounter'' könnte man beim Erreichen des Limits auch auf 0 zurücksetzen. Wenn der Job an der Stelle nicht beendet wird, wird das Ereignis wiederholt nach jeweils ''240'' Sekunden ausgelöst.+**Hinweis**: Wenn der Job beim Erreichen des Zählmaximums nicht beendet wird, wird das Ereignis wiederholt nach jeweils ''240'' Sekunden ausgelöst.
  
 Der Nachteil hierbei ist, dass jedes Mal zwei globale Variablen benötigt werden, über die man einen Überblick behalten muss. Deshalb gibt es bereits vorgefertigt ein ''Counter''-Modul, das das Zählen und Verwalten der Variablen übernimmt. Der Nachteil hierbei ist, dass jedes Mal zwei globale Variablen benötigt werden, über die man einen Überblick behalten muss. Deshalb gibt es bereits vorgefertigt ein ''Counter''-Modul, das das Zählen und Verwalten der Variablen übernimmt.
 +
 +Im ''Counter''-Modul hat jeder Counter einen Namen als String. Zum Setzen, Zählen und Abfragen des Counters wird nur dieser String und die folgenden Funktionen benötigt.
 +
 +\\
  
 ====Counter.SetLimit==== ====Counter.SetLimit====
 +
 +''Counter.SetLimit(_Name, _Limit)'' setzt das Limit ''_Limit'' in Sekunden für den Counter mit dem Namen ''_Name''.
 +
 +Im Beispiel oben entspricht das der Zeile
 +<code lua>
 +MyCounterLimit = 240
 +</code>
 +die sich damit durch die Zeile
 +<code lua>
 +Counter.SetLimit("MyCounter", 240)
 +</code>
 +ersetzen lässt.
 +
 +\\
  
 ====Counter.Tick==== ====Counter.Tick====
 +
 +''Counter.Tick(_Name)'' zählt den Counter mit dem Namen ''_Name'' um 1 nach oben. Wenn der Counter sein ''_Limit'' erreicht hat, wird er automatisch auf 0 zurückgesetzt und **true** zurückgegeben. Andernfalls gibt die Funktion **false** zurück.
 +
 +Im Beispiel oben entspricht das den Zeilen
 +<code lua>
 +MyCounter = MyCounter + 1
 +if MyCounter >= MyCounterLimit then
 +    MyCounter = 0
 +</code>
 +die sich damit durch die Zeile
 +<code lua>
 +if Counter.Tick("MyCounter") then
 +</code>
 +ersetzen lassen.
 +
 +\\
 +
 ====Counter.Reset==== ====Counter.Reset====
 +
 +''Counter.Reset(_Name)'' setzt den Zählstand eines Counters mit dem Namen ''_Name'' auf 0 zurück.
 +
 +Im Beispiel oben entspricht das der Zeile
 +<code lua>
 +MyCounter = 0
 +</code>
 +die sich damit durch die Zeile
 +<code lua>
 +Counter.Reset("MyCounter")
 +</code>
 +ersetzen lässt.
 +
 +\\
 +
 ====Counter.Tick2==== ====Counter.Tick2====
  
 +''Counter.Tick2(_Name, _Limit)'' vereint die Funktion von ''Counter.SetLimit'' und ''Counter.Tick''. Das heißt, dass sowohl ein neuer Counter mit dem Namen ''_Name'' und dem Limit ''_Limit'' initialisiert als auch hochgezählt wird. Weil diese Schreibweise so kurz ist, wird sie auch bevorzugt verwendet.
 +
 +Mit ''Counter.Tick2'' wird das Counter-Beispiel oben stark verkürzt:
 +<code lua>
 +function MyCounterInit()
 +    StartSimpleJob("MyCounterCount")
 +end
 +
 +function MyCounterCount()
 +    -- Erstelle einen neuen Counter, setze das Limit fest und zähle ihn jede Sekunde hoch
 +    if Counter.Tick2("MyCounter", 240) then
 +        -- hier geschehen Dinge
 +        MyCounterEvent()
 +        -- Job beenden
 +        return true
 +    end
 +end
 +</code>
 ---- ----
  
 ====Zeitanzeige am Rand des Bildschirms==== ====Zeitanzeige am Rand des Bildschirms====
  
-  * MapLocal_StartCountDown +Die Counter, die in den Abschnitten oben betrachtet werden, sind nur für das Skript sichtbar. Manchmal möchte man dem Spieler einen solchen Counter auch anzeigen, beispielsweise um einen nahenden Angriff genau zu datieren. Dazu gibt es die Funktion ''MapLocal_StartCountDown(_Time)''. Der Parameter ''_Time'' gibt in Sekunden an, wie lange der anzuzeigende Countdown ist. Sobald er komplett runtergezählt hat, verschwindet er wieder. Wenn du die Funktion erneut aufrufst, bevor der alte Countdown fertig ist, wird nur der neue Countdown angezeigt. 
-  * MapLocal_StopCountDown+ 
 +**Achtung**: Die Funktion ist nur dazu da, einen Countdown anzuzeigen. Es wird dadurch **nicht** ein Ereignis ausgelöst. Das Ereignis muss an einer anderen Stelle im Skript am Ende eines Counters gesondert ausgelöst werden. 
 + 
 +Um die Anzeige des Countdowns frühzeitig zu entfernen, kann ''MapLocal_StopCountDown()'' aufgerufen werden. 
 + 
 +---- 
 + 
 +Im nächsten Kapitel beschreiben wir, wie im Kontrast zu den [[ scripting:tutorials:level1:enemy_ai#mapeditor_setupai|in Ebene 1 gezeigten einfachen Computergegnern]] maßgeschneiderte Spawner mit wahlweise defensivem oder aggressivem Verhalten definiert werden können. 
 + 
 + 
 +[[ scripting:tutorials:level2:mercenaries | Voriges Kapitel: Söldnerquartiere ]] \\ 
 +[[ scripting:tutorials:level2:bandit_camps | Nächstes Kapitel: Banditenlager und Spawner ]] \\ 
 +[[ scripting:tutorials:level2:countdowns | Zurück nach oben ]]
scripting/tutorials/level2/countdowns.1701342251.txt.gz · Zuletzt geändert: 2023/11/30 11:04 von fritz_98