• 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

Updated SKMM Macro - With Auto-looting

JCasper

Member
Joined
Sep 27, 2005
RedCents
added auto-looting of items from the chest toggle on by starting mac with /mac skmm loot - not much time spent testing this yet

changed some things so hopefully it no longer tries to zone you out if you happen to die close to the same time as farsoth

let me know of any issues and will get them fixed

Rich (BB code):
|--------------------------
| SKMM.Mac
| By Galuvwen
| Based on NekMM by Ccomp5950
|--------------------------
|
| Requires Spellcast.inc
| Requires MQ2Switch Plugin
| 
|
| Last updated 12-02-2005 1:03 AM

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

#turbo 10

#include spellcast.inc

Sub Main()

	/echo =============================
	/echo South Karana AFK Task v. 2 - WithAuto Loot
	/echo =============================
	/echo /mac skmm loot - for auto loot feature
	/echo =============================
	/call Setup
	
	/if (${Param0.Upper.Equal[LOOT]}) {
		/varset Loot 1
		/lootnodrop never
	}

	:StartOver
	 /if (${Zone.ID}==18) /goto :Bigloop
	 /call Reset
	 /if (${Zone.ID}!=18) /endmac
	 :Bigloop
	  /echo delaying for A bit inside the mission
	  /call WaitTime
	  /call JailArea
	  /call PullLevers
    /call SpawnFar
		/call KillFar
		/if (${Loot}) /call DoLootBitch
	  /call GTFO
	  /goto :StartOver
/return

Sub Setup
	/declare x int outer 0
	/declare y int outer 0
	/declare g int outer 0
	/declare g2 int outer 0
	/declare Died int outer 0
	/declare wait int outer 0
	/declare Zoning int outer 0
	/declare Loot int outer 0
	/declare StartHP int outer 0
	/declare Looted int outer 0
/return

Sub Reset
	/for g 0 to ${Group.Members}
	/varcalc g2 ${Group.Members}-${g}
	/taskremove ${Group.Member[${g2}]}
	/next g 
	/delay 5s
	/cleanup	
	/target zealot
	/delay 2s
	/say brave		
	/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
	/target zealot
	/delay 2s
	/say venture
	/delay 45s
	/if (!${Window[AAWindow].Open}) /keypress V
	/notify AAWindow AAW_LoadButton Leftmouseup
	/delay 15s
	/cleanup
	/varset Died 0
/return

Sub WaitTime
  /warp loc 370.97 270.81 15.02
	/varset wait 35
	/for y 0 to ${wait}
	/Echo ${Math.Calc[${wait}-${y}]} minutes till we start
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/next y
/return

Sub JailArea
	/warp loc 536 205 14
	/delay 2s
	/warp succor
	/delay 2s
/return

Sub PullLevers
  /switch 53
  /delay 2s
  /switch 52
  /delay 2s
  /switch 51
  /delay 2s
/return

Sub SpawnFar
	/warp loc 982 32 3
	/delay 2s
	/warp succor
	/delay 2s
/return

Sub KillFar
	/squelch /target clear
	:killfarloop1
	 /varset Died 0
	 /delay 2s
	 /target farsoth
	 /if (${SpawnCount[Farsoth NPC]}==0) /return
	 /attack on
	 /warp target
	 /delay 2s
	 /stick 10 moveback
	 :killfarloop2
	  /doevents
	  /if (${Died}==1) /goto :killfarloop1
	  /call cast "feral rage" Activate
	  /call cast "savage onslaught" Activate
	  /call cast "cyclone blade" Activate
	  /if ( ${Me.PctHPs}<50 ) /call cast "Warlord's Tenacity" Activate
	  /if (${SpawnCount[Farsoth NPC]}==1) /goto :killfarloop2
/return

Sub DoLootBitch
  :openchestloop
   /varset StartHP ${Me.CurrentHPs}
   /varset Looted 0
   /target ornate
   /warp target
   /delay 1s
   /open
   /delay 5s
   /if (${Me.CurrentHPs}<${StartHP}) /call Wait4Death
   /if (${SpawnCount[Ornate Corpse]}==0) /goto :ornatechestloop
   :lootchestloop
    /doevents
    /varset Died 0
    /varset StartHP ${Me.CurrentHPs}
    /target ornate
    /warp target
    /delay 1s
    /if (${Me.CurrentHPs}<${StartHP}) /call Wait4Death
    /if (${Died}) /goto :lootchestloop 
    /loot
    /delay 1s
    /if (${Window[LootWnd].Open}) {
   	 /itemnotify loot1 rightmouseup
	   /notify LootWnd DoneButton leftmouseup
	  }
	  /doevents
	  /if (${Looted}) /return
	  /goto :lootchestloop
/return  

