XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
qevin

offline
Опыт: 50
Активность:
Поправьте меня пожалуйста! Не работает триггер.
Добрый день! Учусь писать триггера на Jass. Прочитав кучу статей и просмотрев кучу материалов решил сделать свой первый триггер способности на Jass. Смысл способности очень простой, создаётся dummy юнит, который двигается в точки (X,Y) target. Потом должен быть взрыв и все вражеские юниты должны получить урон, но dummy юнит приходит в X,Y и просто стоит и ни чего не происходит. Поправьте меня пожалуйста.
P.S.
Вот сам триггер
function Trig_Ability_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A001'
endfunction

function Trig_Ability_Filter takes nothing returns boolean
    return IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(GetSpellAbilityUnit())) == true and GetUnitStateSwap(UNIT_STATE_LIFE, GetFilterUnit()) > 0.405
endfunction

function Trig_Ability_Damage takes nothing returns nothing
    local integer xDamage = GetUnitAbilityLevel(GetSpellAbilityUnit(), 'A001')
    call UnitDamageTargetBJ( GetSpellAbilityUnit(), GetEnumUnit(), ( 175.00 * xDamage ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DEMOLITION )
endfunction

function Trig_Ability_Move takes nothing returns nothing
    local timer tm = GetExpiredTimer()
    local integer I = GetHandleId(tm)
    local unit s =  LoadUnitHandle(udg_CasheTable, I, 1)
    local unit Dm = LoadUnitHandle(udg_CasheTable, I, 6)
    local real xDm = LoadReal(udg_CasheTable, I, 2)
    local real yDm = LoadReal(udg_CasheTable, I, 3)
    local real xT = LoadReal(udg_CasheTable, I, 4)
    local real yT = LoadReal(udg_CasheTable, I, 5)
    local group g = CreateGroup()
    local boolexpr b = Condition(function Trig_Ability_Filter)
        if DistanceBetweenPoints(Location(xDm, yDm), Location(xT, yT)) >= 150.00 then
            call IssuePointOrderLocBJ( Dm, "move", Location(xT, yT) )
            call SaveReal(udg_CasheTable,I,2,xDm)
            call SaveReal(udg_CasheTable,I,3,yDm)
            call SaveReal(udg_CasheTable,I,4,xT)
            call SaveReal(udg_CasheTable,I,5,yT)
            call SaveUnitHandle(udg_CasheTable,I,6,Dm)
        else
            call GroupEnumUnitsInRange(g, xT, yT, 500, b)
            call DestroyEffect(AddSpecialEffect("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralB​uildingExplosion.mdl", xT, yT))
            call ForGroup(g, function Trig_Ability_Damage)
            call DestroyTimer(tm)
            call FlushChildHashtable(udg_CasheTable,I)
        endif
    set s = null
    set Dm = null
    set tm = null
    set g = null
endfunction

function Trig_Ability_Actions takes nothing returns nothing
    local unit s = GetSpellAbilityUnit()
    local unit t = GetSpellTargetUnit()
    local timer tm = CreateTimer()
    local integer I = GetHandleId(tm)
    call SaveUnitHandle(udg_CasheTable,I,1,s)
    call SaveReal(udg_CasheTable,I,2,GetLocationX(GetUnitLoc(s)))
    call SaveReal(udg_CasheTable,I,3,GetLocationY(GetUnitLoc(s)))
    call SaveReal(udg_CasheTable,I,4,GetLocationX(GetUnitLoc(t)))
    call SaveReal(udg_CasheTable,I,5,GetLocationY(GetUnitLoc(t)))
    call SaveUnitHandle(udg_CasheTable,I,6,CreateUnit(GetOwningPlayer(s), 'e001',GetLocationX(GetUnitLoc(s)),GetLocationY(GetUnitLoc(s)),GetUnitFacing(s)))
    call TimerStart(tm, 0.04, true, function Trig_Ability_Move)
    set s = null
    set t = null
    set tm = null
endfunction

//===========================================================================
function InitTrig_Ability takes nothing returns nothing
    set gg_trg_Ability = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Ability, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Ability, Condition( function Trig_Ability_Conditions ) )
    call TriggerAddAction( gg_trg_Ability, function Trig_Ability_Actions )
    call Preload("Objects\\Spawnmodels\\Other\\NeutralBuildingExplosion\\NeutralBuildingExplosion.mdl&qu​ot;)
endfunction

Отредактировано ScorpioT1000, 27.08.2012 в 17:18.
Старый 27.08.2012, 17:12
Hate
конь вакуумный
offline
Опыт: 43,030
Активность:
не вижу дебага
Старый 27.08.2012, 17:18
ScorpioT1000
Работаем
offline
Опыт: отключен
local integer xDamage = GetUnitAbilityLevel(GetSpellAbilityUnit(), 'A001')
вот это выводи на экран BJDebugMsg(I2S(xDamage )) мне кажется, там всегда ноль
Старый 27.08.2012, 17:21
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
qevin, в функциях булекспра и для форгрупа юзайте глобалки
Старый 27.08.2012, 17:23
qevin

offline
Опыт: 50
Активность:
ScorpioT1000, текст совсем не выводится на экран и вроде бы как кэш не загружает данные. Dummy юнит двигается только в те X,Y в которых был target в момент применения способности
Nerevar, не могу создавать глобалки - постоянно вылетают ошибки (Отсутсвует конец строки). Я написал триггер на обычном World Editor может по этому?
Старый 27.08.2012, 17:36
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
qevin:
просто стоит и ни чего не происходит. Поправьте меня пожалуйста.
Юзай дебаг
Старый 27.08.2012, 17:39
ScorpioT1000
Работаем
offline
Опыт: отключен
а лучше ифдебаг
Старый 27.08.2012, 17:47
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
qevin:
Я написал триггер на обычном World Editor может по этому?
а для начала жнгп
Старый 27.08.2012, 17:50
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
а лучше ифдебаг
Не лучше, ибо по моему линку ифдебаг v3.
Старый 27.08.2012, 17:57
ScorpioT1000
Работаем
offline
Опыт: отключен
Faion, у тебя какраз нету самого вкусного - не выводится имя функции, из которой был фейл
Старый 27.08.2012, 18:00
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
Faion, у тебя какраз нету самого вкусного - не выводится имя функции, из которой был фейл
Ну эт потом дорисую. А так, мои дебаги записываются на хард, а твои нет
А так же при отключении либы дебаги не компилируются, дебаговская if then else, можно отключить дебаг отдельных либ :nate:
Faion добавил:
Все, уже выводит и имя функции :)
Старый 27.08.2012, 18:14
qevin

