• 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 --->

Exp Macro (Scouting Maiden's Grave) (1 Viewer)

Status
Not open for further replies.

oortcloud

Member
Joined
May 5, 2007
RedCents
Scouting Maiden's Grave a simple solo scout task in The Buried Sea. You just run around and get location updates to complete it. Captain Pete is the task giver. The task yields 50pp and about 9.5% AA per run at lvl 75. It takes almost exactly 3 minutes to complete it as a bard. I'm averaging about 1.6 - 1.7 AAs per hour. It would be a little higher but I have to med every 4-5 laps.

This macro is customized for a bard but there's no reason other classes can't use it with a few modifications. If anyone is interested then let me know and I can tell you exactly where to make changes. The succor point is not too far from the task giver so certain classes may be able to do it faster.

The are several important things you should know before running this macro.

1) At 3 minutes per lap thats 20 task completions per hour. If other PCs are near the task giver they will notice you. Don't run this macro when there are lots of people around or you might get reported. The macro does some basic PC radius checks and pauses when people are around the task giver. But use it with caution when the zone has a lot of people in it.

I personally never run this macro unattended during peak play time. However about 8-12 hours a day this zone is kinda dead on my server and is prime time for this macro.

2) One of the updates in the task is 'Find the beach of the undead'. You will get aggro here 90% of the time (unless you have IVU). As a bard this isn't a problem because I simply fade. If you can't loose aggro then you need some form of IVU. If you dont do this you will run a big risk either getting killed or training people.

You will see other PCs in the undead area from time to time. If you train them they won't be happy. This is why it's important to not run this macro unattended when there are lots of people in the zone.

IVU potions are about 10-15 pp each. You get 50pp per lap so theoretically you could buy a bunch of IVU potions, still make a small profit, and not have to worry about the undead aggro.

3) The island is usually empty but from time to time there are people in the area getting quest drops. If they happen to set up camp in the path this macro takes then you will repeatedly run through their camp (every 3 minutes). This will look very strange to say the least.

Again this is why I don't run this macro unattended when lots of people are in the zone.

4) You'll need some form of invis and levitation (and preferably something to make you run faster). The only things that see through invis are the undead and they are only encountered once. The rest of the time you will need to be invis'ed.

5) Occasionally their are KOS roamers near the task giver. They hit pretty hard, so be careful around him when you are not invis'ed. Note that you do not need to be visible to hail him once the task is complete. But you must be visible in order to get the task.

6) The reward must be accepted at the end in order to get the exp and plat. This macro can do that automatically but you need the MQ2MMouseTo plugin. (This is because MQ2 cannot currently automatically accept TBS rewards.) In order for the /mmouseto command to work the mouse must be free and the EQ window must have focus.

If you want to run EQ in the background then you will need to manually accept the rewards. EQ allows up to 5 pending rewards. So every 15 minutes or so you will need to do this. The macro can be set to exit every 5 laps for this reason.

I believe those are the main things to worry about. Personally I am really enjoying this macro. Its very decent exp with about zero chance of death and a small amount of plat to boot. Oh and your blacksail smugglers faction will be maxed after a few days.

The macro has lots of comments, but if you have questions about it let me know.

Rich (BB code):
#turbo

#include oc-utilities.inc

#Event Reward "#*#You have successfully been granted your reward for: Scouting Maiden's Grave#*#"
#Event Update "#*#Your task 'Scouting Maiden's Grave' has been updated.#*#"

