Форум

Уведомления
Очистить все

[MS] Как прописать семейные связи в Warband

 
Джеки Чан
Известный участник Модератор Гильдия переводчиков

Семейные связи в Native прописываются главным образом в скрипте "initialize_aristocracy" (ищите в module_scripts.py). Там прописаны общие правила, которые, как-правило не удобны для новых модификаций

Как же сделать семейные связи постоянными?
для начала мы можем добавить прародителей в module_troops. это отцы и матери героев, которые фактически в игре не участвуют. лордов можно после претендентов, но перед леди. если известно настоящее имя, используем его:

#non-game lords for parental rerlations
  ["knight_2_0", "Grant parent one", "Grant parent one", tf_hero, 0, reserved,  fac_kingdom_number,
   [itm_sword_medieval_c], knight_attrib_1,wp(340),knight_skills_1, 0x000000020f00214248cd8a26ce80471900000000001dd89a0000000000000000],
#knight_2_0 - should not appear in game   

  ["knight_2_0_2", "Grant parent two", "Grant parent two", tf_hero, 0, reserved,  fac_kingdom_number,
   [itm_mail_boots, itm_mail_mittens],
   knight_attrib_1,wp(340),knight_skills_1, 0x0000000c5b0032813a9caed51ba5275b00000000001dc8eb0000000000000000],

в конце скрипта game_start находим команду troop_set_note_available и отключаем отображение заметок у прародителей #1 = available, 0 = not available

(troop_set_note_available, "trp_knight_2_0", 0),

(troop_set_note_available, "trp_knight_2_0_2", 0),

для того чтобы информация о семье отображалась у лордов и у леди тоже, находим в скрипте game_get_troop_note

#Family notes
  (try_begin),
    (this_or_next|is_between, ":troop_no", kings_begin, lords_begin),

и меняем lords_begin на kingdom_ladies_end
тоже самое делаем для переменной ":aristocrat"
ниже, при условии отношения = 0, пишем

      (try_begin),

(this_or_next|eq, ":aristocrat", "trp_knight_2_0"),

(this_or_next|eq, ":aristocrat", "trp_knight_2_0_2"),


(str_store_string, s49, "str_s49_end"),

      (else_try),
      (str_store_string, s49, "str_s49_s12_s11_end"),
      (try_end),

    (else_try),

      (eq, ":num_relations", 1),###отношения = 1

      (try_begin),

(this_or_next|eq, ":aristocrat", "trp_knight_2_0"),

(this_or_next|eq, ":aristocrat", "trp_knight_2_0_2"),

(str_store_string, s49, "str_s49"),

      (else_try),

(str_store_string, s49, "str_s49_s12_s11_mod"),

      (try_end),

    (else_try),###в остальных случаях

      (try_begin),

(this_or_next|eq, ":aristocrat", "trp_knight_2_0"),

(this_or_next|eq, ":aristocrat", "trp_knight_2_0_2"),


(str_store_string, s49, "str_s49"),


    (else_try),
      (str_store_string, s49, "str_s49_s12_s11"),
      (try_end),

не забываем правильно завершить цикл

далее находим script_game_get_faction_note и под строкой

(troop_slot_eq, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),###проверяем равно ли значение в слоте бота "род деятельности" герою королевства
(try_begin),
  (eq, ":num_members", 0),

перед #wars
добавляем

(neq, ":cur_troop", "trp_knight_2_0"),

(neq, ":cur_troop", "trp_knight_2_0_2"),

при условии (eq, ":num_members", 1), - тоже самое, и во всех остальных случаях тоже
это нужно, по-видимости, что-бы имена праотцов не выводились в инфо о фракции
(str_store_troop_name_link, s10, ":cur_troop"),# Записывает имя бота идентификатор которого находится в :cur_troop

ну и самое интересное. переписываем полностью скрипт "initialize_aristocracy"

назначаем возраст лидерам. у меня так:

    #King ages

    (try_for_range, ":cur_troop", kings_begin, kings_end),

    (troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),

    (try_begin),

      (eq, ":cur_troop", "trp_kingdom_1_lord"),#
      (store_random_in_range, ":age", 50, 60),#т.е. рандомно. полезно кода не известен точный возраст
      (assign, ":king_age", ":age"),

    (else_try),

      (eq, ":cur_troop", "trp_kingdom_2_lord"),#
      (assign, ":king_age", 20),
    (else_try),

      (eq, ":cur_troop", "trp_kingdom_3_lord"),#
      (assign, ":king_age", 52),

    (else_try),

      (eq, ":cur_troop", "trp_kingdom_4_lord"),#
      (assign, ":king_age", 45),

    (else_try),

      (eq, ":cur_troop", "trp_kingdom_5_lord"),#

      (assign, ":king_age", 42),#unknown
    (else_try),

      (eq, ":cur_troop", "trp_kingdom_6_lord"),
#
      (assign, ":king_age", 42),#unknown
    (try_end),

    (call_script, "script_init_troop_age", ":cur_troop", ":king_age"),

    (try_end),

репутацию лордам

    #Lord ages and reputation


    (try_for_range, ":cur_troop", lords_begin, lords_end),#temporary addition for lord rep assignment was kingdom_ladies_begin
      (store_random_in_range, ":lord_rep", 0, 8),###рандомный выбор репутации, для того-чтобы присвоить его точно используйте команду (troop_set_slot, "trp_id_лорда", slot_lord_reputation_type, "lrep_название характера"),###либо же просто попробовать вместо последнего значения записать его номер №ID

      (troop_set_slot, ":cur_troop", slot_lord_reputation_type, ":lord_rep"),##делает характер лорда равным переменной ":lord_rep"
###таким образом репутация лорда принимает значение от 0 до 8. всего-же их 10 для лордов и 5 для леди
###0 обозначает отсутствие специфического характера
    (try_end),
    

#bugfix
###обратите сюда внимание, мы ведь добавили прародителей, и теперь их нужно исключить из героев
    (try_for_range, ":cur_troop", lords_begin, "trp_knight_2_0"),#was kingdom_ladies_begin

    (troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),

    (try_end),

#bugfix_end

Правила по репутации лордам

#The first thing - family structure
#lords 1 to 8 are patriarchs with one live-at-home son and one daughter. They come from one of six possible ancestors, thus making it likely that there will be two sets of siblings
#lords 9 to 12 are unmarried landowners with sisters
#lords 13 to 20 are sons who still live in their fathers' houses
#For the sake of simplicity, we can assume that all male aristocrats in prior generations either married commoners or procured their brides from the Old Country, thus discounting intermarriage

Этот скрипт как-то хитро распределяет семьи и характеры по данным правилам.

РАСКРЫТЬ СПИСОК
Но можно сделать семьи поспоянными
(troop_set_slot, ":cur_troop", slot_troop_father, ":father"), - father cтановиться отцом cur_troop
(troop_set_slot, ":cur_lady", slot_troop_mother, ":cur_troop"), - cur_troop cтановиться матерью cur_lady
(troop_set_slot, ":father", slot_troop_spouse, ":mother"), - mother и father становяться супругами.
(troop_set_slot, ":lord", slot_troop_age, ":age"), - делает возраст lord равным age.
(troop_set_slot, ":cur_troop", slot_lord_reputation_type, ":reputation"), - делает характер lord равным reputation, где reputation может принимать значение:
lrep_none = 0
lrep_martial = 1 #chivalrous but not terribly empathetic or introspective, - eg Richard Lionheart, your average 14th century French baron
lrep_quarrelsome = 2 #spiteful, cynical, a bit paranoid, possibly hotheaded - eg Robert Graves' Tiberius, some of Charles VI's uncles
lrep_selfrighteous = 3 #coldblooded, moralizing, often cruel - eg William the Conqueror, Timur, Octavian, Aurangzeb (although he is arguably upstanding instead, particularly after his accession)
lrep_cunning = 4 #coldblooded, pragmatic, amoral - eg Louis XI, Guiscard, Akbar Khan, Abd al-Aziz Ibn Saud
lrep_debauched = 5 #spiteful, amoral, sadistic - eg Caligula, Tuchman's Charles of Navarre
lrep_goodnatured = 6 #chivalrous, benevolent, perhaps a little too decent to be a good warlord - eg Hussein ibn Ali. Few well-known historical examples maybe. because many lack the drive to rise to faction leadership. Ranjit Singh has aspects
lrep_upstanding = 7 #moralizing, benevolent, pragmatic, - eg Bernard Cornwell's Alfred, Charlemagne, Salah al-Din, Sher Shah Suri

lrep_roguish = 8 #used for commons, specifically ex-companions. Tries to live life as a lord to the full
lrep_benefactor = 9 #used for commons, specifically ex-companions. Tries to improve lot of folks on land
lrep_custodian = 10 #used for commons, specifically ex-companions. Tries to maximize fief's earning potential

#lreps specific to dependent noblewomen
lrep_conventional = 21 #Charlotte York in SATC seasons 1-2, probably most medieval aristocrats
lrep_adventurous = 22 #Tomboyish. However, this basically means that she likes to travel and hunt, and perhaps yearn for wider adventures. However, medieval noblewomen who fight are rare, and those that attempt to live independently of a man are rarer still, and best represented by pre-scripted individuals like companions
lrep_otherworldly = 23 #Prone to mysticism, romantic.
lrep_ambitious = 24 #Lady Macbeth
lrep_moralist = 25 #Equivalent of upstanding or benefactor -- takes nobl

возраст лордам

    (try_for_range, ":cur_troop", lords_begin, kingdom_ladies_begin),


