Archivierte Modifikationen > [SuM 1½] Ankündigungen und Diskussion

[SuM 1½] Unterstützung für KI-Erstellung gesucht

<< < (3/7) > >>

Rimli:
Ich habe inzwischen einen komplett neuen Ansatz verfolgt und darin inzwischen einige Fortschritte gemacht:
Die SuM2 KI wird wieder als Grundlage benutzt, ein Skript auf meiner Testmap entpackt für die KI ihre Base direkt nach Spielstart und eine neue, ganz normale KI-base für SuM2 lässt die KI mit ihrem Porter genau dort Gebäude bauen, wo ein Bauplatz wäre.

Aber jetzt habe ich Probleme, da ich ein ungewöhnliches Phänomen entdeckt habe.
Anscheinend ist es entscheidend, mit welchem Spiel eine Map das erste mal erstellt wurde und ob eine Map original von EA kommt oder eine Eigene Map ist.

Ich habe nämlich alle Maps inzwischen im SuM2 Worldbuilder bearbeitet und abgespeichert und trotzdem zeigen diese jetzt unterschiedliche Eigenschaften, was diverse Probleme verursacht:

Problem 1:
Die Menschen KI führt auf EA SuM1 Maps die Skripts der multiplayer_human-library aus, obwohl sie dies gemäß ihrer playeraitypes.ini-Einträge gar nicht sollte!
Dies tut weder die Mordor KI auf EA SuM1 Maps, noch tut die Menschen KI dies auf selbsterstellten SuM1 Maps.
Das Problem ist, dass die Menschen KI durch ein Skript in der Library direkt bei Spielbeginn eine Base entpackt bekommt (wie in SuM1). Dieses Skript will ich nicht deaktivieren, da es ja für Menschen benötigt wird, da diese ganz normal wie in SuM1 spielen sollen.
Die Menschen KI benutzt jedoch jetzt ihre Porter nicht. Das scheint am Platz zu liegen: Löscht man der KI auf SuM1 Maps ihre CastleFlag und hat sie am Beginn des Spiels Platz, lädt auch die KI base und die KI benutzt den Porter.
Es ist also entscheidend, dass die KI ihre Festung erst unmittelbar NACH Spielbeginn durch das Skript auf der jeweiligen Gefechtsmaps bekommt, damit am Anfang die AI-Base ungestört laden kann.

Problem 2:
Ich benutze einen Trick, um die SuM2 KI dazu zu bringen, auf Econplots zu bauen. Und zwar gibt der Porter dem Econplot per Leadership ein Upgrade, worauf dieser entpackt wird:

--- Code: ---  Behavior = DoCommandUpgrade Module_DoCommandUpgrade   
        TriggeredBy = Upgrade_TriggerAIUnpack
        GetUpgradeCommandButtonName = Command_UnpackEconomyPlot
  End
--- Ende Code ---

Das funktioniert auf SuM1 Maps (EA und selbsterstellt), jedoch nicht auf SuM2 Maps. Ich brauch es jedoch auf allen Maps , da die KI immer die Econplots benutzten soll.

Fazit: Es scheint unterschiede zwischen den Maps zu geben, und zwar scheint es enscheidend zu sein, in welchem Spiel eine Map ursprünglich erstellt wurde und ob die Map ursprünglich von EA stammt oder selbsterstellt wurde. Weiß darüber irgendjemand etwas oder hat sonst eine Idee?

Ich hoffe, es ist alles verständlich ausgedrückt (gar nicht so leicht wenn man selbst in der Materie tief drinsteckt und überlegen muss, was ein Außenstehender jetzt alles nicht weiß und erklärt bekommen muss ...) Falls was unklar ist, einfach nachfragen.

EDIT 20.12.09:
Das mit der multiplayer_human library hat sich erledigt. Hatte nur vergessen, auf den original SuM1-Maps den Skirmish_Men Player hinzuzufügen, daher wurde die KI nicht gestartet und das Spiel dachte, es handle sich um einen menschlichen Spieler.

Reshef:
Mhh, also funktionieren nur die Sum2 Maps noch nicht?
Guck mal in der Player List (Edit/player List) ob dort alles gleich ist.
Damit meine ich alle Felder, ansonsten fällt mir da nix ein.

