Сообщество Империал: Оптимизация скриптов в Medieval 2 Total War, избавляемся от monitor_conditions. - Моддинг Medieval 2: Total War - Medieval 2: Total War - Библиотека - Сообщество Империал




Imperial
Сообщество ИмпериалБиблиотека Medieval 2: Total War Моддинг Medieval 2: Total War Оптимизация скриптов в Medieval 2 Total War, избавляемся от monitor_conditions. Важный Контент

Информация об авторе

bitterhowl
  • Автор: bitterhowl

Информация по статье

  • Добавлено: 31 дек 2020, 11:18
  • Просмотры: 365

Последние Статьи

  TOTAL WAR: WARHAMMER III FAQ

TOTAL WAR: WARHAMMER III FAQAlexander_NSK · 03 фев 2021, 23:54

  Тяжёлый 2020-й позади, но что дальше?

Тяжёлый 2020-й позади, но что дальше?Count Bagatur RF · 21 янв 2021, 20:56

  Total Bananas 1.0 - краткий обзор мода

Total Bananas 1.0 - краткий обзор модаCount Bagatur RF · 21 янв 2021, 18:02

  DLC Total War Saga: TROY – AJAX & DIOMEDES

DLC Total War Saga: TROY – AJAX & DIOMEDESТатарин · 15 янв 2021, 08:12

Оптимизация скриптов в Medieval 2 Total War, избавляемся от monitor_conditions.

Описание: Как избавиться от одного из наиболее проблемных операторов, чтобы ускорить быстродействие мода.
По аналогии со старым анекдотом про «голубых» и слабительное – доктор Биттер хочет напомнить назначение форума. А именно – для конструктивного обсуждения игр, серии Тотал Вар в частности, и кооперации при создании пользовательских модификаций к ним. Троллинг и матерные срачи – твердое нет.


Несмотря на однозначное указание о вредном воздействии monitor_conditions на кремниевые умы и сердца, даже на пороге 2021 года встречаются скрипты, активно использующие этот оператор. Следом идут отзывы пользователей о низкой производительности. Еще в 2016 году появились сведения о том, что это такое и как бороться. Сейчас, почти 5 лет спустя, есть смысл прицельно продублировать и уточнить информацию.

Оператор monitor_conditions по смыслу практически непрерывно проверяет определенные условия на предмет их совпадения с заданной величиной. Например, условие на номер хода 345 – I_TurnNumber = 345. Это значит, что с момента начала кампании движок 5 раз в секунду проверяет этот параметр на предмет совпадения условий все время, пока игрок не нажмет Exit. Полезная ли это активность все 344 хода до нужного? Сколько раз будет проверено это условие? А ведь есть вариант, что игрок и не дойдет до этого хода вообще и все проверки были впустую. Другой пример -

monitor_conditions I_EventCounter help_accepted = 1


Здесь подразумевается, что игрок сделал определенный выбор в предложенном историческом сообщении и нажал «да». А если нет? Но всю игру каждые 5 секунд движок проверяет это условие.

Специально для тех, кто хочет сделать свои моды на Второмедь более играбельными в 2021 году, есть способ. Существует такой event – EventCounter, это событие происходит, когда счетчик событий меняет значение. Это редкое событие, которое не требует рутинной проверки и не нагружает движок. Как правило, изменение значения таких счетчиков задается в коде примерно в одно и то же время – конец хода ребелов, начало/конец хода фракции игрока. Отдельно срабатывают счетчики событий да/нет, когда игрок делает выбор. В любом случае, это более оптимально, чем мониторить начало хода всех персонажей на карте через CharacterTurnStart или начало хода поселений через SettlementTurnStart и даже хода фракции через FactionTurnStart, чтобы привязать к этому событию нужные вам эффекты.

Требуется одно уточнение – для того, чтобы все условия распознавались движком под монитором EventCounter, они должны быть независимыми (если термин некорректен, программисты простите меня), т.е. иметь префикс «I_», например вот «зависимое» условие TurnNumber, а вот независимое - I_TurnNumber. Соответственно, при составлении скрипта вы ищете в Докудемонс 4.0 только те, которые имеют I_ и подходят под ваши задачи.
Дальше просто, вот например такой чудесный код из Беллума 6.3:
monitor_conditions I_EventCounter help_accepted = 1
console_command add_money -3000
set_event_counter help_accepted 0
set_event_counter help_arrival 1
end_monitor

monitor_conditions I_EventCounter help_arrival = 1
if I_SettlementSelected Roma
     create_unit Rome, Mercenary Spearmen, num 2, exp 1, arm 1, wep 0
set_event_counter help_arrival 0
end_monitor


Здесь мониторятся целых два события – положительный выбор игроком предложения о предоставлении военной помощи и получение этой военной помощи, которое происходит, если игрок выберет поселение Рим на страткарте. Вот эти вещи 5 раз в секунду проверяет движок всю дорогу, пока идет кампания.

Мы делаем вот так:
monitor_event EventCounter EventCounterType help_accepted
and EventCounter = 1
console_command add_money -3000

set_event_counter help_accepted 0
set_event_counter help_arrival 1
end_monitor


Теперь это срабатывает только в момент, когда игрок нажал ДА на историческое событие с предложением выбора. Уличная магия.

Второй монитор мы меняем вот так –
monitor_event SettlementSelected I_SettlementSelected Roma (либо SettlementName Roma, если на первый вариант ругается лог и скрипт не сработал)
if I_EventCounter help_arrival = 1
     create_unit Rome, Mercenary Spearmen, num 2, exp 1, arm 1, wep 0
set_event_counter help_arrival 0
end_if
if... - здесь мы можем привязать любые иные ситуации, когда выбран Рим на карте, но нужны другие условия, все варианты под один монитор
...end_if  
end_monitor


Есть еще способ увязать все EventCounter под один монитор – если будет запрос на это я, разумеется, расскажу, чтобы еще раз напомнить, для чего же все таки нужен форум Империал.
    bitterhowl, 14 февраля 2021, 07:10


    Imperial
    Внимание, опечатка.

    Цитата

    Здесь подразумевается, что игрок сделал определенный выбор в предложенном историческом сообщении и нажал «да». А если нет? Но всю игру каждые 5 секунд движок проверяет это условие.

    Следует читать 5 раз в секунду.
    Воспользуйтесь одной из соц-сетей для входа:
    [ Регистрация ]Для скрытия рекламы, зарегистрируйтесь на форуме[ Вход на форум
    Сообщество ИмпериалБиблиотека Medieval 2: Total War Моддинг Medieval 2: Total War Оптимизация скриптов в Medieval 2 Total War, избавляемся от monitor_conditions.
    Письмо Админу Обратная Связь
    52c95abc0a95200d
    © 2021 «Империал» · Условия использования · Ответственность · Визитка Сообщества · 04 мар 2021, 22:26 · Счётчики