28. Mär 2024, 20:48 Hallo Gast.
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge. Hierbei werden gemäß Datenschutzerklärung Benutzername und Passwort verschlüsselt für die gewählte Dauer in einem Cookie abgelegt.


Select Boards:
 
Language:
 


Autor Thema: [SuM 1½] Unterstützung für KI-Erstellung gesucht  (Gelesen 20447 mal)

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Liebe SuM-Modding-Gemeinde!

Leider ist es so, dass ich bei der Mod arge Probleme mit der KI habe.

Die Wiedereinführung der Basen hat die komplette SuM2 KI leider auf einen Schlag lahm gelegt, das heißt die KI baut weder Gebäude, noch Einheiten, noch nutzt sie Spells oder bewegt ihre Startunits.

Deswegen suche ich Modder, die sich mit der SuM-KI, vor allem der SuM1-KI auskennen und mir da etwas mit Rat zur Seite stehen können.

Wenn ihr Erfahrung mit der KI habt, wär es toll, wenn ihr euch hier melden könntet. Jeder Beitrag, da einen Einstieg zu finden, würde mich freuen. :) Gerne nehme ich auch Hinweise auf irgendwelche SuM1-KI Tutorials entgegen, die sind leider offensichtlich spärlich gesäht, ich habe nichts dazu finden können. Vielleicht habt ihr noch irgendwelche Tutorials auf der Festplatte oder einen Link in die Weiten des Internets auf Lager?


Wär' klasse, wenn ihr mich irgendwie unterstützen könntet, die KI irgendwie zum laufen zu bringen. :)
Eine Mod ganz ohne KI ist leider eben nochmal was anderes als eine Mod mit unspektakulärer KI auf EA-Niveau oder KI die nur die EA-Völker unterstützt.

Gruß
Rimli

ElvenRider

  • AMS Team
  • Pförtner von Bree
  • *****
  • Beiträge: 97
  • now for wrath, now for ruin, and a red dawn
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #1 am: 1. Okt 2009, 09:37 »
Hallo Rimli

Ich habe mir gestern die KI von SUMII und die relevanten Dateien angeschaut. Eine zentrale Rolle spielen wohl die Einträge in der init\default\skirmishaidata.ini, da hier Werte für die neuen Fraktionen hinterlegt sind.
Ähnlich wie bei SUMI werden alle Begegnungen wie "Gefechte" angesehen. Allerdings scheinen bei den einzelnen Karten mehr Skripte eingesetzt worden zu sein.
Die Bedeutung der "faction- and control-maps" in der libraries.big für SUMII ist mir nicht klar geworden.

Also hier ein paar Anregungen, um Licht ins Dunkel zu werfen:
1. Prüfe, alle Kampagnen-Karten inwieweit Skripte die KI steuern
   (Wordbuilder -> open map -> Dump map to file) Dananch hast du alle Skripte als Textdatei.

2. Nimm eine Standard-Karte und versuche den Ablauf der dortigen
    Skripte zu verstehen; d.h. Ergeignisse und Variablen

