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

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

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

offline
Опыт: 1,076
Активность:
Не проходит дамаг
Всем здрасте , начал делать скилл , вот вроде норм , дамми юнит летит правельно , но дамаг не проходит.
Суть скилла:
Герой выпускает в таргет область леденную стрелу , те кто в радиусе 100 получают дамаг.Дамаг проходит 1 раз.
function Trig_IceStar_Conditions takes nothing returns boolean
return GetSpellAbilityId()=='A01Z'
endfunction

function move_A01Z takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer id=GetHandleId(t)
local unit caster=LoadUnitHandle(udg_H,id,0)
local unit dummy=LoadUnitHandle(udg_H,id,1)
local real x=GetUnitX(dummy)
local real y=GetUnitY(dummy)
local real angle=LoadReal(udg_H,id,2)
local real distance=LoadReal(udg_H,id,3)
local real damage=LoadReal(udg_H,id,4)
local group g=LoadGroupHandle(udg_H,id,5)
local group gg
local unit f
    if distance<=10. then
        call PauseTimer(t)
        call DestroyTimer(t)
        call FlushChildHashtable(udg_H,id)
        call RemoveUnit(dummy)
        call GroupClear(g)
        call DestroyGroup(g)
    else
        call SetUnitX(dummy,x+20.*Cos(angle))
        call SetUnitY(dummy,y+20.*Sin(angle))
        call SaveReal(udg_H,id,3,distance-20.)
        set gg=CreateGroup()
        call GroupEnumUnitsInRange(gg,x,y,100.,null)
        loop
            set f=FirstOfGroup(g)
            exitwhen f==null
            if not IsUnitInGroup(f,g) and not IsPlayerEnemy(GetOwningPlayer(caster),GetOwningPlayer(f)) and GetWidgetLife(f)>=0.405 and not IsUnitType(f,UNIT_TYPE_STRUCTURE) and not IsUnitType(f,UNIT_TYPE_MAGIC_IMMUNE) then
                call UnitDamageTarget(caster,f,damage,true,false,ATTACK_TYPE_CHAOS,DAMAGE_TYPE_NORMAL,null)
                call GroupRemoveUnit(gg,f)
                call GroupAddUnit(g,f)
            else
                call GroupRemoveUnit(gg,f)
                call GroupAddUnit(g,f)
            endif
        endloop
        call DestroyGroup(gg)
        call SaveGroupHandle(udg_H,id,5,g)
    endif
set t=null
set caster=null
set dummy=null
set g=null
set gg=null
set f=null
endfunction

function Trig_IceStar_Actions takes nothing returns nothing
local unit caster=GetTriggerUnit()
local real x=GetUnitX(caster)
local real y=GetUnitY(caster)
local real xt=GetSpellTargetX()
local real yt=GetSpellTargetY()
local real angle=Atan2(yt-y,xt-x)
local unit dummy=CreateUnit(GetOwningPlayer(caster),'n00C',x,y,angle*bj_RADTODEG)
local real distance=SquareRoot((xt-x)*(xt-x)+(yt-y)*(yt-y))
local timer t=CreateTimer()
local integer id=GetHandleId(t)
    call SetUnitX(dummy,x+20.*Cos(angle))
    call SetUnitY(dummy,y+20.*Sin(angle))
    call SaveUnitHandle(udg_H,id,0,caster)
    call SaveUnitHandle(udg_H,id,1,dummy)
    call SaveReal(udg_H,id,2,angle)
    call SaveReal(udg_H,id,3,distance)
    call SaveReal(udg_H,id,4,GetUnitAbilityLevel(caster,'A01Z')*150)
    call SaveGroupHandle(udg_H,id,5,CreateGroup())
    call TimerStart(t,0.03,true,function move_A01Z)
set caster=null
set dummy=null
set t=null
endfunction

function InitTrig_IceStar takes nothing returns nothing
local integer index=0
set gg_trg_IceStar=CreateTrigger()
    loop
        exitwhen index>11
        call TriggerRegisterPlayerUnitEvent(gg_trg_IceStar,Player(index),EVENT_PLAYER_UNIT_SPELL_EFFECT,null)
        set index=index+1
    endloop
    call TriggerAddCondition(gg_trg_IceStar,Condition(function Trig_IceStar_Conditions))
    call TriggerAddAction(gg_trg_IceStar,function Trig_IceStar_Actions)
endfunction
Старый 22.10.2011, 11:52
Manhun1

offline
Опыт: 5,042
Активность:
call PauseTimer(t)
call DestroyTimer(t)
Смысл паузить, если ты его уничтожает, он прекратит работать при Destroy тут же.
Manhun1 добавил:
Я так код просмотрел, хз, вроде ошибки нету, отладочные сообщения сделай, добавляются ли юниты вообще в группу, возможно ошибка в условии.
Старый 22.10.2011, 12:06
DqUaliTy

offline
Опыт: 1,076
Активность:
Просмотрел .
В группу берёт а последующие действие не делает ((
DqUaliTy добавил:
ААА блим
set f=FirstOfGroup(g)
Если же он должен быть первый из группы гг щас исправлю посомтрю ))
DqUaliTy добавил:
Всё равно дамаг не проходит ((
DqUaliTy добавил:
Хелп ми
Старый 22.10.2011, 13:03
karaliti
z0r
offline
Опыт: 94
Активность:
and not IsPlayerEnemy(GetOwningPlayer(caster),GetOwningPlayer(f))
Тут все правильно?

Учимся дебажить.
Старый 22.10.2011, 15:37
DqUaliTy

offline
Опыт: 1,076
Активность:
Дебажил ...
Да это было неправельным
and not IsPlayerEnemy(GetOwningPlayer(caster),GetOwningPlayer(f)) 
Спасибо karaliti
Старый 22.10.2011, 18:33
Закрытая тема

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

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

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

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



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