Вопросы по моддингу Crusader Kings 3 - Страница 50 - Моды и моддинг - Strategium.ru Перейти к содержимому

Вопросы по моддингу Crusader Kings 3

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

Alterus
i

Данная тема предназначена для вопросов по игровым модификациям, правке файлов и сохранений.

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

Закреплённые сообщения

Не работает. Я кстати пробовал вызывать событие с помощью просто trigger_event = ck3_accolade.1 , прописывая в уже имеющемся on_action_accolade там где идут строки на создание акколады.

 

Я не понимаю, видимо , оно не вызывается из этого файла .

Ссылка на комментарий

Приветствую. Пробую сделать мод на решение пригласить ко двору сенешаля. По аналогии с решением по врачу. Изучаю структуру решения в 90_minor_decisions.txt. Появились вопросы, которые сам пока не решил. Вот две строки:

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


В каких файлах находятся hire_physician_decision_desc и hire_physician_decision_tooltip? Спасибо.

Ссылка на комментарий

Alorian

@azgudda Это в папке localization перевод хранится по ключам. court_positions_l_russian.yml

Ссылка на комментарий

Опппп...! Сделал. Заготовка мода решения найма сенешаля готова. Проверена в игре, основные функции работают правильно: располагается в минорных решениях, текст, описания и подсказки, выводятся корректно, персонаж генерируется в целом правильно, скиллы и трейты соответствуют заданным параметрам. Мод выполнен отдельными новыми файлами.

Пока сделано собственно решение и соответствующий ивент. Локализация пока только RU. Интеграцию в 00_court_positions.txt пока не сделал; вероятно придется работать с полной копией файла и не вижу пока возможности как это обойти.
Далее поправлю анимацию сцены, чтобы соответствовала контенту. Также скорректирую цены найма; возможно оставлю ту же, что и для придворного врача. Вероятно следует добавить пул personality traits, сделав кандидатов более соответствующими своей роли.

 

Еще раз благодарю @Alorian за помощь :thank-you:.

Ссылка на комментарий

Вопрос: как генерируются пул персонажей, из которых происходит выборка придворного врача, караванщика или воителей? Прежде всего - какие файлы для этого используются? Интересно, есть ли зависимость присвоения личностных черт от уровня базовых скиллов, например, дипломатии, военного дела, управления, доблести. Или это просто рандомная сборка? Спасибо.

Ссылка на комментарий

Alorian
5 часов назад, azgudda сказал:

Вопрос: как генерируются пул персонажей, из которых происходит выборка придворного врача, караванщика или воителей?

В файле 90_minor_decisions.txt есть указатель при прожатии на событие health.3001 (для врача к примеру, для других иное событие), которое находится уже в файле health_events.txt. А уже в самом событии прописываются минимальные и обязательные параметры случайного персонажа, который потом добавляется в пул выдачи и появляется перед игроком.

 

Ссылка на комментарий

7 часов назад, Alorian сказал:

В файле 90_minor_decisions.txt есть указатель при прожатии на событие health.3001 (для врача к примеру, для других иное событие), которое находится уже в файле health_events.txt. А уже в самом событии прописываются минимальные и обязательные параметры случайного персонажа, который потом добавляется в пул выдачи и появляется перед игроком.

 

Ок, спасибо, это мне известно. Но вот вопрос в том, что все персонажи, привлекаемые через решение на придворные должности, уже были с момента генерации игры в пуле "странствующих". Проверил по файлу сохранения. Единственное, что к ним добавлялись некоторые трейты, например, основы врачевания, или путешественник. Вероятно, может измениться образование. Но сами ID уже были, к примеру, в pool_history=867.1.1.  Ну, это при таком поверхностном рассмотрении, может что-то упустил... Попробую в скрипте прописать Personality traits, и посмотрю - будет ли сгенерирован новый персонаж или изменится уже имеющийся в пуле.

Но было любопытно изучить, как вообще игра генерирует новых персонажей, которых нет в game\history\characters? Похоже на какой-то "дикий рандом" с бабками-берсеркерами и пр.

Ссылка на комментарий

Вообще. Первая претензия к игре - не предопределенные персонажи, по большей части, представляют "цирк уродов": трейты и параметры скиллов не имеют никакой связи: ну, не нормально же, когда у 4-х звёздного обладателя Midas Touched, базовый скилл stewardship равен 0! Понятно, что в целом они "расходный ресурс", но... когда собираешь двор, то выбираешь не лучшего из лучших, а вообще хоть кого-нибудь, что параметры хотя бы напоминали нужные. Пичаль :smile43:.

