basic afk xp macro that works on zippzipp's emu

rob

Super Trooper
Joined
Dec 26, 2008
Messages
1,281
Reaction score
1
Points
38
Location
Los Angeles
Everyone looking to level up on Zippzipp's, feel free to try this mac out. It works great. got me to 65 + 500 AAs. Please do not steal my xp spot...not that i will need it much longer i guess.

anyways, it's really basic so you can customize it pretty easily.

Code:
|
| rob's afk exp hunter killer
|
| v0.1

#event Exp "You gain experience!!"
#event Exp "You gain party experience!!"
#event Exp "You gain raid experience!!"
#event RELOAD "#*#did not recieve expected ping from#*#"
#event RELOAD "#*#Could not connect.#*#"
#event RELOAD "#*#You are not connected. Please use#*#" 




sub Main

	| customize these
	/declare TARGET_ARGS string outer npc broken
	
	| do not fiddle with these
	/declare TargetID float outer
	/declare IN_COMBAT float outer 0
	/declare xtargcount int outer 0
	/declare Exper 			float outer  0
	/declare AAExp 			float outer
	/varset AAExp ${Math.Calc[${Me.PctAAExp}-${AAExp}]}
	/varset Exper ${Math.Calc[${Me.PctExp}-${Exper}]} 
	
	/if (!${EQBC.Connected}) {
		/echo You are not connected to EQBC.
		/echo What you've just said is one of the most insanely idiotic things I have ever heard. At no point in your rambling, incoherent response were you even close to anything that could be considered a rational thought. Everyone in this room is now dumber for having listened to it. I award you no points, and may God have mercy on your soul
		/endmac
	}

	:mainloop

	/doevents
	/if (${Me.XTarget} && !${TargetID}) /call killADD
	/if (!${TargetID} && ${Me.PctHPs} > 50 && !${Me.XTarget}) /call getTarget
	/delay 1s
	/if (${Me.XTarget} && !${TargetID} && !${IN_COMBAT}) /call killADD
	/if (${TargetID} && !${Me.XTarget}) /call pullmob
	/if (${TargetID} && ${Me.XTarget} && !${IN_COMBAT}) /call killmob
	/delay 1s
	/if (${TargetID} && ${Me.XTarget}) /call killmob
	/delay 1s
	/if (${Me.PctHPs} < 80 && !${IN_COMBAT} && !${Me.XTarget}) /sit
	/goto :mainloop

/return

sub pullmob

	/fart
	/bca //target id ${TargetID}
	/bca //fart

/return

sub killmob
	/if (${IN_COMBAT}) /return
	/if (!${TargetID}) /return
	/target id ${TargetID}
	
	:waitfortarget
	/echo waiting for target
	/fart
	/if (${Target.Distance} < 50 && ${Target.LineOfSight}) {
		/varset IN_COMBAT 1
		/face fast
		/stand
		/killthis
		/attack
		/bca //stand
		/bca //target id ${Target.ID}
		/bca //warp t
		/bca //killthis
		/return
	}
	/delay 1s
	/if (!${TargetID} || !${Target.ID}) /return
	/goto :waitfortarget
}

sub killADD

	/for xtargcount 1 to 5
		/if (${Me.XTarget[${xtargcount}].ID}) {
			/target id ${Me.XTarget[${xtargcount}].ID}
			/varset TargetID ${Me.XTarget[${xtargcount}].ID}
			/echo got an add, killing it (id: ${Me.XTarget[${xtargcount}].ID})
	|		/varset IN_COMBAT 1
			/call killmob
			/return
		}
	/next xtargcount
	/call getTarget
/return

sub getTarget
	/echo in gettarget and doing /target ${TARGET_ARGS}
	/target ${TARGET_ARGS}
	/varset TargetID ${Target.ID}
/return



sub Event_RELOAD
	/echo BCS SERVER DIED, ATTEMPT TO RESTART
	/delay 5s
	/squelch /bccmd quit
	/delay 5s
	/squelch /bccmd connect
/return 

