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

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

Закрытая тема
 
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
утечки
Помогите максимально исправить утечки:
function Trig_arcan_barrage_Conditions takes nothing returns boolean
        return GetSpellAbilityId() == 'A035'
endfunction

function Trig_arcan_barrage_Actions2 takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit u = LoadUnitHandle(udg_Hash,id,0)
    local unit d = LoadUnitHandle(udg_Hash,id,1)
    local unit c = LoadUnitHandle(udg_Hash,id,2)
    local real Angle
    local real x = GetUnitX(d)
    local real y = GetUnitY(d)
    local real x1 = GetUnitX(c)
    local real y1 = GetUnitY(c)
    local unit dc
  if(DistanceBetweenPoints(Location(x,y),Location(x1,y1)) > 20.00)then
    set Angle= Atan2( GetUnitY( d ) - GetUnitY( c ) , GetUnitX( d ) - GetUnitX(c ) )
    call SetUnitX(d,GetUnitX(d)- 7 *Cos(Angle))
    call SetUnitY(d,GetUnitY(d)- 7 *Sin(Angle))
    call SetUnitFacingToFaceUnitTimed( d, c, 0 )
  else
    call UnitDamageTarget( u, c, ( ( (GetHeroStatBJ(bj_HEROSTAT_INT, u, true) * 7) * udg_ArcanBonus[GetConvertedPlayerId(GetOwningPlayer(u))] )),false,false , ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_CLAW_LIGHT_SLICE )
        call CreateNUnitsAtLocFacingLocBJ( 1, 'hmpr', GetOwningPlayer(u), Location(x1,y1), Location(x1,y1) )
        set dc = GetLastCreatedUnit()
        call IssueTargetOrder( dc, "polymorph", c )
        call UnitApplyTimedLife( dc, 1 , 3.00 )
        set dc = null
    call RemoveUnit(d)
    call FlushChildHashtable(udg_Hash,id)
    call DestroyTimer(t)
  endif
  set u = null
  set d = null
  set c = null
  set t = null
endfunction

function Trig_arcan_barrage_Actions takes nothing returns nothing
    local unit u = GetSpellAbilityUnit()
    local unit c = GetSpellTargetUnit()
    local unit d 
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    local real x = GetUnitX(u)
    local real y = GetUnitY(u)
    local real f = GetUnitFacing(u)
    call CreateNUnitsAtLocFacingLocBJ( 1, 'h008', GetOwningPlayer(u), PolarProjectionBJ(Location(x,y), 50.00, f), Location(x,y) )
    set d = GetLastCreatedUnit()
    call SaveUnitHandle(udg_Hash,id,0,u)
    call SaveUnitHandle(udg_Hash,id,1,d)
    call SaveUnitHandle(udg_Hash,id,2,c)
    call TimerStart(t,0.01,true,function Trig_arcan_barrage_Actions2)
    set u = null
    set d = null
    set c = null
endfunction

Отредактировано Vadik29, 21.03.2012 в 16:08.
Старый 21.03.2012, 15:41
ScorpioT1000
Работаем
offline
Опыт: отключен
GetUnitLoc(c)
это делается
local location c_loc = null // объявление
// ...
set c_loc = GetUnitLoc(c) // создание
// ==>
CreateNUnitsAtLocFacingLocBJ( 1, 'hmpr', GetOwningPlayer(u), c_loc, c_loc )
// <==
RemoveLocation(c_loc) // удаление
// ...
set c_loc = null // warcraft-чистка
Старый 21.03.2012, 15:45
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
ScorpioT1000, а через координаты можно?
Location(x1,y1)
Старый 21.03.2012, 15:52
ScorpioT1000
Работаем
offline
Опыт: отключен
Естественно, на то они и нативки. Просто знай, что эти функции порождают новую локацию и удалять надо Remove...
Старый 21.03.2012, 15:58
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
function Trig_arcan_barrage_Conditions takes nothing returns boolean
        return GetSpellAbilityId() == 'A035'
endfunction

function SR takes real xa, real ya, real xb, real yb returns real
return SquareRoot((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb))
endfunction

function Trig_arcan_barrage_Actions2 takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit u = LoadUnitHandle(udg_Hash,id,0)
    local unit d = LoadUnitHandle(udg_Hash,id,1)
    local unit c = LoadUnitHandle(udg_Hash,id,2)
    local real Angle = 0.
    local real x = GetUnitX(d)
    local real y = GetUnitY(d)
    local real x1 = GetUnitX(c)
    local real y1 = GetUnitY(c)
    local unit dc
  if SR(x,y,x1,y1) > 26.)then
    set Angle= Atan2(GetUnitY( d )-GetUnitY( c ),GetUnitX( d )-GetUnitX(c ) )
    call SetUnitX(d,GetUnitX(d)-21.*Cos(Angle))
    call SetUnitY(d,GetUnitY(d)- 21.*Sin(Angle))
    call SetUnitFacing(d,Angle*bj_RADTODEG)
  else
    call UnitDamageTarget( u, c,(GetHeroInt,u,true)*7)*udg_ArcanBonus[GetPlayerId(GetOwningPlayer(u))+1],false,false , ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL,WEAPON_TYPE_CLAW_LIGHT_SLICE )
        set dc = CreateUnit(GetOwningPlayer(u),'hmpr',GetUnitX(c),GetUnitY(u),0.)
        call IssueTargetOrder( dc, "polymorph", c )
        call UnitApplyTimedLife( dc, 1 , 3.00 )
    call KillUnit(d)

    call FlushChildHashtable(udg_Hash,id)
    call DestroyTimer(t)
  endif
  set u = null
  set d = null
  set c = null
  set t = null
endfunction

function Trig_arcan_barrage_Actions takes nothing returns nothing
    local unit u = GetSpellAbilityUnit()
    local unit c = GetSpellTargetUnit()
    local unit d = CreateUnit(GetOwningPlayer(u),'h008',GetUnitX(u)+50.*Cos(GetUnitFacing(u)*bj_DEGTORAD),GetUnitY(u)+5​0.*Cos(GetUnitFacing(u)*bj_DEGTORAD),GetUnitFacing(u))
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    call SaveUnitHandle(udg_Hash,id,0,u)
    call SaveUnitHandle(udg_Hash,id,1,d)
    call SaveUnitHandle(udg_Hash,id,2,c)
    call TimerStart(t,.03,true,function Trig_arcan_barrage_Actions2)
    set u = null
    set d = null
    set c = null
endfunction

//===========================================================================
function InitTrig_arcan_barrage takes nothing returns nothing
    set gg_trg_arcan_barrage = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_arcan_barrage, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_arcan_barrage, Condition( function Trig_arcan_barrage_Conditions ) )
    call TriggerAddAction( gg_trg_arcan_barrage, function Trig_arcan_barrage_Actions )
endfunction
Старый 21.03.2012, 16:01
ScorpioT1000
Работаем
offline
Опыт: отключен
Старый 21.03.2012, 16:02
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
16GB, благодарю)
Старый 21.03.2012, 16:22
Закрытая тема

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

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

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

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



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