Fartaunt Macro

Lorekeeper

Member
Joined
Jun 28, 2010
Messages
811
Reaction score
0
Points
16
Location
North Carolina
I played with a guy a few months ago and he sent me this macro, I'm not sure who wrote it all I did was take stuff out and add too it.

Fartaunt Macro:
- It will /quit after you leave your current zone (aka if you die and aren't rezzed you'll /quit when you bind)

- It's pretty straight forward, Start this in a corner where no mobs are behind you and run it, It will target the closest mob and fartaunt it.
(Fartaunt warps you to the target and taunts it and warps back just for clarification)

- I asked maskoi to edit this so it read Main Assist endurance and Healer Endurance (YES this works for mercenaries.)

- I have it set to change the mercenarie to passive before pulling then Aggressive when its at camp, This is located at line 158 if you have a cleric merc etc.. You can take this out by going up to the top and finding /stance passive line.

- Use MQ2Melee with this.

- Try it out, If you have any edits you made to this to make it flawless(er) then pm me and I will update the source if I approve, I saw no other fartaunt macros on the forum and its about time there is one, Please don't be stupid and use this in say House of Thule Lower Floors, Seriously your asking for a ban. Just take a look at the code and you'll see how it works.

If any problems send me a pm, this uses ninjadvloot.inc

Code:
|Fartaunt Macro {}
|Do not use in places such as beza, or where you can train yourself, This
|Macro will find the closest mob and fartaunt it, I am not responsible for
|What you do with this macro or what happens to you while you use it.
|
|Kudos to Maskoi for editing this
|Kudos to the stranger I met and who sent me this a few months back.
|Lorekeeper

#turbo 40
#Event  GainXP		"#*#gain party experi#*#"
#event ImDead       "#*#You have been slain by#*#"
#event ImDead       "Returning to home point, please wait..."
#event ImDead       "#*#Returning to Bind Location#*#"
#event AAXP			"#*#have gained an ability point#*#"
#event myXP			"#*#tell me my xp#*#"

#include ninjadvloot.inc

Sub Main 
	/declare Camp_Zone 			int 	outer	${Zone.ID}
	/declare FO_MaxPullRadius	float 	outer 	560
	/declare FO_MaxCombatRange	float 	outer 	55
	/declare FO_MinAxisZRange	float 	outer 	${Math.Calc[${Me.Z}-1200]}
	/declare FO_MaxAxisZRange	float 	outer 	${Math.Calc[${Me.Z}+1200]}
	/declare BO_MeTargetDead 	int 	outer
	/declare BO_HasTarget		int 	outer
	/declare FO_MeXLOC			float 	outer	${Me.X} 
	/declare FO_MeYLOC			float 	outer	${Me.Y} 
	/declare FO_MeZLOC			float 	outer	${Me.Z}
	/declare AssistOther 		int 	outer 	0
	
|-------------------------------------------------------------------------------------
| Group Main Assist Name, Mana/Endurance check to stop and resume pulling
|-------------------------------------------------------------------------------------
	/declare MainAssist 		string 	outer	MANameHere
	/declare DoMACheck    		int 	outer	1
	/declare HealerName 			string 	outer	HealerNameHere
	/declare DoHealerCheck    	int 	outer	1
	/declare MAClass			string 	outer 	${Spawn[${MainAssist}].Class.ShortName}
	/declare HealerClass		string 	outer 	${Spawn[${HealerName}].Class.ShortName}
	/declare AAExp				float 	outer	${Me.AAExp}
	/declare SAAExp 			float 	outer
	/declare TAAExp				float 	outer	0
	
	/hidecorpses looted
	/call SetupAdvLootVars
	/call LootMobs
	
| General Principle is to do this loop once per pull
	:Start 
		|/varset BO_MeTargetDead 0
		|/varset BO_HasTarget 0
		/echo Calling GM_Check
		/call GM_Check
		/call DoWePause
		/echo Calling GetTarget subroutine 
		/call GetTarget
		/echo Calling Pull sub routine 
		/call Pull 
		/echo Calling CombatSub subroutine
		/call CombatSub
		/echo Calling MoveToLoc subroutine
		/warp loc ${FO_MeYLOC} ${FO_MeXLOC} ${FO_MeZLOC}
