Ok here how it goes,
My leechbot macro for FairyMM is letting the toon standing outside the Entrance of Shadowed Grove where you should start the macro.
The macro loops till you get a MM then faces heading 70 and runs forward to zone in.
Inside it helps kill remains and shrines, and when clear to loot, its looting a shard.
This macro works totally independent, it checks itself on hows MM progressing and acts accordingly.
Credits go also to Ccomp5950, from whoms original macro I started out to learn and progress.
Time to send this out free, enjoy
will attach Main FairyMM and post code for
Leechbot so you all can look at it here and offer suggestions how to better it right away.
And here my suggestion for all leechbots after the second.
Since I recommend only one Mainbot, one fully assist leech and rest up to 4 Loot-only-leeches.
My leechbot macro for FairyMM is letting the toon standing outside the Entrance of Shadowed Grove where you should start the macro.
The macro loops till you get a MM then faces heading 70 and runs forward to zone in.
Inside it helps kill remains and shrines, and when clear to loot, its looting a shard.
This macro works totally independent, it checks itself on hows MM progressing and acts accordingly.
Credits go also to Ccomp5950, from whoms original macro I started out to learn and progress.
Time to send this out free, enjoy
will attach Main FairyMM and post code for
Leechbot so you all can look at it here and offer suggestions how to better it right away.
Rich (BB code):
| AALeefai.mac modified by Crystane
|--------------------------
| Credits to
| Nekmm.mac
| By Ccomp5950
|--------------------------
| IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!!!! READ following requires
| Requires Spellcast.inc
| Requires to place all items out of Top-Level inventory slots into bags!!!
| Requires Preset points for Fairyform
| Last updated 24-12-2005 8:27pm
#Chat say
#Chat Group
#Chat Tell
#Event Death "#*#You have been Slain#*#"
#Event StartAAgrind "[mq2] StartFairy"
#Event EndAAgrind "[mq2] EndFairy"
#Event Updated "Your task 'Queen Nok Nok's Tomb' has been updated."
#Event Updated "[Group] All shrines are dead now!"
#Event FairyFireResisted "Your target resisted the Fairy Fire spell."
#Event Enteredzone "You have entered Shadowed Grove."
#Event CannotSeeTarget "You cannot see your target."
#Event NektForrest "You have entered Nektulos Forest."
#turbo 10
#include spellcast.inc
Sub Main
/echo For Commandlist "/echo Missionhelp"
:mainloop
/doevents StartAAgrind
/goto :mainloop
/return
sub doeventsMM
/doevents Invite
/doevents Death
/doevents Updated
/doevents NektForrest
/return
Sub FairyAAgrind()
/Echo =============================
/Echo NokNok Task AFK Leechbot V1.1
/Echo =============================
/call Setup
:StartOver
/if (${Zone.ID}==368) /goto :Bigloop
/call Reset
/if (${Zone.ID}!=368) /endmac
:Bigloop
/if (${SpawnCount[remains npc]}==1) {
/if (!${Me.AltAbilityReady["Fairy Fire"]}) {
/call LoadAAs
/cleanup
}
/Call KillRemains
/warp succor
/delay 5s
}
/call doeventsMM
/if (${SpawnCount[remains corpse]}==1) {
/if (${FindItem[Shard of Wisdom].InvSlot}) /goto :contbigloop
/call LootRemains
/echo Loot done.
/warp succor
/doevents NektForrest
}
:contbigloop
/call doeventsMM
/delay 5s
/varset updatecnt 3
/Call KillShrine1
:rekill
/call doeventsMM
/if (${updatecnt}>=4) /goto :doneshrines
/if ( (${SpawnCount[Shrine00 NPC]}==0) && (${SpawnCount[Shrine01 NPC]}==0) ) {
/if (${SpawnCount[Shrine02 NPC]}==0) {
/echo All shrines dead but missed a killscore, delaying some.
/delay 3m
/goto :rekill
}
/Call KillShrine1
}
/call doeventsMM
/if (${updatecnt}>=4) /goto :doneshrines
/Call KillShrine
/doevents NektForrest
/warp succor
/cleanup
/delay 2s
/call doeventsMM
/if (${updatecnt}<4) /goto :rekill
:doneshrines
/doevents flush
/call Movement -120 -174
/keypress back
/delay 2m
/goto :StartOver
/return
Sub LoadAAs
/if (!${Window[AAWindow].Open}) /keypress V
/delay 10s ${Window[AAWindow].Open}
/notify AAWindow AAW_LoadButton Leftmouseup
/delay 20s
/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}
:AnchorMoveLoop
/if (${Zone.ID}!=${StartZone}) /return
/delay 1
/face 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 nolook loc ${MoveY},${MoveX}
/varset iCount 0
/if (${Zone.ID}!=${StartZone}) /return
}
/goto :AnchorMoveLoop
/return
Sub Reset
/doevents flush
:againjerk
/if (!${FindItem[Pinch of Dust from].InvSlot.ID}) /goto :nopowder
/cleanup
/keypress I
/delay 1s
/declare a int local
/for a 22 to 29 step 1
/if (${InvSlot[${a}].Item.Container}) /itemnotify ${a} rightmouseup
/delay 5
/next a
/delay 1s
/itemnotify ${FindItem[Pinch of Dust from].InvSlot} LeftMouseUp
/delay 5
/if (${Cursor.Name.Find[Pinch of Dust from]}) /destroy
/delay 1
/if (${FindItem[Pinch of Dust from].InvSlot}) /goto :againjerk
:nopowder
:foundhim
/call doeventsMM
:OMGWAIT
/if (${Window[TaskTemplateSelectWnd].Open}) {
/notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup
/delay 2s
/notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup
/delay 2s
/cleanup
/keypress ESC
/goto :Okyourgood
}
/goto :OMGWAIT
:Okyourgood
/cleanup
/delay 3s
/face heading 70
/keypress up hold
:entered
/delay 30s ${Zone.ID}==368
/doevents Enteredzone
/if (${Inzone}!=368) /goto :entered
/call LoadAAs
/keypress esc
/delay 3s
/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_CannotSeeTarget
/call cast "Fairy Fire" Activate
/delay 2s ${Me.Casting.Name.Equal["Fairy Fire"]}
/delay 10s !${Me.Casting.Name.Equal["Fairy Fire"]}
/return
Sub Event_NektForrest
/if (${Zone.ID}=25) {
/call MovetoMMentrance
/face heading 70
/keypress up hold
:entered2
/delay 30s ${Zone.ID}==368
/doevents Enteredzone
/if (${Inzone}!=368) /goto :entered2
}
/return
Sub Event_Enteredzone
/varset Inzone ${Zone.ID}
/return
Sub Event_FairyFireResisted
/varset FFResist 1
/return
sub Event_Updated
/varcalc updatecnt ${updatecnt}+1
/return
Sub KillRemains
/varset w 1
/varset y 1
:BattleLooper
/call doeventsMM
/varset StartHP ${Me.PctHPs}
/if (${SpawnCount[remains npc]}==0) /return
/target remains
/if (${Target.Distance}>16) {
/warp loc -217 -420 -62
}
/face fast nolook
/keypress forward
/attack on
/delay 2s
/if (${SpawnCount[remains npc]}==0) /return
/if (${StartHP}>${Me.PctHPs}) /call Warper
/goto :BattleLooper
/return
sub Warper
/attack off
/doevents NektForrest
/warp loc -233 -420 -43
/delay 5s
/delay 30s ${Target.NearestSpawn[lamp].Distance}>50
/return
Sub Event_StartAAgrind
:StartFairyloop
/call FairyAAgrind
/doevents EndFairy
/if (${Macro.Return}==1) {
/echo Ending the Grind, you may start it again as normal.
/return
}
/goto :StartFairyloop
/return
Sub Event_EndAAgrind
/return 1
Sub LootRemains
:LootLooper
/call doeventsMM
/if (${FindItem[Shard of Wisdom].InvSlot.ID}) /return
/target remains
/doevents NektForrest
|:noriskloop
|/if (${Target.NearestSpawn[npc radius 40].ID}) /goto :noriskloop
/if (${SpawnCount[remains corpse]}==0) /return
/target remains
/warp loc -216 -420 -62
/face fast nolook
/keypress forward
/delay 1s
/loot
/delay 3s ${Window[LootWnd].Open}
/delay 1s
/itemnotify loot2 rightmouseup
/if (${Window[ConfirmationDialogBox].Open}) {
/delay 1s
/notify ConfirmationDialogBox Yes_Button leftmouseup
/delay 1s
}
/delay 3s ${FindItem[Shard of Wisdom].InvSlot.ID}
/notify LootWnd DoneButton leftmouseup
/goto :LootLooper
/return
Sub Wait4Death
/varset Died 0
/warp loc -180 -380 -56
/for x 1 to 70
/call doeventsMM
/delay 2s
/if (${SpawnCount[Shrine01 NPC]}==0) /return
/if (${Died}) /return
/next x
/return
Sub Event_Death
/varset Died 1
/delay 1m
/return
Sub KillShrine1
:Shrine1Looper
/call doeventsMM
/if (${updatecnt}>=4) /return
/if (${SpawnCount[Shrine02 NPC]}==0) /return
/varset StartHP ${Me.CurrentHPs}
/tar Shrine02
/if (${Target.NearestSpawn[npc radius 50].ID}) /goto :Shrine1Looper
/if (${Target.NearestSpawn[npc radius 90].Speed}>10) /goto :Shrine1Looper
/if (!${Spawn[a_reanimated_grave_robber00].ID}) /goto :continue
/if (${Spawn[a_reanimated_grave_robber00].X}>-210) /goto :Shrine1Looper
:continue
/doevents NektForrest
/warp target
/delay 1s
/call cast "Fairy Fire" Activate
/delay 2s ${Me.Casting.Name.Equal["Fairy Fire"]}
/delay 10s !${Me.Casting.Name.Equal["Fairy Fire"]}
/if (${StartHP}>${Me.CurrentHPs}) /call Wait4Death
/doevents NektForrest
/warp loc -233 -430 -43
/delay 1s
/doevents FairyFireResisted
/if (${FFResist}==1) {
/varset FFResist 0
/delay 10s ${Me.AltAbilityReady["Fairy Fire"]}
/goto :continue
}
/if (${SpawnCount[Shrine02 NPC]}==0) /return
/if (${Me.State.Equal[stand]}) /sit
/delay 17s
/if (${Me.PctHPs}<100) {
/keypress TAB
/delay 1s
/call cast "Faith of the Fay" Activate
/delay 5s
/keypress TAB
/if (${Me.State.Equal[stand]}) /sit
}
/delay 18s
/stand
/goto :Shrine1Looper
/return
Sub KillShrine
:Shrine1Looper
/doevents Updated
/if (${updatecnt}>=4) /return
/if ( (${SpawnCount[Shrine00 NPC]}==0) && (${SpawnCount[Shrine01 NPC]}==0) ) /return
/if (${Me.PctMana}<15) {
/doevents NektForrest
/warp loc -233 -430 -43
/if (${Me.State.Equal[stand]}) /sit
/delay 45s (${Me.PctMana}>60)
/goto :Shrine1Looper
}
/if (${Shrnr}==1) {
/varset Shrnr 0
/if (${Me.State.Equal[stand]}) /sit
/goto :Contshrloop
}
/if (${Shrnr}==0) {
/varset Shrnr 1
/if (${Me.State.Equal[stand]}) /sit
}
:Contshrloop
/call doeventsMM
/doevents Updated
/if (${updatecnt}>=4) /return
/if (${SpawnCount[Shrine0${Shrnr} NPC]}==0) /goto :Shrine1Looper
/varset StartHP ${Me.CurrentHPs}
/target Shrine0${Shrnr}
/delay 1s ${Target.Name.Find[Shrine0${Shrnr}]}
/delay 5
:continue2
/if (${Target.NearestSpawn[npc radius 55].ID}) /goto :Shrine1Looper
/if (${Target.NearestSpawn[npc radius 100].Speed}>10) /goto :Shrine1Looper
/if (${Target.NearestSpawn[robber].Distance}<180) /goto :Shrine1Looper
/doevents NektForrest
/warp target
/keypress forward hold
/delay 5
/delay 20 (${Target.Distance}>5)
/keypress forward
/call cast "Fairy Fire" Activate
/delay 2s ${Me.Casting.Name.Equal["Fairy Fire"]}
/delay 10s !${Me.Casting.Name.Equal["Fairy Fire"]}
/doevents CannotSeeTarget
/if (${StartHP}>${Me.CurrentHPs}) /call Wait4Death
/doevents NektForrest
/warp loc -233 -430 -43
/delay 1s
/doevents FairyFireResisted
/if (${FFResist}==1) {
/varset FFResist 0
/delay 10s ${Me.AltAbilityReady["Fairy Fire"]}
/goto :continue2
}
/if (${SpawnCount[Shrine0${Shrnr} NPC]}==0) /goto :Shrine1Looper
/if ( (${Me.PctHPs}<100) && (${Me.PctMana}>60) ) {
/keypress TAB
/delay 1s
/call cast "Faith of the Fay" Activate
/delay 5s
/keypress TAB
/if (${Me.State.Equal[stand]}) /sit
}
/if (${Me.State.Equal[stand]}) /sit
/delay 8s
/stand
/goto :Shrine1Looper
/return
Sub gotohim
/For X 1 to ${Ini[pointset,nekmm,Points]}
/call Movement 1 1 ${X}
/next X
/return
Sub Walkaway
/For X ${Ini[pointset,nekmm,Points]} downto 1
/call Movement 1 1 ${X}
/next X
/return
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
/declare ShrineX int outer 0
/declare ShrineY int outer 0
/declare updatecnt int outer 0
/declare Shrnr int outer 0
/declare redotime timer outer 0
/declare Waitupyo int outer
/declare FFResist int outer 0
/declare Inzone int outer 0
/return
And here my suggestion for all leechbots after the second.
Since I recommend only one Mainbot, one fully assist leech and rest up to 4 Loot-only-leeches.
Rich (BB code):
| AALeech2.mac modified by Crystane
|--------------------------
| Credits to
| Nekmm.mac
| By Ccomp5950
|--------------------------
| IMPORTANT !!!!!!!!!!!!!!!!!!!!!!!!!!! READ following requires
| Requires Spellcast.inc
| Requires to place all items out of Top-Level inventory slots into bags!!!
| Requires Preset points for Fairyform
| Last updated 24-12-2005 8:27pm
#Chat say
#Chat Group
#Chat Tell
#Event Death "#*#You have been Slain#*#"
#Event StartAAgrind "[mq2] StartFairy"
#Event EndAAgrind "[mq2] EndFairy"
#Event Updated "Your task 'Queen Nok Nok's Tomb' has been updated."
#Event Updated "[Group] All shrines are dead now!"
#Event Enteredzone "You have entered Shadowed Grove."
#Event NektForrest "You have entered Nektulos Forest."
#turbo 10
Sub Main
/echo For Commandlist "/echo Missionhelp"
:mainloop
/doevents StartAAgrind
/goto :mainloop
/return
sub doeventsMM
/doevents Invite
/doevents Death
/doevents Updated
/return
Sub FairyAAgrind()
/Echo =============================
/Echo NokNok Task AFK Leechbot V1.1
/Echo =============================
/call Setup
:StartOver
/if (${Zone.ID}==368) /goto :Bigloop
/call Reset
/if (${Zone.ID}!=368) /endmac
:Bigloop
/if (${SpawnCount[remains npc]}==1) {
/if (!${Me.AltAbilityReady["Fairy Fire"]}) {
/call LoadAAs
/cleanup
}
/Call KillRemains
/warp succor
/delay 5s
}
/call doeventsMM
/if (${SpawnCount[remains corpse]}==1) {
/if (${FindItem[Shard of Wisdom].InvSlot}) /goto :contbigloop
/call LootRemains
/echo Loot done.
/doevents NektForrest
/warp succor
}
:contbigloop
/varset updatecnt 3
/call doeventsMM
/doevents NektForrest
/warp succor
/cleanup
/delay 2s
:doneshrines
/doevents flush
/call Movement -120 -174
/keypress back
/delay 2m
/goto :StartOver
/return
Sub LoadAAs
/if (!${Window[AAWindow].Open}) /keypress V
/delay 10s ${Window[AAWindow].Open}
/notify AAWindow AAW_LoadButton Leftmouseup
/delay 20s
/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}
:AnchorMoveLoop
/if (${Zone.ID}!=${StartZone}) /return
/delay 1
/face 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 nolook loc ${MoveY},${MoveX}
/varset iCount 0
/if (${Zone.ID}!=${StartZone}) /return
}
/goto :AnchorMoveLoop
/return
Sub Reset
/doevents flush
:againjerk
/if (!${FindItem[Pinch of Dust from].InvSlot.ID}) /goto :nopowder
/cleanup
/keypress I
/delay 1s
/declare a int local
/for a 22 to 29 step 1
/if (${InvSlot[${a}].Item.Container}) /itemnotify ${a} rightmouseup
/delay 5
/next a
/delay 1s
/itemnotify ${FindItem[Pinch of Dust from].InvSlot} LeftMouseUp
/delay 5
/if (${Cursor.Name.Find[Pinch of Dust from]}) /destroy
/delay 1
/if (${FindItem[Pinch of Dust from].InvSlot}) /goto :againjerk
:nopowder
:foundhim
/call doeventsMM
:OMGWAIT
/if (${Window[TaskTemplateSelectWnd].Open}) {
/notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup
/delay 2s
/notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup
/delay 2s
/cleanup
/keypress ESC
/goto :Okyourgood
}
/goto :OMGWAIT
:Okyourgood
/cleanup
/delay 3s
/face heading 70
/keypress up hold
:entered
/delay 30s ${Zone.ID}==368
/doevents Enteredzone
/if (${Inzone}!=368) /goto :entered
/call LoadAAs
/keypress esc
/delay 3s
/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_NektForrest
/if (${Zone.ID}==25) {
/face heading 70
/keypress up hold
:entered2
/delay 30s ${Zone.ID}==368
/doevents Enteredzone
/if (${Inzone}!=368) /goto :entered2
}
/return
Sub Event_Enteredzone
/varset Inzone ${Zone.ID}
/return
sub Event_Updated
/varcalc updatecnt ${updatecnt}+1
/return
Sub KillRemains
/varset w 1
/varset y 1
:BattleLooper
/call doeventsMM
/varset StartHP ${Me.PctHPs}
/if (${SpawnCount[remains npc]}==0) /return
/target remains
/if (${Target.Distance}>16) {
/warp loc -217 -420 -62
}
/face fast nolook
/keypress forward
/attack on
/delay 2s
/if (${SpawnCount[remains npc]}==0) /return
/if (${StartHP}>${Me.PctHPs}) /call Warper
/goto :BattleLooper
/return
sub Warper
/attack off
/doevents NektForrest
/warp loc -233 -420 -43
/delay 5s
/delay 30s ${Target.NearestSpawn[lamp].Distance}>50
/return
Sub Event_StartAAgrind
:StartFairyloop
/call FairyAAgrind
/doevents EndFairy
/if (${Macro.Return}==1) {
/echo Ending the Grind, you may start it again as normal.
/return
}
/goto :StartFairyloop
/return
Sub Event_EndAAgrind
/return 1
Sub LootRemains
:LootLooper
/call doeventsMM
/if (${FindItem[Shard of Wisdom].InvSlot.ID}) /return
/target remains
/doevents NektForrest
|:noriskloop
|/if (${Target.NearestSpawn[npc radius 40].ID}) /goto :noriskloop
/if (${SpawnCount[remains corpse]}==0) /return
/target remains
/warp loc -216 -420 -62
/face fast nolook
/keypress forward
/delay 1s
/loot
/delay 3s ${Window[LootWnd].Open}
/delay 1s
/itemnotify loot2 rightmouseup
/if (${Window[ConfirmationDialogBox].Open}) {
/delay 1s
/notify ConfirmationDialogBox Yes_Button leftmouseup
/delay 1s
}
/delay 3s ${FindItem[Shard of Wisdom].InvSlot.ID}
/notify LootWnd DoneButton leftmouseup
/goto :LootLooper
/return
Sub Wait4Death
/varset Died 0
/warp loc -180 -380 -56
/for x 1 to 50
/call doeventsMM
/delay 2s
/if (${SpawnCount[Shrine01 NPC]}==0) /return
/if (${Died}) /return
/next x
/return
Sub Event_Death
/varset Died 1
/delay 1m
/return
Sub gotohim
/For X 1 to ${Ini[pointset,nekmm,Points]}
/call Movement 1 1 ${X}
/next X
/return
Sub Walkaway
/For X ${Ini[pointset,nekmm,Points]} downto 1
/call Movement 1 1 ${X}
/next X
/return
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
/declare ShrineX int outer 0
/declare ShrineY int outer 0
/declare updatecnt int outer 0
/declare Shrnr int outer 0
/declare redotime timer outer 0
/declare Waitupyo int outer
/declare FFResist int outer 0
/declare Inzone int outer 0
/return
Last edited:



