scripting:tutorials:level1:enemy_ai
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung | ||
scripting:tutorials:level1:enemy_ai [2023/08/05 10:24] – fritz_98 | scripting:tutorials:level1:enemy_ai [2024/05/16 14:13] (aktuell) – fritz_98 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
=====Einen Computergegner platzieren===== | =====Einen Computergegner platzieren===== | ||
- | Siedler 5 hat keine selbstständige KI wie seine Vorgänger. Computerspieler werden keine Stadt bauen und auch nicht ohne Weiteres Armeen ausheben und damit angreifen. All diese Dinge sind zwar möglich, müssen aber für jede Karte aufwendig geskriptet werden. Die Einzelheiten dazu werden in Ebene 3 (FIXME link) ausführlich erklärt. | + | Siedler 5 hat keine selbstständige KI wie seine Vorgänger. Computerspieler werden keine Stadt bauen und auch nicht ohne Weiteres Armeen ausheben und damit angreifen. All diese Dinge sind zwar möglich, müssen aber für jede Karte aufwendig geskriptet werden. Die Einzelheiten dazu werden in [[ scripting: |
Für einen einfachen Computergegner gibt es allerdings leicht zu bedienende Funktionen, mit denen rudimentäres Verhalten wie Truppenrekrutierung, | Für einen einfachen Computergegner gibt es allerdings leicht zu bedienende Funktionen, mit denen rudimentäres Verhalten wie Truppenrekrutierung, | ||
Zeile 9: | Zeile 9: | ||
In der folgenden Tabelle wollen wir eine kleine Übersicht darüber geben, was die im Folgenden vorgestellten Funktionen beinhalten und was nicht. | In der folgenden Tabelle wollen wir eine kleine Übersicht darüber geben, was die im Folgenden vorgestellten Funktionen beinhalten und was nicht. | ||
- | FIXME | ||
^ Einfaches KI-Verhalten - Was es kann ^ Einfaches KI-Verhalten - Was es nicht kann ^ | ^ Einfaches KI-Verhalten - Was es kann ^ Einfaches KI-Verhalten - Was es nicht kann ^ | ||
| Wenn Rekrutierungsgebäude gegeben sind: Truppen rekrutieren | Selbstständig eine Stadt aufbauen | | | Wenn Rekrutierungsgebäude gegeben sind: Truppen rekrutieren | Selbstständig eine Stadt aufbauen | | ||
Zeile 16: | Zeile 15: | ||
| Leibeigene kaufen | Steuern und Motivation verwalten | | | Leibeigene kaufen | Steuern und Motivation verwalten | | ||
| Frontalangriffe bei ausreichender Armeestärke | Komplexes Armeeverhalten wie Angriffe auf Schwachpunkte, | | Frontalangriffe bei ausreichender Armeestärke | Komplexes Armeeverhalten wie Angriffe auf Schwachpunkte, | ||
- | FIXME | ||
In der Regel führt das dazu, dass KI-Gegner nicht allein von den selbst erwirtschafteten Ressourcen " | In der Regel führt das dazu, dass KI-Gegner nicht allein von den selbst erwirtschafteten Ressourcen " | ||
Zeile 39: | Zeile 37: | ||
- **_Techlevel** - Der Techlevel ist eine ganze Zahl zwischen 0 und 3 und drückt die Technologiestufe aus, auf der die KI ihre Truppen ausbildet. Techlevel 0 sorgt beispielsweise für Kurzschwertkämpfer und Techlevel 3 für Bastardschwertkämpfer | - **_Techlevel** - Der Techlevel ist eine ganze Zahl zwischen 0 und 3 und drückt die Technologiestufe aus, auf der die KI ihre Truppen ausbildet. Techlevel 0 sorgt beispielsweise für Kurzschwertkämpfer und Techlevel 3 für Bastardschwertkämpfer | ||
- **_Position** - Der Name der Entity als **String**, von deren Position aus sich die Truppen der KI um maximal '' | - **_Position** - Der Name der Entity als **String**, von deren Position aus sich die Truppen der KI um maximal '' | ||
- | - **_AggressiveLevel** - Die Aggressivität der KI ist eine ganze Zahl zwischen 0 und 3 und bestimmt, wie viele der Armeen, die ihr zur Verfügung stehen, angreifen können. Sie ist daher vom Stärkewert nach oben beschränkt; | + | - **_AggressiveLevel** - Die Aggressivität der KI ist eine ganze Zahl zwischen 0 und 3 und bestimmt, wie viele der Armeen, die ihr zur Verfügung stehen, angreifen können. Sie ist daher vom Stärkewert nach oben beschränkt; |
- **_PeaceTime** Die Länge des Waffenstillstands in Sekunden, gemessen vom Spielstart | - **_PeaceTime** Die Länge des Waffenstillstands in Sekunden, gemessen vom Spielstart | ||
Zeile 71: | Zeile 69: | ||
- **_PlayerId** - Die Spieler-Id des KI-Gegners, also eine ganze Zahl zwischen 2 und 8. Der Spieler muss mindestens 1 Gebäude besitzen, sonst stürzt das Spiel ab | - **_PlayerId** - Die Spieler-Id des KI-Gegners, also eine ganze Zahl zwischen 2 und 8. Der Spieler muss mindestens 1 Gebäude besitzen, sonst stürzt das Spiel ab | ||
- **_Description** - Ein [[ scripting: | - **_Description** - Ein [[ scripting: | ||
- | * **resources** - Ein weiteres assoziatives Table, in dem die Startressourcen | + | * **resources** - Ein weiteres assoziatives Table, in dem die Start- bzw. Maximalressourcen |
- | * **refresh** - Gleich aufgebaut wie **resources** und gibt den Intervall und die Menge der Ressourcen an, die die KI regelmäßig bekommen soll | + | * **refresh** - Gleich aufgebaut wie **resources** und gibt den Intervall |
* **serfLimit** - Eine ganze Zahl, die die maximale Anzahl an Leibeigenen angibt, die die KI kaufen kann. Falls die KI zu Beginn des Spiels mehr Leibeigene als das gegebene Limit besitzt, kauft sie erst neue nach, sobald ihre Anzahl unter das Limit fällt (vorausgesetzt, | * **serfLimit** - Eine ganze Zahl, die die maximale Anzahl an Leibeigenen angibt, die die KI kaufen kann. Falls die KI zu Beginn des Spiels mehr Leibeigene als das gegebene Limit besitzt, kauft sie erst neue nach, sobald ihre Anzahl unter das Limit fällt (vorausgesetzt, | ||
* **extracting** - Entweder 0 oder 1, wobei 1 bedeutet, dass die Leibeigenen der KI automatisch Ressourcen abbauen und Bäume fällen | * **extracting** - Entweder 0 oder 1, wobei 1 bedeutet, dass die Leibeigenen der KI automatisch Ressourcen abbauen und Bäume fällen | ||
* **resourceFocus** FIXME | * **resourceFocus** FIXME | ||
* **repairing** - Boolean, der angibt, ob die KI Gebäude reparieren soll | * **repairing** - Boolean, der angibt, ob die KI Gebäude reparieren soll | ||
- | * **rebuild** - Ein assoziatives Table, in dem definiert ist, nach wie viel Zeit zerstörte Gebäude wieder aufgebaut werden. Wenn dieses Feld nicht angegeben wird, werden keine Gebäude wieder aufgebaut (siehe Beispiel [[ scripting: | + | * **rebuild** - Ein assoziatives Table, in dem definiert ist, nach wie viel Zeit zerstörte Gebäude wieder aufgebaut werden. Wenn dieses Feld nicht angegeben wird, werden keine Gebäude wieder aufgebaut (siehe Beispiel [[ scripting: |
- | * **constructing** - Boolean, der angibt, ob die KI Gebäude errichten darf. Typ und Position aller zu bauenden Gebäude muss ebenfalls abgegeben werden, siehe dazu das zugehörige Kapitel in Ebene 3 (FIXME link einfügen) | + | * **constructing** - Boolean, der angibt, ob die KI Gebäude errichten darf. Typ und Position aller zu bauenden Gebäude muss ebenfalls abgegeben werden, siehe dazu [[ scripting: |
Wie '' | Wie '' | ||
**Wichtig**: | **Wichtig**: | ||
+ | |||
+ | **Achtung**: | ||
+ | Der Bau von Gebäuden verursacht noch ein weiteres Problem: Wenn die KI eine Baustelle an eine unzugängliche Position setzt, wird außerdem die komplette Warteschleife für alle zu bauenden Gebäuden unterbrochen, | ||
---- | ---- | ||
Zeile 111: | Zeile 112: | ||
--- Die Position ist die von uns gesetzte und benannte Burg des Gegners " | --- Die Position ist die von uns gesetzte und benannte Burg des Gegners " | ||
- | --- Bei der Aggressivität wählen wir ebenfalls 2, sodass die KI mit allen ihren Truppen angreifen kann | + | --- Bei der Aggressivität wählen wir ebenfalls 2, sodass die KI mit der Hälfte ihrer Truppen angreifen kann |
--- Eine Friedenszeit brauchen wir nicht einzustellen, | --- Eine Friedenszeit brauchen wir nicht einzustellen, | ||
Zeile 121: | Zeile 122: | ||
--- Wir erstellen nun ein Table, das die Einstellungen für SetupPlayerAi enthält | --- Wir erstellen nun ein Table, das die Einstellungen für SetupPlayerAi enthält | ||
local AiDescription = { | local AiDescription = { | ||
+ | -- Wir machen folgende Verteilung: Ressourcen, die für den (Wieder-) Aufbau von Gebäuden gebraucht | ||
+ | -- werden, sollen ausreichend zur Verfügung stehen | ||
+ | -- Ressourcen, die für die Rekrutierung der Armeen notwendig sind, sollen regelmäßig, | ||
+ | -- zu üppig an die KI gehen, damit sie zwar längere Gefechte austragen, aber auf lange Sicht nicht | ||
+ | -- beliebig viele Truppen ausheben kann | ||
resources = { | resources = { | ||
- | | + | gold = 4500, |
+ | clay = 10000, | ||
+ | iron = 3000, | ||
+ | sulfur = 1500, | ||
+ | stone = 15000, | ||
+ | wood = 12000 | ||
+ | | ||
+ | -- Die KI erhält alle 2 Minuten 1500 Taler, 1000 Eisen und 700 Schwefel, solange diese Ressourcen | ||
+ | -- unterhalb des angegebenen Maximums liegen | ||
+ | refresh = { | ||
+ | gold = 1500, | ||
+ | clay = 0, | ||
+ | iron = 1000, | ||
+ | sulfur = 700, | ||
+ | stone = 0, | ||
+ | wood = 0, | ||
+ | updateTime = 120 | ||
+ | }, | ||
+ | -- Beim Limit für Leibeigene entscheiden wir uns für 6, da die KI keine Ressourcen abzubauen braucht. | ||
+ | -- Die Leibeigenen sollen also allein zerstörte Gebäude reparieren bzw. wieder aufbauen. Damit der | ||
+ | -- Spieler in seinem Fortschritt nicht zu sehr gebremst wird, sollte diese Zahl nicht zu hoch sein, | ||
+ | -- da er andernfalls viel Zeit damit verbringen wird, feindlichen Leibeigenen hinterher zu jagen | ||
+ | serfLimit = 6, | ||
+ | -- Leibeigene sollen keine Ressourcen abbauen. Dadurch entgehen wir auch dem Bug, bei dem das Spiel | ||
+ | -- stark zu ruckeln beginnt, wenn Leibeigene keinen Zugang zu Ressourcen mehr haben | ||
+ | extracting = 0, | ||
+ | -- Wenn Leibeigene keine Ressourcen abbauen, brauchen sie sich auch auf keinen Ressourcentyp zu | ||
+ | -- fokussieren | ||
+ | resourceFocus = nil, | ||
+ | -- Beschädigte Gebäude sollen repariert werden | ||
+ | repairing = true, | ||
+ | -- Zerstörte Gebäude sollen nach genau 90 Sekunden wieder aufgebaut werden, also ohne zufällige | ||
+ | -- Zeitkomponente | ||
+ | rebuild = { | ||
+ | delay = 90, | ||
+ | randomTime = 0 | ||
+ | }, | ||
+ | -- Damit der Wiederaufbau funktioniert, | ||
+ | constructing = true | ||
} | } | ||
+ | SetupPlayerAi(2, | ||
+ | end | ||
</ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | Im nächsten Kapitel behandeln wir die Erstellung von Briefings, also Ingame-Texte für die Darstellung von Dialogen und Questzielen. | ||
+ | |||
+ | [[ scripting: | ||
+ | [[ scripting: |
scripting/tutorials/level1/enemy_ai.1691231075.txt.gz · Zuletzt geändert: 2023/08/05 10:24 von fritz_98