[Tutorial] Titel (Anc) basiertes Rektrutieren von Einheiten

  • Hallo zusammen,


    da ich im Zuge meiner Arbeit an IND ein neues Rekrutierungssystem entwickele bzw. auch schon entwickelt habe, dachte ich mir, dass euch diese Thema vielleicht auch interessieren könnte ;)


    Ziel: Unser Ziel ist es, dass Familienmitglieder, die über einen Titel, wie zum Beispiel "Fürst von Galiläa", verfügen. Nur noch in ihrem "eigen" Herrschaftsbereich ihre Truppen rekrutieren können. Sprich der Fürst von Galiläa kann keine Einheiten in Jaffa anwerben, aber in Tiberias schon.


    Wie:Wie wir das anstellen? Folgendermaßen, wir werden zwei versteckte Traits erstellen, die immer dann triggern, wenn der Fürst in seiner Stadt ist oder er eben nicht in seiner Stadt ist. Dazu werden wir noch parallel zwei Monitore laufen lassen, die prüfen wo sich der Fürst gerade befindet und je nach dem den Rekrutierungspool freischalten.


    Was:Was braucht ihr? Nun ja folgende Dateien sind relevant:

    • campaign_script
    • EDB
    • export_descr_character_traits
    • export_descr_ancillaries


    Legen wir los!
    Eine Sache noch, Deatheye hat über ein sehr ähnliches Thema bereits ein TUT verfasst, hier , wer es sich auch zu Gemüt führen möchte ;)


    1. Schritt:


    Als erstes müssen wir ein neues Anc in der export_descr_ancillaries erstellen, wie das genau von statten geht werde ich jetzt nicht weiter erläutern. Doch eine Anmerkung dazu, für den Type des Ancs, wählt ihr einen eigenen, einzigartigen und neuen aus.


    Bei mir sieht das dann so aus:

    Code
    ;------------------------------------------
    Ancillary titel_tiberias
    	Type NobleTiberias
    	Transferable  0 
    	Image sex_yangman.tga
    	Description titel_tiberias_desc
    	EffectsDescription titel_tiberias_effects_desc
    	Effect Loyalty -1


    Natürlich benötigt ihr auch einen entsprechenden Trigger, damit der Titel auch entsprechend vergeben wird :)


    2. Schritt:
    Zum interessanteren Teil. Wir öffnen nun die Datei export_descr_character_traits und erstellen hier zwei neue Traits.
    Wichtig: Diese Traits müsst ihr als verborgen, also "Hidden" anlegen, denn später in der Kampagne sollen sie ja nicht auftauchen!

    Wie bereits oben erklärt dienen die Trigger dazu, um festzustellen wo sich der euer Fürst befindet. Denn der Rektrutierungspool soll natürlich nur dann aktiviert werden, wenn er auch in der Stadt ist.


    Deswegen benötigen wir auch zwei Traits. Eines um darzustellen, dass er in der Stadt ist (AtTiberias) und das zweite, um darzustellen, dass er sich nicht mehr in der Stadt aufhält (NotAtTiberias).


    Dazu habe ich mir folgenden Code überlegt:

    Code
    ;------------------------------------------Trait NotAtTiberias	Characters family	Hidden	Level StaysNotAtTiberias		Description StaysNotAtTiberias		EffectsDescription StaysNotAtTiberias_effects_desc		Threshold 1	;------------------------------------------Trait AtTiberias	Characters family	Hidden	Level StaysAtTiberias		Description StaysAtTiberias_desc		EffectsDescription StaysAtTiberias_effects_desc		Threshold 1


    Effekte werden hier nicht benötigt, da wir das Trait ja nur dazu nutzen, um zwei Zustände darzustellen und sonst nichts.


    3. Schritt:


    Der schwierigere Teil ist nun die Trigger so festzulegen, dass sie eben dann anspringen, wenn der Fürst nicht da ist und wenn er da ist. Nach einigem rumprobieren bin ich zu dieser Lösung gelangt. Sie ist sicherlich noch nicht ausgereift, also wenn ihr Vorschläge habt nur raus damit! ;)


    Trigger 1:

    Code
    ;------------------------------------------Trigger StayedAtTiberias01	WhenToTest CharacterTurnEnd	Condition IsGeneral      	and HasAncType NobleTiberias		  and EndedInSettlement		  and SettlementName Tiberias	Affects AtTiberias 1  Chance  100	Affects NotAtTiberias -1 Chance 100


    Der erste Trigger dient dazu zu prüfen ob der Fürst am Ende des Zuges in der Stadt ist. Um auszuschließen dass es der flasche General bzw. die falsche Stadt ist, habe ich die Conditions HasAncType und SettlementName benutzt.
    Das HasAncType dient dazu zu prüfen ob der General das Anc des Fürsten von Galiläa trägt, denn wir wollen ja, dass nur er etwas in Tiberias rekrutieren kann.
    SettlementName fragt nach dem Namen der Stadt in unserem Beispiel ist das Tiberias.
    Die Bedingung EndedInSettlement überprüft ob der Charakter am Ende des Zuges in einer Siedlung ist.


    Wenn nun alle oben genannten Bedingungen zutreffen muss der Fürst wohl in der Stadt sein, also:
    Affects AtTiberias 1 Chance 100, sprich unser Fürst erhält das Trait, dass er in der Stadt ist.


    Um etwaige Probleme auszuschließen, negieren wir den Wert des anderen Traits, so dass auf jeden Fall das richtige Trait vergeben wird.


    Trigger 2:

    Code
    ;------------------------------------------Trigger StayedNotAtTiberias01	WhenToTest CharacterTurnEnd	Condition IsGeneral      	and HasAncType NobleTiberias		  and not EndedInSettlement	Affects AtTiberias -1  Chance  100	Affects NotAtTiberias 1 Chance 100


    Der zweite Trigger ist sozusagen das Gegenteil des ersten. Er überprüft ob der Fürst nicht in der Stadt ist, ist das der Fall vergibt er das Trait NotAtTiberias.


    Mit der Bedingung not EndedInSettlement prüfen wir ob der General im Feld steht, wenn ja, ist er folglich nicht mehr in Tiberias.


    Trigger 3:

    Code
    ;------------------------------------------Trigger StayedNotAtTiberias03	WhenToTest CharacterTurnEnd	Condition IsGeneral      	and HasAncType NobleTiberias		  and EndedInSettlement		  and not SettlementName Tiberias	Affects AtTiberias -1  Chance  100	Affects NotAtTiberias 1 Chance 100


    Der letzte und dritte Trigger ist diesmal die exakte Negation des ersten Triggers. Sprich er prüft ob der Fürst in eine andere Siedlung als Tiberias gegangen ist.


    4. Schritt:
    Zum Schluss benötigen wir jetzt noch das campaign_script und die EDB.


    Zuerst zum campaign_script. Hier müssen wir nun einen Monitor scripten, der anhand der Traits prüft wo unser General sich befindet. Dazu folgenden Code:


    Code
    ;Tiberiasmonitor_event CharacterTurnStart FactionIsLocaland FactionType jerusalemand Trait AtTiberias = 1and Trait NotAtTiberias < 1	set_event_counter ruler_tiberias 1		if I_EventCounter ruler_tiberias > 0		and I_EventCounter pool_tiberias < 1		set_recruit_pool Tiberias_Region 4 Feudal Spearmen		set_event_counter pool_tiberias 1		end_ifend_monitor


    Am Beginn jeden Zuges der Fraktion Jerusalem wird geprüft ob der Charakter über das Trait AtTiberias verfügt. Also ob er gerade in Tiberias ist. Daraus folgenden darf er ja das andere Trait nicht haben. Deswegen Trait NotAtTiberias < 1, sprich 0.


    Nun schalten wir einen Eventcounter, den wir gleich für die EDU benötigen. Doch zuerst müssen wir noch ein Problem lössen, das Deatheye auch schon in seinem Tut thematisiert hat. Die Rekrutierungspools in den Gebäuden können nicht mit Anfangswerten bestückt werden. Kurz erklärt, in der zuständigen Datei für die Söldner (descr_mercenaries), kann man einen Startwert des Pools festlegen. Also wieviele Einheiten sofort zu Beginn verfügbar sein sollen. Das geht in der EDU leider nicht ganz so leicht.
    ABER, man kann sich mit einen Befehl aushelfen "set_recruit_pool", denn der erledigt für uns, dass was man in der descr_mercenaries einfach festlegen kann.


    Die Parameter sind wie folgt:
    - Provinz: Tiberias_Region (wie auch immer eure Provinz in der descr_regions heißt)
    - Anzahl der Einheiten: 4 (je nach dem wieviele Männer ihr zur Verfügung haben möchtet)
    - Einheit: Feudal Spearmen (die Einheit, die die Punkte zugeschrieben bekommen soll)


    Ich habe jetzt noch einen Controllcounter eingebaut (pool_tiberias), aber ich weiß ehrlich gesagt garnicht ob der nötig ist.. könnt ihr ja mal ausprobieren was passiert ;)


    Doch nun zur EDB.
    Hier sucht ihr euch ein Gebäude aus in dem die Einheiten dann rekrutiert werden sollen. Ich habe die town_watch genommen.
    Jetzt fügt ihr einfach einen neuen recruit_pool mit eurer gewünschten Einheit ein.


    Code
    recruit_pool "Feudal Spearmen"  1   0.15   4  0  requires factions {  jerusalem, }  and event_counter ruler_tiberias 1


    Nun kommt auch der Eventcounter von vorhin ins Spiel. Den benutzen wir jetzt, um den recruit_pool an und aus zu schalten. Je nach dem ob der Fürst in der Stadt ist oder nicht.


    Ein letzter Schritt fehlt noch!


    5. Schritt:


    Um zu gewährleisten, dass auch wirklich nur der Fürst selbst in der Stadt rekrutieren kann, müssen wir natürlich auch überprüfen ob er überhaupt in seiner Stadt ist.


    Code
    monitor_event CharacterTurnStart FactionIsLocaland FactionType jerusalemand Trait NotAtTiberias = 1and Trait AtTiberias < 1	set_event_counter ruler_tiberias 0	set_event_counter pool_tiberias 0end_monitor


    Hier wird nun geprüft ob er nicht in der Stadt ist, ist das der Fall werden die Eventcounter für den recruit_pool wieder abgeschaltet, sowie auch der Controllcounter für das Befüllen des Pools.


    Das war es erstmal, ich hoffe ich konnte euch auf einige Ideen bringen.


    Anmerkung:
    Die Scripte sind noch nicht ganz ausgereift, zum Beispiel habe ich noch nicht testen können wie es sich auswirkt, wenn man mehr Einheiten in den Pool einspeist, als maximal in der EDU hinterlegt sind.
    Auch weiß ich noch nicht, in wie fern berücksichtigt wird ob die maximale Anzahl der zu rekrutierenden Einheiten des Pools richtig gezählt werden, wenn man immer wieder den Pool einfach auffüllt.


    Nichtsdestotrotz, viel Spaß beim Modden!


    Euer,
    Ned
    :hallo:

  • Zitat

    Auch weiß ich
    noch nicht, in wie fern berücksichtigt wird ob die maximale Anzahl der
    zu rekrutierenden Einheiten des Pools richtig gezählt werden, wenn man
    immer wieder den Pool einfach auffüllt.

    Angezeigt wird wahrscheinlich die max Zahl der EDB ('jetzt sind es soviel, normalerweise aber nur..'), egal wie viele Einheiten mit set_recruit_pool erschaffen werden.

Jetzt mitmachen!

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