scripting:tutorials:level3:armies
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
scripting:tutorials:level3:armies [2025/07/08 15:43] – fritz_98 | scripting:tutorials:level3:armies [2025/07/11 14:55] (aktuell) – [Beispiel für komplexe Armeesteuerung] fritz_98 | ||
---|---|---|---|
Zeile 87: | Zeile 87: | ||
===GetClosestEntity=== | ===GetClosestEntity=== | ||
- | '' | + | '' |
===GetPosition=== | ===GetPosition=== | ||
Zeile 309: | Zeile 309: | ||
====Probleme beim Rekrutieren==== | ====Probleme beim Rekrutieren==== | ||
+ | |||
+ | Einer KI ihre Truppen über Rekrutierung zu stellen ist die optisch schönere Lösung, bringt aber einige Probleme mit sich. Diese zu umgehen ist mit den Armee-Funktionen, | ||
===Wenig Kontrolle über die Truppentypen=== | ===Wenig Kontrolle über die Truppentypen=== | ||
+ | |||
+ | Wenn du dir den Code für die Funktion '' | ||
+ | |||
+ | Das liegt daran, dass die Funktion '' | ||
+ | |||
+ | Folglich ist die Rekrutierung von beispielsweise reinen Reiterarmeen nicht zuverlässig möglich, wenn auch andere Armeetypen entstehen sollen. | ||
===Wenig Kontrolle über das Verstärkungsverhalten=== | ===Wenig Kontrolle über das Verstärkungsverhalten=== | ||
+ | |||
+ | Wie weiter oben angemerkt, wird die KI versuchen, angeschlagene Truppen zurückzuziehen und an der nächsten Kaserne zu verstärken. Bei Spawntruppen lässt sich der Schwellwert der Truppenstärke, | ||
===Wenig Kontrolle über den Ausbildungsort=== | ===Wenig Kontrolle über den Ausbildungsort=== | ||
+ | |||
+ | Wie bei [[scripting: | ||
+ | |||
+ | ---- | ||
=====Beispiel für komplexe Armeesteuerung===== | =====Beispiel für komplexe Armeesteuerung===== | ||
+ | |||
+ | Wir wollen die Status-, Steuerungs- und Spawnfunktionen, | ||
+ | |||
+ | Um die Armeesteuerung zu demonstrieren, | ||
+ | |||
+ | Das Verhalten der Banditen soll dabei ganz einfach gehalten sein: Sie sollen nur verteidigen und in regelmäßigen Abständen aus ihren Türmen respawnen. Nach einiger Zeit stoppt der Respawn, sodass Crawford letztendlich die Oberhand gewinnt. | ||
+ | |||
+ | Das Verhalten der Truppen von Crawford soll komplexer sein: | ||
+ | * Während die Armee nicht die volle Truppenzahl umfasst, soll sie eine defensive Position einnehmen | ||
+ | * Auf der defensiven Position wird die Armee durch den Spawn neuer Truppen verstärkt | ||
+ | * Sobald die Armee ihre volle Stärke besitzt, soll sie zu einer offensiven Position vorrücken | ||
+ | * Auf der offensiven Position läuft ein Counter. Sobald dieser abgelaufen ist, greift die Armee an | ||
+ | * Falls sie so viele Truppen verliert, dass sie als " | ||
+ | * Falls keine Gegner mehr im Angriffsgebiet sind, zieht sie sich auf die offensive Position zurück | ||
+ | Beide Armeen sollen den Respawn einstellen, wenn die Spawngebäude zerstört wurden. Der Ablauf wird in diesem Zustandsdiagramm noch einmal verdeutlicht: | ||
+ | |||
+ | {{ scripting: | ||
+ | |||
+ | Um die Zustände in Lua umzusetzen, programmieren wir einen [[https:// | ||
+ | |||
+ | Folgende Positionen und Gebäude setzen wir auf die Karte: | ||
+ | * **Für die Crawford-Armee: | ||
+ | * Eine Kaserne mit dem Namen ''" | ||
+ | * Vor der Kaserne und dem Schießplatz jeweils ein '' | ||
+ | * Dem Banditenlager abgewandt ein '' | ||
+ | * **Für das Banditenlager: | ||
+ | * Zwei Banditentürme mit den Namen ''" | ||
+ | * Ein '' | ||
+ | |||
+ | Damit dieser Artikel nicht mit Lua-Code überquillt, | ||
+ | |||
+ | 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 | ||
+ | } | ||
+ | </ | ||
+ | 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: | ||
+ | <code lua> | ||
+ | spawnDelay = 3, | ||
+ | spawnAmount = 2, | ||
+ | spawnCounter = 0, | ||
+ | spawnCycles = 12, | ||
+ | spawnLifelines = {" | ||
+ | </ | ||
+ | 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, | ||
+ | |||
+ | ====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:// | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Im nächsten Kapitel wird beschrieben, | ||
+ | |||
+ | [[ scripting: | ||
+ | [[ scripting: | ||
+ |
scripting/tutorials/level3/armies.1751989420.txt.gz · Zuletzt geändert: 2025/07/08 15:43 von fritz_98