Sub GTFO
  :gtfoloop
   /doevents
   /target Gillamina
   /delay 1s
   /warp Target
   /delay 1s
   /say leave
	 /delay 45s
	 /if (${Zone.ID}==18) /goto :gtfoloop
	 /target zealot
	 /face fast
	 /delay 2s
	 /hail
	 /delay 15s 
/return

Sub Wait4Death
	/varset Died 0
	/for x 1 to 500
	/doevents
	/delay 1s
	/if (${Died}) /return
	/next x
/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
	/target zealot
	/delay 2s
	/say brave
/return

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

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

Sub Event_Looted
  /varset Looted 1
/return
 
Last edited:
By the code the macro seem nice, however I dont own 3 account so I can't test this or anyother mission theses day everyone doing mission and nomore afk for those with only 1 account, too bad...
 
Wooo Hoo thanks for the update .... I see some red cents here .....
 
Do you just run 1 toon through this and leave the other 2 outside or have all 3 run the /mac?
 
Mithaniel said:
Do you just run 1 toon through this and leave the other 2 outside or have all 3 run the /mac?


You only need one the others just get in the way .... lol :)

This is unless of course you are in the mind that someone might be able to tell all 3-6 are not inside.... personally if they are watching me that close I am gonna get nailed for something a lot bigger then doing a MM solo....

Keeping 2 in the guild hall works great to prevent burning buffs.... it will burn food and water though
 
Fixed a bug and added Forage

Heya I like this mac,

Just it failed to move to Gill and say leave to her.
So I fixed that line

/warp mob

to

/warp target

Also I rewrote a tiny bit so the mac waits half of the time outside and uses Forage if your class supports it.
Enjoy Crystane.

Rich (BB code):
|--------------------------
| SKMM.Mac
| By Galuvwen
| Based on NekMM by Ccomp5950
| Added Forage to it for appropriate classes. by Crystane
|--------------------------
|
| Requires Spellcast.inc
| Requires MQ2Switch Plugin
| 
|
| Last updated 12-01-2005 12:35 AM

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

#turbo 10

#include spellcast.inc

Sub Main()

	/echo =============================
	/echo South Karana AFK Task v. 2 - With Auto-Loot
	/echo =============================
	/echo /mac skmm loot - for auto loot feature
	/echo =============================
	/call Setup
	
	/if (${Param0.Upper.Equal[LOOT]}) {
		/varset Loot 1
		/lootnodrop never
	}

	:StartOver
	 /if (${Zone.ID}==18) /goto :Bigloop
	 /call Reset
	 /if (${Zone.ID}!=18) /endmac
	 :Bigloop
	  /echo delaying for A bit inside the mission
	  /call WaitTime
	  /call JailArea
	  /call PullLevers
    /call SpawnFar
		/call KillFar
		/call Wait4Death
		/if (${Loot}) /call DoLootBitch
	  /call GTFO 
	  /goto :StartOver
/return

Sub Setup
	/declare x int outer 0
	/declare y int outer 0
	/declare g int outer 0
	/declare g2 int outer 0
	/declare Died int outer 0
	/declare wait int outer 0
	/declare Zoning int outer 0
	/declare Loot int outer 0
	/declare StartHP int outer 0
	/declare Looted int outer 0
/return

Sub Reset
	/for g 0 to ${Group.Members}
	/varcalc g2 ${Group.Members}-${g}
	/taskremove ${Group.Member[${g2}]}
	/next g 
	/delay 5s
	/cleanup	
	/target zealot
	/delay 2s
	/say brave		
	/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
	/echo delaying for A bit outside the mission and forageing if possible.
	/call WaitTime
	/target zealot
	/delay 2s
	/say venture
	/delay 45s
	/if (!${Window[AAWindow].Open}) /keypress V
	/echo You have now 2mins to load your own AAs and to save em.
	/delay 2m
	/notify AAWindow AAW_LoadButton Leftmouseup
	/delay 15s
	/cleanup
	/varset Died 0
/return

Sub WaitTime
	/varset wait 17
	/for y 0 to ${wait}
	/Echo ${Math.Calc[${wait}-${y}]} minutes till we start
	/doevents
	/if (${Me.AbilityReady[Forage]}) /doability Forage
	/delay 15s
	/if (${Cursor.ID}) /autoinv
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/if (${Me.AbilityReady[Forage]}) /doability Forage
	/delay 5s
	/if (${Cursor.ID}) /autoinv
	/delay 10s
	/next y
/return

Sub JailArea
	/warp loc 536 205 14
	/delay 2s
	/warp succor
	/delay 2s
/return

Sub PullLevers
  /switch 53
  /delay 2s
  /switch 52
  /delay 2s
  /switch 51
  /delay 2s
/return