|		/call MoveToLoc ${FO_MeYLOC} ${FO_MeXLOC} 
		/stance passive
	/goto :Start 
/return 
/end

|-------------------------------------------------------------------------------- 
|SUB: GM Check 
|-------------------------------------------------------------------------------- 
Sub GM_Check 
	/if (${Spawn[gm].ID}) { 
		/beep 
		/beep 
		/beep 
		/echo GM has entered the zone! 
		/echo Eding the macro... 
		/keypress forward 
		/keypress back 
		/quit 
		/endmacro 
	} 
/return

|-------------------------------------------------------------------------------- 
| SUB: Aquire Target 
|-------------------------------------------------------------------------------- 
Sub GetTarget

	/echo in GetTarget subroutine
	:Acquire 
		/delay 2
		/if (${Me.State.Equal[BIND]}) /delay 2s
		/squelch /target npc radius ${FO_MaxPullRadius} alert 6
		/delay 1s 
		/varset BO_HasTarget 0
		/if (${Target.ID} && ${Me.State.NotEqual[BIND]}) {

			/if (${Target.Z}<${FO_MinAxisZRange}) { 
				/echo Mob is BELOW Min Z Range, picking another... 
				/echo Invalid Target ID ${Target.ID} 
				/varset BO_HasTarget 0
				/goto :Acquire 
			} 
			/if (${float[${Target.Z}]}>${FO_MaxAxisYRange}) { 
				/echo Mob is ABOVE Max Z Range, picking another... 
				/echo Invalid Target ID ${Target.ID} 
				/varset BO_HasTarget 0
				/goto :Acquire 
			} 
			/if (${float[${Target.Distance}]}>${FO_MaxPullRadius}) { 
				/echo Mob is too far AWAY, picking another... 
				/echo Invalid Target ID ${Target.ID} 
				/varset BO_HasTarget 0
				/goto :Acquire 
			}
			/varset BO_HasTarget 1
			/echo Acquired ${Target.Name} at range ${Int[${Target.Distance}]} 
			/return
		} 
	/goto :Acquire 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Pull 
|-------------------------------------------------------------------------------- 
Sub Pull

	}
	/declare MyTimer timer 10s

	/echo In subroutine Pull
	:PullLoop 
|		/echo in subroutine Pull [PullLoop]
		/delay 1s
		/if (${Me.CombatState.NotEqual[COMBAT]}) /squelch /fartaunt
		/if (${Target.Distance}<=100 && ${Me.CombatState.Equal[COMBAT]} && (${Math.Calc[${Target.Z}-${Me.Z}]}<=30 && ${Math.Calc[${Target.Z}-${Me.Z}]}>=-30)) /return 
		/if (${Target.Distance}>${FO_MaxPullRadius}) /return
		/if (!${MyTimer}) /return
	/goto :PullLoop
/return

|-------------------------------------------------------------------------------- 
| SUB: Combat 
|-------------------------------------------------------------------------------- 
Sub CombatSub
	/declare counter int local
	/varset BO_MeTargetDead 0
	/echo in subroutine CombatSub 
	:CombatLoop
		/varcalc counter ${counter}+1
		/doevents
		/echo CombatSub [CombatLoop] #${counter}
  		}
		/if (!${Me.Combat} && !${BO_MeTargetDead} && ${Target.Distance}<70) /multiline ; /timed 5, /stance Efficient; /attack on
		/delay 1s
		/if (${Me.TargetOfTarget.ID}!=${Me.ID} && !${AssistOther}) /fartaunt
		/if (${Me.CombatState.Equal[COMBAT]} && ${BO_MeTargetDead}) {
			/squelch /target npc zradius 30
			/echo Still busy, gotta nother one here
			/varset BO_MeTargetDead 0
			/delay 1s
		} 
		/if (${Me.CombatState.NotEqual[COMBAT]} && ${BO_MeTargetDead}) {
			/delay 1s
			/call LootMobs
|			/call MoveToLoc ${FO_MeYLOC} ${FO_MeXLOC} 
			/warp loc ${FO_MeYLOC} ${FO_MeXLOC} ${FO_MeZLOC}
			/return
		}
		/if (${BO_MeTargetDead}) /return
		/if (${Me.CombatState.Equal[ACTIVE]}) {
			/squelch /target clear
			/return
		}
	/goto :CombatLoop