Ссылка на комментарий

Добавил в решение отказ от его использования AI, учитывая что бот вполне справляется с формированием своего двора. Пока временно. Однако в скрипте надо это прописать.

Вопрос. Насколько корректным будет следующий код:

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

По сути три базовых позиции в решениях для AI, которые прописаны в каждом решении в оригинальных файлах. Может быть вообще эти строки не нужны? Спасибо.

 

Ссылка на комментарий

Еще один вопрос: что точно обозначает следующее: 

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

Спасибо.

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

Ок, мод о найме сенешаля завершен, протестирован в ironmane; работает исправно. Позволяет нанимать персонажей трех рангов соответствующей квалификации: превосходной ( с ограничением), высокой и низкой. Решение доступно только игрокам. Совместил подбор из имеющегося пула свободных персонажей и генерацию новых. Назвал мод Siniscalcus (от позднелат. старший слуга, хех). Локализация в русской и английской версиях. В след версии сделаю корреляцию ранга нанимаемого сенешаля от характеристик советника-управляющего.

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

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

ustas_papa
В 17.07.2024 в 14:26, ustas_papa сказал:
Спойлер

 

Приветствую!

 

Имею желание контролировать протекание беременности у интересующих меня персонажей. Граничное условие: не желаю править (заменять модом) ванильные файлы.

 

Для меня очевидно, что нужно использовать ванильный on_action on_pregnancy_mother

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

# called for the mother when a pregnancy reaches the "revealed" status
# scope:mother is the pregnant mother
# scope:father is the assumed father
# scope:real_father is the biological father
on_pregnancy_mother = {
    on_actions = {
        мой_мод_on_pregnancy_mother
    }
}

 

где при помощи триггера отбирать нужных персонажей

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

мой_мод_is_target_in_pregnancy_tracking_list_trigger = {
    is_female = yes
    OR = {
        any_child = { is_ai = no }
        any_consort = { is_ai = no }
        any_close_or_extended_family_member = { is_ai = no }
        any_consort = {
            any_close_or_extended_family_member = { is_ai = no }
        }
    }
}

 

any_child здесь, наверное, излишен и критерии отбора обеспечиваются any_close_or_extended_family_member 

 

и уже в кастомном on_action (мой_мод_on_pregnancy_mother) парсить и, при необходимости, править область персонажа, попадающего под условия триггера. Т.е. заменить флаги персонажа birth_mother_will_die, birth_child_will_become_sickly на birth_will_go_smoothly и отследить и поправить запланированные негативные triggered_Event (pregnancy.2101, birth.3001, birth.3011, birth.3021 и др.)

 

Трудности:

 

Не могу из кода получить доступ к значению тиков флагов персонажа, чтобы корректно заменить флаги birth_mother_will_die, birth_child_will_become_sickly на birth_will_go_smoothly

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

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

 

Не понятно где искать область (scope), где хранится информация о запланированных для персонажа негативных эвентах. В области персонажа такой информации нет. В файле сохранения эта информация хранится в Root/Gamestate/Triggered Event/Triggered Event[Номер]. Очевидно, чтобы попасть в файл сохранения, информация должна где-то сохраняться ингейм, до момента сохранения. Вопрос где? :)

 

Буду крайне признателен за любые советы.

 

 

 

Прошерстил тематические ресурсы - походу нет способа получить тики в коде мода. Так же нет способа отменить установленный Triggered Event. Только заменять ванильные файлы.

 

Вышел из положения перехватив ванильный on_pregnancy_mother.

Спойлер

on_pregnancy_mother = {
    on_actions = {
        мой_мод_on_pregnancy_mother
    }
}

 

мой_мод_on_pregnancy_mother = {
    trigger = {
        scope:mother = {
            мой_мод_is_target_in_pregnancy_tracking_list_trigger = yes
            has_character_flag = birth_mother_will_die
        }
    }
    effect = {
        remove_variable = birth_mother_will_die
        trigger_event = { id = pregnancy.2101 }

    }
}

 

скриптовый триггер:

 

мой_мод_is_target_in_pregnancy_tracking_list_trigger = {
    is_female = yes
    is_pregnant = yes
    is_ai = yes
    OR = {        
        any_consort = { is_ai = no }
        any_close_or_extended_family_member = { is_ai = no }
        any_consort = {
            any_close_or_extended_family_member = { is_ai = no }
        }
    }
}

 

