GBV 713 15.09.2023, 19:02:33 Поделиться #1 15.09.2023, 19:02:33 Для заключения белого (сепаратного) мира в Хойке используется команда white_peace. Допустим у нас есть ивент, который приходит от воюющего противника и предлагает заключить мир, тогда вариант согласия может иметь такой вид в ивенте: Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. Однако этого мало. Ведь могут воевать между собой два альянса, тогда перемирие лишь между двумя противниками не остановит всю войну, более того, можно будет заново вступить в эту войну по запросу союзника. Поэтому нужно захватить перемирием и всяких союзников с марионетками, чтобы точно все замирились. Для этого например используем выборку стран с условием через every_other_country: Спойлер option = { name = my_event.1.a white_peace = FROM every_other_country = { # мирим с нами вражеских союзников limit = { OR = { is_in_faction_with = FROM is_puppet_of = FROM } has_war_with = ROOT } white_peace = ROOT } every_other_country = { # мирим своих союзников limit = { OR = { is_in_faction_with = ROOT is_puppet_of = ROOT } has_war_with = FROM } white_peace = FROM } #...условия мира: территориальные уступки или прочее } Так уже лучше, хотя всё таки такие перемирия стоит применять лишь между лидерами альянсов, хотя бы с чисто логической точки зрения. Но можно ли как-то эту запись сократить, чтобы не писать каждый раз одно и то же для каждого белого мира? В скриптовом языке для моддинга нет полноценных функций, но есть в некотором роде макросы, наборы команд, которые можно легко вызывать когда они нужны - scripted effects. Создадим в /common/scripted_effects/ новый файл (или добавим в существующий, если в моде уже добавлялись там файлы ранее) и запишем туда такой скрипт white_peace_with_alliances: Спойлер white_peace_with_alliances = { custom_effect_tooltip = white_peace_with_alliances_tt # здесь лучше добавить в локализацию описание эффекта, что делает этот код for_each_scope_loop = { array = white_peace_countries_array white_peace = ROOT every_other_country = { limit = { OR = { is_in_faction_with = ROOT is_subject_of = ROOT } has_war_with = PREV } white_peace = PREV } every_other_country = { limit = { OR = { is_in_faction_with = PREV is_subject_of = PREV } has_war_with = ROOT } white_peace = ROOT } } clear_array = white_peace_countries_array # очищаем в конце массив, чтобы не было ничего лишнего при повторном использовании } Т.к. это не функция, которой можно передать параметр, используем для передачи тега противника массив white_peace_countries_array, это довольно простой способ сохранить какой-то тег, а то и несколько. Таким образом, чтобы заключать перемирия, нам нужны будет непосредственно для этого теперь лишь две строки: Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. И текущая страна, которой прилетел этот ивент, заключит перемирие с тем, кто это прислал, а также помирятся все их союзники и субъекты. Т.к. мы используем там обработку массива тегов в цикле, то в теории можно добавить несколько тегов и замирить сразу несколько разных альянсов. Но проверку работоспособности такого решения оставлю в качестве домашнего задания. Изменено 15.09.2023, 19:04:59 пользователем GBV Цитата Ссылка на комментарий
Рекомендованные сообщения
Присоединиться к обсуждению
Вы можете оставить комментарий уже сейчас, а зарегистрироваться позже! Если у вас уже есть аккаунт, войдите, чтобы оставить сообщение через него.