offline
Опыт:
49
Активность:
|
Пожалуйста, помогите найти ошибку
Пожалуйста, помогите найти ошибку в самопальной jass функции.
function AM_effect takes integer Element_Num, real angle1, real angle2, real angle3, real angle4, real angle5, unit caster returns nothing
//Переменные
local string Element
local effect array effect_circular
local effect array effect_line
local effect array effect_blast
local real array angle
local real array blast_angle
local location caster_coord
local location loc
local real radius
local integer i
local integer counter_circular
local integer counter_line
local integer counter_blasts
local real offset
local real damage
set caster_coord = GetUnitLoc(caster)
set radius = 400.00
set damage = 10000.00
set counter_line = 1
set counter_circular = 1
set counter_blasts = 1
set angle[1] = angle1
set angle[2] = angle2
set angle[3] = angle3
set angle[4] = angle4
set angle[5] = angle5
set blast_angle[1] = 0.00
set blast_angle[2] = 0.00
set blast_angle[3] = 0.00
set blast_angle[4] = 0.00
//Определение стихии
if ( Element_Num == 1 ) then
set Element = "Abilities\\Weapons\\ZigguratMissile\\ZigguratMissile.mdl"
endif
if ( Element_Num == 2 ) then
set Element = "Abilities\\Spells\\Human\\FlakCannons\\FlakTarget.mdl"
endif
if ( Element_Num == 3 ) then
set Element = "Abilities\\Spells\\Orc\\Bloodlust\\BloodlustTarget.mdl"
endif
if ( Element_Num == 4 ) then
set Element = "Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile.mdl"
endif
if ( Element_Num == 5 ) then
set Element = "Abilities\\Spells\\NightElf\\Barkskin\\BarkSkinTarget.mdl"
endif
if ( Element_Num == 6 ) then
set Element = "Abilities\\Weapons\\AvengerMissile\\AvengerMissile.mdl"
endif
//+++++++++++++++++++++++++++++++++
loop
if ( angle[1] <= 162.00 ) then
set loc = PolarProjectionBJ(PolarProjectionBJ(caster_coord, radius, angle[2]), offset, AngleBetweenPoint (PolarProjectionBJ(caster_coord, radius, angle[5]), PolarProjectionBJ(caster_coord, radius, angle[2])))
call AddSpecialEffectLocBJ( loc, Element )
call RemoveLocation(loc)
set effect_line[counter_line] = GetLastCreatedEffectBJ()
set counter_line = ( counter_line + 1 )
set offset = ( offset + 5.30 )
set loc = PolarProjectionBJ(PolarProjectionBJ(caster_coord, radius, angle[4]), offset, AngleBetweenPoints(PolarProjectionBJ(caster_coord, radius, angle[4]), PolarProjectionBJ(caster_coord, radius, angle[2])))
call AddSpecialEffectLocBJ( loc, Element )
call RemoveLocation(loc)
set effect_line[counter_line] = GetLastCreatedEffectBJ()
set counter_line = ( counter_line + 1 )
set offset = ( offset + 5.30 )
if ( offset <= 220.00 ) then
set loc = PolarProjectionBJ(PolarProjectionBJ(caster_coord, 110.00, 180.00), offset, 0.00)
call AddSpecialEffectLocBJ( loc, Element )
call RemoveLocation(loc)
set effect_line[counter_line] = GetLastCreatedEffectBJ()
set counter_line = ( counter_line + 1 )
else
call DoNothing( )
endif
call DisplayTextToForce( GetPlayersAll(), "!" )
set i = 1
loop
exitwhen i>5
set loc = PolarProjectionBJ(caster_coord, radius, angle[i])
call AddSpecialEffectLocBJ( loc, Element )
call RemoveLocation(loc)
set effect_circular[counter_circular] = GetLastCreatedEffectBJ()
set counter_circular = ( counter_circular + 1 )
set angle[i] = ( angle[i] + 1.00 )
set i = (i+1)
endloop
call TriggerSleepAction( 0.05 )
else
call TriggerSleepAction( 2 )
//Уничтожение и урон
//Определение стихии
if ( Element_Num == 1 ) then
set Element = "Abilities\\Weapons\\GlaiveMissile\\GlaiveMissileTarget.mdl"
endif
if ( Element_Num == 2 ) then
set Element = "Abilities\\Spells\\Orc\\EarthQuake\\EarthQuakeTarget.mdl"
endif
if ( Element_Num == 3 ) then
set Element = "Abilities\\Spells\\Other\\Doom\\DoomDeath.mdl"
endif
if ( Element_Num == 4 ) then
set Element = "Objects\\Spawnmodels\\Naga\\NagaDeath\\NagaDeath.mdl"
endif
if ( Element_Num == 5 ) then
set Element = "Abilities\\Spells\\Human\\ReviveHuman\\ReviveHuman.mdl"
endif
if ( Element_Num == 6 ) then
set Element = "Abilities\\Spells\\Undead\\AnimateDead\\AnimateDeadTarget.mdl"
endif
//+++++++++++++++++++++++++++++++++
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = ( counter_circular + 6 )
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call DestroyEffectBJ( effect_circular[bj_forLoopAIndex] )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
set counter_circular = 0
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = ( counter_line + 5 )
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call DestroyEffectBJ( effect_line[bj_forLoopAIndex] )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
set counter_line = 0
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 30
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
set loc = PolarProjectionBJ(caster_coord, 100.00, blast_angle[1])
call AddSpecialEffectLocBJ( loc, "Element" )
call RemoveLocation(loc)
set effect_blast[counter_blasts] = GetLastCreatedEffectBJ()
set counter_blasts = ( counter_blasts + 1 )
set blast_angle[1] = ( blast_angle[1] + 12.00 )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
call ForGroupBJ ( GetUnitsInRangeOfLocMatching(100.00, caster_coord, Condition(IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(caster)) == true)), UnitDamageTargetBJ( caster, GetEnumUnit(), damage, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_FIRE ) )
call DestroyGroup(GetLastCreatedGroup)
call TriggerSleepAction( 0.01 )
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 60
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
set loc = PolarProjectionBJ(caster_coord, 200.00, blast_angle[2])
call AddSpecialEffectLocBJ( loc, "Element" )
call RemoveLocation(loc)
set effect_blast[counter_blasts] = GetLastCreatedEffectBJ()
set counter_blasts = ( counter_blasts + 1 )
set blast_angle[2] = ( blast_angle[2] + 6.00 )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
call ForGroupBJ( GetUnitsInRangeOfLocMatching(200.00, caster_coord, Condition(IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(caster)) == true)), UnitDamageTargetBJ( caster, GetEnumUnit(), (damage/2), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_FIRE ) )
call DestroyGroup(GetLastCreatedGroup)
call TriggerSleepAction( 0.01 )
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 90
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
set loc = PolarProjectionBJ(caster_coord, 300.00, blast_angle[3])
call AddSpecialEffectLocBJ( loc, "Element" )
call RemoveLocation(loc)
set effect_blast[counter_blasts] = GetLastCreatedEffectBJ()
set counter_blasts = ( counter_blasts + 1 )
set blast_angle[3] = ( blast_angle[3] + 4.00 )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
call ForGroupBJ( GetUnitsInRangeOfLocMatching(300.00, caster_coord, Condition(IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(caster)) == true)), UnitDamageTargetBJ( caster, GetEnumUnit(), (damage/4), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_FIRE ) )
call DestroyGroup(GetLastCreatedGroup)
call TriggerSleepAction( 0.01 )
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = 120
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
set loc = PolarProjectionBJ(caster_coord, 400.00, blast_angle[4])
call AddSpecialEffectLocBJ( loc, "Element" )
call RemoveLocation(loc)
set effect_blast[counter_blasts] = GetLastCreatedEffectBJ()
set counter_blasts = ( counter_blasts + 1 )
set blast_angle[4] = ( blast_angle[4] + 3.00 )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
call ForGroupBJ( GetUnitsInRangeOfLocMatching(400.00, caster_coord, Condition(IsPlayerEnemy(GetOwningPlayer(GetFilterUnit()), GetOwningPlayer(caster)) == true)), UnitDamageTargetBJ( caster, GetEnumUnit(), (damage/8), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_FIRE ) )
call DestroyGroup(GetLastCreatedGroup)
set counter_line = 0
call TriggerSleepAction( 0.50 )
set bj_forLoopAIndex = 1
set bj_forLoopAIndexEnd = ( counter_blasts + 5 )
loop
exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
call DestroyEffectBJ( effect_blast[bj_forLoopAIndex] )
set bj_forLoopAIndex = bj_forLoopAIndex + 1
endloop
set counter_blasts = 0
endif
exitwhen angle[1] > 163.00
endloop
//Обнуление
call RemoveLocation(caster_coord)
set radius = 0
set damage = 0
set counter_line = 0
set counter_circular = 0
set counter_blasts = 0
set angle[1] = 0
set angle[2] = 0
set angle[3] = 0
set angle[4] = 0
set angle[5] = 0
set blast_angle[1] = 0.00
set blast_angle[2] = 0.00
set blast_angle[3] = 0.00
set blast_angle[4] = 0.00
set offset = 0.00
set caster = null
set loc = null
set Element = ""
endfunction
Отредактировано alexkill, 09.07.2010 в 15:34.
|