3. Prüfe, welche "maps" aus der libraries.big durchlaufen werden,
    indem du ein Skript mit Textanzeige einfügst. Geht leider nicht anders (:-((
    Welche Rolle spielt die "ai_men of the west.map" ???

Viele Skripte beziehen sich auf echte "Waypoints" (z.b. Player_Start_1 oder so) oder generische Referenzen "AI-BASE" oder "AI_CURRENT_CONSTRUCTION_ SITE" an denen sie ein Gebäude, eine Einheit oder ein Team erzeugen.
Leider ist dieses Vorgehen recht aufwendig, jedoch es lohnt sich auf jeden Fall. Neue Skripte zu schreiben, erfordert etwas Übung und Geduld.
Falls du Fragen hast, kannst du mich direkt ansprechen, weil ich für meine AMS-Mod VIELE Skripte erzeugt hatte. Glücklicherweise hat EA nicht ihre gesamte KI "geschlachtet". 

Gutes Gelingen und viel Erfolg,
Grüße ElvenRider


Reshef

  • Edain Team
  • Istar
  • *****
  • Beiträge: 7.028
  • Größenwahn ist ein Typisch menschliches Laster.
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #2 am: 1. Okt 2009, 17:23 »
Die ai_men of the west.map ist glaube ich die einzigste map die für die ki genutzt wird, sicher bin ich mir aber nicht!
Dort wird geregelt wann welche fähigkeit im spellbook gekauft wird, sonst von EA-mässig nichts!
Man sollte aber auch andere scripts machen können (ich versuche gerade für edain, es hinzukriegen das sie türme bemannt und den ring benutzt :) )
Die multiplayer_human.map ist für den menschlichen spieler, ich hatte den grandiosen einfall dort die scripts für die rj cam einzubauen, somit stehen diese auf jeder map zur verfügung, und es muss nichtmehr jede bearbeiteitet werden!  ;)

Gnomi

  • Administrator
  • Bewahrer des roten Buches
  • *****
  • Beiträge: 12.617
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #3 am: 1. Okt 2009, 17:47 »
Zitat
Die multiplayer_human.map ist für den menschlichen spieler, ich hatte den grandiosen einfall dort die scripts für die rj cam einzubauen, somit stehen diese auf jeder map zur verfügung, und es muss nichtmehr jede bearbeiteitet werden! 
Was ich aber intern schon längst abgelehnt habe, weil der EInfall nicht so grandios ist.
Weil viele Scripts sind von Map zu viel leicht unterschiedlich, auch wenn du es ingame nicht merkst und ein paar Scripts muss ich in jeder Map einfügen, die gehen nicht darüber, da sie sich auf mapeigene areas beziehen.
=> es wird nicht so gemacht.

(Tschuldigung Rimli für das Offtopic, aber das musste ich loswerden.)

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #4 am: 1. Okt 2009, 17:49 »
Hallo!

ElvenRider, vielen Dank für deine Bemühungen. Echt nett von dir, dass du dir extra die INIs etc. angeguckt hast. :)

Skripte hab ich bisher in den SuM2 Maps noch nicht entdeckt, werd mal nachgucken. Das mit dem Dump Map to file hört sich nach ner guten Sache an, das manuelle rumklicken in den Skripts ist doch sehr unübersichtlich. :)

Skripts mit Textanzeige? Ich habe glaub mal irgendwo von einem Verknüpfungs-Suffix in der Verknüpfung gelesen, das die Game.dat Skripts während dem Spiel anzeigen lässt. Weiß da jmd von euch etwas drüber? Werd nochmal rumsuchen ...

ElvenRider, wie ist das genau mit der AI_CURRENT_CONSTUCTION_S ITE? Woher weiß die KI, was das ist? Ich hab einfach mal testweise die playeraitypes.ini von SUM1 eingefügt sowie die Libraries von SUM1 zusätzlich in die Mod.big gepackt.
Die KI baut jetzt Helden in der Zitadelle und greift mit diesen auch an (Mordor nutzt auch das Auge, und hab sogar einmal gesehen, wie die Mordor KI ein Sägewerk eingenommen hat), aber die KI baut nichts in der Base und bewegt auch keine Einheiten bis sie 2-3 Helden ausgeblidet hat.
Die SuM1-Bauskripts scheinen nicht zu funktionieren. Hab mir die Skripts angesehen, soweit ich das verstanden habe müssten sie eigentlich noch in Ordnung sein, d.h. die Objektnamen eig. aller Gebäude stimmen noch, daran kann's also nicht liegen. Vllt weiß die SuM2 KI nicht, was eine "AI_CURRENT_CONSTRUCTION_ SITE" ist? Diese ist stets in den Skripts angegeben.

