Вы здесь:

Total War моды

Создание скрипта. От и До.

Индекс материала
Создание скрипта. От и До.
Страница 2
Страница 3
Страница 4
Страница 5
Страница 6
Все страницы

Часть первая. Разработка скрипта.

Каждый скрипт, монитор (часть скрипта, где прописываются условия, команды и т.д.), имеет начало и конец.

Начало и конец скрипта уже по условию прописаны в файле «campaign_script» (data/worald/maps/campaing/кампания), вначале стоит script в конце файла end_script. Мониторы прописываются между этими строчками.

Начало монитора прописывается кодом monitor_код в конце монитора прописывается end_monitor. Закрывает монитор в некоторых скриптах terminate_monitor:

terminate_monitor — это команда, при наличии которой монитор выполняется один раз и далее считается выполненным. при отсутствии этой команды монитор будет выполняться бесконечное число раз.

«end_monitor» ставится всегда.

Начало бывает разное, к примеру, можно привести самые распространенные: monitor_event, monitor_conditions...

Сам монитор состоит из четырех частей: главной, определяющей строчки, блока условий, блока действий и конца скрипта.

Первой строкой задается то, при каких событиях или условиях игра будет рассматривать возможность выполнения условий и действий монитора

Разберем на примере первой строчки:

monitor_event FactionTurnStart FactionType hre”

monitor_event начало скрипта

FactionTurnStart вид скрипта, события. В данном примере скрипт сработает на начале нового хода

FactionType код, который указывает на фракцию

hre фракция (hre – СРИ «Священная Римская Империя»)

Блок условий представляет из себя ряд строчек, команд, которые задают скрипту условия, действует по такому принципу: если условие совершиться, то совершиться действие.

Строчка, а значит и условие начинается с «and»; «if» или «while».

And – стандартное условие.

If – Оператор условия если. По формату: «если условие a, то происходят действия b».

While — хотя, пока. «Пока условие a актуально, то происходит действие b»

Вся строчка условия выглядит так: and / if / while КомандаУсловия.

Разберем на примере небольшого блока условий, состоящего из 5-и условий:

and FactionIsLocal hre фракция СРИ должна быть под управлением игрока

and not FactionIsLocal papal_states — фракция Папы должна быть под управлением ИИ

and I_TurnNumber = 2 — номер хода должен быть второй

and I_NumberOfSettlements hre < 50 кол-во поселений у СРИ должно быть 50 или больше

and Treasury hre < 20000 золота в казне у СРИ должно быть 20000 или больше

Через пробел прописывается блок действий — ряд строчек, команд которые отвечают за выполнение действий в скрипте. К примеру, начисление фракции определенной суммы денег, если условие будет выполнено. (КомандаДействия фракция).

add_money papal_states, 50000 — начисление Папе золота в казну в размере 50000

console_command diplomatic_stance hre papal_states war — дипломатические отношения между Папой и СРИ переходят в состояние войны

Команды бывают разные, в скрипте приведены: обычная команда и консольная команда (консольная_команда КомандаДействия фракция). В качестве примера можно также привести спаун армии: spawn_army.

И конец скрипта. В данном случае только end_monitor:

monitor_event FactionTurnStart FactionType hre
and FactionIsLocal hre

and not FactionIsLocal papal_states

and I_TurnNumber = 2

and I_NumberOfSettlements hre < 50

and Treasury hre < 20000

add_money papal_states, 50000

console_command diplomatic_stance hre papal_states war

end_monitor”

Функционал:

Фракция СРИ при наличии 20000 золотых и имея в распоряжении 50 провинций автоматически начитает войну с Папой Римским, при этом Папе начисляется 50000 золотых, СРИ должен управлять игрок, а Папой ИИ.


Часть вторая. Примеры скриптов со спауном армии, if, while, эффектами движения и ивентами.

 

Для лучшего понимая, рассмотрим примеры некоторых скриптов:

(Рассматривать детально я не буду, только поясню непонятные команды)

Скрипт со спауном армии:

Функционал:

У Франции под управлением игрока должен появится стек армии в координатах х 353, у 125 на пятом ходу при условии наличия города Рим у фракции Венеция.. при этом Франции начисляется 10000 золотых и отношения между Венецией и Францией становятся нейтральными.

monitor_event FactionTurnStart FactionType france
and not FactionIsLocal venice
and FactionIsLocal france
and I_TurnNumber = 5
and I_SettlementOwner Rome = venice