Sub Main
    |###  Camp out when done?
    /declare camp_out bool outer false
    
    |###  Reward option.
    /declare reward_option int outer 1

	|###  The number of iterations to do.
	/declare max_iters int outer 15
	
	|###  The number of laps to do per iteration.
	/declare max_laps int outer 4
	
	|###  The number of seconds to pause between iterations when a PC is near task giver.
	/declare pause_iter int outer 3000
	
	|###  The number of seconds to pause between laps when a PC is near task giver.
	/declare pause_lap int outer 600
	
	|###  The radius to check for PCs near task giver.
	/declare pc_radius int outer 150
	
	|###  The moveto sensitivity.
	/declare moveto_sens int outer 20
	
	|###  PCT mana and health to pause for regen.
	/declare med_limit int outer 50		
	
	|###  This is the drum I use.  Change it to your drum if you're a bard.
	/declare drum_name string outer rime-coated drum of the avalanche
   
    |###  No need to change any of the variables below here.
    /declare  iters     int outer 0
	/declare  laps      int outer 0
	/declare  tot_laps  int outer 0
	
	/declare  aas     float outer 0
    /declare  aas_hr  float outer 0
    
    /declare  start_aaexp  float outer ${Me.PctAAExp}
    /declare  start_aas    int outer ${Me.AAPointsTotal}    
        
    /declare  got_reward  bool outer false   
    /declare  pc_timer    timer outer 0
    /declare  update_cnt  int outer 0	
	
   	|### Start the exp!
	/moveto ${moveto_sens}
	
	/for iters 1 to ${max_iters}
		/for laps 1 to ${max_laps}
			/call GetTask "captain pete" willing "scouting maiden's grave"
			
			:Loop_1				
				/call CheckHealthMana true
				/call LevSpeedFade
				
				/call GotoIsland
				/call ScoutIsland
				/call LeaveIsland				
				
				/doEvents	
			/if (${update_cnt} < 9) {
				/echo Repeating.  Only received ${update_cnt} of 9 updates.
				/goto :Loop_1
			}
			
			/call ReturnNearCaptainPete
			/call FinishTask "captain pete" ${reward_option}
			/call NearbyCheck ${pause_lap}
		/next laps
		
		/call NearbyCheck ${pause_iter}
	/next iters
	
	/beep "c:/windows/media/tada.wav"
	
	/sit
	/if (${camp_out}) /camp desktop
	
	/echo Exiting.
/return

Sub GotoIsland
	/look 0
	/call MoveTo -350 3230
/return

Sub ScoutIsland
	|###  2 south eastern islands
	/call MoveTo 1630 3130
	/look -6
	/call MoveTo 1675 2640
	/call MoveTo 1735 2695
	
	|###  undead beach
	/call MoveTo 2595 3050
	/call MoveTo 2900 3141
	/call MoveTo 3110 3065
	/look 0	
	
	|###  Almost always have aggro here.
	/if (${Me.CombatState.Equal[combat]}) /call Fade
	
	|###  archway
	/call MoveTo 3350 3000
	/call MoveTo 3355 3260
	/call MoveTo 3350 3000
				
	|###  waypoints
	/call MoveTo 3860 3195
	/call MoveTo 4025 3370
	
	|###  northern 2 islands
	/call MoveTo 4205 3270
	/call MoveTo 4650 4080
	/look -12
	
	|###  north beach
	/call MoveTo 3800 4130
	/look -3
	
	|###  center pool
	/call MoveTo 2770 3850
	/look 0
	
	|###  waypoints
	/call MoveTo  2555 3795
	/call MoveTo  2040 3810
	
	|###  last southern  island
	/call MoveTo 1600 4460
	
	|###  Sometimes you can get aggro on the way here.
	/if (${Me.CombatState.Equal[combat]}) /call Fade
/return

Sub LeaveIsland
	/call MoveTo 105 3980
/return

Sub ReturnNearCaptainPete
	/call MoveTo -1165 3545
	/look -30
	/call MoveTo -1480 3465
/return

Sub Event_Reward
	/varset got_reward true
/return

Sub Event_Update
	/varcalc update_cnt ${update_cnt} + 1
/return

You will also need this include file. Its holds a lot of common functions I use in many of my macros. Save it as 'oc-utilities.inc' and place it in the same folder as your macros.

Rich (BB code):
#define DEBUG false
#define CAST_LAG 30

|###  delay is 10ths of second, remain is ticks
Sub CheckSwapCastWWSwap(string itemName, string slot, int delay, int remain)
	/declare prevItem string local ${InvSlot[${slot}].Item.Name}
	
	/call CheckSwapCastWW "${itemName}" ${slot} ${delay} ${remain}
	
    /if (${prevItem.NotEqual["NULL"]}) {
		/call Swap "${prevItem}" ${slot}    
	}  
/return

Sub CheckSwapCastWW(string itemName, string slot, int delay, int remain)
    /if (${Me.Buff[${FindItem[${itemName}].Spell.Name}].Duration} < ${remain}) {
        /call SwapCastWW "${itemName}" ${slot} ${delay}
    }
/return

Sub SwapCastWW(string itemName, string slot, int delay)
    /call SwapCastWait "${itemName}" ${slot} ${delay}
    
    :Loop_1
    	/delay 1
    /if (${Me.Casting.ID} || !${Me.SpellReady[1]}) /goto :Loop_1