Wichtige Frage an SuM2ler:
Was braucht die KI in SuM2 dass sie "anläuft"? Hab gemerkt, dass sie nur was macht, wenn die KI eine Festung hat. Wieso ist das so? Welche Dinge sind so besonders an der Festung, dass sie die KI "aktivieren"? Könnt ich so nicht auch die KI aktivieren? Den Zitadellen der SuM1 Basen einfach die INI der Fortress zu geben reicht leider NICHT aus. :( Es muss irgendwas anderes sein ...
Das wäre hilfreich zu wissen, wenn ich weiter mit der SuM2 KI experimentieren will. Im Moment tut sie nur etwas, wenn sie als Startgebäude die Festung erhält. Sie tappt dann jedoch auch nur sinnlos mit den Startunits rum, benutzt bestenfalls noch das Auge und baut Helden in der Festung, die sie in der Mod eigentlich gar nicht haben soll. Insgesamt also noch ein sehr spärlicher Ansatz. -.-

@Reshef
Danke für die Erklärungen. Die ai_men of the west.map ist zumindest die einzige, die in den SuM2-Libraries angegeben wird. Und in Sûls SuM2 KI Tutorial heißt es auch, dass standardmäßig in SuM2 nur noch Spells durch Skripts gesteuert werden.


EDIT: Suffix für die KI gefunden (Suls KI Tutorial auf 3rdage):
Zitat
With SkirmishAI_1's scripts you could always see what was going on ingame by starting it using '-scriptdebug2', an awesomely useful (and needed) tool!

EDIT2: Spiel mit -scriptdebug2 gestartet.
Sehr interessanter Unterschied zwischen SuM1 und SuM2 bei den Variablen:

SuM1:
Zitat
Player_1/l_Econ - Current Construction Site Buildable = 1
SuM2:
Zitat
Player_1/l_Econ - Current Construction Site Buildable = 0

Das könnte natürlich entscheidend sein. Werd mal forschen, wieso das in SuM2 so ist.

EDIT3: @ElvenRider
In den SuM2 maps befinden sich nur Scripts bezüglich Gollum, wie er über die Map zu tappen hat um den Spielern das Erreichen von Ringhelden schwerer zu machen. Da ist nichts wichtiges über das Bausystem ...

EDIT4: Mit ElvenRiders Methode (geht echt gut :) ) die AI_Mordor.map-Library aus SuM1 durchsucht, die aktuell auch in meiner Mod verwendet wird.
Erste interessante Details:
[ns na nd] [E N H]e_Update Current Construction Site:
//:This set of scripts will check if the econ urgency has crossed the expansion threshold.  If so, then it will check if the current construction site can no longer build before trying to set a new expansion as the current site.  An arbitrary site will be chosen from the ones that are available to be built at.:
*** IF ***
    True.
*** THEN ***
  Run Subroutine 'ee_Check Current Construction Site'.
  Run Subroutine 'ee_Set Current Construction Site'.

[ns A nd] [E N H]ee_Check Current Construction Site:
*** IF ***
     Can player Player '<This Player>' build at base Unit 'AI_CURRENT_CONSTRUCTION_SITE'
*** THEN ***
  Set Flag named 'l_Econ - Current Construction Site Buildable' to TRUE
*** ELSE ***
  Set Flag named 'l_Econ - Current Construction Site Buildable' to FALSE
« Letzte Änderung: 1. Okt 2009, 19:39 von Rimli »

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #5 am: 2. Okt 2009, 18:23 »
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
« Letzte Änderung: 2. Okt 2009, 18:36 von Rimli »

ElvenRider

  • AMS Team
  • Pförtner von Bree
  • *****
  • Beiträge: 97
  • now for wrath, now for ruin, and a red dawn
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #6 am: 2. Okt 2009, 19:06 »
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

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #7 am: 9. Nov 2009, 21:35 »
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:
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.