Половинчатое решение, но рабочее. Если нет желания ждать новой "естественной" беременности, можно кодом добавить сразу после trigger_event = { id = pregnancy.2101 }

Ссылка на комментарий

В конце каждого сражения в окне результатов битвы можно посмотреть количество солдат, убитых конкретным рыцарем. Вопрос: как можно получить эту статистику, чтобы в последующем использовать, например, для создания модификатора или в ивенте? Идея заключается в том, чтобы на основе такого рода статистики можно было бы улучшить рыцаря. Спасибо.

Ссылка на комментарий

ustas_papa
В 15.08.2024 в 22:30, azgudda сказал:

В конце каждого сражения в окне результатов битвы можно посмотреть количество солдат, убитых конкретным рыцарем. Вопрос: как можно получить эту статистику, чтобы в последующем использовать, например, для создания модификатора или в ивенте? Идея заключается в том, чтобы на основе такого рода статистики можно было бы улучшить рыцаря. Спасибо.

 

Если я правильно понимаю ремарку в коде " Initialize the variable we will use to keep track of how many relevant casualties there are.", то см. scripted_effect generate_relevant_slain_combatants_list_effect в ванильной combat_events.txt

 

Спойлер

scripted_effect generate_relevant_slain_combatants_list_effect = {
    # Initialize the variable we will use to keep track of how many relevant casualties there are.
    set_variable = {
        name = num_other_relevant_slain_combatants
        value = 0
    }

    # Re-order the combatant list based on who we care about the most.
    ordered_in_list = {
        list = $LIST_OF_SLAIN_COMBATANTS$
        max = 99
        check_range_bounds = no

        limit = { # We only care about people on the enemy side who matter to us, not generic knights.
            NOT = { this = root } # Do not send a message about ourselves.
            trigger_if = {
                limit = {
                    $LIST_ALL_CHARACTERS$ = no
                }
                # Must be relevant to root in some way.
                OR = {
                    AND = {
                        exists = scope:combat_war
                        root = { is_attacker_in_war = scope:combat_war }
                        this = scope:combat_war.primary_defender
                    }
                    AND = {
                        exists = scope:combat_war
                        root = { is_defender_in_war = scope:combat_war }
                        this = scope:combat_war.primary_attacker
                    }
                    combat_event_1001_character_is_relevant_to_target_trigger = { TARGET = root }
                }
            }
        }

        order_by = {
            value = 0
            if = {
                limit = {
                    OR = {
                        AND = {
                            exists = scope:combat_war
                            root = { is_attacker_in_war = scope:combat_war }
                            this = scope:combat_war.primary_defender
                        }
                        AND = {
                            exists = scope:combat_war
                            root = { is_defender_in_war = scope:combat_war }
                            this = scope:combat_war.primary_attacker
                        }
                    }
                }
                add = 1000
            }
            add = slain_combatant_weights_for_root_participant
        }

        # Add the casualties to a new list tailored to be more relevant to this character.
        add_to_list = relevant_slain_combatants
        root = {
            change_variable = {
                name = num_other_relevant_slain_combatants
                add = 1
            }
        }

        # The first two casualties on this list (i.e., the most important people to us) should be have their individual scopes saved for use in portraits & localization.
        if = {
            limit = {
                NOT = { exists = scope:primary_deceased }
            }
            save_scope_as = primary_deceased

            # Decrement the number of relevant slain combatants, to exclude the primary deceased from the count (for localization).
            root = {        
                change_variable = {
                    name = num_other_relevant_slain_combatants
                    add = -1
                }
            }
        }
        else_if = {
            limit = {
                NOT = { exists = scope:secondary_deceased }
            }
            save_scope_as = secondary_deceased
        }
    }
}

 

Ссылка на комментарий

ustas_papa

Быстрофикс: Не правильно понимаю. :)

Нужно копать в сторону window_battle_summary.gui

 

Функция BattleSummaryWindow.GetKnightKills - сколько всего убил в битве. Аргументом принимает функции BattleEvent.GetLeftCharacter или BattleEvent.GetRightCharacter, которые в свою очередь принимают аргументом функцию BattleSummaryWindow.IsPlayerAttacker от результата которой (да/нет) зависит будет персонаж "левым" или "правым". Функции описаны в \Мои документы\Paradox Interactive\Crusader Kings III\logs\data_types\data_types_uncategorized.txt

 

