Want to attack npcs that have aggro on another grp...

SneakyDaddy

Lifetimer
Joined
Apr 22, 2006
Messages
275
Reaction score
0
Points
16
I have graduated to boxing 2 full groups but I have a problem with my Pallytank.mac. If the merc tank in other grp gets aggro before my pally does my pally will avoid it. I have been trying for a few days to solve this and have some questions related to it...


What is this checking for? Seems like “If not pet of PC”
Code:
 !${Bool[${Spawn[ID ${Target.ID}].Master.Type.Equal[PC]}]}

Would adding this ${Target.Type.Equal[Mercenary]} into the following line solve the majority of my problems

Code:
	/if (${Math.Distance[${Target.NearestSpawn[PC].Y},${Target.NearestSpawn[PC].X},${Target.NearestSpawn[PC].Z}:${Target.Y},${Target.X},${Target.Z}]}>${Target.MaxRange}) /if (${Target.Speed}<1) {
		/if (${Me.TargetOfTarget.ID}>0) /if (${Me.TargetOfTarget.Name.Equal[${Puller}]} || ${Bool[${Raid.Member[${Me.TargetOfTarget.Name}]}]} || ${Group.Member[${Me.TargetOfTarget.Name}]}>1 || ${Me.TargetOfTarget.Name.Equal[${Me}]}) {

Here is the complete sub that seems to be the problem...

Code:
Sub ValidCombatTargetCheck
/varset ValidCombatTarget FALSE

/if (${SpawnCount[ID ${Target.ID} noalert ${AlertListVoid}]}>0 && ${Target.ID}>0 && ${Target.Type.NotEqual[Corpse]} && !${Bool[${Spawn[ID ${Target.ID}].Master.Type.Equal[PC]}]} && ${Target.Type.NotEqual[PC]} && ${Target.Type.NotEqual[Mercenary]} && (${Target.Distance}<${DistancetoAssist}||(${Target.Named}&&${Target.Distance}<${TankRadOutdoors})) && (${Target.Class.Name.NotEqual[Destructible Object]} || (${Target.Class.Name.Equal[Destructible Object]} && ${Target.PctHPs}<100)) ) {

	/if (${Target.ID}>0 && ${Target.PctHPs}>98) /echo VCT Loop1 TRUE

	/varset ValidCombatTarget TRUE

	/if (${Math.Distance[${Target.NearestSpawn[PC].Y},${Target.NearestSpawn[PC].X},${Target.NearestSpawn[PC].Z}:${Target.Y},${Target.X},${Target.Z}]}>${Target.MaxRange}) /if (${Target.Speed}<1) {
		/if (${Me.TargetOfTarget.ID}>0) /if (${Me.TargetOfTarget.Name.Equal[${Puller}]} || ${Bool[${Raid.Member[${Me.TargetOfTarget.Name}]}]} || ${Group.Member[${Me.TargetOfTarget.Name}]}>1 || ${Me.TargetOfTarget.Name.Equal[${Me}]}) {
			/goto :EndVCTcheck
		}
		/echo Skipping ${Target.Name}, it seams to be no threat to any PC atm.
		/varset ValidCombatTarget FALSE
		/goto :ContVCTcheck
	}
|	/echo (${Me.TargetOfTarget.ID}>0 && (${Me.TargetOfTarget.Name.NotEqual[${Group.Member[${Group.Member[${Me.TargetOfTarget.Name}]}]}]}||${Me.TargetOfTarget.Name.NotEqual[${Raid.Member[${Me.TargetOfTarget.Name}]}]}) && ${Me.TargetOfTarget.Name.NotEqual[${Puller}]})
	/if (${Me.TargetOfTarget.ID}>0) /if (${Group.Member[${Me.TargetOfTarget.Name}]}<1) /if (${Me.TargetOfTarget.Name.NotEqual[${Me}]}) /if (!${Bool[${Raid.Member[${Me.TargetOfTarget.Name}]}]}) /if (${Me.TargetOfTarget.Name.NotEqual[${Puller}]}) {
		/echo Target of Target is not a Raid/Groupmember and also not the assigned MA, ignoring this Target ${Target.Name} of ${Me.TargetOfTarget.Name}
		/squelch /alert add ${AlertListVoid} ${Target.ID}
		/varset ValidCombatTarget FALSE
		/call ClearTarg
		/goto :ContVCTcheck
	}
} else {
	:ContVCTcheck
	/call CheckGrpOnAggro
|	/if (${Target.ID}>0 && ${Target.PctHPs}>98) /echo VCTif2 ${Target.ID}>0) / (${Target.Type.NotEqual[PC]}) / (${Target.Type.NotEqual[Corpse]}) / (!${Bool[${Spawn[ID ${Target.ID}].Master.Type.Equal[PC]}]}) / (${Target.Distance}<${DistancetoAssist} || (${Target.Distance}<${TankRadOutdoors} && ${Target.Speed}>1 && ${Target.LineOfSight})) / ( (${Target.Class.Name.NotEqual[Destructible Object]} || (${Target.Class.Name.Equal[Destructible Object]} && ${Target.PctHPs}<100))
	/if (${SpawnCount[ID ${Target.ID} noalert ${AlertListVoid}]}>0) /if (${Target.ID}>0) /if (${Target.Type.NotEqual[PC]}) /if (${Target.Type.NotEqual[Corpse]}) /if (!${Bool[${Spawn[ID ${Target.ID}].Master.Type.Equal[PC]}]}) /if (${Target.Distance}<${DistancetoAssist} || (${Target.Distance}<${TankRadOutdoors} && ${Target.Speed}>1 && ${Target.LineOfSight})) /if ( (${Target.Class.Name.NotEqual[Destructible Object]} || (${Target.Class.Name.Equal[Destructible Object]} && ${Target.PctHPs}<100)) ) {
|		/if (${Target.ID}>0 && ${Target.PctHPs}>98) /echo VCT Loop2 TRUE
		/varset ValidCombatTarget TRUE
		/if (${Target.ID}>0&&${HoTTavail}) /delay 10 ${Me.TargetOfTarget.ID}
|		/echo (${Me.TargetOfTarget.ID}>0) (${Group.Member[${Me.TargetOfTarget.Name}]}<1) (${Me.TargetOfTarget.Name.NotEqual[${Me}]}) (!${Bool[${Raid.Member[${Me.TargetOfTarget.Name}]}]}) (${Me.TargetOfTarget.Name.NotEqual[${Puller}]})
		/if (${Me.TargetOfTarget.ID}>0) /if (${Group.Member[${Me.TargetOfTarget.Name}]}<1) /if (${Me.TargetOfTarget.Name.NotEqual[${Me}]}) /if (!${Bool[${Raid.Member[${Me.TargetOfTarget.Name}]}]}) /if (${Me.TargetOfTarget.Name.NotEqual[${Puller}]}) {
|			/echo Target of Target is not a Raid/Groupmember and also not the assigned MA, ignoring this Target.
			/call ClearTarg
|			/echo check 1
			/varset ValidCombatTarget FALSE
		}
		/if (${Me.TargetOfTarget.ID}<1) /if (${Target.PctHPs}>99) {
|			/echo No ToT and targets health is above 99, clearing Target.
			/call ClearTarg
|			/echo check 2
			/varset ValidCombatTarget FALSE
		}
		/if (${Math.Distance[${Target.NearestSpawn[PC].Y},${Target.NearestSpawn[PC].X},${Target.NearestSpawn[PC].Z}:${Target.Y},${Target.X},${Target.Z}]}>${Target.MaxRange}) /if (${Target.Speed}<1) {
			/call ClearTarg
|			/echo check 3
			/varset ValidCombatTarget FALSE
		}
		/goto :EndVCTcheck
	}
	/varset ValidCombatTarget FALSE
	/if (${SpawnCount[ID ${Target.ID} noalert ${AlertListVoid}]}==0 || ${Target.Type.Equal[Corpse]} || ${Target.Type.Equal[PC]} || ${Target.Type.Equal[Mercenary]} || ${Spawn[ID ${Target.ID}].Master.Type.Equal[PC]} || (${Target.Class.Name.Equal[Destructible Object]} && ${Target.PctHPs}>99)) {
		/call ClearTarg
|		/echo check 4
	}
	/if (${Math.Distance[${Target.NearestSpawn[PC].Y},${Target.NearestSpawn[PC].X},${Target.NearestSpawn[PC].Z}:${Target.Y},${Target.X},${Target.Z}]}>${Target.MaxRange}) /if (${Target.Speed}<1) {
		/call ClearTarg
|		/echo check 5
	}
}
:EndVCTcheck
/if (!${Defined[CVD${Target.ID}]} && ${Target.ID}>0 && ${ValidCombatTarget}) /call SetCombatVars
/echo ValidCombatTarget ${ValidCombatTarget}
/return

If you think that the problem is somewhere else in the mac I can send you the full version to check out...

This mac was custom written for my toon based on my grp and style of play so if anyone needs a pally mac they are better off going directly to crystane's version which is more generic...
 
just scanning the snip you posted, if you change the HP check of npc to lower, you shouldn't have a problem it should be up any npc that roams to the pally, pulled or not.


{Target.PctHPs}<100)

change to lower then 100, try 95 or lower depending on your dps.
 
Is this just a copy paste issue or do you actually have all those /if on the same line?
Code:
/if (${Me.TargetOfTarget.ID}>0) /if (${Group.Member[${Me.TargetOfTarget.Name}]}<1) /if (${Me.TargetOfTarget.Name.NotEqual[${Me}]}) /if (!${Bool[${Raid.Member[${Me.TargetOfTarget.Name}]}]}) /if (${Me.TargetOfTarget.Name.NotEqual[${Puller}]}) {


Code:
/if (!${Me.TargetOfTarget.ID} && ${Me.TargetOfTarget.Name.NotEqual[${Me}]} && !${Raid.Member[${Me.TargetOfTarget.Name}]} && ${Me.TargetOfTarget.Name.NotEqual[${Puller}]})

Its also early just woke up but I dont really see what you are doing with this

${Group.Member[${Me.TargetOfTarget.Name}]}<1
 
JJ what hes doing is boxing 2 full groups, his tank macro won't engage the mob if the merc from the other group beat him to it, via macro lag.
 
I know what he is doing, I just don't understand that last snippit I put in without code brackets. the /if something /if something /if something all on the same line is wrong either way, unless its an error with copy paste somehow.

${Group.Member[${Me.TargetOfTarget.Name}]}<1

what is this doing?
 
Is this a valid variable? ${Me.TargetOfTarget.Name}

If so why don't we have a ToT plugin =)
 
Is this a valid variable? ${Me.TargetOfTarget.Name}

If so why don't we have a ToT plugin =)

Only valid if the group leader or raid leader have the Health of Target Target ability.
 
just scanning the snip you posted, if you change the HP check of npc to lower, you shouldn't have a problem it should be up any npc that roams to the pally, pulled or not.


{Target.PctHPs}<100)

change to lower then 100, try 95 or lower depending on your dps.


I have been using this mac for over a year. It works great for taking aggro from others in my group. When using 2 groups if merc gets aggro then I see my pally target, clear target, target , clear target...... until target is dead or merc is dead.
 
Is this just a copy paste issue or do you actually have all those /if on the same line?
Code:
/if (${Me.TargetOfTarget.ID}>0) /if (${Group.Member[${Me.TargetOfTarget.Name}]}<1) /if (${Me.TargetOfTarget.Name.NotEqual[${Me}]}) /if (!${Bool[${Raid.Member[${Me.TargetOfTarget.Name}]}]}) /if (${Me.TargetOfTarget.Name.NotEqual[${Puller}]}) {

Yes they are all on the same line when I open it up on my computer also. Keep in my that this works excepts for not taking aggro from a merc in another grp. BTW The puller I have setup is a monk in the mercs group. The pallytank mac does not have a problem taking aggro from him. The other PC's in the group might also have a issue with keeping aggro if they get it though, I have not tested that.

Code:
/if (!${Me.TargetOfTarget.ID} && ${Me.TargetOfTarget.Name.NotEqual[${Me}]} && !${Raid.Member[${Me.TargetOfTarget.Name}]} && ${Me.TargetOfTarget.Name.NotEqual[${Puller}]})

Its also early just woke up but I dont really see what you are doing with this

${Group.Member[${Me.TargetOfTarget.Name}]}<1

I do not know...I did not write this mac.