• You've discovered RedGuides 📕 an EverQuest multi-boxing community 🛡️🧙🗡️. We want you to play several EQ characters at once, come join us and say hello! 👋
  • IS THIS SITE UGLY? Change the look. To dismiss this notice, click the X --->

Reworked Fairy MM macro Fully Automated (1 Viewer)

C

Ccomp5950

Here it is again.

EDIT: Fixed the Movement Ssub...erm I mean Sub

Instructions:

First off you need a warp plugin and the Fairy Mission getter plugin Get it here

Second You have to SAVE YOUR AA's for this macro to work. To do this first start the mission manually, open up your AA window and select the ones you want, train in them, and when you are done click on SAVE (big grey button on the MM AA window)

You must have Fairy Fire as one of the AA's you train in so that this macro will work.

This macro is intended to work with Rwarp commands

/warp loc <Y> <X> <Z>
/warp Target

If it does not then let tell me and I'll attempt to fix it.

This is a modified version of the Personalized version I use. I am not testing this macro specifically so if there are any "Oopsies" in here then I need to know, althought the core components are all the same (Minus the Warp commands)

Oh and btw...start the macro near the zone in (or atleast within Line of Sight)

Rich (BB code):
|--------------------------
| NekMM.Mac
| By Ccomp5950
|--------------------------
|
| Requires Spellcast.inc
| Requires MQ2Fairy Plugin 
| 
|
| Last updated 11-14-2005 11:27am

#Chat say
#Chat Group
#Chat Tell

#Event Invite "#1# tells you, 'Invite me (PASSWORD)'#*#"
#Event WaitTimer "#*#task because you must wait 0d:0h:#1#m before you can#*#"
#Event Death "#*#You have been Slain#*#"

#turbo 10
#include spellcast.inc

Sub Main()
/lootnodrop never
	/Echo =============================
	/Echo NokNok Task AFK V2.0
	/Echo =============================
	/call Setup

	:StartOver
	/if (${Zone.ID}==368) /goto :Bigloop
	/call Reset
	/if (${Zone.ID}!=368) /endmac
	:Bigloop
	/Call KillRemains
	/doevents
	/call LootRemains
	/call Wait4Death
	/warp loc -179 -74 -14
	/Call KillShrine1
	/if (${Zone.ID}!=368) /endmac
	/Call KillShrine2
	/if (${Zone.ID}!=368) /endmac
	/Call KillShrine3
	/if (${Zone.ID}!=368) /endmac
	/Warp loc -179 -74 -14
	/if (${Zone.ID}!=368) /endmac
	/cleanup
	/delay 2s
	/if (${Zone.ID}==368) /call Movement -120 -174
	/keypress back
	/delay 4s
	/goto :StartOver
/return

Sub Movement(int MoveX,int MoveY,int pointnum)
	/declare StartZone int local ${Zone.ID}
	/if ((${MoveX}==9999) && (${MoveY}==9999)) {
		/varcalc MoveX ${Target.X}+1
		/varcalc MoveY ${Target.Y}-10
	}
	/if ((${MoveX}==1) && (${MoveY}==1)) {
		/varset MoveX ${Ini[pointset,Nekmm,PointX${pointnum}]}
		/varset MoveY ${Ini[pointset,Nekmm,PointY${pointnum}]}	
	}
	/declare iCount int local 
	/varset iCount 0 
	/face nolook loc ${MoveY},${MoveX} 
	/keypress forward hold
	/keypress Space
	:AnchorMoveLoop 

	/if (${Zone.ID}!=${StartZone}) /return

	/delay 1 
	/face fast nolook loc ${MoveY},${MoveX} 
    
	/if (${Math.Distance[${MoveY},${MoveX}]}>10) { 
		/keypress forward hold 
		/if (${Zone.ID}!=${StartZone}) /return
	} else { 
	/keypress forward 
	/return 
	} 
	/if (${iCount}>2) { 
        	/face fast nolook loc ${MoveY},${MoveX} 
	        /varset iCount 0 
		/if (${Zone.ID}!=${StartZone}) /return
	}
	/goto :AnchorMoveLoop
/return

Sub Reset
	/for g 0 to ${Group.Members}
	/varcalc g2 ${Group.Members}-${g}
	/taskremove ${Group.Member[${g2}]}
	/next g 
	/delay 5s
	:againjerk
	/if (!${FindItem[Pinch of Dust from].InvSlot.ID}) /goto :nopowder
	/cleanup
	/keypress I
	/delay 1s
	/if (${InvSlot[22].Item.Container}) /itemnotify 22 rightmouseup
	/if (${InvSlot[23].Item.Container}) /itemnotify 23 rightmouseup
	/if (${InvSlot[24].Item.Container}) /itemnotify 24 rightmouseup
	/if (${InvSlot[25].Item.Container}) /itemnotify 25 rightmouseup
	/if (${InvSlot[26].Item.Container}) /itemnotify 26 rightmouseup
	/if (${InvSlot[27].Item.Container}) /itemnotify 27 rightmouseup
	/if (${InvSlot[28].Item.Container}) /itemnotify 28 rightmouseup
	/if (${InvSlot[29].Item.Container}) /itemnotify 29 rightmouseup
	/delay 1s
	/itemnotify ${FindItem[Pinch of Dust from].InvSlot} LeftMouseUp
	/delay 1
	/if (${Cursor.Name.Find[Pinch of Dust from]}) /destroy
	/delay 1
	/if (${FindItem[Pinch of Dust from].InvSlot}) /goto :againjerk
	:nopowder
	/cleanup
	/fairy
	/delay 2s
	/doevents
