Verändern des Rekrutierungsverhaltens von KI-Lords

正在查看此主题的用户

Mael

Recruit
Guten Tag,

ich habe vor einiger Zeit mit dem Modden von Warband angefangen und muss sagen: Es gefällt mir. Habe ziemlich viele Truppentypen verändert bzw neue erstellt und die Art und Weise verändert, wie man Truppen rekrutiert. Klappt auch alles für den Spieler. Allerding möchte ich, dass die KI-Lords ihr Rekrutierungsverhalten auch ändern.
Im speziellen sollen sie nachdem sie die Seiten gewechselt haben nicht mehr die Truppen ihrer originalen Kultur rekrutieren, sondern die des neuen Königreichs. Soll heißen: Ein Swadischer Lord, der zu den Nords übergelaufen ist, soll nun auch Nordmänner rekrutieren anstelle von swadischen Truppen. Könnte mir dabei vlt jemand einen Tipp geben, was ich in den Skripten dafür verändern muss? Danke schonmal!

Des Weiteren hatte ich eigendlich vor, Truppentypen zu erstellen, die man nur aus ganz bestimmten Dörfern/Städten/Burgen bekommen kann und dann auch nur, wenn man der Besitzer der jeweiligen Ortschaft ist. Für den Spieler bekomme ich das hin, doch habe ich wieder Schwierigkeiten das Rekrutierungsverhalten der KI-Lords so einzustellen, dass sie diese speziellen Truppentypen nur dann rekrutieren, wenn sie die entsprechende Ortschaft auch besitzen. Auch hier wäre ich für jeden Hinweis dankbar!
 
Ein Blick in das Skript 'cf_reinforce_party' sollte deine Fragen beantworten.

Um spezielle Truppen in speziellen Dörfern und weitere Bedingungen einzubauen ist das Skript 'update_volunteer_troops_in_village' wohl das was du suchst. Dort wird der Truppentyp und die Anzahl in den Slots 'slot_center_volunteer_troop_type' und 'slot_center_volunteer_troop_amount' gespeichert.
Da kannst du natürlich noch mehr Slots bereitstellen usw.
 
Danke für die schnelle Antwort.

An 'cf_reinforce_party' hab ich bereits herumgebastelt, aber ich befürchte meine Moddingkünste sind nicht ausreichend um solche Skipte im Notwendigen Maß zu verstehen. Gerade die Angelegenheit mit den slots ist mir schon lange ein Rätsel.

Die Rekrutierung in meinem Mod funktioniert nicht mehr über das anheueren von Freiwilligen in Dörfern, daher bringt eine Änderung von 'update_volunteer_troops_in_village' nicht viel, denke ich.
 
Slots sind sehr einfach und vor allem sehr praktisch in bestimmten Fällen. Es ist praktisch eine Möglichkeit Daten zu speichern und das objektgebunden. Also zum Beispiel im Playerobjekt oder einer Scene bzw. Party usw. Die verschiedenen Objekttypen kann man alle in module_constants sehen. Damit der Compiler am Ende alles richtig macht mußt du eigentlich nur deinen Slot in die module_constants eintragen und darauf achten, daß du sie fortlaufend bzw. unterschiedlich numerierst, wenn es schon weitere Slots gibt, die im gleichen Objekttyp gespeichert werden.


插入代码块:
slot_center_volunteer_troop_type 
slot_center_volunteer_troop_amount
Als Beispiel sind diese beiden Slots definiert unter der Sammlung von Slots die für Party-Objekte verwendet werden sollen. Du gibst ihnen einen beliebigen, im Vorzugsfalle eben einen Namen der auf die Verwendung schließen läßt und eine einzigartige Nummer.
Der Wert der Slots ist 0 standartmäßig. Und mit 'party_set_slot' kannst du den Wert setzen, mit 'party_get_slot' und all dem Zeugs kannst du dann den Wert auch wieder abfragen.
Wenn du zum Beispiel einen weiteren Truppentyp speziell für das Dorf X speichern willst dann trägst du einfach einen weiteren Slot ein.
插入代码块:
slot_center_volunteer_troop_type2
und schaust nach, welche Nummer noch frei ist. In diesem speziellen Fall müßte auch bei dir 251 die nächste freie Nummer sein und schon kannst du ihn benutzen um Daten zu speichern.

Bei einer großen Menge von Ortschaften oder Agenten hast du eine einheitliche Variabel die für jedes einzelne Dorf bzw. für jeden einzelnen Agenten Daten bereithält. Stell dir nur vor du würdest das gleiche mit globalen Variablen versuchen.

...naja, wie auch immer.

Auf jeden Fall kannst du in so einem Slot den in einer Stadt erhältlichen Rekrutentypen speichern und auch ändern, wenn sich z.B. der Besitzer der Stadt ändert oder einfach nur die Kultur oder was auch immer. Das bezieht sich auf diesen Satz:

