Вопросы по моддингу 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


@Alorian большое спасибо! Сейчас лучше представляю всю структуру игры. 


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

Пока сделано собственно решение и соответствующий ивент. Локализация пока только 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,085
  • Создано
  • Последний ответ
  • Просмотры 151971

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

  • 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

  • Лагос

    13

  • ustas_papa

    13

  • svetlovanton

    12

  • azgudda

    11

  • Basileus

    11

  • Grakedrik

    11

  • ROOT123

    11

  • Mayonez_kun

    10

  • Филипп1999

    10

  • Cobalt XIV

    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 пользователей

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


admin@strategium.ru

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

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