|===================================================================================================
| If you have time left in your lockout timer your character will wait until that timer has elapsed
|===================================================================================================
	:OMGWAIT
	/if (${Window[TaskTemplateSelectWnd].Open}) {
		/notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup
		/delay 5s
		/goto :Okyourgood
	}
	/goto :OMGWAIT
	:Okyourgood
	/cleanup
	/delay 10s
	/Call Movement 413 -372
	/delay 45s
	/if (!${Window[AAWindow].Open}) /keypress V
	/notify AAWindow AAW_LoadButton Leftmouseup
	/delay 15s
	/cleanup
	/echo Time to rock
	/varset waiter 0
	/varset Died   0
/return

Sub GMHERE
      /beep
      /beep
      /beep
      /echo GM has entered the zone!
      /exit
      /endmacro
/return


Sub Event_Invite(Junk,string Nameb)
	/invite ${Nameb}
	/taskadd ${Nameb}
	/pause 1s
/return

Sub KillRemains
	/varset w 1
	/varset y 1
	:BattleLooper
	/doevents
	/varset StartHP ${Me.PctHPs}
	/if (${SpawnCount[remains npc]}==0) /return
	/target remains
	/if (${Target.Distance}>16) /Warp loc -217 -423 -60
	/face fast nolook
	/attack on
	/delay 2s
	/if (${SpawnCount[remains npc]}==0) /return
	/if (${StartHP}>${Me.PctHPs}) /call Warper
	/goto :BattleLooper
/return

sub Warper
	/attack off
	/Warp loc -234 -423 -43
	/delay 3s
/return


Sub LootRemains
	:LootLooper
	/if (${SpawnCount[remains corpse]}==0) /return
	/target Remains
	/Warp target
	/loot
	/delay 1s
	/itemnotify loot1 rightmouseup
	/notify LootWnd DoneButton leftmouseup 
	/if (${SpawnCount[remains corpse]}==0) /return
	/goto :LootLooper
/return

Sub Event_WaitTimer(crap,int Waitupyo)
	/varcalc Waitupyo ${Waitupyo}+1
	/echo Delaying ${Waitupyo} minutes
	/for y 0 to ${Waitupyo}
	/Echo ${Math.Calc[${Waitupyo}-${y}]} minutes left till get new expedition
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/next y
	/fairy
/return

Sub Wait4Death
	/varset Died 0
	/for x 1 to 500
	/doevents
	/delay 1s
	/if (${SpawnCount[Shrine01 NPC]}==0) /return
	/if (${Died}) /return
	/next x
/return

Sub Event_Death
	/varset Died 1
	/delay 1m
/return

Sub KillShrine1
	:Shrine1Looper
	/doevents
	/if (${SpawnCount[Shrine02 NPC]}==0) /return
	/varset StartHP ${Me.CurrentHPs}
	/tar Shrine02
	/if (${Target.NearestSpawn[npc radius 60].ID}) /goto :Shrine1Looper
	/if (${Target.NearestSpawn[npc radius 100].Speed}>10) /goto :Shrine1Looper
	/if (!${Spawn[a_reanimated_grave_robber00].ID}) /goto :continue
	/if (${Spawn[a_reanimated_grave_robber00].X}>-210) /goto :Shrine1Looper
	:continue
	/Warp target
	/keypress left
	/delay 6
	:recast1
	/call cast "Fairy Fire" Activate
	/delay 1s
	/delay 10s (!${Me.Casting.Name.Equal["Fairy Fire"]})
	/delay 1s
	/if (${StartHP}>${Me.CurrentHPs}) /call Wait4Death
	/Warp loc -179 -74 -14
	/if (${SpawnCount[Shrine02 NPC]}==0) /return
	/sit
	/delay 45s
	/sit
	/goto :Shrine1Looper

Sub KillShrine2
	:Shrine2Looper
	/doevents
	/varset StartHP ${Me.CurrentHPs}
	/if (${SpawnCount[Shrine00 NPC]}==0) /return
	/tar Shrine00
	/if (${Target.NearestSpawn[npc radius 60].ID}) /goto :Shrine2Looper
	/if (${Target.NearestSpawn[npc radius 100].Speed}>10) /goto :Shrine2Looper
	/if (!${Spawn[a_reanimated_grave_robber01].ID}) /goto :continue2
	/if (${Spawn[a_reanimated_grave_robber01].X}>-35) /goto :Shrine2Looper
	:continue2
	/Warp target
	/keypress left
	/delay 6
	:recast2
	/call cast "Fairy Fire" Activate
	/delay 1s
	/delay 10s (!${Me.Casting.Name.Equal["Fairy Fire"]})
	/delay 1s
	/if (${StartHP}>${Me.CurrentHPs}) /call Wait4Death
	/Warp loc -179 -74 -14
	/if (${SpawnCount[Shrine00 NPC]}==0) /return
	/sit
	/delay 45s
	/sit
	/goto :Shrine2Looper

