function Trig_MovingSys_Filter takes nothing returns boolean
return IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD) != true and IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(udg_MS_u[udg_MS_cycle])) == true
endfunction
function IsPointOutOfMap takes real x, real y returns boolean
if x < GetRectMinX(bj_mapInitialPlayableArea) then
set x = GetRectMinX(bj_mapInitialPlayableArea)
return true
endif
if x > GetRectMaxX(bj_mapInitialPlayableArea) then
set x = GetRectMaxX(bj_mapInitialPlayableArea)
return true
endif
if y < GetRectMinY(bj_mapInitialPlayableArea) then
set y = GetRectMinY(bj_mapInitialPlayableArea)
return true
endif
if y > GetRectMaxY(bj_mapInitialPlayableArea) then
set y = GetRectMaxY(bj_mapInitialPlayableArea)
return true
endif
return false
endfunction
function CoordProjectionX takes real x, real d, real a returns real
local real newx = x + d * Cos(a * .0174532)
if IsPointOutOfMap(newx,0) then
return newx
endif
return newx
endfunction
function CoordProjectionY takes real y, real d, real a returns real
local real newy = y + d * Sin(a * .0174532)
if IsPointOutOfMap(0,newy) then
return newy
endif
return newy
endfunction
function CompareCoordsHeight takes real x1, real y1, real x2, real y2 returns real
local location loc1 = Location(x1,y1)
local location loc2 = Location(x2,y2)
local real z1 = GetLocationZ(loc1)
local real z2 = GetLocationZ(loc2)
call RemoveLocation(loc1)
call RemoveLocation(loc2)
set loc1 = null
set loc2 = null
return z2 - z1
endfunction
function Trig_MovingSys_Group takes nothing returns nothing
if udg_MS_Shell[udg_MS_cycle] == true then
set udg_MS_Timer[udg_MS_cycle] = 0.
endif
call DestroyEffect(AddSpecialEffect(udg_MS_SFX2[udg_MS_cycle],GetWidgetX(GetEnumUnit()),GetWidgetY(GetEnumUnit())))
udg_Weak = LoadReal(udg_Hash, GetHandleId(GetEnumUnit()), udg_MS_AttackType[udg_MS_cycle]) // Выгружаем нужную уязвимость, в соответствии с номером типа атаки.
// просчет урона в зависимости от атакующего параметра и защитного параметра выбранных юнитов.
call UnitDamageTarget(udg_MS_u[udg_MS_cycle],GetEnumUnit(),udg_MS_Damage[udg_MS_cycle] - (udg_MS_Damage[udg_MS_cycle] * udg_Weak) ,true,false,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_NORMAL,WEAPON_TYPE_WHOKNOWS)
endfunction
set udg_MS_cycle = 1
loop
exitwhen udg_MS_cycle > udg_MS_cycle_Count
set udg_MS_Timer[udg_MS_cycle] = udg_MS_Timer[udg_MS_cycle] - .04
if udg_MS_Timer[udg_MS_cycle] <= 0. then
call DestroyEffect(AddSpecialEffect(udg_MS_SFX2[udg_MS_cycle],GetWidgetX(udg_MS_u[udg_MS_cycle]),GetWidgetY(udg_MS_u[udg_MS_cycle])))
set udg_MS_u[udg_MS_cycle] = null
set udg_MS_Ang[udg_MS_cycle] = 0
set udg_MS_Ang1[udg_MS_cycle] = 0
set udg_MS_Damage[udg_MS_cycle] = 0
set udg_MS_Damager[udg_MS_cycle] = false
set udg_MS_Distantion[udg_MS_cycle] = 0
set udg_MS_Fly[udg_MS_cycle] = false
set udg_MS_Range[udg_MS_cycle] = 0
set udg_MS_Remove[udg_MS_cycle] = false
set udg_MS_Shell[udg_MS_cycle] = false
set udg_MS_Speed[udg_MS_cycle] = 0
set udg_MS_FlyHeight[udg_MS_cycle] = 0
set udg_MS_Timer[udg_MS_cycle] = 0
set udg_MS_SFX[udg_MS_cycle] = ""
set udg_MS_SFX1[udg_MS_cycle] = ""
set udg_MS_SFX2[udg_MS_cycle] = ""
if udg_MS_Remove[udg_MS_cycle] == true then
call RemoveUnit(udg_MS_u[udg_MS_cycle])
endif
set udg_MS_u[udg_MS_cycle] = udg_MS_u[udg_MS_cycle_Count]
set udg_MS_Ang[udg_MS_cycle] = udg_MS_Ang[udg_MS_cycle_Count]
set udg_MS_Damage[udg_MS_cycle] = udg_MS_Damage[udg_MS_cycle_Count]
set udg_MS_Damager[udg_MS_cycle] = udg_MS_Damager[udg_MS_cycle_Count]
set udg_MS_Distantion[udg_MS_cycle] = udg_MS_Distantion[udg_MS_cycle_Count]
set udg_MS_Fly[udg_MS_cycle] = udg_MS_Fly[udg_MS_cycle_Count]
set udg_MS_Range[udg_MS_cycle] = udg_MS_Range[udg_MS_cycle_Count]
set udg_MS_Remove[udg_MS_cycle] = udg_MS_Remove[udg_MS_cycle_Count]
set udg_MS_Shell[udg_MS_cycle] = udg_MS_Shell[udg_MS_cycle_Count]
set udg_MS_Speed[udg_MS_cycle] = udg_MS_Speed[udg_MS_cycle_Count]
set udg_MS_FlyHeight[udg_MS_cycle] = udg_MS_FlyHeight[udg_MS_cycle_Count]
set udg_MS_Timer[udg_MS_cycle] = udg_MS_Timer[udg_MS_cycle_Count]
set udg_MS_SFX[udg_MS_cycle] = udg_MS_SFX[udg_MS_cycle_Count]
set udg_MS_SFX1[udg_MS_cycle] = udg_MS_SFX1[udg_MS_cycle_Count]
set udg_MS_SFX2[udg_MS_cycle] = udg_MS_SFX2[udg_MS_cycle_Count]
set udg_MS_cycle_Count = udg_MS_cycle_Count - 1
else
set Axis_X = CoordProjectionX(GetWidgetX(udg_MS_u[udg_MS_cycle]),udg_MS_Speed[udg_MS_cycle],udg_MS_Ang[udg_MS_cycle])
set Axis_Y = CoordProjectionY(GetWidgetY(udg_MS_u[udg_MS_cycle]),udg_MS_Speed[udg_MS_cycle],udg_MS_Ang[udg_MS_cycle])
call SetUnitX(udg_MS_u[udg_MS_cycle],Axis_X)
call SetUnitY(udg_MS_u[udg_MS_cycle],Axis_Y)
call DestroyEffect(AddSpecialEffect(udg_MS_SFX[udg_MS_cycle],Axis_X,Axis_Y))
if udg_MS_Zcontrol[udg_MS_cycle] == true then
local real wx
local real wy
set wx = GetWidgetX(udg_MS_u[udg_MS_cycle])
set wy = GetWidgetY(udg_MS_u[udg_MS_cycle])
set z = CompareCoordsHeight(wx,wy,Axis_X,Axis_Y)
if z > 200. then
set udg_MS_Timer[udg_MS_cycle] = 0
call SetUnitFlyHeight(udg_MS_u[udg_MS_cycle],udg_MS_FlyHeight[udg_MS_cycle] + 0,600.)
endif
endif
if udg_MS_Fly[udg_MS_cycle] == true then
call UnitAddAbility(udg_MS_u[udg_MS_cycle],'Amrf')
call UnitRemoveAbility(udg_MS_u[udg_MS_cycle],'Amrf')
if udg_MS_Speed[udg_MS_cycle] * udg_MS_Timer[udg_MS_cycle] >= udg_MS_Distantion[udg_MS_cycle] / 2. and udg_MS_FlyHeight[udg_MS_cycle] <= 400. then
set udg_MS_FlyHeight[udg_MS_cycle] = udg_MS_FlyHeight[udg_MS_cycle] + 30.
else
set udg_MS_FlyHeight[udg_MS_cycle] = udg_MS_FlyHeight[udg_MS_cycle] - 30.
endif
call SetUnitFlyHeight(udg_MS_u[udg_MS_cycle],udg_MS_FlyHeight[udg_MS_cycle] + z,0.)
endif
if udg_MS_Damager[udg_MS_cycle] == true then
call GroupEnumUnitsInRange(udg_Dummy_UG,Axis_X,Axis_Y,udg_MS_Range[udg_MS_cycle],Filter(function Trig_MovingSys_Filter))
call ForGroup(udg_Dummy_UG,function Trig_MovingSys_Group)
call GroupClear(udg_Dummy_UG)
endif
endif
set udg_MS_cycle = udg_MS_cycle + 1
endloop
endfunction
//===========================================================================
function InitTrig_MovingSys takes nothing returns nothing
set gg_trg_MovingSys = CreateTrigger()
call TriggerRegisterTimerEvent(gg_trg_MovingSys,.04,true)
call TriggerAddAction(gg_trg_MovingSys,function Trig_MovingS_Actions)
endfunction
В общем при проверке этого кода Адик падает, а без него ессно выдается куча ошибок, хотя бы по причине объявления локалок не в начале функции. Прошу проверить код, и подсказать, где я накосячил так, что аж адик в обморок падает О_о