Вопрос №110
Для того чтобы отредактировать / создать характеристику (трейт) персонажа, необходимо работать со следующими файлами:Как редактировать характеристики персонажа и добавлять новые ?
1. export_descr_character_traits.txt
Рассмотрим пример трейта:
Trait GoodCommander Characters family AntiTraits BadCommander Level Promising_Commander Description Promising_Commander_desc EffectsDescription Promising_Commander_effects_desc GainMessage Promising_Commander_gain_desc LoseMessage Promising_Commander_lose_desc Threshold 1 Effect Command 1 Level Aspiring_Commander Description Aspiring_Commander_desc EffectsDescription Aspiring_Commander_effects_desc GainMessage Aspiring_Commander_gain_desc LoseMessage Aspiring_Commander_lose_desc Threshold 2 Effect Command 2Теперь подробнее:
Trait GoodCommander - название характеристики перснажа;
Characters family - тип персонажа, у которого может быть использован данный трейт;
AntiTraits BadCommander – характеристики, которые при наличии данной черты не могут появиться у персонажа, либо при наличии последней не может появиться исходный трейт;
Level Promising_Commander - первый уровень характеристики персонажа (каждый трейт имеет как минимум один уровень);
Description Promising_Commander_desc - ссылка на описание данного уровня трейта в файле локализации (папка text);
EffectsDescription Promising_Commander_effects_des - ссылка на описание эффектов данного уровня трейта в файле локализации (папка text);
GainMessage Promising_Commander_gain_desc - ссылка на описание условий получения данного уровня трейта в файле локализации (папка text);
LoseMessage Promising_Commander_lose_desc - ссылка на описание условий потери данного уровня трейта в файле локализации (папка text);
Threshold 1 - этот параметр определяет, сколько пунктов должен набрать персонаж для получения данного уровня.
Effect Command 1 – эффект, который добавляется при наличии данного трейта у персонажа;
Level Aspiring_Commander - здесь всё аналогично, только это уже второй уровень трейта;
После этого разберемся с условиями появления данного трейта, прописанными в соответствующем нашей характеристике триггере:
Trigger V0090_Standard_Battle_Any_Victory_VnV_Trigger WhenToTest PostBattle Condition IsGeneral and WonBattle and BattleOdds Продолжаем комментарии строк :
Trigger V0090_Standard_Battle_Any_Victory_VnV_Trigger - название триггера (обязательно должно быть уникальным!);
WhenToTest PostBattle – выполнение триггера рассчитано на игровой отрезок, который случится после битвы;
Condition IsGeneral - условие, указывающее что действие триггера сработает только в том случае, если тип персонажа - генерал;
and WonBattle - условие, проверяющее победу персонажа в битве;
and BattleOdds Affects GoodCommander 1 Chance 100 при выполнении данных условий персонажу дается 1 уровень черты good commander (т. е. promising commander) с вероятностью 100%.
2. export_descr_vnvs_enums.txt
В этом файле необходимо указать ссылки на описание каждого уровня трейта, а также его условий и эффектов.
Promising_CommanderPromising_Commander_descPromising_Commander_gain_descPromising_Commander_lose_descPromising_Commander_effects_desc3. export_VnVs.txt
Данный файл представляет собой список локализации предыдущего файла, т.е. отображение текстовых описаний в свитке персонажа во время игры.
{Promising_Commander} Promising Commander название{Promising_Commander_desc} описание This man has shown at least a basic grasp of field tactics.{Promising_Commander_gain_desc} получениеThis man has gained a Command star thanks to his battle tactics.{Promising_Commander_effects_desc} эффекты +1CommandПримечание: следует принимать во внимание, что в игре существует определенный лимит трейтов, поэтому при добавлении собственных черт вполне полезно редактировать уже имеющиеся стандартные характеристики.
Вопрос №111
Реализация подобного скрипта вполне возможна, очень похожий образец существует в моде ОиМ.Возможно ли написать скрипт, который бы управлял перемещением командира на стратегической карте, без участия в этом игрока (по принципу пролога в RTW) ?
Рассмотрим основные моменты, полезные для составления необходимого нам скрипта:
- Задание срабатывания скрипта на конкретном ходу
console_command date 1608console_command season summer- Задание условия, проверяющего местонахождение персонажа рядом с назначенными координатами
and I_CharacterTypeNearTile sassanids named_character, 131, 21- Задание отключения курсора, консоли и т.д.
disable_cursor disable_shortcuts trueinhibit_camera_input truedisable_shortcuts advisor_portrait_button falsesuspend_unscripted_advice truefilter_all_ui_commands off- Задание перемещения стратегической камеры
move_strat_camera 96, 138zoom_strat_camera 0.3wait 2- Настройки подсветки
ui_indicator 0 circle 585 505 colour 0 0 255 scale 0.7 ui_indicator 1 arrow_up_left 110 727 colour 255 0 0 scale 0.3- Задание включения курсора / интерфейса
enable_cursordisable_entire_uidisable_shortcuts options_button false
- Задание отключения советов
disable_shortcuts advisor_dismiss_button falsedisable_shortcuts dismiss_advice falsedisable_shortcuts advisor_portrait_button false- Задания запуска исторического события
dismiss_advicewhile I_AdvisorVisibleend_whileadvance_advice_thread Carth_General_Intro_1_Thread- Задание счетчика времени
restart_timer Campaign_Map_Timerwhile I_AdvisorVisible monitor_conditions I_TimerElapsed Campaign_Map_Timer > 30000ui_indicator_remove 1ui_flash_start advisor_dismiss_button terminate_monitorend_monitorend_while- Задание передвижения персонажа и отображения его пути
ui_flash_stopui_indicator_remove 0ui_indicator_remove 1disable_cursormove OiM-Mikhail OiM-Pozharskij, 95, 138enable_cursorwhile I_AdvisorVisibleend_while- Задание другого исторического события
dismiss_advicewhile I_AdvisorVisibleend_whileadvance_advice_thread Carth_Mission_1_Intro_Threadsuspend_unscripted_advice true- Задание спауна (появления) персонажа (в данном скрипте - полководец с отрядами) и его передвижения с отображением пути
spawn_armyfaction empire_eastcharacter Oim-Pavel-vkl OiM-Zolkiewski, named character, command 5, influence 5, management 1, subterfuge 1, age 36, , x 92, y 138unit rp general exp 2 armour 1 weapon_lvl 1unit rp winged hussar late exp 1 armour 0 weapon_lvl 0unit rp pushka exp 1 armour 0 weapon_lvl 0 0endconsole_command give_trait "Oim-Pavel-vkl OiM-Zolkiewski" GoodCommander 3move Oim-Pavel-vkl OiM-Zolkiewski, 94, 138ui_indicator 0 circle 420 225 colour 0 0 255 scale .7; Isto- Дальнейшее задание проверки счетчика времени
restart_timer Campaign_Map_Timer; Dismiss to continue. If not dismissed after 10 seconds, show hint.while I_AdvisorVisiblemonitor_conditions I_TimerElapsed Campaign_Map_Timer > 10000 счетчикui_flash_start advisor_dismiss_buttonterminate_monitorend_monitorend_whileui_indicator_remove 0
- Дальнейшее задание передвижения персонажа с подсветкой пути
point_at_strat_position 96, 138character_flash_start Oim-Pavel-vkl OiM-Zolkiewskiconsole_command mp "OiM-Mikhail OiM-Pozharskij" 55 move OiM-Mikhail OiM-Pozharskij, 96, 138character_flash_stop Oim-Pavel-vkl OiM-Zolkiewskiui_flash_stop- Включение ранее отключенного интерфейса игры
enable_entire_uidisable_shortcuts false inhibit_camera_input falsefilter_all_ui_commands on- Задание скриптового сражения между персонажами
if I_CharacterTypeNearTile sassanids named_character, 1 131,21 engage_armies Oim-Pavel-vkl OiM-Zolkiewski, OiM-Mikhail OiM-Pozharskij битваend_ifПримечание: в данном скрипте целесообразноосуществлять запуск исторических событий в качестве запланированных советов.
Для этого нужно редактировать следующие файлы:
1. export_descr_advice.txt
AdviceThread Season_Year_Turn15_ThreadGameArea CampaignItem Season_Year_Turn15_Text_01UninhibitableVerbosity 0 Threshold 1MaxRepeats 0 RepeatInterval 1 Attitude NormalPresentation DefaultTitle Season_Year_Turn15_Text_01_TitleText Season_Year_Turn15_Text_01_Text1Здесь уточним самые основные моменты:
- Название совета:
AdviceThread Season_Year_Turn15_Thread- Упоминание файла из папки text, первая строка - ссылка на заголовок, вторая - на текстовое описание совета:
Title Season_Year_Turn15_Text_01_TitleText Season_Year_Turn15_Text_01_Text1
Стоит отметить, что стандартный совет имеет еще и триггер, однако в рассматриваемой ситуации имеет место запланированный совет, поэтому можно обойтись и без триггера.
2. export_descr_advice_enums.txt
В этом файле приводятся ссылки на локализацию текстовых описаний вышеуказанных советов:
Season_Year_Turn15_Text_01_TitleSeason_Year_Turn15_Text_01_Text13. export_advice.txt (каталог data / text)
В этом файле размещается локализация текстовых описаний игровых советов:
{Season_Year_Turn15_Text_01_Title} Восстание Болотникова собственно говоря, сам текст совета и заголовок{Season_Year_Turn15_Text_01_Text1}Беглый холоп князя Трубецкого Иван Блотников поднял восстание в 1606 году. Дон этого он был взят в плен татарами, продан в Турцию и был гребцом на турецкой галаре. В одном из сражений с венецианцами Болотникова спасли, и он через Германию и Польшу попал в Россию. Есть сведения, что по пути мятежник встречался с Молчановым, выдающим себя за чедом спасшегося царя Дмитрия, т. е. с будующим тушенским вором. На Руси обстановка в то время была нескопойная. После свержения боярами Леджмитрия I на престол вошел Василий Шуйский, не пользовавшейся в стране большой популярностью. В южных уездах собралось много недовольных. От правительства отложился князь Трубецкой, засевший в Путивле. В это время Болотников провозгласил себя "воеводой царя Дмитрия" и поднял восстание против боярского царя.Теперь поговорим о способах запуска запланированного совета.
Для запуска созданного нами совета используем команду advance_advice_thread Season_Year_Turn15_Thread в сочетании с условием хода, которую необходимо внедрить в скриптовый монитор после прописи всех команд.
Либо можно использовать альтернативный вариант годового скрипта следующей конструкции:
console_command date 1598console_command season winterdeclare_counter Season_Year_Turn0_Threadwhile I_TurnNumber = 0 monitor_conditions I_CompareCounter Season_Year_Turn0_Thread = 0if I_CompareCounter Season_Year_Turn0_Thread = 0advance_advice_thread Season_Year_Turn15_Threadinc_counter Season_Year_Turn0_Thread 1wait 1select_ui_element advisor_portrait_buttonsimulate_mouse_click lclick_downsimulate_mouse_click lclick_upend_ifend_monitorsuspend_unscripted_advice trueend_while