Sub KillShrine3
	:Shrine3Looper
	/doevents
	/if (${SpawnCount[Shrine01 NPC]}==0) /return
	/varset StartHP ${Me.CurrentHPs}
	/tar Shrine01
	/if (${Target.NearestSpawn[npc radius 60].ID}) /goto :Shrine3Looper
	/if (${Target.NearestSpawn[npc radius 100].Speed}>10) /goto :Shrine3Looper
	/if (!${Spawn[a_reanimated_grave_robber02].ID}) /goto :continue3
	/if (${Spawn[a_reanimated_grave_robber02].X}>-35) /goto :Shrine3Looper
	:continue3
	/Warp target
	/keypress left
	/delay 6
	:recast3
	/call cast "Fairy Fire" Activate
	/delay 1s
	/delay 10s (!${Me.Casting.Name.Equal["Fairy Fire"]})
	/delay 1s
	/if (${StartHP}>${Me.CurrentHPs}) /call Wait4Death
	/Warp loc -179 -74 -14
	/if (${SpawnCount[Shrine01 NPC]}==0) /return
	/sit
	/delay 45s
	/sit
	/goto :Shrine3Looper

Sub Setup
	/declare y int outer 0
	/declare X int outer 0
	/declare x int outer 0
	/declare g int outer 0
	/declare g2 int outer 0
	/declare waitforit int outer 0
	/declare w int outer 1
	/declare waiter int outer 0
	/declare Died int outer 0
	/declare StartHP int outer 0
/return

And Spellcast.inc

