• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Redguides Listing of Confirmed Macros Post 10/2005

Status
Not open for further replies.

soultaker

Member
Joined
Feb 2, 2005
RedCents
60¢
Still in Progress

***NOTE*** This is a listing of confirmed macros on this site. Please feel free to post questions in the questions section and list updates in the Strategies section. But for the purpose of this post this is an attempt to make it easier to locate and use these macros.

If your Macro is listed here it is because it serves a purpose for the community. Macros once posted here in the archive may be updated from time to time, but go to the original link to seek updated code or send a PM to the code author. If any author does not want their code posted send me a PM and it will be removed from the archive list.

How to use the code listed in this section: open a notepad file, copy the code below, and save it as name.mac in your macroquest/release/macros folder where name.mac is the name of the macro. Example: target.mac

Each Macro will be listed in this thread as a new posting this way to give the macros some separation. If you wrote one of these macros and would like further instructions posted or have an update for it PM myself and I will make the corrections as needed.

Here is a good break down on Macros to help you write your own posted by LordMage:
http://www.redguides.com/community/showthread.php?t=754

Below is a listing and links to each thread the macros come from. Incase you wish to view the thread first.

***
Working Macros Super Thread [font=&quot]Maintained by Siddin ***[/font]

1. Relic Dragons Macro ( Tsikut, Ashenback, Shar`Drahn )
2. Rikkukin Macro
3. The Great Caiman
4. Sseru Exp Macro
5. The Feerrott, Chest Macro
6. Poi AFK Beastlord xp
7. Fully Automated Skylance Laboratory Macro
8. Daosheen Macro
9. Safetynet
10. Smart Ganking
11. DKP log updating macro
12. Pettoys
13. Modified version of AFKnecro.mac, by EQBotMan
14. Summoning pets Setup
15. Basic
16. nechunter
17. Natimbi Hunter Mac
18. Simplesham do my bidding
19. Shroud XP while AFK
20. Search Bazaar for Tribute Items
21. Vxed Macro -From the underground- Auto loot corpse - Sustained EXP
22. Hides
23. skhunter mac
24. FH - Revisted
25. Sacrifice BOTS
26. BardBot. Anchor Point, twist, kill goto home anchor. (simple)
27. NO-WARP - Reworked FHbard - FHhealer - FHPet- FHloot - FHLeech
28. Arcstone, Isle of Spirits
29. alcemy potion macro
30. Med to full, then camp
31. Chantkite Chardokb
32. Add Player to Exsisting Tank/Healer Macros -- Extra DPS-Exp Leech
33. Vishimitar Macro
34. Tell Handler
35. AFK Zerker(or tank) / Shammy - Plane of Valor Macro
36. Puller/Healer Mod
37. Plane of Justice Macro Redone...Melee-Waypoints-playercheck
38. Tank Macro
39. Tailoring
40. Shaman slow/heal/dot... well you get the picture
41. Enchanter, Cleric, and Druid Mac's
42. Necro group macro
43. Red Wine/Muffins Turnin (warp and buy more)
44. Kaladim Shroom Ganking
45. Macro: HoH.mac (KiteShit for Halls of Honor)
46. Beg Macro
47. Powerlevel.mac revised for shaman use
48. looting your own corpse
49. Ranger Macro
50. AFK Powerlevel Macro (Non Bard)
51. Guildlobby corpse summon.mac
52. Monk Helper
53. LandCall_Shaman
54. CmpRaid2Exp.mac (Compare Raid to Expedition)
55. afk melee skils trainer for when a pet class is not available
56. Crystane's FairyMM Leechbot (nerfed but great code)
57. Sabotage! (Hard) (nerfed But great code)
58. druid healer macro
59. HHK assist macro
60. Wait4rez
61. Ranger Haste Cloak Macro
62. ForageAA.mac
63. Quillmane the second
64. Potion Vendor Bot macro
65. Macro: AESize.mac (for MQ2Size)
66.
Hatchet Macro
67. Pickpocket Mac
 
Re: Redguides Listing of Confirmed Macros

Relic Dragons Macro ( Tsikut, Ashenback, Shar`Drahn ) by Devlin

See original Posting for Further instructions or updates

This macro is for when these three dragons emote directional AE's and then announces it in the raid.

Rich (BB code):
 #Event TsikutRight "#*#Tsikut raises her right arm, preparing to rake her enemies.#*#"
#Event TsikutFront "#*#Tsikut rears back and inhales, preparing to unleash a cone of ice.#*#"
#Event TsikutBack "#*#Tsikut begins to lash her tail, preparing to attack the pests behind her.#*#"
#Event TsikutLeft "#*#Tsikut raises her left arm, preparing to rake her enemies.#*#"
#Event SharRight "#*#Shar`Drahn raises his right arm, preparing to rake his enemies.#*#"
#Event SharFront "#*#Shar`Drahn rears back and inhales, preparing to unleash a cone of tempest ice.#*#"
#Event SharBack "#*#Shar`Drahn begins to lash his tail, preparing to attack the pests behind him.#*#"
#Event SharLeft "#*#Shar`Drahn raises his left arm, preparing to rake his enemies.#*#"
#Event AshenRight "#*#Ashenback raises his right arm, preparing to rake his enemies.#*#*
#Event AshenFront "#*#Ashenback rears back and inhales, preparing to unleash a cone of ice.#*#"
#Event AshenBack "#*#Ashenback begins to lash his tail, preparing to attack the pests behind him.#*#"
#Event AshenLeft "#*#Ashenback raises his left arm, preparing to rake his enemies.#*#"


|Dragon.mac -Devlin
|This Macro will announce to you and the raid you're in what emotes are going off and what to do

Sub Main
:loop
     /doevents
/goto :loop


-------------------------------------
Tsikut                                           
-------------------------------------
Sub Event_TsikutRight
	/popup Move away from her RIGHT side!
        /rs RIGHT AE
/return

Sub Event_TsikutFront
	/popup Move away from her FRONT side!
        /rs FRONT AE
/return

Sub Event_TsikutBack
	/popup Move away from her BACK side!
        /rs BACK AE
/return

Sub Event_TsikutLeft
	/popup Move away from her LEFT side!
        /rs LEFT AE
/return

-------------------------------------
Shar`Drahn
-------------------------------------
Sub Event_SharRight
	/popup Move away from his RIGHT side!
        /rs RIGHT AE
/return

Sub Event_SharFront
	/popup Move away from his FRONT side!
        /rs FRONT AE
/return

Sub Event_SharBack
	/popup Move away from his BACK side!
        /rs BACK AE
/return

Sub Event_SharLeft
	/popup Move away from his LEFT side!
        /rs LEFT AE
/return

-------------------------------------
Ashenback
-------------------------------------
Sub Event_AshenRight
	/popup Move away from his RIGHT side!
        /rs RIGHT AE
/return

Sub Event_AshenFront
	/popup Move away from his FRONT side!
        /rs FRONT AE
/return

Sub Event_AshenBack
	/popup Move away from his BACK side!
        /rs BACK AE
/return

Sub Event_AshenLeft
	/popup Move away from his LEFT side!
        /rs LEFT AE
/return
 
Re: Redguides Listing of Confirmed Macros

Rikkukin Macro by Delvin

http://www.redguides.com/community/showthread.php?t=12052

This macro is for Rikkukin's Directional AE's-- It will announce and notify you as to what he's about to do


Rich (BB code):
 #Event RikkLeft "#*#Rikkukin pulls his left arm back, preparing to swathe through his opponents with razor sharp claws. #*#"
#Event RikkRight "#*#Rikkukin pulls his right arm back, preparing to swathe through his opponents with razor sharp claws. #*#"
#Event RikkFront "#*#Rikkukin rears back and fills his lungs, preparing to exhale a cone of ice.#*#"
#Event RikkBack "#*#Rikkukin twirls his tail, preparing to swat away those foolish enough to take up position behind him.#*#"
#Event RikkBlind "#*#Rikkukin twists his body so that the ambient light starts to reflect from his silvery scales.#*#"
#Event RikkReflect "#*#Rikkukin's skin seals over with a caustic sheet of malleable ice.  The protection will soon make him impervious to melee and magical attacks.#*#"

|Rikkukin.mac -Devlin
|This Macro will announce to you and the raid you're in what emotes are going off and what to do

Sub Main
:loop
 /doevents
/goto :loop

-------------------------------------
Rikkukin                                         
-------------------------------------
Sub Event_RikkLeft
	/rs LEFT AE
	/popup Move away from his LEFT side!
/return

Sub Event_RikkRight
	/rs RIGHT AE
	/popup Move away from his RIGHT side!
/return

Sub Event_RikkFront
	/rs FRONT AE
	/popup Move away from his FRONT side!
/return

Sub Event_RikkBack
	/rs BACK AE
	/popup Move away from his BACK side!
/return

Sub Event_RikkBlind
	/rs BLIND AE-- LOOK AWAY
	/popup Attempting to load NoBlind!
             /docrack NoBlind on
/return

Sub Event_RikkReflect
	/rs REFLECT IS ON--ATTACK OFF--NO CASTING!
	/popup Turn Attack off and stop casting!
/return
 
Re: Redguides Listing of Confirmed Macros

The Great Caiman 1.0 by Crystane

http://www.redguides.com/community/showthread.php?t=12130

first of all this is really..... no REALLY slow exp, dont do it hehe.
Why I post it, because I got asked polite, if am able to write such,
and yes I am. Actually I didnt think it would be that easy. Thx for all
the info provided by jstbilly.

How to get started:
-Go to South Ro and to the beach in the east.
-Start it.

This is a kinda fire and forget macro, it shuts down if it encounters any problems.
Know problems: Some mobs run into zoneline to North Ro hehe.
Enjoy Crystane.

Rich (BB code):
|The Great Caiman 1.0 by Crystane for www.redguides.com
|Requires plugin mq2moveutils.dll
|Requires Expansion PoR / gives 1.5% AA exp per turn
|The Author recommends an Enduring Breath item while doing this task.

#turbo 20
#include spell_routines.inc 
#include move.inc

#Chat say
#Event Assigned "You have been assigned the task 'The Great Caiman Issue'."
#Event KillFinish "Your task 'The Great Caiman Issue' has been updated."
#Event TaskFinish "You have cleared the beach for Dimbwicket have helped the great city of Freeport!"
#Event CaimanKill "You have slain#*#caiman!"
#Event Toofaraway "Your target is too far away, get closer!"

Sub Main

/declare Taskrequestcounter int outer 0
/declare Taskactive outer FALSE
/declare Killsdone outer FALSE
/declare UpdateCounter int outer 0
/declare KillCounter int outer 0
/declare ToofarawayCount int outer
/declare n int outer

:GetTaskloop
/cleanup
/call MoveToLoc 2478 -2657
/target ${NearestSpawn[Dimbwicket NPC]}
/if (${NearestSpawn[Dimbwicket NPC].Distance}>50) {
	/echo Dimbwicket is not where he is supposed to be, ending this.
	/end
}
/stick 15
/delay 1s
/stick off
/h
:notyet
/varcalc Taskrequestcounter ${Taskrequestcounter}+1
/if (${Taskrequestcounter}>3) {
	/echo Too many failed requests. Ending this.
	/end
}
/say clear the beach
/delay 2s ${Window[TaskWnd].Open}
/if (${Window[TaskWnd].Open}) {
	/doevents Assigned
	/if (!${Taskactive}) {
		/goto :notyet
	} else {
		/varset Taskrequestcounter 0
	}
	/cleanup
} else {
	/goto :notyet
}
:Killloop
/if (${SpawnCount[Caiman NPC]}>0) {
	/call KillCaiman
	/doevents KillFinish
} else {
	/call KillCroco
}
/for n 1 to 16
/doevents KillFinish
/next n
/doevents CaimanKill
/if (!${Killsdone}) /goto :Killloop
/cleanup
/call MoveToLoc 2478 -2657
/target ${NearestSpawn[Dimbwicket NPC]}
/stick 15
/delay 1s
/stick off
/hail
/delay 20s
/delay 2m ${NearestSpawn[Dimbwicket NPC].Distance}<50
/call Reset
/goto :GetTaskloop
/return

sub KillCaiman
/call MoveToLoc ${NearestSpawn[caiman NPC].Y} ${NearestSpawn[caiman NPC].X}
/target ${NearestSpawn[caiman NPC]}
/stick 10
/attack on
/declare i int local
/declare j int local
/for i 1 to 12
/delay 10s !${Target.ID} || ${Target.Type.Equal[PC]} || !${Target.Name.Find[caiman]}
/for j 1 to 15
/doevents Toofaraway
/next j
/next i
/cleanup
/return

sub KillCroco
/call MoveToLoc ${NearestSpawn[crocodile NPC].Y} ${NearestSpawn[crocodile NPC].X}
/target ${NearestSpawn[crocodile NPC]}
/stick 10
/attack on
/declare i int local
/declare j int local
/for i 1 to 12
/delay 10s !${Target.ID} || ${Target.Type.Equal[PC]} || !${Target.Name.Find[crocodile]}
/for j 1 to 15
/doevents Toofaraway
/next j
/next i
/cleanup
/return

sub Reset
/doevents flush
/varset Taskrequestcounter 0 
/varset Taskactive FALSE
/varset Killsdone FALSE
/varset UpdateCounter 0
/varset KillCounter 0
/varset ToofarawayCount 0
/return

sub Event_Assigned
/varset Taskactive TRUE
/return

sub Event_KillFinish
/varcalc UpdateCounter ${UpdateCounter}+1
/echo Updatecount: ${UpdateCounter}
/if (${UpdateCounter}>=15) /varset Killsdone TRUE
/return

sub Event_CaimanKill
/if (${Taskactive}) /varcalc KillCounter ${KillCounter}+1
/echo KillCounter: ${KillCounter}
/if (${KillCounter}>=15) /varset Killsdone TRUE
/return

Sub Event_Toofaraway
/varcalc ToofarawayCount ${ToofarawayCount}+1
/if (${ToofarawayCount}>15) {
	/varset ToofarawayCount 0
	/squelch /target clear
}
/return
 
Re: Redguides Listing of Confirmed Macros

Sseru Exp Macro by Minen

http://www.redguides.com/community/showthread.php?t=11880&page=1&pp=15

Must be in SSeru. This little macro will give you XP, it's free and slow (verrry slow at high levels)
It also raises faction with lord seru (and kills many others including some shadowhaven factions). took about 2 hours to get from 11 to 16. Like i said not blazing fast XP, but it's free :P .

You need the mq2hail plugin for this macro to work. Also you need to be parked by ontu in Sanctus seru.


See thread for code there have been numerous updates by many other members of the comunity. Be sure to read over each page of the thread for the updates.
 
Re: Redguides Listing of Confirmed Macros

The Feerrott, Chest Macro by Devlin

http://www.redguides.com/community/showthread.php?t=12055

This is a small macro that can gain you some AFK exp... It wasn't much, but hey-- You can run it afk!


Rich (BB code):
 |Chest.mac -Devlin
|You need mq2copen for this to work

Sub Main
:chest
/call Checks
/call Open
/goto :Chest
/return



|--------------------------------------------------|
| Checks for GM's and Players                                     
|--------------------------------------------------|
Sub Checks 

:check

/if (${SpawnCount[pc radius 200]}>1) { 
     /echo Player is close...
     /echo Pausing the Macro until they leave... 
     /afk Went to go get beer, brb
     /delay 5s
     /goto :check
} 
/if (${Spawn[gm].ID}) { 
     /echo GM has entered the zone!
     /popup [GM IN ZONE, PAUSING MACRO UNTIL THEY LEAVE]
     /beep
     /afk Brb, Went to go get some food!
     /delay 5s
     /goto :check
} 
 /doevents next
 /return 



|--------------------------------------------------|
|Opens the Chests        
|--------------------------------------------------|
Sub Open

/declare i int local
/delay 1s
/for i 1 to 3
		/target caravan_chest next
		/if (${Target.ID}) {
				/delay 0.5s
				/open
				/delay 0.5s
				/echo Chest${i} finished.
		}
/next i
/echo Done Opening the Three Chests, Enjoy your exp.. Pausing until they respawn
/delay 15m
/return
 
Re: Redguides Listing of Confirmed Macros

Poi AFK Beastlord xp modified by ac1dgenocide
original author not listed

http://www.redguides.com/community/showthread.php?t=11863

old macro i used to use way back when pop was pretty popular, at lvl 65 was a few AA every night, then when cap got to lvl 70 at lvl 70 the xp was shitty like 2-3 AA A night I think. Lower the lvl the better the xp....

I didn't write this but its old and still a bit useful so
before this new expansion comes out and cap is lvl 75 and all mobs in poi will be green you can use this a bit.

***NOTE***:You WILL need to edit spells according to what you have/don't have.
***NOTE***:You WILL need to make a file called HunterLoot.ini and HunterMob.ini (I think i'm not sure post here if you have problems
Rich (BB code):
 |This is THE macro i wrote to make Beastlord solo clockworks in PoI near behmoth.....
|to get it to work you need to park the pet in the middle of the room in front of the blue thing....
|then park the beastlord in the VERY corner of the wall, you also need to equip a good 2hb on...
|h2h weaps will push too much...the main thing here is because of the pushing...if the pushing is
|messed up then you will get summoned around the room...get adds ...then die
|      
|------------------------------------------------------------------------------------ 
#include spellcast.inc
#turbo 40
#turbo 10 

Sub Main 





   |------------------------------------------------------------ 
   |How many times should aquire target fail before delaying? 
   |------------------------------------------------------------ 
   /declare RV_FailMax          int outer  3000 
   |------------------------------------------------------------ 
   |How far would you like to target a mob? 
   |------------------------------------------------------------ 
   /declare RV_MaxRadius        int outer  130
   |------------------------------------------------------------ 
   |How far is the combat range? 
   |------------------------------------------------------------ 
   /declare RV_Range            int outer 120 
   |------------------------------------------------------------ 
   |What is the minimum Z Value of mobs I should target? 
   |------------------------------------------------------------ 
   /declare RV_MinZRange        int outer  -1000 
   |------------------------------------------------------------ 
   |What is the maximum Z Value of mobs I should target? 
   |------------------------------------------------------------ 
   /declare RV_MaxZRange        int outer  1000 
   |------------------------------------------------------------ 
   |Should I loot all items? 
   |------------------------------------------------------------ 
   /declare RV_LootAllItems     int outer  0 
   |------------------------------------------------------------ 
   |Should I display stats? 
   |------------------------------------------------------------ 
   /declare RV_DisplayStats     int outer  1 

   |------------------------------------------------------------ 
   |Loot Array Information. 
   |------------------------------------------------------------ 
   /call ReadINI HunterMob.ini "${Zone.Name}" Mob 
   /if (!${Defined[RV_MobArray]}) { 
      /echo Mob Array Creation Error, ending macro... 
      /endmacro 
   } 

   |------------------------------------------------------------ 
   |Mob Array Information. 
   |------------------------------------------------------------ 
   /call ReadINI HunterLoot.ini "${Zone.Name}" Loot 
   /if (!${Defined[RV_LootArray]}) { 
      /echo No Loot Array Created... 
   } 

   |------------------------------------------------------------ 
   |Variables that you don't need to worry about. 
   |------------------------------------------------------------ 
   /declare RV_FailCounter      int outer  0 
   /declare RV_MyTargetID       int outer  0 
   /declare RV_MyTargetName     string outer 
   /declare RV_MyTargetDead     int outer  0 
   /declare RV_InvalidTargetID  int outer  0 
   /declare RV_HasTarget        int outer  0 
           
   /declare RV_LootSlot         int outer  0 
   /declare RV_CheckLook        int outer  0 
   /declare RV_Fighting         int outer  0 
   /declare RV_TargetDead       int outer  0 
   /declare RV_MyXLOC           int outer  0 
   /declare RV_MyYLOC           int outer  0 
    
   /declare RV_FastRange        int outer 
   /declare RV_RangeMax         int outer 
   /declare RV_RangeMin         int outer 
   /varcalc RV_FastRange ${RV_Range}+3 
   /varcalc RV_RangeMax ${RV_Range}+1 
   /varcalc RV_RangeMin ${RV_Range}-1 




|/declare JustCastedSpell bool outer   |if i delete the lower shit make this real again



|Group of locked target data
    /declare TargetLevel int outer    |Level of Target
    /declare TargetName string outer |Name of Target
    /declare TargetID int outer |ID of Target

    |Data to detect if we are stuck
    /declare oldposx float outer
    /declare oldposy float outer
    /varcalc oldposx ${Me.X} +100
    /varcalc oldposy ${Me.Y} +100

    /declare homeX float outer ${Me.X}       |Our homepoint
    /declare homeY float outer ${Me.Y}       |Our homepoint
    /declare homeZ float outer ${Me.Z}       |Our homepoint
    /declare startHeading float outer 0 |Heading at start
    /varcalc startHeading ${Me.Heading.DegreesCCW} + 360
    
    /declare rndX float outer ${Me.X}       |Rnd
    /declare rndY float outer ${Me.Y}       |Rnd
    


    |A counter for the Move subs
    /declare keypressercnt1 int outer 0
    /declare keypressercnt2 int outer 0
    /declare keypressercnt3 int outer 0
    /declare keypressercnt4 int outer 0
    /declare keypressercnt5 int outer 0
    /declare keypressercnt6 int outer 0

    |Variable to prevent stuckfix after casting a spell
    /declare JustCastedSpell bool outer


    |/declare tmp string outer        |Just a tmp string
    |/declare tmp2 string outer        |Just a tmp string
    /declare lootcnt int outer 0       |Loot counter
    

    /declare leftdown bool outer    |Are we turning left
    /declare rightdown bool outer    |Are we turning right
    /declare strafeleftdown bool outer    |Are we turning left
    /declare straferightdown bool outer    |Are we turning right
    /declare forwarddown bool outer |Are we moving forward
    /declare backdown bool outer     |Are we moving backwards

    /declare stickontarget bool outer    |Bool to prevent us from leaving
    /declare stickontarget_2 bool outer    |Bool to prevent us from leaving (pull_to_home)
    /declare strafestopper bool outer   |Bool to help us stop strafing around target when we get stuck
    /declare spawnselect bool outer False  |Var to tell if we are selecting spawns or searching

    /declare initiatedattack bool outer    |Bool to only initiate once
    
    /declare theslack int outer 1    |the global slack on FaceTarget

    /declare waitcounter int outer 0   |How many times shall we get no target found before we do something (run/wait/gohome)

    /declare tickcnt int outer 0       |Tickcounter. 1 delay = 1 tick
    /declare aqtargcnt int outer 0       |Aquiretarget ticker
    /declare ignoreclearcnt int outer 0       |IgnoreList clearing counter


/declare face timer outer 0

/declare paragon timer outer 0
/declare ProtSpirit timer outer 0
/declare feral timer outer 0
/declare AAhaste timer outer 0
/declare beastial timer outer 0

  |Buffs to be kept up on self (max 15) - "Buff" or "Buff|GemSlot"
    /declare MyBuffs[4] string outer 
    /varset MyBuffs[1] "Celerity|3" 
    /varset MyBuffs[2] "Chloroplast|6"   
    /varset MyBuffs[3] "Spiritual Purity|1" 
    /varset MyBuffs[4] "Spiritual Vigor|4"
    

    |Buffs to be kept up on petf (max 15) - "Buff" or "Buff|GemSlot"
    /declare PetBuffs[3] string outer 
    /varset PetBuffs[1] "Arag`s Celerity|8"  
    /varset PetBuffs[2] "Spirit of Rellic|2"
    /varset PetBuffs[3] "Ferocity|8"

   :Start 
   /doevents 
  
   /call GMCheck 
    /keypress esc
   /call GetTarget 


   /call cast "Sha's Advantage"
   /delay 6s
     /if ( ${Me.PctMana}>70 ) {
        
      /call cast "Scorpion Venom"
        }
   
   /face fast
 /if (${paragon}<=0) { 
      /alt activate 365
      /varset paragon 300 
   } 




:KillAdds 
    
   /if (${RV_HasTarget}) /call CombatSub 
    
   /if (${RV_HasTarget} && (${Defined[RV_LootArray]} || ${RV_LootAllItems})) /call LootMob 
   /if (${RV_DisplayStats}) /call DisplayStats 
   /call ResetSub 

 
    
   /if (${Target.ID}) { 
      /echo Looks like something is attacking us, killing it... 
      /delay 1s 
      /varset RV_HasTarget 1 
      /varset RV_Fighting 1 
      /goto :KillAdds 
   } 
    
   /goto :Start 
    
/return 

|-------------------------------------------------------------------------------- 
|SUB: Get Target 
|-------------------------------------------------------------------------------- 
Sub GetTarget 

   /declare RV_CurrentRadius   int local 
   /declare RV_TargetSub   int local 
   :Acquire 
   /call CheckMana
   /call HealMyself
   /call MaintainPetBuffs
   /call MaintainSelfBuffs
/target npc clock
/call Toofar
/if ( ${Target.ID}==${Me.Pet.ID} ) {
/keypress esc
}
/if ( ${Target.ID}==${Me.ID} ) {
/keypress esc
}
/if ( ${Target.ID}==${Pc.ID} ) {
/keypress esc
}

   /for RV_CurrentRadius 160 to ${RV_MaxRadius} step 100 
      /for RV_TargetSub 1 to ${RV_MobArray.Size} 
         /squelch /target radius ${RV_CurrentRadius} nopcnear notid ${RV_InvalidTargetID} npc "${RV_MobArray[${RV_TargetSub}]}" 
         /varset RV_MyTargetID ${Target.ID} 
         /varset RV_MyTargetDead 0 
         /if (${Target.ID}) { 
            
            /if (${Int[${Target.Z}]}<${RV_MinZRange}) { 
               /echo Mob is BELOW Min Z Range, picking another... 
               /varset RV_InvalidTargetID ${Target.ID} 
               /call ResetSub 
               /goto :Acquire 
            } 
            /if (${Int[${Target.Z}]}>${RV_MaxZRange}) { 
               /echo Mob is ABOVE Max Z Range, picking another... 
               /varset RV_InvalidTargetID ${Target.ID} 
               /call ResetSub 
               /goto :Acquire 
            } 


            /target npc clock
           /call Toofar
            /loot
            /delay 1
            /notify LootWnd DoneButton leftmouseup 
            /varset RV_HasTarget 1 
            /varset RV_MyTargetName ${Target.CleanName} 
            /echo Acquired ${Target.CleanName} at range ${Int[${Target.Distance}]} own him Beastlord plz!
            /return 
         } 
      /next RV_TargetSub 
      /delay 2 
   /next RV_CurrentRadius 

   /if (!${Target.ID}) { 
      /delay 2s 
      /varcalc RV_FailCounter ${RV_FailCounter}+1 
      /echo clock not up yet, just wait longer plz
      /if (${RV_FailCounter}>=${RV_FailMax}) { 
         /echo Waiting for Respawns, Resetting Failure Counter... 
         /delay 60s 
         /varset RV_FailCounter 0 
      } 
      /goto :Acquire 
   } 

/return 



|-------------------------------------------------------------------------------- 
|SUB: Combat 
|-------------------------------------------------------------------------------- 
Sub CombatSub 

   /echo Beastlord engaging 
   /varset RV_Fighting 1 
   /varset RV_TargetDead 0 
    
   :CombatLoop 
   /doevents 
   /attack on 
    
    
   /call SpecialIT 
       
| facing mob
   /if (${face}<=0) { 
      /face fast
      /varset face 8
   } 
 

   /if (!${Target.ID}) { 
      /attack off 
      
      /varset RV_TargetDead 1 
      /varset RV_Fighting 0 
      /delay 1s 
      /target radius 30 corpse 
      /delay 1s 
      /if (!${Target.ID}) { 
         /call ResetSub 
         /return 
      } 
      
   } 
   /if (!${RV_TargetDead}) { 
      /goto :CombatLoop 
   } 
    /keypress esc
/return 

|-------------------------------------------------------------------------------- 
|SUB: Special Combat 
|-------------------------------------------------------------------------------- 
Sub SpecialIt 

   /declare TempID    int inner  0 

   /call Toofar 
    



| discing beastial
   /if (${beastial}<=0) {
/disc bestial 
      /varset beastial 1100 

       }
       
| discing protive spirit
   /if (${ProtSpirit}<=0) { 
      /disc prot 
      /varset ProtSpirit 9000
   } 
   /if (${AAhaste}<=0) { 
      /alt activate 127
      /varset AAhaste 500
   }  

/if (${feral}<=0) { 
      /alt activate 247
      /varset feral 25
      /doability kick
   } 
    

   /if ((${Int[${Me.PctHPs}]}<70)&&(${Me.Gem["Muada's Mending"]})&&(${Me.SpellReady["Muada's Mending"]})) { 
      /varset TempID ${Target.ID} 
       
       
      /keypress F1 
      /echo Healing the bst now!! 
       /g healing myself
      /call cast "Muada's Mending" 
      /delay 3s 
      /target id ${TempID} 
   } 

|Warn if I am low on health
    /if ( ${Me.PctHPs}<9 ) {
          /bind INSTANT_CAMP ctrl+alt+c
          /delay 2
         /keypress ctrl+alt+c
        /if ( ${Math.Rand[20]} < 3 ) /beep
        /popup "ALARM ALARM. HEALTH IS LOW!!!"
          }
    
/return 

|-------------------------------------------------------------------------------- 
|SUB: Looting 
|-------------------------------------------------------------------------------- 
Sub LootMob 

   /declare LootSlot    int inner  0 
   /declare LootCheck   int inner  0 
   /declare LootTotal   int inner  0 
    
   /face fast 
    
    
    
    
   /fastdrop on 
   /lootn never 
   /delay 2s 
   /loot 
   /delay 2s 
   /if (!${Corpse.Items}) { 
      /echo NO LOOT! Cheap Bastard! 
      /return 
   } 

   /varset LootTotal ${Corpse.Items} 
   /for LootSlot 1 to ${LootTotal} 
      /itemnotify loot${LootSlot} leftmouseup 
      /delay 1s 
      /if (${RV_LootAllItems}) { 
         /echo Keeping a ${Cursor.Name}... WOOT! 
         /autoinventory 
         /delay 1s 
      } else { 
         /for LootCheck 1 to ${RV_LootArray.Size} 
            /if (${Cursor.Name.Find[${RV_LootArray[${LootCheck}]}]}) { 
               /echo Keeping a ${Cursor.Name}... WOOT! 
               /varcalc RV_LootStats[${LootCheck}] ${RV_LootStats[${LootCheck}]}+1 
               /autoinventory 
               /delay 1s 
            } 
         /next LootCheck 
      } 
      /if (${Cursor.ID}) { 
         /echo Destroying a ${Cursor.Name}... 
         /destroy 
         /delay 1s 
      } 
   /next LootSlot 
    
   /notify LootWnd DoneButton leftmouseup 
   /delay 2 
    
/return 

|-------------------------------------------------------------------------------- 
|SUB: Reset 
|-------------------------------------------------------------------------------- 
Sub ResetSub 

   /keypress esc 
   /keypress esc 
   /keypress esc 
   /keypress esc 
    
   /varset RV_HasTarget 0 
   /varset RV_TargetDead 0 
   /varset RV_Fighting 0 
    
/return 

|-------------------------------------------------------------------------------- 
|SUB: Obstacle Avoidance 
|-------------------------------------------------------------------------------- 
Sub HitObstacle 

   /echo Obstacle hit, moving around it... 
    
 
    
/return 

|-------------------------------------------------------------------------------- 
|SUB: GM Check 
|-------------------------------------------------------------------------------- 
Sub GMCheck 

   /if (${Spawn[gm].ID}) { 
      /beep 
      /beep 
      /beep 
      
      /echo GM has entered the zone! 
      /echo FUCK HIM but ending the macro... 

      /keypress forward 
      /keypress back 

      /quit 
      /endmacro 
   } 
    
/return 

|-------------------------------------------------------------------------------- 
|SUB: Reading from an INI File 
|-------------------------------------------------------------------------------- 
Sub ReadINI(FileName,SectionName,ArrayType) 

   /echo Attempting to Read Section "${SectionName}" Zone Information from ${FileName}... 
   /delay 1s 
    
   /if (${Ini[${FileName},${SectionName},-1,NO].Equal[NO]}) { 
      /echo "${SectionName}" is not a Valid Section for FILE:${FileName}, ending macro... 
      /delay 1s 
      /return 
   } 
   /declare nValues     int local  1 
   /declare nArray      int local  0 
   /declare KeySet      string local  ${Ini[${FileName},${SectionName}]} 

   :CounterLoop 
   /if (${String[${Ini[${FileName},${SectionName},${ArrayType}${nValues}]}].Equal[null]}) { 
      /varcalc nValues ${nValues}-1 
      /goto :MakeArray 
   } 
   /varcalc nValues ${nValues}+1 
   /goto :CounterLoop  

   :MakeArray 
   /if (!${nValues}) /return 
   /if (${FileName.Equal["HunterMob.ini"]}&&${nValues}>0) { 
      /echo Declaring Mob Array... 
      /declare RV_MobArray[${nValues}]   string outer 
      /declare RV_MobStats[${nValues}]   string outer 
   } 
   /if (${FileName.Equal["HunterLoot.ini"]}&&${nValues}>0) { 
      /echo Declaring Loot Array... 
      /declare RV_LootArray[${nValues}]  string outer 
      /declare RV_LootStats[${nValues}]  string outer 
   } 
   /for nArray 1 to ${nValues} 
      /if (${FileName.Equal["HunterMob.ini"]}) { 
         /varset RV_MobArray[${nArray}] ${Ini[${FileName},${SectionName},${ArrayType}${nArray}]} 
         /varset RV_MobStats[${nArray}] 0 
      } 
      /if (${FileName.Equal["HunterLoot.ini"]}) { 
         /varset RV_LootArray[${nArray}] ${Ini[${FileName},${SectionName},${ArrayType}${nArray}]} 
         /varset RV_LootStats[${nArray}] 0 
      } 
   /next nArray 
    
   /echo "${SectionName}" Zone Information Read Successfully from ${FileName}... 
   /delay 1s 
    
/return 

|-------------------------------------------------------------------------------- 
|SUB: Display Stats 
|-------------------------------------------------------------------------------- 
Sub DisplayStats 

   /declare nArray  int local 
    
   /if (${Defined[RV_LootArray]}) { 
      /for nArray 1 to ${RV_LootArray.Size} 
         /echo ${Int[${RV_LootStats[${nArray}]}]} ${RV_LootArray[${nArray}]}'s 
      /next nArray 
   } 
    
/return

Sub DowntimeWork

| Check if we are low on mana or health. Heal or sit down if low
    /call CheckMana
    |/if ( ${Macro.Return}==0 ) /return 0
    /echo 1. Mana Checked

    /call HealMyself
    /if ( ${Macro.Return}==0 ) /return 0
    /echo 2. Health Checked

| Make sure pet is up + all its buffs are on it
    /call HealPet
    /if ( ${Macro.Return}==0 ) /return 0
    /echo 3. Pet Health Checked

    /call MaintainPetBuffs
    /if ( ${Macro.Return}==0 ) /return 0
    /echo 4. Pet Buffs Checked

| Make sure all buffs on self are up
    /call MaintainSelfBuffs
    /if ( ${Macro.Return}==0 ) /return 0
    /echo 5. Buffs Checked
    
/return 1
|----------------------------------------------------------------------------
|SUB: CheckMana
|----------------------------------------------------------------------------
Sub CheckMana
    /if ( ${Me.PctHPs}<85 && ${Me.PctMana}<50 ) {
        
        /if ( !${Me.Sitting} ) /sit
        /Delay 30s
        
    }

    |Meditate?
    /if ( ${Me.PctMana}<40 ) {
        
        /if ( !${Me.Sitting} ) /sit
        /declare i int local
        /squelch /if ( ${Target.ID} ) /target clear
        |/call ClearTarget "checkmana"
        /for i 1 to 10
            /Delay 10
            /if ( ${Target.ID} ) /return 1
        /next i
        /if ( ${Me.PctMana}<40 ) {
            /return 0
        }
        /echo done medding
    }


/return 1

|----------------------------------------------------------------------------
|SUB: HealMyself
|----------------------------------------------------------------------------
Sub HealMyself
    |Heal?
    /if ( ${Me.PctHPs}<87 ) {
        /alt activate 128
        /if ( !${Target.Name.Equal[${Me.Name}]} ) /target ${Me.Name}
        /call Cast "Chloroblast" 
        /varcalc tickcnt ${tickcnt} + ${Math.Calc[${Spell["Muada's Mending"].MyCastTime}*10]}
        /varset JustCastedSpell true
        /if ( !${Me.Sitting} ) /sit
        /squelch /if ( ${Target.ID} ) /target clear
        |/call ClearTarget "healmyself"
        /call Delay 1
        /alt activate 128
        /return 0
    }
/return 1

|----------------------------------------------------------------------------
|SUB: MaintainSelfBuffs - Keep buffs up
|----------------------------------------------------------------------------
Sub MaintainSelfBuffs
    |KeepUpBuffsOnMe
    /declare iCount int local
    /declare t string local

    /if (${MyBuffs.Size}==0) /return 1
/if (!${Me.Buff["Shield of the eighth"].ID} && !${Me.Casting.ID}) /call Cast "Velium coldain insignia ring" item
    /for iCount 1 to ${MyBuffs.Size} 
      /call SplitString tmp_tmp ${MyBuffs[${iCount}]} "|"

      /if ( ${String[-${tmp_tmp[1]}-].Equal[--]} ) {
        
        /goto :cont2
      }

      /varset t ${Me.Buff[${tmp_tmp[1]}]}
      /if ( ${t.Equal[NULL]} ) {
         /if ( !${Target.ID}!=${Me.ID} ) {
         	/target ${Me.Name}
         }
         |Cast with gemselection or default
         /if ( ${tmp_tmp.Size}>1 ) {
             /echo Trying to cast "${tmp_tmp[1]}"
             /call Cast "${tmp_tmp[1]}" gem${tmp_tmp[2]}
             /varset JustCastedSpell true
         } else {
             /echo Trying to cast "${tmp_tmp[1]}"
             /call Cast "${tmp_tmp[1]}"
             /varset JustCastedSpell true
         }
         /varcalc tickcnt ${tickcnt} + ${Math.Calc[${Spell["${tmp_tmp[1]}"].MyCastTime}*10]}
         
         |Check to see if buff was cast. If so, wait the recoverytime. (frenzy causes probs otherwise)
         /varset t ${Me.Buff[${tmp_tmp[1]}]}
         /if ( !${t.Equal[NULL]} ) {
            /echo Waiting ${Spell["${tmp_tmp[1]}"].RecoveryTime} seconds on spellrecovery.
            /call SitDown
            /delay 8
         }
         |Return to top - so we dont keep buffing if being attacked
         /return 0
      } 
:cont2
    /next iCount

/return 1


|----------------------------------------------------------------------------
|SUB: MaintainPetBuffs - Heal pet and keep its buffs up
|----------------------------------------------------------------------------
Sub MaintainPetBuffs
    |If we have pet    
    /if ( ${Bool[True]} ) {
        /if ( !${Me.Pet.ID} ) {
            /echo Creating new pet
            /call Cast "Spirit of Sorsha" 8
            /varcalc tickcnt ${tickcnt} + ${Math.Calc[${Spell["Spirit of Sorsha"].MyCastTime}*10]}
            /varset JustCastedSpell true
    	   
            /return 0
        }

        

        |KeepUpBuffsOnPet
	    /declare iCount int local
	    /declare t string local

        /if (${PetBuffs.Size}==0) /return 1

	    /for iCount 1 to ${PetBuffs.Size} 
	      /call SplitString tmp_tmp ${PetBuffs[${iCount}]} "|"

          /if ( ${String[-${tmp_tmp[1]}-].Equal[--]} ) {
            /echo MaintainPetBuffs - One of the spells in the array was missing!
            /goto :cont3
          }

	      /varset t ${Me.PetBuff[${tmp_tmp[1]}]}
	      /if ( ${t.Equal[NULL]} ) {
	         /if ( !${Target.ID}!=${Me.Pet.ID} ) {
	         	/target ${Me.Pet.Name}
	         }
	         
	         
	         |Cast with gemselection or default
	         /if ( ${tmp_tmp.Size}>1 ) {
	             /echo Trying to cast "${tmp_tmp[1]}"
                 /call Cast "${tmp_tmp[1]}" gem${tmp_tmp[2]}
	             /varset JustCastedSpell true
	         } else {
	             /echo Trying to cast "${tmp_tmp[1]}"
	             /call Cast "${tmp_tmp[1]}"
	             /varset JustCastedSpell true
	         }
	         /varcalc tickcnt ${tickcnt} + ${Math.Calc[${Spell["${tmp_tmp[1]}"].MyCastTime}*10]}
             |/call Delay 5 
	         |Return to top - so we dont keep buffing if being attacked
	         /return 0
	      } 
:cont3
	    /next iCount

/return 1



|||||||||||
|healing pet sub
||||||||||||||
Sub HealPet
    |Heal pet?
    /if ( ${Me.Pet.PctHPs}<50 ) {
        /if ( ${Me.Pet.ID} ) {
            /target ${Me.Pet.CleanName}
            /alt activate 58
            /call Cast "Muada's Mending" 2
            /varcalc tickcnt ${tickcnt} + ${Math.Calc[${Spell["Muada's Mending"].MyCastTime}*10]}
            /varset JustCastedSpell true
            /if ( !${Me.Sitting} ) /sit
            /return 0
        }
    }

/return 1







|----------------------------------------------------------------------------
|SUB: Delay(int ticks) - Used to do delays and count ticks
|----------------------------------------------------------------------------
Sub Delay
    /varcalc tickcnt ${tickcnt} + ${Param0}
    
    /delay ${Param0}
/return ${tickcnt}


|----------------------------------------------------------------------------
|SUB: UntargetPet - If pet is targeted, untarget it.
|----------------------------------------------------------------------------
Sub UntargetPet
    /if ( ${Me.Pet.ID} ) {
        /if ( ${Target.Name.Equal[${Me.Pet.Name}]} ) {
        	/squelch /if ( ${Target.ID} ) /target clear
            |/call ClearTarget "untargetpet"
        }
    }
/return

|----------------------------------------------------------------------------
|SUB: SplitString - A generic string splitter.
|----------------------------------------------------------------------------
Sub SplitString(string varname, string inputstring, string splitter)
    |/echo varname: "${varname}", inputstring: "${inputstring}", splitter: "${splitter}"
    /declare i int local
    /declare stringcnt int local
    
    |If there was not 3 params sent, return 
    /if (!${Defined[splitter]} ) {
        /if (!${Defined[${varname}]}) { 
            /declare ${varname}[1] string outer
        } else {
            /deletevar ${varname}
            /declare ${varname}[1] string outer
        }
        /varset ${varname}[1]
        /return
    }
    
    
    |The normal splitter. Splitter string is just 1 in length.
    /if (${splitter.Length}==1) {
        /varcalc stringcnt ${inputstring.Count["${splitter}"]} + 1
        
        /if (!${Defined[${varname}]}) { 
            /declare ${varname}[${stringcnt}] string outer
        } else {
            /deletevar ${varname}
            /declare ${varname}[${stringcnt}] string outer
        }
        
        /for i 1 to ${stringcnt}
            /varset ${varname}[${i}] ${inputstring.Token[${i},"${splitter}"]}
        /next i
    } else {
    
        |The TOKEN method on string does not support splitters of length>1
        /declare tmp string local
        /varset tmp ${inputstring}
        /declare i2 int local
:FindCount
        /if ( ${tmp.Find["${splitter}"]} ) {
            /varset i ${tmp.Find["${splitter}"]}
            /varset tmp ${tmp.Left[${Math.Calc[${i}-1]}]}${tmp.Right[${Math.Calc[${tmp.Length}-${i}-${splitter.Length} +1]}]}
            /varcalc stringcnt ${stringcnt} + 1
            /if ( ${tmp.Find["${splitter}"]} ) /goto :FindCount
        }
        /varcalc stringcnt ${stringcnt} + 1

        /if (!${Defined[${varname}]}) { 
            /declare ${varname}[${stringcnt}] string outer
        } else {
            /deletevar ${varname}
            /declare ${varname}[${stringcnt}] string outer
        }

        |Find the parts.
        /varset tmp ${inputstring}
        /for i 1 to ${stringcnt}
            /if ( ${tmp.Find["${splitter}"]} ) {
                /varset i2 ${tmp.Find["${splitter}"]}
                /varset ${varname}[${i}] ${tmp.Left[${Math.Calc[${i2}-1]}]}
                /varset tmp ${tmp.Right[${Math.Calc[${tmp.Length}-${i2}-${splitter.Length} +1]}]}
            } else {
                /varset ${varname}[${i}] ${tmp}
            }
        /next i
    }
/return

|----------------------------------------------------------------------------
|SUB: SitDown - Sit down if standing
|----------------------------------------------------------------------------
Sub SitDown
    /if ( !${Me.Sitting} ) /sit
/return



|----------------------------------------
|clearing target if mob too far
|-----------------------------------------

sub Toofar
 /if ( ${Spawn[${Target.ID}].Distance}>180 )  { 
               /echo Mob is ABOVE Max  Range while fighting, picking another clock for Beastlord to pwnz
              /varset RV_InvalidTargetID ${Target.ID} 
             /keypress esc
}
/return
 
Re: Redguides Listing of Confirmed Macros

Fully Automated Skylance Laboratory Macro by JoeK/JoeSchmoe

http://www.redguides.com/community/showthread.php?t=11316

Here's my fully automated, very safe, Skylance Laboratory macro. It takes care of everything from when you zone in to when you're ready to pull the boss. I Updated this to do the /switches from the Oubillete instead of zone in. It's out of agro range, so the multiple zone-out-and-back-in is no longer necessary.

If you're using Abyss' MQ2MovePlayer, change the "/warp loc 1 2 3" lines to "/awarp 1 2 3" (no 'loc').

Read the comments in the macro for details. Requires MQ2Switch and a warp that supports /warp succor, /warp loc, etc.
SkyLab.mac

Rich (BB code):
 |----------------------------- Skylab.MAC -----------------------------------| 
|- Skylab, By JoeK/JoeSchmoe 
|- Last Modified: May 24, 2006
|- Usage: 
|- 	1. Obtain Ao#3 mission (The Laboratory) either normally or with MQ2TDoN
|- 	2. Macro Runner (only) zones into instance. 
|-	3. Have "The Incubated Egg of Tallongast" on cursor. 
|-	4. /mac skylab (Takes about 10 minutes) 
|-	5. When complete, All zone in
|-	6. /Tar Tallongast  ..  /warp target ... <non-dmg agro> ... /warp succor
|-	7. Tallongast warps to zone in following you.
|-	8. Kill Tallongast at zone in 
|-	9. Get 70 Spell on cursor, loot decent aug or loot from Tallongast
|-
|- Requirements: MQ2Switch, Some sort of Warp that supports /warp target and /warp loc 
|-
|- Switch #'s:  12 - Main table
|-		11 - Ethereal Goo (East Table)
|-		19 - Ether Spirit (East Console)
|-		17 - Distill Magic Spirits (West Table)
|-		9  - Gaze-O-Rama (West Console)
|-		18 - Dispenser (South Table)
|-		10 - Hyper manipulator (South Console)
|-		20 - Necrotic Tissue (North Table
|-		8  - Trans Injector (North Console)
|------------------------------------------------------------------------------| 

#turbo 10 

#Event Hyper "Switch on the Hyper#*#" 
#Event Gaze "The Gaze-O-Rama#*#" 
#Event Distill "Distill the magical#*#" 
#Event Trans "Use the Trans#*#" 
#Event Dispenser "The Dispenser has#*#" 
#Event EthSpir "From the ether#*#" 
#Event EthGoo "A good dose of ethereal#*#" 
#Event Necrotic "Remove the necrotic#*#"
#Event Hatch "Success! You have managed to hatch#*#" 
#Event StillBusy "The laboratory equipment is still busy#*#"

sub main 

  /declare Zn int outer
  /declare NextDevice int outer
  /declare PrevDevice int outer
  /declare FirstTime int outer
  /varset FirstTime 1
  /varset NextDevice 0
  /varset PrevDevice 0
  /varset Zn 0

  |- Enter the Laboratory, update Task, Return to zone in
  /doevents flush
  /warp loc -2 543 9
  /delay 10s
  |- Warp to the Oubilette (sp?)... Can /switch from there with no agro
  /warp loc -686 2 4
  /keypress left
  |- Place the egg on the table
  /switch 12

:MainLoop 
  /delay 2
  /if (${NextDevice}!=0) /call Do_Next_Device
  /doevents
/goto :MainLoop 

/return 

Sub Zoner(string ZoneName, string ZoneLoc)
    /delay 5s
    :loop
    /if (${Zone[${Zone.ShortName}].ID} != ${Zone.ID}) /goto :loop
    /delay 5
    /if (${Me.AbilityReady[Sneak]}) /doability "Sneak"
    /if (${Me.AbilityReady[Hide]})  /doability "Hide"
/return


sub Zone_Out_and_Back
  /call GMCheck
|- Turns out we don't have to zone out for agro loss if we /switch from the
|- Oubilette(sp?) instead of from zone in.
|  /echo Zoning out and Back in to ensure we lose agro
|- /delay 5 
|  /switch 1 
|  /call Zoner 
  /echo Finished working current equipment.  Waiting a minute for next one...
|  /delay 5s 
|  /switch 8 
  | The new Zoner detection doesn't work so well for instanced zones and we have
  | a 2 minute forced delay between equipmant usage anyway, so just waiting 60 secs after
  | zoning in.  If you take longer to zone, you can adjust this.
  /delay 65s
  /echo proceding with next device...
/return

sub Do_Next_Device
  /echo Do_Next_Device
  /varset PrevDevice ${NextDevice}
  /if (${FirstTime}!=1) /call Zone_Out_and_Back
  /varset FirstTime = 0
  /switch ${NextDevice}
:DeviceEventLoop
  /doevents
  /if (${NextDevice}==${PrevDevice}) /goto :DeviceEventLoop
  /delay 1
  /keypress right
/return

sub Event_Hatch 
  /echo Boss!
  |/call Zone_Out_and_Back
|  /switch 1
|  /call Zoner
  /gs Boss is Spawned. Zone in now, and pull him to Zone in when ready.
  /delay 5s 
| Warp succor or to -90 1 3 (zone in) if you like
| /warp loc -90 1 3
  /end
/return 

sub Event_StillBusy
  /echo Still Busy.  Delaying 10 secs and trying again.
  /delay 10s
  /switch ${NextDevice}
/return

sub Event_Hyper 
  /echo Hyper
  /varset NextDevice 10
/return 

sub Event_Distill 
  /echo Distill!
  /varset NextDevice 17
/return 

sub Event_Gaze 
  /echo Gaze!
  /varset NextDevice 9
/return 

sub Event_Dispenser 
  /echo Dispenser!
  /varset NextDevice 18
/return 

sub Event_EthGoo 
  /echo Ethereal Goo
  /varset NextDevice 11
/return 

sub Event_EthSpir 
  /echo Ethereal Spirits!
  /varset NextDevice 19
/return 

sub Event_Necrotic 
  /echo Necrotic
  /varset NextDevice 20
/return 

sub Event_Trans 
  /echo Trans
  /varset NextDevice 8
/return 

sub GMCheck 
  /if (${Bool[${Spawn[gm].ID}]}) { 
    /echo A GM or Guide has been detected.  Waiting for five minutes to check again ... 
    /delay 300s 
    /call GMCheck 
  } 
/return
 
Re: Redguides Listing of Confirmed Macros

Daosheen Macro by Delvin

http://www.redguides.com/community/showthread.php?t=11975

Your Number 5 hotkey must be the " center screen " button.
The next time our Guild does Daosheen I'll get the switch numbers so there won't be any ghost/warping
Also see the thread for a nice Strat that was posted in the Thread by members of the community.

Rich (BB code):
 | Daosheen.mac
| You need mq2Ghost for this to work.
| You also need mq2rwarp ( or, another warping plugin )
| You need to stay in first person
|-------------------------------------
#turbo 10
#event red "#*#by the presence#*#"
#event yellow "#*#saps your strength#*#"
#event blue "#*#will to fight#*#"
#event green "#*#blood is tainted#*#"

Sub Main
:start
/doevents
/goto :start
/return

sub event_red
/popup PRESENCE, CLICKING RED NOW!!
/beep
/ghost on
/warp loc -23, -355, 28
/delay .5s
/face fast heading 0
/delay .5s
/keypress num_5
/click left 0 0
/delay .5s
/ghost return
/return

sub event_yellow
/popup CURSE, CLICKING YELLOW NOW!!
/beep
/ghost on
/warp loc -21, -574, 28
/delay .5s
/fact fast heading 0
/delay .5s
/keypress num_5
/click left 0 0
/delay .5s
/ghost return
/return


sub event_blue
/popup SMOTHERING, CLICKING BLUE NOW!!
/beep
/ghost on
/warp loc -109, -493, 28
/delay .5s
/face fast heading 90
/delay .5s
/keypress num_5
/click left 0 0
/delay .5s
/ghost return
/return

sub event_green
/popup PLAGUE, CLICKING GREEN NOW!!
/beep
/ghost on
/warp loc 97, -478, 28
/delay .5s
/face fast heading 15
/delay .5s
/keypress num_5
/click left 0 0
/delay .5s
/ghost return
/return
 
Re: Redguides Listing of Confirmed Macros

Safetynet.mac and Nuker.mac by tradertesla

http://www.redguides.com/community/showthread.php?t=11832

Don't discount this little-bitty macro that could. It's as uncomplicated as it is useful.

I leave it on pretty much anytime I am playing in a group or raid. Since I am a Wiz, insta-dropping aggro is better than any AA I can buy. It's like an activated ultra-mindcrash--it drops 100% aggro and has instant and unlimited reuse.

This is so incredibly simple, yet once it occurred to me to write it I have used it almost daily.
I have never had it fail to save me yet. Of course, any mob or combination of mobs that can single-round you will kill you regardless.

And then I'll save the smart-alecs the trouble and say that, "real Wizards don't get aggro." Then the obligitory response, "not if we have a real tank." Ok, there. I just saved us a couple of pointless posts.

Hope other's find this useful.

P.S. For soloing, just add a /succor in front of the /fade, since there won't be anyone else around to take your aggro. You gotta move.
Rich (BB code):
 Sub Main
/echo Safety net is ready.
:Loop
/if (${Me.PctHPs} < 90) {
  /fade
  /end
}
/delay 1s
/goto :Loop
/return


Well, granted, /fade isn't instant but it takes effect instantly.

Here's the other one I use when I multi-box. It uses the same concept. Once again, I like simplicity. Macros continue to run even while you are casting, of course. With this macro you can auto-fade upon aggro even when all your hotkeys are locked up with a spell cast. Adjust the intermediate delays to match the cast time of your favorite nuke.

What was that you say? I don't know. You must be having a graphics glitch, dude...
Rich (BB code):
 | Nuker.mac
Sub Main
/echo Let's nuke...
:Loop
/if (${Target.PctHPs} < 85) {
/cast 1
/delay 2s
}
/if (${Me.PctHPs} < 50) {
  /fade
  /delay 10s
  /end
}
/delay 2s
/if (${Me.PctHPs} < 50) {
  /fade
  /delay 10s
  /end
}
/delay 2s
/if (${Me.PctHPs} < 50) {
  /fade
  /delay 10s
  /end
}
|/delay 3s
/if (${Target.PctHPs} < 10) {
/end
}
/goto :Loop
/return
 
Re: Redguides Listing of Confirmed Macros

sgank.mac - Smart Ganking by EvenLessSpam

http://www.redguides.com/community/showthread.php?t=11610

Created this plugin to "smarter" ganking of ground items. As can be seen it's especially usefull for Kaladim Shrooms and Bow Staffs in Elddar Forest
Please note that Ganking will be very obvious to people looking at you. You'll make small (instant) turns on the spot when ganking. Just a friendly warning, so I'd recommend using the PlayerWatch feature
Rich (BB code):
 | sgank.mac -- Smart Ganking by ELS (EvenLessSpam)
#Event ItemTargeted "Item '#1#' targeted."
#Event NoItem       "Couldn't find '#1#' to target."
#Event NoRoom       "There was no place to put that!  The item has dropped to the ground!"
#Event MQ2Cursor    "MQ2Cursor::REQUIRE Instruction <#1#>#*#"

Sub Main
    /if (!${Plugin[MQ2CGank].Name.Equal[MQ2CGank]}) /plugin MQ2CGank noauto
    /if (!${Plugin[MQ2CGank].Name.Equal[MQ2CGank]}) {
        /echo [${Time.Time24}] Required plugin 'MQ2CGank' could not be loaded..
        /endmacro
    }
    /declare i                  int     local   0
    /declare Timeout            timer   outer   10s
    /declare Interval           string  outer   1m
    /declare gDelay             string  outer   2s
    /declare PWRadius           int     outer   500
    /declare ZoneCheck          int     outer   ${Zone.ID}

    |--------------------------------------------------------------------------|
    |--------  Begin Zone Specifik Setup - Should be self-explanatory  --------|
    |--------------------------------------------------------------------------|
    /if (${Zone.Name.Equal[North Kaladim]}) {
        /declare gItem[2]       string  outer   NULL
        /varset gItem[1] *Red Mushroom0
        /varset gItem[2] *Blue Mushroom0
        /declare Roam[2]        string  outer   NULL
        /varset Roam[1] 645.92 -144.03 5
        /varset Roam[2] 665.86 -90.55 5
        /declare RoamTimer      timer   outer   3m
        /declare RoamPoint      int     outer   1

        /varset Interval 3m
        /varset PWRadius 200
    } else /if (${Zone.Name.Equal[The Elddar Forest]}) {
        /declare gItem[1]       string  outer   NULL
        /varset gItem[1] 2H Staff

        /varset Interval 10m
        /varset PWRadius 500
    }
    |--------------------------------------------------------------------------|
    |-----------------------  End Zone Specifik Setup  ------------------------|
    |--------------------------------------------------------------------------|

    /if (${Defined[gItem]}) {
        /for i 1 to ${gItem.Size}
            /declare mItem${i}  timer   outer   0
        /next i
    }
    :loop
        /if (${Zone.ID} != ${ZoneCheck}) {
            /echo Zone changed. Ending macro.
            /endmacro
        }
        /call SafetyCheck
        /if (${Defined[Roam]} && !${RoamTimer}) {
            /varset RoamTimer ${RoamTimer.OriginalValue}
            /if (${RoamPoint} == 1) {
                /varset RoamPoint 2
            } else {
                /varset RoamPoint 1
            }
            /call MoveToLoc ${Roam[${RoamPoint}]}
        }
        /if (!${Defined[gItem]}) {
            /itemtarget
            /doevents
            /delay ${gDelay}
        } else {
            /for i 1 to ${gItem.Size}
                /if (!${mItem${i}}) /itemtarget ${gItem[${i}]}
                /doevents
                /delay ${gDelay}
            /next i
        }
        /if (!${Timeout} && !${Defined[gItem]}) /call NoItem
    /goto :loop
/return

Sub SafetyCheck
    /if (${SpawnCount[gm]} || ${SpawnCount[pc radius ${PWRadius} notid ${Me.ID}]}) {
        /if (${Me.Moving}) {
            /keypress FORWARD
            /keypress BACK
        }
        /beep
        /beep
        /beep
        /echo [${Time.Time24}] !!! Alert !!!
        /echo [${Time.Time24}] Macro paused...
        /if (!${Me.AFK}) /afk
        :loop
            /delay 10s (!${SpawnCount[gm]} && !${SpawnCount[pc radius ${PWRadius} notid ${Me.ID}]})
        /if (${SpawnCount[gm]} || ${SpawnCount[pc radius ${PWRadius} notid ${Me.ID}]}) /goto :loop
        /echo [${Time.Time24}] Macro resumed...
    }
/return

Sub NoItem
    /if (${Defined[Param0]}) {
        /echo [${Time.Time24}] Couldn't find any '${Param0}'. Waiting ${Interval} before resuming search.
    } else {
        /echo [${Time.Time24}] Couldn't find any items. Waiting ${Interval} before resuming search.
        /declare Wait           timer   local   ${Interval}
        :loop
            /doevents
            /if (!${Wait}) /goto :end
        /goto :loop
        :end
        /varset Timeout ${Timeout.OriginalValue}
    }
/return

Sub MoveToLoc(float Y, float X, float MaxDist)
    /declare LastDistance  int     local   ${Target.ID}
    /varset  LastDistance ${Math.Distance[${Y}, ${X}]}
    /if (!${Me.Standing}) /stand
    /face fast nolook loc ${Y},${X}
    /delay 1s
    /keypress FORWARD
    /keypress FORWARD hold
    :loop
        /call SafetyCheck
        /doevents
        /face nolook loc ${Y},${X}
        /if (${Math.Distance[${Y}, ${X}]} > ${LastDistance}) {
            /keypress FORWARD
            /keypress BACK
            /delay 1s
            /face fast nolook loc ${Y},${X}
            /delay 1s
            /keypress FORWARD
            /keypress FORWARD hold
        }
        /varset LastDistance ${Math.Distance[${Y}, ${X}]}
    /if (${Math.Distance[${Y}, ${X}]} > ${MaxDist}) {
        /delay 1
        /goto :loop
    }
    /keypress FORWARD
    /keypress BACK
/return

Sub Event_ItemTargeted
    /varset Timeout ${Timeout.OriginalValue}
    :cursor
        /if (${Cursor.ID}) /autoinventory
    /if (${Cursor.ID}) /goto :cursor
    /gank
/return

Sub Event_NoRoom
    /echo [${Time.Time24}] No more inventory space. Executing /quit in 60 seconds..
    /declare QuitTimer          timer   local   1m
    :loop
        /echo [${Time.Time24}] Executing /quit in ${Math.Calc[${QuitTimer}/10].Int} seconds; /endmacro to abort..
        /popup Executing /quit in ${Math.Calc[${QuitTimer}/10].Int} seconds; /endmacro to abort..
        /delay 1s
    /if (${QuitTimer}) /goto :loop
    /echo [${Time.Time24}] Executing /quit NOW!
    /popup Executing /quit NOW!
    /endmacro
    /quit
/return

Sub Event_NoItem(string Line, string NoItem)
    /declare i                  int     local   0
    /for i 1 to ${gItem.Size}
        /if (${gItem[${i}].Equal[${NoItem}]}) /varset mItem${i} ${Interval}
    /next i
    /call NoItem "${NoItem}"
/return

Sub Event_MQ2Cursor
    /autoinventory
/return
 
Re: Redguides Listing of Confirmed Macros

DKP log updating macro by HardOne

http://www.redguides.com/community/showthread.php?t=11825

This macro was written for a DKP parsing program which compares the /list and /who of a zone from EQ logs for your DKP database.
Just Modify the channel(s) and the time to your liking. (default is to /list and /who every 15 minutes)
Also Included is the /notinzone command which will provide a list of all raid members not in the zone.
The macro will auto end when you camp if you forget to end it.
DKPParse.mac

Rich (BB code):
 |DKPParse.mac by HardOne 
|Janurary 01, 2006 
|Last Updated: Janurary 26, 2006 
| 
|This Macro Auto-Updates your Logs for DKP parsing programs. 
|Does /list and /who commands every 15 Minutes 
|Provides Function to see who in Raid is Not in zone, by typing /notinzone 
|Added "Camp Check" to end macro if you camp. 
|Change the Name to match your Raid Channel Name. (ex. /list WeRaidGud)- 
|Change 15m, to what ever Time Frequency you want (ex. 15m = 15 Minutes)- 

#Event WhoNotInZone        "[MQ2] notinzone" 
Sub Event_WhoNotInZone(string Line) 
   /if (!${Raid.Members}) { 
      /echo /notinzone: You are not in raid. 
      /return 
   } 
    
   /echo -------------------------- 
   /echo # Raid members not in zone: 
    
   /declare i int local 0 
   /declare cnt int local 0 

   /for i 1 to ${Raid.Members} 
      /if (!${Spawn[PC ${Raid.Member[${i}].Name}].ID}) { 
         /echo # ${Raid.Member[${i}].Name} [${Raid.Member[${i}].Class.ShortName}] (${SpawnCount[pc ${Raid.Member[${i}].Class.ShortName}]} ${Raid.Member[${i}].Class.Name.Lower}s in zone) 
         /varcalc cnt ${cnt}+1 
      } 
   /next i 

   /echo # ${cnt} of ${Raid.Members} raid members not in zone 
   /echo -------------------------- 
/return 

Sub MakeRaidDumpsFunction 
   |Change Channel(s) to Suit your Raid Channels 
    /list channel1 
    /delay 1 
    /list channel2
    /delay 1 
    |The slash is here to do a normal Everquest /who
    / 
/return 

#Event   Camping            "#*#It will take you about 30 seconds to prepare your camp.#*#" 
Sub Event_Camping 
   /echo Camping - Ending macro! 
   /endmacro 
/return 

Sub Main 
   /declare MakeRaidDumpsTimer     timer outer 0 

   /squelch /alias /notinzone /echo notinzone 

   :dkploop 
      /doevents 

      |DKP log parse 
      |Change 15m to what time interval you want logs updated (15m = 15 Minutes) 
         /if (!${MakeRaidDumpsTimer} && ${Raid.Members}) { 
         /echo [${Time}] # Updating Logs for DKP. 
         /call MakeRaidDumpsFunction 
         /popup Updating Logs for DKP. 
         /echo Next Update in 15 Minutes. 
         /varset MakeRaidDumpsTimer 15m 
      } 
    
   /goto :dkploop 
/return
 
Re: Redguides Listing of Confirmed Macros

Pettoys.mac by armysoldier

http://www.redguides.com/community/showthread.php?t=10306

Simple macro I run on my Mage .. keeps the summoned gear full ... its not a PLAT gold mine.. but a couple K a day doing nothing.
READ THE MACRO ... it uses gem 1-8
very simple to adjust if you want to add another spell with item.
Rich (BB code):
 |--- PetToys.mac
|--- Written by Armysoldier 
|--- for REDGUIDES!!!
|--- 
|---
|--- usage /mac PetToys


#include spell_routines.inc
#include common/CommonSubs.inc
#turbo

#Event Zoned "#*#You have entered#*#"
#Event Mana "#*#Insufficient Mana#*#"
#Event Window	"#*#You are too distracted#*#"

Sub Main
/declare ItemCnt int outer

	:begin
        /if (${FindItemCount[=Summoned: Girdle of Magi`Kot]}==0) /call Summon
        /if (${FindItemCount[=Summoned: Muzzle of Mardu]}==0) /call Summon
        /if (${FindItemCount[=Summoned: Dagger of the Deep]}==0) /call Summon
        /if (${FindItemCount[=Summoned: Blade of Walnan]}==0) /call Summon
        /if (${FindItemCount[=Summoned: Blade of the Kedge]}==0) /call Summon
        /if (${FindItemCount[=Elemental Blanket]}==0) /call Summon
        /if (${FindItemCount[=Summoned: Talisman of Return]}==0) /call Summon
        /if (${FindItemCount[=Summoned: Ring of Levitation]}==0) /call Summon

        /sit on
/keypress 1
|        /Auction Trader Up with PET toys - Belt - MASK - WEAPONS and Elemental BLankets / Talisman of return / LEV rings
        /delay 30m
        /doevents
	/goto :begin

/return


Sub Summon


/declare i int local
/call TraderOff

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Belt
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Varset ItemCnt ${Math.Calc[10-${FindItemCount[=Summoned: Girdle of Magi`Kot]}]}

/if (${ItemCnt}>0) {
/for i 1 to ${ItemCnt}
 	/call cast "${Me.Gem[1]}" gem1
        /delay 2s
        /call ClearCursor        
/next i
}

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Mask
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Varset ItemCnt ${Math.Calc[10-${FindItemCount[=Summoned: Muzzle of Mardu]}]}
/if (${ItemCnt}>0) {
/for i 1 to ${ItemCnt}
 	/call cast "${Me.Gem[2]}" gem2
        /delay 2s
        /call ClearCursor        
/next i
}

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Deep
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Varset ItemCnt ${Math.Calc[10-${FindItemCount[=Summoned: Dagger of the Deep]}]}
/if (${ItemCnt}>0) {
/for i 1 to ${ItemCnt}
 	/call cast "${Me.Gem[3]}" gem3
        /delay 2s
        /call ClearCursor        
/next i
}

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Walnan
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Varset ItemCnt ${Math.Calc[10-${FindItemCount[=Summoned: Blade of Walnan]}]}
/if (${ItemCnt}>0) {
/for i 1 to ${ItemCnt}
 	/call cast "${Me.Gem[4]}" gem4
        /delay 2s
        /call ClearCursor        
/next i
}

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Kedge
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Varset ItemCnt ${Math.Calc[10-${FindItemCount[=Summoned: Blade of the Kedge]}]}
/if (${ItemCnt}>0) {
/for i 1 to ${ItemCnt}
 	/call cast "${Me.Gem[5]}" gem5
        /delay 2s
        /call ClearCursor        
/next i
}

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Blanket
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/if (${FindItemCount[=Elemental Blanket]}==0) {
 	/call cast "${Me.Gem[6]}" gem6
        /delay 2s
        /call ClearCursor        
}

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Talisman
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Varset ItemCnt ${Math.Calc[3-${FindItemCount[=Summoned: Talisman of Return]}]}
/if (${ItemCnt}>0) {
/for i 1 to ${ItemCnt}
 	/call cast "${Me.Gem[7]}" gem7
        /delay 2s
        /call ClearCursor        
/next i
}

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|LEv Ring
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/Varset ItemCnt ${Math.Calc[3-${FindItemCount[=Summoned: Ring of Levitation]}]}
/if (${ItemCnt}>0) {
/for i 1 to ${ItemCnt}
 	/call cast "${Me.Gem[8]}" gem8
        /delay 2s
        /call ClearCursor        
/next i
}
        /call TraderOn
/return
sub TraderOff
/notify BazaarWnd BZW_End_Button leftmouseup
                /keypress ESC hold
                /keypress ESC 
/delay 2


/return


sub TraderOn
/trader
/delay 2
/nomodkey /notify BazaarWnd BZW_Start_Button leftmouseup



/return

Sub Event_Zoned 
       /echo died or something is wrong.. time to go 
       /delay 2s  
       /sit on
       /camp desk  
       /endmac 
/return

Sub Event_Mana
       	/sit on
       	:loop
	/delay 15S
       	/echo checking my mana 
       	/if ( ${Me.PctMana}==100 ) /return
     	/goto :loop
/return


Sub Event_Window

/click leftmouseup
/delay 2

/return


/nomodkey /notify BazaarWnd Close

/nomodkey /notify BazaarWnd BZW_Close_Button leftmouseup

/nomodkey /notify BazaarWnd BZW_Start_Button leftmouseup
 
Re: Redguides Listing of Confirmed Macros

Modified version of AFKnecro.mac, by EQBotMan modified by thez

Summoning pets Setup by thez

Basic.mac by thez

Nechunter modifed by thez from Hunter.mac by robdawg

http://www.redguides.com/community/showthread.php?t=11287

See Thread for original codes And instructions all 4 of the above macros. They all come from one thread titled: A few macros... dated 6/8/06
 
Re: Redguides Listing of Confirmed Macros

Natimbi Hunter Mac titled Ditch.mac by BobDobbs
(based on RobDawgs Hunter.mac but heavily modified)

http://www.redguides.com/community/showthread.php?t=11535

OK folks listen up, here is an afk mac that has collected dust for 3 months. It's the real deal, it netted me a ton of slow but steady aa's and some for my second box as well. Use with caution, do not remove sticker, not recommended for children under 12 or pregnant animals. May cause nausia, vomiting, diarhea, leakage from various parts of the body etc...

This works great for a ranger with EQ and AM3. Probably modifiable for other ranged classes. If not the sentinal routine is at least interesting, for kill everything in a certain spot farming.

Basically you go to Natimbi stand behind the ghosts near the ditch. Start the mac and you will buff up go to a spot and kill all the fish (x2 damage) and move on to the next spot, then repeat forever. Looting is tricky, as it is hard to get back to the ledge you are standing on in certain spots. You can write another mac to auto-follow fo 2 boxing (or just stick). If there is any interest at all I'll post that file as well.

Rich (BB code):
 | Ditch.mac 
| Author : BobDobbs (based on RobDawgs Hunter.mac but heavily modified)
|------------------------------------------------------------------------------------ 

#turbo 10 
#include move.inc
#include spellcast.inc

#event SpeedOff "#*#The quickening spirit departs#*#"
#event TarFar "#*#Your target is too far away, get closer!#*#"
#event TarFar "#*#Mob NOT a Full Health, picking another#*#"
#event WardOff "#*#Your skin returns to normal#*#"
#event TooClose "#*#Your target is too close to use a ranged weapon!!#*#"
#Event Zoned "#*#You have entered Guild Lobby#*#"

#event GotHit      "#*#hits YOU for#*#" 
#event GotHit      "#*#claws YOU for#*#" 
#event GotHit      "#*#slashes YOU for#*#" 
#event GotHit      "#*#crushes YOU for#*#" 
#event GotHit      "#*#bashes YOU for#*#" 
#event GotHit      "#*#kicks YOU for#*#" 
#event GotHit      "#*#smashes YOU for#*#" 
#event GotHit      "#*#mauls YOU for#*#" 
#event GotHit      "#*#gores YOU for#*#" 
#event GotHit      "#*#pierces YOU for#*#" 
#event GotHit      "#*#kicks YOU for#*#" 
#event GotHit      "#*#bashes YOU for#*#"  

Sub Main 

|------------------------------------------------------------ 
|How many times should aquire target fail before delaying? 
|------------------------------------------------------------ 
/declare RV_FailMax int outer 3 
|------------------------------------------------------------ 
|How far would you like to target a mob? 
|------------------------------------------------------------ 
/declare RV_MaxRadius int outer 4000 
|------------------------------------------------------------ 
|How far is the combat range? 
|------------------------------------------------------------ 
/declare RV_Range int outer 2500
|||HAVE TO DO THIS OR WE CHASES THE MOBSES-VERY BAD 
|------------------------------------------------------------ 
|What is the minimum Z Value of mobs I should target? 
|------------------------------------------------------------ 
/declare RV_MinZRange int outer -1000 
|------------------------------------------------------------ 
|What is the maximum Z Value of mobs I should target? 
|------------------------------------------------------------ 
/declare RV_MaxZRange int outer 1000 
|------------------------------------------------------------ 
|Should I loot all items? 
|------------------------------------------------------------ 
/declare RV_LootAllItems int outer 1 
|------------------------------------------------------------ 
|Should I display stats? 
|------------------------------------------------------------ 
/declare RV_DisplayStats int outer 1 
|------------------------------------------------------------ 
|Home Location X (Set if you want location other then were you start the macro) 
|------------------------------------------------------------ 
/declare AnchorX int outer ${Me.X} 
|------------------------------------------------------------ 
|Home Location Y (Set if you want location other then were you start the macro) 
|------------------------------------------------------------ 
/declare AnchorY int outer ${Me.Y} 

|------------------------------------------------------------ 
|Loot Array Information. for loot warp
|------------------------------------------------------------ 
/declare LootMobs          int    outer 0 
/declare CorpseList        string outer 0 
/declare CorpseRadius      int    outer 400 
/declare MobsTooClose      int    outer 50 
/declare CorpseAlertList   int    outer 70 
/declare CorpseRotTime     string outer 30s 
/declare CorpseRotTimer    timer  outer 
/declare CorpseRotSetTimer string outer TRUE 
/declare LootINIFile       string outer "${Me.Name}_loot.ini" 
/declare useAutoLoot       string outer TRUE 

|------------------------------------------------------------ 
|Mob Array Information. 
|------------------------------------------------------------ 
/declare RV_NumberOfMobs int outer 2
/declare RV_MobArray[${RV_NumberOfMobs}] string outer
/varset RV_MobArray[1] "a tide feaster" 
/varset RV_MobArray[2] "a saltwater longnose" 
|/varset RV_MobArray[3] "a reef crustacean" 
|/varset RV_MobArray[4] "a saltwater longnose" 

|||||||||||||||||||||SENTINAL|||||||||||||||||||||  ||
   |set location to LoneSalt-0 Base-1 Outpost-2 New_Base-3 Spot1-4 X-5 
   /declare Sentinal int outer 0
   /declare CurrentBaseX int outer ${Me.X} 
   /declare CurrentBaseY int outer ${Me.Y} 
   /declare TooFar int outer 0

|------------------------------------------------------------ 
|Variables that you don't need to worry about. 
|------------------------------------------------------------ 
/declare RV_FailCounter int outer 0 
/declare RV_MyTargetID int outer 0 
/declare RV_MyTargetName string outer 
/declare RV_MyTargetDead int outer 0 
/declare RV_InvalidTargetID int outer 0 
/declare RV_HasTarget int outer 0 
/declare RV_RandomWait int outer 0 
/declare RV_LootSlot int outer 0 
/declare RV_CheckLook int outer 0 
/declare RV_Fighting int outer 0 
/declare RV_TargetDead int outer 0 
/declare RV_MyXLOC int outer 0 
/declare RV_MyYLOC int outer 0 

/declare RV_FastRange int outer 
/declare RV_RangeMax int outer 
/declare RV_RangeMin int outer 
/varcalc RV_FastRange ${RV_Range}+3 
/varcalc RV_RangeMax ${RV_Range}+1 
/varcalc RV_RangeMin ${RV_Range}-1 

/declare MyXLOCA int outer 0 
/declare MyYLOCA int outer 0 
/declare BreakLoop int outer 0  
/declare xDistance int outer 0 

:Start 
/doevents 
/if (${Param0.equal[1]}) { 

} 
/call GMCheck 
/call MaintainBuffs
/call GetTarget 
/call Heal

:KillAdds 
|/if (${RV_HasTarget}) /call MoveToMob 
/if (${RV_HasTarget}) /call CombatSub 
|/if (${RV_HasTarget}) /call MoveToMob 
|/if (${RV_HasTarget} && (${Defined[RV_LootArray]} || ${RV_LootAllItems})) /call LootMob 
/if (${RV_DisplayStats}) /call DisplayStats 
/call ResetSub 

/varset RV_RandomWait ${Math.Rand[7]} 
/varcalc RV_RandomWait ${RV_RandomWait} 
/echo Paranoia - Waiting ${RV_RandomWait} seconds before resuming 
/delay ${RV_RandomWait}s 

/if (${Target.ID}) { 
/echo Looks like something is attacking us, killing it... 
/delay 1s 
/varset RV_HasTarget 1 
/varset RV_Fighting 1 
/goto :KillAdds 
} 

/goto :Start
/return

Sub Event_TooClose
/tar clear
/return

Sub Event_Zoned
/sit
/delay 1m
/camp
/delay 1m
/endmacro

Sub Event_TarFar
/call Heal
    /doevents
    /handlecursor
    /delay 1s

    /if (${TooFar}==0) {
    /varcalc TooFar ${TooFar}+1
    /tar clear
    /echo TooFar 1
    /return
    }
    /if (${TooFar}==1) {
    /varcalc TooFar ${TooFar}+1
    /tar clear
    /echo TooFar 1
    /return
    }
    /if (${TooFar}==2) {
    /varcalc TooFar ${TooFar}+1
    /tar clear
    /echo TooFar 1
    /return
    }
    /if (${TooFar}==3) {
    /varset TooFar 0
    /tar clear
    /echo TooFar 2
    /echo calling sentinal mode
    /echo Reset TooFar to 0
    /call Sentinal
    /return
    }
/return

Sub Sentinal
    /call GMCheck 
    /call Heal
    /doevents
    /call GMCheck 
    /if (${Sentinal}==0) {
        |IF 0 goto BASE1
        /echo Sentinal is - ${Sentinal}
        /varcalc Sentinal ${Sentinal}+1
        /echo ADDING 1 to Sentinal - - ${Sentinal}
        /echo Sentinal is - ${Sentinal}

        /echo GOING TO BASE1
        /delay 2
        /call MoveToLoc 671 -1036
        /call MaintainBuffs
        /varset CurrentBaseX ${Int[${Me.X}]} 
        /varset CurrentBaseY ${Int[${Me.Y}]}
        /return
    }

    /if (${Sentinal}==1) {
        |IF 1 goto BASE2A
        /echo Sentinal is - ${Sentinal}
        /varcalc Sentinal ${Sentinal}+1
        /echo ADDING 1 to Sentinal - - ${Sentinal}
        /echo Sentinal is - ${Sentinal}

        /echo GOING TO BASE2A (but hittin the outpost and BASE2 first)
        /ALT ACT 80
        /delay 5s
        /call MoveToLoc 640 -825
        /delay 2s
        /call MoveToLoc 704 -620
        /delay 2s
        /call MoveToLoc 815 -311
        /delay 2s
        /call MaintainBuffs
        /varset CurrentBaseX ${Int[${Me.X}]} 
        /varset CurrentBaseY ${Int[${Me.Y}]} 
        /return
    }


    /if (${Sentinal}==2) {
        |IF 2 goto X
        /echo Sentinal is - ${Sentinal}
        /varcalc Sentinal ${Sentinal}+1
        /echo ADDING 1 to Sentinal - - ${Sentinal}
        /echo Sentinal is - ${Sentinal}

        /echo GOING TO X
        /call MoveToLoc 853 540
        /delay 3s
        /call MaintainBuffs
        /varset CurrentBaseX ${Int[${Me.X}]} 
        /varset CurrentBaseY ${Int[${Me.Y}]} 
        /return
    }

    /if (${Sentinal}==3) {
        |IF 2 goto Peninsula
        /echo Sentinal is - ${Sentinal}
        /varcalc Sentinal ${Sentinal}+1
        /echo ADDING 1 to Sentinal - - ${Sentinal}
        /echo Sentinal is - ${Sentinal}


        /echo GOING TO Peninsula
        /ALT ACT 80
        /call MoveToLoc 781 613
        /call MoveToLoc 729 639
        /call MoveToLoc 339 655
        /call MaintainBuffs
        /varset CurrentBaseX ${Int[${Me.X}]} 
        /varset CurrentBaseY ${Int[${Me.Y}]} 
        /return
    }

    /if (${Sentinal}==4) {
        |IF 2 goto BASE1
        /echo Sentinal is - ${Sentinal}
        /varset Sentinal 0 
        /echo RESETING Sentinal - ${Sentinal}
        /echo Sentinal is - ${Sentinal}


        /echo GOING TO BASE2A (but hittin the outpost and BASE2 first)
        /ALT ACT 80
        /call MoveToLoc 729 639

        /call MoveToLoc 781 613

        /call MoveToLoc 853 540

        /call MoveToLoc 825 -292

        /call MoveToLoc 704 -620

        /call MoveToLoc 640 -825

        /call MoveToLoc 684 -1036

        /echo safe and sound at home BASE1
        /call MaintainBuffs
        /varset CurrentBaseX ${Int[${Me.X}]} 
        /varset CurrentBaseY ${Int[${Me.Y}]} 
        /return
    }

Sub Heal
/if (${Int[${Me.PctHPs}]}<40) {
    /zone nedaria
    /delay 4m
    :Heal
    /target ${Me.Name} 
    /call Cast "Greater Healing" gem2
    /if (${Me.PctHPs}<95) /goto :Heal

    /echo Sentinal is - ${Sentinal}
    /varset Sentinal 0 
    /echo RESETING Sentinal - ${Sentinal}

    /zone natimbi
    /delay 4m
    /ALT ACT 80
    /call Sentinal
    }
/return

    

||||||||||||||||||||||||||||||||||||||||||||||||||  |||||||||
Sub Event_WardOff
     /keypress forward 
     /keypress back
     /keypress forward 
     /keypress back
     /call Cast "Planestriders Hauberk" item
     /return

Sub Event_SpeedOff
     /keypress forward 
     /keypress back
     /keypress forward 
     /keypress back
     /call Cast "Eyepatch of Plunder" item
     /return


|||||||||||||||||||SUB: MaintainBuffs |||||||||||||||||||||||||
Sub MaintainBuffs
/call GMCheck  
/call Heal
/autoinv

      /if (${Me.Buff[Greater Wolf Form].Duration}<30) {
      /target ${Me.Name} 
      /call Cast "Greater Wolf Form" gem1
      }
   /if (${Me.Buff[Feet Like Cat].Duration}<30) {
      /target ${Me.Name} 
      /call Cast "Feet Like Cat" gem5
   }
   /if (${Me.Buff[Storm Strength].Duration}<30) {
      /target ${Me.Name} 
      /call Cast "Storm Strength" gem5
      /delay 2s
      /cal cast "Spirit of Eagle" gem3
   }

   /if (${Me.Buff[Captain Nalots Quickening].Duration}<30) {
      /target ${Me.Name}
      /cast item "Eyepatch of Plunder"
      /itemnotify face rightmouseup
      /delay 4s
   }
   /if (${Me.Buff[Protection of the Wild].Duration}<30) { 
      /target ${Me.Name}
      /cast item "Planestriders Hauberk" item 
      /delay 7s
      /itemnotify chest rightmouseup
      /delay 7s
   } 

   /if (${Me.Buff[Bramblecoat].Duration}<30) {
      /target ${Me.Name} 
      /call Cast "Bramblecoat" gem2
   }
   /if (${Me.Buff[Chloroplast].Duration}<30) {
      /target ${Me.Name} 
      /call Cast "Chloroplast" gem4
   }
   /if (${Me.Buff[Skin like Diamond].Duration}<30) {
      /target ${Me.Name} 
      /call Cast "Skin like Diamond" gem4
   }
   /if (${Me.Buff[Nature's Precision].Duration}<30) {
      /target ${Me.Name} 
       /call Cast "Nature's Precision" gem4
   }
   /if (${Me.Buff[Eagle Eye].Duration}<30) {
      /target ${Me.Name} 
       /call Cast "Eagle Eye" gem2
   }
   /squelch /target clear 
/return

|-------------------------------------------------------------------------------- 
|SUB: Aquire Target 
|-------------------------------------------------------------------------------- 
Sub GetTarget 
/call Heal
/call GMCheck 

/declare RV_CurrentRadius int local 
/declare RV_TargetSub int local 
:Acquire 
/doevents
/for RV_CurrentRadius 100 to ${RV_MaxRadius} step 100 
/for RV_TargetSub 1 to ${RV_MobArray.Size} 
|||||CHANGED THIS AFTER NOPCNEAR
/squelch /target radius ${RV_CurrentRadius} nopcnear 200 npc "${RV_MobArray[${RV_TargetSub}]}" 
/varset RV_MyTargetID ${Target.ID} 
/varset RV_MyTargetDead 0 
/if (${Target.ID}) { 
|/if (${Int[${Target.PctHPs}]}<80) { 
|/echo Mob NOT a Full Health, picking another... 
|/varset RV_InvalidTargetID ${Target.ID} 
|/call ResetSub 
|/goto :Acquire 
|} 
/if (${Int[${Target.Z}]}<${RV_MinZRange}) { 
/echo Mob is BELOW Min Z Range, picking another... 
/varset RV_InvalidTargetID ${Target.ID} 
/call ResetSub 
/goto :Acquire 
} 
/if (${Int[${Target.Z}]}>${RV_MaxZRange}) { 
/echo Mob is ABOVE Max Z Range, picking another... 
/varset RV_InvalidTargetID ${Target.ID} 
/call ResetSub 
/goto :Acquire 
} 
/varset RV_HasTarget 1 
/varset RV_MyTargetName ${Target.CleanName} 
/echo Acquired ${Target.CleanName} at range ${Int[${Target.Distance}]} 
/return 
} 
/next RV_TargetSub 
/delay 2 
/next RV_CurrentRadius 

/if (!${Target.ID}) { 
/delay 2s 
/varcalc RV_FailCounter ${RV_FailCounter}+1 
/echo Failed to Acquire Target in Range ${RV_MaxRadius} ${RV_FailCounter} Time(s) 
/if (${RV_FailCounter}>=${RV_FailMax}) { 
/echo Waiting for Respawns, Resetting Failure Counter... 
/call CheckAnchor 
/delay 60s 
  
/varset RV_FailCounter 0 
} 
/goto :Acquire 
} 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Moving 
|-------------------------------------------------------------------------------- 
Sub MoveToMob 
/call Heal

/varset RV_MyXLOC ${Int[${Me.X}]} 
/varset RV_MyYLOC ${Int[${Me.Y}]} 
/declare RV_DistanceTimer timer 15 

/doevents 
|/handlecursor

:MovementLoop 

/if ((!${RV_Fighting})&&(!${RV_TargetDead})&&(${Target.PctHPs}>100)) { 
/echo Mob not at full health, picking another... 
/varset RV_InvalidTargetID ${Target.ID} 
/varset RV_HasTarget 0 
/call ResetSub 
/return 
} 

/if (${Target.ID}) { 
/face fast 
} 
/if (${Int[${Target.Distance}]}>${RV_FastRange}) { 
/keypress forward hold 
} 
/if (${Int[${Target.Distance}]}<${RV_FastRange}&&${Int[${Target.Distance}]}>${RV_RangeMax}) { 
/keypress forward 
} 
/if (${Int[${Target.Distance}]}<${RV_RangeMin}) { 
/keypress back 
} 
/if (!${RV_DistanceTimer}) { 
/if ((${RV_MyXLOC}==${Int[${Me.X}]})&&(${RV_MyYLOC}==${Int[${Me.Y}]})) /call HitObstacle 
/varset RV_MyXLOC ${Int[${Me.X}]} 
/varset RV_MyYLOC ${Int[${Me.Y}]} 
/varset RV_DistanceTimer 15 
/goto :Movementloop 
} 
/if (${Int[${Target.Distance}]}>${RV_FastRange}) /goto :MovementLoop 

/return 

|-------------------------------------------------------------------------------- 
|SUB: Combat 
|-------------------------------------------------------------------------------- 
Sub CombatSub 
/call Heal

/echo Attacking Mob NOW! 
/varset RV_Fighting 1 
/varset RV_TargetDead 0
/ALT ACT 184 
|/disc trueshot

:CombatLoop 
/call GMCheck 
/call Heal
/doevents 
|/handlecursor

/if (${Param1.equal[1]}) { 
/pet attack 
} 
/face  
/ranged

|/call MoveToMob 

/if (!${Target.ID}) { 
/attack off 
/keypress forward 
/keypress back 

/varset RV_TargetDead 1 
/varset RV_Fighting 0 
/delay 1s 
|||||||||||||||||||||||||||||||||||||||      LOOT____WARP     ||||||||||||||||||||||||||||||||||||||||||||||||||  ||||||||
/if (${SpawnCount[pc radius 1100]}>1) { 
     /echo PC close 
     /echo pausing the macro... 
     /delay 3s
} else {
   /if ((${LootMobs}==1) && (!${Me.Moving})) {
     /delay 6 
||     /call LootMob
|| Dont use - it cant get back to the correct spot
   }
}
/echo THIS WORKED 1
/delay 1s 
/if (!${Target.ID}) { 
/call ResetSub 
/return 
} 
/face fast 
} 
/if (!${RV_TargetDead}) { 
/goto :CombatLoop 
} 

/return 

|-------------------------------------------------------------------------------- 
|SUB: Special Combat 
|-------------------------------------------------------------------------------- 
Sub SpecialIt 

/declare TempID int inner 0 

/if (${Param2.equal[1]}) { 
/cast $(Param3) 
} 

/if (${Param4.equal[1]}) { 
/call Heal 
} 

/return 

|-------------------------------------------------------------------------------- 
|SUB: Looting 
|-------------------------------------------------------------------------------- 
Sub LootMob 

/declare LootSlot int inner 0 
/declare LootCheck int inner 0 
/declare LootTotal int inner 0 

/face fast 

/keypress forward 
/keypress back 

/fastdrop on 
/lootn never 
/delay 2s 
/loot 
/delay 2s 
/if (!${Corpse.Items}) { 
/echo NO LOOT! Cheap Bastard! 
/return 
} 

/varset LootTotal ${Corpse.Items} 
/for LootSlot 1 to ${LootTotal} 
/itemnotify loot${LootSlot} leftmouseup 
/delay 1s 
/if (${RV_LootAllItems}) { 
/echo Keeping a ${Cursor.Name}... WOOT! 
/autoinventory 
/delay 1s 
} else { 
/for LootCheck 1 to ${RV_LootArray.Size} 
/if (${Cursor.Name.Find[${RV_LootArray[${LootCheck}]}]}) { 
/echo Keeping a ${Cursor.Name}... WOOT! 
/varcalc RV_LootStats[${LootCheck}] ${RV_LootStats[${LootCheck}]}+1 
/autoinventory 
/delay 1s 
} 
/next LootCheck 
} 
/if (${Cursor.ID}) { 
/echo Destroying a ${Cursor.Name}... 
/destroy 
/delay 1s 
} 
/next LootSlot 

/notify LootWnd DoneButton leftmouseup 
/delay 2 

/return 

|-------------------------------------------------------------------------------- 
|SUB: Reset 
|-------------------------------------------------------------------------------- 
Sub ResetSub 

/tar clear

/varset RV_HasTarget 0 
/varset RV_TargetDead 0 
/varset RV_Fighting 0 

/return 

|-------------------------------------------------------------------------------- 
|SUB: Obstacle Avoidance 
|-------------------------------------------------------------------------------- 
Sub HitObstacle 

/echo Obstacle hit, moving around it... 
/keypress forward 
/keypress back hold 
/delay 3 
/keypress back 
/if (${Math.Rand[100]}+1>50) { 
/keypress strafe_right hold 
} else { 
/keypress strafe_left hold 
} 
/delay 5 
/keypress strafe_right 
/keypress strafe_left 
/keypress forward hold 

/return 

|-------------------------------------------------------------------------------- 
|SUB: GM Check 
|-------------------------------------------------------------------------------- 
Sub GMCheck 

:check
/if (${SpawnCount[pc radius 55]}>1) { 
     /echo PC close 
     /echo pausing the macro... 
     /keypress forward 
     /keypress back 
     /delay 5s
    /goto :check
} 

/if (${Spawn[gm].ID}) { 
     /echo GM has entered the zone! 
     /echo $&#* HIM but pausing the macro... 
     /keypress forward 
     /keypress back 
     /delay 60s
} 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Reading from an INI File 
|-------------------------------------------------------------------------------- 
Sub ReadINI(FileName,SectionName,ArrayType) 

/echo Attempting to Read Section "${SectionName}" Zone Information from ${FileName}... 
/delay 1s 

/if (${Ini[${FileName},${SectionName},-1,NO].Equal[NO]}) { 
/echo "${SectionName}" is not a Valid Section for FILE:${FileName}, ending macro... 
/delay 1s 
/return 
} 
/declare nValues int local 1 
/declare nArray int local 0 
/declare KeySet string local ${Ini[${FileName},${SectionName}]} 

:CounterLoop 
/if (${String[${Ini[${FileName},${SectionName},${ArrayType}${nValues}]}].Equal[null]}) { 
/varcalc nValues ${nValues}-1 
/goto :MakeArray 
} 
/varcalc nValues ${nValues}+1 
/goto :CounterLoop 

:MakeArray 
/if (!${nValues}) /return 
/if (${FileName.Equal["HunterMob.ini"]}&&${nValues}>0) { 
/echo Declaring Mob Array... 
/declare RV_MobArray[${nValues}] string outer 
/declare RV_MobStats[${nValues}] string outer 
} 
/if (${FileName.Equal["HunterLoot.ini"]}&&${nValues}>0) { 
/echo Declaring Loot Array... 
/declare RV_LootArray[${nValues}] string outer 
/declare RV_LootStats[${nValues}] string outer 
} 
/for nArray 1 to ${nValues} 
/if (${FileName.Equal["HunterMob.ini"]}) { 
/varset RV_MobArray[${nArray}] ${Ini[${FileName},${SectionName},${ArrayType}${nArray}]} 
/varset RV_MobStats[${nArray}] 0 
} 
/if (${FileName.Equal["HunterLoot.ini"]}) { 
/varset RV_LootArray[${nArray}] ${Ini[${FileName},${SectionName},${ArrayType}${nArray}]} 
/varset RV_LootStats[${nArray}] 0 
} 
/next nArray 

/echo "${SectionName}" Zone Information Read Successfully from ${FileName}... 
/delay 1s 

/return 

|-------------------------------------------------------------------------------- 
|SUB: Display Stats 
|-------------------------------------------------------------------------------- 
Sub DisplayStats 

/declare nArray int local 

/if (${Defined[RV_LootArray]}) { 
/for nArray 1 to ${RV_LootArray.Size} 
/echo ${Int[${RV_LootStats[${nArray}]}]} ${RV_LootArray[${nArray}]}'s 
/next nArray 
} 

/return 

|-------------------------------------------------------------------------------- 
|SUB: Forage 
|-------------------------------------------------------------------------------- 
Sub Forage 

/cleanup 

| Verify that we have the ability to forage. 
/if (${Me.Skill[Forage]}==0) { 
/echo You cannot forage, silly person! 
/goto :Exit 
} 

| Stand up. Can't forage while sitting. 
/if (${Me.State.NotEqual[STAND]}) { 
/stand 
/delay 5 
}  

| If we can forage then do so. 
/if (${Me.AbilityReady[Forage]}) { 
/doability forage 
} 

| If we successfully foraged something then take care of it. 
/if (${Cursor.ID}) { 
/call HandleItem 
}  

:Exit 

/return 

|-------------------------------------------------------------------------------- 
|SUB: HandleItem 
|-------------------------------------------------------------------------------- 
sub HandleItem 

/declare ItemSetting int local 
/declare NotFound int local 

/varset NotFound -1 

| Look up this item in yafm.ini 
/varset ItemSetting ${Ini[yafm.ini,ForageList,${Cursor.Name},${NotFound}]} 

/delay 5 

| If the item isn't in the .ini file then add it. 
/if (${ItemSetting}==${NotFound}) { 

/ini "yafm.ini" "ForageList" "${Cursor.Name}" "1" 

/varset ItemSetting 1 

} 

| If we're keeping this item then stash it in our bags. 
| Otherwise, just destroy it. 
/if (${ItemSetting}==1) { 

:LootIt 
/autoinventory 
/delay 5 
/if (${Cursor.ID}) /goto :LootIt 

} else { 

/destroy 

} 

/return 


|-------------------------------------------------------------------------------- 
|SUB: MoveToAnchor 
|-------------------------------------------------------------------------------- 
Sub MoveToAnchor 
/declare iCount int local 
/varset iCount 0 

/echo Moving to Anchor at Loc: ${AnchorY}, ${AnchorX}. 

:AnchorMoveLoop 
/delay 1 
/doevents 
|/handlecursor
/face nolook loc ${AnchorY},${AnchorX} 

/if (${Math.Distance[${AnchorY},${AnchorX}]}>12) { 
/keypress forward hold 
} else { 
/keypress forward 
/face away loc ${AnchorY},${AnchorX} 
/return 
} 

/if (${iCount}>2) { 
/call Detectobst 
/face nolook loc ${AnchorY},${AnchorX} 
/varset iCount 0 
} 

/varcalc iCount ${iCount}+1 
/goto :AnchorMoveLoop 
/return 

|-------------------------------------------------------------------------------- 
|SUB: CheckAnchor 
|-------------------------------------------------------------------------------- 
Sub CheckAnchor 
/if (${Math.Distance[${AnchorY},${AnchorX}]}>12) /call MoveToAnchor 
/return 

|-------------------------------------------------------------------------------- 
|SUB: MoveToAnchor 
|-------------------------------------------------------------------------------- 
Sub MoveToAnchor 
/declare iCount int local 
/varset iCount 0 

/echo Moving to Anchor at Loc: ${AnchorY}, ${AnchorX}. 

:AnchorMoveLoop 
/delay 1 
/doevents 
|/handlecursor
/face nolook loc ${AnchorY},${AnchorX} 

/if (${Math.Distance[${AnchorY},${AnchorX}]}>12) { 
/keypress forward hold 
} else { 
/keypress forward 
/face away loc ${AnchorY},${AnchorX} 
/return 
} 

/if (${iCount}>2) { 
/call CheckObstacle 
/face nolook loc ${AnchorY},${AnchorX} 
/varset iCount 0 
} 

/varcalc iCount ${iCount}+1 
/goto :AnchorMoveLoop 
/return 

|-------------------------------------------------------------------------------- 
|SUB: CheckObstacle 
|-------------------------------------------------------------------------------- 
|# Checks to see if we may have bumped into something that is stopping us 
sub CheckObstacle 
|# Record our current position, wait a moment and then check if its the same 
/varset MyXLOCA ${Me.X} 
/varset MyYLOCA ${Me.Y} 
/delay 2 
/if (${MyXLOCA}==${Me.X} && ${MyYLOCA}==${Me.Y}) /call Obstacle 
/return 

|-------------------------------------------------------------------------------- 
|SUB: Obstacle 
|-------------------------------------------------------------------------------- 
|# Uses strafe and randomness to try and get around things 
sub Obstacle 
/keypress forward 
/keypress back hold 
/delay 5 
/keypress back 
/if (${Math.Rand[2]}) { 
/keypress strafe_right hold 
/delay 3 
/keypress strafe_right 
} else { 
/keypress strafe_left hold 
/delay 3 
/keypress strafe_left 
} 
/keypress forward hold 
/return 

|-------------------------------------------------------------------------------- 
|SUB: CheckAnchor 
|-------------------------------------------------------------------------------- 
Sub CheckAnchor 
/if (${Math.Distance[${AnchorY},${AnchorX}]}>12) /call MoveToAnchor 
/return 

|-------------------------------------------------------------------------------- 
|SUB: CheckAnchor 
|-------------------------------------------------------------------------------- 
Sub Heal 
/if ((${Int[${Me.PctHPs}]}<50)&&(${Me.Gem[$(Param5)]})&&(${Me.SpellReady[$(Param5)]})) { 
/varset TempID ${Target.ID} 
/keypress forward 
/keypress back 
/keypress F1 
/echo Casting Heal Spell because of low health... 
/cast $(Param5) 
/delay 3s 
/target id ${TempID} 
} 
/return
 
Re: Redguides Listing of Confirmed Macros

Simplesham do my bidding by Nyghteyes

http://www.redguides.com/community/showthread.php?t=11495

This macro currently:
will Slow,Q,Follow, and stop via tells
will patch heal at 65%
will Q after slow, and then re-Q on you once it wears off if your below 90%
will Keep Haste and Regen on tank
will keep a kei pot X on you "Comment out /call mana if your not using pots
will tell master if lom

Lots could be added to this or modified from here.

I pieced this together to box my 65 shm on my couch with my 15" crap lcd and nobody had a small working shm mac.

Code pieces Thanks to Redguide.com and its posters
Rich (BB code):
 | ****Nyghteyes's simplesham****Redguides.com****
|Useage: /mac NAMEOFTHISMAC NAMEOFTANK
|
|put name of your tank in multiple spots in the events 
|section "NAMEOFMASTER" and each event is pretty self explanitory.
|
|Gem1=Patch Heal
|Gem2=Quiescence
|Gem3=Replenishment
|Gem4=Turgurs
|Gem7=Swift like the wind
|Elixir of Clarity in Potionbelt slot 1
|


#turbo 10
#include spell_routines.inc 
#Chat tell 
#Chat chat
#event bitch "NAMEOFMASTER tells you#*#get this#*#"
#event haste "Your swift like the wind spell has worn off of NAMEOFMASTER#*#"
#event regen "Your Replenishment spell has worn off of NAMEOFMASTER#*#"
#event quien "Your Quiescence spell has worn off of NAMEOFMASTER#*#"
#event qui "NAMEOFMASTER tells you#*#Q me pls#*#"
#event stay "NAMEOFMASTER tells you#*#stay here#*#"
#event follow "NAMEOFMASTER tells you#*#follow me#*#"


Sub Main
 /deletevar Master 
 /declare Master string Global
 /varset Master ${Param0}
 /echo Starting Healer-Slower Assist Macro
 /echo Master Set to ${Master} 

:mainloop
/doevents 
/doevents chat 
/doevents tell 
/call health
/call mana
/goto :mainloop 
/return


|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Health check 
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Sub health 
 /target ${Master}
 /if (${Target.PctHPs} < 65) {
	/call cast "Tnarg`s Mending" gem1
        } 
 /return 

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Quiescence after slow and if it wears off
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Sub event_quien
 /target ${Master} 
 /if (${Target.PctHPs} < 90) {
        /call cast "Quiescence" gem2
	/echo HoT ${Master} now
	}
/return


|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Quiescence on tell
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Sub event_qui
 /target ${Master} 
        /call cast "Quiescence" gem2
	/echo HoT ${Master} now
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Bitch slowing your shit 
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Sub event_bitch
      :Slow_Loop
/assist ${Master}
/if (!${Target.ID}) /return
/call cast "Turgur's Insects" gem4
/if (${Macro.Return.Equal["CAST_INTERRUPTED"]}) {
/goto :Slow_Loop
/delay 1s
}
/if (${Macro.Return.Equal["CAST_RESISTED"]}) {
/goto :Slow_Loop
/tell ${Master} ${Target.ID} Still trying to slow 
/delay 3s
}
/if (${Macro.Return.Equal["CAST_FIZZLE"]}) {
/goto :Slow_Loop
/delay 1s
}
/if (${Macro.Return.Equal["CAST_IMMUNE"]}) {
/delay 1s
/tell ${Master} ${Target.ID} Immune to slow
}
	 /call event_quien
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Sub Follow the tank 
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Sub event_follow

/target ${Master}
        /delay 1s
 	/stick 
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Regeneration
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Sub event_regen
/target ${Master}
	/delay 1s 	
        /call cast "Replenishment" gem3
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Checking Mana
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 

Sub mana
/if (${Me.PctMana}<15) /tell ${Master} LoM Need to Canni soon
/if (!${Me.Buff["Elixir of Clarity X"].ID}) /potionbelt Activate 1
/return

|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|Stay put dammit...good dog
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Sub event_stay
    /stick off
    /keypress left
    /keypress right
    /echo Stopping here
/return
 
Re: Redguides Listing of Confirmed Macros

Shroud AFX Exp by solar and PayBackTime

http://www.redguides.com/community/showthread.php?t=11611

This works great at any level below 30 but not so well above 30. Make sure you have the stone that you get for LDON's you'll need that. My brother and I've used it to get from level 15 to 50 in a long weekend.

Make sure you change the password at the very end. No need in an IRC room full of people saying "Password" and everyone loging out.

Any you're all wellcome to join the server to watch! (that's the fun part)
Rich (BB code):
  |30Shroud from solar and PayBackTime
|What you need to do to use this.
|First shroud as something that can fight (I suggest the Raptor) at level 30
|load up with bandages and some level II HOT potions if you want to run it more than 12 hours get some food and drink too. and get to nedaria's landing (/zone nedaria)
|Setup your AA points and save them.  Attack speed is nice :)
|then run this mac and watch
|
|TODO:
|add event dzquit for stuck most of the time you stay in the rat room
|-------------------------------------------------------------------------------
|Changes we've made :)  This is still a work in progress!
|------------------------------------------------------------------------------
|Zone checks and GM checks before each use of the warp
|loadModule for the Rwarp command.
|Removed use of all waypoints and we now use real loc's with zone id checks
|will echo how much exp and aa exp (and points) after each zone
|added a logout password and restart mission
|removed my taunt about keypress 1
|removed the linux commands sleep from macro and replaced delay :?
|added a TODO area to make note of changes I'd like to see
|removed the need for the keypress one making this a real script that can run
|added a /return in newround and cleaned up code
|Rewrote a new Sub for restarting the mac.  No need in having it in here 5 times the exact same.
|Another Route that will get you into the zone if you've gotten stuck in the Guildloby
|Echo your money and stats to the IRC room
|Getting back into the mission once you've died
|Looting for coprses
|Working version of newround
|The abilty to get a new round
|Spits Leadership data to the IRC room
|connects to the IRCD
|-------------------------------------------------------------------------------
|Macro shroud5 for mq2 by PayBackTime, version 30MAR2006
|	/notify progressionselectionwnd Progressionbranchlist listselect 3
|What's new:
|Added the functions to allow using 3 types of potions:
|  1) Distillate of health II (POK bought. Don't use it if you have boon of vitality spell)
|      -- this is an AC/hp buff, casters need this to survive.
|      -- you must place this potion at an inventory slot (i.e., not in bags)
|      -- you need 12 of this potion if you plan to stay for the entire 6 hours
|  2) Distillate of celestial healing II (POK bought. By using this you don't need bandages)
|      -- this is a Heal over time spell, trigged when your hp drops to below 60%
|      -- you must put this potion at your potion belt 1 position, however you don't
|         need to put actual potions in an inventory slot. You can put them in bags.
|         (shift-p to open the potion belt, Ctrl-click the potion, then click position 1 of potion belt)
|      -- you need maybe 60 of this potion if you plan to stay for the entire 6 hours
|  3) Distillate of skinspikes II (can only be made by shamans. This is a 10point DS)
|      -- this is a 10 point DS, will help you kill a lot faster!
|      -- you must put this potion at your potion belt 2 position, however you don't
|         need to put actual potions in an inventory slot. You can put them in bags.
|         (shift-p to open the potion belt, Ctrl-click the potion, then click position 2 of potion belt)
|      -- you need 30 of this potion if you plan to stay for the entire 6 hours
|Also the macro will end when you enter POK or Nedaria, or a GM enters the zone.
|Fixed the problem of stucking behind the box in rat room
|
|What this macro does:
|
|*Use a shrouded level 5 and hunt in the forgotten hall for unlock shroud forms
|
|*What you need to do before invoking the macro:
|
|*You must go to Nedaria's landing after changing into a level 5 shrouded form,
| and say 'interested in visiting' to NPC Eldros Danmor to start an instance of
| the forgotten hall. Zone in is at eastern side, in a cave. Click the lone stone
| besides the NPC standing there. The instance will last for 6 hours.
| WARNING: WOLVES MAY BE KOS TO CERTAIN CLASSES, THEY ARE LEVEL 20+ SO BE AWARE!
|
|*You also need to bring backpacks of bandages with you. Bandages can be purchased
| from the female merchant in front of the small bank in POK. Suggest 2-3 backpacks
| for casters, 1 for melees.
|
|*It is recommended that you bring potions (follow the above instructions)
| for caster type shrouds.
| 
|*Invoke the macro after zoning into the forgotten hall and get to the rat room,
| Do not invoke it at zone in since the program assumes you are either in the 3 rooms,
| or somewhere in between any two rooms.
|
|The following are some values in echo'ed messages in case you wonder what they mean:
|
|*Values for room (RV_ROOM): 1=rat room, 2=bat room, 3=reject room
|
|*Values for corridor (RV_CORR): 10=rat room, 15=turn point between rat and bat rooms
|                     20=bat room, 24=outside bat room, 25=turn point between bat and reject rooms
|                     30=reject room, 35=outside reject room
|--------------------------------------------------------------------------------

	#event AltTell "#1# tells you #2#" 


Sub Main


   /declare RV_HasTarget        int outer  0
   /declare RV_TargetDead       int outer  0
   /declare RV_DotUsed          int outer  0
   /declare RV_ROOM             int outer  0
   /declare RV_CORR             int outer  0
   /declare RV_GOTO             int outer  0
   /declare RV_CNT              int outer  0
   /declare X2                  int outer  0
   /declare Y2                  int outer  0
   /declare LocXP2              int outer  0
   /declare LocXM2              int outer  0
   /declare LocYP2              int outer  0
   /declare LocYM2              int outer  0

/plugin mq2irc
/plugin mq2switch
/plugin mq2rwarp
/plugin mq2cobalt
/i quit (restarting script)
/iconnect irc.evil-fish.net 6667 #eq ${Me.Name}
/echo warp wp rat
/if (${Spawn[gm].ID}) /call PanicSub
/if (${Zone.ID}==998) /warp loc -600 145 2
/delay 2
/notify AAWindow AAW_LoadButton leftmouseup
/delay 2
/doevents

   :Start

   /call GetTarget

   :KillAdds
   /if (${RV_HasTarget}) /call CombatSub
   /call ResetSub

   /if (${Target.ID}) {
      /delay 1s
      /varset RV_HasTarget 1
      /goto :KillAdds
   }
   /call BandSub
   /goto :Start
   
