[Tutorial] Titel (Anc) basiertes Rektrutieren von Einheiten

    • [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:

      Brainfuck-Quellcode

      1. ;------------------------------------------
      2. Ancillary titel_tiberias
      3. Type NobleTiberias
      4. Transferable 0
      5. Image sex_yangman.tga
      6. Description titel_tiberias_desc
      7. EffectsDescription titel_tiberias_effects_desc
      8. 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:

      Brainfuck-Quellcode

      1. ;------------------------------------------
      2. Trait NotAtTiberias
      3. Characters family
      4. Hidden
      5. Level StaysNotAtTiberias
      6. Description StaysNotAtTiberias
      7. EffectsDescription StaysNotAtTiberias_effects_desc
      8. Threshold 1
      9. ;------------------------------------------
      10. Trait AtTiberias
      11. Characters family
      12. Hidden
      13. Level StaysAtTiberias
      14. Description StaysAtTiberias_desc
      15. EffectsDescription StaysAtTiberias_effects_desc
      16. Threshold 1
      Alles anzeigen


      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:

      Brainfuck-Quellcode

      1. ;------------------------------------------
      2. Trigger StayedAtTiberias01
      3. WhenToTest CharacterTurnEnd
      4. Condition IsGeneral
      5. and HasAncType NobleTiberias
      6. and EndedInSettlement
      7. and SettlementName Tiberias
      8. Affects AtTiberias 1 Chance 100
      9. Affects NotAtTiberias -1 Chance 100
      Alles anzeigen

      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:

      Brainfuck-Quellcode

      1. ;------------------------------------------
      2. Trigger StayedNotAtTiberias01
      3. WhenToTest CharacterTurnEnd
      4. Condition IsGeneral
      5. and HasAncType NobleTiberias
      6. and not EndedInSettlement
      7. Affects AtTiberias -1 Chance 100
      8. 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:

      Brainfuck-Quellcode

      1. ;------------------------------------------
      2. Trigger StayedNotAtTiberias03
      3. WhenToTest CharacterTurnEnd
      4. Condition IsGeneral
      5. and HasAncType NobleTiberias
      6. and EndedInSettlement
      7. and not SettlementName Tiberias
      8. Affects AtTiberias -1 Chance 100
      9. Affects NotAtTiberias 1 Chance 100
      Alles anzeigen


      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:

      Quellcode

      1. ;Tiberias
      2. monitor_event CharacterTurnStart FactionIsLocal
      3. and FactionType jerusalem
      4. and Trait AtTiberias = 1
      5. and Trait NotAtTiberias < 1
      6. set_event_counter ruler_tiberias 1
      7. if I_EventCounter ruler_tiberias > 0
      8. and I_EventCounter pool_tiberias < 1
      9. set_recruit_pool Tiberias_Region 4 Feudal Spearmen
      10. set_event_counter pool_tiberias 1
      11. end_if
      12. end_monitor
      Alles anzeigen


      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.

      Quellcode

      1. 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.

      Quellcode

      1. monitor_event CharacterTurnStart FactionIsLocal
      2. and FactionType jerusalem
      3. and Trait NotAtTiberias = 1
      4. and Trait AtTiberias < 1
      5. set_event_counter ruler_tiberias 0
      6. set_event_counter pool_tiberias 0
      7. end_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:
      Diene den Treuen - Helfe den Schwachen




      In Nomine Dei

      Die Italienischen Kriege 4.0
    • 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.
    • Benutzer online 1

      1 Besucher