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

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

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

offline
Опыт: 6,290
Активность:
Есть утечки или нет?
Код:
function CastSpell takes unit caster, unit target, integer spell, integer level, integer order returns nothing
    local unit u = CreateUnit(GetOwningPlayer(caster), 'nwad', GetUnitX(target), GetUnitY(target), 0)  
    call UnitApplyTimedLife(u, 'BTLF', 2)
    call UnitAddAbility(u, spell)
    call SetUnitAbilityLevel(u, spell, level)
    call IssueTargetOrderById(u,order,target)
    set u=null
endfunction

Надо ли обнулять переменные caster и target
Старый 15.07.2009, 16:03
ToChilo
■□□□□
offline
Опыт: 356
Активность:
нет
Старый 15.07.2009, 16:29
MupaMaX
Мой статус
offline
Опыт: 1,495
Активность:
unit caster, unit target
А то что он принял, они же не обнуляются...
Или это у меня уже паранойя
Старый 15.07.2009, 17:55
J
expert
offline
Опыт: 48,447
Активность:
их не нужно обнулять
Старый 15.07.2009, 17:57
Линкольн
Barg Ent.
offline
Опыт: 4,812
Активность:
MupaMaX. Значения, которые принимает функция обнуляются самостоятельно по окончании её работы.
Старый 15.07.2009, 21:09
Anufis

offline
Опыт: 6,290
Активность:
Спс за помощь.
Есть другой вопрос )
Код:
function Missle_Actions takes nothing returns nothing
    local integer sh=GetHandleId(GetTriggeringTrigger())
    local unit u=LoadUnitHandle(udg_h,sh,1)
    local real speed=LoadReal(udg_h,sh,2)
    local real maxfly=LoadReal(udg_h,sh,3)
    local real radius=LoadReal(udg_h,sh,4)
    local integer spell=LoadInteger(udg_h,sh,5)
    local integer spelllvl=LoadInteger(udg_h,sh,6)
    local integer order=LoadInteger(udg_h,sh,7)
    local real damage=LoadReal(udg_h,sh,8)
    local unit owner=LoadUnitHandle(udg_h,sh,9)
    local real StartX=LoadReal(udg_h,sh,10)
    local real StartY=LoadReal(udg_h,sh,11)
    local real X=GetUnitX(u)
    local real Y=GetUnitY(u)
    local group g=CreateGroup()
    local destructable d
    local unit u2
    local boolean b=true
    local real angle=GetUnitFacing(u)*0.0174
    call DisplayTextToForce( GetPlayersAll(), I2S(sh) )
    set X=X+Cos(angle)*speed
    set Y=Y+Sin(angle)*speed
    if (not IsTerrainPathable(X,Y,PATHING_TYPE_ANY)) or (X-StartX)*(X-StartX)+(Y-StartY)*(Y-StartY)>maxfly*maxfly then
      set b=false
    endif
    if b then
      call SetUnitX(u,X)
      call SetUnitY(u,Y)
      call GroupEnumUnitsInRange(g,X,Y,radius,Condition(function Missle_c))
      loop
          set u2=FirstOfGroup(g)
          exitwhen u2==null
          call GroupRemoveUnit(g,u2)
          if (u2!=owner) then
            call CastSpell(owner,u2,spell,spelllvl,order)
            set b=false
          endif
      endloop
    endif
    if b then
      set d=RandomDestructableInRectBJ(RectFromCenterSizeBJ(GetUnitLoc(u),radius*1.5,radiu  s*1.5),Condition(function Missle_c2))
      if d!=null then
        call SetDestructableLife(d,GetDestructableLife(d)-damage)
        set b=false
      endif
    endif
    set owner=null
    call DestroyGroup(g)
    set d=null
    set u2=null
    if not b then
      call RemoveUnit(u)
      call FlushChildHashtable(udg_h,sh)
      call DestroyTrigger(GetTriggeringTrigger())
    endif
    set u=null
endfunction

function Missle takes integer dummy,real StartX,real StartY,real angle,real speed,real maxfly,real radius,integer spell,integer spelllvl,integer order,real damage,unit owner returns nothing
   local unit u=CreateUnit(GetOwningPlayer(owner),dummy,StartX,StartY,angle)
   local trigger t=CreateTrigger()
   local integer sh=GetHandleId(t)
   call SaveUnitHandle(udg_h,sh,1,u)
   call SaveReal(udg_h,sh,2,speed)
   call SaveReal(udg_h,sh,3,maxfly)
   call SaveReal(udg_h,sh,4,radius)
   call SaveInteger(udg_h,sh,5,spell)
   call SaveInteger(udg_h,sh,6,spelllvl)
   call SaveInteger(udg_h,sh,7,order)
   call SaveReal(udg_h,sh,8,damage)
   call SaveUnitHandle(udg_h,sh,9,owner)
   call SaveReal(udg_h,sh,10,StartX)
   call SaveReal(udg_h,sh,11,StartY)
   call TriggerRegisterTimerEventPeriodic(t,0.03)
   call TriggerAddAction(t,function Missle_Actions)
   set u=null
   set owner=null
   set t=null
endfunction


В верхней функции я правильно триггер удалил(без утечек?)
Старый 15.07.2009, 22:08
Daemonik

offline
Опыт: 5,084
Активность:
Я конечно не знаток, но вроде он удаляется)
Ты что еще одну версию IQ делаешь?))
Старый 15.07.2009, 22:12
Anufis

offline
Опыт: 6,290
Активность:
Зачем? Еще в первом два уровня надо сделать.
Я ж не только идиотов делаю.
Старый 15.07.2009, 22:15
ToChilo
■□□□□
offline
Опыт: 356
Активность:
функция FirstOfGroup() может глючить лучше использовать ForGroup()
прочитать про это можно здесь
и у тебя в коде группа не обнуляеться
Старый 15.07.2009, 22:42
agentex

offline
Опыт: 34,834
Активность:
Цитата:
функция FirstOfGroup() может глючить

хочешь сказать она может вернуть нул вместо юнита? :\

agentex добавил:
прочитал пост тк, да так может быть если набрали в группу когдато давно и юзают ферст оф груп. Но в большинстве случаев она юзается сразу после енума (как и в этом куске кода), так что ложная тревога

agentex добавил:
Цитата:
call DestroyTrigger(GetTriggeringTrigger())

это не тру, говорят удалять тригеры вообще не безопасно, а из самого себя - вообще убийство вара
Старый 15.07.2009, 23:21
J
expert
offline
Опыт: 48,447
Активность:
Цитата:
это не тру, говорят удалять тригеры вообще не безопасно, а из самого себя - вообще убийство вара
false

Отредактировано J, 15.07.2009 в 23:58.
Старый 15.07.2009, 23:35
Закрытая тема

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

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

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

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



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