/return

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

   /if (${RV_ROOM}==0) {
           /keypress esc
           /keypress esc
           /keypress esc
           /keypress esc
           /varset RV_GOTO 1
           /call RoomSub
           /return
   }

   /if (${RV_ROOM}==1) {
          /delay 2
        /target rat npc
        /if (!${Target.ID} || ${Target.Y}>-475) {
           /keypress esc
           /keypress esc
           /keypress esc
           /keypress esc
           /varset RV_GOTO 2
           /call RoomSub
           /return
        }
   }
   /if (${RV_ROOM}==2) {
           /delay 2
        /target bat npc
        /if (!${Target.ID} || ${Target.Y}>-475) {
           /keypress esc
           /keypress esc
           /keypress esc
           /keypress esc
           /varset RV_GOTO 3
           /call RoomSub
           /return
        }
   }
   /if (${RV_ROOM}==3) {
        /delay 2
        /target reject npc
        /if (!${Target.ID}) {
           /delay 2
          /target bat npc
        }
        /if (!${Target.ID} || ${Target.X}<-80) {
           /delay 2
           /keypress esc
           /keypress esc
           /keypress esc
           /keypress esc
           /target rat npc
        }
        /if (!${Target.ID} || ${Target.Y}<-500) {
           /if (!${Target.ID}) {
               /sit
               /i say wait for rat room to respawn...
               /delay 30s
               /stand
           }
           /if (${Target.Y}<-500) {
               /delay 2
               /keypress esc
               /keypress esc
               /keypress esc
               /keypress esc
               /varset RV_GOTO 1
               /call RoomSub
               /return
           }
        }
   }

   /if (${Target.ID}) {
       /varset RV_HasTarget 1
       /return
   }
 
