Функция урона по линии. DamageLine(a, b, w, dmg, ranged) a - точка начала линии b - точка конца линии w - ширина линии (чем меньше тем точнее) dmg - наносимый урон ranged - true, если урон считается дальним боем, false, если нет.
Код Jass
function DamageLine takes location a, location b, real w, real dmg, boolean ranged returns nothing
local integer i = 0
local real aX = GetLocationX(a)
local real bX = GetLocationX(b)
local real aY = GetLocationY(a)
local real bY = GetLocationY(b)
local real dist = SquareRoot((bX - aX) * (bX - aX) + (bY - aY) * (bY - aY))
local real angle = 57.295827908 * Atan2(bY - aY, bX - aX)
local group g = CreateGroup()
local group tg = CreateGroup()
local unit u
loop
exitwhen i > 2*dist/w
call GroupEnumUnitsInRange(g, aX, aY, w, null)
loop
set u = FirstOfGroup(g)
if (IsUnitInGroup(u, tg) == false) then
call UnitDamageTarget(u, u, dmg, true, ranged, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
endif
call GroupAddUnit(tg, u)
call GroupRemoveUnit(g, u)
exitwhen u == null
endloop
set aX = aX + w/2 * Cos(angle * 0.01745327)
set aY = aY + w/2 * Sin(angle * 0.01745327)
set i = i + 1
endloop
call DestroyGroup(g)
call DestroyGroup(tg)
set g = null
set u = null
endfunction
Код cJass
void DamageLine(location a, location b, real w, real dmg, boolean ranged) {
int i = 0
real aX = GetLocationX(a), bX = GetLocationX(b)
real aY = GetLocationY(a), bY = GetLocationY(b)
real dist = SquareRoot((bX - aX) * (bX - aX) + (bY - aY) * (bY - aY))
real angle = 57.295827908 * Atan2(bY - aY, bX - aX)
group g = CreateGroup(), tg = CreateGroup()
unit u
loop {
exitwhen i>2*dist/w
GroupEnumUnitsInRange(g, aX, aY, w, null)
loop {
u = FirstOfGroup(g)
if !IsUnitInGroup(u, tg) {
UnitDamageTarget(u, u, dmg, true, ranged, ConvertAttackType(5), ConvertDamageType(4), ConvertWeaponType(0))
}
GroupAddUnit(tg, u)
GroupRemoveUnit(g, u)
exitwhen u==null
}
aX+=w/2 * Cos(angle * 0.01745327)
aY+=w/2 * Sin(angle * 0.01745327)
i++
}
DestroyGroup(g)
DestroyGroup(tg)
g = null
tg = null
u = null
}
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
DamageLine(a, b, w, dmg, ranged)
a - точка начала линии
b - точка конца линии
w - ширина линии (чем меньше тем точнее)
dmg - наносимый урон
ranged - true, если урон считается дальним боем, false, если нет.
» WarCraft 3 / Neutral Creep Spawn System v.2.3
» StarCraft 2 / Карты из беты с AI
» StarCraft 2 / Mapster TD