Feel free to modify for your own uses.
Jon100
Code: Select all
| Spawn[].Target
|
| Snippet to show who in your group is (probably) being attacked by mob01.
| returns "-1" for unknown or "0" to "5" for your group members.
|
| The algorithm generates some false positives so I'd reccommend also checking animation numbers
| before you conclude that mob01 is definately attacking you.
|
| by jon100, 2005
|
#turbo
Sub Main
/declare myspawn int local ${Target.ID}
/call spawns_target ${myspawn}
/if (${Macro.Return}==-1) {
/echo Mob's target = unknown
} else {
/echo Mob's target = ${Group.Member[${Macro.Return}].Name}
}
/return
Sub spawns_target(int mobID)
/declare mH float local
/declare x float local
/declare y float local
/declare theta float local
/declare bearing float local
/declare diff float local
/declare closest_bearing float local 999
/declare closest_player int local -1
/declare loop int local
| capture data
/varset mH ${Spawn[${mobID}].Heading.Degrees}
/echo Target's heading = ${mH}
|scan my group for ~matching bearings
/for loop 0 to ${Group}
|calculate the x and y difference (the -1 is because EQ flips the x axis!)
/varcalc x (${Group.Member[${loop}].X}-${Spawn[${mobID}].X})*-1
/varcalc y ${Group.Member[${loop}].Y}-${Spawn[${mobID}].Y}
/if (${x}==0) /varset x 0.1
|calculate the bearing
/varset theta ${Math.Atan[${y}/${x}]}
/if (${x}>0) {
/varcalc bearing 90-${theta}
} else {
/varcalc bearing 270-${theta}
}
|Calculate the difference in bearings
/varcalc diff ${bearing}-${mH}
/if (${diff}<-180) /varcalc diff ${diff}+360
/if (${diff}>180) /varcalc diff ${diff}-360
/varcalc diff ${Math.Abs[${diff}]}
|Check if better match
/if (${diff}<${closest_bearing}) {
/varset closest_bearing ${diff}
/varset closest_player ${loop}
}
/echo Bearing to ${Group.Member[${loop}].Name} = ${bearing} (Diff = ${diff})
/next loop
/if (${closest_bearing}>4) /return -1
/return ${closest_player}