spawn_army
faction france
character Edward, named character, age 24,
x 353, y 125, label frgeneral1 ;command 8, dread 9, loyalty 7, piety 1
traits LoyaltyStarter 1, ReligionStarter 1, GoodCommander 1

unit NE Bodyguard exp 1 armour 0 weapon_lvl 0
unit Spear Militia exp 1 armour 0 weapon_lvl 0
unit Highlanders exp 1 armour 0 weapon_lvl 0
unit Border Horse exp 1 armour 0 weapon_lvl 0
unit Highland Archers exp 0 armour 0 weapon_lvl 0

end

console_command add_money france, 10000
console_command diplomatic_stance venice france neutral

end_monitor”

label frgeneral1 — прозвище, оно обязательно, так как по карте могут бегать штук 5 Эдвардов, но нужен именно этот. Лейбел вы придумываете сами.

Сточку traits указать нужно обязательно.

В конце спауна обязательно должно стоять end.

Сам скрипт спауна строиться следующим образом:

Прописывается код, обозначающий начало спауна (spawn_army) и фракция, армия которой будет спаунится (faction фракция).

Строчкой ниже идет персонаж (генерал, капитан, адмирал), который возглавляет отряды (character Edward, named character), на этой же строчке прописываются возраст персонажа и координаты, куда будет спаунится армия. Тут же прописываются отличительные черты генерала: лейбел, умения.

Строчкой ниже стоит traits и, если это необходимо, ниже прописывается свита: ancillaries

(ancillaries свита)

Следующими строчками прописываются отряды армии. Каждый с новой строчки

И конец спауна (end).

Осложнения могут вызвать спаун армии на море, в корабли:

monitor_event FactionTurnStart FactionType france
and not FactionIsLocal venice
and FactionIsLocal france
and I_TurnNumber = 5
and I_SettlementOwner Rome = venice

spawn_army
faction france
character random_name, admiral, age 32,
x 353, y 125, label fradmiral1

traits GoodCommander 1
unit Elven small ship exp 0 armour 0 weapon_lvl 0
unit Elven small ship exp 0 armour 0 weapon_lvl 0
end
spawn_army
faction france
character Edward, named character, age 24,
x 353, y 125, label frgeneral1 ; command 8
traits LoyaltyStarter 1, ReligionStarter 1, GoodCommander 1
unit NE Bodyguard exp 1 armour 0 weapon_lvl 0
unit Spear Militia exp 1 armour 0 weapon_lvl 0
unit Highlanders exp 1 armour 0 weapon_lvl 0
unit Border Horse exp 1 armour 0 weapon_lvl 0
unit Highland Archers exp 0 armour 0 weapon_lvl 0

end

console_command add_money france, 10000
console_command diplomatic_stance venice france neutral

end_monitor”

Скрипт строиться по тем де принципам, но сначала спунится адмирал с флотом, потом в эти же координаты полководец с армией.


Скрипт с if:

Функционал:

Спаунится армия Венеции и на протяжении двух ходов движется к заданным координатам, если Венецией управляет игрок, Папа под управлением ИИ.

monitor_event FactionTurnEnd FactionIsLocal
and I_TurnNumber = 2
and I_IsFactionAIControlled papal_states
and not I_IsFactionAIControlled venice

spawn_army
faction venice
character Dragano, named character, age 45, x ---, y ---, label vengen1
traits NaturalMilitarySkill 1 , GoodDefender 1 , PoliticsSkill 3 , GoodAdministrator 2 , Austere 1 , ReligionStarter 1
unit SE Bodyguard exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Peasant Archers exp 9 armour 0 weapon_lvl 0
unit Peasant Archers exp 9 armour 0 weapon_lvl 0
end

spawn_army
faction venice
character Enrico, named character, age 32, x --, y --, label vengen2
traits LoyaltyStarter 1 , GoodCommander 1 , PoliticsSkill 2 , GoodAdministrator 3 , Energetic 2 , ReligionStarter 1
unit SE Bodyguard exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Peasant Archers exp 1 armour 0 weapon_lvl 0
unit Peasant Archers exp 1 armour 0 weapon_lvl 0
end

if I_CharacterExists vengen1
move vengen1, ---, ---
end_if
if I_CharacterExists vengen2
move vengen2, ---, ---
end_if
terminate_monitor
end_monitor

monitor_event FactionTurnEnd FactionIsLocal
and I_TurnNumber = 3
and I_IsFactionAIControlled papal_states
and not I_IsFactionAIControlled venice