offline
Опыт: 50
Активность:
Установил программу JNGP, сделал проверку синтаксиса и в итоге у меня 3 ошибки в триггере
Миниатюры
Кликните на картинку для увеличения
Название:  Error 1.jpg
Просмотров: 16
Размер:  241.9 Кбайт  Кликните на картинку для увеличения
Название:  Error 3.jpg
Просмотров: 11
Размер:  228.3 Кбайт  Кликните на картинку для увеличения
Название:  Error 2.jpg
Просмотров: 11
Размер:  235.7 Кбайт  
Старый 27.08.2012, 20:55
Hate
конь вакуумный
offline
Опыт: 43,030
Активность:
нужно сохранять а не делать syntax check
Старый 27.08.2012, 21:09
qevin

offline
Опыт: 50
Активность:
Hate, просто сохранить?
Старый 27.08.2012, 21:27
Hate
конь вакуумный
offline
Опыт: 43,030
Активность:
2 раза при первом открытии карты в жнгп
Старый 27.08.2012, 21:28
qevin

offline
Опыт: 50
Активность:
Hate, сохранил 2 раза и Dummy юнит начал взрываться, но только если target не двигаетсяю и caster находится близко к target. А лететь Dummy по прежнему не хочет за target...
Старый 27.08.2012, 21:38
Hate
конь вакуумный
offline
Опыт: 43,030
Активность:
Старый 27.08.2012, 22:14
ScorpioT1000
Работаем
offline
Опыт: отключен
Старый 28.08.2012, 02:00
asesmo
Я I Jag Ich Jeg Ja Minä!
offline
Опыт: 8,073
Активность:
qevin:
Установил программу JNGP, сделал проверку синтаксиса и в итоге у меня 3 ошибки в триггере
1 скрин: проверь названия глобалок
2 скрин: лучше юзай:
((код jass
local trigger t = CreateTrigger()
--
set t = null
))
3 скрин: опять что-то с именами глобалок
Вообщем мелкие фейлы, у меня каждый день бывает подобное по невнимательности.
asesmo добавил:
P.s. jngp не поможет если автор мапы не помнит имя своей хеш-таблицы даже.
asesmo добавил:
А ну ещё
((код jass
Location(X,Y)
))
создаёт точку, поэтому лучше юзай сразу функции с координатами или
((код jass
local location lXY = Location(X,Y)
--
call RemoveLocation(lXY)
))
asesmo добавил:
((код jass
Вместо
call GetLocationX(GetUnitLoc(unit)) утечка, забирает точку левую
сразу
call GetUnitX(unit) всё нормально сразу выдаёт нужную реальную координату Х
))

Отредактировано asesmo, 28.08.2012 в 09:13.
Старый 28.08.2012, 09:06
Hate
конь вакуумный
offline
Опыт: 43,030
Активность:
asesmo:
2 скрин: лучше юзай:
((код jass
local trigger t = CreateTrigger()
--
set t = null
))
маладец, а как ты потом выключишь триггер если понадобится?) причем лучше от этого не станет
Старый 28.08.2012, 13:38
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 16:12.