Page 1 of 2

Spawn[].Target

Posted: Fri Apr 01, 2005 5:55 pm
by Jon100
After much puzzling on how to work out which mobs were attacking my group's cleric I wrote this snippet.

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}

Re: Spawn[].Target

Posted: Sun May 04, 2025 9:06 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 9:07 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 9:08 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 9:09 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 10:22 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 10:23 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 10:24 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 10:25 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 10:27 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 11:04 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 11:05 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 11:06 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 11:07 am
by xyilla

Re: Spawn[].Target

Posted: Sun May 04, 2025 11:44 am
by xyilla