Inhaltsverzeichnis

In diesem Tutorial wird erklärt, wie man den KI-Spieler „aktiviert“ und dazu bringt, viele Aktionen selbstständig auszuführen.

Der Vorteil hierbei ist, daß man den KI-Spieler quasi nur „hinstellen“ braucht. Dies bringt aber auch einen Nachteil mit sich: Abgesehen von der Grundkonfiguration hat man wenig Kontrolle über dessen Verhalten während des Spiels.

Damit ein KI-Spieler überhaupt etwas „von alleine“ tut, muss er „aktiviert“, bzw. „initialisiert“ werden. Wie dies geschieht und welche Parameter man dabei angeben kann/ muss wird im folgenden erläutert.

MapEditor_SetupAI()

Wenn man eine neue Karte erstellt, wird einem eine Wizard Seite präsentiert, auf der man die Eigenschaften der KI Spieler festlegen kann. Man muss die gewünschten Werte nicht in dem Wizard eingeben, sondern kann sie später in aller Ruhe im Script festlegen. Wenn man also im Wizard nichts eingibt, sieht der erzeugte Scriptteil (steht in der FirstMapAction-Funktion) dann so aus:

-- Level 0 is deactivated...ignore
	MapEditor_SetupAI(2, 0, 0, 0, "", 0, 0)
	MapEditor_SetupAI(3, 0, 0, 0, "", 0, 0)
	MapEditor_SetupAI(4, 0, 0, 0, "", 0, 0)
	MapEditor_SetupAI(5, 0, 0, 0, "", 0, 0)
	MapEditor_SetupAI(6, 0, 0, 0, "", 0, 0)
	MapEditor_SetupAI(7, 0, 0, 0, "", 0, 0)
	MapEditor_SetupAI(8, 0, 0, 0, "", 0, 0)

Welcher Wert steht nun wofür?

  1. KI SpielerId
    Die erste Zahl gibt also die jeweilige KI SpielerId an (es sind ja schon alle möglichen KI Spieler Ids, nämlich von 2-8, vorhanden)
  2. Strength (Spielstärke)
    Dieser Wert kann zwischen 0 - 3 liegen und gibt die quasi die Spielstärke der KI an, wobei sich das letztlich nur auf die maximale Anzahl an Truppen (siehe unten: Reservierte Ids für Armeen) bezieht, die die KI rekrutiert. Bei dem Wert 0 werden von der KI keine Truppen rekrutiert (darauf bezieht sich auch der Kommentar im Script „– Level 0 is deactivated…ignore“). Nur wenn dieser Wert größer als 0 ist, rekrutiert (sofern entsprechende Gebäude, egal in welcher Ausbaustufe, vorhanden sind) und steuert die KI selbständig Truppen!
  3. Range (Aktionsradius)
    Dieser Wert bestimmt den Radius um den Punkt, der unter Position angegeben wird. Das Gebiet innerhalb dieses Kreises wird von den Truppen der KI als „ihr“ Territorium angesehen und wird somit verteidigt, selbst wenn der Wert für die Aggressivität auf 0 (nur Selbstverteidigung) steht. Das Eindringen feindlicher Truppen in diesen Kreis wird als Angriff gewertet. Auch feindliche Gebäude innerhalb dieses Kreises werden angegriffen.
  4. Techlevel (Technologiestufe)
    Dieser Wert zwischen 0 - 3 gibt an, welche Upgradestufe an Tuppen von der KI rekrutiert wird, wobei bei 0 Soldaten des niedrigsten Levels (also bspw. Swordman1), und bei 3 Soldaten des höchsten Levels (also bspw. Swordman4) rekrutiert werden (entsprechende Gebäude vorausgesetzt). Ebenso bestimmt der Wert, welche Kanonen von der KI produziert werden. Leider ist den Entwicklern hierbei ein (Denk-)Fehler unterlaufen :-(, denn es wird der Wert selber an den Entitynamen angehängt. Das führt dazu, dass bei Level 0 keine Kanonen produziert werden, da es keine Entity PV_Cannon0 gibt. Genauso wird eine KI nie eine PV_Cannon4 produzieren, da der Wert ja nur maximal 3 sein kann. Vielleicht wird das ja mal mit einem zukünftigen Patch (aktuell Vers. 1.06) behoben indem man einfach Techlevelwert + 1 für die Kanonenproduktion verwendet ;-)
  5. Position (Mittelpunkt des Aktionsradius)
    Dies muss ein Scriptname einer Entity (egal welche) auf der Map sein. Wenn die KI aktiviert ist (Spielstärke > 0) werden die Truppen an diesem Punkt versammelt (wenn sie nicht anderweitig „beschäftigt“ sind ;-)). Dieser Punkt sollte daher eine strategisch wichtige Stelle sein, z.B. das Hauptquartier (Skriptname), oder ziemlich genau in der Mitte des „KI-Landes“ liegen.
  6. Aggressiveness (Aggressivität)
    Dieser Wert zwischen 0 - 3 gibt die Aggressivität einer (aktivierten) KI an, wobei sie sich bei 0 nur selbst verteidigt, bis hin zu massiven Angriffen bei einem Wert von 3.
  7. Peacetime (Friedens-, bzw. Nicht Angriffszeit)
    Hier kann man in Sekunden die Zeit festlegen, in der von der KI rekrutierte Truppen (gilt nicht für per Script generierte Truppen) nicht angreifen. Die Zeit zählt vom Spielanfang und nicht vom Zeitpunkt der Rekrutierung der jeweiligen Truppen.