/return 

|-------------------------------------------------------------------------------- 
|SUB: MoveToLoc
|-------------------------------------------------------------------------------- 
Sub MoveToLoc(MoveToY, MoveToX) 

   /declare running int local 
   /declare distanceNow float local 
   /declare distanceBefore float local 
   /declare distanceModifier int local 
   /declare distanceTimer timer 15 
   /varset running 0 
   /varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
   /varset distanceModifier 1 
   /echo Moving to Location: ${MoveToY}, ${MoveToX}. 
   /echo Distance: ${distanceBefore} 
   :moveToLocation 
      /doevents 
      /face fast nolook loc ${MoveToY},${MoveToX} 
      /if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<10) { 
         /keypress forward 
         /return 
      } 
      /if (${distanceTimer}==0) { 
         /if (${Me.Sneaking}) { 
            /varset distanceModifier 2 
         } else { 
            /varset distanceModifier 1 
         } 
         /varset distanceNow ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
         /if (${Math.Calc[${distanceBefore}-${distanceNow}]}<${Math.Calc[10/${distanceModifier}]}) { 
         /call HitObstacle 
         } 
         /varset distanceBefore ${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]} 
         /varset distanceTimer 15 
      } 
      /if (${running}==0) { 
         /keypress forward 
            /if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}>10) { 
               /varset running 1 
               /keypress forward hold 
            } 
      } else { 
         /if (${Math.Distance[${Me.Y},${Me.X}:${MoveToY},${MoveToX}]}<11) { 
            /varset running 0 
            /keypress forward 
         } /
      } 
      /goto :moveToLocation 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Obstacle Avoidance 
|-------------------------------------------------------------------------------- 
Sub HitObstacle 
   /echo Obstacle hit, moving around it... 
   /keypress forward 
   /keypress back hold 
   /delay 3s 
   /keypress back 
   /if (${Math.Rand[2]}) { 
      /keypress strafe_right hold 
   } else { 
      /keypress strafe_left hold 
   } 
   /delay 5s 
   /keypress strafe_right 
   /keypress strafe_left 
   /keypress forward hold 
/return 

|-------------------------------------------------------------------------------- 
| SUB: Event_GainXP
|--------------------------------------------------------------------------------
Sub Event_GainXP
	/varset BO_MeTargetDead 1
	/echo You Gain XP
|	/varset AAExp ${Math.Calc[${Me.PctAAExp}-${AAExp}]}

|	/varcalc TAAExp ${TAAExp}+${Me.PctAAExp}
	/delay 1s
/return 

|-------------------------------------------------------------------------------- 
| SUB: Event_AAXP
|--------------------------------------------------------------------------------
Sub Event_AAXP
	/varcalc TAAExp ${TAAExp}+1
	
/return

|-------------------------------------------------------------------------------- 
| SUB: Slain 
|-------------------------------------------------------------------------------- 
Sub Event_ImDead
	/doevents
	/if (${Stick.Status.Equal[ON]}) /squelch /stick off
	/keypress forward
	/keypress back
	/keypress Left
	/keypress Right
	/delay 2s
	/echo I've been Killed! Going into Sleep Mode...
	/beep
	/beep
	    :DeathSleep
			/doevents
			/delay 5s
			/if (${Zone.ID} != ${Camp_Zone}) /quit
			/if (${Me.State.Equal[HOVER]} || ${Zone.ID} != ${Camp_Zone}) /goto :DeathSleep
/return