Sub Event_Exp

	/varset AAExp ${Math.Calc[${Me.PctAAExp}-${AAExp}]} 
	/varset Exper ${Math.Calc[${Me.PctExp}-${Exper}]} 
	/echo EXP: ${Exper} (${Me.PctExp}%) - AAXP: ${AAExp} (${Me.PctAAExp}%) 
	/popup ${Exper} (${Me.PctExp}%) - AAXP: ${AAExp} (${Me.PctAAExp}%) 
	/varset Exper ${Me.PctExp} 
	/varset AAExp ${Me.PctAAExp}
	/varset TargetID 0
	/varset IN_COMBAT 0
	/bca //sit
	/sit
/return

not the cleanest or best, but pretty darn effective.

it assumes you have /fartaunt and eqbc up with a client with mq2melee loaded.
 
I leveled in the hole, but this could work anywhere really. Just change the target at the top of what you want to kill and it will fartaunt the mob. it should handle adds too.
 
Ah I just wasn't seeing the macro... was using a different forum theme.. and it wasn't showing up.. all good now :) I'll check it out. Thanks!
 
This was done with 2 boxes in 1 group. The use of eqbc allows for it to scale out to as many boxes as you want, though. it will issue /bca //killthis commands which if mq2melee is configured, will start attacking. Any server bots you have will join in on the fun as well.

On my second bot i have a macro that relays guild chat to #mmoguild on the irc server. He messages me when he gets an AA. This is the rate that a full group gets AAs (2 boxes, 4 bots):

11:58 <mmoguild> DING! I have 1 unspent!
12:02 <mmoguild> DING! I have 2 unspent!
12:06 <mmoguild> DING! I have 3 unspent!
12:12 <mmoguild> DING! I have 4 unspent!
12:16 <mmoguild> DING! I have 5 unspent!
12:21 <mmoguild> DING! I have 6 unspent!
 
I use isboxer myself, I've never had the patience to read through that plugin and figure it all out /
 
Thanks for the macro! I did tweak it a little and add in a /if command that if the NPCs hit points are above 30%, it will cast the spell in slot #1. The higher of my two toons is a mag, so I really wanted the toon to use it's potential.

Rob - if you can find a better way to add it in then where I placed it, please let me know! Also, if there is a way for the macro to check the mana on the bot, pause for a few seconds, then continue... that would be awesome. my coding skill is next to nothing so I dare not attempt it.

Thank you!

Code:
|
| rob's afk exp hunter killer
|
| v0.1

#event Exp "You gain experience!!"
#event Exp "You gain party experience!!"
#event Exp "You gain raid experience!!"
#event RELOAD "#*#did not recieve expected ping from#*#"
#event RELOAD "#*#Could not connect.#*#"
#event RELOAD "#*#You are not connected. Please use#*#" 




sub Main

	| customize these
	/declare TARGET_ARGS string outer npc a
	
	| do not fiddle with these
	/declare TargetID float outer
	/declare IN_COMBAT float outer 0
	/declare xtargcount int outer 0
	/declare Exper 			float outer  0
	/declare AAExp 			float outer
	/varset AAExp ${Math.Calc[${Me.PctAAExp}-${AAExp}]}
	/varset Exper ${Math.Calc[${Me.PctExp}-${Exper}]} 
	
	/if (!${EQBC.Connected}) {
		/echo You are not connected to EQBC.
		/echo What you've just said is one of the most insanely idiotic things I have ever heard. At no point in your rambling, incoherent response were you even close to anything that 

could be considered a rational thought. Everyone in this room is now dumber for having listened to it. I award you no points, and may God have mercy on your soul
		/endmac
	}

	:mainloop

	/doevents
	/if (${Me.XTarget} && !${TargetID}) /call killADD
	/if (!${TargetID} && ${Me.PctHPs} > 50 && !${Me.XTarget}) /call getTarget
	/delay 1s
	/if (${Me.XTarget} && !${TargetID} && !${IN_COMBAT}) /call killADD
	/if (${TargetID} && !${Me.XTarget}) /call pullmob
	/if (${TargetID} && ${Me.XTarget} && !${IN_COMBAT}) /call killmob
	/delay 1s
	/if (${TargetID} && ${Me.XTarget}) /call killmob
	/if (${Target.PctHPs} > 30 && ${IN_COMBAT}) /cast 1
	/delay 1s
	/if (${Me.PctHPs} < 80 && !${IN_COMBAT} && !${Me.XTarget}) /sit
	/goto :mainloop

