Индекс материала |
---|
Создание скрипта. От и До. |
Страница 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 "лейбел — имя" свита — добавление свиты генералу
< Предыдущая | Следующая > |
---|