Все это чудесно, только не понятно как использовать в коде триггеров/эффектов. Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. говорит "Saved scopes can be passed from UI to scripted guis or script values/custom localization with AddScope" и приводит примеры 

 

"[ScriptedGui.Execute( GuiScope.SetRoot( GetPlayer.MakeScope ).AddScope( 'target', CharacterWindow.GetCharacter.MakeScope ).End )]"

"[GuiScope.SetRoot( GetPlayer.MakeScope ).AddScope( 'target', CharacterWindow.GetCharacter.MakeScope ).ScriptValue('sval_name')|0]"

 

но полной документации по синтаксису я не нашел.

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

21 час назад, ustas_papa сказал:

Если я правильно понимаю ремарку в коде " Initialize the variable we will use to keep track of how many relevant casualties there are.", то см. scripted_effect generate_relevant_slain_combatants_list_effect в ванильной combat_events.txt

Спасибо, кажется, именно то, что надо :thank-you:. Буду изучать.

Ссылка на комментарий

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

Ссылка на комментарий

Как удалить условие(1 раз за жизнь) о принятии персонажем-игроком местной культуры?

Ссылка на комментарий

ustas_papa
В 01.09.2024 в 14:44, archi900 сказал:

Как удалить условие(1 раз за жизнь) о принятии персонажем-игроком местной культуры?

Файл common\decisions\10_culture_conversion_decisions.txt

 

Спойлер

is_shown = {
        is_landed = yes
        primary_title.tier > tier_barony
        NOT = { culture = capital_province.culture }
        NAND = {
            is_ai = yes
            OR = {
                has_character_flag = converted_culture_this_lifetime #-  у персонажа (не AI) не должно быть флага converted_culture_this_lifetime, тогда будет доступно решение
                has_character_flag = converted_culture_this_lifetime_ai
            }
        }
 }

 

Спойлер

is_valid_showing_failures_only = {
        is_physically_able_adult = yes #-  персонаж должен быть дееспособным совершеннолетним, тогда будет доступно решение
        is_at_war = no # персонаж не должен воевать при принятии решения
        custom_description = {
            text = can_only_change_culture_once # поиск в файлах локализации (*.yml) по вхождению can_only_change_culture_once поможет понять, что это именно оно
            NOT = { has_character_flag = converted_culture_this_lifetime } #-  у персонажа (не AI) не должно быть флага converted_culture_this_lifetime, тогда будет доступно решение
        }
}

 

Необходимо у перса удалить флаг converted_culture_this_lifetime

Ссылка на комментарий

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

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

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

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

  Only 75 emoji are allowed.

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

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

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

  • Ответы 1,081
  • Создано
  • Последний ответ
  • Просмотры 146039

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

  • Alorian

    146

  • Кодекс

    77

  • Labes

    57

  • Xowk

    21

  • Stics

    19

  • Aurelius36

    18

  • LuciferMorningstar

    16

  • himitsu7

    16

  • Desidur

    14

  • Shaha

    14

  • TsarHerobrin

    14

  • Cromwell7

    13

  • korolevskiypingvin

    13

  • ustas_papa

    13

  • Лагос

    12

  • svetlovanton

    12

  • azgudda

    11

  • Basileus

    11

  • Grakedrik

    11

  • ROOT123

    11

  • Mayonez_kun

    10

  • Филипп1999

    10

  • archi900

    10

  • Slutskin

    10

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

Популярные сообщения

Дoбро

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

Alterus

i Данная тема предназначена для вопросов по игровым модификациям, правке файлов и сохранений.

srx47

без лаунчера: 1) кидать моды в *\Documents\Paradox Interactive\Crusader Kings III\mod   2) содать текстовый файл *\Documents\Paradox Interactive\Crusader Kings III\dlc_load.js

Labes

Здравствуйте. Вы немного не туда воюете =) Вам сначала нужно добавить русскую культуру в список культур, для которых доступна инновация. Инновации прописаны в нескольких файлах. Например иннова

Labes

"На то воля Божья"

Кодекс

В запущенной игре, прямо можно с стартового меню. Слева внизу settings (иконка выглядит как свиток с галочкой), далее пункт game, подпункт language

Labes

@Mr.Weis Здравствуйте. Нужды создавать отдельную тему не было, вопросы по редактированию файлов сохранения можно задать -> Войдите или зарегистрируйтесь, чтобы увидеть скрытое содержимое. .   Если я все правильно понял,

Keksik

@Labes @Mr.Weis раз ответ дан, то перенёс тему сюда. 

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

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


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

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