Interessant ist hier das erste Script. Die ai_mordorskirmish.map sagt dazu:
[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' .

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 ...
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
« Letzte Änderung: 9. Nov 2009, 21:46 von Rimli »

ElvenRider

  • AMS Team
  • Pförtner von Bree
  • *****
  • Beiträge: 97
  • now for wrath, now for ruin, and a red dawn
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #8 am: 11. Nov 2009, 17:49 »
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

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #9 am: 22. Nov 2009, 21:45 »
Hab mir nochmal genau die Skripts angeguckt.

Die Bedingungen in SuM1, damit das Skript zum Bauen der Gebäude startet sind folgende:
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'

Ich hab die Skripte gefunden, die diese Bedingungen erfüllen sollen:
[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


[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'.

Ich glaub das zweite Skript macht Probleme. Die KI in SuM2 macht die ganze Zeit nur das folgende Skript:
[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.

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #10 am: 20. Dez 2009, 17:40 »
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:
  Behavior = DoCommandUpgrade Module_DoCommandUpgrade   
        TriggeredBy = Upgrade_TriggerAIUnpack
        GetUpgradeCommandButtonName = Command_UnpackEconomyPlot
  End

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

  • Edain Team
  • Istar
  • *****
  • Beiträge: 7.028
  • Größenwahn ist ein Typisch menschliches Laster.
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #11 am: 20. Dez 2009, 18:06 »
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

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #12 am: 20. Dez 2009, 21:30 »
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:
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

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

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #13 am: 22. Dez 2009, 18:46 »
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

  • Edain Team
  • Istar
  • *****
  • Beiträge: 7.028
  • Größenwahn ist ein Typisch menschliches Laster.
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #14 am: 22. Dez 2009, 19:07 »
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.

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #15 am: 22. Dez 2009, 20:09 »
Das mit der Flag hab ich auch schon probiert und das funzt aus dem selben Grund nicht:

Wenn die Kaserne zerstört ist ist "Player_1_Building_Plot_3 _1" nicht mehr vorhanden und die neue Kaserne kann die Referenz nichtübernehmen -> Flag ist immer noch False -> Kaserne wird aufgebaut, obwohl schon eine wieder gebaut wurde -> mit der Zeit unendlich viele Kasernen auf einem Bauplatz

Reshef

  • Edain Team
  • Istar
  • *****
  • Beiträge: 7.028
  • Größenwahn ist ein Typisch menschliches Laster.
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #16 am: 22. Dez 2009, 20:20 »
Warum kann den die neue Kaserne nicht genauso heissen?
Zb beim spawnen von Einheiten, können nie 2 einheiten gleichen namens existieren. Wenn aber nun der eine Trupp tot ist, kann wieder ein neuer gleichen namens gespawnt werden.
Ist das beim bauen nicht das selbe?

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #17 am: 23. Dez 2009, 16:49 »
Hallo Resh!

Also ich hab die Skripte jetzt bisschen umgeändert und es funktioniert jetzt! Anscheinend hast du recht, die neue Kaserne kann genauso heißen. Jedoch hab ich das bei meinen vorherigen Scripts irgendwie nie hinbekommen (man muss höllisch aufpassen mit "deactivate upon success" und "is active") aber so funktioniert es jetzt:

Plot 3 - Build Gondor Barracks (active, deactivate upon success)
*** IF ***
True.
*** THEN ***
   Player '<This Player>' gets $ 350
  Build building 'GondorBarracks' at a foundationUnit 'Gondor_Player_1_BP_3'
  Set timer 'Rebuild_Plot_3' to expire in 60.00 seconds.
  Find unnamed 'GondorBarracks' Owned by Player '<This Player>' nearest team Team 'PlyrCivilian/Start_Team' and reference as UnitRef 'Player_1_Building_Plot_3_1'

Plot 3 - Destroyed Building  (active, NOT deactivate upon success)
*** IF ***
Timer 'Rebuild_Plot_3' has expired.
*AND*  Unit 'Player_1_Building_Plot_3_1' has been destroyed.
*** THEN ***
  Enable Script 'Plot 3 - Start Rebuild Building'.
  Set timer 'Rebuild_Plot_3_Do_The_Work' to expire between 30.00 and 90.00 seconds.
  Set timer 'Rebuild_Plot_3' to expire in 120.00 seconds.

Plot 3 - Start Rebuild Building (NOT active, deactivate upon success)
*** IF ***
Timer 'Rebuild_Plot_3_Do_The_Work' has expired.
*** THEN ***
  Enable Script 'Plot 3 - Rebuild Building'.

Plot 3 - Rebuild Building (NOT active, NOT deactivate upon success)
*** IF ***
Counter 'Player_1_money' IS Greater Than or Equal To  350
*** THEN ***
  Build building 'GondorBarracks' at a foundationUnit 'Gondor_Player_1_BP_3'
  Set timer 'Rebuild_Plot_3' to expire in 60.00 seconds.
  Find unnamed 'GondorBarracks' Owned by Player '<This Player>' nearest team Team 'PlyrCivilian/Start_Team' and reference as UnitRef 'Player_1_Building_Plot_3_1'
  Disable Script 'Plot 3 - Rebuild Building'.

Ich speichere das Geld des Spielers durch ein seperates Skript, das ständig ausgeführt wird, in einem Counter. Gibt's da ne bessere Möglichkeit, der Counter ist nämlich leider nicht immer ganz genau, da ja Geld ausgegeben werden kann kurz bevor das Skript dies im Counter aktualisiert. Die Folge wäre, dass das RebuildSkript inaktiv wäre, ohne dass ein Gebäude hätte gebaut werden können.

Reshef

  • Edain Team
  • Istar
  • *****
  • Beiträge: 7.028
  • Größenwahn ist ein Typisch menschliches Laster.
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #18 am: 23. Dez 2009, 16:55 »
*** IF ***
    True.
*** THEN ***
  Store amount of  Player 'Player_1' money to the counter 'Geld'
Sowas? Müsstest du nurnoch jedes Frame ausführen.

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #19 am: 23. Dez 2009, 17:15 »
Jo genau.

Mach ich jetzt auch:
*** IF ***
    True.
*** THEN ***
  Store amount of  Player '<This Player>' money to the counter 'Players_money'
  Show 'Players_money' with text Localized String: 'Players Money'

Reshef

  • Edain Team
  • Istar
  • *****
  • Beiträge: 7.028
  • Größenwahn ist ein Typisch menschliches Laster.
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #20 am: 23. Dez 2009, 18:01 »
Dann versteh ich dein problem nicht.
Wird der Counter auch im Spiel angezeigt?
Denn die MotW.map sollte ja nur die Ki beeinflussen.

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #21 am: 23. Dez 2009, 18:47 »
Ja hab's rein gemacht, nachdem du's gesagt hast. ;)

Die Anzeige ist nur zu Testzwecken.

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #22 am: 1. Jan 2010, 16:34 »
So ich würde gern nochmal um eure Hilfe bitten.

Ich will, dass die KI ihre kaputten Zitadellen und Festungs-/Lagermauern erkennt und versucht wiederaufzubauen.

Diese Skriptsequenz hab ich orientiert an der EA SuM1 KI erstellt, die funzt jedoch nicht (die Skripts werden ausgeführt, aber die Zitadellen/Mauern werden nicht wiederaufgebaut ...)

Initialize Repair (active, deactivate upon success)
*** IF ***
    True.
*** THEN ***
   'Citadels' : add 'GondorCampKeep'
   'Citadels' : add 'GondorCastleBaseKeep'
   'Citadels' : add 'GondorOutpost'
   'Defense' : add 'GBCampWall'
   'Defense' : add 'GBCastleElevator'
   'Defense' : add 'GBMGateDoor'
   'Defense' : add 'GondorCastleWall'
   'Defense' : add 'GondorCastleGateL'
   'Defense' : add 'GondorCastleGateR'

Initialize Repair Teams (active, NOT deactivate upon success, every 60 seconds)
*** IF ***
    True.
*** THEN ***
  Team 'Repair Citadel' will recruit  3  units of type 'Citadels' from nearby recruitable allied teams.
  Team 'Repair Defense' will recruit  5  units of type 'Defense' from nearby recruitable allied teams.

Repair Now (active, NOT deactivate upon success, every 60 seconds)
*** IF ***
    True.
*** THEN ***
   Team 'Repair Citadel' use Ability 'Command_StartCitadelSelfRepair'.
   Team 'Repair Defense' use Ability 'Command_StartSelfRepair'.

Irgendwelche Ideen?

MCM aka k10071995

  • Bezwinger der Toten
  • ****
  • Beiträge: 3.846
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #23 am: 1. Jan 2010, 16:50 »
Zitat
die Skripts werden ausgeführt, aber die Zitadellen/Mauern werden nicht wiederaufgebaut
Woher weißt du, dass die Scripts ausgeführt werden? Könnte eventuell helfen, dass zu wissen.
Ansonsten kommt es mir komisch vor, dass ein Team eine Unit rekrutiert, die aber eigentlich gar nicht benannt ist. Wenn man zwei Festungen hat, woher weiß das Spiel, was gemeint wird?
Entweder helfen dir die Fragen oder sie helfen mir, damit ich mich reindenken und dir helfen kann. :)

Es kommt immer darauf an, etwas zu tun, was der Gegner nicht erwartet.


Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #24 am: 1. Jan 2010, 18:34 »
Hallo MCM!

Ich weiß, dass sie ausgeführt werden, indem ich den Suffix "-scriptdebug2" in der SuM Verknüpfung benutze.
Die game.dat zeigt dann alle Skripts an, die ausgeführt werden, Werte von Variablen und man kann in einem normalen Gefecht entweder pausieren, "schrittweise" das Spiel ausführen lassen sowie mit 10-facher Geschwindigkeit spielen (wie das spulen im Replay).
Probier's mal aus, hilft beim Arbeiten mit Skripten ungemein. :)

Das mit dem Team, das unbenannte Zitas rekrutiert, sollte funzen. EA macht das in SuM1 auch so. Es kann zwar durchaus sein, dass da immer nur die drei gleichen Zitadellen ausgesucht werden (z.B. die drei nächsten vom Punkt 0,0,0 im Koordinatensystem der SuM-Maps, kA wie das Skript das genau macht), jedoch müssten doch dann immer genau diese drei Zitadellen garantiert wieder aufgebaut werden ...
Es wird jedoch gar keine Aufgebaut, auch wenn ich z.B. nur zwei Zitadellen habe.

MCM aka k10071995

  • Bezwinger der Toten
  • ****
  • Beiträge: 3.846
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #25 am: 1. Jan 2010, 18:47 »
Woher in Gottes Namen kennst du das?^^
Aber danke, ich werds mir merken. Kennst du zufälllig noch weiteres so nützliches? Und was ist mit Scriptdebug(1). Gibt es auch eine 3?
Und entweder habe ich dich oder du hast mich falsch verstanden. Ich meinte das so: Das Spiel weiß nicht, welche von mehreren Zitadellen es nehmen soll und nimmt dann gar keine. In SUM 1 könnte das aus folgenden Gründen trotzdem funzen:
1. In den SUM 1 Bases sind die Gebäude benannt
2. Eventuell gibt es auch Scripts, die du übersehen hast und die die Gebäude benennen.
3. Falls das alles stimmt, kann EA einfach was in der Game.dat geändert haben.

Ich würde einfach vorher Scripts einbauen, die die entsprechenden Gebäude benennen oder die Scripts losgelöst von Namen mit "ofType"-Scripts durchführen.

Es kommt immer darauf an, etwas zu tun, was der Gegner nicht erwartet.


Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #26 am: 23. Jan 2010, 22:15 »
Weitere Fragen. ^^

Was muss ich tun, damit neue Spells und neue Fähigkeiten  bei Helden von der KI benutzt werden?

Bei den Spells muss ich ja die Library bearbeiten, dass die KI die neuen Sciences kauft.
Aber dann ist ja noch niergends definiert, gegen wen die KI welchen Spell wie benutzt?!

Neue Einheiten müssen ja in der Skirmishaidata.ini eingetragen werden, damit die KI sie baut, ist das richtig?
Gilt das auch für neue Verstärkungseinheiten, oder muss ich diese niergends eintragen, damit die KI - vorausgesetzt sie bekommt den entsprechenden Spell gebacken - die Einheiten benutzt?

Und das mit der Zitadelle gilt immer noch: Wenn irgendjemand eine Idee hat, wie man die KI dazu bringen könnte, ihre Zitadellen bei Bedarf nachzubauen: Jeder Hinweis ist willkommen.

Turin Turumbar

  • Administrator
  • Hüter von Anduril
  • *****
  • Beiträge: 3.703
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #27 am: 23. Jan 2010, 22:28 »
http://www.the3rdage.net/item-235?addview
Das Tutorial erklärt eigentlich alles was man in Sachen AI Coding machen kann, denke alle Sachen, die du wissen willst, also das mit den Heldenfähigkeiten und den Einheiten, kannst du dort nachlesen.

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #28 am: 23. Jan 2010, 23:38 »
Ja danke, das Tutorial kenne ich und es ist auch sehr nützlich - jedoch behandelt es nicht das Hinzufügen von neuen Spells und Einheiten ...

Ich hab mir die KI-Skripte für das Kaufen der Spells gerade angeguckt. Da sind viele Bugs von EA drinnen, z.B. 1. Skript Purchase Heal und Activate Script Purchase Lone Tower

Drunter steht jedoch das Skript Purchase Rebuild und da steht wieder drin Activate Script Purchase Lone Tower.

Wenn man bei Purchase Lone Tower im Skript nachguckt, steht hier als Bedingung Rebuild Purchased = True. Das ist jedoch nie der Fall, da nach EAs tollem Skriptsystem der Rebuild Spell ja nie gekauft werden kann, da das entsprechende Skript nie aktiviert wird.  8-|
Ich rate allen Moddern, da mal nachzugucken. Kann mir nicht vorstellen, dass die KI so wie das hier aussieht in SuM2 effizient Spells nutzt ... (Hab da allerdings keine Erfahrung, da ich nie SuM2 gegen die KI gespielt habe.)

Turin Turumbar

  • Administrator
  • Hüter von Anduril
  • *****
  • Beiträge: 3.703
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #29 am: 24. Jan 2010, 00:14 »
Natürlich sind Heldenfähigkeiten in dem Tutorial, auf Seite 3 und 4 fängt das einfache an, auf den folgende geht Sul dann extrem ins Detail. Die Einheiten fehlen wirklich, aber das ist eigentlich nur copy and Paste mit entsprechendem anpassen der skirmishaidata.ini

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #30 am: 24. Jan 2010, 00:17 »
Ok, hab das mit dein Einheiten hinbekommen. Ist ja wirklich einfach in SuM2.

Vielleicht habe ich mich nicht klar genug ausgedrückt: Mit Spells meine ich die Fähigkeiten aus dem Spellbook die mit Elbenstern-/Ringpunkten gekauft werden.

Die sind leider nicht im Tutorial drin und da gibt es ja auch keine "Einheit", die diese benutzt.

Turin Turumbar

  • Administrator
  • Hüter von Anduril
  • *****
  • Beiträge: 3.703
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #31 am: 24. Jan 2010, 00:22 »
Doch die gibt es :p
Die sciences laufen, soweit ich weiß, noch über die libraries. Das Einsetzen der Spells läuft jedoch über die Spellbook Objekte, welche vom Spiel wie eine Einheit behandelt werden. Dementsprechend müssen die Fähigkeiten in diesen wie bei jedem anderem Helden auch eingecodet werden.

Rimli

  • Moderator
  • Galadhrim
  • **
  • Beiträge: 716
Re: [SuM 1½] Unterstützung für KI-Erstellung gesucht
« Antwort #32 am: 29. Jul 2010, 17:34 »
Hallo Leute!

Ich hab mal wieder eine Frage zu der KI, bei der ich hoffe, dass ihr mir helfen könnt.

Habt ihre eine Idee, wie man in SuM2 die KI dazu bewegen kann, ihr Tor zu schließen.
Das ist nämlich im Moment das Problem meiner Gondor KI. Sie lässt ihr Tor offen und jeder kann in die Festung spazieren ...

Ich hab schon probiert, die SuM1 Skripte aufzutreiben sowie in den SuM2 Codes bei den Toren geguckt aber nicht wirklich durchblicken können. Weiß da jemand was von euch?

EDIT: Das mit dem Tor habe ich jetzt hinbekommen. Außerdem habe ich es mit folgender Skriptsequenz hinbekommen, dass sich die Zitadelle der Startfestung beliebig oft wieder aufbaut. Jedoch ist das ganze unbrauchbar für Mauern und da ich nicht weiß, wie ich verlässlich die Zitadellen evtl. Außenposten referenzieren kann, kann ich das auch nicht für Außenposten verwenden. Wenn jemand eine Idee zu diesem Problem hat, kann er ruhig hier posten.

*** IF ***
     Unit 'AI_BASE' exists and is alive.
    *AND*  Can player Player '<This Player>' build at base Unit 'AI_BASE'
    *AND* Timer 'Start_Base_Building' has expired.
*** THEN ***
  Find 'Camp_Keeps' Owned by Player '<This Player>' nearest team Team 'Eco Team 1' and reference as UnitRef 'Citadel_0'



*** IF ***
     Unit 'Citadel_0' exists and is alive.
*** THEN ***
  Disable Script 'ref'.



*** IF ***
     Unit 'Citadel_0' Health IS Less Than  75  percent.
*** THEN ***
   Unit 'Citadel_0' use Ability 'Command_StartCitadelSelfRepair'.