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

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

Ответ
 
Banzay89

offline
Опыт: 11,155
Активность:
Оптимизация
Хочу чтобы мне указали на мои ошибки в коде и как его оптимизировать можно?
» Jass 1
function Trig_wc_cast_Conditions takes nothing returns boolean
return(GetSpellAbilityId() == 'A001')
endfunction

function Wc_cast_Actions takes nothing returns nothing
local timer     t=GetExpiredTimer()
local unit      u=LoadUnitHandle(udg_H, GetHandleId(t), 0)
local real      x=LoadReal(udg_H, GetHandleId(t), 1)
local real      y=LoadReal(udg_H, GetHandleId(t), 2)
local real      dis=LoadReal(udg_H, GetHandleId(t), 3)
local real      ang=LoadReal(udg_H, GetHandleId(t), 4)
local effect    e=LoadEffectHandle(udg_H, GetHandleId(t), 5)
local group     gr=CreateGroup()
local unit      g
local unit      d
local real      ang2
if GetWidgetLife(u) > 0.405 and dis<=500.00 then
call SetUnitAnimation(u, "Attack Slam")
call SetUnitX(u,x+dis*Cos(ang*bj_DEGTORAD))
call SetUnitY(u,y+dis*Sin(ang*bj_DEGTORAD))
set  dis=dis+25.00
set  ang=ang+20.00
call SaveReal(udg_H, GetHandleId(t), 3, dis)
call SaveReal(udg_H, GetHandleId(t), 4, ang)
  call GroupEnumUnitsInRange(gr,GetUnitX(u),GetUnitY(u),100.00,null)
   loop
    set g=FirstOfGroup(gr)
     exitwhen g==null
if IsUnitType(g, UNIT_TYPE_STRUCTURE) == false and GetWidgetLife(g) > 0.405 and IsUnitEnemy(g, GetOwningPlayer(u)) == true and GetUnitAbilityLevel(g, 'B000') == 0 then
  set d=CreateUnit(GetOwningPlayer(u),'h000',GetUnitX(u),GetUnitY(u),0)
   call UnitAddAbility(d, 'A000')
    call IssueTargetOrder(d, "slow", g)
     call UnitApplyTimedLife(d, 'BTLF', 1)
      call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAl​batross.mdl", g, "chest"))
       call UnitDamageTarget(u, g, 150, true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DEATH, null)
        set  ang2=Atan2(GetUnitY(g)-GetUnitY(u),GetUnitX(g)-GetUnitX(u))
         call SetUnitX(g,GetUnitX(g)+60*Cos(ang2))
          call SetUnitY(g,GetUnitY(g)+60*Sin(ang2))
endif
 call GroupRemoveUnit(gr,g)
endloop
else
 call SetUnitX(u,x)
  call SetUnitY(u,y)
   call DestroyEffect(e)
    call PauseTimer(t)
     call FlushChildHashtable(udg_H, GetHandleId(t))
      call DestroyTimer(t)
endif
call DestroyGroup(gr)
set  gr=null
set  e=null
set  u=null
set  g=null
set  d=null
endfunction

function Trig_wc_cast_Actions takes nothing returns nothing
local unit   u=GetSpellAbilityUnit()
local real   x=GetUnitX(u)
local real   y=GetUnitY(u)
local real   dis=30.00
local real   ang=GetRandomDirectionDeg()
local timer  t=CreateTimer()
local effect e=AddSpecialEffectTarget("Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile_mini.mdl", u, "weapon")
      call   SaveUnitHandle(udg_H, GetHandleId(t), 0, u)
      call   SaveReal(udg_H, GetHandleId(t), 1, x)
      call   SaveReal(udg_H, GetHandleId(t), 2, y)
      call   SaveReal(udg_H, GetHandleId(t), 3, dis)
      call   SaveReal(udg_H, GetHandleId(t), 4, ang)
      call   SaveEffectHandle(udg_H, GetHandleId(t), 5, e)