if I_CharacterExists vengen1
move vengen1, ---, ---
end_if
if I_CharacterExists vengen2
move vengen2, ---, ---
end_if


terminate_monitor
end_monitor”

Спаун армии такой же, но, так как в скрипте задействованы два полководца, то нужно прописать:

if I_CharacterExists vengen1 если полководец vengen1 существует, то происходит действие:

move vengen1, ---, --- движение полководца vengen1 в заданным координатам. (Координаты я не указывал)

if I_CharacterExists vengen2 если полководец vengen2 существует, то происходит действие:

move vengen2, ---, --- движение полководца vengen2 в заданным координатам. (Координаты я не указывал)

Скрипт с while:

while I_CompareCounter Tax > 0

add_money hre 200

inc_counter Tax -1

end_while

Смысл: пока значение переменной tax больше 0, то каждый ход перечисляется сри 200 денег и значение переменной уменьшается на 1.


Скрипт с ивентом:

Скрипт с ивентом представляет с собой событие, то есть при выполнении скрипта в игре выскакивает сообщение.

Само сообщение в скрипте не прописывается. Оно прописывается в файле «historic_evenst» - по адресу data/text .

В этом файле прописываем строчки:

«{TUTOR_TITLE}» -- (заголовок, название ивента (сообщения))
«{
TUTOR_BODY}» -- (описание, сообщение)

Важно, буквы должны быть заглавные, с жестким пробелом, title и body должны быть обязательно, они показывают, где заголовок, где описание, причем tutor — название ивента, спонтанное, но непосредственно в скрипте оно должно точно соответствовать данному.

Далее, уже в campaign_script, прописываем:

monitor_event FactionTurnEnd FactionIsLocal
and I_TurnNumber = 2
and I_IsFactionAIControlled papal_states
and not I_IsFactionAIControlled venice

historic_event tutor

spawn_army
faction venice
character Enrico, named character, age 32, x --, y --, label vengen2
traits LoyaltyStarter 1 , GoodCommander 1 , PoliticsSkill 2 , GoodAdministrator 3 , Energetic 2 , ReligionStarter 1
unit SE Bodyguard exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Peasant Archers exp 1 armour 0 weapon_lvl 0
unit Peasant Archers exp 1 armour 0 weapon_lvl 0
end

terminate_monitor
end_monitor”

Мы видим, что при спауне армии на втором ходу, при сохранении всех условий, появляется сообщение, к примеру:

«Венеция идет в атаку!
Господин, Венеция пошла в атаку, Ваши войска начинают наступление, крестьяне подняли восстание в Риме, теперь мы освободим наш народ.»

Определяет в скрипт этот ивент (сообщение) строчка: «historic_event tutor», где tutor — название ивента.

Существует в ивенте также и возможность выбора вариантов ответа. К примеру, вам приходит то же сообщение, но на этот раз внизу появляются «да» и «нет»:

monitor_event FactionTurnEnd FactionIsLocal
and I_TurnNumber = 2
and I_IsFactionAIControlled papal_states
and not I_IsFactionAIControlled venice

historic_event tutor true

terminate_monitor

end_monitor

monitor_conditions I_EventCounter tutor_accepted = 1

and I_TurnNumber = 2
and I_IsFactionAIControlled papal_states
and not I_IsFactionAIControlled venice

spawn_army
faction venice
character Enrico, named character, age 32, x --, y --, label vengen2
traits LoyaltyStarter 1 , GoodCommander 1 , PoliticsSkill 2 , GoodAdministrator 3 , Energetic 2 , ReligionStarter 1
unit SE Bodyguard exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 1 armour 0 weapon_lvl 0
unit Peasant Archers exp 1 armour 0 weapon_lvl 0
unit Peasant Archers exp 1 armour 0 weapon_lvl 0
end

terminate_monitor
end_monitor”

historic_event tutor true в первом мониторе

monitor_conditions I_EventCounter tutor_accepted = 1 во втором мониторе

Прописав эти строчки, при появлении сообщения у вас будет возможность выбора «да» или «нет».


Скрипт с эффектами при движении полководцев:

monitor_event FactionTurnEnd FactionIsLocal
and I_TurnNumber = 2
and I_IsFactionAIControlled papal_states
and not I_IsFactionAIControlled venice

spawn_army
faction venice
character Dragano, named character, age 45, x ---, y ---, label vengen1
traits NaturalMilitarySkill 1 , GoodDefender 1 , PoliticsSkill 3 , GoodAdministrator 2 , Austere 1 , ReligionStarter 1
unit SE Bodyguard exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Peasant Archers exp 9 armour 0 weapon_lvl 0
unit Peasant Archers exp 9 armour 0 weapon_lvl 0
end

