Сообщество Империал: Учебник по скриптам для Rome Total War - Моддинг Rome: Total War - Rome: Total War - Библиотека - Сообщество Империал

  • Поиск
  • Законы
  • Сообщество
  • Репутация
  • Экономика
  • Больше

Информация об авторе

  • Автор: HouseOfHam

Информация по статье

  • Добавлено: 07 Июн 2013, 01:08
  • Просмотры: 4608

Дополнительно

Репутация: 0
Учебник по скриптам для Rome Total War

Описание: Учебник по скриптам для Rome Total War

Учебник по скриптам для Rome Total War



Перевод камрада HouseOfHam

Ниже-следующее - авторский, т.е. мой собственный, перевод моей-же статьи с анлийского. Оригинал тут: 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


Проверять его на себе не стоит! smile.gif

- При нажатии мышкой на армию в поселении, событие CharacterSelected НЕ генерируется

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

- Что эффективно писать скрипты, следует иметь базовое понимание того как работают следующии вещи: descr_strat.txt, советник, трейты и свита, здания, и юниты.

- В отличии от МТВ2, счётчики (counter-ы) НЕ сохраняют своё значение когда сохраняешь игру. По этому для хранения важной информации используемой скриптом приходится пользоваться другими методами. Например, трейтами (особенно помеченные как hidden), уникальными персонажами свиты, и зданиями в ключевых поселениях.

- Счётчик AdviceThread увеличивает своё значение при нажатии на портрет советника (что-бы открыть окошко с текстом).

- Событие AbandonShowMe генерируется при нажатии кнопки 'X' советникa.

Эта статья впервые опубликована на Сайте Империал 30.09.2009.

Copyright © «Империал». Копирование информации с этой страницы возможно только при указании прямых ссылок на эту страницу.




      Стиль:
        11 Дек 2016, 11:05
    © 2016 «Империал». Условия предоставления. Ответственность сторон. Рекрутинг на Империале. Лицензия зарегистрирована на: «Империал». Счётчики