Fixed some bugs (mainly the thing with the interface locking up from the Pick Pocket sub) and added some other features, such as chopping out 9/10 of the melee/ability error spam, and the macro will now retrieve disarmed weapons. The only issue I have with it (which is barely noticable) is the lower Evade success rate, commented on in that portion of the macro. The rest is great. Ran it for a 6 hour group in The Hole with no issues at all. As always, my macros are written organized, clean, and easy-to-read for those eager-to-learn. If you know what you're doing already, feel free to shred out the 3/4 of it that's fluff. Enjoy.
** REQUEST ** ... Disarm scripts are a bitch to debug because even with a skill of 200, it rarely goes off. I just wanted you guys to watch for a succesful disarm going off while you're running this macro, and let me know of any problems. I only got 2 off during normal play (which went through flawlessly, by the way) , which isn't really enough to thoroughly test it.
Code: Select all
|=============================================================================
|------------------------------- Rogue.mac v1.4 ------------------------------
|--------------------------- Rogue Ability Autopilot -------------------------
|-----------------------------------------------------------------------------
|--- Usage: /macro Rogue
|--- Just turn on Auto-Attack, park behind the mob. and this script
|--- will automatically execute Pick Pockets, Disarm, Evade, and
|--- Backstab everytime the Ability buttons become available, as well
|--- as dropping off any Pick Pocket'ed items or Disarmed weapons
|--- in your inventory. It will stop executing the abilities once the mob
|--- is dead, and pick back up again after you turn Auto-Attack on.
|--- Be sure to have those 4 abilities on buttons in your Ability or
|--- Combat Abilities. Must be turned off with /endmacro at your leisure.
|-----------------------------------------------------------------------------
|--- By: a_troll_01 (12/26/03)
|--- Converted by Wassup (4/22/04)
|--- Screwed up again by a_troll_01 (4/28/04)
|--- Enjoy!
|=============================================================================
#event Attack "Auto attack is on."
#event Disarm "You disarmed"
|=============================================================================
Sub Main
/declare CurrentTarget global
/declare PickPocketHP global
/declare MeleeDistance global
|-----------------------------------------------------------------------------
|-------------------- VARIABLE EXPLANATION & CONFIG --------------------------
|--- PickPocketHP: What percentage health your target must be at to stop
|--- attempting to PickPocket. Set it to '0' to chain-Pick-Pocket. I
|--- recommend setting it to 50 or 60 during groups (averaging 2 picks
|--- per mob). If you don't understand why, you need to find a new class
|--- to play.
|--- MeleeDistance: Maximum distance for you to be from your target before
|--- shutting off 'auto attack' and all Ability triggers, stopping spam.
|--- This isn't really necessary. Just set it to '500' or something if
|--- you don't mind the error spam. Personally, I'm anal about it.
|--- 'Auto Attack' & Ability execution will start back up automatically
|--- when you're with-in the set range again.
|-----------------------------------------------------------------------------
/varset PickPocketHP 40
/varset MeleeDistance 16
|-----------------------------------------------------------------------------
:MainLoop
/if (${Target.Type.Equal[NPC]}) /doevents
/goto :MainLoop
/endmacro
|=============================================================================
|-----------------------------------------------------------------------------
|--- The '/echo' command in there can be deleted. I prefer it, just to know.
|--- The '/face nolook' command has a lot of advantages, mainly MUCH easier
|--- nearly perfect 360-degree strafe'ing, and a way to quickly follow mobs
|--- that are getting ping-ponged. Try it out, and if it's not your style,
|--- delete it.
|-----------------------------------------------------------------------------
Sub Event_Attack
/echo Target is -( ${Target.CleanName} )- ... Level ${Target.Level} ${Target.Class.Name}
:SubLoop
/face nolook
/if (${Target.Type.Equal[NPC]}) {
/if (${Target.Distance}<=@MeleeDistance) {
/call Attack
/goto :SubLoop
}
}
/if (${Target.Type.Equal[NPC]}) {
/if (${Target.Distance}>@MeleeDistance) {
/attack off
/goto :SubLoop
}
}
/attack off
:End
/return
|=============================================================================
|-----------------------------------------------------------------------------
|--- I know the MQ2 gurus will say somethng about this, so let me excuse it now,
|--- This macro is written clean, easy to read, & organized so newcomers can learn
|--- the ropes of the scripting a little easier. I know the rest of this macro can
|--- be crammed into no more than 8 lines. I just do it my way.
|-----------------------------------------------------------------------------
Sub Attack
/attack on
/if (${Me.AbilityReady[Pick Pockets]}) /call Pickpocket
/if (${Me.AbilityReady[Disarm]}) /call Disarm
/if (${Me.AbilityReady[Backstab]}) /call Backstab
/if (${Me.AbilityReady[Hide]}) /call Hide
/call InvDrop
/return
|=============================================================================
|-----------------------------------------------------------------------------
|--- Earlier version of the Pick Pocket script had a huge flaw that locked up
|--- the client interface. This is fixed with the '/delay' line in there.
|--- DO NOT take it out, or the macro will misbehave.
|-----------------------------------------------------------------------------
Sub Pickpocket
/if (${Target.Type.Equal[NPC]}) {
/if (${Target.PctHPs}>=@PickPocketHP) /goto :Pick
/if (${Target.PctHPs}<@PickPocketHP) /goto :NotGreedy
}
:Pick
/attack off
/delay 1
/if (${Target.Type.Equal[NPC]}) /doability "Pick Pockets"
/if (${Target.Type.Equal[NPC]}) /attack on
:NotGreedy
/return
|=============================================================================
|-----------------------------------------------------------------------------
|--- There's a group comment in there. Delete it if you want. The Sub Event here
|--- snatches any disarmed weapons off the ground and puts them in your inventory.
|--- You'll change targets in the process, so if you're a main-assist, comment it
|--- out. If someone assists you, and sees "(generic)*36" or something as your target,
|--- you'll have some explaining to do.
|-----------------------------------------------------------------------------
Sub Disarm
/if (${Target.Type.Equal[NPC]}) /doability "Disarm"
/doevent Disarm
/return
Sub Event_Disarm
/echo You have DISARMED -( ${Target.CleanName}. )-
/g %T has been disarmed.
/varset CurrentTarget ${Target.ID}
/itemtarget
/click left item
/target ID @CurrentTarget
/return
|=============================================================================
Sub Backstab
/if (${Target.Type.Equal[NPC]}) /doability "Backstab"
/return
|=============================================================================
Sub InvDrop
/autoinv
/return
|=============================================================================
|-----------------------------------------------------------------------------
|--- As of 04/28/2004, there seems to be an issue with Evade failing more than
|--- it should, and the EQ Client reporting that you failed to hide because you
|--- moved. This is corrected better and better by raising the '/delay' here.
|--- Higher the delay (up to about 3'ish) the better your success rate.
|-----------------------------------------------------------------------------
Sub Hide
/attack off
/delay 1
/doability "Hide"
/if (${Target.Type.Equal[NPC]}) /attack on
/return
|=============================================================================
Clean Version, No Fluff (I didn't test this, just kind'a tore the above apart real fast):
Code: Select all
| Rogue.mac v1.4
| By: a_troll_01 (12/26/03)
| Converted by Wassup (4/22/04)
| Updated by a_troll_01 (4/28/04)
#event Attack "Auto attack is on."
#event Disarm "You disarmed"
Sub Main
/declare CurrentTarget global
/declare PickPocketHP global
/declare MeleeDistance global
/varset PickPocketHP 40
/varset MeleeDistance 16
:MainLoop
/if (${Target.Type.Equal[NPC]}) /doevents
/goto :MainLoop
/endmacro
Sub Event_Attack
:SubLoop
/face nolook
/if (${Target.Type.Equal[NPC]}) {
/if (${Target.Distance}<=@MeleeDistance) {
/call Attack
/goto :SubLoop
}
}
/if (${Target.Type.Equal[NPC]}) {
/if (${Target.Distance}>@MeleeDistance) {
/attack off
/goto :SubLoop
}
}
/attack off
/return
Sub Attack
/attack on
/if (${Me.AbilityReady[Pick Pockets]}) /call Pickpocket
/if (${Me.AbilityReady[Disarm]}) /call Disarm
/if (${Me.AbilityReady[Backstab]}) /doability "Backstab"
/if (${Me.AbilityReady[Hide]}) /call Hide
/autoinv
/return
Sub Pickpocket
/if (${Target.Type.Equal[NPC]}) {
/if (${Target.PctHPs}>=@PickPocketHP) /goto :Pick
/if (${Target.PctHPs}<@PickPocketHP) /goto :NotGreedy
}
:Pick
/attack off
/delay 1
/if (${Target.Type.Equal[NPC]}) /doability "Pick Pockets"
/if (${Target.Type.Equal[NPC]}) /attack on
:NotGreedy
/return
Sub Disarm
/if (${Target.Type.Equal[NPC]}) /doability "Disarm"
/doevents
/return
Sub Event_Disarm
/varset CurrentTarget ${Target.ID}
/itemtarget
/click left item
/target ID @CurrentTarget
/return
Sub Hide
/attack off
/delay 2
/doability "Hide"
/if (${Target.Type.Equal[NPC]}) /attack on
/return




