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

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

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

offline
Опыт: 49,964
Активность:
урон наносится только одному пикнутому юниту
Из всех пикнутых почему то наносится урон только одному, код и в правду сложен, в том что запутаться можно, но все же если есть желающие помочь, помогите разобраться

Код:
function d1_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A07P'
endfunction

function KHI takes unit u returns boolean
return GetUnitTypeId(u)<1 or IsUnitType(u,UNIT_TYPE_DEAD)==true
endfunction

function NNI takes nothing returns boolean
return IsUnitEnemy(udg_OK,GetOwningPlayer(GetFilterUnit()))and(GetUnitAbilityLevel(GetF  ilterUnit(),'A07P')==0 and IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE)==false and KHI(GetFilterUnit())==false)and IsUnitVisible(GetFilterUnit(),GetOwningPlayer(udg_OK))
endfunction

function QC1 takes nothing returns nothing
    local unit XWI=GetEnumUnit()
    local group QD1=udg_LI0
    local unit XVI= udg_ni
    if IsUnitInGroup(XWI,QD1)==false then
        call GroupAddUnit(QD1,XWI)
        call IssueTargetOrder(udg_LOP,"slow",XWI)
        call UnitDamageTarget(XVI,XWI,200,true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,WEAPO  N_TYPE_WHOKNOWS)
        call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl",XWI,"origin"))
    endif
    set XWI=null
    set QD1=null
    set XVI=null
endfunction

function QE1 takes nothing returns boolean
    local trigger t = GetTriggeringTrigger()
    local integer I = GetHandleId(t)
    local unit XVI=(LoadUnitHandle(udg_Hash,(I),(2)))
    local unit SKI=(LoadUnitHandle(udg_Hash,(I),(19)))
    local group QD1=(LoadGroupHandle(udg_Hash,(I),(133)))
    local real d
    local real x
    local real x0=GetUnitX(XVI)
    local real y
    local real y0=GetUnitY(XVI)
    local group g=CreateGroup()
    local integer ZVI=GetTriggerEvalCount(t)
    local integer i
    call SetUnitX(SKI,GetUnitX(XVI))
    call SetUnitY(SKI,GetUnitY(XVI))
    set udg_LI0=QD1
    set udg_ni=XVI
    set udg_LOP=(LoadUnitHandle(udg_Hash,(I),(132)))
    if GetTriggerEvalCount(t)>33 then
        call KillUnit(SKI)
        call GroupClear(QD1)
        call FlushChildHashtable(udg_Hash,(I))
    else
        set d=ZVI*18
        set i=0
        loop
            exitwhen i>36
            set x=x0+d*Cos(360*i/36*bj_DEGTORAD)
            set y=y0+d*Sin(360*i/36*bj_DEGTORAD)
            set udg_OK = XVI
            call GroupEnumUnitsInRange(g,x,y,500,Condition(function NNI))
            call ForGroup(g,function QC1)
            set i=i+1
        endloop
    endif
    call GroupClear(g)
    call DestroyGroup(g)
    set t=null
    set SKI=null
    set QD1=null
    set XVI=null
    set g=null
    return false
endfunction

function QF1 takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local real x=GetUnitX(u)
    local real y=GetUnitY(u)
    local group g = CreateGroup()
    local trigger t = GetTriggeringTrigger()
    local integer I = GetHandleId(t)
    local unit D1 = CreateUnit(GetOwningPlayer(u),'e00A',x,y,0)
    local unit D2 = CreateUnit(GetOwningPlayer(u),'e005',x,y,0)
    call UnitAddAbility(D2,'A052')
    call SaveGroupHandle(udg_Hash,(I),(133),(g))
    call SaveUnitHandle(udg_Hash,(I),(19),(D1))
    call SaveUnitHandle(udg_Hash,(I),(132),(D2))
    call SaveUnitHandle(udg_Hash,(I),(2),(u))
    call TriggerRegisterTimerEvent(t,0.06,true)
    call TriggerAddCondition(t,Condition(function QE1))
    set t = null
    set D1 = null
    set D2 = null
    set g = null
    set u = null
endfunction

function d1_Actions takes nothing returns nothing
    call QF1()
endfunction

//===========================================================================
function InitTrig_d1 takes nothing returns nothing
    set gg_trg_d1 = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_d1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_d1, Condition( function d1_Conditions ) )
    call TriggerAddAction( gg_trg_d1, function d1_Actions )
endfunction
Старый 31.10.2011, 15:15
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
откуда ты взял этот код? из доты?
вот я тут переделал? так бы сделал я
заметь используется одна глобальная группа G
function CastCon takes nothing returns boolean
return GetSpellAbilityId() == 'A07P'
endfunction

function KHI takes unit u returns boolean
return GetUnitTypeId(u)<1 or IsUnitType(u,UNIT_TYPE_DEAD)
endfunction

function IsTarget takes unit c,unit u returns boolean
return IsUnitEnemy(c,GetOwningPlayer(u))and(GetUnitAbilityLevel(u,'A07P')==0 and not IsUnitType(u,UNIT_TYPE_STRUCTURE) and not KHI(u))and IsUnitVisible(u,GetOwningPlayer(c))
endfunction

function CastEffect takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit u=LoadUnitHandle(udg_Hash,id,4)
    local unit d1=LoadUnitHandle(udg_Hash,id,2)
    local group g=LoadGroupHandle(udg_Hash,id,1)
    local real d = 0.
    local real x = 0.
    local real x0=GetUnitX(u)
    local real y  = 0.
    local real y0=GetUnitY(u)
    local integer k=LoadInteger(udg_Hash,id,5)+1
    local integer i = 0
    local unit f 
    call SaveInteger(udg_Hash,id,5,k)
    call SetUnitX(d1,GetUnitX(u))
    call SetUnitY(d1,GetUnitY(u))
    if k>33 then
        call KillUnit(d1)
        call GroupClear(g)
        call DestroyGroup(g)
        call DestroyTimer(t)
        call FlushChildHashtable(udg_Hash,id)
    else
        set d=k*18
        set i=0
        loop
            exitwhen i>36
            set x=x0+d*Cos(360*i/0.6264)
            set y=y0+d*Sin(360*i/0.6264)
call GroupEnumUnitsInRange(udg_G,x,y,500, null)
loop
set f = FirstOfGroup(udg_G)
if IsTarget(u,f) then
call GroupAddUnit(g,f)
set d2 = CreateUnit(GetOwningPlayer(u),'e005',GetUnitX(f),GetUnitY(f),0)
call UnitAddAbility(d2,'A052')
call IssueTargetOrder(d2,"slow",f)
call UnitApplyTimedLife(d2,'BHwe',1.)
call UnitDamageTarget(u,f,200,true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_FIRE,WEAPON_TYPE_WHOKNOWS)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Undead\\FrostNova\\FrostNovaTarget.mdl​",f,"origin"))
endif
call GroupRemoveUnit(udg_G,f)
exitwhen f == null
endloop
call GroupClear(udg_G)
set i=i+1
endloop
endif
    set t=null
    set u=null
    set g=null
    set d1=null
    set d2=null
    set g=null
    set f = null
endfunction

function Cast takes nothing returns nothing
    local unit u = GetTriggerUnit()
    local real x=GetUnitX(u)
    local real y=GetUnitY(u)
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    call SaveGroupHandle(udg_Hash,id,1,CreateGroup())
    call SaveUnitHandle(udg_Hash,id,2,CreateUnit(GetOwningPlayer(u),'e00A',x,y,0))
    call SaveUnitHandle(udg_Hash,id,4,u)
    call TimerStart(t,.06,true,function CastEffect)
    set t = null
    set u = null
endfunction
//===========================================================================
function InitTrig_d1 takes nothing returns nothing
    set gg_trg_d1 = CreateTrigger(  )
    set udg_G = CreateGroup()
    call TriggerRegisterAnyUnitEventBJ( gg_trg_d1, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_d1, Condition( function CastCon ) )
    call TriggerAddAction( gg_trg_d1, function Cast )
endfunction

Отредактировано 16GB, 31.10.2011 в 16:02.
Старый 31.10.2011, 15:56
MpW

offline
Опыт: 49,964
Активность:
16GB, из доты выдрал )) да все уже сделал, уже выкинул лишнее. Спасибо
Старый 31.10.2011, 16:02
Закрытая тема

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

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

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

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



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