Rimli:
KI benutzt jetzt Buildplots, wenn diese explizit benannt sind.

Probleme hab ich jedoch, wenn das Gebäude zerstört wird und die KI das Ding wiederaufbauen soll.
Wie bring ich die KI dazu, zu prüfen, ob der Bauplatz frei ist und die KI dann solang probieren soll (könnte z.B. kein Geld da sein oder Zitadelle zerstört sein) das Gebäude wiederaufzubauen, bis dies gelingt?

Das funzt irgendwie nicht:

--- Code: ---GROUP Gondor Plot 3
[ns A D] [E N H]Gondor Plot 3 - Build Gondor Barracks:
*** IF ***
    True.
*** THEN ***
   Player '<This Player>' gets $ 300
  Build building 'GondorBarracks' at a foundationUnit 'Gondor_Player_1_BP_3'
  Set timer 'gondor_name_plot_3' to expire in 30.00 seconds.
  Set timer 'gondor_rebuild_plot_3' to expire in 60.00 seconds.
  Find unnamed 'GondorBarracks' Owned by Player '<This Player>' nearest team Team '<This Team>' and reference as UnitRef 'Player_1_Building_Plot_3'

[ns A D] [E N H]Gondor Plot 3 - Activate Rebuild:
*** IF ***
    Timer 'gondor_rebuild_plot_3' has expired.
*** THEN ***
  Enable Script 'RebuildBarracksNew'.
  Show military briefing Localized String: 'script laeuft' for 5.00 seconds.

[ns na nd] [E N H]Gondor Plot 3 - Rebuild Barracks:
*** IF ***
     NOT  Unit 'Player_1_Building_Plot_3' exists and is alive.
*** THEN ***
  Build building 'GondorBarracks' at a foundationUnit 'Gondor_Player_1_BP_3'
  Find unnamed 'GondorBarracks' Owned by Player '<This Player>' nearest team Team '<This Team>' and reference as UnitRef 'Player_1_Building_Plot_3'

[ns A nd] [E N H]Sell_After_Time:
*** IF ***
    Counter 'Seconds_Past' IS Greater Than  30
  *** OR ***
*** THEN ***
  Sell anything on foundation named Unit 'Gondor_Player_1_BP_3'

END GROUP Gondor Plot 3
--- Ende Code ---

Die KI baut jetzt alle 60s eine Kaserne obwohl schon eine Kaserne auf dem Bauplatz steht -> es stehen mehrere Kasernen auf dem Bauplatz.

Was soll ich tun? :-[

Rimli:
Ich benutze jetzt als Bedingung für den Neubau eines Gebäudes "If 'Player_1_Building_Plot_3 _1' is destroyed." (Kaserne hat Referenz 'Player_1_Building_Plot_3 _1').

Aber das Problem ist: Die Referenz wird nach der Zerstörung des Gebäudes nicht wieder freigegeben. Daher kann die neugebaute Kaserne die Referenz nicht übernehmen, auch wenns im Skript steht. -> 'Player_1_Building_Plot_3 _1' kann nicht mehr an neue Kaserne vergeben werden -> spielt merkt nicht wenn diese neue Kaserne zerstört wrid -> Wiederaufbau funktioniert nur einmal.

Gibt es irgendeine Möglichkeit die Referenz nach der Zerstörung der ersten Kaserne wieer "freizugeben" damit die zweite, wiederaufgebeute Kaserne die Referenz übernehmen kann?

Reshef:
Script 1 (aktualisierung alle X Sekunden)

***If***
"Player_1_Building_Plot_3 _1" and is alive  (unter Unit)
***Then***
Set Flag "Player_1_Building_Plot_3 _1" to True
***Else***
Set Flag "Player_1_Building_Plot_3 _1" to False

So, und dann halt das script nur ausführen lassen wenn die Flag auf False steht.
Das bau script darf aber nicht häufiger ausgeführt werden, als dieses, sonst gibts probleme ;)
Es bietet sich aber hier an, das direkt am anfang des Spiels diese Flag auf False gesetzt wird.
Ich gebe keine Garantie auf die richtige Wortwahl, habs nur aus dem Kopf geschrieben.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln