на эту тему меня вдохновил
world_silmarillion@bk.ru, собственно то-что прислал ему лично, повторяю тут
1. Необходимо прописать всем Лордам, Леди, NPC семейные связи.
Какого вида должны быть записи, и куда их нужно прописать?
2. Необходимо прописать всем Лордам, Леди, NPC Характеры.
Какого вида должны быть записи, и куда их нужно прописать?
семейные связи в Нэйтив прописываются главным образом в скрипте "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
подробнее смотрите тут
http://rusmnb.ru/index.php?topic=3642.msg7365657#msg7365657и возраст лордам
(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:"),
еще раз обращаю ваше внимание на этот
пост Janycz'а