Scripting: Aktives Söldner anwerben

  • Diesmal ein Tutorial welches sich damit beschäftigt, daß man bestimmte Söldner nur durch spezielle Generäle anwerben kann. Also, daß z.B. nur ein ein bestimmter General der eigen Fraktion ganz bestimmte Söldner anwerben kann, während andere Generäle der Fraktion dies nicht können.
    Grundlage der Idee war mit ein Tutorial von Konny in der Zone (wer kennt sie noch?) welches sich mit dem dynamischen Rekrutieren von Einheiten befasste. Dieses Tutorial funktioniert ähnlich nur ist dieses eben speziell für Söldner. Ist aber auch auf reguläre Einheitenrekrutierung übertragbar. Zumindest mit viel Geduld. :D


    Es gibt mehrere Wege ein ähnliches Ziel zu erreichen. Jeder hat seine Vor- und Nachteile. Anhand von Zweien werd ich verszuchen aufzuzeigen wie es geht und welches die Vor- und Nachteile sind.
    Ob und wenn, welches dann jemand benutzen will, hängt dann von einem selbst ab.



    Benötigte Dateien:
    campaign_script im Ordner data/world/maps/campaign/imperial_campaign
    descr_mercenaries im Ordner data/world/maps/campaign/imperial_campaign
    export_descr_character_traits im Ordner data


    wahlweise
    export_descr_vnvs_enums im Ordner data
    export_vnvs im Ordner data/text
    Letztere, für den Fall, daß man sich Neue Traits machen will. Dafür einfach in ein entsprechendes Tutorial schauen. Ich bin zu faul dafür. :P



    Ok, fangen wir an.
    Ich mache zuerst einmal meine Methode, die speziell für den Spieler ist und nicht für die KI funktioniert. Zumindest nicht so einfach. Sie sollte aber auch für nen Hotseat funktionieren. Gleichzeitig schicke ich voraus, daß die Dateien und die Daten auf meiner eigenen Mod (Choceur) beruhen und dort in dieser oder ähnlicher Form getestet wurden. Wenn also einer sich fragt, warum etwas nicht 100% so aussieht wie bei ihm, dann liegt das daran.


    Unser Ziel ist es erstmal, daß nur ein bestimmter Charakter mit einem bestimmten Trait bestimmte Söldner rekrutieren kann.
    Aus Vereinfachungsgründen werde ich es so machen, daß ich den bereits vorhandenen Trait der Erben (Factionheir) nehme. Dieser und nur dieser soll jederzeit in der Lage sein, in Schottland und Irland Kreuzritter anwerben können.
    Es währen auch möglich es von einem anderen Trait abhänig zu machen z.B. dem des Anführers oder eines Trinkers. Auch von welchen die man selbst erst noch macht. Es ginge auch es von einem Anc. abhänig zu machen, wenn man das wollte. Aber bleiben wir erstmal beim Trait der Erben.


    In der export_descr_character_traits suchen wir uns das entsprechende Trait, welches wir verwenden möchten.
    Wie oben erwähnt das des Erben: Factionheir
    Mit diesen müssen wir nun in der campaign_script etwas basteln, was dafür sorgt, daß nur ein bestimmter General (Erbe) die von uns bestimmten Söldner anwerben kann.
    Ich bin dabei auf das durchaus nützliche 'CharacterSelected' gestoßen. Was dafür sorgt, daß ein Monitor nur dann startet, wenn man nen Charakter auswählt/anklickt.
    Unser Monitor sollte dann etwa so aussehen:


    Code
    monitor_event CharacterSelected Trait Factionheir = 1
    and CharacterIsLocal
    and IsRegionOneOf 21 Dublin_Province 15 Edinburgh_Province 11 Inverness_Province
    set_event_counter erbeschottland 1
    end_monitor


    Was bewirkt jetzt der Monitor genau?
    Das 'CharacterSelected Trait Factionheir = 1' sorgt wie bereits erwähnt dafür, daß der Monitor nur gestartet wird, wenn man einen Charakter auswählt und dieser der Seitenerbe ist.
    Zusätzlich sorgt das 'CharacterIsLocal' dafür, daß es auch nur beim eigenen Charakter funktioniert. Das ist vielleicht nicht ganz so wichtig, da man wohl eher selten den Erben einer anderen Seite anklickt und dieser sich dann auch noch am richtigen Ort befindet. Aber egal.
    Über das 'IsRegionOneOf' in Verbindung mit dem Namen der Provinz wird dann bestimmt wo der Erbe sein muß. Soll ja nach neusten Erkenntnissen auch ohne Nummer funktionieren. Hier ist sie noch drin, weil es so getestet wurde. Verklagt mich. :P
    Haben wir dies gemacht, schalten wir einen counter. In dem Fall 'set_event_counter erbeschottland 1'
    Dieser counter wird also aus 1 gesetzt, wenn wir unseren Erben in Schottland oder Irland 'anklicken'.
    Problem ist, daß der counter auf 1 bleiben würde und so immer aktiv währe. So könnte jeder Hanswurst dort nun die Kreuzritter anwerben. Aber dass soll ja nur für unseren Erben gehen.
    Daher brauchen wir einen weiteren Monitor. Dieser soll sich abschalten wenn der Erbe nicht in Schottland ist. Oder noch besser, um zu verhindern, daß einige auf die Idee kommen mit nem anderen General die Kreuzritter anzuwerben, während unser Erbe dort ist. Daherwerden wir den counter abschalten wenn wir nen anderen Charakter anklicken.


    Code
    monitor_event CharacterSelected Trait Factionheir = 0
    set_event_counter erbeschottland 0
    end_monitor


    Damit wird der counter dann auf 0 geschaltet, wenn man nen Charakter 'anklickt', welcher nicht der Erbe ist.


    Aber was bringt das? Bisher haben wir ja nur nen dummen counter der sich an und abschalten läßt.
    Diesen counter müssen wir nun in die descr_mercenaries übertragen.
    Diese Datei ist für die Söldner der verschiedenen Regionen zuständig. Grob, welche Söldner gibt es wo.
    Wenn man sich die Datei ansieht, erkennt man, daß es dort 5 grobe Einteilungen gibt.


    start_year = ab welchem Jahr werden bestimmte Söldner anwerbbar
    end_year = ab welchem Jahr sind bestimmte Söldner nicht mehr anwerbbar
    religions = welchen Glauben muß die Fraktion haben um die Söldner anzuwerben
    crusading = Söldner die es nur während eines Kreuzzugs oder Jihads gibt
    events = Söldner die durch ein bestimmtest Event freigeschaltet werden z.B. Schießpulver


    Diese 5 Dinge kann man wild kombinieren und damit bestimmen welche Söldner es wann und zu welchen Bedingungen geben soll.
    Für uns ist das Letzte am interessantesten.
    Durch den eventcounter 'erbeschottland' haben wir nämlich ein 'Event' mit dem wir hier arbeiten können.


    Also müssen wir nur noch die Entsprechenden Provinzen suchen, die wir als Kondition in unserem Monitor hatten. Währe ja etwas blödsinnig wenn wir im Monitor sagen, der Erbe muß in den Provinzen Schottlands sein und schalten dann die Söldner im Kaukasus frei.
    Wir suchen also entsprechenden Pool für 'Dublin_Province', 'Edinburgh_Province' und Inverness_Province. Dabei stellen wir fest, daß diese 3 Provinzen schon zu einem Pool gehören. Welch ein Zufall. ;)


    Code
    pool Scotland_Ireland
    	regions Dublin_Province Edinburgh_Province Inverness_Province
    ;Einheiten


    Dort soll es nun unserem Erben möglich sein immer, auch außerhalb von Kreuzzügen, die Söldnereinheit Kreuzritter anzuwerben.
    Wir suchen uns also den Eintrag für die Kreuzritter.


    Code
    unit Crusader Knights		exp 0 cost 1380 replenish 0.15 - 0.35 max 3 initial 1  start_year 1100 end_year 1300 religions { catholic } crusading


    Bisher währen diese in den Jahren 1100 - 1300 von Fraktionen der Religion Katholisch und nur während Kreuzzügen anzuwerben.
    Wir wollen aber, daß unser Erbe sie immer anwerben kann.
    Also verändern wir den Eintrag. Weg mit den Jahren, weg mit der Religion und weg mit den Kreuzzügen. Dafür aber der Eintrag für unseren eventcounter/Event. Herraus kommt folgendes:


    Code
    pool Scotland_Ireland
    	regions Dublin_Province Edinburgh_Province Inverness_Province
    	unit Crusader Knights		exp 0 cost 1380 replenish 0.15 - 0.35 max 3 initial 1 events { erbeschottland }


    Das heißt soviel, daß immer wenn das Event 'erbeschottland' stattgefunden hat, man Kreuzritter anwerben kann. Also immer wenn in unseren Monitoren im campaign_script der counter auf 1 geschaltet wird. Sprich, wenn wir unseren Erben in einer der obigen Provinzen 'angeklickt' haben.
    Sobald wir etwas anderes machen bzw. einen anderen Charakter 'anklicken' ist der conter wieder aus 0 und die Söldner können nicht mehr angeworben werden.


    Das ganze kann man nun für alle möglichen Provinzen in allen möglichen Kombinationen für alle möglichen Charaktere (Traits ect.) machen. Der Erbe ist ja nur ein Beispiel. ;) Da hat jeder freie Hand.
    So könnte der Erbe andere Söldner anwerben als der Anführer. Der Fürst oder Gouverneur einer Provinz andere als der einer anderen.
    Neue Traits oder neue Kombinationen der Provinzen währen kein Problem. Die Provinzen der Monitore in der campaign_script und die Angaben in der descr_mercenaries sollten allerding aufeinander abgestimmt werden. ;)
    Auch sollten in weiteren Monitoren, um Söldner für bestimmte weitere Gebiete zu schalten, immer verschiedene counter benutzt werder und die Ungenutzten auf dann am Besten immer auch gleich auf 0 gesetzt werden.
    Da könnte z.B. so aussehen:



    Um zu verhindern, daß es eventuell zu Problemen kommt, weil der counter noch geschaltet ist und so bestimmte Söldner auch für andere Fraktionen rekrutierbar währen, könnte man auch am Ende des eigenen Zugs alle diese counter auf 0 setzen.



    Dank an gigantus, der mich darauf hingewiesen hat, daß der entsprechende Eintrag verloren gegangen ist.


    Hier, im Spoiler, auch ein Beispiel, was man damit machen kann:
    [M2TW] Choceur - Diskussionsthread - Seite 6 - Modding RTW / M2TW - Totalwar-Forum.de





    So. Das währe die eine Möglichkeit und es gibt bestimmt massig Varianten wie man da etwas daraus machen könnte. Viel Spaß am Probieren.


    Es sei aber noch erwähnt, daß diese Möglichkeit des aktiven Söldneranwerbens, wie oben bereits erwähnt, Vor- und Nachteile hat.
    Die Vorteile sind die Möglichkeiten für jeden Charakter des Spielers das Anwerben von Söldnern individuell zu gestallten. Womöglich abhänig von Rängen, Titeln, Zeit, Ereignis, Ort usw. Da kann man einiges machen.


    Nachteil ist, daß es sich "nur" für den Spieler machen läßt. Für die KI funktioniert das Ganze nicht. Da die KI aber eh immer etwas Probleme beim Anwerben von Söldner hat, ist dies vielleicht auch zu vernachlässigen. Man könnte aber auch, am Rundenende der eigenen Fraktion auch einfach alle counter auf 1 schalten und so der KI das Anwerben erlauben und am eigenen Rundenbeginn dann wieder alle auf 0 setzen. Einfach mal probieren
    Ab und an kann auch ein Doppelklick notwendig sein, um den counter zu schalten. Aber das sollte noch jeder hinbekommen. ;)
    Auch kann, wenn man zuletzt den entsprechenden Charakter genutzt hat, der conter noch aktiv sein und so auch der KI bzw. dem ersten Charakter/General der einem zu beginn der nächsten Runde zugewiesn wird, das Anwerben ermöglichen. Da währen obige Monitore welche am Rundenende ab bzw. anschalten wieder ne Möglichkeit.



    Glaub das war alles zu diese Version.
    Die Tage schreib ich vielleicht noch eines welches so ähnlich funktioniert, dann aber für alle Fraktionen gilt. Auch für die der KI.
    Vielleicht fällt mir bis dahin auch nen besserer Titel ein. :P
    Hoffe es war verständlich. viel Spaß damit.

  • Zitat

    export_descr_vnvs_enums im Ordner data

    Kannst du ignorieren, wird nicht mehr benötigt.


    Rekrutieren über einen Event der nur eine Runde andauert geht oft in die Hose, vielleicht ist es ja anders mit den Söldnern. In der EDB jedenfalls geht es nicht, man braucht halt mehrere Runden bis der Pool voll ist mit einer Einheit.


    Zitat

    monitor_event CharacterSelected Trait Factionheir = 1
    and CharacterIsLocal
    and FactionType scotland
    and IsRegionOneOf 21 Dublin_Province 15 Edinburgh_Province 11 Inverness_Province
    set_event_counter erbeschottland 1
    end_monitor

    Du musst natürlich die Fraktion noch bestimmen würde ich mal sagen. Wie an anderer Stelle schon gesagt: die Regions ID (Nummer) kannst Du Dir schenken, ist auch zu ungenau im Falle einer Hinzufuegung einer neuen Region (wer will schon jedes Mal das Skript neu schreiben?)


    Zitat

    monitor_event CharacterSelected Trait Factionheir = 0
    and FactionType scotland
    set_event_counter erbeschottland 0
    end_monitor

    Hier muss natürlich auch die Fraktion rein.


    Zum Schluss kannst Du dann noch einen Monitor machen, der am Ende der Spielerrunde den counter auf Null schaltet:


    Zitat

    monitor_event FactionTurnEnd FactionIsLocal
    set_event_counter erbeschottland 0
    [hier dann noch alle anderen 'erbe' counter einfügen und auf Null setzen.]
    end_monitor


  • Kannst du ignorieren, wird nicht mehr benötigt.


    Ok. Mach ich immer noch. Einmal gelernt bleibt das drin. Und die paar Sekunden die das braucht, darauf kommts nicht an.


    Rekrutieren über einen Event der nur eine Runde andauert geht oft in die Hose, vielleicht ist es ja anders mit den Söldnern. In der EDB jedenfalls geht es nicht, man braucht halt mehrere Runden bis der Pool voll ist mit einer Einheit.


    Jep, ein Vorteil der descr_mercenaries gegenüber der EDB. In der EDB wird der Pool nur bei Fertigstellung eines Gebäudes einmalig mit fertigen Einheiten gefüllt so daß man dann warten muß, bis sie sich wieder selbst langsam aufgefüllt haben.
    Bei den Söldnern zeigt einem aber der Eintrag 'initial' wieviele Eintreten immer bereitgestellt werden, wenn man die Einheiten anwerben kann. ;)



    Du musst natürlich die Fraktion noch bestimmen würde ich mal sagen.


    Nö. :P
    Fraktion ist vollkommen egal. Es geht hierbei ja nur darum zu bestimmen, wo ist mein General mit dem bestimmten Trait. Die Fraktion ist dabei erstmal nebensächlich. Man kann hiermit auch die Mauren spielen und trotzdem Kreuzritter mit seinem Erben in den obigen Provinzen anwerden. Natürlich kann man es für gewisse Fraktionen, Religion, Zeiten usw. einschränken/nur möglich machen. Das darf aber dann jeder selbst machen. :P


    Wie an anderer Stelle schon gesagt: die Regions ID (Nummer) kannst Du Dir schenken, ist auch zu ungenau im Falle einer Hinzufuegung einer neuen Region (wer will schon jedes Mal das Skript neu schreiben?)


    Hab ich ja im Text erwähnt, wieso das noch drin ist.

    Zitat von Deatheye

    Gleichzeitig schicke ich voraus, daß die Dateien und die Daten auf meiner eigenen Mod (Choceur) beruhen und dort in dieser oder ähnlicher Form getestet wurden. Wenn also einer sich fragt, warum etwas nicht 100% so aussieht wie bei ihm, dann liegt das daran.


    Zitat von Deatheye

    Über das 'IsRegionOneOf' in Verbindung mit dem Namen der Provinz wird dann bestimmt wo der Erbe sein muß. Soll ja nach neusten Erkenntnissen auch ohne Nummer funktionieren. Hier ist sie noch drin, weil es so getestet wurde. Verklagt mich. :P




    Hier muss natürlich auch die Fraktion rein.


    Nö, muß sie nicht. Kommt nur rein, wenn es nur für Schottland dort möglich sein soll.


    Zum Schluss kannst Du dann noch einen Monitor machen, der am Ende der Spielerrunde den counter auf Null schaltet:



    Bin sicher, ich hatte das heut Nacht sogar mal so ähnlich geschrieben. Wohl irgendwo verloren gegangen. :unsure:

  • Die descr_mercenaries hat tatsächlich auch einige Vorteile gegenüber der EDB.
    Da sie sowieso schon auf eine Aufteilung von Provinzen, für die verschiedenen Söldnerpools, ausgelegt ist, kann man sich das ganze Taktieren mit Ressourcen und hidden-resourcen sparen.
    Theoretisch könnte man wohl für jede Provinz nen eigenen Pool machen und auch für jede nen counter. Über individuelle Traits könnte man dann bestimmen, welcher Charakter wo welche Söldner anwerben kann.
    Anführer andere als der Erbe. Erbe andere als ein adeliger General. Der adelige General andere als der Adoptierte. Dieser wiederum andere als der aufgestiegene Hauptmann. Wenn man noch Provinztitel hat, kann man diese noch ins Spiel bringen und nur den General mit dem entsprechenden Titel in seiner Provinz Söldner anwerben lassen.

Jetzt mitmachen!

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