/return

sub pullmob

	/fart
	/bca //target id ${TargetID}
	/bca //fart

/return

sub killmob
	/if (${IN_COMBAT}) /return
	/if (!${TargetID}) /return
	/target id ${TargetID}
	
	:waitfortarget
	/echo waiting for target
	/fart
	/if (${Target.Distance} < 50 && ${Target.LineOfSight}) {
		/varset IN_COMBAT 1
		/face fast
		/stand
		/killthis
		/attack
		/bca //stand
		/bca //target id ${Target.ID}
		/bca //warp t
		/bca //killthis
		/return
	}
	/delay 1s
	/if (!${TargetID} || !${Target.ID}) /return
	/goto :waitfortarget
}

sub killADD

	/for xtargcount 1 to 5
		/if (${Me.XTarget[${xtargcount}].ID}) {
			/target id ${Me.XTarget[${xtargcount}].ID}
			/varset TargetID ${Me.XTarget[${xtargcount}].ID}
			/echo got an add, killing it (id: ${Me.XTarget[${xtargcount}].ID})
	|		/varset IN_COMBAT 1
			/call killmob
			/return
		}
	/next xtargcount
	/call getTarget
/return

sub getTarget
	/echo in gettarget and doing /target ${TARGET_ARGS}
	/target ${TARGET_ARGS}
	/varset TargetID ${Target.ID}
/return



sub Event_RELOAD
	/echo BCS SERVER DIED, ATTEMPT TO RESTART
	/delay 5s
	/squelch /bccmd quit
	/delay 5s
	/squelch /bccmd connect
/return 

Sub Event_Exp

	/varset AAExp ${Math.Calc[${Me.PctAAExp}-${AAExp}]} 
	/varset Exper ${Math.Calc[${Me.PctExp}-${Exper}]} 
	/echo EXP: ${Exper} (${Me.PctExp}%) - AAXP: ${AAExp} (${Me.PctAAExp}%) 
	/popup ${Exper} (${Me.PctExp}%) - AAXP: ${AAExp} (${Me.PctAAExp}%) 
	/varset Exper ${Me.PctExp} 
	/varset AAExp ${Me.PctAAExp}
	/varset TargetID 0
	/varset IN_COMBAT 0
	/bca //sit
	/sit
/return
 
Last edited:
this is too much fun

ohh... harder with warping due to mobs below ground... this might take some work. =)
 
Last edited:
Like all macs i've ever written this has been evolving. I've made the following changes:

Uses alert/noalert for which mobs to fartaunt
warps back to camp (and brings all in eqbc with it)

