Attack within angle

asipo

New Member
Reaction score
15
Problem solve, see below for solution

Im using pheonix fire ability
I can attack nearby enemy with it
But its attack 360 around the caster

Can I make the ability or there is a way or any idea
To make the ability to attack 180 only?
Means the attack is only attack enemy in front of the caster, not at the back

Any idea, link or help would be appreciate.
 

Rainther

I guess I should write something of value here...
Reaction score
61
It's probably easiest to fix with triggers. I haven't checked the ability itself but I doubt that you can fix that in it.
 

asipo

New Member
Reaction score
15
Got another solution but kinda not sure its good or not.
Create a tower. Make the tower to move to the unit every 0.3 seconds.

With this, the tower is using normal attack.
Thus from here can make attack depend on the tower facing angle rite?
Any link or solution for this?
 

asipo

New Member
Reaction score
15
I got it using jass, here is the idea

AngleWithin.gif


If unit is attacked
Check the attacked unit is within angle of the attacking unit
If not within angle then order the attacking unit to stop

p/s: The attacking unit is a tower (movement speed = 0, thus it can attack 360 degree without turning)



The code
Trigger name : "Attack rangle"
Leak? : Dont know, im newbie, check for me will ya?

JASS:
function Trig_Attack_rangle_Actions takes nothing returns nothing

local unit attacker = GetAttacker() //The attacker unit
local unit attacked = GetAttackedUnitBJ() //The being attacked unit
local real distTog = AngleBetweenPoints(GetUnitLoc(GetAttacker()), GetUnitLoc(GetAttackedUnitBJ())) //Get the angel between those unit
local real angelwithin = 30 //Half side of the attack angle within, this means it can attack 60degree any unit in front of it
local boolean canattack1 = false //Attack allow check1
local boolean canattack2 = false //Attack allow check2

//The distance between return -ve value from 180-360 degree, this is to correct it
if(distTog < 0) then
set distTog = distTog + 360.00
endif

//Check the half side of the attacker within angle
if(GetUnitFacing(GetAttacker()) + angelwithin >= distTog) then
set canattack1 = true
endif

//Check the other half side of the attacker within angle
if(GetUnitFacing(GetAttacker()) - angelwithin <= distTog) then
set canattack2 = true
endif

//Check and compare both of the result and stop the attacker from attack if its not within range
if( canattack1==false or canattack2==false) then
call IssueImmediateOrderBJ( attacker, "stop" )
endif

endfunction


function InitTrig_Attack_rangle takes nothing returns nothing
    set gg_trg_Attack_rangle = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Attack_rangle, EVENT_PLAYER_UNIT_ATTACKED )
    call TriggerAddAction( gg_trg_Attack_rangle, function Trig_Attack_rangle_Actions )
endfunction
 
General chit-chat
Help Users

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top