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

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

Ответ
 
Anufis

offline
Опыт: 6,290
Активность:
Спелл в 1.23b
Вот как бы 1.23b еще нету, проверить сам не могу. Есть пару вопросов, правильно ли я остановил выполнение и обнулил локальный триггер, проверьте плз на утечки, и правильно ли я тут пишу, используя новые функции.
Код:
//h-Глобалка типа hashtable

function Missle_c takes nothing returns boolean
return IsUnitAliveBJ(GetFilterUnit())
endfunction

function Missle_c2 takes nothing returns boolean
    return ( IsDestructableAliveBJ(GetFilterDestructable()) == true )
endfunction

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=LoarReal(udh_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
    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!=owner2) 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 u=null
    set owner=null
    call DestroyGroup(g)
    set d=null
    set u2=null
    if not b then
      call FlushChildHashtable(udg_h,sh)
      call DestroyTrigger(GetTriggeringTrigger())
    endif
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,X,Y,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.04)
   call TriggerAddAction(t,function Missle_Actions)
   set u=null
   set owner=null
   set t=null
endfunction
Старый 14.06.2009, 10:55
adic3x

offline
Опыт: 108,439
Активность:
в миислеАкшин обращаться к триггерЮнит() нельзя
ненадо использовать переодический триггер, таймеры лучшее решение
Старый 14.06.2009, 11:27
Toadcop

offline
Опыт: 54,313
Активность:
омфг снова начялса абуз... -.- люди глупые. (но теперь это "модно")
люди уже почти стали на правильный путь...
Старый 14.06.2009, 14:09
Ответ

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

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

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

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



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