Constant int Wonderland_Captured
Последнее что нужно сделать - это создать раздел с триггером, о котором говорил в начале. Этот новый раздел должен быть написан после раздела Run After Cinematics. По сути, в самом конце скрипта.
Для начала пример раздела.
////////////////////////////////////////////////////////////
// Wonderland Captured
////////////////////////////////////////////////////////////
RULE ruleWonderland_Captured ONESHOT
if (GetOwningPlayerForTerritory("Wonderland") == 1)
then actionWonderland_Captured END_RULE
ACTION actionWonderland_Captured
SCRIPT WORLD
DoDelay(2);
STEP
WinScenario();
END_SCRIPT
END_ACTION
Пояснение:
RULE – определяет название триггера, важно чтобы оно совпадало с названием цели. К примеру название цели Wonderland_Captured (OBJECTIVE Wonderland_Captured), название триггера ruleWonderland_Captured (RULE ruleWonderland_Captured). Слово "Oneshot" означает, что триггер действует только один раз, если условие сбудется. Если вы хотите, чтобы это триггер действовал каждый раз, когда выполняется условие, то просто уберите "Oneshot".
if определяет условие, все известные условия можно найти в скриптовой библии (ее я переведу в будущем).
Пример условия:
запись if (GetOwningPlayerForTerritory("Wonderland") == 1) означает условие: игрок 1 (по умолчанию 1 игрок всегда человек) захватывает территорию Wonderland.
Важно!!! Нужно прописать в редакторе карт название территории Wonderland. Название нужно прописать в поле Script Name.
Также не забудьте поставить в редакторе карт условие победы согласно сценарию!
then определяет действие (action) которое должно совершится, если выполнено условие, здесь прописывается название действия
END_RULE конец триггера
ACTION actionWonderland_Capture – Название действия, оно должно совпадать с названием написанным в блоке триггера, в строке then actionWonderland_Captured
SCRIPT WORLD нчало отдельного скрипта
DoDelay(2); - указываются различные параметры действия, в частности DoDelay(2) означает задержку действия на 2 секунды после выполнения условия. Другие значения смотреть в скриптовой библии.
|
STEP
WinScenario(); собственно вид действия. WinScenario() – означает выигрыш сценария. Другие значения смотреть в скриптовой библии.
END_SCRIPT конец отдельного скрипта
END_ACTION конец действия
Дополнительно поясню работу триггера:
if можно перевести как предлог если, а then как предлог то. Тогда становится понятна логическая операция
Если …, то … (если игрок 1 захватил территорию Wonderland, то он выиграл сценарий)
if …, then … (if (GetOwningPlayerForTerritory("Wonderland") == 1),
then actionWonderland_Captured)
actionWonderland_Captured –отправляет к действию WinScenario – выигрыш сценария.
Вот в принципе и все основы создания целей. Самые различные цели можно создать использую скриптовую библию.
ПРИМЕРЫ:
Для набора опыта привожу полностью пример 2 целей
Изначально вы уже должны создать файл ies согласно 1-му туториалу, в нем должны быть все основные разделы.
1. главная цель – захватить территорию Wonderland. Если захватите, то выиграете сценарий. Важно! в редакторе карт дайте скриптовое название одной из ваших территорий Wonderland.
В разделе RULES FOR WORLD пишите следующие строки:
OBJECTIVE Wonderland_Captured
name = "Zahvat territorii"
desc = "Zahvat territorii"
type = kScenarioObjectiveType_Primary
targetlocation1x= 40
targetlocation1y= 40
starthidden = 0
END_OBJECTIVE
В разделе DEFINITIONS пишите следующие строки:
constant int Wonderland_Captured
Создайте в конце скрипта следующий раздел:
RULE ruleWonderland_Captured ONESHOT
if (GetOwningPlayerForTerritory("Wonderland") == 1)
then actionWonderland_Captured END_RULE
ACTION actionWonderland_Captured
|
SCRIPT WORLD
DoDelay(2);
STEP
WinScenario();
END_SCRIPT
END_ACTION
2. Второстепенная цель. Постройте Парфенон и получите 4000 золотом.
В разделе RULES FOR WORLD пишите следующие строки:
OBJECTIVE rulePathenon_Captured
name = "4000 gold "
desc = "4000 gold"
type = kScenarioObjectiveType_Primary
starthidden = 0
END_OBJECTIVE
В разделе DEFINITIONS пишите следующие строки:
constant int Pathenon_Captured
Создайте в конце скрипта следующий раздел:
RULE rulePathenon_Captured ONESHOT
if (AddUnitsByTypeToGroup("groupPathenon", "WonderWestern_01", HUMAN_PLAYER, kPlayerMode_Self, NULL)
&& (NumUnitsInGroup("groupPathenon") >= 1))
then actionPathenon_Captured
END_RULE
ACTION actionPathenon_Captured
SCRIPT WORLD
AddPlayerResource(1, kResourceType_Gold, 4000);
END_SCRIPT
END_ACTION
Все второй тутор закончен.