Белый мир в HoI4: просто, надёжно и современно - Учебники по моддингу - Strategium.ru Перейти к содержимому

Белый мир в HoI4: просто, надёжно и современно

Рекомендованные сообщения

Для заключения белого (сепаратного) мира в Хойке используется команда 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, это довольно простой способ сохранить какой-то тег, а то и несколько. Таким образом, чтобы заключать перемирия, нам нужны будет непосредственно для этого теперь лишь две строки:

Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое.

И текущая страна, которой прилетел этот ивент, заключит перемирие с тем, кто это прислал, а также помирятся все их союзники и субъекты. Т.к. мы используем там обработку массива тегов в цикле, то в теории можно добавить несколько тегов и замирить сразу несколько разных альянсов. Но проверку работоспособности такого решения оставлю в качестве домашнего задания. 

Изменено пользователем GBV
Ссылка на комментарий

Присоединиться к обсуждению

Вы можете оставить комментарий уже сейчас, а зарегистрироваться позже! Если у вас уже есть аккаунт, войдите, чтобы оставить сообщение через него.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Only 75 emoji are allowed.

×   Ваша ссылка автоматически преображена.   Отображать как простую ссылку

×   Предыдущее содержимое было восстановлено..   Очистить текст в редакторе

×   You cannot paste images directly. Upload or insert images from URL.

  • Ответы 0
  • Создано
  • Последний ответ
  • Просмотры 1224

Лучшие авторы в этой теме

  • GBV

    1

Популярные дни

Лучшие авторы в этой теме

  • GBV

    GBV 1 сообщение

Популярные дни

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу


Copyright © 2008-2024 Strategium.ru Powered by Invision Community

×
×
  • Создать...