Sub SpawnFar
	/warp loc 982 32 3
	/delay 2s
	/warp succor
	/delay 2s
/return

Sub KillFar
	/squelch /target clear
	:killfarloop1
	 /varset Died 0
	 /delay 2s
	 /target farsoth
	 /if (${SpawnCount[Farsoth NPC]}==0) /return
	 /attack on
	 /warp target
	 /delay 2s
	 /stick 10 moveback
	 :killfarloop2
	  /doevents
	  /if (${Died}) /goto :killfarloop1
	  /call cast "feral rage" Activate
	  /call cast "savage onslaught" Activate
	  /call cast "cyclone blade" Activate
	  /if ( ${Me.PctHPs}<50 ) /call cast "Warlord's Tenacity" Activate
	  /if (${SpawnCount[Farsoth NPC]}==1) /goto :killfarloop2
/return

Sub DoLootBitch
  /varset StartHP ${Me.CurrentHPs}
  /varset Looted 0
  /target ornate
  /warp target
  /delay 1s
  /open
  /delay 5s
  /if (${Me.CurrentHPs}<${StartHP}) /call Wait4Death
  :lootchestloop
   /doevents
   /varset Died 0
   /varset StartHP ${Me.CurrentHPs}
   /target ornate
   /warp target
   /delay 1s
   /if (${Me.CurrentHPs}<${StartHP}) /call Wait4Death
   /if (${Died}) /goto :lootchestloop 
   /loot
   /delay 1s
   /if (${Window[LootWnd].Open}) {
   	/itemnotify loot1 rightmouseup
	  /notify LootWnd DoneButton leftmouseup
	 }
	 /doevents
	 /if (${Looted}) /return
	 /goto :lootchestloop
/return  

Sub GTFO
  /target Gillamina
  /delay 1s
  /warp target
  /delay 1s
  /say leave
	/delay 45s
	/target zealot
	/face fast
	/delay 2s
	/hail
	/delay 15s 
/return

Sub Wait4Death
	/varset Died 0
	/echo waiting for death,if. If not its delay 9min approximatly
	/for x 1 to 500
	/doevents
	/delay 1s
	/if (${Died}) /return
	/next x
/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
	/if (${Me.AbilityReady[Forage]}) /doability Forage
	/if (${Cursor.ID}) /autoinv
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/doevents
	/delay 15s
	/if (${Me.AbilityReady[Forage]}) /doability Forage
	/if (${Cursor.ID}) /autoinv
	/next y
	/target zealot
	/delay 2s
	/say brave
/return

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

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

Sub Event_Looted
  /varset Looted 1
/return
 
Last edited:
thanks - fixed..

Was late when I was changing things from my personal version.
 
Edit your file, cause I think you still have your name as password followed by aa in invite ;)

But now bad to add forage to it, will help my druid...
 
one thing to look at is that sometimes at zone in you get raped by some wandering mob. another is that if you die trying to exit the exp the mac restarts the wait time like it just zoned in to do the task. ;)
 
Youpi my frist Redcents...

Macro dont seem to work perfectly, after Boss is dead, he dont loot, dont zone out, dont go back take another mission, after the kill the macro end...

But I decide it was so easy to do the mission with 3 hotbutton (4 if you want to loot too) that I dont use the macro, sure I need to be at keyboard, but at least during that time I can see tv and come back every 40min to hit 3 button lol
 
Just thought i would say i can solo this without warp or any other MQ plugin's Rawwar. So seeing only 1 character doing it isnt a give away to using a warp mac.
 
I'm curious... it doesn't seem like there are any pats near zone in, so why do you warp off to the side for the initial wait? Couldn't you just wait at zone in?
 
Has the mm been changed any? Seems like the old mac started messing up and now this new one is messing up... the old one ran fine for me for a LONG LONG time.. then suddenly last night started to not finish... the new one is doing the same.... seems like there are a bunch of mobs around Farsoth now and also Farsoth didnt respond after levers were pulled.. was the spawn delay on him changed? just curious if anyone else is having probs....
 
Curious about Haritos03, you say you can solo this mission without warping... I yet to find any group being able to do the mission without using MQ2 so in solo...

Even with MQ2 I succed but close to fail when arriving to Farsoth kill him and then get kill by adds like 1-2 secondsa later...

If you can show me a way to solo this legit way or without warp you will got my redcents for sure, just dont think its possible without mq2 or a full group...
 
The key is to train the army of mobs away then die. Then when you repop, go back and kill Farsoth. Not that I've actually ever done it that way, but rumor has it that's the way to win without MQ2.
 
Yeah I succeed doing this once with full group but dont think its possible to do it alone, mob will be back to their place before you repop...

And I notice that today lot more person are doing this mission 20 in zone and most are AFK, people should keep their toon in guild hall or PoK not in the zone, only one need to do mission...
 
suspended for this today, someone musta petitioned me being out in SK 24/7, my b. but my alt was running it and my main who was in GH also got suspended. hopefully it stays a suspension
 
How they know who in your group and that you also control them, they check ip ?

Else lot of person group with me in a day, so will they all get suspended lol
 
Incase you were worried about your alts being suspended too when they are just sitting afk getting the xp ,

Wouldnt it be an idea to add some kind of /invite "player" into the macro? removing him after. If GMs check logs etc you can just say you were asked to join group by a guild member to get free xp
 
They're most likely doing these type of suspensions by billing information. No point trying to dodge it by going in and out of groups. Run some GM scripts in your mac's , and don't leave it on for days at a time. And if you still get suspended, it happens.
 
Great Macro.

Anyone want to add a line which warps the tasker of the group to a location other then where the zealot stands. Then warps him back when you can get the task once again.
 
Warping right in front of everyone at taskmaster, isn't exactly the smartest thing to do ;)
If you wanna do something while waiting, you could include some hunting into it, make it hunt cats for pelts or something that isn't warping.

Very great macro..
I changed it to use /fade, so I didn't have to die at every other step :)
Added a few other minor tweaks, nothing amazing or insanely great, but just wanted to share anyway :)

<edit>
-
Updated with some more auto-stuff on tells.
You don't need to be in group to get XP, just in the mission. As long as there are 3+ total in group to keep the missions going you can settle for mission invites.
-
Some cosmetic updates and more/faster checks for invite requests.
-
If you die and then Farsoth dies from a DoT, the NPC to leave by doesn't spawn. Added a 1m timer hack to get by this.
Basically it starts a timer when entering the Leave subroutine, if that timer reaches 0 and it's still in the instance, it will do a "/zone southkarana zealot".
This means you HAVE to set a waypoint at where you zone out from the instance, at zealot in South Karana, and the waypoint MUST be called "zealot" (without the quotes).
With MQ2RWarp (and MQ2PiggyZone too I think) the command to do this is: "/zone setwp zealot".
Also removed the use of the AA called "Lesion" to try and avoid this bug in the future.
</edit>
Rich (BB code):
#Event NeedInvite           "#1# tells you, 'Invite (#2#)'"
#Event NeedTime             "#1# tells you, 'Time (#2#)'"
#Event GroupTime            "#1# tells the group, 'Time'"
#Event ForceBegin           "#1# tells you, 'Force (#2#)'"
#Event LockoutTimer         "#*#task because you must wait 0d:0h:#1#m before you can#*#"
#Event Death                "You have been Slain#*#"
#Event Zoned                "You have entered #1#."
#Event NeedPlayers          "You can not be assigned this shared task because your party does not contain the minimum required number of players."
#Event NoLoS                "You cannot see your target."
#Event CannotLoot           "#*#You cannot loot while a hostile creature is aware of your presence#*#"
#Event Looted               "#*#You have looted#*#"
#Event MagicalPresence      "#*#strange magical presence prevents you from entering#*#"
#Event SomeoneGotTask       "You may not request a shared task because someone in your group, #1#, already has one."
#Event FarsothDied          "You have slain Farsoth Mal!"
#Event FarsothDied          "Farsoth Mal died."
#turbo 10

#include SpellCast.inc

Sub Main
    |--The Password to be auto-invited-----------------------------------------|
    /declare InvitePassword     string  outer   password
    /declare MinutesToStart     int     outer   45
    /declare ZID                int     outer   18
    /declare StartHP            int     outer   0
    /declare NeedPlayer         int     outer   0
    /declare Looted             bool    outer   ${Bool[FALSE]}
    /declare CannotLoot         bool    outer   ${Bool[FALSE]}
    /declare Loot               bool    outer   ${Bool[FALSE]}
    /declare GSay               bool    outer   ${Bool[FALSE]}
    /declare ZonedToInstance    bool    outer   ${Bool[FALSE]}
    /declare Presence           bool    outer   ${Bool[FALSE]}
    /declare FarsothDead        bool    outer   ${Bool[FALSE]}
    /declare LockoutTime        timer   outer   0
    /declare CountDown          timer   outer   0
    /if (${Defined[Param0]}) {
        /if (${Param0.Upper.Equal[LOOT]}) {
            /varset Loot ${Bool[TRUE]}
        } else /if (${Param0.Upper.Equal[GSAY]}) {
            /varset GSay ${Bool[TRUE]}
        }
    }
    /if (${Defined[Param1]}) {
        /if (${Param1.Upper.Equal[LOOT]}) {
            /varset Loot ${Bool[TRUE]}
        } else /if (${Param1.Upper.Equal[GSAY]}) {
            /varset GSay ${Bool[TRUE]}
        }
    }
    :loop
        /if (${Zone.ID} == ${ZID}) /goto :Ready
        /call Reset
        /if (${Zone.ID} != ${ZID}) /endmacro
        :Ready
        /call WaitTime
        /call JailArea
        /call PullLevers
        /call SpawnFarsoth
        /call KillFarsoth
        /if (${Bool[${Loot}]}) /call DoLoot
        /call Leave
    /goto :loop
/return

Sub Reset
    /declare i                  int     local   0
    /declare g                  int     local   0
    /for i 0 to ${Group.Members}
        /varcalc g ${Group.Members}-${i}
        /taskremove ${Group.Member[${g}]}
    /next i
	/delay 2s
    :GettingPlayers
        /doevents
        /delay 1s (${Group.Members} > 1)
    /if (${Group.Members} < 2) /goto :GettingPlayers
    :GetTask
	/cleanup
	/target zealot
	/delay 1s
	/say ${If[${Math.Rand[2]},b,B]}rave		
	/delay 2s
    /varset NeedPlayer 0
    /doevents
    /if (${NeedPlayer} > 0) /goto :GettingPlayers
    :WaitLoop
        /doevents
        /if (${Window[TaskTemplateSelectWnd].Open}) {
            /notify TaskTemplateSelectWnd TaskTemplateSelectAcceptButton leftmouseup
            /delay 5s
            /goto :GotTask
        }
        /delay 1s
    /goto :WaitLoop
	:GotTask
	/doevents
    /varset ZonedToInstance ${Bool[FALSE]}
    /cleanup
    /delay 1s
	/target zealot
	/delay 10s
	/say ${If[${Math.Rand[2]},v,V]}enture
	/doevents
	/if (${Bool[${Presence}]}) {
        /varset Presence ${Bool[FALSE]}
        /delay 10s
        /goto :GotTask
	}
    /delay 1m (${Bool[${ZonedToInstance}]})
    :LoadAAs
    	/doevents
        /if (!${Window[AAWindow].Open}) /keypress V
        /notify AAWindow AAW_LoadButton Leftmouseup
        /delay 15s (${Bool[${Me.AltAbility[Warlord's Tenacity].ID}]})
    /if (!${Bool[${Me.AltAbility[Warlord's Tenacity].ID}]}) /goto :LoadAAs
    /cleanup
/return

Sub WaitTime
    /declare Announcer          timer   local   1m
    /varset CountDown ${MinutesToStart}m
    /call Warper ${Bool[FALSE]} "370.97 270.81 15.02"
    /echo Idleing ${MinutesToStart} minutes before starting..
    /if (${Bool[${GSay}]}) /gsay Idleing ${MinutesToStart} minutes before starting..
    :loop
        /doevents
        /delay 1s
        /if (!${Bool[${Announcer}]}) {
            /if (${Math.Calc[${CountDown}/600]} > 10) {
                /echo ${Math.Calc[${CountDown}/600].Int} minutes ${Math.Calc[${Math.Calc[${CountDown}%600].Int}/10].Int} seconds, before starting..
                /if (${Bool[${GSay}]}) /gsay ${Math.Calc[${CountDown}/600].Int} minutes ${Math.Calc[${Math.Calc[${CountDown}%600].Int}/10].Int} seconds, before starting..
                /varset Announcer 10m
            } else /if (${Math.Calc[${CountDown}/600]} > 1) {
                /echo ${Math.Calc[${CountDown}/600].Int} minutes ${Math.Calc[${Math.Calc[${CountDown}%600].Int}/10].Int} seconds, before starting..
                /if (${Bool[${GSay}]}) /gsay ${Math.Calc[${CountDown}/600].Int} minutes ${Math.Calc[${Math.Calc[${CountDown}%600].Int}/10].Int} seconds before starting..
                /varset Announcer 1m
            } else {
                /echo ${Math.Calc[${CountDown}/10].Int} seconds, before starting..
                /if (${Bool[${GSay}]}) /gsay ${Math.Calc[${CountDown}/10].Int} seconds, before starting..
            }
        }
    /if (${Bool[${CountDown}]}) /goto :loop
/return

Sub JailArea
    /call Warper ${Bool[FALSE]} "536.00 205.00 14.00"
    /delay 2s
    /squelch /warp succor
    /delay 2s
    /doevents
/return

Sub PullLevers
    /switch 53
    /delay 2s
    /switch 52
    /delay 2s
    /switch 51
    /delay 2s
    /doevents
/return

Sub SpawnFarsoth
    /call Warper ${Bool[FALSE]} "982.00 32.00 3.00"
    /delay 2s
    /call Warper ${Bool[FALSE]} "succor"
    /delay 2s
    /doevents
/return

Sub KillFarsoth
    /squelch /target clear
    :AcquireTarget
        /doevents
        /delay 2s
        /target Farsoth
        /if (${SpawnCount[Farsoth NPC]} == 0) /return
        /if (!${Me.Combat}) /attack on
        /squelch /warp target
        /delay 2s
        /stick 10 moveback
    :KillTarget
        /doevents
        /if (!${Bool[${Target.Name.Find[Farsoth]}]}) /goto :AcquireTarget
        /if (${Me.AltAbilityReady[Mighty Strike]}) /call cast "Mighty Strike" Activate
        /if (${Me.AltAbilityReady[Armor Cleave]}) /call cast "Armor Cleave" Activate
        /if (${Me.AltAbilityReady[Feral Rage]}) /call cast "Feral Rage" Activate
        /if (${Me.AltAbilityReady[Savage Onslaught]}) /call cast "Savage Onslaught" Activate
        /if (${Me.AltAbilityReady[Cyclone Blade]}) /call cast "Cyclone Blade" Activate
        /if (${Me.AltAbilityReady[Stunning Blow]}) /call cast "Stunning Blow" Activate
        /if (${Me.PctHPs} < 50) /if (${Me.AltAbilityReady[Warlord's Tenacity]}) /call cast "Warlord's Tenacity" Activate
    /if (${SpawnCount[Farsoth NPC]} == 1) /goto :KillTarget
/return

Sub DoLoot
    /varset StartHP ${Me.CurrentHPs}
    /varset Looted ${Bool[FALSE]}
    /target Ornate
    /squelch /warp target
    /delay 1s
    /open
    /delay 5s
    /if (${Me.CurrentHPs} < ${StartHP}) /call Warper ${Bool[TRUE]} "succor"
    :loot
        /if (${SpawnCount[Ornate Corpse]} == 0) /return
        /doevents
        /varset StartHP ${Me.CurrentHPs}
        /target Ornate
        /squelch /warp target
        /delay 1s
        /if (${Me.CurrentHPs} < ${StartHP}) /call Warper ${Bool[FALSE]} "succor"
        /if (!${Bool[${Target.Name.Find[Ornate]}]}) /goto :loot
        /loot
        /doevents
        /delay 1s
        /if (${Bool[${CannotLoot}]}) {
            /call Warper ${Bool[TRUE]} succor
            /varset CannotLoot ${Bool[FALSE]}
        }
        /if (${Window[LootWnd].Open}) {
            /lootnodrop never
            /itemnotify loot1 rightmouseup
            /notify LootWnd DoneButton leftmouseup
            /lootnodrop always
        }
        /doevents
        /if (${Bool[${Looted}]}) /return
    /goto :loot
/return  

sub Warper(bool Fade, string WarpLoc)
    /attack off
    /if (${Bool[${WarpLoc}]}) {
        /if (${WarpLoc.Upper.Equal[SUCCOR]}) {
            /squelch /warp succor
        } else {
            /squelch /warp loc ${WarpLoc}
        }
    } else {
        /squelch /warp loc ${SafeSpotY} ${SafeSpotX} ${SafeSpotZ}
    }
    /if (${Defined[Fade]} && ${Bool[${Fade}]}) /squelch /fade
    /delay 5s
/return

Sub Leave
    /declare LeaveTimer          timer   local   1m
    /doevents
    :loop
        /doevents
        /target Gillamina
        /delay 1s
        /squelch /warp target
        /delay 1s
        /say Leave
        /if ((!${Bool[${LeaveTimer}]}) && (${Zone.ID} == ${ZID})) /zone southkarana zealot
        /delay 45s
    /if (${Zone.ID} == ${ZID}) /goto :loop
    /target zealot
    /face fast
    /delay 2s
    /hail
    /delay 15s 
/return

Sub Event_LockoutTimer(string Line, int WaitTime)
    /declare Announcer          timer   local   1m
    /varcalc WaitTime ${WaitTime}+1+${Math.Rand[5]}
    /varset LockoutTime ${WaitTime}m
    /echo Delaying ${WaitTime} minutes..
    /if (${Bool[${GSay}]}) /gsay Delaying ${WaitTime} minutes..
    /if (${Me.Standing}) /sit
    :loop
        /doevents
        /delay 1s
        /if (!${Bool[${Announcer}]}) {
            /if (${Math.Calc[${LockoutTime}/600]} > 10) {
                /echo ${Math.Calc[${LockoutTime}/600].Int} minutes ${Math.Calc[${Math.Calc[${LockoutTime}%600].Int}/10].Int} seconds, before requesting mission..
                /if (${Bool[${GSay}]}) /gsay ${Math.Calc[${LockoutTime}/600].Int} minutes ${Math.Calc[${Math.Calc[${LockoutTime}%600].Int}/10].Int} seconds, before requesting mission..
                /varset Announcer 10m
            } else /if (${Math.Calc[${LockoutTime}/600]} > 1) {
                /echo ${Math.Calc[${LockoutTime}/600].Int} minutes ${Math.Calc[${Math.Calc[${LockoutTime}%600].Int}/10].Int} seconds, before requesting mission..
                /if (${Bool[${GSay}]}) /gsay ${Math.Calc[${LockoutTime}/600].Int} minutes ${Math.Calc[${Math.Calc[${LockoutTime}%600].Int}/10].Int} seconds, before requesting mission..
                /varset Announcer 1m
            } else {
                /echo ${Math.Calc[${LockoutTime}/10].Int} seconds, before requesting mission..
                /if (${Bool[${GSay}]}) /gsay ${Math.Calc[${LockoutTime}/10].Int} seconds, before requesting mission..
            }
        }
    /if (${Bool[${LockoutTime}]}) /goto :loop
    /if (!${Me.Standing}) /stand
	/cleanup
	/target zealot
	/delay 2s
	/say ${If[${Math.Rand[2]},b,B]}rave
	/delay 2s
	/doevents
/return

Sub Event_Death
    /delay 1m
/return

Sub Event_NeedPlayers
    /varcalc NeedPlayer 3-${Group.Members}-1
/return

Sub Event_NoLoS
    /keypress BACK
    /delay 1s
/return

Sub Event_Zoned(string Line, string ZoneName)
    /if (${Zone.ID} == ${ZID}) {
        /varset ZonedToInstance ${Bool[TRUE]}
        /return
    }
    /varset ZonedToInstance ${Bool[FALSE]}
/return

Sub Event_NeedInvite(string Line, string ToonName, string Password)
    /echo ${ToonName} asked invite with ${Password}
    /if ((!${Defined[Password]}) || (${Password.NotEqual[${InvitePassword}]}) || (${Group.Members} > 4)) /return
    /invite ${ToonName}
    /taskadd ${ToonName}
    /delay 1s
/return

Sub Event_NeedTime(string Line, string ToonName, string Password)
    /echo ${ToonName} asked time with ${Password}
    /if ((!${Defined[Password]}) || (${Password.NotEqual[${InvitePassword}]})) /return
    /if (${Bool[${LockoutTime}]}) {
        /if (${Math.Calc[${LockoutTime}/10]} > 59) {
            /tell ${ToonName} ${Math.Calc[${LockoutTime}/600].Int} minutes ${Math.Calc[${Math.Calc[${LockoutTime}%600].Int}/10].Int} seconds, before requesting mission..
        } else {
            /tell ${ToonName} ${Math.Calc[${LockoutTime}/10].Int} seconds, before requesting mission..
        }
    } else /if (${Bool[${CountDown}]}) {
        /if (${Math.Calc[${CountDown}/10]} > 59) {
            /tell ${ToonName} Idleing another ${Math.Calc[${CountDown}/600].Int} minutes ${Math.Calc[${Math.Calc[${CountDown}%600].Int}/10].Int} seconds, before starting..
        } else {
            /tell ${ToonName} Idleing another ${Math.Calc[${CountDown}/10].Int} seconds, before starting..
        }
    } else {
        /tell ${ToonName} Sorry. Seems like I don't have any time for you. I'm probably already doing the mission..
    }
    /delay 1s
/return

Sub Event_GroupTime(string Line, string ToonName)
    /echo ${ToonName} asked for time in group
    /if (!${Bool[${GSay}]}) /return
    /if (${Bool[${LockoutTime}]}) {
        /if (${Math.Calc[${LockoutTime}/10]} > 59) {
            /gsay ${Math.Calc[${LockoutTime}/600].Int} minutes ${Math.Calc[${Math.Calc[${LockoutTime}%600].Int}/10].Int} seconds before requesting mission..
        } else {
            /gsay ${Math.Calc[${LockoutTime}/10].Int} seconds before requesting mission..
        }
    } else /if (${Bool[${CountDown}]}) {
        /if (${Math.Calc[${CountDown}/10]} > 59) {
            /gsay Idleing another ${Math.Calc[${CountDown}/600].Int} minutes ${Math.Calc[${Math.Calc[${CountDown}%600].Int}/10].Int} seconds before starting..
        } else {
            /gsay Idleing another ${Math.Calc[${CountDown}/10].Int} seconds before starting..
        }
    } else {
        /gsay Sorry. Seems like I don't have any time for you. I'm probably already doing the mission..
    }
    /delay 1s
/return

Sub Event_ForceBegin(string Line, string ToonName, string Password)
    /echo ${ToonName} asked Force begin with ${Password}
    /if ((!${Defined[Password]}) || (${Password.NotEqual[${InvitePassword}]}) || (!${Bool[${CountDown}]})) /return
    /tell ${ToonName} Okay. Starting right away.
    /varset CountDown 0
    /delay 1s
/return

Sub Event_MagicalPresence
    /echo Event_MagicalPresence
    /varset Presence ${Bool[TRUE]}
/return

Sub Event_Looted
    /if (${Bool[${Loot}]}) /varset Looted ${Bool[TRUE]}
/return

Sub Event_CannotLoot
    /varset CannotLoot ${Bool[TRUE]}
/return

Sub Event_SomeoneGotTask(string ToonNam)
    /echo ${ToonName} already got a task.
/return

Sub Event_CannotLoot
    /varset FarsothDead ${Bool[TRUE]}
/return
 
Last edited:
why do i get the error that it cannot parse the switches 53-52-51 , without the levers being pulled macro just sits there


NM forgot to load mq2switch
 
EvenLessSpam: Do you have any tips for why the script wont remove the members from the task automatically, my guess is that im missing a plugin or something.
 
djbighead: They have to be in the group for it to be able to figure out to remove them from the task. If they're not in group it will just assume they're not in task either. I don't know if it's possible to read it directly from the task window.

<edit>
It might be a lag issue, althogh I lag plenty I don't have that issue..

In the Reset subroutine, there's a /for loop which removes the group members from the task, it looks like this:
Rich (BB code):
    /for i 0 to ${Group.Members}
        /varcalc g ${Group.Members}-${i}
        /taskremove ${Group.Member[${g}]}
    /next i

Try adding a delay into there like this:
Rich (BB code):
    /for i 0 to ${Group.Members}
        /varcalc g ${Group.Members}-${i}
        /taskremove ${Group.Member[${g}]}
        /delay 1s
    /next i
</edit>
 
Macro updated with a ghetto hack to get past the "Farsoth Mal died." bug. The bug is that Farsoth Mal dies from the DoT while you're dead, it doesn't trigger the NPC you tell to "Leave".
Also removed the use of the AA called "Lesion" which was causing this. Should no longer happen now anyway, but if it does the ghetto hack is there to save the day ;)
 
OK i must be doing something wrong here. I tried to get this working last night but when it zones into splitpaw it loads my saved abilities for gnoll brute, and then it keeps spamming me with some message about there are no saved abilities taht this character doesnt' already possess

it just sits there spamming that over and over and not doing anything else.

Can someone help me out here?
 
sgresham said:
loads my saved abilities for gnoll brute, and then it keeps spamming me with some message about there are no saved abilities taht this character doesnt' already possess
Sounds to me like it's stuck in the LoadAAs loop
Rich (BB code):
    :LoadAAs
    	/doevents
        /if (!${Window[AAWindow].Open}) /keypress V
        /notify AAWindow AAW_LoadButton Leftmouseup
        /delay 15s (${Bool[${Me.AltAbility[Warlord's Tenacity].ID}]})
    /if (!${Bool[${Me.AltAbility[Warlord's Tenacity].ID}]}) /goto :LoadAAs
My guess is that you haven't bought the AA called Warlord's Tenacity, which is the AA it checks to see if the AA's are loaded.
 
The macro is brilliant. GJ EvenLessSpam, but I have 2 problems, one of which I was able to mitigate. I get an error about the time for killing Farsoth that says: DoCommand couldn't parse /stick 10 moveback

This sounds like a moveutils ability, which I don't use. So I just removed that line as it still followed through with the macro even tho that one line didnt work.

#2 (This one makes me sad) After the mission during the call for /reset, the lines that remove the players from the mission dont seem to be working properly. If I want to continue on without a hitch I have to manually do it. Even tried just forcing /taskremove <name of player> commands into the /reset sub of the macro for the characters I always group with. If theres ANY way around this, please, help me out :( BTW I tried the fix you posted above, still a no go.
 
ran mine for last 36 hours with no issues.

gotta love the 32 or so AA per 24 hours of AFK
 
I'm beginning to have issues when I'm running it during raid (raid and xp at the same time is nice), although seems that lag is causing the bot to fail at some of the steps.

I was wondering if Farsoth will despawn after a certain amount of time, after he has been triggered? If he does not, then I'm thinking I should do the initial steps so that all timers and HP is full when engaging Farsoth when time is right.

T3hm4s3r: Didn't write the macro, I merely tweaked some things to my personal liking :) And I haven't seen the bug you mentioned, so don't know what is causing it, except perhaps lag as explained earlier. Try adding some delays.
 
Updated SKMM Macro - With Auto-looting

Users who are viewing this thread

Back
Top
Cart