|-------------------------------------------------------------------------------- 
| SUB: Gain_Agro
|-------------------------------------------------------------------------------- 
Sub Gain_Agro
	/for i 1 to 4 {
	/squelch /tar ${Me.XTarget[1]}
	/if (${Target.PctHPs}<95 && ${Target.ID} == ${Me.XTarget[1]}) /squelch /target ${Me.Xtarget[2]}
	/goto :agro
/return

|-------------------------------------------------------------------------------------
| SUB: Event_myXP
|-------------------------------------------------------------------------------------
Sub Event_myXP
	/declare mytemp		float	local
	/varcalc mytemp ${TAAExp} - ((${SAAExp} / 3) * .01)
	/echo ${mytemp} in ${Math.Calc[${Macro.RunTime}/60]} minutes
/return
	
|-------------------------------------------------------------------------------------
| SUB: DoWePause
|-------------------------------------------------------------------------------------
	Sub DoWePause
		/call CheckStats ${DoMACheck} "${MainAssist}" "${MAClass}" Endurance 20 90
		/call CheckStats ${DoHealerCheck} "${HealerName}" "${HealerClass}" Mana 20 90
	/return
	
|-------------------------------------------------------------------------------------
| SUB: CheckStats
|-------------------------------------------------------------------------------------
	Sub CheckStats(int statcheck, charname, ckclass, stat, int pause,int resume)
		/if (!${statcheck} || !${Spawn[${ckclass} ${charname}].ID} || ${Group.Member[${Group.Member[${Spawn[Group ${ckclass} ${charname}]}]}].Current${stat}}>${pause}) /return
		/echo Waiting for ${charname} to med up to ${resume}% ${stat}
		:wait_for_resume
		/if (${Group.Member[${Group.Member[${Spawn[Group ${ckclass} ${charname}]}]}].Current${stat}}<${resume}) /goto :wait_for_resume
	/return
 
confused

I am a little confused then... Why does it work so well for my warrior, and i have to spamm it like mad for the bard to use it, if it warps you?
 
I have noticed that you have to spam /fart form any class that does not use taunt.
 
yea other wise your just warping to them and warping back, and hoping to get aggro =)
 
is it possible to have this macro only target mobs within a certain level range?
 
Help with Fartaunt

Ok I have been reading on ways to single pull mobs I have a ranger so I have Harmonious, but I hear about fartaunt and wonder.
Is it still around?
How do you use the macro with details
and risks
I would really only use it in group situations with my friends (also Mq2 users)
and I dont bot or afk macro
Thanks a ton for any future info, I love to find things that make my EQ life a little easier after all these years : )
PEACE !!!
 
Last edited:
Ok I have been reading on ways to single pull mobs I have a ranger so I have Harmonious, but I hear about fartaunt and wonder.
Is it still around?
How do you use the macro with details
and risks
I would really only use it in group situations with my friends (also Mq2 users)
and I dont bot or afk macro
Thanks a ton for any future info, I love to find things that make my EQ life a little easier after all these years : )
PEACE !!!

Works fine but there are risks involved like with anything that involves warping copious amounts. Macro is self-explanitory just read the code a bit and learn, it'll go a long way instead of playing the guessing game at every step. You can use it in group situations but in highly crowded zones I really wouldn't recommend it when you could just type /fart yourself on your target manually.

As always, cheat smarter.
 
Thanks

ok so is there a plugin or anything just to use /Fart and I guess you warp to the target..taunt and warp back, ok thanks again Ill try it out, Love this site thanks MMO too : )
 
How could this be modified to use a target exclusion list?
 
/squelch /target npc radius ${FO_MaxPullRadius} alert 6 noalert 10

needs a noalert so it knows what mobs not to target to exclude stuff. then you use /alert add 10 NPC Fred Flintstone


or something to that effect
 
/squelch /target npc radius ${FO_MaxPullRadius} alert 6 noalert 10

needs a noalert so it knows what mobs not to target to exclude stuff. then you use /alert add 10 NPC Fred Flintstone


or something to that effect

Thanks =D
 
I used mq2melee downshits for buffs. I'm sure htw will help you when he reads it, But let him know what you want buffed.. etc
 
I think that I got it, I cut and pasted a potion buff line from here as well as a few self buff lines. I just can't figure out how to work items into the buff line.

Moose