Sub TargetShortest(int PFlag, int BCount, int ECount, string PRole)
/declare searchstring string local ""
/declare searchstring2 string local ""
/if (${PRole.Find[hunter]}) {
/noparse /varset searchstring ${i}, npc loc ${Me.X} ${Me.Y} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1
/noparse /varset searchstring2 loc ${Spawn[id ${PullMob}].Y} ${Spawn[id ${PullMob}].X} ${Math.Calc[${Spawn[id ${PullMob}].Z}-${Spawn[id ${PullMob}].Height}/2]}
} else {
/noparse /varset searchstring ${i}, npc loc ${CampXLoc} ${CampYLoc} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1
/noparse /varset searchstring2 loc ${Spawn[id ${PullMob}].Y} ${Spawn[id ${PullMob}].X} ${Math.Calc[${Spawn[id ${PullMob}].Z}-${Spawn[id ${PullMob}].Height}/2]}
}
/declare PullTargetID int local 0
/declare Shortest int local 0
/if (!${Me.XTarget[1].ID}) {
/if (${PRole.Find[hunter]}) {
/declare MobsInRange int local ${SpawnCount[npc loc ${Me.X} ${Me.Y} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1]}
} else {
/declare MobsInRange int local ${SpawnCount[npc loc ${CampXLoc} ${CampYLoc} radius ${MaxRadius} zradius ${MaxZRange} targetable noalert 1]}
}
/declare i int local 0
/declare j int local 1
/if (${MobsInRange}) {
/if (${MobsInRange} > 200) {
/if (${DebugPull}) /echo There were more than 200 mobs in range, cutting down the list.
/varset MobsInRange 200
}
|** PullList[#,1] = ID of mob, PullList[#,2] = PathLength **|
/declare PullList[${MobsInRange},2] int local 0
/for i 1 to ${MobsInRange}
/if (${NearestSpawn[${searchstring}].Name.NotEqual[NULL]}) {
/varset PullMob ${NearestSpawn[${searchstring}].ID}
/call PullValidate ${PullMob} ${PFlag}
/if (${Macro.Return}) {
/varset PullList[${j},1] ${NearestSpawn[${searchstring}].ID}
/varset PullList[${j},2] ${Int[${Navigation.PathLength[id ${NearestSpawn[${searchstring}].ID}]}]}
/if (${j}==1) {
/varset PullTargetID ${PullList[${j},1]}
/varset Shortest ${PullList[${j},2]}
} else /if (${PullList[${j},2]} < ${Shortest}) {
/if (${DebugPull}) /echo \awShortest was: \ar[\ay${PullTargetID}\ar] \ap${Spawn[${PullTargetID}].Name} \aw- Dist: \ar${Navigation.PathLength[id ${PullTargetID}]} \awNow: \ar[\ay${PullList[${j},1]}\ar] ${Spawn[${PullList[${j},1]}].Name}\aw- Dist: \ag${Navigation.PathLength[id ${PullList[${j},1]}]}
/varset PullTargetID ${PullList[${j},1]}
/varset Shortest ${PullList[${j},2]}
}
/varcalc j ${j}+1
} else {
/if (${DebugPull}) {
/squelch /echo \at${NearestSpawn[${searchstring}].Name} was not a valid pull target.
/squelch /echo \ar${Navigation.PathExists[id ${NearestSpawn[${searchstring}].ID}]} && ${Int[${NearestSpawn[${searchstring}].Distance3D}]} <= ${Int[${Navigation.PathLength[id ${NearestSpawn[${searchstring}].ID}]}]}
}
}
}
/next i
/if (${PullTargetID}) {
/echo \arPull Target: \ax[\ar${Spawn[id ${PullTargetID}].ID}\aw]\ap ${Spawn[id ${PullTargetID}].Name} - \awDist: \ay${Navigation.PathLength[id ${PullTargetID}]} \awRadial Distance: \ay${Spawn[id ${PullTargetID}].Distance3D}
/varset PullMob ${PullTargetID}
/return ${PullMob}
}
}
} else /if (!${Me.XTarget[${XTSlot}].Type.Equal[Corpse]}) {
/varset PullMob ${Me.XTarget[${XTSlot}].ID}
/return ${PullMob}
}
/return