Сообщество Империал: Уроки по моддингу от papeion по Total War: Attila - Сообщество Империал

Стратегии, Игровые Миры, История, Total War


Imperial Уважаемый Гость, Открыт общефорумный ютуб-канала Imperial Total War - Объединённое русскоязычное сообщество Total War
papeion

Уроки по моддингу от papeion по Total War: Attila

Делюсь своим опытом моддинга Аттилы
Тема создана: 08 Ноябрь 2017, 11:33 · Автор: papeion
СОХРАНИТЬ ИНФОРМАЦИЮ:
Сообщений: 3 · Просмотров: 840
 papeion
  • Imperial
Imperial
Форумчанин
2 557
12
316
2 926
1

Дата: 08 Ноябрь 2017, 11:33

В этой теме буду выкладывать свои туториалы.
Категорически прошу, не надо здесь задавать вопросы, для этого есть тема.
Но можно критиковать или дополнять мои уроки.

Читайте о Уроки по моддингу от papeion по Total War: Attila в нашей группе Вконтакте Смотрите Уроки по моддингу от papeion по Total War: Attila в нашей группе Ютуба
     papeion
    • Imperial
    Imperial
    Форумчанин
    2 557
    12
    316
    2 926
    1

    Дата: 08 Ноябрь 2017, 11:58

    Первая большая тема, моддинг событий и скриптов

    Урок-1. Инциденты.

    Во-первых, насколько я понял, инцидент срабатывает только для игрока.
    Например, какого-нибудь "Потопа" или "Землетрясения" в регионах АИ не бывает.
    Однако, с помощью инцидента мы можем запустить скрипт, который отработает там где и для кого вы хотите.

    Чтобы создать инцидент, надо:

    1) Создать новый ключ инцидента в таблице incidents_tables
    - колонка generate отвечает за автозапуск инцидента. Если не собираетесь запускать инцидент каким-то др. образом, то ставьте галочку.
    - колонка ui_image отвечает за то, какая иллюстрация будет сопровождать этот инцидент. Иллюстрации лежат по пути ui/eventpics.
    - колонка prioritised отвечает за абсолютный приоритет в очереди срабатывания инцидента. Ставьте галочку, если ваш инцидент запланированный на определённый ход. И не надо, если ваш инцидент должен сработать на случайном ходу.

    Imperial

    2) В таблице cdir_events_incident_option_junctions_tables задайте для вашего инцидента условия для срабатывания (таргетинг, шанс, исключения и т.д.). Но имейте в виду, что некоторые из них тугодумные, т.е. игра их с трудом обрабатывает. К таким относится настройка инцидента на "сезон" CND_SEASON (кстати, такая настройка совершенно не нужна для запланированного на определённый ход инцидента), чтобы указать несколько сезонов, делаем для каждого свою строку. Также существуют настройки, с которыми инцидент никак не хочет запускаться, например, это "армия в регионе" GEN_CND_ARMY_IN_REGION, "нет армии в регионе" GEN_CND_NOT_ARMY_IN_REGION. Делайте проверочные тесты для того, чтобы убедиться, что ваш инцидент правильно работает или что вообще будет работать.

    Примеры того, как можно назначить настройки, можно посмотреть у существующих инцидентов.

    Важно: для каждой строки нужен свой ID, неповторяющийся в других строках. См. первую колонку.

    CND_CAMPAIGN - эта настройка обязательная, она отвечает за то, в какой компании будет срабатывать инцидент, т.е. или в ГК, или в Велизарии, или Шарлемане. Или там и там, тогда надо для каждой компании сделать строку.
    CND_FACTION - эта настройка по желанию, когда вы хотите настроить срабатывание инцидента для конкретной фракции, или нескольких конкретных фракций (для каждой сделать строку).
    VAR_CHANCE - эта настройка обязательная, она по видимому отвечает за шанс на срабатывание. В запланированных инцидентах надо ставить 100, а в случайных ограничиться вариантами от 5 до 80. Особо важна она для случайных, если их много, чтобы задать им приоритет по отношению друг к другу.
    VAR_FOLLOWUP_CHANCE - эта настройка по желанию. Она тоже отвечает за шанс срабатывания. Но я не знаю, чем она в этом смысле отличается от основной. Могу только гадать! Возможно она дополнительно увеличивает шансы. Именно исходя из этой догадки я её использую.

    GEN_CND_OWNS - не знаю что это, но она обязательная.

    CND_FIRST_ROUND - эта настройка...
    CND_LAST_ROUND - и эта настройка являются обязательными для запланированных на определённый ход инцидентов. Именно они отвечают, на каком ходу должен сработать инцидент. Я обычно указываю одинаковые значения в обоих. Разницу между ними не проверял.

    CND_ROUNDS_UNTIL_NEXT - эта настройка является обязательной для случайных инцидентов, т.е. срабатывающих на случайном ходу. Она отвечает за то, через сколько ходов можно повторно запускать этот инцидент.

    GEN_TARGET_REGION - эта настройка и
    GEN_CND_FORCE_IN_PROVINCE - и эта настройка, я не проверял на предмет обязательности, но от такого типа настроек зависит работоспособность инцидента общего действия ...т.е. просто на всю фракцию. Я их обязательно выставляю обе для запланированных инцидентов общего направления (т.е. чтобы просто повлиять на всю фракцию). Я это просто скопировал у камрада Скидвара, ибо столкнулся с тем, что не вполне ещё уяснил, какие настройки и в каких типах инцидентов обязательные.

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

    Imperial

    GEN_TARGET_REGION - эта настройка задаёт условие - инцидент действует в регионе. Совместно с ней мы по желанию:
    - применяем ещё настройку GEN_CND_REGION_ANY_OF, с помощью которой указываем, какой именно регион или несколько регионов мы имеем в виду. Когда несколько регионов, то они вписываются в одну строку через точку с запятой, при чём можно с пробелом между ключами, можно без пробела, главное, чтобы ключи регионов разделяла точка с запятой. Без этой настройки инцидент сработает рандомно в любом регионе.
    - или\и настройку GEN_CND_REGION_BUILDING_LEVEL с помощью которой указываем условие, какая постройка должна быть в регионе (или несколько вариантов построек, каждая на новой строке)
    - или\и настройку GEN_CND_REGION_NOT_BUILDING_CHAIN_AVAILABLE с помощью которой мы указываем, каких построек не должно быть, но на этот раз указываем не ключи построек, а целую группу построек CHAIN. Например, в инциденте "Засуха" в Шарлемане таким образом исключаются все регионы, в которых есть порт.

    На скриншоте пример планового инцидента, имеющего специальное условие, сработать для конкретного региона. Я выделил строки, которые отвечают за то, чтобы сработать в регионе вообще, и именно в конкретном регионе в частности.

    Imperial

    На следующем скриншоте вы видите настройки инцидента, который должен срабатывать на случайном ходу и повторное срабатывание разрешено через 24 хода (выделил):

    Imperial

    Я перечислил то, чем я пользуюсь, но существуют ещё и др. настройки.
    Собственно название ключей настроек состоят из слов, так что должно быть итак понятно, что к чему.
    Главное не ленитесь тестировать.

    3) В таблице cdir_events_incident_payloads_tables мы назначаем нашему инциденту то, что именно должно случиться (во фракции, в регионе, с персонажем и т.д., таргетинг на которых мы настраиваем в предыдущей таблице).

    В первой колонке так же надо указать ID - индивидуальный номер для каждой строки

    В колонке payload_key мы можем указать:

    - Если мы хотим прицепить пакет эффектов (к фракции, к региону ли), то мы вписываем в эту колонку payload-ключ, который в свою очередь создаём в табл. cdir_events_payloads_tables. Один такой ключ можно использовать только для одного инцидента. В этой таблице мы назначаем, какой именно пакет эффектов (колонка effect_bundle_key). При этом один и тот же ключ пакета эффектов можно прицепить к нескольким ключам payload_key. Ну а ключ пакета эффектов создаётся в таблице effect_bundles_tables, при этом важно, что ему выставлено в последней колонке (фракция, регион и т.д.), которая отвечает за то, к чему именно будет цепляться этот пакет (ко всей фракции, или к региону, и т.д.). В свою очередь этому пакету эффектов назначаются эффекты в таблице effect_bundles_to_effects_junctions_tables.
    Ну и, в последней колонке мы должны указать, сколько времени должен действовать пакет эффектов, например DURATION[5];GLOBAL, что означает в течение пяти ходов. Если выставить ноль, то действие будет вечным.

    Спойлер (раскрыть информацию)


    - При этом, если мы хотим прицепить пакет эффектов к региону, то мы должны добавить строку с ключом TARGET и значением EVENT для него в посл. колонке. В случае же, когда мы хотим прицепить пакет эффектов к фракции, это не нужно.


    - Если мы хотим задать разрушение в регионе, то делаем строку с настройкой DAMAGE_BUILDING в этой колонке и указанием для неё степени разрушения в последней колонке, например, MIN[75];MAX[100], что означает минимально и максимально возможное разрушение в процентах.

    На скриншоте я выделил три строки, что должно произойти для инцидента "Землятресение".
    Ключ-payloads должен прицепить к региону временно действующий пакет с эффектами.
    Кроме того, должны повредиться постройки в регионе на 75-100 %

    Imperial

    - Если мы хотим дать или отнять деньги из казны, то используем настройку TREASURY с указанимем в посл. колонке сколько именно, например, AMOUNT[-15000], что означает отнять 15000 или AMOUNT[15000], что означает добавить 15000

    - Если мы хотим повысить\снизить контроль власти то испльзуем настройку CHANGE_POLITICAL_POWER, и в последней колонке указываем значение, например, AMOUNT[-20], что означает снизить контроль власти на 20%

    - Если мы хотим вывести мини-сообщение, то используем настройку TEXT_DISPLAY с указанием в посл. колонке ключа, например, LOOKUP[cha_aegidius_afranius_1]. Сам такой ключ создаётся в табл. campaign_payload_ui_details_tables

    Я перечислил то, чем я пользуюсь, но существуют ещё и др. настройки.

    -----------
    4) Естественно, что вам надо сделать локализацию для инцидента (заголовок и описание), для нового пакета эффектов, для мини-сообщения. Примеры оформления легко подсмотреть в ванильной локализации посредством просмотра ванильных же ключей. Кстати, для ключей-payloads локализация не нужна.

    5) С помощью инцидента можно запускать какой-нибудь скрипт, но об этом позже.

    P.S. Это не окончательный вариант урока. Со временем я буду вносить в него изменения\дополнения, может быть и скриншоты тоже.
    Скорее всего я буду ещё долго разрабатывать\улучшать этот урок.
       vadim
      • Imperial
      Imperial
      Стратег Рима
      1 999
      11
      83
      1 052
      5

      Дата: 02 Апрель 2019, 08:38

      Приветствую Уважаемого Камрада
      Вопросик у меня есть к Вам/а возможно и просьба/
      Хотел вписать в канву своего мода появление Римской Экспедиции в виде Движения Аристократов для Восстановления былой славы Византии.
      Поясню, предположим остается у Зри пара регионов по островам или в северной Африке. Константинополя они лишаются.
      Прописывается Скрипт на появление Фракции Возрождения /Рим_Экспед/ данная фракция все завоёванные регионы передает естественно во владения Ври.
      Условием к срабатыванию Скрипта является утрата владения Константинополем и остаток из двух регионов /во владении Ври/
      При этом либо до срабатывания Скрипта на появление Новой Фракции либо сразу после прописывается Инцидеент для этого Движения Возрождения.
      Очень хотелось бы чтобы Вы Уважаемый papeion помогли мне с пропиской этого скрипт_комплекса - поскольку у вас всё таки Намного больше в этом Опыта.
         papeion
        • Imperial
        Imperial
        Форумчанин
        2 557
        12
        316
        2 926
        1

        Дата: 04 Апрель 2019, 05:36

        Урок:
        1. Если фракция не существует на карте, и вам надо респаунить её, то
        а) Вариант А. Обязательно респаунить два хода подряд. Ибо если один, то эта фракция будет вести себя пассивно и отсутствовать в списке фракций компании при переходе хода.
        б) Вариант Б. Достаточно респаунить один раз если эту фракцию вы настроили при сборке старпос особым образом. Смотри пример в "Последнем римлянине" в виде мавров или лангобардов. Они, несмотря на то, что до репауна отсутствуют на карте, однако они присутствуют в списке фракций при переходе хода. Секрет в том, что при сборке старпос этим фракциям прописано по одной орде с лидером, которые находятся как бы на карте, но в зоне терраинкогнита.

        Урок:
        Чтобы респаунить армию на карту компании, много ума не надо.
        1. Вариант №1. Респаун с помощью только таблиц. Создать инцидент. Настройки на респаун посредством инцидента подсмореть в Рим-2. Там в последнем длс (римская республика) СА показали нам, как это делается.
        2. Вариант №2. Респаун с помощью инцидета + скрипта. Сделать скрипт, который активируется при условии срабатывания инцидента. Код скрипта выглядит так: если ключ инцидента активировался, то запускается такой-то респаун.
        3. Вариант №3. Респаун с помощью только скрипта. Тут главная проблема: правильно настроить условия для срабатывания респауна. Проще всего выставить на таком-то ходу. Если же требуются более сложные условия, то подбирать код посредством тестов.

        Урок:
        Чтобы фракция завоёвывала регионы для своего вассала, надо во-первых, сделать её сатрапом или протекторатом (кем именно это надо уточнить). Опять же: если фракция изначально настроенна в старпос, как прусутствующая в терра инкогнита, то можно уже в старпос выставить ей быть сатрапом\протекторатом. Если же её нет в компании, и придётся делать двойной респаун, то назначать её сатрапом придётся посредством скриптовой команды (я этого ни разу не делал, но вроде бы есть такая команда, хотя неизвестно, как её правильно записывать в скрипте, нужны тесты.
        Чтобы фракция завоёвывала регионы для своего вассала, это надо во первых выставить ей пакет режимов оккупации.

        Скрипт завоевания для своего вассала какой-там есть ли или нет, я не знаю. Надо смотреть. Подозреваю, что особо специального скриптинга для этого не требуется.

        Я сейчас написал этот текст. И ушёл на работу. Времени у меня оч. мало, и работа нервная, пока не могу моддить. Может через месяц получится.
          У тебя есть вопрос или предложение по этой теме? Или хочешь высказать свою точку зрения?
          Тогда просто нажми ниже на любую кнопку своей социальной сети и сделай это!

           РегистрацияУважаемый Гость, для скрытия рекламы, зарегистрируйтесь на форумеВход на форум 
          Уважаемый Гость подпишись на объединённое русскоязычное Сообщество Imperial Total War
          © 2019 «Империал» · Условия использования · Ответственность · Визитка Сообщества · 20 Апр 2019, 09:20 · Счётчики