Rich (BB code):
| 
| SpellCast.inc 
| 
| Last Modified: 7/29/2005 
| This will cast a spell reliably for you... 
| 
| Usage: 
|       /call Cast "spellname|itemname|AA#|AAskillname" [item|activate|gem#] [nocheck|dismount|nodismount] 
| 
| If no dismount or nodismount is provided it defaults to nodismount. 
| 
| This would essentially: /cast "Death Peace" 
| example: /call Cast "Death Peace" 
| 
| This would essentially: Check for the spell in your spell slots, if not there mem it to spell 
|                         gem slot 7 and then /cast "Death Peace" 
| example: /call Cast "Death Peace" gem7 
| 
| This would essentially: /cast item "White Rope Bridle" 
| example: /call Cast "White Rope Bridle" item 
| 
| This would essentially: /alt activate 169 
| example: /call Cast "169" activate 
|  or... 
| example: /call Cast "Divine Arbitration" activate 
| 
| This would dismount if your target was lost or dies mid-cast, cast Burn and mem it to spell 
| slot 3 if it wasn't already memmed: 
| example: /call Cast "Burn" gem3 dismount 
| 
| This would not dismount but would move you back and forth if your target was lost or dies mid-cast, cast Burn and mem 
| it to spell slot 3 if it wasn't already memmed: 
| example: /call Cast "Burn" gem3 nodismount 
| 
| 'nocheck' is the default for the "loss of target/target dying" value.  If nocheck is specified (Or nothing was specified) 
| no target checking will be performed and spellcast.inc should act like the spellcast.inc of the past. 
| 
| It will return the following values: 
| CAST_SUCCESS 
| CAST_UNKNOWNSPELL 
| CAST_OUTOFMANA 
| CAST_OUTOFRANGE 
| CAST_CANNOTSEE 
| CAST_STUNNED 
| CAST_RESISTED 
| CAST_TOOK2LONG 
| CAST_ABILITYNOTREADY 
| CAST_IMMUNESLOW 
| CAST_LOSTTARGET 
| 
| New Vars Modification 
| Plazmic's no globals needed version 
| 
| Oct 09, 2003 - Updated to work with new vars and $char(casting) -gf 
| Oct 11, 2003 - switched some logic, removed defines -gf 
| Oct 15, 2003 - Item support added by -EqMule 
| XXX xx, xxxx - Modified to add automeming of spells. -Goofmester1 
| Dec 26, 2003 - fd fail 1 added -m0nk 
| Jan 01, 2004 - timeout(5s) added to stop "dead-time" -m0nk 
| Jan 01, 2004 - switchd fdfail to a standing check. -m0nk 
| Jan 01, 2004 - added silence checking as a stun check -m0nk 
| Feb 17, 2004 - added AA activate capabilities -ml2517 
| Apr 11, 2004 - Updated for new Parm system -ml2517 
| Apr 12, 2004 - Will spit out a different message on immune to slows. -ml2517 
| Apr 16, 2004 - Removed /sendkeys and replaced with /keypress. -ml2517 
| Apr 17, 2004 - Various code enhancements. -Wassup 
| Apr 20, 2004 - Updated all of the /if's to have parenthesis. -ml2517 
| Apr 25, 2004 - Updated to new variable system. -ml2517 
| Apr 29, 2004 - Fixed Item problem -ml2517 
| Apr 29, 2004 - Changed the alt ability to use AltAbilityReady instead of an event. -ml2517 
| May 02, 2004 - Added the ability to specify a gem slot to mem spells to. -ml2517 
| May 10, 2004 - Updated for new event system. 
| May 12, 2004 - Added suggestions for loss of target and stun handling change. -ml2517 
| May 13, 2004 - Activate now accepts AA skill by name or number. -ml2517 
| May 14, 2004 - Added the nocheck value, it is the default. This bypasses the target checking code. -ml2517 
| Jul 29, 2005 - Added some delay and hopefully fixed bugged spellbook -fearless
| 

#event Fizzle "#*#Your spell fizzles#*#" 
#event Interrupt "#*#Your casting has been interrupted#*#" 
#event Interrupt "#*#Your spell is interrupted.#*#" 
#event Recover "#*#You haven't recovered yet...#*#" 
#event Recover "#*#Spell recovery time not yet met.#*#" 
#event Resisted "#*#Your target resisted the #*#" 
#event OutOfMana "#*#Insufficient Mana to cast this spell!#*#" 
#event OutOfRange "#*#Your target is out of range, get closer!#*#" 
#event NoLOS "#*#You cannot see your target.#*#" 
#event Stunned "#*#You cannot cast while stunned#*#" 
#event Stunned "#*#You *CANNOT* cast spells, you have been silenced!#*#" 
#event Standing "#*#You must be standing to cast a spell#*#" 
#event Standing "#*#has fallen to the ground.#*#" 
#event Collapse "#*#Your gate is too unstable, and collapses.#*#" 
#event ImmuneSlow "#*#Your target is immune to changes in its attack speed.#*#" 


Sub Cast(SpellName,ItemFlag,DismountFlag) 
   /declare HaveTarget int local 0 
   /declare CastBarTime timer local 
   /declare CastCurrLocY float local 0 
   /declare CastCurrLocX float local 0 
   /varset CastCurrLocY ${Me.Y} 
   /varset CastCurrLocX ${Me.X} 
   /if (${Target.ID}>0) /varset HaveTarget 1 
   /if (!${Defined[CastGiveUpTime]}) /declare CastGiveUpTime timer local 
   /if (!${Defined[ItemFlag]}) /declare ItemFlag string local 
   /if (!${Defined[DismountFlag]}) { 
       /declare DismountFlag string local nocheck 
       /if (${ItemFlag.Find["dismount"]}) /varset DismountFlag ${ItemFlag} 
   } 
   /if (!${Me.Standing} && !${Me.Mount.ID}>0) /stand 
   /if (${Me.Moving}) { 
       /keypress forward 
       /keypress back 
       /delay 8 
   } else { 
       /delay 4 
   } 
   /if (${ItemFlag.Equal["Item"]} || ${ItemFlag.Equal["Activate"]}) /goto :StartCast 

   /if (!${Me.Gem["${SpellName}"]}) { 
       /if (${ItemFlag.Find[gem]}) { 
           /if (${Int[${ItemFlag.Right[1]}]}>0 && ${Int[${ItemFlag.Right[1]}]}<9) { 
               /memspell ${ItemFlag.Right[1]} "${SpellName}" 
               /delay 5s ${Me.Gem["${SpellName}"]}
               /if ( ${Window[SpellBookWnd].Open} ) /timed 20 /stand
           } else { 
               /goto :GenericMem 
           } 
       } else {        
           :GenericMem 
           /memspell 5 "${SpellName}" 
           /delay 5s ${Me.Gem["${SpellName}"]}
           /if ( ${Window[SpellBookWnd].Open} ) /timed 20 /stand
       } 

   } 
   :StartCast 
      /varset CastGiveUpTime 15s 
   :CastNow 
      /if (${ItemFlag.Equal["Item"]}) { 
         /call ClearReturnValue 
         /cast item "${SpellName}" 
      } else /if (${ItemFlag.Equal["Activate"]}) { 
         /call ClearReturnValue 
         /if (!${Me.AltAbilityReady[${SpellName}]}) /return CAST_ABILITYNOTREADY 
         /alt activate ${Me.AltAbility[${SpellName}].ID} 
         /varset CastBarTime ${Me.Casting.CastTime} 
      } else { 
         /if (!${Me.Gem["${SpellName}"]}) /return CAST_UNKNOWNSPELL 
         /call ClearReturnValue 
         /if (!${Me.SpellReady["${SpellName}"]}) { 
            /if (${CastGiveUpTime}==0) /return CAST_TOOK2LONG 
            /delay 1 
            /goto :CastNow 
         } 
         /cast "${SpellName}" 
         /varset CastBarTime ${Math.Calc[${Me.Casting.CastTime}*10]} 
      } 
   :WaitCast 
      /if (${Me.Casting.ID}) { 
         /if ((!${Target.ID}>0 || ${Target.Type.Equal[CORPSE]}) && !${DismountFlag.Find[nocheck]} && ${HaveTarget}==1) { 
             /if (${Me.Mount.ID}>0) { 
                 /if (${DismountFlag.Equal[dismount]}) { 
                     /dismount 
                 } else { 
                     /if (!${ItemFlag.Equal["Item"]}) { 
                         /if (${CastBarTime}<7) { 
                             :Interrupt 
                             /keypress FORWARD hold 
                             /delay 6 
                             /keypress FORWARD 
                             /keypress BACK hold 
                             /delay 8 
                             /keypress BACK 
                         } else { 
                             :HoldForSpell 
                             /delay 1 
                             /if (${CastBarTime}<7) /goto :Interrupt 
                             /goto :HoldForSpell 
                         } 
                     } else { 
                         /keypress FORWARD hold 
                         :Forward 
                         /delay 1 
                         /if (${Math.Distance[${CastCurrLocY},${CastCurrLocX}]}<6) /goto :Forward 
                         /keypress FORWARD 
                         /keypress BACK hold 
                         :Backward 
                         /delay 1 
                         /if (${Math.Distance[${CastCurrLocY},${CastCurrLocX}]}>4) /goto :Backward 
                         /keypress BACK 
                         /if (!${Me.Casting.ID}>0) /goto :DuckTime 
                     } 
                 } 
             } 
             :DuckTime 
             /keypress FORWARD 
             /keypress BACK 
             /if (!${Me.Ducking}) /keypress DUCK 
             /delay 1 
             /if (${Me.Ducking}) /keypress DUCK 
             /return CAST_LOSTTARGET 
         } 
         /delay 1 
         /goto :WaitCast 
      } 
   /delay 1 
   /doevents Fizzle 
   /doevents Interrupt 
   /doevents Interrupt 
   /doevents Recover 
   /doevents Standing 
   /doevents OutOfRange 
   /doevents OutOfMana 
   /doevents NoLOS 
   /doevents Resisted 
   /doevents ImmuneSlow 
   /doevents Stunned 
   /doevents Collapse 
   /if (${Macro.Return.Equal["CAST_RESTART"]}) /goto :StartCast 
   /if (!${Macro.Return.Equal["NULL"]}) /return ${Macro.Return} 
/return CAST_SUCCESS 

Sub ClearReturnValue 
/return NULL 

Sub Event_Fizzle 
/return CAST_RESTART 

Sub Event_Interrupt 
/return CAST_RESTART 

Sub Event_Recover 
   /delay 5 
/return CAST_RESTART 

Sub Event_Standing 
   /stand 
/return CAST_RESTART 

Sub Event_Collapse 
/return CAST_RESTART 

Sub Event_OutOfMana 
/return CAST_OUTOFMANA 

Sub Event_OutOfRange 
/return CAST_OUTOFRANGE 

Sub Event_NoLOS 
/return CAST_CANNOTSEE 

Sub Event_Stunned 
   /delay 2s !${Me.Stunned} 
/return CAST_RESTART 

Sub Event_Resisted 
/return CAST_RESISTED 

Sub Event_ImmuneSlow 
/return CAST_IMMUNESLOW
 
Last edited:
Haha I remember when I suggested making a Fairy macro and such and it got called too complicated...Those were the days. I haven't tried it yet, but looked over the code.....Seems like it ought to work fine..The Gmcheck could be maybe be changed to a pause and wait kinda deal, but better safe than sorry
 
I don't use a GM check, if one is looking for me then I already fugged up.

I include the sub incase anyone else wants to use it they can just add the /call GMCheck line where they want to.
 
Oh yeah, no problem. I wasn't trying to give you a hard time about it or anything, just saying. Has anyone tried this yet?
 
did everything im supposed to , loaded up AAs and pressed save (loaded fairy fire too) but when i go to kill shrines , i warp to it , then it comes up "you do not have that ability" when i do.

I suck at macros so can you check this out or give me any help as to what im doing wrong? cheers
 
Spunge16 said:
did everything im supposed to , loaded up AAs and pressed save (loaded fairy fire too) but when i go to kill shrines , i warp to it , then it comes up "you do not have that ability" when i do.

I suck at macros so can you check this out or give me any help as to what im doing wrong? cheers

Download the SpellCast.inc I just posted and use it.

You're either using a different version of SpellCast.inc or you actually do not have fairy fire AA trained.
 
Spunge, I had the exact same problem with the version of the macro I am using. My spellcast.inc turned out to be way out of date and updating it fixed everything. It sure has been nice doing all of my OoW/DoD defensive AAs without any work!
 
i get
Rich (BB code):
mm.mac@137 (Reset): /Call Movement 413 -372
mm.mac@33 (Main()): /call Reset
The current macro has ended

while standing outside the zone in, it gets mission and everything.. but doesnt zone in it gets that message
 
Only thing I can think of is this...

You either don't have the movement sub copied in there or you're stuck.

Was your toon facing the IZ but not moving?

Was your toon sitting/FD?

Was your toon stuck on a rock?

You have to be close to the IZ to the mission in Nektulos for this macro to work.

As soon as you get the mission it faces the zone in for the instance and moves forward...no obstacle avoidance or anything.
 
yeah it worked up until the fact where i killed all 3 shrines , no idea if it finished cos i LDd on my toon and i couldnt be bothered logging back on :p Will try again tonight
 
i get the same error as Sylk when i start the macro outside of the isntance. when i go in manually then start macro it runs fine but wont rezone once it gets new mission

Any ideas?
 
ROFL yeah....

Try my little edit

Rich (BB code):
|--------------------------
| NekMM.Mac
| By Ccomp5950
|--------------------------
|
| Requires Spellcast.inc
| Requires MQ2Fairy Plugin 
| 
|
| Last updated 11-14-2005 11:27am

#Chat say
#Chat Group
#Chat Tell

#Event Invite "#1# tells you, 'Invite me (PASSWORD)'#*#"
#Event WaitTimer "#*#task because you must wait 0d:0h:#1#m before you can#*#"
#Event Death "#*#You have been Slain#*#"

#turbo 10
#include spellcast.inc

Sub Main()

	/Echo =============================
	/Echo NokNok Task AFK V2.0
	/Echo =============================
	/call Setup

	:StartOver
	/if (${Zone.ID}==368) /goto :Bigloop
	/call Reset
	/if (${Zone.ID}!=368) /endmac
	:Bigloop
	/Call KillRemains
	/doevents
	/call LootRemains
	/call Wait4Death
	/warp loc -179 -74 -14
	/Call KillShrine1
	/if (${Zone.ID}!=368) /endmac
	/Call KillShrine2
	/if (${Zone.ID}!=368) /endmac
	/Call KillShrine3
	/if (${Zone.ID}!=368) /endmac
	/Warp loc -179 -74 -14
	/if (${Zone.ID}!=368) /endmac
	/cleanup
	/delay 2s
	/if (${Zone.ID}==368) /call Movement -120 -174
	/keypress back
	/delay 4s
	/goto :StartOver
/return

Sub Movement(int MoveX,int MoveY,int pointnum)
	/declare StartZone int local ${Zone.ID}
	/if ((${MoveX}==9999) && (${MoveY}==9999)) {
		/varcalc MoveX ${Target.X}+1
		/varcalc MoveY ${Target.Y}-10
	}
	/if ((${MoveX}==1) && (${MoveY}==1)) {
		/varset MoveX ${Ini[pointset,Nekmm,PointX${pointnum}]}
		/varset MoveY ${Ini[pointset,Nekmm,PointY${pointnum}]}	
	}
	/declare iCount int local 
	/varset iCount 0 
	/face nolook loc ${MoveY},${MoveX} 
	/keypress forward hold
	/keypress Space
	:AnchorMoveLoop 

	/if (${Zone.ID}!=${StartZone}) /return

	/delay 1 
	/face fast nolook loc ${MoveY},${MoveX} 
    
	/if (${Math.Distance[${MoveY},${MoveX}]}>10) { 
		/keypress forward hold 
		/if (${Zone.ID}!=${StartZone}) /return
	} else { 
	/keypress forward 
	/return 
	} 
	/if (${iCount}>2) { 
        	/face fast nolook loc ${MoveY},${MoveX} 
	        /varset iCount 0 
		/if (${Zone.ID}!=${StartZone}) /return
	}
	/goto :AnchorMoveLoop
/return

Sub Reset
	/for g 0 to ${Group.Members}
	/varcalc g2 ${Group.Members}-${g}
	/taskremove ${Group.Member[${g2}]}
	/next g 
	/delay 5s
	:againjerk
	/if (!${FindItem[Pinch of Dust from].InvSlot.ID}) /goto :nopowder
	/cleanup
	/keypress I
	/delay 1s
	/if (${InvSlot[22].Item.Container}) /itemnotify 22 rightmouseup
	/if (${InvSlot[23].Item.Container}) /itemnotify 23 rightmouseup
	/if (${InvSlot[24].Item.Container}) /itemnotify 24 rightmouseup
	/if (${InvSlot[25].Item.Container}) /itemnotify 25 rightmouseup
	/if (${InvSlot[26].Item.Container}) /itemnotify 26 rightmouseup
	/if (${InvSlot[27].Item.Container}) /itemnotify 27 rightmouseup
	/if (${InvSlot[28].Item.Container}) /itemnotify 28 rightmouseup
	/if (${InvSlot[29].Item.Container}) /itemnotify 29 rightmouseup
	/delay 1s
	/itemnotify ${FindItem[Pinch of Dust from].InvSlot} LeftMouseUp
	/delay 1
	/if (${Cursor.Name.Find[Pinch of Dust from]}) /destroy
	/delay 1
	/if (${FindItem[Pinch of Dust from].InvSlot}) /goto :againjerk
	:nopowder
	/cleanup
	/fairy
	/delay 2s
	/doevents
|=================================================  ==================================================  
| If you have time left in your lockout timer your character will wait until that timer has elapsed
|=================================================  ==================================================  
	:OMGWAIT
	/if (${Window[TaskTemplateSelectWnd].Open}) {
		/notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup
		/delay 5s
		/goto :Okyourgood
	}
	/goto :OMGWAIT
	:Okyourgood
	/cleanup
	/delay 10s
	/Call Movement 413 -372
	/delay 45s
	/if (!${Window[AAWindow].Open}) /keypress V
	/notify AAWindow AAW_LoadButton Leftmouseup
	/delay 15s
	/cleanup
	/echo Time to rock
	/varset waiter 0
	/varset Died   0
/return

Sub GMHERE
      /beep
      /beep
      /beep
      /echo GM has entered the zone!
      /exit
      /endmacro
/return


Sub Event_Invite(Junk,string Nameb)
	/invite ${Nameb}
	/taskadd ${Nameb}
	/pause 1s
/return

Sub KillRemains
	/varset w 1
	/varset y 1
	:BattleLooper
	/doevents
	/varset StartHP ${Me.PctHPs}
	/if (${SpawnCount[remains npc]}==0) /return
	/target remains
	/if (${Target.Distance}>16) /Warp loc -217 -423 -60
	/face fast nolook
	/attack on
	/delay 2s
	/if (${SpawnCount[remains npc]}==0) /return
	/if (${StartHP}>${Me.PctHPs}) /call Warper
	/goto :BattleLooper
/return

sub Warper
	/attack off
	/Warp loc -234 -423 -43
	/delay 3s
/return


Sub LootRemains
	:LootLooper
	/if (${SpawnCount[remains corpse]}==0) /return
	/target Remains
	/Warp target
	/loot
	/delay 1s
	/itemnotify loot1 rightmouseup
	/notify LootWnd DoneButton leftmouseup 
	/if (${SpawnCount[remains corpse]}==0) /return
	/goto :LootLooper
/return

Sub Event_WaitTimer(crap,int Waitupyo)
	/varcalc Waitupyo ${Waitupyo}+1
	/echo Delaying ${Waitupyo} minutes
	/for y 0 to ${Waitupyo}
	/Echo ${Math.Calc[${Waitupyo}-${y}]} minutes left till get new expedition
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/next y
	/fairy
/return

Sub Wait4Death
	/varset Died 0
	/for x 1 to 500
	/doevents
	/delay 1s
	/if (${SpawnCount[Shrine01 NPC]}==0) /return
	/if (${Died}) /return
	/next x
/return

Sub Event_Death
	/varset Died 1
	/delay 1m
/return

Sub KillShrine1
	:Shrine1Looper
	/doevents
	/if (${SpawnCount[Shrine02 NPC]}==0) /return
	/varset StartHP ${Me.CurrentHPs}
	/tar Shrine02
	/if (${Target.NearestSpawn[npc radius 60].ID}) /goto :Shrine1Looper
	/if (${Target.NearestSpawn[npc radius 100].Speed}>10) /goto :Shrine1Looper
	/if (!${Spawn[a_reanimated_grave_robber00].ID}) /goto :continue
	/if (${Spawn[a_reanimated_grave_robber00].X}>-210) /goto :Shrine1Looper
	:continue
	/Warp target
	/keypress left
	/delay 6
	:recast1
	/call cast "Fairy Fire" Activate
	/delay 1s
	/delay 10s (!${Me.Casting.Name.Equal["Fairy Fire"]})
	/delay 1s
	/if (${StartHP}>${Me.CurrentHPs}) /call Wait4Death
	/Warp loc -179 -74 -14
	/if (${SpawnCount[Shrine02 NPC]}==0) /return
	/sit
	/delay 45s
	/sit
	/goto :Shrine1Looper

Sub KillShrine2
	:Shrine2Looper
	/doevents
	/varset StartHP ${Me.CurrentHPs}
	/if (${SpawnCount[Shrine00 NPC]}==0) /return
	/tar Shrine00
	/if (${Target.NearestSpawn[npc radius 60].ID}) /goto :Shrine2Looper
	/if (${Target.NearestSpawn[npc radius 100].Speed}>10) /goto :Shrine2Looper
	/if (!${Spawn[a_reanimated_grave_robber01].ID}) /goto :continue2
	/if (${Spawn[a_reanimated_grave_robber01].X}>-35) /goto :Shrine2Looper
	:continue2
	/Warp target
	/keypress left
	/delay 6
	:recast2
	/call cast "Fairy Fire" Activate
	/delay 1s
	/delay 10s (!${Me.Casting.Name.Equal["Fairy Fire"]})
	/delay 1s
	/if (${StartHP}>${Me.CurrentHPs}) /call Wait4Death
	/Warp loc -179 -74 -14
	/if (${SpawnCount[Shrine00 NPC]}==0) /return
	/sit
	/delay 45s
	/sit
	/goto :Shrine2Looper

Sub KillShrine3
	:Shrine3Looper
	/doevents
	/if (${SpawnCount[Shrine01 NPC]}==0) /return
	/varset StartHP ${Me.CurrentHPs}
	/tar Shrine01
	/if (${Target.NearestSpawn[npc radius 60].ID}) /goto :Shrine3Looper
	/if (${Target.NearestSpawn[npc radius 100].Speed}>10) /goto :Shrine3Looper
	/if (!${Spawn[a_reanimated_grave_robber02].ID}) /goto :continue3
	/if (${Spawn[a_reanimated_grave_robber02].X}>-35) /goto :Shrine3Looper
	:continue3
	/Warp target
	/keypress left
	/delay 6
	:recast3
	/call cast "Fairy Fire" Activate
	/delay 1s
	/delay 10s (!${Me.Casting.Name.Equal["Fairy Fire"]})
	/delay 1s
	/if (${StartHP}>${Me.CurrentHPs}) /call Wait4Death
	/Warp loc -179 -74 -14
	/if (${SpawnCount[Shrine01 NPC]}==0) /return
	/sit
	/delay 45s
	/sit
	/goto :Shrine3Looper

Sub Setup
	/declare y int outer 0
	/declare X int outer 0
	/declare x int outer 0
	/declare g int outer 0
	/declare g2 int outer 0
	/declare waitforit int outer 0
	/declare w int outer 1
	/declare waiter int outer 0
	/declare Died int outer 0
	/declare StartHP int outer 0
/return
 
Change

Ssub Movement(Blah Blah)

to

Sub Movement(Blah Blah)

(Remove the extra S)
 
I tried this macro, but when it goes to loot the dust, it keeps opening and closing the chest. I manually do it then it does the same thing with the item. Does anyone know why? Good work otherwise. OTH, I am gonna try to figure it out on my own but wondered if anyone was having the same problem.
 
when the macro finished for me , it sat outside the zone , counting down the time for the next. Then accepted the mission etc , then. End of macro. Any ideas? I know im a pain lol

Btw Mrdopee , type /lootnodrop never , should help
 
It would also be more confusing.

Great job finding what was wrong, it was right under my nose the whole time and I didn't find it. You sir are uber and thank you.

G'night :D
 
so if you have 4 toons.. you just run macro on one of them? while others sit outside? or sit in someother zone? 1 can do the whole mission?
 
bigdaddy said:
so if you have 4 toons.. you just run macro on one of them? while others sit outside? or sit in someother zone? 1 can do the whole mission?

Yes

Only your GROUP LEADER should be doing the mission

Your other toons can be sitting anywhere else you want.

1 can do the whole mission before the lockout timer expires. Every now and again you will find that this isn't true (I've had 4 runs out of 38 not beat the lockout timer because of to much dieing)
 
