All pastes #897069 Raw Edit

Anonymous

public text v1 · immutable
·published 2008-02-09 05:21 UTC
rendered paste body
;Finds the highest HP mob, or "sheep" raid targeted mob, or least targeted mob in party mode
	member:string BestSheepableAdd() ;Returns GUID
	{
		variable guidlist Targets
		variable int TargetLimit
		
		if ${Group.Members} <= 3
		{
			TargetLimit:Set[1]
		}
		elseif ${Group.Members} <= 5
		{
			TargetLimit:Set[2]
		}
		elseif ${Group.Members} <= 10
		{
			TargetLimit:Set[3]
		}
		else
		{
			TargetLimit:Set[4]
		}
		
		This:Debug["BestSheepableAdd :: Called",2]
		;First check if there's a raid target we should be looking for, this can be used solo as well
		if ${Config.GetCombo[cmbRaidTarget]}
		{
			This:Debug["BestSheepableAdd :: Scanning for raid target",3]
			
			if ${Object[${RaidTargets[${Config.GetCombo[cmbRaidTarget]}]}](exists)} && !${Object[${RaidTargets[${Config.GetCombo[cmbRaidTarget]}]}].Dead}
			{
				
				if ${Object[${RaidTargets[${Config.GetCombo[cmbRaidTarget]}]}].PctHPs} > 85 && ${This.PartyTargetingCount[${Object[${RaidTargets[${Config.GetCombo[cmbRaidTarget]}]}].GUID}]} <= ${TargetLimit}
				{
					return ${Object[${RaidTargets[${Config.GetCombo[cmbRaidTarget]}]}].GUID}
				}
			}
		}
		
		;No raid target, see if our target even has any adds
		if ${This.MobsNearPoint[${Target.Location},${Config.GetSlider[sldDetectAddRadius]}]} == 1
		{
			;No adds, we don't need to be here
			return NULL
		}
		
		;No raid target, do a search for highest hp and/or least targeted aggro'd mob
		Targets:Search[-units,-aggro,-range 0-29]
		variable string HighestHP = 0
		variable string HighestHPGUID
		
		variable int i
		for (i:Set[1] ; ${i} <= ${Targets.Count} ; i:Inc)
		{
			if ${This.PartyTargetingCount[${Targets.GUID[${i}]}]} <= ${TargetLimit}
			{
				if ${Targets.Object[${i}].PctHPs} == 100 && (${Targets.Object[${i}].CreatureType.Equal[Humanoid]} || ${Targets.Object[${i}].CreatureType.Equal[Beast]})
				{
					return ${Targets.GUID[${i}]}
				}
				elseif ${Targets.Object[${i}].PctHPs} > ${HighestHP} && (${Targets.Object[${i}].CreatureType.Equal[Humanoid]} || ${Targets.Object[${i}].CreatureType.Equal[Beast]})
				{
					HighestHPGUID:Set[${Targets.GUID[${i}]}]
					HighestHP:Set[${Targets.Object[${i}].PctHPs}]
				}
			}
		}
		
		;No raid target and either don't have aggro'd or there weren't any good aggro'd. Check for sheep pull
		if ${Targets.Count} == 0
		{
			Targets:Search[-units,-alive,-attackable,-range 1-${Config.GetSlider[sldDetectAddRadius]},-origin,${Target.Location}]
			for (i:Set[1] ; ${i} < ${Targets.Count} ; i:Inc)
			{
				if ${Math.Distance[${Target.Location},${Targets.Object[${i}].Location}]} <= ${Config.GetSlider[sldDetectAddRadius]}
				{
					if (${Targets.Object[${i}].CreatureType.Equal[Beast]} || ${Targets.Object[${i}].CreatureType.Equal[Humanoid]}) && ${This.PartyTargetingCount[${Targets.GUID[${i}]}]} <= ${TargetLimit}
					{
						return ${Targets.GUID[${i}]}
					}
				}
			}
			/*
			variable objectref theMob
			variable int MobCount = ${MobsNearPoint[${Target.Location}]}
			
			;No aggro, so check for a good sheep pull target
			for (i:Set[1] ; ${i} <= ${MobCount} ; i:Inc)
			{
				
				theMob:Set[${NearestMob[${Target.Location},${i}]}]
				if (${theMob.CreatureType.Equal[Humanoid]} || ${theMob.CreatureType.Equal[Beast]}) && ${This.PartyTargetingCount[${Targets.GUID[${i}]}]} <= ${TargetLimit}
				{
					;We found a good sheepable within the right distance of our target. Go ahead and return that, there's nothing else to check
					return ${theMob.GUID}
				}
				
			}
			*/
			
		}