###далее обходим претендентов	
  
    (neq, ":cur_troop", "trp_kingdom_1_pretender"),

    (neq, ":cur_troop", "trp_kingdom_2_pretender"),

    (neq, ":cur_troop", "trp_kingdom_3_pretender"),

    (neq, ":cur_troop", "trp_kingdom_4_pretender"),

    (neq, ":cur_troop", "trp_kingdom_5_pretender"),

    (neq, ":cur_troop", "trp_kingdom_6_pretender"),

    

    # (troop_set_slot, ":cur_troop", slot_troop_occupation, slto_kingdom_hero),#bugfix, moved higher

    (try_begin),
      (eq, ":cur_troop", "trp_knight_2_0_2"),#Grant parent two
      (assign, ":lord_age", 49),#возраст на момент начала игры
      (store_random_in_range, ":lord_rep", 0, 8),###репутация, для лордов 8 можно заменить на 10

    (else_try),##таким образом перечисляем далее
      (eq, ":cur_troop", "trp_knight_3_1"),#
      (assign, ":lord_age", 32),

      (store_random_in_range, ":lord_rep", 0, 8),

    (try_end),

    (call_script, "script_init_troop_age", ":cur_troop", ":lord_age"),

    (troop_set_slot, ":cur_troop", slot_lord_reputation_type, ":lord_rep"),

    (try_end),

теперь Леди

#Lady ages and reputation


(try_for_range, ":cur_lady", kingdom_ladies_begin, kingdom_ladies_end),

(troop_set_slot, ":cur_lady", slot_troop_occupation, slto_kingdom_lady),

(try_begin),
  (eq, ":cur_lady", "trp_kingdom_2_lady_2"),#
  (assign, ":lady_age", 40),

  (store_random_in_range, ":lady_rep", 21, 26),###репутация для леди

(else_try),

  (eq, ":cur_lady", "trp_kingdom_2_lady_9"),#
  (store_random_in_range, ":age", 34, 39),

  (assign, ":lady_age", ":age"),

  (store_random_in_range, ":lady_rep", 21, 26),

(else_try),###перечисляем всех
  (eq, ":cur_lady", "trp_kingdom_3_lady_3"),#
  (store_random_in_range, ":age", 45, 51),

  (assign, ":lady_age", ":age"),

  (store_random_in_range, ":lady_rep", 21, 26),


(try_end),

(call_script, "script_init_troop_age", ":cur_lady", ":lady_age"),

(troop_set_slot, ":cur_lady", slot_lord_reputation_type, ":lady_rep"),

(try_end),

Родители и жены лордов/королей

#King and Lord fathers, mothers, wifes

  (try_for_range, ":cur_troop", kings_begin, kingdom_ladies_begin),

  (try_begin),

    (eq, ":cur_troop", "trp_knight_2_0_2"),#Grant parent two

    (troop_set_slot, ":cur_troop", slot_troop_spouse, "trp_kingdom_2_lady_2"),#супруга
    (troop_set_slot, ":cur_troop", slot_troop_father, "trp_knight_2_0"),##отец тот-самый что в troops - Grant parent one

  (else_try),
    (eq, ":cur_troop", "trp_kingdom_3_lord"),#
    (troop_set_slot, ":cur_troop", slot_troop_spouse, "trp_kingdom_3_lady_3"),

  (else_try),

    (eq, ":cur_troop", "trp_knight_3_1"),#
    (troop_set_slot, ":cur_troop", slot_troop_spouse, "trp_kingdom_3_lady_4"),

    (troop_set_slot, ":cur_troop", slot_troop_father, "trp_kingdom_3_lord"),##отец
    (troop_set_slot, ":cur_troop", slot_troop_mother, "trp_kingdom_3_lady_3"),##мать

  (try_end),

  (try_end),

Мужья благородных дам на всякий случай, обратная зависимость

#Lady husbands

(try_for_range, ":cur_lady", kingdom_ladies_begin, kingdom_ladies_end),

(try_begin),
  (eq, ":cur_lady", "trp_kingdom_2_lady_2"),#
  (troop_set_slot, ":cur_lady", slot_troop_spouse, "trp_knight_2_0_2"),


(else_try),
  (eq, ":cur_lady", "trp_kingdom_3_lady_3"),#
  (troop_set_slot, ":cur_lady", slot_troop_spouse, "trp_kingdom_3_lord"),

(try_end),

(try_end),

претендентам тоже возможно выставить возраст

  (try_for_range, ":cur_troop", pretenders_begin, pretenders_end),

    (troop_set_slot, ":cur_troop", slot_troop_occupation, slto_inactive_pretender),

    (store_random_in_range, ":age", 25, 30),

    (troop_set_slot, ":cur_troop", slot_troop_age, ":age"),

и точный
#		(try_begin),

#			(eq, ":cur_troop", "trp_kingdom_3_pretender"),

#			(troop_set_slot, ":cur_troop", slot_troop_age, 27),

#		(try_end),

    (try_end),###выход из цикла
  ]),###обязательно в конце скрипта

напоследок добавляем в strings перед:

("updating_faction_notes_for_s14_temp_=_reg4", "{!}Updating faction notes for {s14}, temp = {reg4}"),

следующее

("s49_s12_s11_mod", "{s49} {s12} ({s11})"),

и

("s49", "{s49}"),
("s49_s12_s11_end", "{s49}, {s12} ({s11})."),
("s49_end", "{s49}."),

после

("_family_", "^Family:"),
ОтветитьЦитата
Автор темы Размещено : 26.01.2022 11:17

Оставьте ответ

Имя автора

Электронная почта автора

Заголовок *

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять
Политика конфиденциальности