/return

|--------------------------------------------------------------------------------
|SUB: Combat
|--------------------------------------------------------------------------------
Sub CombatSub

   /i say Attacking ${Target.Name} NOW!  ${Me.PctHPs}%HP ${Me.PctMana}%MP ${Me.PctEndurance}%Endurance ${Me.Platinum}pp ${Me.Gold}gp ${Me.Silver}sp ${Me.Copper}
   /varset RV_TargetDead 0
   /varset RV_DotUsed 0
   
   /delay 2

   :CombatLoop
 
   /call MoveSub

   /attack on

   /if (${Target.ID} && ${Me.State.NotEqual[STUN]}) {
      /if (${Target.ID}) /face fast
      /if (!${RV_DotUsed}) {
         /if (${Me.AltAbilityReady[Swarm of Pain]} && ${Me.CurrentMana} >=11 && !${Me.Moving} && !${Me.Casting.ID} ) {
         /aa act Swarm of Pain
         /varset RV_DotUsed 1
         /delay 2s
         }
         /if (${Me.AltAbilityReady[Lesion]} && ${Me.PctEndurance} >=6 && !${Me.Casting.ID} ) {
         /aa act Lesion
         /varset RV_DotUsed 1
         }
      }
      /if (${Me.AltAbilityReady[Frost]} && ${Me.CurrentMana} >=5 && !${Me.Moving} && !${Me.Casting.ID} ) {
      /aa act Frost
      /delay 2s
      }
      /if (${Me.AltAbilityReady[Mana Bolt]} && ${Me.CurrentMana} >=4 && !${Me.Moving} && !${Me.Casting.ID} ) {
      /aa act Mana Bolt
      /delay 2s
      }
      /if (${Me.AbilityReady[Kick]} && ${Target.Distance}<17 && !${Me.Casting.ID}) {
      /doability "Kick"
      }
      /if (${Me.AltAbilityReady[Maul]} && ${Me.PctEndurance} >=6 && !${Me.Casting.ID} ) {
      /aa act Maul
      /delay 2s
      }
      /if (${Me.PctHPs}<70 && ${FindItem[Distillate of Celestial Healing II].InvSlot}) {
        /potionbelt activate 1
        /delay 1s
      }
  }

   /if (!${Target.ID} || ${Target.Type.Equal[Corpse]}) {
|   /echo Leadership XP ${Me.PctGroupLeaderExp} ${Me.GroupLeaderPoints}
     /attack off
      /keypress forward
      /keypress back
     
      /varset RV_TargetDead 1
      /if (!${Target.ID}) {
         /call ResetSub
         /return
      }
   }

   /if (!${RV_TargetDead}) {
      /goto :CombatLoop
   }
   
/return

 
|--------------------------------------------------------------------------------
|SUB: Change Room
|--------------------------------------------------------------------------------
Sub RoomSub
 
    :Startmove

    /varset RV_ROOM 0
    /varset RV_CORR 0
    /if (${Me.X}>100 && ${Me.Y}<-500 )                        /varset RV_CORR 10
    /if (${Me.X}<-80 )                                        /varset RV_CORR 20
    /if (${Me.X}>60 && ${Me.Y}>-445 )                         /varset RV_CORR 30
    /if (${Me.X}>=-15 && ${Me.X}<=100 && ${Me.Y}<-500 )        /varset RV_CORR 15
    /if (${Me.X}>=-80 && ${Me.X}<-15)                          /varset RV_CORR 25
    /if (${Me.X}>=-15 && ${Me.Y}>=-500 && ${Me.Y}<=-445 )     /varset RV_CORR 35

    /if (${RV_GOTO}==1 ) /goto :Moveto1
    /if (${RV_GOTO}==2 ) /goto :Moveto2
    /if (${RV_GOTO}==3 ) /goto :Moveto3

   :Moveto1
      /if (${Me.X}>100 && ${Me.Y}<-500 ) {
         /keypress back
          /delay 2
          /varset RV_ROOM 1
          /return
      }
   :Moveroom3to1
      /if (${RV_CORR}==30 ) {   
      /face fast loc -390, 135
      /call Move2Sub
      /if (${Me.Y}<=-385 && ${Me.Y}>=-395 && ${Me.X}<=140 && ${Me.X}>=130) {
         /keypress back
         /delay 2
         /varset RV_CORR 35
         /goto :Movecorr3to1
      }
      /goto :Moveroom3to1
      }
   :Movecorr3to1
      /if (${RV_CORR}==35  ) {   
      /face fast loc -475, 135
      /call Move2Sub
      /if (${Me.Y}<=-470 && ${Me.Y}>=-480 && ${Me.X}<=140 && ${Me.X}>=130) {
         /keypress back
          /delay 2
         /varset RV_CORR 25
         /goto :Movecorr2to1
      }
      /goto :Movecorr3to1
      }
   :Movecorr2to1
      /if (${RV_CORR}==25  ) {   
      /face fast loc -475, -40
      /call Move2Sub
      /if (${Me.Y}<=-470 && ${Me.Y}>=-480 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 15
         /goto :Movecorr1to1
      }
      /goto :Movecorr2to1
      }
   :Moveroom2to1
      /if (${RV_CORR}==20 ) {   
      /face fast loc -560, -143
      /call Move2Sub
      /if (${Me.Y}<=-555 && ${Me.Y}>=-565 && ${Me.X}<=-138 && ${Me.X}>=-148) {
         /keypress back
          /delay 2
         /varset RV_CORR 24
         /goto :Movecorr24to1
      }
      /goto :Moveroom2to1
      }
   :Movecorr24to1
      /if (${RV_CORR}==24  ) {   
      /face fast loc -560, -40
      /call Move2Sub
      /if (${Me.Y}<=-555 && ${Me.Y}>=-565 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 15
         /goto :Movecorr1to1
      }
      /goto :Movecorr24to1
      }
   :Movecorr1to1
      /if (${RV_CORR}==15 ) {   
      /face fast loc -600, -40
      /if (${Me.Y}<=-595 && ${Me.Y}>=-605 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /varset RV_CORR 10
         /goto :Movelastto1
      }
      /call Move2Sub
      /if (${Me.Y}<=-595 && ${Me.Y}>=-605 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 10
         /goto :Movelastto1
      }
      /goto :Movecorr1to1
      }
   :Movelastto1
      /if (${RV_CORR}==10 ) {   
      /face fast loc -600, 150
      /call Move2Sub
      /if (${Me.Y}<=-595 && ${Me.Y}>=-605 && ${Me.X}<=155 && ${Me.X}>=145) {
         /keypress back
          /delay 2
          /varset RV_ROOM 1
          /return
      }
      /goto :Movelastto1
      }
    /goto :Moveto1

   :Moveto2
      /if (${Me.X}<-80 ) {
         /keypress back
          /delay 2
          /varset RV_ROOM 2
          /return
      }
   :Moveroom3to2
      /if (${RV_CORR}==30 ) {   
      /face fast loc -390, 135
      /call Move2Sub
      /if (${Me.Y}<=-385 && ${Me.Y}>=-395 && ${Me.X}<=140 && ${Me.X}>=130) {
         /keypress back
          /delay 2
         /varset RV_CORR 35
         /goto :Movecorr3to2
      }
      /goto :Moveroom3to2
      }
   :Movecorr3to2
      /if (${RV_CORR}==35  ) {   
      /face fast loc -475, 135
      /call Move2Sub
      /if (${Me.Y}<=-470 && ${Me.Y}>=-480 && ${Me.X}<=140 && ${Me.X}>=130) {
         /keypress back
          /delay 2
         /varset RV_CORR 25
         /goto :Movecorr2to2
      }
      /goto :Movecorr3to2
      }
   :Movecorr2to2
      /if (${RV_CORR}==25  ) {   
      /face fast loc -475, -40
      /call Move2Sub
      /if (${Me.Y}<=-470 && ${Me.Y}>=-480 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 24
         /goto :Movecorr24to2
      }
      /goto :Movecorr2to2
      }
   :Moveroom1to2
      /if (${RV_CORR}==10 ) {   
      /face fast loc -600, 150
      /call Move2Sub
      /if (${Me.Y}<=-595 && ${Me.Y}>=-605 && ${Me.X}<=155 && ${Me.X}>=145) {
         /keypress back
          /delay 2
         /varset RV_CORR 15
         /goto :Movecorr1to2
      }
      /goto :Moveroom1to2
      }
   :Movecorr1to2
      /if (${RV_CORR}==15 ) {   
      /face fast loc -600, -40
      /call Move2Sub
      /if (${Me.Y}<=-595 && ${Me.Y}>=-605 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 24
         /goto :Movecorr24to2
      }
      /goto :Movecorr1to2
      }
    :Movecorr24to2
      /if (${RV_CORR}==24  ) {   
      /face fast loc -560, -40
      /call Move2Sub
      /if (${Me.Y}<=-555 && ${Me.Y}>=-565 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 20
         /goto :Movelastto2
      }
      /goto :Movecorr24to2
      }
   :Movelastto2
      /if (${RV_CORR}==20 ) {   
      /face fast loc -560, -143
      /call Move2Sub
      /if (${Me.Y}<=-555 && ${Me.Y}>=-565 && ${Me.X}<=-138 && ${Me.X}>=-148) {
         /keypress back
           /delay 2
          /varset RV_ROOM 2
          /return
      }
      /goto :Movelastto2
      }
    /goto :Moveto2

   :Moveto3
      /if (${Me.X}>60 && ${Me.Y}>-445 ) {
         /keypress back
          /delay 2
          /varset RV_ROOM 3
          /return
      }
   :Moveroom1to3
      /if (${RV_CORR}==10 ) {   
      /face fast loc -600, 150
      /call Move2Sub
      /if (${Me.Y}<=-595 && ${Me.Y}>=-605 && ${Me.X}<=155 && ${Me.X}>=145) {
         /keypress back
          /delay 2
         /varset RV_CORR 15
         /goto :Movecorr1to3
      }
      /goto :Moveroom1to3
      }
   :Movecorr1to3
      /if (${RV_CORR}==15 ) {   
      /face fast loc -600, -40
      /call Move2Sub
      /if (${Me.Y}<=-595 && ${Me.Y}>=-605 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 25
         /goto :Movecorr2to3
      }
      /goto :Movecorr1to3
      }
   :Moveroom2to3
      /if (${RV_CORR}==20 ) {   
      /face fast loc -560, -143
      /call Move2Sub
      /if (${Me.Y}<=-555 && ${Me.Y}>=-565 && ${Me.X}<=-138 && ${Me.X}>=-148) {
         /keypress back
          /delay 2
         /varset RV_CORR 24
         /goto :Movecorr24to3
      }
      /goto :Moveroom2to3
      }
    :Movecorr24to3
      /if (${RV_CORR}==24  ) {   
      /face fast loc -560, -40
      /call Move2Sub
      /if (${Me.Y}<=-555 && ${Me.Y}>=-565 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 25
         /goto :Movecorr2to3
      }
      /goto :Movecorr24to3
      }
   :Movecorr2to3
      /if (${RV_CORR}==25  ) {   
      /face fast loc -475, -40
      /call Move2Sub
      /if (${Me.Y}<=-470 && ${Me.Y}>=-480 && ${Me.X}<=-35 && ${Me.X}>=-45) {
         /keypress back
          /delay 2
         /varset RV_CORR 35
         /goto :Movecorr3to3
      }
      /goto :Movecorr2to3
      }
   :Movecorr3to3
      /if (${RV_CORR}==35  ) {   
      /face fast loc -475, 135
      /call Move2Sub
      /if (${Me.Y}<=-470 && ${Me.Y}>=-480 && ${Me.X}<=140 && ${Me.X}>=130) {
         /keypress back
          /delay 2
         /varset RV_CORR 30
         /goto :Movelastto3
      }
      /goto :Movecorr3to3
      }
   :Movelastto3
      /if (${RV_CORR}==30 ) {   
      /face fast loc -390, 135
      /call Move2Sub
      /if (${Me.Y}<=-385 && ${Me.Y}>=-395 && ${Me.X}<=140 && ${Me.X}>=130) {
         /keypress back
          /delay 2
          /varset RV_ROOM 3
          /return
      }
         /goto :Movelastto3
      }
    /goto :Moveto3
/return


|--------------------------------------------------------------------------------
|SUB: Move2, moving when you do not have a target, esp. moving from room to room
|--------------------------------------------------------------------------------
Sub Move2Sub
     
      /if (${Spawn[gm].ID}) /call PanicSub
      /if (${Spawn[eldros].ID}) /call NewRound
      /if (${Spawn[shroudkeeper].ID}) /call DeadSub
	/if (${Spawn[alaria].ID}) /call NedariaSub

      /keypress forward hold
      /varset X2 ${Me.X}
      /varset Y2 ${Me.Y}
      /varcalc LocXP2 ${X2}+1
      /varcalc LocXM2 ${X2}-1
      /varcalc LocYP2 ${Y2}+1
      /varcalc LocYM2 ${Y2}-1
      /delay 2
      /if (${LocXP2}>${Me.X} && ${LocXM2}<${Me.X} && ${LocYP2}>${Me.Y} && ${LocYM2}<${Me.Y}) {
         /keypress back
         /echo stucked corr= ${RV_CORR} goto= ${RV_GOTO}, retry...
         /delay 2
         /if (${Me.X}>100 && ${Me.Y}<-500 ) {
                       /if (${Me.X}>100 && ${Me.Y}<-645) {
                             /keypress back
                             /delay 2
                             /face fast loc -662, 178
                             /keypress forward hold
                             /delay 2s
                       }
                       /varset RV_CORR 10
         }
         /if (${Me.X}<-80 )                                        /varset RV_CORR 20
         /if (${Me.X}>60 && ${Me.Y}>-445 )   {
                  /keypress back
                  /delay 2
                  /face fast loc ${Math.Rand[10000]}, ${Math.Rand[10000]}
                  /keypress forward hold
                  /delay 2s
                  /varset RV_CORR 30
         }
         /if (${Me.X}>=-15 && ${Me.X}<=100 && ${Me.Y}<-500 )  {
             /if (${RV_CORR}==15 )                   /varset RV_CORR 14
             /if (${RV_CORR}<14 || ${RV_CORR}>15)    /varset RV_CORR 15
             /if (${RV_CORR}==14 )                   /varset RV_CORR 10
         }
         /if (${Me.X}>=-80 && ${Me.X}<-15) {
             /if (${RV_CORR}==15 || ${RV_CORR}==24 || ${RV_CORR}>25)    /varset RV_CORR 22
             /if (${RV_CORR}==25 || ${RV_CORR}==20 ) /varset RV_CORR 24
             /if (${RV_CORR}==10 )                   /varset RV_CORR 15
             /if (${RV_CORR}==22 )                   /varset RV_CORR 25
         }
         /if (${Me.X}>=-15 && ${Me.Y}>=-500 && ${Me.Y}<=-445 ) /varset RV_CORR 35
      }
/return

