AgentChaos
New Member
- Reaction score
- 1
PHP:
function DoesQuadContainOrigin takes real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4 returns boolean
local integer counter = 0
if (x1-x2)*y1 < x1 * (y1-y2) then
set counter = counter + 1
endif
if (x2-x3)*y2 < x2 * (y2-y3) then
set counter = counter + 1
endif
if (x3-x4)*y3 < x3 * (y3-y4) then
set counter = counter + 1
endif
if (x4-x1)*y4 < x4 * (y4-y1) then
set counter = counter + 1
endif
return ((counter == 4) or (counter == 0))
endfunction
function IsPointInQuadFast takes real x, real y, real x1, real y1, real x2, real y2, real x3, real y3, real x4, real y4 returns boolean
return DoesQuadContainOrigin(x1-x,y1-y,x2-x,y2-y,x3-x,y3-y,x4-x,y4-y)
endfunction
function GroupEnumUnitsInCone takes group g, real locx, real locy, real length, real angle, real width1, real width2, boolexpr filter returns nothing
local group tempGroup = NewGroup()
local real array x
local real array y
local real dx
local real dy
local real minX
local real minY
local real maxX
local real maxY
local rect tempRect
local location tempLoc
local unit u
set x[1] = GetPPX(locx,width1,angle-90)
set y[1] = GetPPY(locy,width1,angle-90)
set x[2] = GetPPX(locx,width1,angle+90)
set y[2] = GetPPY(locy,width1,angle+90)
set dx = GetPPX(locx,length,angle)
set dy = GetPPY(locy,length,angle)
set x[3] = GetPPX(dx,width2,angle+90)
set y[3] = GetPPY(dy,width2,angle+90)
set x[4] = GetPPX(dx,width2,angle-90)
set y[4] = GetPPY(dy,width2,angle-90)
// Now we have a quad, define the rect that encloses it.
set minX = RMinBJ(x[1],RMinBJ(x[2],RMinBJ(x[3],x[4])))
set minY = RMinBJ(y[1],RMinBJ(y[2],RMinBJ(y[3],y[4])))
set maxX = RMaxBJ(x[1],RMaxBJ(x[2],RMaxBJ(x[3],x[4])))
set maxY = RMaxBJ(y[1],RMaxBJ(y[2],RMaxBJ(y[3],y[4])))
set tempRect = Rect(minX,minY,maxX,maxY)
call GroupEnumUnitsInRect(tempGroup,tempRect,filter)
//Now we filter the ins and outs
loop
set u = FirstOfGroup(tempGroup)
exitwhen u == null
if IsPointInQuadFast(GetUnitX(u),GetUnitY(u),x[1],y[1],x[2],y[2],x[3],y[3],x[4],y[4]) then
call GroupAddUnit(g,u)
endif
call GroupRemoveUnit(tempGroup,u)
endloop
call ReleaseGroup(tempGroup)
call RemoveRect(tempRect)
set tempGroup = null
set tempLoc = null
set tempRect = null
endfunction
PHP:
private function SpellCast takes nothing returns nothing
local group g=CreateGroup()
local unit s = null
local real x =GetUnitX(SpellEvent.CastingUnit)
local real y =GetUnitY(SpellEvent.CastingUnit)
local real x2=GetSpellTargetX()
local real y2=GetSpellTargetY()
local real angle= GetUnitAngleXY(x,y,x2,y2)
set caster=SpellEvent.CastingUnit
call GroupEnumUnitsInCone(g,x,y,250,GetUnitFacing(caster)* bj_DEGTORAD,300,300,Condition(function EnumFilter))
loop
set s = FirstOfGroup(g)
exitwhen s == null
call UnitDamageTarget(SpellEvent.CastingUnit, s, 1, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_UNIVERSAL, null)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\HolyBolt\\HolyBoltSpecialArt.mdl", GetUnitX(s),GetUnitY(s)))
call GroupRemoveUnit(g, s)
endloop
call GroupClear(g)
call DestroyGroup(g)
set s = null
endfunction
use *bj_DEGTORAD function not working!
someone know a better Cone Formula or can fix this problem ?