Scripting: Gildenmilizen (M2TW)

  • Aufgrund mehrer Anfragen wie das nun funktioniert mit dem Erschaffen und wieder Auflösen meiner Gildemiliztruppen in Choceur hier ein Tutorial dazu.


    Ich mache es hier so, wie ich es auch in meinem Script gemacht habe. Also auch mit einem Gebäude (assassins_guild) in der Stadt welches vorhanden sein muss. Das Gebäude ist natürlich beliebig auswechselbar.
    Wichtig bei dem Script, man sollte mindesten eine Einheit nur für dieses Script bereitstellen. Heißt, zwar für alle Fraktionen in der EDU bereitstellen aber nicht in der EDB rekrutierbar machen. Währe nämlich etwas dämlich wenn die rekrutierten Einheiten ständig aufgelöst werden. ;)


    Zuerst muss man mal feststellen, dass das Gebäude auch vorhanden/gebaut ist.


    Dafür erstmal einen Counter für das Gebäude Gilde für jeder Stadt machen, für die das Script laufen soll. Ich mach es hier nur für eine Stadt, nämlich Acre.
    Das müsste etwa so aussehen:



    Im Einzelnen.
    Wir fragen im Ersten Monitor ab, ob am Ende der Runde in der Stadt Acre das Gebäude assassins_guild oder höher steht. Ist dies der Fall wird der counter dafür auf 1 gesetzt. (set_counter Acre_Gilde 1)
    Mit dem 2. Monitor wird der counter auf 0 gesetzt, sollte das Gebäude nicht vorhanden sein. Das ist deshalb wichtig, für den Fall, dass das Gebäude abgerissen wird. Kein Gebäude keine Truppen ;) .
    Aber weiter.



    Mit dem 1. Monitor wird geprüft, ob die Stadt nicht belagert wird und setzt den counter sollte die Stadt eben nicht belagert werden auf 0. Den Monitor müssen wir uns merken, denn der Monitor wird gleich noch mal erwähnt.


    Im 2. Monitor wird, wenn die Siedlung belagert wird und das Gebäude in der Stadt vorhanden ist (Acre_Gilde = 1), automatisch 2 Einheiten gildenmiliz in der Stadt erschaffen, sowie ein counter geschaltet, mit dem man später prüft, ob die Stadt noch immer belagert wird (set_counter Acre_belagert 1)


    Jetzt wird es lustig.
    Denn nun müssen für alle Fraktionen Monitoren gemacht werden, welche die eben erschaffenen Einheiten auflösen und auch wieder erschaffen, sollte die entsprechende Siedlung doch noch belagert werden. Eben, damit die Einheiten nicht behalten werden können und womöglich auf einen Feldzug mitgenommen werden.


    Hier für die Fraktion Slave:



    Da es die Runde der Slave ist, sollen auch nur deren Einheiten zerstört werden bzw. auch nur in deren Städten wieder die Einheiten erschaffen werden, wenn sie noch immer belagert werden.
    Da spielt auch wieder der Monitor mit, den wir uns merken sollten.
    Den dieser prüft ja, immer beim Start jeder Runde jeder Fraktion ob die Siedlung noch belagert wird und setzt entsprechend den counter auf 0 wenn es nicht mehr der Fall sein sollte. Darum werden also nach einem möglichen erfolgreichen Ausfall in der Runde slave im eigenen Zug dann die Einheiten aufgelöst und keine neuen erschaffen. Ist klar. ;)


    Diese Letzten Beiden Monitore muss man jetzt nur noch für alle Fraktionen des Spiels wiederholen.
    Wenn man alles richtig gemacht hat, werden im Falle einer Belagerung der Stadt Acre 2 Einheiten gildenmiliz in der Stadt erschaffen und auch wieder nach Beendigung derselbigen wieder aufgelöst.


    Für mehr Städte das Ganze einfach für die entsprechenden Städte wiederholen.
    Man kann es natürlich um einige Sonderfunktionen erweitern. So könnte man z.B. je nach Region in welcher sich die Stadt befindet andere Einheiten in der Stadt erschaffen. Oder auch für verschiedene Zeiträume. Auch kann man ein Entscheidungsfenster einbauen, um ähnlich wie bei Garnisonsscripten abzufragen, ob man überhaupt mit so etwas spielen will.


    Ist eine elendige Fusselarbeit die ewig dauert!


    Nur damit man weiß auf auf was man sich einläßt. Es dauerte etwa 1/4 Jahr bis es richig lief und im Einbau über 2 Wochen. Dieses Script hat bei Choceur mit etwa 160 Städten 76.000 Zeilen benötigt.


    Da liegt auch das große Problem. Es ist nämlich so, daß dieses Script sehr auf die Rundenberechnungszeit geht. Wer Choceur angespielt hat, wir wissen was ich meine. Es müssen nun mal ständig bei jeder Fraktion die ganzen counter geschaltet werden. Das dauert nun mal.
    Für je mehr Regionen man es macht, umso höher wird die Berechnungszeit. Es ist also eher etwas für kleinere Mods die nicht bis zum Limit mit den Provinzen gehen und auch nicht die maximale Anzahl an Fraktionen haben.

    Auch haben Verluste durch Belagerungen auf diese Einheiten faktisch keine Auswirkung, da sie ja ständig wieder erschaffen werden. Sie behalten also eigentlich immer ihre maximale Stärke.
    Aber es ist mal was anderes als die ganzen Garnisionsscripte die es in anderen Mods gibt. :P


    Diskussionen hierzu bitte im entsprechenden Thread!

  • Ich hatte es bereits früher mal ein Update für das Gildenmilizscript angekündigt.
    Nachdem ich lange keine Zeit dafür hatte und es inzwischen sogar mehrere weitere Verbesserungen für das Script gab, hier mal die neueste und auch aktuelle Version.


    Wie bisher ist weiterhin ein Gebäude (assassins_guild) Voraussetzung, damit Gildenmilizen der Stadt zu Hilfe kommen.
    Daher bleibt die Abfrage nach dem Gebäude wie bisher.


    Wir fragen immer noch im Ersten Monitor ab, ob am Ende der Runde in der Stadt Acre das Gebäude assassins_guild oder höher steht. Ist dies der Fall wird der counter dafür auf 1 gesetzt. (set_counter Acre_Gilde 1)
    Auch wird immer noch mit dem 2. Monitor der counter auf 0 gesetzt, sollte das Gebäude nicht vorhanden sein. Das ist deshalb wichtig, für den Fall, dass das Gebäude abgerissen wird. Kein Gebäude keine Truppen ;) .
    Eben genau wie bisher.


    Jetzt zu den Änderungen.
    Bisher haben wir Gildenmilizen immer dann erschaffen, wenn die Stadt belagert wurde. Was durch das Auflösen am Rundenende und wieder Erschaffen wenn die Stadt doch weiterhin belagert wurde, extrem auf die Berechnungszeit ging.
    Daher hier nun die Neuerung.
    Statt der ganzen Abfragen nach dem Status der Belagerung, fragen wir jetzt nur noch danach ob die Stadt angegriffen wird. Statt also immer die Einheiten zu erschaffen und aufzulösen solange eine Stadt belagert wird, greift die Gildenmiliz jetzt nur noch zu den Waffen, wenn Not am Mann ist und die Stadt tatsächlich angegriffen wird.


    Zitat

    monitor_event GeneralAssaultsResidence IsRegionOneOf 157 Acre_Province
    and I_CompareCounter Acre_Gilde = 1


    create_unit Acre, gildenmiliz, num 2, exp 0, arm 0, wep 0

    end_monitor


    Im Einzelnen.
    Mit dem 'monitor_event GeneralAssaultsResidence' bestimmen wir, das dieser Monitor nur ausgeführt werden soll, wenn eine Siedlung angegriffen wird.
    Das 'IsRegionOneOf 157 Acre_Province' sagt uns, in welcher Provinz der Angriff stattfinden muß, um den Monitor auszuführen. Hierbei verändert sich sich die Zahl (hier die 157) und der Name der Provinz (hier Acre_Province) bei jeder Provinz. Um die richtige Zahl für die Provinz zu bekommen, für die man das Script machen will, einfach eine Kampagne starten, mit dem Cursor über die entsprechende Stadt gehen, Konsole öffnen (ö drücken) und dort show_cursorstat eingeben. Dort steht dann die Region_id zur Provinz. Den Namen der Provinz einfach aus der descr_regions entnehmen.
    Hat man die eingetragen, kommt das 'and I_CompareCounter Acre_Gilde = 1' damit sorgt man dafür, daß es auch nur zur Erschaffung von Gildenmilizen kommt, wenn in Acre eine assassins_guild gibt. Dafür hatten wir ja oben die ersten Beiden Monitore.
    Zuletzt noch mit 'create_unit Acre, gildenmiliz, num 2, exp 0, arm 0, wep 0' die Art und Anzahl der Einheiten eintragen, die zur Verteidigung der Stadt erschaffen werden sollen.
    Noch 'end_monitor' drunter und fertig.
    Das ganze muß man nun für alle Städte machen, für welche es Gildenmilizen geben soll.
    Damit ist man dann auch fast am Ende. Zuletzt aber noch das Wichtigste. Das Auflösen der Gildenmilizen. Schließlich verteidigen diese nur ihre Heimatstadt und gehen danach wieder an ihre Arbeit.
    Dafür brauchen wir 2 Monitore:



    Mit diesen beiden Monitoren werden vor dem Start einer Fraktion alle Gildenmilizen entfernt. Haben halt besseres zu tun, als immer auf den Mauern zu stehen.
    Dadurch wird auch verhindert, daß der Spieler oder die KI auf die Idee kommt, diese für einen Ausfall oder gar für ne Offensive ins Feindesland zu benutzen.


    Mehr braucht es nicht mehr.
    Einheiten werden nun nur im Falle eines Angriffs auf die Stadt erschaffen, wenn das entsprechende Gebäude vorhanden ist. Sonst nicht. Es ist zwar ein Haufen Arbeit die Monitore zu schreiben und Einheiten sind während einer Belagerungszeit nicht vorhanden. Aber dafür ist diese Version nun wesentlich berechnungsfreundlicher als die Alte/Alten. Gleichzeitig kann man aber auch weiterhin alle möglichen weiteren Konditionen einbauen. Von Ja/Nein Events über den Ausschluß von Fraktionen bis verschiedenen Einheiten zu verschiedenen Zeiten ist der Fantasie keine Grenze gesetzt.


    Hoffe es ist verständlich und hilft einigen weiter.


    Diskussionen und Anregungen bitte im entsprechenden Thread!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!