Spunge16 said:
i dont know why still , but only sometimes will it end the macro after it gets a new mission , just as it should move to the zone

I don't know what to tell you...does it say "Macro has ended"? or whatever or does it just sit there.

If it just sits there type /echo ${Me.WTF} and it will spew forth what line and where it is in the macro at that time. Tell me that info and I can prolly fix you right up.
 
This macro has a great foundation. The only issues are that it moves toward the entrance to the instance, but doesn’t keep going forward long enough to actually enter it. Another concern is if you die when the shrine dies from your DoT, you won’t get credit for it and lose the mission, or have to wait for another one to spawn (which is awhile). Another idea is to go around dotting all 3 at once so it doesn’t take as long.

So technically the only issue I’m having is it not entering the instance because it doesn’t go forward enough.
 
it won't matter anyway b/c I'm 99.999999999% sure this is the first one they nerfed the xp on today. this is the only one where people are obviously and blatantly macroing. Just the other night I had a guy from one of the Japanese guilds on my server /warp right to the dark spirit and start his request when there were about 10 people gathered round. Some people just deserve the ban stick...
 
The exp was never a fully AA to begin with so a drop to 80% of an aa isn't that big. Going for nearly 12 hours undetectable is damn good free exp.
 
Mochila, are you using a non-warping macro, or are you refering the the posted warping macro that is "undetectable"? And by undetectable i understand you mean not plainly obvious.
 