call  TimerStart(t, 0.02, true, function Wc_cast_Actions)
set   u=null
set   t=null
endfunction
» Jass 2
function Trig_wc_damage_Actions takes nothing returns nothing
local group  gr=CreateGroup()
local unit   g
 set gr=GetUnitsInRectAll(GetPlayableMapRect())
  loop
   set g=FirstOfGroup(gr)
    exitwhen g==null
if IsUnitType(g, UNIT_TYPE_STRUCTURE) == false and GetWidgetLife(g) > 0.405 and GetUnitAbilityLevel(g, 'B000') > 0 then
      call SetUnitState(g, UNIT_STATE_LIFE, GetUnitState(g, UNIT_STATE_LIFE) - GetUnitState(g, UNIT_STATE_MAX_LIFE)*0.05)
       call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAl​batross.mdl", g, "chest"))
endif
 call GroupRemoveUnit(gr,g)
endloop
call DestroyGroup(gr)
set  gr=null
set  g=null
endfunction
Старый 19.12.2010, 14:49
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
function Wc_cast_Actions takes nothing returns nothing
local timer     t=GetExpiredTimer()
local integer id = GetHandleId(t)
local unit      u=LoadUnitHandle(udg_H,id, 0)
local real      x=LoadReal(udg_H,id, 1)
local real      y=LoadReal(udg_H, id, 2)
local real      dis=LoadReal(udg_H,id, 3)
local real      ang=LoadReal(udg_H,id, 4)
local effect    e=LoadEffectHandle(udg_H, id, 5)
local group     gr=CreateGroup()
local unit      g
local unit      d
local real      ang2
if GetWidgetLife(u) > 0.405 and dis<=500.00 then
call SetUnitAnimation(u, "Attack Slam")
call SetUnitX(u,x+dis*Cos(ang*bj_DEGTORAD))
call SetUnitY(u,y+dis*Sin(ang*bj_DEGTORAD))
set  dis=dis+25.00
set  ang=ang+20.00
call SaveReal(udg_H, id, 3, dis)
call SaveReal(udg_H, id, 4, ang)
  call GroupEnumUnitsInRange(gr,GetUnitX(u),GetUnitY(u),100.00,null)
   loop
    set g=FirstOfGroup(gr)
     exitwhen g==null
if IsUnitType(g, UNIT_TYPE_STRUCTURE) == false and GetWidgetLife(g) > 0.405 and IsUnitEnemy(g, GetOwningPlayer(u)) == true and GetUnitAbilityLevel(g, 'B000') == 0 then
  set d=CreateUnit(GetOwningPlayer(u),'h000',GetUnitX(u),GetUnitY(u),0)
   call UnitAddAbility(d, 'A000')
    call IssueTargetOrder(d, "slow", g)
     call UnitApplyTimedLife(d, 'BTLF', 1)
      call DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Critters\\Albatross\\CritterBloodAl​&#8203;batross.mdl", g, "chest"))
       call UnitDamageTarget(u, g, 150, true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_DEATH, null)
        set  ang2=Atan2(GetUnitY(g)-GetUnitY(u),GetUnitX(g)-GetUnitX(u))
         call SetUnitX(g,GetUnitX(g)+60*Cos(ang2))
          call SetUnitY(g,GetUnitY(g)+60*Sin(ang2))
endif
 call GroupRemoveUnit(gr,g)
endloop
else
 call SetUnitX(u,x)
  call SetUnitY(u,y)
   call DestroyEffect(e)
    call PauseTimer(t)
     call FlushChildHashtable(udg_H, id)
      call DestroyTimer(t)
endif
call DestroyGroup(gr)
set  gr=null
set  e=null
set  u=null
set  g=null
set  d=null
endfunction
я б вот так заменил
Старый 19.12.2010, 14:53
Banzay89

offline
Опыт: 11,155
Активность:
local timer     t=GetExpiredTimer()
local integer id = GetHandleId(t)
а в чем разница и на что это влияет???
Старый 19.12.2010, 14:59
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
ну так ты постоянно вызываешь GetHandleId(t)
а так мы его занесли в переменную и используем
Старый 19.12.2010, 15:02
Ответ

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

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

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

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



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