Учебник по скриптам для Rome Total War
Автор: HouseOfHam
Дата: 07 июн 2013, 01:08 · Просмотров: 11 177
Дата: 07 июн 2013, 01:08 · Просмотров: 11 177
Ниже-следующее - авторский, т.е. мой собственный, перевод моей-же статьи с анлийского. Оригинал тут: http://www.twcenter.net/forums/showthread.php?t=169689
В начале, немного терминологии:
campaign script (скрипт компании) - Скрипт вызываемый в конце файла descr_strat.txt и исполняемый только один раз, в момент создания новой компании. Пока этот скрипт работает, нет возможности сохранить или загрузить игру. Из-за этого желательно делать такой скрипт коротким и использовать его только для инициализации и что-бы завести фоновой скрипт. Самый известный пример использования такого скрипта - в компании Sons of Mars (Сыны Марса) в ванилле.
background script (фоновой скрипт) - Этот вид скриптов заводится посредством советника и, как явствует из имени, работает на заднем фоне. Основные преимущества таких скриптов: 1) Возможность сохранять/загружать игру пока они работают, и 2) Возможность перезапустить такой скрипт после перезагрузки сохранённой игры. Этот тип скриптов так же известен как showme script из-за того что старый метод запуска таких скриптов требовал нажатия кнопки советника 'Show me how...' ('Показать как...'). Скрипты этого типа часто используются для эмуляции таких вещей как 4 (или больше) хода в год и открывают широкие возможности для динамической постановки задач игроку по ходу компании, автоматического создания армий и зданий при выполнение определённых условий, и т.д.
on-demand script (скрипт исполняемый по требованию) - Этот вид скриптов используется для выполнения небольших фрагментов кода. Скрипт заканчивает работу как только код выполнен. Например, некоторые моды используют скрипт что-бы заставить ИИ принять дипломатическое предложение сделанное игроком. Этот вид скриптов тоже посылается на изполнение посредством советника, и заводится нажатием какой-нибудь редко-используемой кнопки в интерфейсе. Напримет, кнопки '?' в свитке помощи.
Как создать background script
Данные здесь инструкции покажут Вам все действия необходимые для создания фонового скрипта.
Для того что бы скрипт заработал, необходимо как минимум выполнить инстрикции в частях I и III. Часть II делать не обязательно, но желательно, что бы игроку не пришлось жать на лишние кнопки. Часть IV содержит различную дополнительную информацию которая должна помочь Вам узнать больше о том как писать скрипты.
Часть I: Создаём новое задание (AdviceThread) для советника
1. Вставьте этот код в начало файла export_descr_advice.txt :
CODE |
;------------------------------------------ AdviceThread My_Script_Thread GameArea Campaign Item my_script_Item_1 Uninhibitable Verbosity 0 Threshold 1 MaxRepeats 0 RepeatInterval 1 Attitude Normal Presentation Default Title my_script_Title_1 On_display scripts\show_me\my_script.txt Text my_script_Text_1 |
Строка On_display связывает это задание с указанным на ней скриптом. Сам скрипт включится автоматически как только откроется окно с текстом сообщения советника. Если настроить советника выдавать только голосовые сообщения, скрипт включится как только портрет советника появится на экране.
2. В конце файла export_descr_advice.txt добавьте вот это:
CODE |
;------------------------------------------ Trigger my_script_trigger_1 WhenToTest ButtonPressed Condition I_ThreadCount My_Script_Thread = 0 AdviceThread My_Script_Thread 1 ;------------------------------------------ Trigger my_script_trigger_2 WhenToTest CharacterSelected Condition I_ThreadCount My_Script_Thread = 0 AdviceThread My_Script_Thread 1 ;------------------------------------------ Trigger my_script_trigger_3 WhenToTest SettlementSelected AdviceThread My_Script_Thread 1 |
Этот код используется для перезапуска скрипта. После загрузки сохранённой игры, как только одно из указанных условий будет выполненно, выскочит портрет советника. Нажмите на него один раз что бы включить скрипт.
3. Добавьте этот код в конце файла text\export_advice.txt :
CODE |
{my_script_Title_1}Фоновой скрипт {my_script_Text_1}Скрипт включён. |
Это текст который выдаст советник когда скрипт будет запущен.
Часть II: Автоматический запуск фонового скрипта при создании новой компании
1. Добавьте следующий код в самом конце файла descr_strat.txt:
CODE |
script campaign_script.txt |
Этот код будет автоматически включать фоновой скрипт командами из скрипта компании.
2. В той-же папке где находится файл descr_strat.txt, создайте новый файл с именем campaign_script.txt (наш скипт компании) и впишите в него эти команды:
CODE |
script wait 1 console_command clear_messages wait 1 advance_advice_thread My_Script_Thread wait 1 select_ui_element advisor_portrait_button simulate_mouse_click lclick_up end_script |
ВАЖНО: Этот файл следует сохранять в формате ANSI!
Часть III: Создаём фоновой скрипт - Что должно быть в этом скрипте
1. В папке scripts\show_me, создайте файл с именем my_script.txt <-- Это файл на который указывает строка On_display в AdviceThread в Части I. Традиционно, мододелы хранят скрипты в этой папке, но вообще-то можно держать их где угодно под папкой Data, при условии что строка On_display показывает правильное местоположение скрипта.
2. Что должно быть в самом скрипте:
CODE |
script ; Всё что на строке после точти с запятой считается комментариями и игнорируется игрой ; Убрать советника с экрана select_ui_element advisor_dismiss_button simulate_mouse_click lclick_up ; Ждём пока советник не исчезнет while I_AdvisorVisible end_while suspend_unscripted_advice true ; Открывать окно с текстом сообщения советника автоматически когда используется команда advance_advice_thread. ; Рекомендую пользоваться этим методом вместо комбинации команд select_ui_element + simulate_mouse_click. ; Не пытайтесь использовать оба метода одновременно, или советник будет появляться и сразу изчезать с экрана. declare_show_me ; Весьма полезная команда на стадии отладки - уберите точку с запятой в начале следующей строки что бы включить ;console_command toggle_perfect_spy ; Ловим перезагрузку игры и отключаем старый скрипт. monitor_event GameReloaded TrueCondition terminate_script end_monitor ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;; ;;; Добавляем здесь Ваш код ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Например, такой код будет добавлять вам по 1 золотому в начале каждого хода monitor_event FactionTurnStart FactionIsLocal console_command add_money 1 end_monitor ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Конец Вашего кода ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Бесконечная петля - Не даём скрипту закончиться, иначе все мониторы объявленные в этом скрипте и следящие за событиями в игре отключатся. while I_TurnNumber < 99999 suspend_unscripted_advice true end_while end_script |
ВАЖНО: Этот файл следует сохранять в формате ANSI!
Часть IV: Учимся писать скрипты - Где найти инфомацию
1. Другие ресурсы
Рекомендованные материалы (на английском):
- Введение в Скриптинг, Часть 1 - http://forums.totalwar.org/vb/showthread.php?t=46738
- Введение в Скриптинг, Часть 2 - http://forums.totalwar.org/vb/showthread.php?t=57014
- Статьи в форуме http://www.twcenter.net/forums/forumdisplay.php?f=353
Референсные материалы:
- Список комманд для скриптов от ведущего разработчика игры (Jerome Grasdyke из Creative Assembly) за Сентябрь 2005-го - http://www.totalwar.org/Downloads/Rtw_Uplo...oad/BI_docs.zip
- Список элементов интерфейса доступных для скриптов - http://forums.totalwar.org/vb/showpost.php...325&postcount=5
Где можно спросить совет по скриптам (на англ.):
- Форум на Total War Center - http://www.twcenter.net/forums/forumdisplay.php?f=208
- Форум на Total War .org - http://forums.totalwar.org/vb/forumdisplay.php?f=73
2. Советы и коментарии из моего собственно опыта:
- Следующие команды не работают внутри блоков monitor_event: wait, campaign_wait, battle_wait, while, и под-блоки monitor_event/monitor_conditions. При попытке так их использовать, скрипт виснет.
- Большинство комманд и условий используют объекты экпортируемые событиями (event-ами) в качестве подразумевающихся параметров. Тип объекта ожидаемого командой/условием должен совпадать с типом объекта экспортируемого событием, иначе они не будут работать.
- Исключением из выше-приведённого правила являются команды имя которых начинается с "I_" и console_command-ы, так как параметры для этих команд - имена конкретных объектов, либо они не нуждаются в параметрах.
- Настоятельно рекомендую добавить параметр -show_err к строке "Target Line" в закладке.
- Ошибке в командах console_command никогда не показываются и не могут привести к вылету из игры. Они просто тихонечко игнорируются.
- Другие ошибки, в зависимости от их серьёзности, могут привести к вылету из игры или к показу окошка с ошибкой при выходе из игры.
- Некоторые команды могут приветси к зависанию игры, так что она совершенно перестаёт реагировать, даже на Alt-F4. У меня такое произошло когда Я попытался добавить такой код:
CODE |
monitor_event CharacterSelected CharacterIsLocal call_object_shortcut hud_select_prev_item_cycle end_monitor |
Проверять его на себе не стоит!
- При нажатии мышкой на армию в поселении, событие CharacterSelected НЕ генерируется
- Скриптом можно передвинуть только те армии которые находятся вне поселений
- Что эффективно писать скрипты, следует иметь базовое понимание того как работают следующии вещи: descr_strat.txt, советник, трейты и свита, здания, и юниты.
- В отличии от МТВ2, счётчики (counter-ы) НЕ сохраняют своё значение когда сохраняешь игру. По этому для хранения важной информации используемой скриптом приходится пользоваться другими методами. Например, трейтами (особенно помеченные как hidden), уникальными персонажами свиты, и зданиями в ключевых поселениях.
- Счётчик AdviceThread увеличивает своё значение при нажатии на портрет советника (что-бы открыть окошко с текстом).
- Событие AbandonShowMe генерируется при нажатии кнопки 'X' советникa.
Эта статья впервые опубликована на Сайте Империал 30.09.2009.