функции

все события,условия и действия являются функциями
в гуи мы можем использовать только те функции которые сделали близы
в джасс мы имеем возможность создавать собственные функции что бывает очень удобно
например если в карте содержится повторяющийся кусок кода то не надо его копировать и вставлять в другое место(тем самым уменьшая производительность) а можно просто поместить его в функцию и вызывать в том месте где надо.
так же функции могут брать и возвращать параметры
например функция может взять 2 числа,сложить их и вернуть суму

создание триггера на джасс

возьмём спелл back step который сделал Karp1989 и попробуем сделать его на джасс
самым первым делом напишем в нестандартный код :
include "cj_types.j"
потом создадим триггер new back step,выделим его,нажмём правка-конвертировать в текст
вместо привычных нам событие,условие,действие появится джасс код
выделите этот код и удалите его,теперь мы получили пустой триггер в котором можем писать свой код
сначала напишите:
library backstep initializer init{



}
library значит библиотека,в ней могут находится переменные и функции
backstep название нашей библиотеки
initializer init определяет какая функция будет вызываться во время загрузки карты и производить инициализацию триггера(в данном случае это функция init)
{ открывающая фигурная скобка означает начало библиотеки/функции/структуры/много другого
} означает конец библиотеки/функции/структуры/много другого
на строчках между library backstep initializer init{ и } мы будем писать наши события,условия и действия
в джасс триггер начинается не с события а с условия или действия,мы начнём с условия
условие это функция которая нечего не берёт и возвращает bool
вот как она выглядит в данном случае:
    private bool cond(){ // private означает что функция используется только в пределе этой библиотеки,bool это тип который функция возвращает,cond название функции,() в этих скобках указываются переменные которая берёт функция,в данном случае она нечего не берёт,{ открываем функцию
        return GetSpellAbilityId()=='A000' // GetSpellAbilityId() это функция которая нечего не берёт и возвращает равкод применённого спела,== это знак равенства,'A000' это равкод нашего спела,return это вернуть значение,в результате эта строка проверяет равен ли равкод нашего спела равкоду спела который применили и если равен то возвращает true(запускает действие) а если не равен возвращает false(не запускает действие)
    } // закрываем функцию
обратите внимание на знак
 //
он означает комментарии и то что написано после него не учитывается варкрафтом(там может быть хоть описание,хоть неработающий код,хоть анекдот)
далее надо сделать действие
действие нечего не берёт и не чего не возвращает
    private void act(){ // void означает ничего 
     unit a=GetTriggerUnit() // unit тип локальной переменной,a название локальной переменной,GetTriggerUnit() функция которая возвращает триггерного юнита(в данном случае того кто применил способность)
      DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",a,"overhead"))//DestroyEffect функция которая удаляет ефект чтобы он не занимал место в памяти(после удаления ефект всеравно проигрывает свою анимацию 1 раз),AddSpecialEffectTarget создаёт ефект и прикрепляет его к цели,в данном случае целью является юнит a
      TerrainDeformCrater(GetUnitX(a),GetUnitY(a),512,64,1500,false)//TerrainDeformCrater создаёт кратер,GetUnitX берёт юнита,возвращает координату x этого юнита,GetUnitY тоже самое что и GetUnitX но возвращает координату y
      SetUnitX(a,GetSpellTargetX())//SetUnitX ,берёт юнита и координату x,и перемещает юнита на эту координату,GetSpellTargetX() возвращает x точки в которую был применён спел
      SetUnitY(a,GetSpellTargetY())// тоже самое что и предыдущая строчка но с координатой у
      DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Monsoon\\MonsoonBoltTarget.mdl",a,"overhead"))
      a=null// обнуляем переменную чтобы в случае смерти юнита небыло утечек
    }
и наконец инициализация в которой мы создаём триггер и прикрепляем к нему событие,условие и действие
    private void init(){
     trigger trg=CreateTrigger()//trigger тип переменной,CreateTrigger() функция которая нечего не берёт и возвращает триггер
      TriggerRegisterAnyUnitEventBJ(trg,EVENT_PLAYER_UNIT_SPELL_EFFECT)// добавляем к триггеру событие связаное со всеми юнитами на карте,EVENT_PLAYER_UNIT_SPELL_EFFECT означает что событие сработает когда юнит применит способность
      TriggerAddCondition(trg,function cond)// добавляем условие к триггеру
      TriggerAddAction(trg,function act)// добавляем действие к триггеру
    }
прикрепляю карту где будет этот триггер и триггер на гуи(1 из них надо выключать чтобы способность не сработала дважды,по умолчанию выключен триггер на гуи)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
28
Buulichkaa, такое ощущение что если я дам домашку её некто не сделает
21
nvc123, такое ощущение что нет смысла давать домашку, поскольку учеников желающих учиться так много, что хеля не успевает сервера новые покупать, так как старые падают от переизбытка.
28
Buulichkaa, ну хотяб этих научим
особенно георгия(зомби раш) и тимура(эльфы),потому что если у них что то не работает то они бегут ко мне
9
нвс, можешь мне рассказать как сделать тригер на джазе который будет создавать локальные переменные типа точка и типа тип боевой единицы при смерти юнита и через 2.5 минуты восстанавливать этих юнитов на точке смерти
28
dermax1000, точка это плохо,очень плохо,очень очень плохо,не используй точки,юзай координаты
а вобще если по делу то там надо бд и часики
это будет 4-5 урок
9
nvc123:
dermax1000, точка это плохо,очень плохо,очень очень плохо,не используй точки,юзай координаты
а вобще если по делу то там надо бд и часики
это будет 4-5 урок
Окей, в принципе очень хочу научиться именно этот тригер, так как на гуи данный тригер не айс
17
как я вижу на вджассе мы сократили операторы вызова и функции. сразу возникла проблема я работаю на ньюгене и при проверке карты с этим кодом у меня карта не работает. Что надо для карты?
И еще как на нем выглядит иф\зен\елсе?
28
тут нету вджасса
тут сиджасс
if чтото-чтото{
}
if чтото-чтото{
else
}
это не гуи else не обязательно
20
что такое, не могу вставить полностью код, половину обрезает
что то не выходит у меня, вот что получилось при попытке переписать код на джасс
library skillDZ initializer init
{
private bool cond(){
return GetSpellAbilityId()=='A000'
}
private void act(){
AddSpecialEffectTarget("Abilities\\Spells\\Other\\TalkToMe\\TalkToMe.mdl&?quot;,GetTriggerU
28
используй форматирование код
вместо &?quot; должно быть "
скинь txt в личку
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.