функции

все события,условия и действия являются функциями
в гуи мы можем использовать только те функции которые сделали близы
в джасс мы имеем возможность создавать собственные функции что бывает очень удобно
например если в карте содержится повторяющийся кусок кода то не надо его копировать и вставлять в другое место(тем самым уменьшая производительность) а можно просто поместить его в функцию и вызывать в том месте где надо.
так же функции могут брать и возвращать параметры
например функция может взять 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
задаём вопросы
моя интуиция говорит что несмотря на то что я всё разобрал их будет много
9
nvc123:
задаём вопросы
моя интуиция говорит что несмотря на то что я всё разобрал их будет много
Не ну вроде всё ясно, только вопрос такой, придётся запоминать каждую переменную (название) и всё прочее наизусть учить?
21
dermax1000, переменные называешь сам, типы со временем запомнишь
28
dermax1000, типов немного
правдо вджасс позволяет наделать новых типов которые будут как и хэндл лишь указателем
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 в личку
17
Какую прогу использовать чтобы вджасс работал
17
а по английски
Установил я Jass New Gen Pack (exp. 2). но всеравно карта неработает. в логе пишет 08 critical error bad char
nvc123, неплохо было бы начать обучение с мануала по софту необходимого для изучения сджасс.
28
Sergant1000, Jass New Gen Pack (exp. 2)
и там нету вджасса
скажи на что именно ругается
у тебя выдаёт ошибку при сохранение карты которая прикреплена к сообщению?
21
Вроде всё понятно, но полностью согласен с Sergant1000, при сохранении на своей карте выдает ошибку, а когда я сохраняю твою и карту и запускаю её в варике, то она не открывается. Нужно изменить, наверное, какие-нибудь настройки jnpg, у меня установлены стандартные настройки.
screenshot
Загруженные файлы
28
Стратег, как минимум у 1 человека кроме меня всё работает
я не понял на какую строку ругается
21
Я тоже не понял на какую строку. Похоже вообще на всё:)
28
Стратег, у тебя в папке с джнгп в AdicHelper\lib\ должен быть фаил cj_types.j
замени его на этот
вдруг поможет
но там у тебя идёт код автоматически генерируемый ве и дефаин
значит скорее всего дефаин ругается
Загруженные файлы
21
Ошибки не выдало, ладно, проверю всё завтра, у меня уже поздно.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.