spawn_army
faction venice
character Enrico, named character, age 32, x --, y --, label vengen2
traits LoyaltyStarter 1 , GoodCommander 1 , PoliticsSkill 2 , GoodAdministrator 3 , Energetic 2 , ReligionStarter 1
unit SE Bodyguard exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Italian Spear Militia exp 9 armour 0 weapon_lvl 0
unit Peasant Archers exp 9 armour 0 weapon_lvl 0
unit Peasant Archers exp 9 armour 0 weapon_lvl 0
end


if I_CharacterExists vengen1
move vengen1, ---, ---
reveal_tile ---, ---
character_flash_start vengen1
point_at_character vengen1
end_if

if I_CharacterExists vengen2
move vengen2, ---, ---
reveal_tile ---, ---
character_flash_start vengen2
point_at_character vengen2
end_if
snap_strat_camera ---, ---
if I_CharacterExists vengen1
character_flash_stop vengen1
end_if

if I_CharacterExists vengen2
character_flash_stop vengen2
end_if
hide_all_revealed_tiles


terminate_monitor
end_monitor

monitor_event FactionTurnEnd FactionIsLocal
and I_TurnNumber = 3
and I_IsFactionAIControlled papal_states
and not I_IsFactionAIControlled venice


if I_CharacterExists vengen1
move vengen1, ---, ---
character_flash_start vengen1
reveal_tile ---, ---
end_if

if I_CharacterExists vengen2
move vengen2, ---, ---
character_flash_start vengen2
point_at_character vengen2
reveal_tile ---, ---

end_if
snap_strat_camera ---, ---
if I_CharacterExists vengen1
character_flash_stop vengen1
end_if
hide_all_revealed_tiles


terminate_monitor
end_monitor

monitor_event FactionTurnEnd FactionIsLocal
and I_TurnNumber = 4
and I_IsFactionAIControlled papal_states
and not I_IsFactionAIControlled venice


if I_CharacterExists vengen1
move vengen1, ---, ---
character_flash_start vengen1
end_if

if I_CharacterExists vengen2
move vengen2, ---, ---
character_flash_start vengen2
end_if
campaign_wait 5
snap_strat_camera ---, ---
if I_CharacterExists vengen1
character_flash_stop vengen1
end_if

if I_CharacterExists vengen2
character_flash_stop vengen2
end_if

terminate_monitor
end_monitor”

character_flash_start vengen1 — подсветка, спецэффект.
point_at_character vengen2 — выделение персонажа красным кругом как в прологе для рима например.
hide_all_revealed_tiles скрыть все засвеченные точки в тумане войны.

reveal_tile ---, --- развеивание тумана войны.

snap_strat_camera ---, --- эффект с камерой, сверху и снизу выходят черные поля.

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

Стоит заметить, что и тут присутствует if так как в скрипте принимают участие два полководца.


Часть третья. Команды.

Для воплощения любого скрипта нужны команды, как условия, так и действия. Ниже выложены самые распространенные и простые команды, для начала...

Команды условия:

and IsFactionAIControlled фракция — фракцией управляет ИИ

and not FactionIsLocal фракция — фракцией управляет ИИ
and Treasury больше/меньше/равно кол-во золота — у фракции н-ое кол-во золота

and I_TurnNumber больш/меньше/равно номер хода — номер хода должен быть х
and I_NumberOfSettlements больше/меньше/равно кол-во поселений — кол-во поселений, которое должно быть у фракции.

and FactionIsLocal фракция — фракция под управлением игрока

and I_SettlementOwner город = фракця — фракция принадлежит город

and not I_IsFactionAIControlled фракция — фракция НЕ под управлением ИИ

if I_CharacterExists лейбел/имя генерала — если генерал существует...

Команды действия:

add_money фракция, сцмма — начисление денег фракции
console_command diplomatic_stance фракция фракция отношение — дипломатические отношения (neutral, war, allied)

reposition_character лейбел — имя, x, y - движение персонажа к заданным координатам

move лейбел — имя, x, y – движение к заданным координатам

engage_armies лейбел1, лейбел2 — имя1, имя2 — сражение между полководцами

console_command give_trait "лейбел — имя" черта — добавление черты генералу

console_command give_ancillaries "лейбел — имя" свита — добавление свиты генералу