/return

Sub SwapCastWait(string itemName, string slot, int delay)
	/call Swap "${itemName}" ${slot}
    /call CastWait "${itemName}" ${delay}
/return

Sub SwapCast(string itemName, string slot)
	/call Swap "${itemName}" ${slot}
	/cast item "${itemName}"	
/return

Sub Swap(string itemName, string slot)
	/squelch /exchange "${itemName}" ${slot}
	
	:Loop_1
		/delay 1
	/if (${InvSlot[${slot}].Item.Name.NotEqual[${itemName}]}) /goto :Loop_1
/return

Sub CheckCastWait(string itemName, int delay, int remain)
    /if (${Me.Buff[${FindItem[${itemName}].Spell.Name}].Duration} < ${remain}) {
        /call CastWait "${itemName}" ${delay}
    }
/return

Sub CastWait(string itemName, int delay)
    /declare tmp int local 0
    /varcalc tmp ${delay} + CAST_LAG
    
    /cast item "${itemName}"
    /delay ${tmp} ${Me.Buff[${FindItem[${itemName}].Spell.Name}].ID}
/return

Sub CastSongWait(string songName, int delay)
    /declare tmp int local 0
    /varcalc tmp ${delay} + CAST_LAG
        
    /cast "${songName}"
    /delay CAST_LAG ${Me.Casting.ID} == ${Spell[${songName}].ID}
    /delay ${tmp} ${Me.Casting.ID} != ${Spell[${songName}].ID}
/return

Sub StopTwistWait
    /squelch /twist off
    
    :Loop
    	/delay 1
    /if (${Me.Casting.ID} || !${Me.SpellReady[1]}) /goto :Loop
/return

Sub MoveTo(int yLoc, int xLoc)
	/squelch /moveto loc ${yLoc} ${xLoc}
	
    :MoveToLoop
        /delay 1
    /if (${MoveTo.Moving}) /goto :MoveToLoop
    
    /squelch /moveto off
/return

Sub GetTask(string taskGiver, string phrase, string task, bool sit, int pause)
	/doEvents flush
	
	/varset update_cnt 0
	/call GotoTaskGiver "${taskGiver}"
	
	/call BecomeVisible

	/if (${sit}) /sit
	
	/say ${phrase}

	:Loop_1
		/delay 1
	/if (!${Window[TaskSelectWnd].Open}) /goto :Loop_1
	
	/notify TaskSelectWnd TaskList leftmouseup
	/notify TaskSelectWnd TaskList listselect ${Window[TaskSelectWnd].Child[TaskList].List[=${task}]}
	/notify TaskSelectWnd AcceptButton leftmouseup	

	:Loop_2
		/delay 1
	/if (!${Window[TaskWnd].Open}) /goto :Loop_2
	
	/call CloseTaskWindow
	
	/if (${pause} > 0) /call PauseRandom ${pause}
/return

Sub FinishTask(string taskGiver, int option, bool sit, int pause)
	/call GotoTaskGiver "${taskGiver}"
	
	/if (${sit}) /sit
	
	/hail
	
	:Loop_1
		/delay 1
	/if (!${Window[RewardSelectionWnd].Open}) /goto :Loop_1
	
	/reward ${option} ${option}

	/varset got_reward false
	:Loop_2
		/delay 1
		/doEvents
	/if (!${got_reward}) /goto :Loop_2
	
	/squelch /windowstate RewardSelectionWnd close
	
	|###  print progress
	/varcalc  aas       (((${Me.AAPointsTotal} - ${start_aas}) * 100) + (${Me.PctAAExp} - ${start_aaexp})) / 100
	/varcalc  aas_hr    ${aas} / (${Macro.RunTime} / 3600)
	/varcalc  tot_laps  ${laps} + ((${iters} - 1) * ${max_laps})
	
	/echo Laps: ${tot_laps}   AA Exp: ${aas}   AA Per Hour: ${aas_hr}
	
	/if (${pause} > 0) /call PauseRandom ${pause}
/return

Sub GotoTaskGiver(string taskGiver)
	/target ${taskGiver}
	
	:Loop_1
		/delay 1
	/if (${Target.CleanName.NotEqual[${taskGiver}]}) /goto :Loop_1
	
	/face
	/squelch /moveto id
	
	:Loop_2
		/delay 1
	/if (${MoveTo.Moving}) /goto :Loop_2	
	
	/look 0
