Глава 5. Различные секреты и примеры их исполнения
Как уже говорилось ранее, возможности триггеров практически безграничны. Большинство задач, которые казалось бы невозможны, можно с их помощью реализовать. На основе Warcrat’а были созданы множество других жанров. Начиная с гонок и заканчивая логическими играми. Некоторые секреты я и попытаюсь реализовать в этой главе.
Сборные артефакты
Когда я только начинал программировать для этой игры, мне казалось что сборные артефакты это стандартная функция варкрафта. Это было реализовано практически во всех картах, в которые я играл. На самом же деле все не так просто. Или все же просто? Вот пример кода собирающего два и более артефактов в один:
Code
События:
Боевая единица - A unit Получает предмет
Условия:
Действия:
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Если - Условия:
((Triggering unit) has an item of type <Здесь название 1 артефакта>) равно Да
((Triggering unit) has an item of type <Здесь название 2 артефакта>) равно Да
То - Действие:
Предмет - Remove (Item carried by (Triggering unit) of type <Здесь название 1 артефакта>)
Предмет - Remove (Item carried by (Triggering unit) of type <Здесь название 2 артефакта>)
Герой - Create <Здесь название 3 артефакта> and give it to (Triggering unit)
Иначе - Действие:
Do nothing
Теперь буду объяснять что здесь написано. Во-первых необходимо отследить получение юнитом предмета, для этого используется событие “Generic Unit Event ”с выбранным “Получает предмет ”. Далее мы проверяем нахождение у юнита определённых артефактов и если они есть, то забираем их и даём другой. Все просто, но эта система далеко не универсальна, а точнее с помощью неё нельзя отследить нахождение у юнита два одинаковых артефакта. Самый распространенный способ это сканирование всех слотов на артефакты. Для этого мы создадим переменную типа “Целочисленная (Integer)”, назовём её “ ItemCount ” и рассмотрим этот код:
Code
События:
Боевая единица - A unit Получает предмет
Условия:
Действия:
Set ItemCount = 0
For each (Integer A) from 1 to 6, do (Actions)
Цикл - Действия:
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Если - Условия:
(Item-type of (Item carried by (Triggering unit) in slot (Integer A))) равно <Здесь название 1 артефакта>
То - Действие:
Set ItemCount = (ItemCount + 1)
Иначе - Действие:
Do nothing
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
Если - Условия:
ItemCount больше или равно 2
То - Действие:
Предмет - Remove (Item carried by (Triggering unit) of type <Здесь название 1 артефакта>)
Предмет - Remove (Item carried by (Triggering unit) of type <Здесь название 1 артефакта>)
Герой - Create <Здесь название 2 артефакта> and give it to (Triggering unit)
Иначе - Действие:
Do nothing
В начале, как и в прошлом действии, мы отследили получение юнитом предмета. Потом очистили переменную “ItemCount” от значения, вписанного в неё ранее. Следующем действием было сканирование слотов героя на нахождение определённого артефакта и если он находить у героя, то увеличиваем значение переменной “ ItemCount” на единицу. Далее проверяем значение переменной и если оно окажется больше или равно 2, то забираем 2 раза артефакт и даём другой. Вот и все, теперь и Вы можете создавать реалистичные системы артефактов используя данной код. Вырезка из моей статьи