I'm currently demolishing tactics with this macro but I run into a very common problem. i kill faster than the npcs respawn. I think I'll combat this by putting in two camps. When ${SpawnCount[alert 0 noalert1 radius 500} returns 0 mobs, i'll warp to camp 2 and start killing again.

If I can do this, the mac will generate ~ 50-60 AAs / hr for almost 500 over night. At this point i have over 1k AAs banked, but I am still farming the bricks and silk things for elemental gear. I'll post the updated mac later tonight or tomorrow.

MMOBugs guild > *
 
nice Rob, can't wait to see it. Been having a good enough time with the original
 
It's dying a lot due to mobs being under the world. I need to work on it some more.
 
could add some kind of zradius check? or are they just slightly below.
 
Does the new macro loot, or does anyone have a macro that will loot corpses as part of it?
 
mine does. i'm farming elemental mats for the guild now with it. it currently uses advloot and destroys everything but diamonds, bricks of ethereal awesome, and silk ethereal awesomes.

Also, i'm not sure what my group is doing. Sometimes I end up with raid loot. I'm thinking I may be killing raid mobs when i'm not looking.
 
I wrote this one up last night, it cleared out PoI flawlessly. It's set up to kill npcs level 60 to 51. Warps to target, summons bot, kills it, repeats.

Code:
Sub Main
:more
/if (!${Target.ID} && ${Me.PctHPs} > 50 ) /call GetTarget
/if (${Target.ID}) /call PullMob
/if (${Me.Combat}) /call KillMob
/goto :more


Sub GetTarget
/if (${Me.Combat}) {
	/target npc
	/delay 3
	/return
	}
/target npc 60
/delay 2
/if (${Target.ID}) /return
/target npc 59
/delay 2
/if (${Target.ID}) /return
/target npc 58
/delay 2
/if (${Target.ID}) /return
/target npc 57
/delay 2
/if (${Target.ID}) /return
/target npc 56
/delay 2
/if (${Target.ID}) /return
/target npc 55
/delay 2
/if (${Target.ID}) /return
/target npc 54
/delay 2
/if (${Target.ID}) /return
/target npc 53
/delay 2
/if (${Target.ID}) /return
/target npc 52
/delay 2
/if (${Target.ID}) /return
/target npc 51
/delay 2
/if (${Target.ID}) /return
/return



Sub PullMob
:again
/if (${Target.Distance}<50) {
	/call KillMob
	/return
	}
/if (${Target.Distance}>50) {
	/warp t
	/delay 1s
	/say #bot group summon ${Me.Name}
	/goto :again
	}
/if (${Me.Combat}) /return
/if (!${Target.ID}) /return
/return

Sub KillMob
/if (${Target.Type.Equal[corpse]}) /keypress esc
/if (${Target.Distance}<50) {
	/killthis
	/attack
	:wait
	/delay 2s
	/if (${TargetID}) /goto :wait
	/return
}
/return

Heres one with loot code, requires mq2advloot loaded

Code:
Sub Main
:more
/if (!${Target.ID} && ${Me.PctHPs} > 50 ) /call GetTarget
/if (${Target.ID}) /call PullMob
/if (${Me.Combat}) /call KillMob
/goto :more


Sub GetTarget
/if (${Me.Combat}) {
	/target npc
	/delay 3
	/return
	}
/target npc 60
/delay 2
/if (${Target.ID}) /return
/target npc 59
/delay 2
/if (${Target.ID}) /return
/target npc 58
/delay 2
/if (${Target.ID}) /return
/target npc 57
/delay 2
/if (${Target.ID}) /return
/target npc 56
/delay 2
/if (${Target.ID}) /return
/target npc 55
/delay 2
/if (${Target.ID}) /return
/target npc 54
/delay 2
/if (${Target.ID}) /return
/target npc 53
/delay 2
/if (${Target.ID}) /return
/target npc 52
/delay 2
/if (${Target.ID}) /return
/target npc 51
/delay 2
/if (${Target.ID}) /return
/return



Sub PullMob
:again
/if (${Target.Distance}<50) {
	/call KillMob
	/return
	}
/if (${Target.Distance}>50) {
	/warp t
	/delay 1s
	/say #bot group summon ${Me.Name}
	/goto :again
	}
/if (${Me.Combat}) /return
/if (!${Target.ID}) /return
/return

Sub KillMob
/if (${Target.Type.Equal[corpse]}) /keypress esc
/if (${Target.Distance}<50) {
	/killthis
	/attack
	:wait
	/delay 2s
	/if (${Target.ID}) /goto :wait
	/call Loot
	/return
}
/return

Sub Loot
/target npc corpse
/delay 3s
/if (${Target.Type.Equal[corpse]}) {
	/advloot
	/delay 3s
	/target clear
	}
/return
 
I have this in my Sub Event_Exp function now:
Code:
	/if (!${Me.XTarget}) {
		:loot
		/target corpse radius 100
		/advloot lootall 100

		/delay 1
		/if (${AdvLoot.Active}) /goto :loot
	}
it could be cleaned up a bit so it actually tries to verify you're targeting a corpse before looting, heh.

Edit:

Also, I'm planning on re-writing a good portion of htis as the logic is all over the place. I'll probably incorporate netbots for boxers (like myself) to know if someone is in combat with ${NetBots[Tankname].CombatState} or something.

Edit 2:

I'm also incorporating alert for who I intentionally target. Something like tihs:

Code:
	/alert add 0 npc "elite"
	/alert add 0 npc "flayer"
	/alert add 0 npc "darkblade"
	/alert add 0 npc "blademaster"
	/alert add 0 npc "hendin shadow master"
	/alert add 0 npc "Decorin"
	/alert add 1 npc Berik
	/alert add 1 npc Grunhork

instead of /target ${TARGET_ARGS} use:

/target npc alert 0 noalert 1