Des Weiteren hatte ich eigendlich vor, Truppentypen zu erstellen, die man nur aus ganz bestimmten Dörfern/Städten/Burgen bekommen kann und dann auch nur, wenn man der Besitzer der jeweiligen Ortschaft ist.

Das alles macht vielleicht nicht sofort 'Klick' im Kopf, aber es ist auch nicht wirklich schwer zu verstehen und scheint mir der wirklich sinnvolle Weg für dein Problem zu sein.


Das 'cf_reinforce_party' Skript eigentlich relativ leicht zu verstehen und mir scheint es verwirrt dich, weil auch dort Slots verwendet werden.  :razz:
Im Prinzip wird nur ein Würfel gerollt und die Variabeln mit den in den Slots gespeicherten Party templates besetzt und am Ende aufgrund des Würfelergebnisses entschieden welcher der Templates, eben a, b oder c hinzugefügt wird zur Garnison, zum Lord usw.


 
Ach herrje.. ehm ja es macht leider nicht klick. Aber danke, damit werd ich mich auseinandersetzen und vlt komme ich weiter.

Das Ding mit dem Würfeln in 'cf_reinforce_party' hab ich noch rausgelesen. So hab ich zum Beispiel mal die Templates so verteilt, dass die KI nur Infanterie in Burgen und Städten einsetzt und verstärkt Kavallerie in ihren Kriegsbanden. Soweit komme ich, aber dass ein Überläufer die Truppen des neuen Reichs anheuert krieg ich ärgerlicherweise nicht gebacken.

Jetz werd ich jedenfalls nochmal anlauf an die slots nehmen. Vlt knack ich sie ja diesesmal.
 
Um den Slots noch eine Chance einzuräumen schau dir das hier nochmal an.

http://forums.taleworlds.com/index.php/topic,142422.0.html


Soweit komme ich, aber dass ein Überläufer die Truppen des neuen Reichs anheuert krieg ich ärgerlicherweise nicht gebacken.

Liegt das nicht daran, daß der Lord noch die Stadt bzw. das Dorf besitzt? Soweit ich mich erinnere bringen die doch nur die Truppen über die sie noch verfügen mit und fangen von da ab an neue Truppen zu rekrutieren und das ist abhängig von deren Lehen und der dort vorherrschenden Kultur....soweit ich weiß. Ganz sicher bin ich mir da jetzt allerdings nicht mehr.
 
Nein, leider rekrutieren KI-Lords meiner Erfahrung nach -unabhänig davon welche Orte sie besitzen oder zu welchen Königreich sie gehören- immer die Truppen ihres ursprünglichen Königreiches. Das ist es ja, was mich stört.
 
Im Skript cf_reinforce_blabla gibt es diese Zeile.

插入代码块:
(troop_get_slot, ":party_faction",  ":leader", slot_troop_original_faction),

Das dürfte der Grund sein. Die original Faction wird im game_start-Skript gesetzt. Der Slotwert wird verwendet und müßte eigentlich nur durch den Wert der aktuellen Fraktion ersetzt werden.

Ich würde das hier mal probieren:
插入代码块:
#(troop_get_slot, ":party_faction",  ":leader", slot_troop_original_faction),
(store_troop_faction,":party_faction",":leader"),

Also, die Eine auskommentieren (vorsichtshalber erst mal nicht löschen  :razz:) und eine Weitere darunter setzen.


 
Unfassbar, ich habs geschafft. Das mit den Slots hab ich immernoch nicht verstanden, aber das hier hat funktioniert (auch wenn ich nicht genau weiß warum  :lol:):

innerhalb von cf_reinforce_party über dem blauen hab ich das eingesetzt
(store_faction_of_party, ":party_faction", ":party_no"),
      (faction_get_slot, ":culture",":party_faction", slot_faction_culture),
        (try_begin),
          (eq, ":culture","fac_culture_1"),
          (assign,":party_faction",fac_kingdom_1),
        (else_try),
          (eq, ":culture","fac_culture_2"),
          (assign,":party_faction",fac_kingdom_2),
        (else_try),
          (eq, ":culture","fac_culture_3"),
          (assign,":party_faction",fac_kingdom_3),
        (else_try),
          (eq, ":culture","fac_culture_4"),
          (assign,":party_faction",fac_kingdom_4),
        (else_try),
          (eq, ":culture","fac_culture_5"),
          (assign,":party_faction",fac_kingdom_5),
        (else_try),
          (eq, ":culture","fac_culture_6"),
          (assign,":party_faction",fac_kingdom_6),
        (try_end),
      (try_end),

(faction_get_slot, ":party_template_a", ":party_faction", slot_faction_reinforcements_a),
      (faction_get_slot, ":party_template_b", ":party_faction", slot_faction_reinforcements_b),
      (faction_get_slot, ":party_template_c", ":party_faction", slot_faction_reinforcements_c),

aber den Vorschlag von dir werd ich auch noch versuchen, weil er wohl eleganter ist. Werd dann dazuschreiben obs gefunzt hat..

Jap klappt auch. Vielen Dank!
 
后退
顶部 底部