Man kann also jetzt in aller Ruhe die gewünschten Werte im Script eintragen. Wird ein KI-Spieler nicht benötigt, läßt man einfach die entsprechende Zeile im Scriptcode unverändert!

SetupPlayerAi()

Wenn man nun einen KI-Spieler durch z.B.

MapEditor_SetupAI(4, 1, 50000, 2, "HQ_Player4", 0, 600)

initialisiert hat, dann hat man damit quasi alle „militärischen“ Einstellungen vorgenommen.

Allerdings gibt es auch noch eine Reihe anderer („ziviler“) Einstellungen für einen KI-Spieler, die man mit der Funktion MapEditor_SetupAI() nicht vornehmen kann (bzw. die in Abhängigkeit von den Werten automatisch gesetzt werden).
Als da wären:

Da die Funktion MapEditor_SetupAI() intern die Funktion SetupPlayerAi() nutzt, muss ein Aufruf von SetupPlayerAi() also immer nach dem Aufruf von MapEditor_SetupAI() erfolgen.

Wenn man also unabhängig von den bei MapEditor_SetupAI() festgelegten Werten die o.g. Parameter selber bestimmen möchte, muss man diese an die Funktion SetupPlayerAi() übergeben.

Dies muss in Form eines Tables geschehen, da die Funktion SetupPlayerAi() nur zwei Paramter erwartet.

SetupPlayerAi( _playerId,_description )

Der erste Parameter ist die KI PlayerId und der zweite Parameter das o.g. Table.
Beispiel (für Spieler 4):

SetupPlayerAi( 4, {constructing = false, extracting = 1, repairing = true, serfLimit = 10} )

Die Reihenfolge der Parameter innerhalb des Tables spielt dabei keine Rolle. Man braucht auch nur die Parameter in dem Table angeben, deren Wert man explizit setzen möchte.

SetupPlayerAi( 4, { extracting = 1 } )

Die nicht angegebenen Parameter werden dann entsprechend den vordefinierten Werten „automatisch“ gesetzt.

Wenn man also direkt zu Beginn die jeweiligen KI-Spieler initialisieren (erstellen) will, sehen die jeweiligen Funktionsaufrufe bspw. so aus:

-- Level 0 is deactivated...ignore
	-- will man die Werte für constructing, repairing, und das serfLimit selbst bestimmen, dann muss man nach MapEditor_SetupAI() auch noch SetupPlayerAi() aufrufen!
	MapEditor_SetupAI( 2, 3, 11000, 3, "playerTwo", 3, 0);
	SetupPlayerAi( 2, { serfLimit = 20, extracting = 1, constructing = true, repairing = true } )
	MapEditor_SetupAI(3, 1, 8000, 2, "Zentrum_Player3", 0, 600)
	SetupPlayerAi( 3, {constructing = false, repairing = true, serfLimit = 15} )
	-- will man die Werte für constructing, repairing, und das serfLimit nicht selbst bestimmen, dann reicht der Aufruf von MapEditor_SetupAI():
	MapEditor_SetupAI(4, 2, 5000, 1, "Zentrum_Player4", 1, 0)
	MapEditor_SetupAI(5, 2, 9000, 0, "Zentrum_Player5", 2, 0)
	MapEditor_SetupAI(6, 1, 6000, 3, "Zentrum_Player6", 3, 0)
	MapEditor_SetupAI(7, 3, 3500, 2, "Zentrum_Player7", 0, 0)
	-- KI-Spieler 8 wird "militärisch" nicht aktiviert
	MapEditor_SetupAI(8, 0, 0, 0, "", 0, 0)

Hinweise

Nun noch einige Hinweise:


Wichtig: Je nach Strength-Wert werden für die KI unterschiedlich viele Slots für Armeen reserviert. Armeen mit einer der entsprechenden IDs werden von der KI kontrolliert, egal ob sie per Script erstellt wurden (was man eh nicht machen sollte), oder die KI sie selbst rekrutiert hat.

Zur Vermeidung von Problemen sollten diese IDs für die Erstellung von Armeen per Script nicht verwendet werden.

Stärke Reservierte IDs
0 keine
1 1 bis 2
2 1 bis 4
3 1 bis 6

Die KI erteilt Armeen mit einer anderen ID keine Befehle! Diese können ausschließlich per Skriptbefehlen kontrolliert werden.

Beispiel:

 MapEditor_SetupAI( 2, 3, 11000, 3, "playerTwo", 3, 0)
 SetupPlayerAi( 2, { serfLimit = 20, extracting = 1, constructing = true, repairing = true } )

Da in diesem Fall playerTwo strength = 3 ist, würde für den playerTwo nur noch die ID 0, 7, 8, 9 für zusätzliche Armee zur verfügung stehen

In C fängt alles bei 0 an, wie beispielsweise auch die Armee IDs, in Lua hingegen gehts erst bei 1 los.
Daher ist die 0 eben noch frei, da erst ab 1 reserviert wird.

Wer das alles soweit verstanden hat, und noch etwas mehr Einfluß auf die KI nehmen will, für den gibt es noch das Kapitel Computergegner für Fortgeschrittene.

Zur Tutorial-Übersicht