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
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