|--------------------------------------------------------------------------------
|SUB: Move, moving when you have a target, during combat, etc.
|--------------------------------------------------------------------------------
Sub MoveSub

      /varset RV_CNT 0

      :MoveLoop
     
      /stand
      /if (${Target.Distance}>17) {
              /if (${Target.ID}) /face fast
              /keypress forward hold
              /varset X2 ${Me.X}
              /varset Y2 ${Me.Y}
              /varcalc LocXP2 ${X2}+1
              /varcalc LocXM2 ${X2}-1
              /varcalc LocYP2 ${Y2}+1
              /varcalc LocYM2 ${Y2}-1
              /delay 5
              /if (${LocXP2}>${Me.X} && ${LocXM2}<${Me.X} && ${LocYP2}>${Me.Y} && ${LocYM2}<${Me.Y}) {
                  /if (${Me.X}>100 && ${Me.Y}<-500 ) {
                          /if (${Me.X}>100 && ${Me.Y}<-645) {
                                /keypress back
                                /delay 2
                                /face fast loc -662, 178
                                /keypress forward hold
                                /delay 2s
                          }
                           /keypress back
                          /delay 2
                          /face fast loc -600, 150
                          /echo  stucked when moving to mob in the rat room, retry...
                          /keypress forward hold
                          /delay 2s
                          /keypress back
                          /if (${Target.ID}) /face fast
                          /varcalc RV_CNT ${RV_CNT}+1
                          /if (${RV_CNT}>100 && ${Target.PctHPs}==100) {
                                 /keypress back
                                 /keypress esc
                                 /keypress esc
                                 /keypress esc
                                 /keypress esc
                                 /echo  stucked too many times, restarting cycles...
                                 /call RoomSub
                                 /return
                          }
                          /goto :MoveLoop
                  }
                  /if (${Me.X}<-80 )  {
                          /keypress back
                          /delay 2
                          /face fast loc -560, -143
                          /echo  stucked when moving to mob in the bat room, retry...
                          /keypress forward hold
                          /delay 2s
                          /keypress back
                          /if (${Target.ID}) /face fast
                          /varcalc RV_CNT ${RV_CNT}+1
                          /if (${RV_CNT}>100 && ${Target.PctHPs}==100) {
                                 /keypress back
                                 /keypress esc
                                 /keypress esc
                                 /keypress esc
                                 /keypress esc
                                 /echo  stucked too many times, restarting cycles...
                                 /call RoomSub
                                 /return
                          }
                          /goto :MoveLoop
                 }
                  /if (${Me.X}>60 && ${Me.Y}>-445 )  {
                          /keypress back
                          /delay 2
                          /face fast loc ${Math.Rand[10000]}, ${Math.Rand[10000]}
                          /echo  stucked when moving to mob in the reject room, retry...
                          /keypress forward hold
                          /delay 2s
                          /keypress back
                          /if (${Target.ID}) /face fast
                          /varcalc RV_CNT ${RV_CNT}+1
                          /if (${RV_CNT}>100 && ${Target.PctHPs}==100) {
                                 /keypress back
                                 /keypress esc
                                 /keypress esc
                                 /keypress esc
                                 /keypress esc
                                 /echo  stucked too many times, restarting cycles...
                                 /call RoomSub
                                 /return
                          }
                            /goto :MoveLoop
                  }
                  /keypress back
                  /keypress esc
                  /keypress esc
                  /keypress esc
                  /keypress esc
                  /echo  stucked outside, restarting cycles...
                  /call RoomSub
                  /return
              }
              /keypress back             
              /if (${Target.ID}) /face fast
              /goto :MoveLoop
      }

 
       /if (${Target.Distance}>15) {
              /if (${Target.ID}) /face fast
              /keypress forward hold
              /delay 2
              /keypress back
              /if (${Target.ID}) /face fast
      }
/return

|--------------------------------------------------------------------------------
|SUB: Reset  NOW WITH LOOTING!
|--------------------------------------------------------------------------------
Sub ResetSub

 
   /tar corpse radius 40
   /call MoveSub
   /loot
   /delay 5
   /keypress esc
   /keypress esc
   /keypress esc
   /keypress esc
   /keypress esc
   /keypress esc
   
   /varset RV_HasTarget 0
   /varset RV_TargetDead 0
   
   
/return
|--------------------------------------------------------------------------------
|SUB: Bandage, Heal and Buff Self
|--------------------------------------------------------------------------------
Sub BandSub

   /if (${Spawn[gm].ID}) /call PanicwSub
   /if (${Spawn[eldros].ID}) /call NewRound
   /if (${Spawn[shroudkeeper].ID}) /call DeadSub
   /if (${Spawn[alaria].ID}) /call NedariaSub
   /target myself
   /delay 5

   :BuffLoop
 
   /if (!${Me.Buff[Pure Thought II].ID} && ${Me.AltAbilityReady[Pure Thought]}) {
      /aa act Pure Thought
      /delay 6s
      /goto :BuffLoop
   }

   /if (!${Me.Buff[Gift of Speed II].ID} && ${Me.AltAbilityReady[Gift of Speed]}) {
      /aa act Gift of Speed
      /delay 6s
      /goto :BuffLoop
   }

   /if (!${Me.Buff[Distillate of Skinspikes].ID} && ${FindItem[Distillate of Skinspikes II].InvSlot}) {
      /potionbelt activate 2
      /delay 5s
   }
   /if (!${Me.Buff[Boon of Vitality II].ID} && !${Me.Buff[Elixir of Health II].ID}) {
      /if (${Me.AltAbilityReady[Boon of Vitality]} && ${Me.CurrentMana} >=3) {
         /aa act Boon of Vitality
         /delay 6s
         /goto :BuffLoop
      }
      /if (${FindItem[Distillate of Health II].InvSlot}>=22 && ${FindItem[Distillate of Health II].InvSlot}<=29 ) {
         /cast item "Distillate of Health II"
         /delay 3s
      }
   }

   :HealLoop
   
   /if (${Me.PctHPs} <= 65 && ${Me.AltAbilityReady[Heal Wounds]} && ${Me.PctMana} > 70) {
      /aa act Heal Wounds
      /delay 5s
      /goto :HealLoop
   }
 
   /sit
   /delay 1s

   :BandLoop
 
   /if (${Me.PctHPs} <= 69 && ${Me.AbilityReady[Bind Wound]}) {
      /target
	/doability "Bind Wound"
      /delay 15s
      /goto :BandLoop
   }

   :SitLoop
 
   /if (${Me.PctMana} >0 && ${Me.PctMana} <= 70) {
	/sit
	/doevents
	/delay 6s
      /goto :SitLoop
      }

|---------------------------- 
|Stam wait
|--------------------------------
   :StamLoop
   /if (${Me.PctEndurance} >0 && ${Me.PctEndurance} <= 60) {
      /delay 6s
	/doevents
      /goto :StamLoop
      }
   }
   /stand

   /keypress esc
   /keypress esc
   /keypress esc
   /keypress esc
       
/return
|-------------------------------------------------------------------------------
|SUB: New Round not so kludge oh mania!
|-------------------------------------------------------------------------------
Sub NewRound
	/delay 120s
	/echo warp wp mission
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==182) /warp loc 311 1590 52
	/delay 2s
	/target "Eldros Danmor"
	/delay 2s
	/face fast
	/delay 2s
	/say "Interested in visiting"
	/delay 2s
	/echo warp wp zone
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==182) /warp loc 1542 -671 95
	/echo "delay 120"
	/delay 120s
	/echo warp wp rat room
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==998) /warp loc -600 145 2
	/i say I have entered ${Zone.Name}
	/switch 8
	/delay 120s
	/i say I have entered ${Zone.Name}
	/i say ${Me.PctExp}% experience...
	/i say ${Me.AAPoints} and ${Me.PctAAExp} AA exp
	/echo warp wp rat
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==998) /warp loc -600 145 2
	/call RestartSub
/return

|-------------------------------------------------------------------------------
|SUB:	Nedaria!
|	You shouldn't ever need this unless you're stuck in the Guild Lobby
|-------------------------------------------------------------------------------

Sub NedariaSub
	/echo warp wp mag
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==344) /warp loc 598 6 1.13
	/target Alaria
	/face fast
	/delay 30
	/say nedaria
	/delay 120
	/i say I have entered ${Zone.Name}
	/switch 8
	/delay 120
	/echo warp wp rat
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==998) /warp loc -600 145 2
	/call RestartSub
/return

|--------------------------------------------------------------------------------
|SUB: Panic, quit the macro
|--------------------------------------------------------------------------------
Sub PanicSub
   /keypress back
   /i say PANIC! PANIC! GM DETECTED! in zone ${Zone.Name}
   /delay 5
   /camp desktop
   /keypress back
   /endmacro
   /unload
/return
  
|----------------
|SUB: DEAD!
|----------------

Sub DeadSub
	/echo BRING OUT YOUR DEAD!
	/i say BRING OUT YOUR DEAD!
	/i say I have entered ${Zone.Name}
	/delay 120
	/switch 17
	/delay 120
	/i say I have entered ${Zone.Name}
	/echo warp wp mag
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==344) /warp loc 598 6 1.13
	/target Alaria
	/face fast
	/delay 30
	/say nedaria
	/delay 120
	/i say I have entered ${Zone.Name}
	/switch 8
	/delay 120
	/warp wp rat
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==998) /warp loc -600 145 2
	/call RestartSub
	/camp desktop
	/endmacro
/return


|------------------
|SUB:RESTART MACRO
|------------------
Sub RestartSub
	/echo warp wp rat
	/if (${Spawn[gm].ID}) /call PanicSub
	/if (${Zone.ID}==998) /warp loc -600 145 2
/return

|----------------
|SUB:DROP
|----------------
Sub Drop
	/i say Dropping my mission...
	/dzquit
/return

|----------------
|Logout
|----------------
Sub Logout
	/beep
	/beep
	/beep
	/echo Logging off
	/i say Logging out because I was told to by password
	/i quit (killed by Password)
	/camp desktop
	/delay 10s
	/endmacro
/return

|-------------------
|Sub Told to do stuff...
|These tell the mob to camp out or to get a new task.  Works great if you're stuck...
|Please change these to something Secure!
|-------------------
Sub Event_AltTell(string text)
  /if (${text.Lower.Find["PASSWORD!"]}) {
  /call Logout
}
	/if (${text.Lower.Find["NEW MISSION!"]}) {
  /call Drop
}

/return
 
Re: Redguides Listing of Confirmed Macros

Search Bazaar for Tribute Items by DustinE

http://www.redguides.com/community/showthread.php?t=11103

See the original thread for instructions as well as a needed Modified Plugin.

Rich (BB code):
 #turbo

Sub Main(string Param0, String Param1, int Param2, string Param3, int Param4, int Param5)

  |Eject if Search String = help
  /if (${Param0.Equal[help]}) {
    /declare help bool local TRUE
    /goto :end
  }
  |if Param1 is not given, assume any Type
  /if (${Param1.Equal[]}||${Param1.Length}<3) {
    /declare Param2 int local ${Param1}
    /varset Param1 any
  }
  |if Param3 is not given, assume max range
  /if (${Param3.Equal[NULL]}||${Param3}>0||!${Param3}) {
    /declare Param3 string local 0 9999999
  }
  |if Param4 and Param5 are not given, assume 0
  /if (!${Param4}) /declare Param4 int local 0
  /if (!${Param5}) /declare Param5 int local 0
  |Declarations
  /declare ratio int local ${Param2}
  /declare pFin int local 0
  /declare i int local 0
  /declare o int local 0
  /declare tVal int local 0
  /declare pVal float local 0
  /declare sVal float local 0
  /declare profit float local 0
  /declare repeat bool local FALSE
  
  
  |Make sure the bazaar window is open
  :BSWnd
  /bazaar
  /delay 1s ${Window[BazaarSearchWnd].Open}
  /if (!${Window[BazaarSearchWnd].Open}) /goto :BSWnd

  |Search the bazaar for the item
  /echo Searched for ${Param0} Type: ${Param1}, Ratio: ${Param2}, Price: ${Param3}, Min Tribute: ${Param4}, Min Value: ${Param5}  and now waiting for updates...
  /bzsrch race any class any slot any stat any type ${Param1} price ${Param3} ${Param0}
  :Search
  /delay 5s ${Bazaar.Done}
  /if (!${Bazaar.Done}) /goto :Search
  |Go through all items in the bazaar window
  /echo ${Bazaar.Count} items found!
  /if (${Bazaar.Count}==0) {
    /goto :end
  }
  |Declare array for deductive reasoning
  /declare iNames[${Bazaar.Count}] int local 0
  |Fill array with ID's
  /for i 1 to ${Bazaar.Count}
    /varset iNames[${i}] ${Bazaar.Item[${i}].ItemID}
  /next i
  /for i 1 to ${Bazaar.Count}
    /varset repeat FALSE
    |Select the Item that we want to investigate and open it
    /for o ${i} to ${Bazaar.Count}
      /if (${Bazaar.Item[${i}].ItemID}==${iNames[${o}]}) {
        /varset repeat FALSE
        /goto :quitloop
      } else {
        |A repeat item! Save some processing time and...
        /varset repeat TRUE
      }
    |Avoid this for loop if it's the last item, to solve some issues
    /if (${i}==${Bazaar.Count}) /goto :quitloop
    /next o
    :quitloop
    |...SKIP IT! Other wise continue to...
    /if (${repeat}) {
	/goto :skip
    } else {
        |...Open the item then...
	/pricecheck ${i}
        /delay 1s
    }
    |...Close the window and move on
    /keypress ESC
    |Because I'm lazy and stupid, we're creating a nested loop to cycle through all items greater than or equal to i.
    /for o ${i} to ${Bazaar.Count}
    |Checking the ID of the selected item vs those in the rest of the list
    /if (${ItemC.ID}==${Bazaar.Item[${o}].ItemID}) {
      |Cannot Derive Tribute or Value directly from Bazaar Search, so now, thanks to editing of ItemDisplay, we have ItemC
      |and we can now make Comparisons!
      /varset tVal ${ItemC.Tribute}
      /varset pVal ${Math.Calc[${Bazaar.Item[${o}].Price}/1000]}
      /varset sVal ${Math.Calc[${ItemC.Value}/1000]}
      /varset profit ${Math.Calc[${sVal}-${pVal}]}
      
      |Check for Tribute (and multiple Tributes!)
      /if (${tVal}>=${Param4} && ((${ratio}>0 && ${Math.Calc[${pVal}*${ratio}].Int}<=${tVal}) || (${ratio}==0 && ${tVal}>${ratio} && ${tVal}>${pVal.Int}) || (!${ratio}))) {
        /echo ${Bazaar.Item[${o}].Trader} - ${Bazaar.Item[${o}].Name}:  ${pVal}pp => ${tVal} Tribute (${Math.Calc[${tVal}/(${pVal}+.0000001)]} Ratio)
        /if (${Bazaar.Item[${o}].Quantity}>1) /echo Multiple ${Bazaar.Item[${o}].Name} on ${Bazaar.Item[${o}].Trader}:  ${Math.Calc[${pVal}*${Bazaar.Item[${o}].Quantity}]}pp => ${Math.Calc[${tVal}*${Bazaar.Item[${o}].Quantity}]} Tribute (${Math.Calc[${tVal}/(${pVal}+.0000001)]} Ratio) Total (${Bazaar.Item[${o}].Quantity}x Factor)
      }

      |Check for Value (and multiple Values!)
      /if (${profit}>0 && ${Profit}>=${Param5}) {
        /echo ${Bazaar.Item[${o}].Trader} - ${Bazaar.Item[${o}].Name}:  Profit: ${sVal} - ${pVal} = ${profit}
	/if (${Bazaar.Item[${o}].Quantity}>1) /echo Multiple ${Bazaar.Item[${o}].Name} on ${Bazaar.Item[${o}].Trader}:  ${Math.Calc[${sVal}*${Bazaar.Item[${o}].Quantity}]} - ${Math.Calc[${pVal}*${Bazaar.Item[${o}].Quantity}]} = ${Math.Calc[${profit}*${Bazaar.Item[${o}].Quantity}]} Total (${Bazaar.Item[${o}].Quantity}x Factor)
      }
    }
    |Avoid this for loop if it's the last item, to solve some issues
    /if (${i}==${Bazaar.Count}) /goto :skip
    /next o
    |Check to make sure that the next item in the ItemList has not already ran and 0 out any used ID's
    /for o 1 to ${Bazaar.Count}
      /if (${iNames[${o}]}==${ItemC.ID}) /varset iNames[${o}] 0
    /next o
    :skip
    /if (${i}>${Bazaar.Count}) /goto :end
    |If the item to be has already been used, save all this processing and skip it!
    /if (${iNames[${Math.Calc[${i}+1]}]}==0 && ${i}<${Bazaar.Count}) {
      /varset i ${Math.Calc[${i}+1]}
      /goto :skip
    }
    |Progress Indicator
    /if (${Math.Calc[${i}/${Bazaar.Count}]}>.9 && ${pFin} < 9) {
	/varset pFin 9
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    } else /if (${Math.Calc[${i}/${Bazaar.Count}]}>.8 && ${pFin} < 8) {
	/varset pFin 8
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    } else /if (${Math.Calc[${i}/${Bazaar.Count}]}>.7 && ${pFin} < 7) {
	/varset pFin 7
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    } else /if (${Math.Calc[${i}/${Bazaar.Count}]}>.6 && ${pFin} < 6) {
	/varset pFin 6
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    } else /if (${Math.Calc[${i}/${Bazaar.Count}]}>.5 && ${pFin} < 5) {
	/varset pFin 5
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    } else /if (${Math.Calc[${i}/${Bazaar.Count}]}>.4 && ${pFin} < 4) {
	/varset pFin 4
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    } else /if (${Math.Calc[${i}/${Bazaar.Count}]}>.3 && ${pFin} < 3) {
	/varset pFin 3
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    } else /if (${Math.Calc[${i}/${Bazaar.Count}]}>.2 && ${pFin} < 2) {
	/varset pFin 2
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    } else /if (${Math.Calc[${i}/${Bazaar.Count}]}>.1 && ${pFin} < 1) {
	/varset pFin 1
	/echo ${Math.Calc[${i}/${Bazaar.Count}*100]}% Completed.
	/goto :exitprogress
    }
    :exitprogress
  /next i

:end

|Help stuff and whatnots
/if (${help}) {
  /echo HELP! (/mac BazaarTribute help)
  /echo Usage: /mac BazaarTribute [@Search String] [Type[Optional]] [Tribute Ratio[*Optional]] [@Price Range[Optional]] [Min Tribute[Optional]] [Min Profit[Optional]]
  /echo EX: /mac BazaarTribute "gem of" any 3 "0 100" 50 50
  /echo This will return items of any type that contain the words "gem of" that are less than 100pp and will give you a pp/tribute ratio of 3 that is at least 50 Tribute or a profit of at least 50pp to a vendor.
  /echo *This is only optional unless you wish to specify a later parameter!
  /echo @This parameter MUST be surrounded in quotes!
}

/echo BazaarTribute Finished.

/return
 
Redguides Listing of Confirmed Macros Post 10/2005
Status
Not open for further replies.

Users who are viewing this thread

Back
Top
Cart