It has been more then an AA for me. Like 1.05 or so AA's per prior to last expansion.

Thats why everynow and again I get 2 AA's from the mission, because I'm sitting at 96% AA exp when I start the mission, and come out with 2AA's gained plus a tick.
 
Wow I never got that.....It was always alittle less than an aa for me, for some it would take me from 0%ish to around 90 some....but sometimes not a full level.
And this is much less "detectable" just for the fact you're never moving besides 2 inches to zone in and out.

Players really are the result of a majority of bans, not counting shared bank garbage. Also, if you can tamper with the delta packet no word of your warping comes from your client to the server. If the server has other means of detecting it, even cronic said you're fucked. But messing with the packet and not being seen by other players = more than 99% chance of being safe.
 
Thanks. It's working great so far. Fairy Fire is resisted a lot but looking good so far. Thanks for the help.
 
Any chance to add that if Fairy Fire is resisted you warp back faster? The spell refreshes and you sit and wait until the timer is up as if the spell landed. This may prevent you from not finishing on time, unless of you course you want to finish right around when the tasktimer is up.
 
This macro will finish 3 to 12 minutes early.

I've only seen it go over the timer 5 out of 120+ times.

So adding resist check is pointless unless you want to sit outside longer.

I prefer to be anon and where no one knows I'm even doing MM's. So I'm not in Nek for very long at all.
 
Good stuff and I like your reasoning. What is the respawn of the Fairy Shrine's as I just died when my DoT killed it?
 
I'm going to add something in and test it tonight in hopes that it will fix that.

Oh and for some reason I picked a location to close to a path of the mobs for a "safe spot" and he jumps you every now and again.

Look for some optimization to happen by tommorow.
 
Ccomp5950 said:
Oh and for some reason I picked a location to close to a path of the mobs for a "safe spot" and he jumps you every now and again.

could add hat you /hide right when u warp back to safe spot until dot timer is up again
 
Reworked Fairy MM macro Fully Automated

Users who are viewing this thread

Back
Top