Benutzer-Werkzeuge

Webseiten-Werkzeuge


scripting:tutorials:level3:armies

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige ÜberarbeitungVorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
scripting:tutorials:level3:armies [2025/07/11 12:21] fritz_98scripting:tutorials:level3:armies [2025/07/11 14:55] (aktuell) – [Beispiel für komplexe Armeesteuerung] fritz_98
Zeile 87: Zeile 87:
  
 ===GetClosestEntity=== ===GetClosestEntity===
-''GetClosestEntity(_ArmyTable, _Radius)'' gibt die [[scripting:tutorials:level1:place_entities#exkursentity-id_vs_skriptname|Entity-Id]] des nächsten Gegners an, der innerhalb des angegebenen ''_Radius'' dem aktuellen Anker am nächsten liegt. Ist kein ''_Radius'' angegeben, wird der aktuelle Aktionsradius/rodeLength verwendet. Die genaue Beschreibung der Funktion findest du [[scripting:reference:comfort:getclosestentity|hier]].+''GetClosestEntity(_ArmyTable, _Radius)'' gibt die [[scripting:tutorials:level1:place_entities#exkursentity-id_vs_skriptname|Entity-Id]] des nächsten Gegners an, der innerhalb des angegebenen ''_Radius'' der aktuellen ''_position'' am nächsten liegt. Ist kein ''_Radius'' angegeben, wird der aktuelle Aktionsradius/rodeLength verwendet. Die genaue Beschreibung der Funktion findest du [[scripting:reference:comfort:getclosestentity|hier]].
  
 ===GetPosition=== ===GetPosition===
Zeile 332: Zeile 332:
 =====Beispiel für komplexe Armeesteuerung===== =====Beispiel für komplexe Armeesteuerung=====
  
-Wir wollen die Status-, Steuerungs- und Spawnfunktionen, die oben beschrieben sind, zu einer komplexeren Armeesteuerung zusammenbringen. Die Beispielmap, die den lauffähigen Code enthält, kannst du FIXME hier herunterladen.+Wir wollen die Status-, Steuerungs- und Spawnfunktionen, die oben beschrieben sind, zu einer komplexeren Armeesteuerung zusammenbringen. Die Beispielmap, die den lauffähigen Code enthält, kannst du {{ scripting:tutorials:level3:armies:armydemomap.zip | hier }} herunterladen. Wir verzichten darauf, den kompletten Quellcode hier im Wiki zu posten.
  
 Um die Armeesteuerung zu demonstrieren, entwerfen wir folgenden Rahmen: Vor den Toren Crawfords haben Banditen ein Lager errichtet. Die Truppen von Crawford sollen sich sammeln und die Banditen vertreiben. Um die Armeesteuerung zu demonstrieren, entwerfen wir folgenden Rahmen: Vor den Toren Crawfords haben Banditen ein Lager errichtet. Die Truppen von Crawford sollen sich sammeln und die Banditen vertreiben.
Zeile 359: Zeile 359:
     * Zwei Banditentürme mit den Namen ''"BanditTower1"'' und ''"BanditTower2"''     * Zwei Banditentürme mit den Namen ''"BanditTower1"'' und ''"BanditTower2"''
     * Ein ''ScriptEntity'' mit dem Namen ''"ArmyBanditDefense"''     * Ein ''ScriptEntity'' mit dem Namen ''"ArmyBanditDefense"''
 +
 +Damit dieser Artikel nicht mit Lua-Code überquillt, verweisen wir auf den {{ scripting:tutorials:level3:armies:armydemomap.zip | Download der Demo-Map }}, in der der komplett kommentierte Code enthalten ist. Im Spiel wird der Zustandswechsel der Crawford-Armee außerdem gesondert angezeigt.
 +
 +Wichtig sind insbesondere folgende Aspekte:
 +
 +===Definition der Zustände===
 +Wir nummerieren die Zustände einer Armee durch, sodass sie im Skript besser lesbar sind und beim Programmieren Fehler vermieden werden. Dafür definieren wir ein globales Table, das aussagekräftige Namen verwendet:
 +<code lua>
 +ArmyStates = {
 +    Defense = 1,
 +    Offense = 2,
 +    Attack = 3
 +}
 +</code>
 +In der Kontrollfunktion für die Crawford-Armee prüfen wir dann immer zuerst, in welchem Zustand sich die Armee befindet, fragen dann ab, ob ein Zustandsübergang möglich ist und führen anschließend die dem Zustand zugehörige Aktion aus.
 +
 +===Zusätzliche Parameter im Army-Table===
 +Für beide Armeen brauchen wir zusätzliche Parameter, die über die [[scripting:tutorials:level2:bandit_camps#die_armee-basisparameter|Basisparameter]] hinaus gehen. Dazu zählen beispielsweise Parameter, die das Spawnverhalten der Armeen steuern:
 +<code lua>
 +spawnDelay = 3,
 +spawnAmount = 2,
 +spawnCounter = 0,
 +spawnCycles = 12,
 +spawnLifelines = {"BanditTower1", "BanditTower2"}
 +</code>
 +Diese Parameter müssen wir selbst in den jeweiligen eigenen Kontrollfunktionen verwenden - sie haben keinen Einfluss auf die vom Spiel bereitgestellten Funktionen.
 +
 +===Nur eingeschränkt zum Copy-Paste geeignet===
 +Die Kontrollfunktionen, an denen beispielhaft Armeeverhalten gezeigt wird, sollen möglichst viele der im Artikel vorgestellten Funktionen demonstrieren und anschaulich machen. Dadurch ist aber nicht gewährleistet, dass sie für deine Map genau passend ist. Wichtig ist, dass du die Funktionen verstehst! Nur so kannst du deinen eigenen Army-Controller schreiben, der das KI-Verhalten in deiner Karte am besten umsetzt (wir sind hier schließlich im Tutorial-Abschnitt für "Individuelle Kartenabläufe").
 +
 +====Beispielmap von Play4Fun====
 +
 +Play4Fun hat ebenfalls eine Karte erstellt, die komplexe Armeesteuerung demonstriert. Wenn du dir Armeeverhalten anschauen möchtest, das über den Rahmen dieses Wikis hinaus geht, findest du hier den Downloadlink:
 +
 +[[https://www.siedler-maps.de/maps/map-1706.htm]]
 +
 +----
 +
 +Im nächsten Kapitel wird beschrieben, wie du die KI einzelne Gebäude aufbauen lassen kannst.
 +
 +[[ scripting:tutorials:level3:ai_construction | Nächstes Kapitel: Eigenständiger Aufbau ]]\\
 +[[ scripting:tutorials:level3:armies | Zurück nach oben ]]
  
scripting/tutorials/level3/armies.1752236470.txt.gz · Zuletzt geändert: 2025/07/11 12:21 von fritz_98