/return

Sub LevSpeedFade
	/if (${Me.Class.Name.Equal[bard]}) {
	   	/call StopTwistWait
   	}
   	
	/call Levitate
	/call Speed
	/call Fade
/return

|###  This is what I use to cast levitate on myself.   If you dont have this item
|###  then you will need to customize it for yourself.
Sub Levitate
	/if (${FindItem[kelp-string lute of tide rituals].ID}) {
    	/call CheckSwapCastWWSwap "kelp-string lute of tide rituals" offhand 20 600
    } else /if (${FindItem[singing steel boots].ID}) {
    	/call CheckSwapCastWWSwap "singing steel boots" feet 35 50
    }
/return

|###  This is what I use to run fast.  Customize it as needed.
Sub Speed
	/if (${Plugin[mq2speedutils].Name.NotEqual["NULL"]}) {
		/squelch /speed 1.4
		/return
	}
	
	/if (${Me.Class.Name.Equal[bard]}) {
		|###  equip your drum
		/if (${FindItem[${drum_name}].ID}) {
			/call Swap "${drum_name}" offhand	
		}
	
		|###  use composers greaves if you have it
		/if (${FindItem[composers greaves].ID}) {
			/call SwapCastWait "composers greaves" legs 10
		|###  otherwise sing selos
		} else {
			/cast "selo's accelerating chorus"
	
    		:Loop_1
    			/delay 1
		    /if (${Me.Casting.ID} != ${Spell[selo's accelerating chorus].ID}) /goto :Loop_1

			:Loop_2
				/delay 1
			/if (!${Me.Buff[selo's accelerating chorus].ID}) /goto :Loop_2
		}
	}
/return

Sub Fade
	/if (${Me.Class.Name.Equal[bard]}) {
		/alt activate 212
	}
/return

|###  This is a very reliable way to become visible for a bard.  If you're not a bard
|###  then you'll need to do something different.
Sub BecomeVisible
	/if (${Me.Class.Name.Equal[bard]}) {	
		/squelch /twist 1 2
		:Loop_1
			/delay 1
		/if (${Me.Invis}) /goto :Loop_1
		/squelch /twist off
	}
/return

|###  Checks for PCs near the task giver.
Sub NearbyCheck(int pause)
	/if (${SpawnCount[pc radius ${pc_radius}]} > 1) {
		/echo PC nearby - pausing.
		/varset pc_timer ${pause}
		
		/sit 
		:Loop_1
			/delay 10
		/if (${pc_timer} > 0 && ${SpawnCount[pc radius ${pc_radius}]} > 1) /goto :Loop_1		
		/stand
	}
/return

|### Med if mana or health get too low.
Sub CheckHealthMana(bool invis)
	/if (${Me.PctHPs} < ${med_limit} || ${Me.PctMana} < ${med_limit}) {
		/echo Medding.
		
		/if (${invis}) /call Fade
		
		/sit
		:Loop_1
			/delay 10
		/if (${Me.PctHPs} < 96 || ${Me.PctMana} < 96) /goto :Loop_1
		/stand
	}
/return

Sub WaitForBoat(string boat, int yloc, int xloc)
	:Loop
		/delay 1
	/if (${Target.CleanName.NotEqual[${boat}]} || ${Target.Speed} != 0 || ${Target.Y.Int} != ${yloc} || ${Target.X.Int} != ${xloc}) {
		/squelch /target ${boat}
		/goto :Loop
	}
/return

Sub PauseRandom(int pause)
	/declare rnd int local 0
	/varcalc rnd (${Math.Rand[${pause}]} + 1) * 10
	/delay ${rnd}
/return

Sub FaceRandom
	/face heading ${Math.Rand[360]}
/return

Sub WaitForUpdate
	/declare old_update_cnt int local ${update_cnt}
	
	:Loop_1
		/doEvents
		/delay 1
	/if (${update_cnt} == ${old_update_cnt}) /goto :Loop_1
/return

Sub CloseTaskWindow
	/if (${Window[TaskWnd].Open}) {
		/squelch /windowstate TaskWnd close
	}
/return

Edit: It will now select the reward for you without the MQ2MMouseTo plugin. To do this requires the MQ2Reward plugin. However, I had problems using the MQ2Reward that comes with RedQuest compile. I needed to select the 4th option and it wouldnt do it. So here's a plugin that works for me. It might work if the default MQ2Reward doesn't work for you.

Also, if you have problems with the reward then you might need to adjust the reward_option variable. Look for the following in the macro, somewhat near the top.

Rich (BB code):
|###  Reward option.
/declare reward_option int outer 1

When you complete the task if you need to select a different option then change the above code to whatever option you need. For instance, I need to select "Option 4" so in my macro it looks like this:

Rich (BB code):
|###  Reward option.
/declare reward_option int outer 4

--Oort


Here's the plugin code (.dll attachment below).

Rich (BB code):
// MQ2Reward.cpp : Defines the entry point for the DLL application.
//

// PLUGIN_API is only to be used for callbacks.  All existing callbacks at this time
// are shown below. Remove the ones your plugin does not use.  Always use Initialize
// and Shutdown for setup and cleanup, do NOT do it in DllMain.

#include "../MQ2Plugin.h"

PreSetup("MQ2Reward");

VOID AutoReward(PSPAWNINFO pChar, PCHAR szLine);

bool debug = false;

// Called once, when the plugin is to initialize
PLUGIN_API VOID InitializePlugin(VOID)
{
	DebugSpewAlways("Initializing MQ2Reward");
	AddCommand("/reward",AutoReward);
}

// Called once, when the plugin is to shutdown
PLUGIN_API VOID ShutdownPlugin(VOID)
{
	DebugSpewAlways("Shutting down MQ2Reward");
	RemoveCommand("/reward");
}

VOID AutoReward(PSPAWNINFO pChar, PCHAR szLine)
{
	CHAR szBuffer[MAX_STRING] = {0};
	CHAR szArg1[MAX_STRING] = {0}; 

	GetArg(szArg1, szLine, 1);

	int arg1 = atoi(szArg1) - 1;

	if (arg1 < 0) {
		sprintf(szBuffer, "Illegal option index: '%s'", szArg1);
		WriteChatColor(szBuffer,USERCOLOR_DEFAULT);
		return;
	}

	if (debug) {
		sprintf(szBuffer, "Trying to find reward at option index: %s", arg1);
		WriteChatColor(szBuffer,USERCOLOR_DEFAULT);
	}

    //             Parent                               TabWindow           PageTemplate
	CXWnd *pWnd = FindMQ2Window("RewardSelectionWnd")->GetFirstChildWnd()->GetFirstChildWnd();
	
	while (pWnd) {
		if (((PCSIDLWND)pWnd)->Show) {

			if (CListWnd *pListOpt = (CListWnd*)((CSidlScreenWnd*)(pWnd->GetChildItem("RewardSelectionOptionList")))) {
				pListOpt->SetCurSel(arg1);

				//CHAR cxStr[MAX_STRING] = {0};
				//CXStr Str;
				//CXMLData *pXMLData = ((CXWnd*)pListOpt)->GetXMLData();
				//GetCXStr(pXMLData->Name.Ptr,cxStr,MAX_STRING);
				//sprintf(szBuffer, "Name: %s", cxStr);
				//WriteChatColor(szBuffer,USERCOLOR_DEFAULT);

				if (CXWnd *pButton = pWnd->GetChildItem("RewardSelectionChooseButton")) {
					if (debug) WriteChatColor("Clicking 'Select Option' button.",USERCOLOR_DEFAULT);
				
					CXRect rect = pButton->GetScreenRect();
					CXPoint pt = rect.CenterPoint();
					pButton->HandleLButtonDown(&pt,0);
					pButton->HandleLButtonUp(&pt,0);				

					return;
				}
			}
		}

		pWnd = pWnd->GetNextSib();
	}

	sprintf(szBuffer, "Could not find reward at %s.", arg1);
	WriteChatColor(szBuffer,USERCOLOR_DEFAULT);
}
 
Last edited:
Nice job, haven't had a decent exp macro. You could always use Rogue shroud to have sneak/hide(but you will run slower), but then you don't need potions at all. I don't know much about Rogues, but I believe Undead can't see through Sneak/Hide.

Redcents for you, even though I won't use it.
 
There's another scout task that might be more suitable for certain classes - Mapping Suncrest Ridge. It starts in Barren Coast and the task giver is Brynden Snow. It yields around 13-14% AA and 75pp per run but takes almost 10 minutes for a bard (becuase I have to wait for the damn boat). A druid can do it in less than 5 minutes. I've seen a cleric doing it a lot and he seemed to take about 5 minutes too.

I have a macro that will do it for a bard. It could be modified to work with another class. I'll post it later.

While Mapping Suncrest Ridge is slower (for me), there are a couple of things I like about it. Nothing aggros while doing it. Any class can do it because you don't need to gate or fade. You do need levi and invis however. Its more low key and I feel more comfortable doing suncrest during peak play times. I dont think anyone really notices or cares what I'm doing.
 
INteresting I will take a look at these quests.. I would be interested in seeing the second macro.
 
This seems to require an item calle dcomposers greaves can it be done without that?
 
Yes it can work without that item. In the macro there is a routine called "Sub PrepareRun". Delete that and replace it with the code below. This will sing "selo's accelerating chorus" instead of usng the clicky greaves. (You will need to have that song memmed in one of you spell gems.)

Also when I tested this I discovered a bug in the 'oc-utilities.inc' file. It has been updated. So you will need to go to the first post and cut-n-paste a new 'oc-utilities.inc' file. If you dont do this the macro may not work for you.

Rich (BB code):
Sub PrepareRun
	/call StopTwistWait
	
	/cast "selo's accelerating chorus"
	
    :Loop_1
    	/delay 1
    /if (${Me.Casting.ID} != ${Spell[selo's accelerating chorus].ID}) /goto :Loop_1

	:Loop_2
		/delay 1
	/if (!${Me.Buff[selo's accelerating chorus].ID}) /goto :Loop_2
	
	/alt activate 212
/return
 
Can't seem to find MQ2MMouseTo anywhere around here.

Edit - Thanks just compiled with vanilla MQ2 off their website.
 
Last edited:
Here's the source that I'm using for /mmouseto

Rich (BB code):
// MQ2MMouseTo.cpp : Defines the entry point for the DLL application.
// V1.0 - Bushdaka

// /MMouseTo X Y - will move the mouse cursor to the X Y coordinates

#include "../MQ2Plugin.h"
PreSetup("MQ2MMouseTo");

void Help()
{
   WriteChatColor("MQ2MMouseTo - moves mouse cursor to specific x,y",USERCOLOR_DEFAULT);

   WriteChatColor("Usage:",USERCOLOR_DEFAULT);
   WriteChatColor("/MMouseTo X Y   - moves mouse cursor to X Y coordinates",USERCOLOR_DEFAULT);
   return;
}

void DoMMouseTo(PSPAWNINFO pChar, PCHAR szLine)
{
   char szArg1[MAX_STRING] = {0};
   char szArg2[MAX_STRING] = {0};
   int X=0;
   int Y=0;

   GetArg(szArg1,szLine,1);
   GetArg(szArg2,szLine,2);

   if (strlen(szArg1)==0 || strlen(szArg2)==0 || !strnicmp(szArg1,"HELP",4)) {
      Help();
      return;
   }

   X=atoi(szArg1);
   Y=atoi(szArg2);
   //if ((X>GetSystemMetrics(SM_CXSCREEN)) || (Y>GetSystemMetrics(SM_CYSCREEN))) return;
   if ((X<0) || (Y<0)) return;

   SetCursorPos(X,Y);

   return;
}

PLUGIN_API VOID InitializePlugin(VOID)
{
   DebugSpewAlways("Initializing MQ2MMouseTo");
   AddCommand("/MMouseTo",DoMMouseTo);
   return;
}

PLUGIN_API VOID ShutdownPlugin(VOID)
{
   DebugSpewAlways("Shutting down MQ2MMouseTo");
   RemoveCommand("/MMouseTo");
   return;
}
 
Made a bug fix and some changes to the macro. Both files were changed (the macro and oc-utilities.inc).

Basically I made it more friendly. 1) If you're not a bard then it won't try to do certain things like 'fade'. 2) If you don't have the same clickies I use then it simply wont try to use them. The routines to take a look at are:

Sub Fade
Sub Levitate
Sub RunFast
Sub BecomeVisible

Customize these to suit your needs.

I also added a variable near the top called "drum_name". If you're a bard then set that to your drum and it will equip it.

Note: if you're a bard it will use composers greaves if you have them, if not, then it will sing selos.
 
Great macro! Ran this for 3 hours last night was great exp and loot for how much time it consumed. Nice macro love to see the bard macro's that still work.
 
Think you could make this workable with a rogue .... looked at everything in TBS and nothing sees rogue sos but I can't seem to make this work as I am not good with macros ...

Thanks but looks awesome
 
Just a FYI for any bards with no clickys I added SSoT in the macro, right before you take off and do the mission. I have now run this for 10 hours with out a single problem. The AA's are great! Its like vxed has come back to life :)
 
mjump2000 said:
Think you could make this workable with a rogue .... looked at everything in TBS and nothing sees rogue sos but I can't seem to make this work as I am not good with macros ...

Thanks but looks awesome

I think I could, but I need know a few things. I dont have a rouge. Do you know the /alt activate # for SoS? What will you use for levitation? Potion? Will you use anything for run speed, like jboots, or run speed potion? You need levation but run speed is optional.
 
SoS is passive as long as the rogue is both sneaking and hiding, I have trouble with the hiding command so use Me.Invis and it works just fine btw.
 
Yes it does and RQ11.11 has the MQ2Reward.dll. I have added it into the macro so when hes done with the last 1st missoin and gets the 2nd the macro just /reward. Since there is only 1 reward for my toon avaiable its perfect. So now I don't have to run 16 laps then come back and get new mission I have run 80 mission so far today with out a hitch.
 
Updated the code in the first post. Fixed a couple of bugs and made a few improvements. I also added the use of the MQ2Reward plugin, which works a lot better that MQ2MMouseTo. Enjoy.

--Oort
 
not sure why, but it hung for my bard when i started it at npc, got task and just stood there /shrug
 
I have a bard with no clicky levi, ive tried several attempts at switching his run speed mod to use SSOT instead of SAC, i actually had it working yesterday but for some reason now to get it started he just wants to grab the task and stand there.....All i did for the selo's lines was delete them all and do /cast #
Anyone have a better way of me doing it? just want to use SSoT for the macro
 
This has become my new favorite macro, gone from 70-75 , made over 50kpp (spell money). Never was able to get the song of travel to work, so to by pass the lack of levi i just turned on waterwalk and envirofall2.....works like a charm.
 
hey used this a ton worked wonderfully till last patch now when it gets to reward window it wont select reward. tryed re-adding mq2reward and re-saving mac from here. even after re-loading it still wont accept reward. doesnt say or give any message just stays at pete with reward window up. any guess what i can do to fix it?

thanx for help works great now :D
 
Last edited:
liquidtoon said:
hey used this a ton worked wonderfully till last patch now when it gets to reward window it wont select reward. tryed re-adding mq2reward and re-saving mac from here. even after re-loading it still wont accept reward. doesnt say or give any message just stays at pete with reward window up. any guess what i can do to fix it?

I had a similar problem with running the Mapping Suncrest task. The only resolution I came up with was a work around. After the /reward command in the macro (prolly in the .INC module), I added two more lines -- /delay 2s and another /reward command. If the first /reward doesn't take, the second one does.

With this tweak in place, I've been running fully automated for as long as I want.
 
Warrene said:
I had a similar problem with running the Mapping Suncrest task. The only resolution I came up with was a work around. After the /reward command in the macro (prolly in the .INC module), I added two more lines -- /delay 2s and another /reward command. If the first /reward doesn't take, the second one does.

With this tweak in place, I've been running fully automated for as long as I want.

...forgot to mention I commented out the code block that checks to see if the reward window is open. Essentially, the portion of the code that handles the reward consists of:

/delay 2s
/reward ${option}
/delay 2s
/reward ${option}

Not elegant, but the "/if window not open" logic was simply hanging. Don't know why, but the above change has been working flawlessly for me.
 
I have tried the above things, and it's now working properly for the most part. However, it still tries to select reward 1 and will stop the mac because that reward is lore and i have it. is there any other way to get it to select reward 4 other than the way mentioned at the beginning?
 
First I would like to say thank you, my bard has made nearly 400aa using this and works flawlessly.
Second I sux at writing macros but have tweeked this a bit to work for my rog. though it has a few glittches. i was wondering if it would be ok to pm some one to look at it to make it a bit better or post it if oortcloud was ok with it.
 
unfortunately i think this may qualify as nerfed....i just completed a run through and now the task is no longer available :mad:
so im thinking its no longer a repeater quest
 
Exp Macro (Scouting Maiden's Grave)
Status
Not open for further replies.

Users who are viewing this thread

Back
Top