Große KI Angriffe steuern

» Siedler Map Source Forum » Siedler DEdK Script Forum » Große KI Angriffe steuern

Seiten: 1

Messoras
#1
06.03.2020 00:56
Beiträge: 84

Große KI Angriffe steuern

Hallo zusammen,
ich wollte mir für die Semesterferien eigentlich mal was leichtes vornehmen. Eine einfache super kleine Map ohne viele komplizierte Mods und mächtig auf die Fresse...
Aber Armeen sind so dermaßen verkrebst :I
Irgendwie sind die KI-Armeen ja auf 8 Leader begrenzt und buggen nur noch rum, sobald sie zu viele Einheiten beinhalten. Ich mache es aktuell so, dass die Verteidigungstruppen, die z.B. irgendwas bewachen sollen Armeen sind und alle paar Minuten ein oder zwei Trupps regenerieren, bis sie bei 8 sind. Die Angreifer erzeuge ich mit CreateMilitaryGroup und schmeiße sie alle in ein Table, das ich im ControlJob bei jedem Tick durchiteriere, alles was tot ist rausschmeiße und mit dem Rest das Angriffsmuster ausführe.
Dabei verwende ich Scriptnamen, wie "atk"..i für die Leader.
Jetzt hab ich mir aber überlegt, dass ich die Soldaten eigentlich doch ganz gerne in den Militärgebäuden ausbilden lassen würde. Also probiere ich momentan mit Logic.BarracksBuyLeader herum, aber da die Methode keine Rückgabe hat, ist es recht schwierig die ausgebildeten Truppen zu referenzieren. Meine Idee war direkt nach dem Aufruf von BarracksBuyLeader Leader im Bereich um das Militärgebäude zu suchen, die:
- Keiner Armee angehören
- noch keinen Scriptnamen haben
ihnen eine Nummer zuzuweisen und sie in das Table einzufügen. Aber ich weiß nicht, wie man prüft, ob ein Trupp bereits einer Armee angehört (habe keine passende Logic Funktion gefunden). Kann mir jemand sagen wie ich das prüfen kann, oder hat vielleicht sogar eine viel simplere Idee?

Gruß,
Messoras

____________________
Six feet of earth make us all equal.

Spielt Siedler 5 online mit mir, dank des neuen Siedler 5 MP Projekts von Kimichura.

Dieser Beitrag wurde von Messoras am 06.03.2020 um 01:45 editiert.

Play4FuN
#2
06.03.2020 08:30
Beiträge: 704

Moin,
ja das ist allerdings ein kniffliges Thema Teilweise sind die existierenden Armee Funktionen schon toll, aber oft einfach nur nervig, sodass man am liebesten alles selbst schreiben möchte...

Jetzt hab ich mir aber überlegt, dass ich die Soldaten eigentlich doch ganz gerne in den Militärgebäuden ausbilden lassen würde.


Eine einfache Idee wäre sowas:

function KI_BuyTroop(_Army, _Category)
 
    AI.Army_BuyLeader(_Army.player, _Army.id, _Category)
    AI.Entity_ConnectUnemployedLeaderToArmy(_Army.player, _Army.id, _Army.strength)
 
end


Allerdings hast du da weniger Kontrolle, wo jemand ausgebildet wird. Wenn du doch BarracksBuyLeader verwenden möchtest, dann kommst du schon an die ID. Erstelle einfach einen EntityCreated Trigger (Events.LOGIC_EVENT_ENTITY_CREATED), schau ob es ein Leader ist und mach damit was du willst. Du kannst a) bei der Siedler AI bleiben und hast diese Funktionen:
AI.Entity_ConnectUnemployedLeaderToArmy( PlayerID, ArmyID, MaxTroops ) - sucht automatisch welcher Leader noch nicht zu einer Armee gehört.
AI.Entity_ConnectUnemployedLeader( PlayerID, MaxTroops ) - sucht außerdem eine passende Armee aus.
AI.Entity_ConnectLeader( LeaderID, ArmyID ) - teile diesen Leader eine bestimmten Armee zu.
AI.Army_GetNumberOfTroops( PlayerID, ArmyID ) - kann zudem nützlich sein, wenn du selbst schauen willst, welche Armee noch Kapazitäten hat.
Kniffliger ist es bei Kanonen - es kann passieren (so scheint mir), dass der AI Spieler eine Kanone kauft und sie dann zu einer vollen Armee zuteilt, weil sie während des Fertigungsprozesses noch nicht zählt, ergo währenddessen noch andere Leader zur selben Armee hinzugefügt werden können. Passiert zwar nicht mal so selten, aber ist vermutlich keine Katastrophe...

b) alle Leader manuell verwalten und komplett auf die Siedler AI Funktionen verzichten... das lohnt sich aber vermutlich nicht für ein kleines Projekt. Außer natürlich du legst deinen ganzen Fokus für diese Karte darauf, dann vielleicht schon. Aber ich kann dir aus Erfahrung sagen, dass das nicht leicht wird
(Hat aber den Vorteil, dass man diverse dumme Verhaltensweisen ausmerzen kann. vielleicht sollte ich meine angefangene Spieler AI endlich mal fertigstellen...)

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#3
06.03.2020 11:28
Beiträge: 1472

Ein paar Anmerkungen dazu:
- Ich würde den Leadern keine Namen geben, sondern nur die ids in einem table speichern.
- Der EntityCreated Trigger ist die einfachste möglichkeit um an die id des Leaders zu kommen.

Ich habe für beides Comfort Funktionen die ich eigentlich mal veröffentlichen könnte (newArmy und buyLeader). Schreib mir nichmal wenn du die verwenden möchtest.

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum