Послесловие
Читатель, ты уже очень многое узнал о jass. Конечно, в jass полно и других
важных наработок. Есть команды, позволяющие выводить текст в любом месте экрана.
Есть спец. команды, позволяющие производить общие действия для всех игроков на
одном только компьютере (например, играть такой-то звук). Есть наработки
Vexorian-а, который по сути сделал такую же систему, как SCV ДимонаТ, но раньше.
Есть методы, позволяющие упростить работу с группами юнитов. Есть методы
создания специальных объектов, которые определяют, что юзер щелкнул мышкой в
такую-то точку (на основании этого построен инвентарь ДимонаТ на 80 слотов). Но
всему этому обучать я уже не буду, т.к. во-первых, сам многого не знаю,
во-вторых, в случае необходимости ты уже сможешь разобраться самостоятельно.
Можешь проверить - статьи по jass, которые раньше казались сложными и
непонятными, теперь станут доступными, а материал изложенный в них - будет уже
знаком.
Владея приемами работы с jass, самое главное для триггерщика - умение
правильно ставить и находить решение задач, умение алгоритмизировать задачу,
умение мыслить творчески. Про это я уже писал отдельную статью. Дальше, все уже
зависит от твоих мозгов и твоего опыта.
Вот, к примеру, как-то раз попросил меня один картостроитель разобраться с
тем, как устроено заклинание passive mana shield известного буржуйского автора.
Идея в том, что повреждения должны наноситься мане, а когда мана кончится –
жизни юнита. Думаю, ты уже догадаешься, как это сделать. Единственный способ,
пригодный для этого методами war3 - отлавливать повреждения, полученные юнитом
при помощи триггера с событием unit takes damage. Т.е. для каждого юнита с
пассивкой, нужно создать такой триггер - это задача решаемая. При нанесении
повреждения юниту, возможны разные случаи:
- маны у юнита больше размера повреждения: в этом случаи мы восстанавливаем
юниту жизнь и отнимаем ману.
- маны у юнита меньше размера повреждения: в этом случае из полученного юнитом
повреждения мы должны восстановить число жизни, равное количеству маны, а потом
обнуляем ману.
Вроде все хорошо. Все, да не все. Оказывается, что событие unit takes
damage срабатывает на какую-то долю секунды раньше, чем юниту наносится
повреждение. Из-за этого, если жизнь юнита полная, мы пытаемся добавить жизнь и
отнять ману. Но жизнь полная и поэтому добавлять к ней что-то бесполезно.
Получается, что жизнь юнита все равно страдает. Мелочь, а не красиво.
Можно
конечно сделать паузу 0.1 секунды и уже после этой паузы восстанавливать жизнь
юнита. Тогда все работает нормально, но все таки видно, как жизнь юнита
колеблется. Опять же, некрасиво.
Картостроитель предложил глянуть работу спела у буржуйского автора - там
было столько jass кода, в котором было так лень разбираться, что я на это забил.
Стал думать. Есть ли возможность отловить момент, когда у юнита отнимутся жизни?
В принципе есть. Существует такое событие, которое срабатывает, когда жизнь
юнита станет меньше указанного значения. Этим можно воспользоваться! Просто если
жизни у юнита почти полные и нельзя использовать метод добавить жизнь сразу.
Вместо этого мы СОЗДАДИМ ТРИГГЕР с событием, которое сработает, когда жизнь
текущего юнита станет меньше текущего значения. Это произойдет буквально через
миг. И именно в этот момент мы добавим жизни юниту обратно. Проверил – все
сработало.
Удачных тебе наработок, Читающий ;).