Archivierte Modifikationen > [SuM 1½] Ankündigungen und Diskussion
[SuM 1½] Unterstützung für KI-Erstellung gesucht
Rimli:
Falls euch die Script-Logs beim starten eines Gefechts auf der SuM1 Rohan Map mit Mordor als befreundete Armee (man sieht gleich was die KI macht ...) interessiert, ich hab die Logs mal hochgeladen:
KI Logs
ElvenRider:
Hallo Rimli,
Ich konnte es einfach nicht lassen - "curiosity killed the cat ....". In der Karte "ai_men of the west" wird auf die "multiplayer_start_teams. map" verwiesen. Hier sind die "Start-Teams" (Baumeister) für alle Fraktionen hinterlegt.
Ich glaube, die Fraktionskarten aus SUMI werden nicht mehr benutzt, da die Baulisten und Teams aus einer anderen Quelle kommen: SkirmishAidata.ini. Der Baumeister einer Fraktion erstellt dynamisch die jeweiligen Gebäude gemäß seiner Liste/Reihenfolge aus der CommandSet.ini. Danach übernehmen die Gebäude die weitere Produktion.
Zuvor muß jedoch eine Meldung erfolgen: "Ich bin jetzt fertig".
Wie merkt nun die KI bzw. das Spiel, wann und wieviele Gebäude fertiggestellt wurden ? Hier könnte die "ai_predictive_building.m ap" und die "ai_economy_execution.map" ins Spiel kommen.
Anhand von Variablen (Werte, Timer und Referenzen) entscheidet sich KI, ob sie genug Geld, Rohstoffe und Kommandopunkte hat, um Truppen, etc zu bauen.
Die Schwierigkeit bei SUMII ist die Suche, welche "magischen Werte und Bedingungen", diese Ereignisse veranlassen. Dies ist keine leichte Aufgabe, da man alle Skripte prüfen muß.
Wie der Ablauf genau erfolgt, steht wahrscheinlich nur im SumII-Programm. Dennoch kann man mit neuen Skripten und Variablen den Spielverlauf verändern.
Noch einmal zur Erklärung: Die "AI_CURRENT_CONSTRUCTION_ SITE" ist eine Referenz, ein dynamischer Plazhalter, wo auf der Karte zuletzt etwas gebaut wurde. Es ist per Skript möglich, einzelne Strukturen als "unit" zu referenzenieren und somit ihre Position auf einer Karte zu bestimmen, ohne absolute XYZ-Koordinaten zu benutzen. In SUMII wird das auch genutzt. Jede Karte verfügt über allgemeine "waypoints" wie "Player_1_Start", etc. Genaue Angaben findet man im WB unter "Item List + Waypoints".
Vielleicht helfen Dir meine Angaben, deine Nachforschungen abzukürzen und schneller ans Ziel zu gelangen.
Viel Erfolg,
ElvenRider
Rimli:
Danke Elvenrider, leider kann ich das über die SuM2 KI gar nicht nutzen, weil ich diese komplett deaktivieren muss.
Die macht mit dem Festen Bauen gar nix, und es werden z.B. nicht mal Festungen für die KI entpackt -> KI Spieler verliert sofort.
Ich hab jetzt mal Step für Step die KI in einem SuM1 Gefecht beobachtet.
Die ersten Frames bekommt die KI ihre Base, ihre Startunits und bei Step 6 werden Gebäude gebaut:
--- Code: ---6 Run script - Player_2/a_Skirmish - Init Build - Balanced
6 Run script - Player_2/Enable Veterancy
6 Run script - Player_2/ee_Check Current Construction Site
6 Run script - Player_2/g_Defense - Disable Gate Scripts
6 Run script - Player_2/g_Init - Recruit Spellbook Team
6 Player_2/AI Spellbook - creating team instance.
--- Ende Code ---
Interessant ist hier das erste Script. Die ai_mordorskirmish.map sagt dazu:
--- Code: ---[ns A D] [H]a_Skirmish - Init Build - Balanced:
*** IF ***
Timer 'gt_Init_Window' has expired.
*AND* Counter 'g_Skirmish_Random_AI_Type' IS Equal To 2
*AND* Can player Player '<This Player>' build at base Unit 'AI_CURRENT_CONSTRUCTION_SITE'
*** THEN ***
Player '<This Player>' gets $ 900
Build building 'MordorOrcPit' at a foundation that is the most near, relative to the object of type, 'Center1' which is part of the base named, Unit 'AI_CURRENT_CONSTRUCTION_SITE' ... then finally reference the new building as: UnitRef 'AI_BARRACKS_1' .
Build building 'MordorHaradrimPalace' at a foundation that is the most near, relative to the object of type, 'Center1' which is part of the base named, Unit 'AI_CURRENT_CONSTRUCTION_SITE' ... then finally reference the new building as: UnitRef 'AI_PALACE_1' .
Build building 'SlaughterHouse' at a foundation that is the most far, relative to the object of type, 'Center1' which is part of the base named, Unit 'AI_CURRENT_CONSTRUCTION_SITE' ... then finally reference the new building as: UnitRef 'SLAUGHTER_HOUSE_1' .
Build building 'SlaughterHouse' at a foundation that is the most far, relative to the object of type, 'Center1' which is part of the base named, Unit 'AI_CURRENT_CONSTRUCTION_SITE' ... then finally reference the new building as: UnitRef 'SLAUGHTER_HOUSE_2' .
--- Ende Code ---
Jetzt ist die Frage, wieso macht die KI in SuM2 nichts. Ich vermute die Bedingung "Can player Player '<This Player>' build at base Unit 'AI_CURRENT_CONSTRUCTION_" ist nicht erfüllt. Die Frage ist nur, wieso das so ist? :-[
Zum Vergleich: In SuM2 sucht die KI in Step 6 lediglich nach einem Object mit KindOf BASE_FOUNDATION ...
--- Code: ---6 Advancing SeqScript 'mpe_Spawn - Disband' on Start Team - Mordor -- Team Team '<This Team>' will move to the nearest object of kindof Kind is 'BASE_FOUNDATION'.
6 Advancing SeqScript 'mpe_Spawn - Disband' on Start Team - Mordor -- Set Team '<This Team>' to be assimilated by the first walk on army.
6 Advancing SeqScript 'mpe_Spawn - Disband' on Start Team - Mordor -- Team Team '<This Team>' will move to the nearest object of kindof Kind is 'BASE_FOUNDATION'.
6 Generic script 'mp_Spawn - Disband' run on team Start Team - Mordor
6 Generic script 'mp_Spawn - Disband' run on team Start Team - Mordor
--- Ende Code ---
ElvenRider:
Hallo Rimli,
Benutzt deine Mod den Porter, um Gebäude zu bauen ? Falls nicht, könntest du den physichen Waypoint "Player_1_Start" benutzen, um dort direkt deine Festung,etc. zu errichten (per spawn). Allerdings weiß ich nicht, wie dann das Verhalten bei der Rohstoffproduktion ist. Oder du referenzierst diesen Waypoint per Zusatzskript als ''AI_CURRENT_CONSTRUCTION_ SITE''. Alle weiteren Skript-Befehle können sich dann darauf beziehen. In SUM1 kannst du jede Einheit refenzieren. Meine Extra-Truppen in AMS werden über solche "Referenzen" erzeugt. Andernfalls hätte ich jede Karte anpassen müssen. Also, ich glaube, daß das auch in SUM2 gehen sollte.
Grüße ElvenRider
Rimli:
Hab mir nochmal genau die Skripts angeguckt.
Die Bedingungen in SuM1, damit das Skript zum Bauen der Gebäude startet sind folgende:
--- Code: ---Timer 'gt_Init_Window' has expired.
*AND* Counter 'g_Skirmish_Random_AI_Type' IS Equal To 2
*AND* Can player Player '<This Player>' build at base Unit 'AI_CURRENT_CONSTRUCTION_SITE'
--- Ende Code ---
Ich hab die Skripte gefunden, die diese Bedingungen erfüllen sollen:
--- Code: ---[ns A D] [H]g_Init - Initialize Global AI Values:
//:This script initializes the global base values for the AI. They are as such: g_Economy_Ugency: How important is economy in the early going? g_Attack_Ugency: How important is attacking early on? g_Defense_Ugency: How important is defending early on? g_Attack_OwnedTeamValue: How much will 2 attack units contribute to the AI's urgency to attack? g_AttackTimeMaxValue: Where will time stop mattering to the Attack Urgency? Setting this low will make the AI attack more based on army size instead of just how long its been in the map.:
*** IF ***
True.
*** THEN ***
Set timer 'gt_Init_Window' to expire in 1.00 seconds.
Set Counter 'g_Skirmish_Random_AI_Type' randomly between 1 and 4 .
Set Flag named 'AI_On' to TRUE
Set 'g_Economy_Urgency' to 400
Set 'g_Attack_Urgency' to 200
Set 'g_Defense_Urgency' to 500
Set 'g_Attack_TimeMaxValue' to 400
Set 'g_Urgency_Change_Low' to 2
Set 'g_Urgency_Change_Med' to 50
Set 'g_Urgency_Change_High' to 100
Set 'g_ATTACK_URGENCY_CHANGE_LOW' to 2
Set 'g_ATTACK_URGENCY_CHANGE_MED' to 35
Set 'g_ATTACK_URGENCY_CHANGE_HIGH' to 100
--- Ende Code ---
--- Code: ---[ns A D] [E N H]g_Init - Unpack Base for AI 1:
*** IF ***
Unit 'BASE_FLAG_1' is owned by Player '<This Player>'
*** THEN ***
Instantly unpack the free base: Unit 'BASE_FLAG_1'and reference it as UnitRef 'AI_BASE'.
Set UnitRef 'AI_CURRENT_CONSTRUCTION_SITE' to reference unit Unit 'BASE_FLAG_1'
Control of Team 'PlyrCivilian/Player_1_Inherit' transfers to Player '<This Player>'
*** ELSE ***
Disable Script 'g_Init - Unpack Base for AI 1'.
--- Ende Code ---
Ich glaub das zweite Skript macht Probleme. Die KI in SuM2 macht die ganze Zeit nur das folgende Skript:
--- Code: ---[S A nd] [E N H]mpe_Spawn - Disband:
*** IF ***
True.
*** THEN ***
Set Team '<This Team>' to be assimilated by the first walk on army.
Team Team '<This Team>' will move to the nearest object of kindof Kind is 'BASE_FOUNDATION'.
Team '<This Team>' stops, then disbands.
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln