Сичевые Свитки - Статья - Православные Патриархи и Католические Епископы
В этом уроке я покажу, как сделать рабочую модель патриарха (одну на каждую православную фракцию), и как изменить католических епископов так чтобы вы могли иметь их только по одному в каждом населенном пункте. Некоторые из этих скриптов можно найти в SS 6.2.
Патриарх
Спойлер (раскрыть)
Сейчас, модель патриарха практически не используется в игре. Проблема с назначением патриарха проста - для каждой фракции он может быть только один, но экспортировать тот факт, что патриарх уже назначен, нет возможности. Нет, если использовать только один файл. У нас есть 3 православных фракции - Киевская Русь, Русь и Византия.
Итак, сначала добавим уровень патриарха (Patriarch) в трейт priestlevel в export_descr_character_traits.txt (далее EDCT):
Теперь нам нужно каким-то образом суметь сообщить игре, есть у нас уже патриарх или еще нет. И мы хотим чтобы AI тоже имел возможность получить патриарха. Для этого мы редактируем файл campaign_script. Монитор в скрипте будет выглядеть практически так же, как триггер для трейта Патриарха, проверяем на Piety (благочестие):
Счетчик patriarch_count используется для случая, если многие священники имеют благочестие > 4 и среди них нет патриарха, мы делаем так, чтобы событие PatrirachByzantium = 0 (после которого присваивается уровень патриарха) произошло только один раз.
Мы также должны сказать событием, что патриарх уже имеется:
Итак, у нас есть событие, экспортируемое из файла campaign_script, говорящее нам, имеем мы патриарха или нет, так что теперь давайте создадим триггеры в EDCT для присваивания соответствующего уровня трейта:
Мы можем также добавить дополнительные условия, такие как EndedInSettlement, SettlementName или IsRegionOneOf, но так как это просто учебник то объясняем лишь основы. Главное не забыть добавить те же условия и в файл campaign_script.
Таким образом, мы используем скрипт в campaign_script для экспорта события, которое читается файлом EDCT, в свою очередь назначающим патриарха. Так как в обоих файлах должны быть выполнены одинаковые условия, мы всегда будем получать только одного патриарха.
Существует один недостаток - при наведении курсора в игре на священника, вы увидите "Кардинал", и то же самое, когда вы открываете его окна - везде будет кардинал, а не патриарх, даже если изменить соответствующие строки expanded.txt.
Таким образом, чтобы изменить это, поменяем в трейте Патриарха Effect Level на 3.
Откроем descr_models_strat и для всех православных фракций изменим это
на это
Тем самым мы добавляем уровень.
Теперь, в expanded.txt мы должны обновить культуры и фракции добавив описание патриарха.
Первая культура:
Обновляем и для других культур тоже. Каждая фракция имеющая патриарха также потребует новую запись в разделе фракции.
Сделайте то же самое для всех православных фракций. Теперь проблемы нет и мы получили Патриарха со своей собственной моделью, со всеми правильными описаниями.
Сейчас, модель патриарха практически не используется в игре. Проблема с назначением патриарха проста - для каждой фракции он может быть только один, но экспортировать тот факт, что патриарх уже назначен, нет возможности. Нет, если использовать только один файл. У нас есть 3 православных фракции - Киевская Русь, Русь и Византия.
Итак, сначала добавим уровень патриарха (Patriarch) в трейт priestlevel в export_descr_character_traits.txt (далее EDCT):
Trait PriestLevelCharacters priest
Level BishopDescription Bishop_desc
EffectsDescription Bishop_effects_desc
GainMessage Bishop_gain_desc
LoseMessage Bishop_lose_desc
Threshold 1
Effect Piety 1
Effect Level 1
Level Cardinal
Description Cardinal_descEffects
Description Cardinal_effects_desc
Threshold 2
Effect Piety 1
Effect Level 2
Effect HeresyImmunity 1
Level Patriarch
Description Patriarch_desc
EffectsDescription Patriarch_effects_desc
GainMessage Patriarch_gain_desc
Epithet Patriarch_epithet_desc
Threshold 3
Effect HeresyImmunity 1
Effect Piety 2
Effect Level 2
Effect MovementPoints 10
Теперь нам нужно каким-то образом суметь сообщить игре, есть у нас уже патриарх или еще нет. И мы хотим чтобы AI тоже имел возможность получить патриарха. Для этого мы редактируем файл campaign_script. Монитор в скрипте будет выглядеть практически так же, как триггер для трейта Патриарха, проверяем на Piety (благочестие):
declare_counter patriarch_count
monitor_event PreFactionTurnStart TrueConditionset_event_counter PatriarchByzantium 0
set_event_counter PatriarchRussia 0
set_event_counter PatriarchKievanRus 0
set_counter patriarch_count 0
end_monitor
monitor_event CharacterTurnEnd AgentType = priest and CharFactionType kievan_rus and Attribute Piety > 4
if I_CompareCounter patriarch_count = 1
set_event_counter PatriarchKievanRus 1
end_if
inc_counter patriarch_count 1
end_monitor
monitor_event CharacterTurnEnd AgentType = priest and CharFactionType russia and Attribute Piety > 4
if I_CompareCounter patriarch_count = 1
set_event_counter PatriarchRussia 1
end_if
inc_counter patriarch_count 1
end_monitor
monitor_event CharacterTurnEnd AgentType = priest and CharFactionType byzantium and Attribute Piety > 4
if I_CompareCounter patriarch_count = 1
set_event_counter PatriarchByzantium 1
end_if
inc_counter patriarch_count 1
end_monitor
Счетчик patriarch_count используется для случая, если многие священники имеют благочестие > 4 и среди них нет патриарха, мы делаем так, чтобы событие PatrirachByzantium = 0 (после которого присваивается уровень патриарха) произошло только один раз.
Мы также должны сказать событием, что патриарх уже имеется:
monitor_event CharacterTurnStart AgentType = priestand CharFactionType kievan_rus and Trait PriestLevel = 3 set_event_counter PatriarchKievanRus 1 end_monitor monitor_event CharacterTurnStart AgentType = priest and CharFactionType russia and Trait PriestLevel = 3 set_event_counter PatriarchRussia 1 end_monitor monitor_event CharacterTurnStart AgentType = priest and CharFactionType byzantium and Trait PriestLevel = 3 set_event_counter PatriarchByzantium 1 end_monitor
Итак, у нас есть событие, экспортируемое из файла campaign_script, говорящее нам, имеем мы патриарха или нет, так что теперь давайте создадим триггеры в EDCT для присваивания соответствующего уровня трейта:
;------------------------------------------ Trigger priest_patriarch_kievan_rus WhenToTest CharacterTurnEndCondition AgentType = priest and CharFactionType kievan_rus and Attribute Piety > 4 and I_EventCounter PatriarchKievanRus = 0 Affects PriestLevel 3 Chance 100 ;------------------------------------------ Trigger priest_patriarch_russia WhenToTest CharacterTurnEndCondition AgentType = priest and CharFactionType russiaand Attribute Piety > 4 and I_EventCounter PatriarchRussia = 0 Affects PriestLevel 3 Chance 100 ;------------------------------------------ Trigger priest_patriarch_byzantium WhenToTest CharacterTurnEndCondition AgentType = priest and CharFactionType byzantium and Attribute Piety > 4 and I_EventCounter PatriarchByzantium = 0 Affects Priest Level 3 Chance 100
Мы можем также добавить дополнительные условия, такие как EndedInSettlement, SettlementName или IsRegionOneOf, но так как это просто учебник то объясняем лишь основы. Главное не забыть добавить те же условия и в файл campaign_script.
Таким образом, мы используем скрипт в campaign_script для экспорта события, которое читается файлом EDCT, в свою очередь назначающим патриарха. Так как в обоих файлах должны быть выполнены одинаковые условия, мы всегда будем получать только одного патриарха.
Существует один недостаток - при наведении курсора в игре на священника, вы увидите "Кардинал", и то же самое, когда вы открываете его окна - везде будет кардинал, а не патриарх, даже если изменить соответствующие строки expanded.txt.
Таким образом, чтобы изменить это, поменяем в трейте Патриарха Effect Level на 3.
Откроем descr_models_strat и для всех православных фракций изменим это
strat_model orthodox_priest ; default modelstrat_model orthodox_bishop ; medium level prieststrat_model orthodox_patriarch ; advanced priest
на это
strat_model orthodox_priest ; default modelstrat_model orthodox_bishop ; medium level prieststrat_model orthodox_bishop ; placeholder strat_model orthodox_patriarch ; advanced priest
Тем самым мы добавляем уровень.
Теперь, в expanded.txt мы должны обновить культуры и фракции добавив описание патриарха.
Первая культура:
{EMT_GREEK_PRIEST_1}Bishop
{EMT_GREEK_PRIEST_2}PLAYER WILL NOT SEE THIS WITH THIS CULTURE
{EMT_GREEK_PRIEST_3}Patriarch{EMT_GREEK_PRIEST}Priest
{EMT_EASTERN_EUROPEAN_PRIEST_1}Bishop
{EMT_EASTERN_EUROPEAN_PRIEST_2}Cardinal
{EMT_EASTERN_EUROPEAN_PRIEST_3}Patriarch
{EMT_EASTERN_EUROPEAN_PRIEST}Priest
Обновляем и для других культур тоже. Каждая фракция имеющая патриарха также потребует новую запись в разделе фракции.
{EMT_BYZANTIUM_PRIEST_1}Byzantine Bishop
{EMT_BYZANTIUM_PRIEST_2}WILL NOT SEE THIS
{EMT_BYZANTIUM_PRIEST_2}Byzantine Patriarch
{EMT_BYZANTIUM_PRIEST}Byzantine Priest
Сделайте то же самое для всех православных фракций. Теперь проблемы нет и мы получили Патриарха со своей собственной моделью, со всеми правильными описаниями.
Епископы
Спойлер (раскрыть)
Епископом всегда становится каждый священник завербованный в городском соборе или другом подобном здании. Глупо да?
На самом деле, епископ назначался для всех основных епархий (основных в том смысле, что имеют большое население, или по истории так было и т.д.), так что нам не совсем подходит тот способ, который используется в MTW.
Используя уже созданный скрипт патриарха, мы можем создать скрипт, который будет назначать епископа в каждом поселении. То есть, если у нас есть 5 поселений и 8 священников, мы всегда будем иметь 5 епископов, не больше не меньше.
О, а давайте сделаем епископу возможность потерять свой титул если город перестает принадлежать фракции.
Таким образом, вот скрипт:
Таким образом, мы используем последовательность (PFTS>CTS>STS>STE>CTE) для того, чтобы подсчитать сколько фактически епископов у нас есть, и вычитаем количество имеющихся населенных пунктов.
Также мы создаем блок триггеров в EDCT проверяющих счетчики.
EDCT триггеры:
Просто и удобно. Мы можем добавить массу других условий, но помните, эти условия должны соответствовать таким же в файле campaign_script.
Также удалите все ненужные ванильные триггеры в EDCT, которые заставляют вас получать епископа каждый раз, когда вы завербуете священника в городском Соборе.
Епископом всегда становится каждый священник завербованный в городском соборе или другом подобном здании. Глупо да?
На самом деле, епископ назначался для всех основных епархий (основных в том смысле, что имеют большое население, или по истории так было и т.д.), так что нам не совсем подходит тот способ, который используется в MTW.
Используя уже созданный скрипт патриарха, мы можем создать скрипт, который будет назначать епископа в каждом поселении. То есть, если у нас есть 5 поселений и 8 священников, мы всегда будем иметь 5 епископов, не больше не меньше.
О, а давайте сделаем епископу возможность потерять свой титул если город перестает принадлежать фракции.
Таким образом, вот скрипт:
declare_counter bishop_count
monitor_event PreFactionTurnStart TrueCondition
set_counter bishop_count 0
end_monitor
monitor_event CharacterTurnEnd AgentType = priest
and not CharacterReligion pagan
and not CharacterReligion islam
and Trait PriestLevel = 0
if I_CompareCounter bishop_count = 0
set_event_counter AppointBishop 0
end_if
if I_CompareCounter bishop_count < 0
set_event_counter AppointBishop 1
inc_counter bishop_count 1
end_if
end_monitor
monitor_event CharacterTurnEnd AgentType = priest
and not CharacterReligion pagan
and not CharacterReligion islam
and Trait PriestLevel = 1
if I_CompareCounter bishop_count = 0
set_event_counter StripBishop 0
end_if
if I_CompareCounter bishop_count > 0
set_event_counter StripBishop 1
inc_counter bishop_count -1
end_if
end_monitor
Таким образом, мы используем последовательность (PFTS>CTS>STS>STE>CTE) для того, чтобы подсчитать сколько фактически епископов у нас есть, и вычитаем количество имеющихся населенных пунктов.
Также мы создаем блок триггеров в EDCT проверяющих счетчики.
EDCT триггеры:
;------------------------------------------ Trigger Priest_to_Bishop WhenToTest CharacterTurnEndCondition AgentType = priest and I_EventCounter AppointBishop = 1 and Trait PriestLevel = 0 Affects PriestLevel 1 Chance 100 ;------------------------------------------ Trigger Priest_stripped_Bishop WhenToTest CharacterTurnEndCondition AgentType = priest and I_EventCounter StripBishop = 1 and Trait PriestLevel = 1 Affects PriestLevel -1 Chance 100
Просто и удобно. Мы можем добавить массу других условий, но помните, эти условия должны соответствовать таким же в файле campaign_script.
Также удалите все ненужные ванильные триггеры в EDCT, которые заставляют вас получать епископа каждый раз, когда вы завербуете священника в городском Соборе.
---
Оригинальное Авторство:
В статье было указано, что это перевод, но не оказалось информации об авторстве.
История Происхождения:
Локальная копия оригинальной статьи, взятой мной из модоковальни M2TW на форуме СиЧь.

t1aro
alZarif
Dr.Schmeisser
KhanBagatur
gurvinek2005
Crusader556
Haktar
Mady
Valyrian_Legionnaire
DinarMayor
Corrector
kosak4
Farin Frostgeir


