• 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

Bonechips Revised

I'm rewriting the fellowship one at the moment to do just that, lol. It won't check or destroy the campfire for about 5 1/2 hours. This way you can play you other two toons until just before that time. It may take me a bit to get it written and tested, I'm not real fast at the writing part.
 
Never thought about playing the campfire placeholders in between the campfire placement. Adjusting macro now ;-)

I just copied the campfire code as its own macro under Sub Main. Then I created a loop (/for x 1 to 20 at top and /next x at bottom). before the /for was a /delay of 9000s (2.5 hours or so). 18000 seconds is 5 hours and 20000 seconds will be around 5.5 hours.

If you plan to play your campfire toons in the mean time, then be sure to put in /echo reminders before the destroy is supposed to happen.

For a 6 hour cycle I will put this in the macro for the one toon dropping the campfire.

Sub Main
/declare x int local

/for x 1 to 20

/windowstate FellowshipWnd open
...
...
...
/windowstate FellowshipWnd close
/if (${Me.Fellowship.Campfire}) /echo Campfire Dropped

/delay 19799s (note: I made this 18199 to give it plenty of padded time)
/echo Campfire refresh in 30 mins
/delay 1s
/echo Campfire refresh in 30 mins
/delay 1199
/echo Campfire refresh in 10 mins
/delay 1s
/echo Campfire refresh in 10 mins
/delay 299
/echo Campfire refresh in 5 mins
/delay 1s
/echo Campfire refresh in 5 mins
/delay 239
/echo Campfire refresh in 1 min!
/delay 1s
/echo Campfire refresh in 1 minute, get over there now!

/next x

/return
 
Thank you. I'm not all concerned with my campfire getting recreated after 5.5 to 6 hours. I don't like the risk of getting caught so I monitor my character every 15 to 30 minutes to make sure he didn't get stuck or a GM has sent him a tell. I just like the rest of the process.
 
Here is my update to the Fellowship version of AutoBones. It checks the ticks left on the Campfire on each pass, but doesn't destroy and renew it until it gets below the number you set. It Gates while standing next to Marie, a lot less running around. I tested it several times last night.



Rich (BB code):
|AutoBones-Fellowship3A.mac

| tradin.mac, by amml
| modified by tms
| full automation added by fuzzymelon
| Buy function courtesy of RedGuides.com
| New movement and EmptyBags routines by Randyleo


Sub Main

| *** Change TicksLeft to the number of ticks left when you want to renew the Campfire (300 equals 30 minutes)

	/declare TicksRemaining int outer TicksLeft

| *** Change Friend to the of the Fellowship member you want to target

|	/declare fellow string outer Friend
	
| *** Increase the destroydelay ONE by ONE until every item on your cursor gets destroyed. ***

	/declare destroydelay int local 0
	
| *** Change Transport to spell/potion/AA you plan to use to get back to Bind.
| **** Quotation marks are required!

	/declare BackToBind string outer "Transport"
	
| **** Change the #s to the corresponding numbers in the loc.
| **** You can use whole numbers or the ones with decimals.
| **** This way we don't all have the same turn point.
| If setting Campfire at Port In area uncomment the following lines.

|	/declare GunlokTurnY outer 1326
|	/declare GunlokTurnX outer 135
|	
|	/declare BrellsturnY outer ####
|	/declare BrellsturnX outer ####

| -------------------------------------------------------------------------------------
| Check if required plugins are loaded		Stolen from KissAssist
| -------------------------------------------------------------------------------------
    /echo Checking Plugins
	/call CheckPlugin MQ2Cast
    /call CheckPlugin MQ2Moveutils
	
   
	/echo Starting
	| Port to Bind if macro not started in North Kaladim, Character must be bound in Gunlok's room!!!
	/if (${Zone.ShortName.NotEqual[KaladimB]}) /call Bind
	:MainLoop
		/delay 5s
		/call MoveToGunlok
			/delay 5s
		/call GiveChips
		/call EmptyBags
		/call Done
		/call PortToCampFire
		/call CheckCampfire
		/call Marie
		/call BackToKaladim
		
		/goto :MainLoop
	
/return	


| ----------------------------------------------------------------------------
| SUB: Check Plugin		Stolen from KissAssist
| ----------------------------------------------------------------------------
    Sub CheckPlugin(string pluginname)
	
        /if (!${Bool[${Plugin[${pluginname}]}]}) {
            /squelch /plugin ${pluginname}
            /echo ${pluginname} not detected! This macro requires it! Loading ...
        }
        
    /return
| ----------------------------------------------------------------------------
| SUB: MoveToGunlok
| ----------------------------------------------------------------------------

	Sub MoveToGunlok

	/squelch /target clear
	
		/delay 2s
	/moveto loc 1326 135
|/moveto loc ${GunlokTurnY} ${GunlokTurnX}	
	:recheck

			/delay 5
	/if (${Me.Moving}) {
		/delay 5
	/goto :recheck
    } else {
		/delay 5
	}
	/target "Gunlok Jure"
		/delay 2
    /if (${Target.Distance}>15) /moveto id
        /delay 150 ${MoveTo.Stopped}		
	/face fast
	/if (${Target.Type.Equal[npc]}) {
	    /if (${Me.Grouped}) {
	        /echo You are grouped - Disbanding
	        /keypress ctrl+d
	}
	
		/echo Opening Bags
		/keypress OPEN_INV_BAGS
		/delay 5
	
/return

| ----------------------------------------------------------------------------
| SUB: GiveChips
| ----------------------------------------------------------------------------

Sub GiveChips
	/declare chips int local
	/echo Handing in Chips.

	:Loop
		
	/if (!${FindItem[=Bone Chips].InvSlot}) {
	  /echo backpacks empty go get more stuff
	  /call EmptyBags
	}
	
	/if (!${FindItem[=Bone Chips].InvSlot}) /return
	
	
	/for chips 0 to 3
	/squelch /shift /itemnotify ${FindItem[=Bone Chips].InvSlot} leftmouseup
	/delay 5
		/click left target
		/click left target
			/delay 5
	/next chips
		/delay 8
	/notify GiveWnd GVW_Give_Button leftmouseup
	/delay 8
		|/echo Clearing Cursor
	:cursorclear
	/if (${Cursor.ID} && ${Cursor.ID} != 13073) {
	    /destroy
	    /delay ${destroydelay}
	    /goto :cursorclear
	}
	
	/if (!${FindItem[=Bone Chips].InvSlot}) /call EmptyBags
		/goto :Loop
/return

| ----------------------------------------------------------------------------
| SUB: CursorClear
| ----------------------------------------------------------------------------

Sub CursorClear
	:cursorclear
	/if (${Cursor.ID} && ${Cursor.ID} != 13073) {
	    /destroy
	    /delay ${destroydelay}
	    /goto :cursorclear
	}
	
/return

| ----------------------------------------------------------------------------
| SUB: EmptyBags
| ----------------------------------------------------------------------------	
	
Sub EmptyBags
	|/echo Clearing up your bags, this will take a moment.
	
	/declare done int local 0
	/declare destroydelay int local 1
	
	:cursorclear
	/if (${Cursor.ID} && ${Cursor.ID} != 13073) {
	    /destroy
	    /delay ${destroydelay}
	    /goto :cursorclear
	}
	/if (!${done}) { 
	    /varset done 1
	    /goto :cursorclear
	}
	/delay 8
	/declare i int local
	/declare Junk[12] string local 
	/declare DestArraySize int local 
	/varset Junk[1] "Rusty Axe" 
	/varset Junk[2] "Rusty Broad Sword" 
	/varset Junk[3] "Rusty Mace" 
	/varset Junk[4] "Rusty Short Sword" 
	/varset Junk[5] "Rusty Two Handed Sword" 
	/varset Junk[6] "Small Lantern" 
	/varset Junk[7] "Small Tattered Gloves" 
	/varset Junk[8] "Torch" 
	/varset Junk[9] "Small Patchwork Tunic" 
	/varset Junk[10] "Small Tattered Skullcap" 
	/varset Junk[11] "Small Patchwork Sleeves" 
	/varset Junk[12] "Small Patchwork Pants" 
	/varset DestArraySize 12 
   
   /for i 1 to 12
    /while (${FindItem[${Junk[${i}]}].InvSlot}) { 
		/nomodkey /itemnotify ${FindItem[${Junk[${i}]}].InvSlot} leftmouseup
	    /delay 1
	    /if (${Cursor.ID} && ${Cursor.ID} != 13073) /destroy
	    /delay ${destroydelay}
         }
		/next i
		/echo Closing Bags
	/keypress CLOSE_INV_BAGS
	/delay 2s
	/autoinventory
/return

| ----------------------------------------------------------------------------
| SUB: Done
| ----------------------------------------------------------------------------	

Sub Done
	/delay 8 
	/notify GiveWnd GVW_Give_Button leftmouseup
		/delay 8
	/echo Closing Bags
	/keypress CLOSE_INV_BAGS
	/echo Done .. Have fun.. 
		/delay 5s
/return

|-----------------------------------------------------------------------------
| SUB: Check Campfire
|-----------------------------------------------------------------------------

Sub CheckCampfire

	/if (${Me.Fellowship.CampfireDuration} <=${TicksRemaining}) /call Renew_Campfire
	/if (${Me.Fellowship.CampfireDuration} >=${TicksRemaining}) {
	/bc Campfire has ${Me.Fellowship.CampfireDuration.TimeHMS} left.
	}
	/delay 5
	/return
/return

| ----------------------------------------------------------------------------
| SUB: Marie
| ----------------------------------------------------------------------------
	Sub Marie
	    /autoinventory
		/squelch /target clear
	    /target "Marie Fay"
	    		    /delay 5s
	    /call MoveToMarie
	        /delay 5s
        /call npc "Marie Fay"
	    /call BuyChips
			/delay 3s
/return	

| ----------------------------------------------------------------------------
| SUB: NPC(NPCName)
| ----------------------------------------------------------------------------

	Sub NPC(NPCName)

    |/target npc ${NPCName}
    |/delay 1s
    |/if (!${Select[${Target.Type},npc,pet]} || !${Target.ID} || ${Target.Type.Equal[pet]} && 

|!${Target.CleanName.Find[familiar]}) {
|        /echo Please target a vendor or guildbanker
|        /return
|    }
    /echo Doing business with ${NPCName}
    /target id ${Spawn[${NPCName}].ID}
    /delay 3s ${Target.ID}==${Spawn[${NPCName}].ID}
    /if (${Target.Distance}>15) {
        /moveto id  ${Spawn[${NPCName}].ID}
        /delay 250 ${MoveTo.Stopped}
    }
    /face nolook
    /delay 1s
	/echo Opening Bags
	/keypress OPEN_INV_BAGS
		/delay 2s			
    /echo Opening merchant/guildbank window
    /nomodkey /click right target
    /echo Waiting 5s for merchant/guildbank window to populate
    /delay 5s
	/return
/return

| ----------------------------------------------------------------------------
| SUB: BuyChips		Written by EqMule
| ----------------------------------------------------------------------------

	Sub BuyChips
| This is to adjust number of free lots to be left open while buying Bone Chips.
| I suggest leaving a couple of slots open in case of severe lag.

	/declare FreeSlots int local 3

        /notify MerchantWnd ItemList listselect ${Window[MerchantWnd].Child[ItemList].List[=Bone Chips,2]}
	/delay 2s
	:goagain
	/if (${Me.FreeInventory}>${FreeSlots}) {
		/Shiftkey /notify merchantwnd MW_Buy_Button leftmouseup
	:waitforit
		/if (${Window[MerchantWnd].Child[MW_Buy_Button].Enabled}==FALSE) {
			/echo button is false
			/delay 2
			/goto :waitforit
		}
		/goto :goagain
	}
		/echo Closing Bags
	/keypress CLOSE_INV_BAGS
	/delay 2s
/return

| ----------------------------------------------------------------------------
| SUB: MoveToMarie
| ----------------------------------------------------------------------------

	Sub MoveToMarie
	/if (!${Zone.ShortName.Equal[brellsrest]}) /itemnotify ${FindItem[Fellowship Registration Insignia].InvSlot} rightmouseup
		/delay 20s
		/echo Moving to Marie
|	 If setting Campfire at Port In area uncomment the following lines.
		
        /moveto mdist 10                
|       	moveto loc ${BrellsturnY} ${BrellsturnX}
| :StillMoving 
|				{
|				/delay 10
|                    /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
|                    /delay 20 !${Me.Moving}
|                }
|	    
	    /target "Marie Fay"
		/if (${Target.Distance}>15) /moveto id
        		/delay 150 ${MoveTo.Stopped}
/return

| ----------------------------------------------------------------------------
| SUB: PortToCampFire
| ----------------------------------------------------------------------------

Sub PortToCampFire
	/echo Off to Brell's Rest
	:port
	    /squelch /target clear
		 /delay 15
	/if (${Cast.Ready[Fellowship Registration Insignia]}) {
        /itemnotify ${FindItem[Fellowship Registration Insignia].InvSlot} rightmouseup
			/delay 30s
		/return
	    } else {
	    	/echo Insignia NOT Ready!!!, Trying again in 60 seconds.
		/delay 60s
       		/goto :port         
	    }
/return

| ----------------------------------------------------------------------------
| SUB: BackToKaladim
| ----------------------------------------------------------------------------

	Sub	BackToKaladim
    /squelch /target clear
	/if (${Merchant.Open}) {
               /notify MerchantWnd MW_Done_Button leftmouseup
               /delay 1s !${Merchant.Open}
	 }      
		   /delay 5s

		:again
		/echo Back To Kaladim
		/casting ${BackToBind} -maxtries|5
			/delay 25s
		/if (!${Zone.ShortName.Equal[KaladimB]}) {
		/echo Trying again
			/goto :again
		} else {
		/return
	}
	    
/return


| ----------------------------------------------------------------------------
| SUB: Campfire Section -  OriginalCode from toomanynames, wizbomb - slight mods by fuzzymelon
| ----------------------------------------------------------------------------

Sub Renew_Campfire
    /windowstate FellowshipWnd open
    /delay 5
    /nomodkey /notify FellowshipWnd FP_Subwindows tabselect 2
    /if (${Me.Fellowship.Campfire}) {
	/echo Destroying campfire
        /nomodkey /notify FellowshipWnd FP_DestroyCampsite leftmouseup
        /delay 5s ${Window[ConfirmationDialogBox].Open}
        /if (${Window[ConfirmationDialogBox].Open}) {
            /nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
        }
        /delay 5s !${Me.Fellowship.Campfire}
    }
    /delay 1s
    /nomodkey /notify FellowshipWnd FP_RefreshList leftmouseup
    /delay 1s        
    /nomodkey /notify FellowshipWnd FP_CampsiteKitList listselect 1
    /delay 1s
    /nomodkey /notify FellowshipWnd FP_CreateCampsite leftmouseup
    /delay 5s ${Me.Fellowship.Campfire}
    /windowstate FellowshipWnd close
    /if (${Me.Fellowship.Campfire}) /echo Campfire Dropped
/return
 
Last edited:
Left it on all night, woke up to a new Call of the Hero bot. No bugs, no crashes, just pure leveling with the caster version. Thanks Randyleo!
 

Attachments

  • bonechip.png
    bonechip.png
    148.3 KB · Views: 349
Last day of exp boost. Did anyone mention if that speeds of bonechips? If so, I need to rush home from work and get me a new bot!

Nice log redbot, Almost exactly 8 hours for 70 levels
 
It should speed it up a lot, lol. I was getting the first 35 levels on the first pass. It slows down a lot after level 50.
 
Anyone having issues with new advloot popping up and not joining group? Have it turned off on both toons
 
Anyway around that? Would like to get merc AA

Quick and dirty fix until I figure out a way to click the advloot popup:

This line will summon / unsummon your merc:

Rich (BB code):
/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp

Toss that line in directly underneath,

Rich (BB code):
Sub PortToBrellsRest

and

Rich (BB code):
/echo Handing in Chips.


Untested, let me know if it works. You may need to add a /delay if buying bonechips < 5 minutes.

edit: Ignore this post, better version posted here.
 
Last edited:
possible fix but not quite right... on the right track unfortunately i dont know enough to offer any imput

May be the /delay, buying chips takes maybe a minute
 
Last edited:
This quest hardly works with a merc, soon as you are grouped the XP is almost nothing.
 
No you have to do the "exploit" to get good merc aa. Pop the merc at lvl 20 when you start getting merc aa and then don't let yourself get past level 25ish. Then delevel yourself, and repeat process. But in all honesty, even at max merc aa, the gain is very nominal. But if you're that OCD, this is one of he best methods to get merc aa since it's a lot harder to get later on.

Remember you need cotf to get merc aa
 
No you have to do the "exploit" to get good merc aa. Pop the merc at lvl 20 when you start getting merc aa and then don't let yourself get past level 25ish. Then delevel yourself, and repeat process. But in all honesty, even at max merc aa, the gain is very nominal. But if you're that OCD, this is one of he best methods to get merc aa since it's a lot harder to get later on.

Razkle's good old exploit :)

http://www.redguides.com/community/showthread.php/30118-Merc-exp-exploit
 
Last edited:
Bonechips Revised (Mercenary Edition w/ porter)

  • This fixes the issue with mercs due to the advloot window appearing upon grouping.
  • Will summon your merc before handing in, and unsummon your merc during bag cleanup. Merc XP is excellent for low lvls :)
  • This is a dirty fix until we can accept the advloot window.
  • advloot should be disabled on both chars
  • Start the macro with or without your merc summoned, includes foolproof checks.
 

Attachments

i edited randyleo's 3/12/15 version to allow for alternate purchase vendors as well as turn in npcs just had to remove the remove to Maria and replace some names.
 
I was having problems with this script and had isolated it to the /moveto command. My toon was stopping too soon when moving to Gunlok, around the 48ish range rather than 15ish, so I was unable to interact with Gunlok. I found the fix when browsing through the MQ2MoveUtils library. The command "/moveto dist 15" reset my arrival distance to the 15 range and then all was right with the bones macro. I must have run another script in the past which changed my arrival distance. Per the library, it's a permanent change.

http://www.redguides.com/docs/projects/mq2moveutils/


Just add this line to the beginning of your bones script.

Rich (BB code):
/moveto dist 15
 
Update!!!

Updated Autobones just in time for more extra EXP. Much faster Turnin and CleanInventory routines, and Merc support.

Rich (BB code):
|AutobonesV3.mac
|TurnIn, ClearCursor, SafeTarget, Events, CleanInventory and BuyChips routines by EqMule
|Merc support written by Redbot
|CheckPlugin written by Maskoi
|Movement routines written by Randyleo

#turbo 120
#Event TSCursor "#*#because only tradeskill items may go in a tradeskill bag.#*#"
#Event NullSlot  "#*#Invalid item slot 'null#*#"

Sub Main
| *** Change Taxi to Porter's name ***
	/declare Porter string outer Taxi
	/declare GunlokTurnY outer 1322
	/declare GunlokTurnX outer 135
	/declare BrellsturnY outer -618
	/declare BrellsturnX outer 90
| **** Change Group_Port_to_Brells's_Rest to the correct spell.
| **** Quotation marks are required!
| **** Wizard Brell's Rest Portal
| **** Druid Circle of Brell's Rest
	/declare BrellsSpell string outer "Group_Port_to_Brells's_Rest"
| **** Change #### to correct AA number. Wizard 456 Druid 7009
	/declare PortToBind int outer ####
	
	/declare ItemToHandIn       string  outer Bone Chips
	/declare TurnInTarget       string  outer  Gunlok
	/declare NullExit           int     outer 0
| -------------------------------------------------------------------------------------
| Check if required plugins are loaded		Stolen from KissAssist
| -------------------------------------------------------------------------------------
    /echo Checking Plugins
	/call CheckPlugin MQ2Cast
    	/call CheckPlugin MQ2Moveutils
	/call CheckPlugin MQ2EQBC
	/call CheckPlugin MQ2Autoaccept
	/autoaccept add ${Porter}
   
	/echo Starting   
	:mainloop
   /if (${Zone.ID}==67) {
	  /call MoveToGunlok
		/delay 5
      :KaladimLoop
      /call SafeTarget ${TurnInTarget}
      /call ClearCursor
      /call TurnIn
      /call ClearCursor
      /if (${FindItemCount[${ItemToHandIn}]}>0) {
         /goto :KaladimLoop
      } else {
         /call ClearCursor
         /call CleanInventory
		 /call PortToBrellsRest
		 /call Marie
		 /call MoveToPorter
		 /call Bind
		 /goto :mainloop
      }
   }
/return
| ---------------------------------------------------------------
| Sub: ClearCursor
| ---------------------------------------------------------------
Sub ClearCursor
   :redestroy
   /if (${Cursor.ID} && ${Cursor.NoDrop}==FALSE) {
      /destroy
      /delay 0 ${Bool[${Cursor.ID}]}==FALSE
      /goto :redestroy
   }
/return
| --------------------------------------------------------------
| Sub: SafeTarget
| --------------------------------------------------------------
Sub SafeTarget(string targ)
   /declare targid int local 0
   :retarget
   /if (${Target.ID} && ${Target.ID}==${Spawn[${targ}].ID}) /return
   /if (${Spawn[${targ}].ID}) {
      /varset targid ${Spawn[${targ}].ID}
      /if (${Spawn[${targ}].Distance}<100) {
         /echo Targeting ${Spawn[${targ}]}
         /target id ${targid}
         /delay 30 ${Target.ID}==${targid}
      }
   }
   /if (!${Target.ID}) {
      /echo [SafeTarget] couldnt find a target, retrying
      /delay 1s
      /goto :retarget
   }
/return
| ---------------------------------------------------------------
| Sub: TurnIn
| ---------------------------------------------------------------
Sub TurnIn
   /declare bonetimer timer local 0
   /declare i int local
   	/if (${Mercenary.State.Equal[SUSPENDED]}) {
		/echo summoning mercenary
			/if (!${Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled}) {
			/echo waiting 5 minutes for button to enable
			/delay 5m 
			}
		/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
	}
   /for i 0 to 3
      :GetBoneChips
      /if (${FindItemCount[${ItemToHandIn}]}>0) {   
         /itemnotify "${ItemToHandIn}" leftmouseup
         /delay 1 ${Cursor.ID}==13073
         :retrygive
         /if (${Cursor.ID}==13073) {
            /click left target
            /delay 1 ${Window[GiveWnd].Child[GVW_MyItemSlot${i}].Tooltip.NotEqual[${ItemToHandIn}]}==FALSE
            /if (${Cursor.ID} && ${Cursor.ID}==13073) {
               /goto :retrygive
            }
         } else {
            /goto :GetBoneChips
         }
      }
   /next i
   /if (${Window[GiveWnd].Open}) {
      /notify GiveWnd GVW_Give_Button leftmouseup
      /delay 200 !${Window[GiveWnd].Open}
   }
/return

| --------------------------------------------------------------------------
| Sub: Event_TSCursor
| --------------------------------------------------------------------------
Sub Event_TSCursor
   /declare ItemToDestroy string local Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Tattered Skullcap|Small Patchwork Pants|Rusty Axe|Rusty Broad Sword|Rusty Mace|Rusty Short Sword|Rusty Two Handed Sword|Small Lantern|Torch
   /declare i  int local
   /for i 1 to 12
      :retryclearTSCursor
      /if (${Cursor.Name.Equal[${ItemToDestroy.Arg[${i},|]}]}) {
         /echo ${ItemToDestroy.Arg[${i},|]} on cursor. Destroying!
         /destroy
         |might need this:/delay 1
         /goto :retryclearTSCursor
      }
   /next i
   /doevents
/return

| ----------------------------------------------------------------------------
| Sub: Event_NullSlot
| ----------------------------------------------------------------------------
Sub Event_NullSlot
   /varset NullExit 1
   /echo Opening all bags to correct null slot
   /keypress OPEN_INV_BAGS
   /timed 100 /keypress CLOSE_INV_BAGS
/return

| ----------------------------------------------------------------------------
| SUB: CleanInventory
| ----------------------------------------------------------------------------   
   
Sub CleanInventory
    /if (${Mercenary.State.Equal[ACTIVE]}) {
		/echo suspending mercenary
		/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
	}
   /echo Clearing up your bags, this will take a moment.
   /declare StuffToDestroy string local Rusty Broad Sword|Torch|Rusty Short Sword|Rusty Mace|Rusty Two Handed Sword|Rusty Axe|Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Lantern|Small Tattered Skullcap|Small Patchwork Pants
   /declare i  int local
   /for i 1 to 12
      /echo ${StuffToDestroy.Arg[${i},|]} ${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}
      /if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) {
         :MoreToDestroy
         /doevents
         /itemnotify "${StuffToDestroy.Arg[${i},|]}" leftmouseup
         /delay 10 ${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}
         /if (${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}) {
            /destroy
            /delay 10 ${Bool[${Cursor.ID}]}==FALSE
         }
         /if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) {
            /goto :MoreToDestroy     
         }
      }
   /next i
   /squelch /target clear
/return
| ----------------------------------------------------------------------------
| SUB: Check Plugin		Stolen from KissAssist
| ----------------------------------------------------------------------------
    Sub CheckPlugin(string pluginname)
	
        /if (!${Bool[${Plugin[${pluginname}]}]}) {
            /squelch /plugin ${pluginname}
            /echo ${pluginname} not detected! This macro requires it! Loading ...
        }
    /return
| ----------------------------------------------------------------------------
| SUB: MoveToGunlok
| ----------------------------------------------------------------------------

	Sub MoveToGunlok
	/delay 2s
	/squelch /target clear
		/moveto mdist 10                
        /moveto loc   ${GunlokTurnY} ${GunlokTurnX}
	/target "Gunlok Jure"
	
     :StillMoving 
				{
				/delay 1
                    /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
                    /delay 0 !${Me.Moving}
                } else {
			/delay 5
			}
			
			/if (${Target.Distance}>15) /moveto id
				/delay 0 ${MoveTo.Stopped}
		/face fast
	/if (${Target.Type.Equal[npc]}) {
	    /if (${Me.Grouped}) {
	        /echo You are grouped - Disbanding
	        /disband
	
	}
|	/keypress OPEN_INV_BAGS
|	/delay 5
|	}
/return
| ----------------------------------------------------------------------------
| SUB: PortToBrellsRest
| ----------------------------------------------------------------------------

Sub PortToBrellsRest

		/squelch /target clear
        	/delay 5s
	    /target ${Porter}
	    /if (${Target.Type.Equal[pc]}) {
	        /bct ${Porter} //invite ${Me.Name}
	        /delay 5s
	        /moveto loc   ${GunlokTurnY} ${GunlokTurnX}
	     :StillMoving 
				{
				/delay 1
                    /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
                    /delay 0 !${Me.Moving}
                } else {
			/delay 5
			}
	/moveto id
		/delay 5s
	:oncemore
	/echo Porting!
	/bct ${Porter} //cast ${BrellsSpell} -maxtries|5
		/delay 15s
	/if (${Zone.ShortName.NotEqual[brellsrest]}) {
	/echo Casting Brell's Rest Gate again
   	/goto :oncemore
	} else {
	/return
	}
/return	   
| ----------------------------------------------------------------------------
| SUB: Marie
| ----------------------------------------------------------------------------

	Sub Marie
    /delay 5
    /call MoveToMarie
       /face fast
    /call npc "Marie Fay"
    /call BuyChips
		/delay 3s
/return	
| ----------------------------------------------------------------------------
| SUB: Bind
| ----------------------------------------------------------------------------

	Sub	Bind
    /squelch /target clear
	/if (${Merchant.Open}) {
               /notify MerchantWnd MW_Done_Button leftmouseup
               /delay 1s !${Merchant.Open}
	 }      
		   /delay 5s
	:again
	/bct ${Porter} //alt activate ${PortToBind} -maxtries|5
		/delay 15s
	/if (!${Zone.ShortName.Equal[KaladimB]}) {
	/echo casting Gate again
		/goto :again
	} else {
		/return
	}
/return
| ----------------------------------------------------------------------------
| SUB: NPC(NPCName)
| ----------------------------------------------------------------------------

	Sub NPC(NPCName)
|/declare NPCName "Marie Fay" local
    /target npc ${NPCName}
    /delay 1s
    /if (!${Select[${Target.Type},npc,pet]} || !${Target.ID} || ${Target.Type.Equal[pet]} && !${Target.CleanName.Find[familiar]}) {
       /echo Please target a vendor or guildbanker
   }
    /echo Doing business with ${NPCName}
    /target id ${Spawn[${NPCName}].ID}
    /delay 3s ${Target.ID}==${Spawn[${NPCName}].ID}
    /if (${Target.Distance}>15) {
        /moveto id  ${Spawn[${NPCName}].ID}
        /delay 250 ${MoveTo.Stopped}
    }
    /face nolook
    /delay 1s
|	/echo Opening Bags
|	/keypress OPEN_INV_BAGS
|		/delay 2s			
    /echo Opening merchant/guildbank window
    /nomodkey /click right target
    /echo Waiting 5s for merchant/guildbank window to populate
    /delay 5s
	/return
/return

| ----------------------------------------------------------------------------
| SUB: BuyChips		Written by EqMule
| ----------------------------------------------------------------------------

	Sub BuyChips

| This is to adjust number of free lots to be left open while buying Bone Chips.
| I suggest leaving a couple of slots open in case of severe lag.

	/declare FreeSlots int local 3

        /notify MerchantWnd ItemList listselect ${Window[MerchantWnd].Child[ItemList].List[=Bone Chips,2]}
	/delay 2s
	:goagain
	/if (${Me.FreeInventory}>${FreeSlots}) {
		/Shiftkey /notify merchantwnd MW_Buy_Button leftmouseup
	:waitforit
		/if (${Window[MerchantWnd].Child[MW_Buy_Button].Enabled}==FALSE) {
			/echo button is false
			/delay 2
			/goto :waitforit
		}
		/goto :goagain
	}

	/delay 2s
/return

| ----------------------------------------------------------------------------
| SUB: MoveToMarie
| ----------------------------------------------------------------------------

	Sub MoveToMarie
		/squelch /target clear
		/echo Moving to Marie
		
		/moveto mdist 10                
		/moveto loc ${BrellsturnY} ${BrellsturnX}
	:StillMoving 
		{
			/delay 1
        /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
            /delay 0 !${Me.Moving}
        }

	    /target "Marie Fay"
		/if (${Target.Distance}>15) /moveto id
        		/delay 1 ${MoveTo.Stopped}
/return

| ----------------------------------------------------------------------------
| SUB: MoveToPorter
| ----------------------------------------------------------------------------

	Sub MoveToPorter
		/echo Moving to ${Porter}
		 /squelch /target clear
		/if (${Merchant.Open}) {
            /notify MerchantWnd MW_Done_Button leftmouseup
            /delay 1s !${Merchant.Open}
		}      
        /moveto mdist 10                 
        /moveto loc ${BrellsturnY} ${BrellsturnX}
 :StillMoving2 
		{
			/delay 1
        /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving2
             /delay 0 !${Me.Moving}
        }

		/squelch /target ${Porter}
		/if (${Target.Distance}>15) /moveto id
		/delay 10 ${MoveTo.Stopped}

/return
 
Last edited:
I forgot to remove a | character, thus commenting out a line.
Find this and remove the |

Rich (BB code):
|		 /goto :mainloop
 
Ran a test run on a new rogue, level 2 to 66 in 2 hours. Bonus Exp helping a lot, but MUCH faster all around.

- - - Updated - - -

What do you guys think of version 3? Any problems?



Rogue now 50% into level 90. The old lockpick.mac works extremely well, maxed pick lock in under 40 seconds. Also made 158k plat during PL.
 
Last edited:
Played with this a little tonight and man, its a LOT faster. While first getting it going I manually killed the mac once and wound up with the patchwork stuff on my cursor and had to delete it before the Turnin would work. I added a ClearCursor before Turnin and didn't have that problem again after killing and restarting the mac a few times.
 
So discovered this gem on here today, this is great, at level 85 on a heroic druid, I can nab about 51% aa xp per haul, or roughly 1.5% regular xp, figuring 5 minutes / run roughly with zone times, i'm netting 18-20% per hour at 85, or 6 aa's an hour... not bad for logging in when i have to do dishes, grab a shower... etc, are there any other really awesome jewels i have been missing on this stuff? i've really only ever used MQ for cskillup, language skill ups, and map views.
 
I'm glad you like it, lol. I'm going to work on the other versions this weekend to put in the turnin and cleaning bags routines. I probably won't do the fellowship version, as it times out for the insignia being ready correctly. The insignia is on a 15 minute cooldown after use.
 
Another Quick question, how noticable is this macro going to be... as in if a GM logs in will it stop until they log off, or can i get hit with the banstick regardless? curiosity's sake, i don't want to run it over night if it is risky, but i also don't see much point to running it where i'm making now 8% or so an hour, and i can make that running HA's (if i can find a group lol)
 
With the spam it puts out in /say, it would be very noticeable to anyone in that end of the zone. About the only ones that go into that end of the zone is going there to run the macro though, lol. That is why I haven't put a PC check in there, every time I go to run it or test it there is another guy there running it, wizard is always the same too. There is an NPC in East Freeport that does a simliar quest, but it doesn't give as much exp. I can't remember her name at the moment.
 
I leveled prolly 15 toons to 95 with the bone chips on full auto (mosty wiz and druid solo) and never had a problem. when my 100s have "downtime" not grinding I set them there to pull AAs while I do other things...
 
Not sure if anybody wants / needs this, but i changed the
| **** Change #### to correct AA number. Wizard 456 Druid 7009
/declare PortToBind int outer ####

To use 1217 (aa gate all casters get) instead, as it has a much lower recast time, and speeds up your return to Kaladim by about 30-35 seconds, rather than waiting for a refresh
 
I've updated the fellowship autobones macro in the following ways:

  1. The macro now checks for GM or player presence (toggleable in declarations)
  2. I copied Anonymous Hero's AHTools for better (but more volatile) AFK support.
  3. Added functionality to gain merc AA by suiciding into guards when a max level is reached. The process is very slow because the guards path through doors. Also not super useful because you can't store many merc AA at low level--still, I got about 12 merc AA running this macro today.
  4. Added functionality for using translocation from a bot, which in conjunction with the fire thus only requires a level 50 wizard rather than an 85.
  5. Added functionality for using the gate AA, which still fails intermittently so it's not really an improvement.
  6. #5 in the macro documentation says EQBC will coordinate campfire renewals, this isn't a function I've gotten working yet--spent too much time figuring out how to reliably attack guards.
  7. Most importantly, the routines have been updated with Randy's speedier additions, which clocks a round-trip to just about 16 minutes.
  8. Shuffled some commands around to more appropriate places due to the different state machine present when the merc AA routines are activated.

If anyone uses this over the teleport version and finds a bug, let me know. I'd still like to add EQBC functionality for renewing campfires automatically.

Rich (BB code):
| ABFellow.mac
|
| Updated May 29, 2015
|
| tradin.mac, by amml
| modified by tms
| full automation added by fuzzymelon
| Buy function courtesy of RedGuides.com
| Modified EmptyBags routine by Randyleo
| Translocation service added by disasteroid
| Suicide by dwarf added by disasteroid
| Corpse clear added by disasteroid
|
| Usage: /mac abfellow (optional_taxi_name)
|
| Before running this macro, review the following:
|	1)	*** IMPORTANT ***
|		If you turn on MercLvlUp below (default off) your character will repeatedly suicide on the
|		local guards until they hit the level defined by LowLevel (default 105). If you use this
|		feature, it is recommended to set "stickcmd=10" in your servername_toonname.ini file in
|		the MQ2 root--this sets them to loose sticking, which means no re-positioning and faster
|		deleveling.
|		
|		Using this routine generates tons of corpses--by default, the routine is hardcoded to auto-
|		matically decay corpses. Comment this out if you prefer to be super obvious about your
|		botting.
|
|	2)	The character running the macro must have a bind point near Gunlok Jure in North Kaladim 
|		1313, 147, 39 (very north). If you are an evil character, use an AE class to blow up rats in
|		The Warrens for rat whiskers and turn them in to Exterminator Vin while under a goblin shroud.
|		Vin is reachable with invis at the rogue's guild. Founy will not aggro if you hug the wall.
|
|	3)	The character running the macro needs a means of returning to their bind point. For 
|		pre-Gate casters, manually suicide by dwarf. Otherwise, use potions or a translocator
|		bot with "/mac autobonesf translocator_name_here" and park the bot by Marie Fay.
|
|	4)	The character running the macro needs a fellowship fire in Brell's Rest, ideally near 
|		Marie Fay (-671, 99, 43). The camp fire will be re-created with the Campfire_Renew sub
|		below, be sure to check the code for additional options.
|
|	5)	EQBC needs to be running to use a translocate bot or to coordinate camp fire renewals. In
|		the second case, EQBC only needs to run if the fellowship members will also be running this
|		macro. See the Renew_Campfire routine for more information.
|		
|
| Tips:
|	1)	Extraplanar Trade Satchels are 32 slot bags that can carry bone chips. Dumping 32,000 bone
|		chips takes enough time for the fellowship insignia to come off of cooldown. If you're using
|		this to get merc AA it really doesn't matter, suicide is so fucking slow you could use 8 slot
|		backpacks and be OK.
|
|	2)	Don't close your bags while the macro is running.
|
|	3)	The macro runs noticeably faster when EQ is in the foreground.
|
|	4) Keep at least two fellowship members at the turn-in.
|
|
| Protips:
|	1)	The GM check routine does not in any way, shape or form protect you from
|   	getting your account banned. As always, don't leave this macro running 
|		while AFK to minimize risk.
|
|	2)	Anonymous Hero's AFKTools are included in this macro. They can be enabled in the declarations.

#turbo 120
#Event TSCursor "#*#because only tradeskill items may go in a tradeskill bag.#*#"
#Event NullSlot "#*#Invalid item slot 'null#*#"
#Event lang		"tells you"

Sub Main

| *** Change TicksLeft to the number of ticks left when you want to renew the Campfire (300 equals 30 minutes)

	/declare TicksRemaining int outer 300

| *** Increase the destroydelay ONE by ONE until every item on your cursor gets destroyed. ***

	/declare destroydelay int outer 0
	
| *** Change Transport to spell/potion/AA you plan to use to get back to Bind.
| **** Quotation marks are required!

	/declare IRCOn			bool	outer 0
	/declare EQBCOn			bool	outer 0
	/declare ItemToHandIn	string  outer Bone Chips
	/declare TurnInTarget	string  outer Gunlok
	/declare NullExit		int		outer 0
	/declare Translocator	string	outer
	/declare UseTransloc	bool	outer 
	
|	*** This flag needs to be set if you want to keep your character at a low level to grind out
|		Merc AA. See SuicideByGuard routine.
	/declare MercLvlUp		bool	outer 0
	
|	*** These two values set the hysteresis window for dwarf suicide when using the merc AA routine.
|		HighLevel sets the level to start the suicide routine and LowLevel is when to stop.		
	/declare HighLevel		int		outer 25
	/declare LowLevel		int		outer 20

|	AFKGMAction=0 Off, 1 Pause Macro, 2 End Macro, 3 Unload MQ2, 4 Quit Game (choose one)
	/declare AFKToolsOn		bool	outer 0
	/declare AFKGMAction	bool	outer 0	
| -------------------------------------------------------------------------------------
| Check if required plugins are loaded		Stolen from KissAssist
| -------------------------------------------------------------------------------------
	/echo Checking Plugins...
	/call CheckPlugin MQ2Cast
	/call CheckPlugin MQ2MoveUtils
	/call CheckPlugin MQ2AutoAccept
	/call CheckPlugin MQ2Posse
	/call CheckPlugin MQ2EQBC
	/if (${MercLvlUp}) {
		/call CheckPlugin MQ2Melee
		/call CheckPlugin MQ2Rez
		/squelch /rez spawn on
		/squelch /melee melee=on
|		Why not?
		/squelch /melee begging=on
	}
	
	/if (${Defined[Param0]}) {
		/varset Translocator ${Param0}
		/squelch /autoaccept add ${Translocator}
		/squelch /autoaccept translocate on
		/varset UseTransloc TRUE
		/echo Will use TranslocBot ${Translocator} the Great to return to bind point.
	} else {
		/varset Translocator NULL
		/varset UseTransloc FALSE
		/if (${Me.Level}>=5) {
			/if (${Me.AltAbilityReady[Gate]}) {
				/echo Will use Gate (AA) to get to turn-in.
				
			} else /if (${Me.Gem[Gate]}) {
				/echo Will use Gate (spell) to get to turn-in.
				
			} else /if (${FindItem[=Philter of Major Translocation].InvSlot}) {
				/echo Will use Gate (potion) to get to turn-in.
				
			} else {
				/echo No method for returning to bind detected, ending macro.
				/endmacro
			}
		}
	}
	
	| Port to Bind if macro not started in North Kaladim, Character must be bound in Gunlok's room!!!
	
	/if (${Zone.ShortName.NotEqual[KaladimB]}) {
		/echo Attempting to return to North Kaladim...
		/call Bind
	}
	:mainloop
	/if (${Zone.ID}==67) {
		/call MoveToGunlok
		/call PreTurnIn
		/delay 5
		
		:KaladimLoop
		/call SafeTarget ${TurnInTarget}
		/call ClearCursor
		/if (${Me.Level}>=${HighLevel} && ${MercLvlUp}) /call SuicideByGuard
		/call TurnIn
		/call ClearCursor
		/if (${FindItemCount[${ItemToHandIn}]}>0) {
			/goto :KaladimLoop
		} else {
			/call ClearCursor
			/call CleanInventory
			/call PortToCampFire
			/call Marie
			/call Bind
			/goto :mainloop
		}
	}
/return	


| ----------------------------------------------------------------------------
| SUB: Check Plugin		Stolen from KissAssist
| ----------------------------------------------------------------------------

Sub CheckPlugin(string pluginname)

	/if (!${Bool[${Plugin[${pluginname}]}]}) {
		/squelch /plugin ${pluginname}
		/echo ${pluginname} not detected! This macro requires it! Loading ...
	}
	
	/if (${String[${pluginname}].Equal[MQ2EQBC]}) /varset EQBCOn 1
	
/return


| ----------------------------------------------------------------------------
| SUB: CheckGM
| ----------------------------------------------------------------------------

Sub CheckGM
	/declare GMPCEchoed	bool local 0
	
	/doevents
	/if (!${AFKToolsOn}) {
		/squelch /posse load
		:GMCheck 
		/if (${Bool[${Spawn[gm].ID}]}) { 
			/if (!${GMPCEchoed}) {
				/echo A GM or Guide has been detected in the zone, pausing macro until zone is clear.
				/varset GMPCEchoed 1
			}
			/delay 600s 
			/goto :GMCheck 
		}
		
		:PCCheck 
		/if (${Posse.Strangers}>=1) { 
			/if (!${GMPCEchoed}) {
				/echo Another player is nearby, pausing macro until they leave.
				/varset GMPCEchoed 1
			}
			/delay 60s 
			/goto :PCCheck 
		}
	}
	/varset GMPCEchoed 0
/return 


| --------------------------------------------------------------
| Sub: SafeTarget
| --------------------------------------------------------------
Sub SafeTarget(string targ)
   /declare targid int local 0
   :retarget
   /if (${Target.ID} && ${Target.ID}==${Spawn[${targ}].ID}) /return
   /if (${Spawn[${targ}].ID}) {
	  /varset targid ${Spawn[${targ}].ID}
	  /if (${Spawn[${targ}].Distance}<100) {
		 /echo Targeting ${Spawn[${targ}]}
		 /target id ${targid}
		 /delay 30 ${Target.ID}==${targid}
	  }
   }
   /if (!${Target.ID}) {
	  /echo [SafeTarget] couldn't find a target, retrying.
	  /delay 1s
	  /goto :retarget
   }
/return


| --------------------------------------------------------------
| Sub: PreTurnIn
| --------------------------------------------------------------
Sub PreTurnIn
	/if (${Mercenary.State.Equal[SUSPENDED]}) {
		/echo Summoning merc
			/if (!${Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled}) {
			/echo waiting 5 minutes for button to enable
			/delay 5m 
			}
		/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
	}

	/if (${Target.Type.Equal[npc]}) {
		/if (${Me.Grouped}) {
			/echo Disbanding group for mad XPs.
			/disband
	}

	/echo Opening Bags
	/keypress OPEN_INV_BAGS
	/delay 5
/return
	

| ---------------------------------------------------------------
| Sub: TurnIn
| ---------------------------------------------------------------
Sub TurnIn
	/declare bonetimer timer local 0
	/declare i int local

	/doevents
	/call CheckGM
	/for i 0 to 3
		:GetBoneChips
		/if (${FindItemCount[${ItemToHandIn}]}>0) {   
		/itemnotify "${ItemToHandIn}" leftmouseup
		/delay 1 ${Cursor.ID}==13073
		:retrygive
		/if (${Cursor.ID}==13073) {
			/click left target
			/delay 1 ${Window[GiveWnd].Child[GVW_MyItemSlot${i}].Tooltip.NotEqual[${ItemToHandIn}]}==FALSE
			/if (${Cursor.ID} && ${Cursor.ID}==13073) {
				/goto :retrygive
			}
		} else {
			/goto :GetBoneChips
		}
	}
	
	/next i
	/if (${Window[GiveWnd].Open}) {
		/notify GiveWnd GVW_Give_Button leftmouseup
		/delay 200 !${Window[GiveWnd].Open}
   }
/return


| ----------------------------------------------------------------------------
| SUB: MoveToGunlok
| ----------------------------------------------------------------------------

Sub MoveToGunlok

	/squelch /target clear
	/target "Gunlok Jure"
		/delay 2s
	
	:recheck
	/moveto loc 1315.70 138.35
			/delay 5
	/if (${Me.Moving}) {
		/delay 5
	/goto :recheck
	} else {
		/delay 1
	}
		
	/if (${Target.Distance}>15) /moveto id
		/delay 150 ${MoveTo.Stopped}		
	/face fast
	
/return


| ----------------------------------------------------------------------------
| SUB: ClearCursor
| ----------------------------------------------------------------------------

Sub ClearCursor
   :redestroy
   /if (${Cursor.ID} && ${Cursor.NoDrop}==FALSE) {
	  /destroy
	  /delay 0 ${Bool[${Cursor.ID}]}==FALSE
	  /goto :redestroy
   }
/return


| ----------------------------------------------------------------------------
| SUB: CleanInventory
| ----------------------------------------------------------------------------	
	
Sub CleanInventory
|	/if (${Mercenary.State.Equal[ACTIVE]}) {
|		/echo suspending mercenary
|		/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
|	}
   /echo Clearing up your bags, this will take a moment.
   /declare StuffToDestroy string local Rusty Broad Sword|Torch|Rusty Short Sword|Rusty Mace|Rusty Two Handed Sword|Rusty Axe|Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Lantern|Small Tattered Skullcap|Small Patchwork Pants
   /declare i  int local
   /for i 1 to 12
	  /echo ${StuffToDestroy.Arg[${i},|]} ${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}
	  /if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) {
		 :MoreToDestroy
		 /doevents
		 /itemnotify "${StuffToDestroy.Arg[${i},|]}" leftmouseup
		 /delay 10 ${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}
		 /if (${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}) {
			/destroy
			/delay 10 ${Bool[${Cursor.ID}]}==FALSE
		 }
		 /if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) {
			/goto :MoreToDestroy	 
		 }
	  }
   /next i
   /squelch /target clear

/return


| ----------------------------------------------------------------------------
| SUB: Done
| ----------------------------------------------------------------------------	

Sub Done
	/delay 8 
	/notify GiveWnd GVW_Give_Button leftmouseup
	/delay 8
	/echo Closing Bags
	/keypress CLOSE_INV_BAGS
	/delay 5s
/return

| ----------------------------------------------------------------------------
| SUB: Marie
| ----------------------------------------------------------------------------
Sub Marie
	/squelch /target clear
	/call CheckGM
	/target "Marie Fay"
	/delay 5s
	/call MoveToMarie
	/delay 5s
	/call npc "Marie Fay"
	/call BuyChips
	/delay 3s
/return	


| ----------------------------------------------------------------------------
| SUB: NPC(NPCName)
| ----------------------------------------------------------------------------

Sub NPC(NPCName)

	|/target npc ${NPCName}
	|/delay 1s
	|/if (!${Select[${Target.Type},npc,pet]} || !${Target.ID} || ${Target.Type.Equal[pet]} && 

|!${Target.CleanName.Find[familiar]}) {
|		/echo Please target a vendor or guildbanker
|		/return
|	}
	/echo Doing business with ${NPCName}
	/target id ${Spawn[${NPCName}].ID}
	/delay 3s ${Target.ID}==${Spawn[${NPCName}].ID}
	/if (${Target.Distance}>15) {
		/moveto id  ${Spawn[${NPCName}].ID}
		/delay 250 ${MoveTo.Stopped}
	}
	/face nolook
	/delay 1s
	/echo Opening Bags
	/keypress OPEN_INV_BAGS
		/delay 2s			
	/echo Opening merchant/guildbank window
	/nomodkey /click right target
	/echo Waiting 5s for merchant/guildbank window to populate
	/delay 5s
	/return
/return


| ----------------------------------------------------------------------------
| SUB: BuyChips		Written by EqMule
| ----------------------------------------------------------------------------

Sub BuyChips

|	This is to adjust number of free lots to be left open while buying Bone Chips.
|	I suggest leaving a couple of slots open in case of severe lag.

	/declare FreeSlots int local 0

		/notify MerchantWnd ItemList listselect ${Window[MerchantWnd].Child[ItemList].List[=Bone Chips,2]}
	/delay 2s
	:goagain
	/call CheckGM
	/if (${Me.FreeInventory}>${FreeSlots}) {
		/Shiftkey /notify merchantwnd MW_Buy_Button leftmouseup
	:waitforit
		/if (${Window[MerchantWnd].Child[MW_Buy_Button].Enabled}==FALSE) {
			/echo button is false
			/delay 2
			/goto :waitforit
		}
		/goto :goagain
	}

	/delay 2s
/return


| ----------------------------------------------------------------------------
| SUB: MoveToMarie
| ----------------------------------------------------------------------------

Sub MoveToMarie
	/echo Moving to Marie
	| If setting Campfire at Port In area uncomment the following lines.
	
	|/moveto loc -614.09 119.25
	|	/delay 20
	|:recheck	
	|/if (${Me.Moving}) {
	|	/delay 5
	|/goto :recheck
	|} else {
	|/moveto loc -664.26 76.11
	|		/delay 5
	|}
	|	/delay 5s
	/if (${Target.Distance}>15) /moveto id
		/delay 1 ${MoveTo.Stopped}
/return


| ----------------------------------------------------------------------------
| SUB: PortToCampFire
| ----------------------------------------------------------------------------

Sub PortToCampFire
	/echo Off to Brell's Rest!
	:port
		/squelch /target clear
		 /delay 15
	/if (${Cast.Ready[Fellowship Registration Insignia]}) {
		/nomodkey /itemnotify ${FindItem[Fellowship Registration Insignia].InvSlot} rightmouseup
			/delay 30s
		/return
	} else {
		/echo Insignia NOT ready, trying again in 30 seconds.
		/delay 30s
		/goto :port		 
	}
/return


|-----------------------------------------------------------------------------
| SUB: CheckCampfire
|-----------------------------------------------------------------------------

Sub CheckCampfire

	/if (${Me.Fellowship.CampfireDuration} <=${TicksRemaining}) /call Renew_Campfire
	/if (${Me.Fellowship.CampfireDuration} >=${TicksRemaining}) {
	/bc Campfire has ${Me.Fellowship.CampfireDuration.TimeHMS} left.
	}
	/delay 5
	/return
/return


| ----------------------------------------------------------------------------
| SUB: Renew_Campfire -  OriginalCode from toomanynames, wizbomb - slight mods by fuzzymelon
| ----------------------------------------------------------------------------

Sub Renew_Campfire
	/windowstate FellowshipWnd open
	/delay 5
	/nomodkey /notify FellowshipWnd FP_Subwindows tabselect 2
	/if (${Me.Fellowship.Campfire}) {
	/echo Destroying campfire
		/nomodkey /notify FellowshipWnd FP_DestroyCampsite leftmouseup
		/delay 5s ${Window[ConfirmationDialogBox].Open}
		/if (${Window[ConfirmationDialogBox].Open}) {
			/nomodkey /notify ConfirmationDialogBox Yes_Button leftmouseup
		}
		/delay 5s !${Me.Fellowship.Campfire}
	}
	/delay 1s
	/nomodkey /notify FellowshipWnd FP_RefreshList leftmouseup
	/delay 1s		
	/nomodkey /notify FellowshipWnd FP_CampsiteKitList listselect 1
	/delay 1s
	/nomodkey /notify FellowshipWnd FP_CreateCampsite leftmouseup
	/delay 5s ${Me.Fellowship.Campfire}
	/windowstate FellowshipWnd close
	/if (${Me.Fellowship.Campfire}) /bc Campfire Dropped
/return


| ----------------------------------------------------------------------------
| SUB: Bind
| ----------------------------------------------------------------------------

Sub	Bind
	/squelch /target clear
	/if (${Merchant.Open}) {
		/notify MerchantWnd MW_Done_Button leftmouseup
		/delay 1s !${Merchant.Open}
		/delay 5s
	}	   
	:again
		/if (${UseTransloc}) {
			/squelch /target clear
			/squelch /target ${Translocator}
			/if (${Target.ID}) {
				/bct ${Translocator} //delay 15s
				/bct ${Translocator} //casting Translocate -targetid|${Me.ID}
				/delay 15s
			} else {
				/echo My translocator is missing, waiting...
				/delay 1s
				/goto :again
			}
		} else /if (${Me.AltAbilityReady[Gate]}) {
			/casting Gate -maxtries|5
			/echo Gating (AA) back to turn-in...
			/delay 15s
			
		} else /if (${Me.Gem[Gate]}) {
			/cast ${Me.Gem[Gate]} -maxtries|5
			/echo Gating (spell) back to turn-in...
			/delay 15s
			
		} else /if (!${FindItem[=Philter of Major Translocation].InvSlot}) {
			/casting "Philter of Major Translocation"
			/echo Gating (potion) back to turn-in... I have ${FindItemCount[${Philter of Major Translocation} pots left.
			/delay 15s
		} else {
			/echo I have no methods of returning to bind! Ending macro.
			/endmacro
		}
		
		/if (!${Zone.ShortName.Equal[KaladimB]}) {
			/echo Trying again
			/goto :again
		} else {
			/return
		}
		
/return

| ----------------------------------------------------------------------------
| SUB: SuicideByGuard
| ----------------------------------------------------------------------------

Sub SuicideByGuard
	/declare guard2d bool local 0
	/declare guardzd bool local 0
	/declare nospam  bool local 0
	
	/keypress CLOSE_INV_BAGS
	/delay 5

	/if (${Mercenary.State.Equal[SUSPENDED]}) {
		/if (!${Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled}) {
			/echo Waiting 5 minutes for button to enable...
			/delay 5m 
		}
		/echo Summoning mercenary.
		/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
	}	
	
	:CakeIsGreat
	/doevents
	/if (${Me.Level}>${LowLevel}) {
				
		/squelch /target clear
		/varset guard2d 0
		/varset guardzd 0
		/squelch /target guard
		
		/if (${Target.Distance}<=30) 	/varset guard2d 1
		/if (${Target.DistanceZ}<=3.25)	/varset guardzd 1
		
		/if (${guard2d} && ${guardzd} && !${Target.Moving}) {
			/varset nospam 0
			/if (!${Me.Combat}) {
				/if (${Me.Sitting}) /stand
				
				/killthis
				/delay 5s
				
				:StillAlive
				/if (${Me.Combat} && !${Target.Moving}) {
					/delay 1s
					/goto :StillAlive
				} else {
					/goto :CakeIsGreat
				}
			} else {
				/target clear
				/call MoveToGunlok
				/delay 1s
				/goto :CakeIsGreat
			}
		} else {
			/if (!${nospam}) {
				/echo Guard out of range/moving, waiting...
				/varset nospam 1
			}				
			/delay 1s
			/call CorpseClear
			/goto :CakeIsGreat
		}
	}
	/echo Back to level ${LowLevel}, clearing corpses and resuming hand-in.
	/call CorpseClear
	/call MoveToGunlok
	/call PreTurnIn
/return
	

| ----------------------------------------------------------------------------
| SUB: Corpse clearing
| ----------------------------------------------------------------------------
Sub CorpseClear
	:loop
	/squelch /target clear
	/squelch /target mycorpse next
	/if (${Target.ID}) {
		/decaycorpse
		/notify ConfirmationDialogBox CD_Yes_Button leftmouseup
		/delay 5
		/goto :loop
	}
/return


| ----------------------------------------------------------------------------
| SUB: AFK Tools from AHTools by Anonymous Hero
| ----------------------------------------------------------------------------
Sub AFKTools
	/declare holding bool local
	/if (${Select[${AFKToolsOn},1,2]}) {
		:CZLockDown
			/posse load
			/if (${Posse.Strangers}>=1) {
				/if (!${holding}) {
					/echo [AHTools] Macro on hold due to player activity in camp radius.
					/call BroadCast ${IRCOn} ${EQBCOn} r "**PCS DETECTED IN CAMP RADIUS**"
					/multiline ; /beep ; /timed 1 /beep ; /timed 1 /beep ; /timed 5 /beep ; /timed 5 /beep ; /timed 5 /beep ; /timed 5 /beep ; /timed 1 /beep ; /timed 1 /beep
					/varset holding 1
				}
				/delay 1s
				/call CheckForCombat 1 AFKTools
				/doevents
				/goto :CZLockDown
		} else { /varset holding 0 }
	}
	/if (${Select[${AFKToolsOn},1,3]}) {
		:GMLockDown
		/if (${SpawnCount[GM]}>=1) {
			/if (${AFKGMAction}==1) {
				/if (!${holding}) {
					/echo [AHTools] Macro on hold due to GM Presence
					/call BroadCast ${IRCOn} ${EQBCOn} r "** GM DETECTED **"
					/multiline ; /beep ; /timed 1 /beep ; /timed 1 /beep ; /timed 5 /beep ; /timed 5 /beep ; /timed 5 /beep ; /timed 5 /beep ; /timed 1 /beep ; /timed 1 /beep
					/varset holding 1
				}
				/goto :GMLockDown
			} else {
				/varset holding 0
			}
			/if (${AFKGMAction}==2) /multiline ; /echo [AHTools] Ending Macro due to GM Presence ; /mq2log [AHTools] Ending Macro due to GM Presence ; /endmacro
			/if (${AFKGMAction}==3) /multiline ; /echo [AHTools] Unloading MQ2 due to GM Presence; /mq2log [AHTools] Unloading MQ2 due to GM Presence ; /unload
			/if (${AFKGMAction}==4) /multiline ; /echo [AHTools] Quitting out of EQ due to GM Presence ; /mq2log [AHTools] Quitting out of EQ due to GM Presence ; /quit
		}
	}
/return


| ----------------------------------------------------------------------------
| SUB: BroadCast - Handles echos and messages in mq2irc and mq2eqbc
| ----------------------------------------------------------------------------
Sub BroadCast(doirc, doeqbc, eqbcolor, message)
	/if (${eqbcolor.Equal[null]}) /varset eqbcolor w
	/if (${EQBC.Connected} && ${doeqbc}) /${EQBCSay} [+${eqbcolor}+] [${Time}] ${message} [+x+]
	/if (${Bool[${Plugin[MQ2IRC]}]} && ${doirc}) /i say ${message}
	/echo ${message}
/return

	
| --------------------------------------------------------------------------
| Sub: Event_TSCursor
| --------------------------------------------------------------------------
Sub Event_TSCursor
   /declare ItemToDestroy string local Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Tattered Skullcap|Small Patchwork Pants|Rusty Axe|Rusty Broad Sword|Rusty Mace|Rusty Short Sword|Rusty Two Handed Sword|Small Lantern|Torch
   /declare i  int local
   /for i 1 to 12
	  :retryclearTSCursor
	  /if (${Cursor.Name.Equal[${ItemToDestroy.Arg[${i},|]}]}) {
		 /echo ${ItemToDestroy.Arg[${i},|]} on cursor. Destroying!
		 /destroy
		 |might need this:/delay 1
		 /goto :retryclearTSCursor
	  }
   /next i
   /doevents
/return


| ----------------------------------------------------------------------------
| Sub: Event_NullSlot
| ----------------------------------------------------------------------------
Sub Event_NullSlot
   /varset NullExit 1
   /echo Opening all bags to correct null slot
   /keypress OPEN_INV_BAGS
   /timed 100 /keypress CLOSE_INV_BAGS
/return


| ----------------------------------------------------------------------------
| SUB: Event - Got a tell
| ----------------------------------------------------------------------------

Sub Event_Lang 
  /echo Got a tell, pausing for 10 minutes 
  /delay 600s 
/return 

| ----------------------------------------------------------------------------
| SUB: GiveChips -- This sub is deprecated and not called (kept for posterity)
| ----------------------------------------------------------------------------

Sub GiveChips
	/declare chips int local
	/echo Handing in Chips.
	
	:Loop
	/call CheckGM
	/if (${Me.Level}>=25) /call SuicideByGuard
	
	/if (!${FindItem[=Bone Chips].InvSlot}) {
	  /echo backpacks empty go get more stuff
	  /call CleanInventory
	}
	
	/if (!${FindItem[=Bone Chips].InvSlot}) /return
	
	/for chips 0 to 3
	/squelch /shift /itemnotify ${FindItem[=Bone Chips].InvSlot} leftmouseup
	/delay 5
	/click left target
	/click left target
	/delay 5
	/next chips
	/delay 8
	/notify GiveWnd GVW_Give_Button leftmouseup
	/delay 8
|	/echo Clearing Cursor
	:cursorclear
	/if (${Cursor.ID} && ${Cursor.ID} != 13073) {
		/destroy
		/delay ${destroydelay}
		/goto :cursorclear
	}
	
	/if (!${FindItem[=Bone Chips].InvSlot}) /call CleanInventory
	/goto :Loop
/return
 
ok so the next logical thing to do here is add code for multiple toons to do this off 1 "porter"
my thinking was something like this....

2-5 toons + porter each running eqbc
Top
porter is running a mac that adds people into group until X (total toons)
porter then ports to brell's and all toons macs see brell's as zone and go buy chips and come back...
all toons send a tell telling porter "ready"
when porter gets tells from X then he ports the entire group back to bind (gunlock)
all quit group and turnin and then send tell to porter to re-join port group
back to top

- - - Updated - - -

btw I have done 5 toons all running and 1 porter but did it with individual macs and I controlled the porter and omg it was spam city but you see 5 toons leveling at the same time and my porter also nabbed some AAs while the rest turned in too... so it was exp x6
 
That's going to take some thought, lol. It may be beyond my capabilities, but I'll give it a shot. It WILL take me some time. With two wizards it is easy, group PLees and the wizards play tennis with them. I have one written for that already, I just need to update the turn-in and clean bags. I'll probably post that later today.
 
need to put in the check for kaladim vs brells when mac starts, if yours starts the mac in brells it just ends and have to port back to kaladim to start, and wait for cd of teleport bind

- - - Updated - - -

something I was not getting until last night, yours crashes the client 1 in 15 or so on port for whichever is running the mac, wonder which plugin is causing that? maybe a fix is to unload plugins,port,load plugins? Thinking outloud.....

- - - Updated - - -

You get level 1-90 in about 3 days if no crashes, imagine having 1 heroic mage on day 1 and then 6x 90s on day 3.... just saying....

- - - Updated - - -

although in my case I max AAs along the way with mq2spend so its prolly 4 days for my team....
 
That's going to take some thought, lol. It may be beyond my capabilities, but I'll give it a shot. It WILL take me some time. With two wizards it is easy, group PLees and the wizards play tennis with them. I have one written for that already, I just need to update the turn-in and clean bags. I'll probably post that later today.
You could take a look at the zone in Mac that is a part of the popular Blitter Into the Hills macros.
 
You also make plenty of plat to help pay for those spells. When I did 1-60 I made enough to buy all my spells and most of the defiant gear I needed, higher level spells get too expensive to keep up with, however.
 
using on TLP... so cant buy in bulk, have to spend time farming.

In order to get the most out of farming these chips, i'd like to NOT destroy the items given except maybe torches and just end the macro when inventory is full (probably need something in there to stop it from giving too many chips at once too overload it idk), so i can walk over to the vendor in the next room and use a sell mac to generate more money
 
Here is an updated Bone Chip quest for those evil characters. It also provides merc support.



Rich (BB code):
|EvilbonesV3.mac
|TurnIn, ClearCursor, SafeTarget, Events, CleanInventory and BuyChips routines by EqMule
|Merc support written by Redbot
|CheckPlugin written by Maskoi
|Movement routines written by Randyleo


Sub Main

	/declare destroydelay int outer 0
| *** Change Taxi to Porter's name ***

	/declare Porter string outer Taxi	
| **** Change the #s to the corresponding numbers in the loc.
| **** You can use whole numbers or the ones with decimals.
| **** This way we don't all have the same turn point.

	/declare XelhaTurnY outer -1396
	/declare XelhaTurnX outer 568
	
	/declare BrellsturnY outer -623
	/declare BrellsturnX outer 88

	
| **** Change Group_Port_to_Brells's_Rest to the correct spell.
| **** Quotation marks are required!
| **** Wizard Brell's Rest Portal
| **** Druid Circle of Brell's Rest

	/declare BrellsSpell string outer "Group_Port_to_Brells's_Rest"
	
| **** Change #### to correct AA number. Wizard 456 Druid 7009

	/declare PortToBind int outer ####
	/declare ItemToHandIn       string  outer Bone Chips
	/declare TurnInTarget       string  outer Xelha Nevagon
	/declare NullExit           int     outer 0


| -------------------------------------------------------------------------------------
| Check if required plugins are loaded		Stolen from KissAssist
| -------------------------------------------------------------------------------------
    /echo Checking Plugins
	/call CheckPlugin MQ2Cast
    	/call CheckPlugin MQ2Moveutils
	/call CheckPlugin MQ2EQBC
	/call CheckPlugin MQ2Autoaccept

	/autoaccept add ${Porter}
   
	/echo Starting
	
	:mainloop
   /if (${Zone.ID}==382) {
	  /call MoveToXelha
		/delay 5
      :EFreeportLoop
      /call SafeTarget ${TurnInTarget}
|      /call ClearCursor
      /call TurnIn
|      /call ClearCursor
      /if (${FindItemCount[${ItemToHandIn}]}>0) {
         /goto :EFreeportLoop
      } else {
|         /call ClearCursor
|         /call CleanInventory
		 /call PortToBrellsRest
		 /call Marie
		 /call MoveToPorter
		 /call Bind
		 /goto :mainloop
      }
   }
/return

| ----------------------------------------------------------------------------
| SUB: Check Plugin		Stolen from KissAssist
| ----------------------------------------------------------------------------
    Sub CheckPlugin(string pluginname)
	
        /if (!${Bool[${Plugin[${pluginname}]}]}) {
            /squelch /plugin ${pluginname}
            /echo ${pluginname} not detected! This macro requires it! Loading ...
        }
        
    /return
	
| ----------------------------------------------------------------------------
| SUB: MoveToXelha
| ----------------------------------------------------------------------------

	Sub MoveToXelha
	/delay 2s
	/squelch /target clear
		/moveto mdist 10                
        /moveto loc   ${XelhaTurnY} ${XelhaTurnX}
	/target "Xelha Nevagon"
	
     :StillMoving 
	{
		/delay 1
         /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
                 /delay 0 !${Me.Moving}
        } else {
		/delay 5
	}
			
	/if (${Target.Distance}>15) /moveto id
		/delay 0 ${MoveTo.Stopped}
		/face fast
	/if (${Target.Type.Equal[npc]}) {
	    /if (${Me.Grouped}) {
	        /echo You are grouped - Disbanding
	        /disband
	
	}

/return


| ---------------------------------------------------------------
| Sub: TurnIn
| ---------------------------------------------------------------
Sub TurnIn
   /declare bonetimer timer local 0
   /declare i int local
   	/if (${Mercenary.State.Equal[SUSPENDED]}) {
		/echo summoning mercenary
			/if (!${Window[MMGW_ManageWnd].Child[MMGW_SuspendButton].Enabled}) {
			/echo waiting 2 minutes for button to enable
			/delay 2m 
			}
		/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
	}
   /for i 0 to 3
      :GetBoneChips
      /if (${FindItemCount[${ItemToHandIn}]}>0) {   
         /itemnotify "${ItemToHandIn}" leftmouseup
         /delay 1 ${Cursor.ID}==13073
         :retrygive
         /if (${Cursor.ID}==13073) {
            /click left target
            /delay 1 ${Window[GiveWnd].Child[GVW_MyItemSlot${i}].Tooltip.NotEqual[${ItemToHandIn}]}==FALSE
            /if (${Cursor.ID} && ${Cursor.ID}==13073) {
               /goto :retrygive
            }
         } else {
            /goto :GetBoneChips
         }
      }
   /next i
   /if (${Window[GiveWnd].Open}) {
      /notify GiveWnd GVW_Give_Button leftmouseup
      /delay 200 !${Window[GiveWnd].Open}
   }
/return

| ---------------------------------------------------------------
| Sub: ClearCursor
| ---------------------------------------------------------------
Sub ClearCursor
   :redestroy
   /if (${Cursor.ID} && ${Cursor.NoDrop}==FALSE) {
      /destroy
      /delay 0 ${Bool[${Cursor.ID}]}==FALSE
      /goto :redestroy
   }
/return

| --------------------------------------------------------------------------
| Sub: Event_TSCursor
| --------------------------------------------------------------------------
Sub Event_TSCursor
   /declare ItemToDestroy string local Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Tattered Skullcap|Small Patchwork Pants|Rusty Axe|Rusty Broad Sword|Rusty Mace|Rusty Short Sword|Rusty Two Handed Sword|Small Lantern|Torch
   /declare i  int local
   /for i 1 to 12
      :retryclearTSCursor
      /if (${Cursor.Name.Equal[${ItemToDestroy.Arg[${i},|]}]}) {
         /echo ${ItemToDestroy.Arg[${i},|]} on cursor. Destroying!
         /destroy
         |might need this:/delay 1
         /goto :retryclearTSCursor
      }
   /next i
   /doevents
/return

| ----------------------------------------------------------------------------
| Sub: Event_NullSlot
| ----------------------------------------------------------------------------
Sub Event_NullSlot
   /varset NullExit 1
   /echo Opening all bags to correct null slot
   /keypress OPEN_INV_BAGS
   /timed 100 /keypress CLOSE_INV_BAGS
/return

| ----------------------------------------------------------------------------
| SUB: CleanInventory
| ----------------------------------------------------------------------------   
   
Sub CleanInventory
    /if (${Mercenary.State.Equal[ACTIVE]}) {
		/echo suspending mercenary
		/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
	}
   /echo Clearing up your bags, this will take a moment.
   /declare StuffToDestroy string local Rusty Broad Sword|Torch|Rusty Short Sword|Rusty Mace|Rusty Two Handed Sword|Rusty Axe|Small Patchwork Sleeves|Small Patchwork Tunic|Small Tattered Gloves|Small Lantern|Small Tattered Skullcap|Small Patchwork Pants
   /declare i  int local
   /for i 1 to 12
      /echo ${StuffToDestroy.Arg[${i},|]} ${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}
      /if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) {
         :MoreToDestroy
         /doevents
         /itemnotify "${StuffToDestroy.Arg[${i},|]}" leftmouseup
         /delay 10 ${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}
         /if (${Cursor.Name.Equal[${StuffToDestroy.Arg[${i},|]}]}) {
            /destroy
            /delay 10 ${Bool[${Cursor.ID}]}==FALSE
         }
         /if (${FindItemCount[${StuffToDestroy.Arg[${i},|]}]}>0) {
            /goto :MoreToDestroy     
         }
      }
   /next i
   /squelch /target clear
/return


| ----------------------------------------------------------------------------
| SUB: PortToBrellsRest
| ----------------------------------------------------------------------------

Sub PortToBrellsRest

		/squelch /target clear
        	/delay 5s
	/if (${Mercenary.State.Equal[ACTIVE]}) {
		/echo suspending mercenary
		/notify MMGW_ManageWnd MMGW_SuspendButton LeftMouseUp
	}
	    /target ${Porter}
	    /if (${Target.Type.Equal[pc]}) {
	        /bct ${Porter} //invite ${Me.Name}
	        /delay 5s
	        /moveto loc ${XelhaTurnY} ${XelhaTurnX}
	     :StillMoving 
				{
				/delay 1
                    /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
                    /delay 0 !${Me.Moving}
                } else {
			/delay 5
			}
	/moveto id
		/delay 5s
	:oncemore
	/echo Porting!
	/bct ${Porter} //cast ${BrellsSpell} -maxtries|5
		/delay 15s
	/if (${Zone.ShortName.NotEqual[brellsrest]}) {
	/echo Casting ${BrellsSpell} again
   	/goto :oncemore
	} else {
	/return
	}

| ----------------------------------------------------------------------------
| SUB: Marie
| ----------------------------------------------------------------------------
	Sub Marie
	/autoinventory
	/squelch /target clear
		/delay 5s
	/call MoveToMarie
	        /delay 5s
        /call npc "Marie Fay"
	/call BuyChips
			/delay 3s
/return	

| ----------------------------------------------------------------------------
| SUB: NPC(NPCName)
| ----------------------------------------------------------------------------

	Sub NPC(NPCName)

    /target npc ${NPCName}
    /delay 1s
    /if (!${Select[${Target.Type},npc,pet]} || !${Target.ID} || ${Target.Type.Equal[pet]} && !${Target.CleanName.Find[familiar]}) {
        /echo Please target a vendor or guildbanker
        /return
    }
    /echo Doing business with ${NPCName}
    /target id ${Spawn[${NPCName}].ID}
    /delay 3s ${Target.ID}==${Spawn[${NPCName}].ID}
    /if (${Target.Distance}>15) {
        /moveto id  ${Spawn[${NPCName}].ID}
        /delay 250 ${MoveTo.Stopped}
    }
    /face nolook
    /delay 1s
|	/echo Opening Bags
|	/keypress OPEN_INV_BAGS
|		/delay 2s			
    /echo Opening merchant/guildbank window
    /nomodkey /click right target
    /echo Waiting 5s for merchant/guildbank window to populate
    /delay 5s
	/return
/return

| ----------------------------------------------------------------------------
| SUB: BuyChips		Written by EqMule
| ----------------------------------------------------------------------------

	Sub BuyChips
| This is to adjust number of free lots to be left open while buying Bone Chips.
| I suggest leaving a couple of slots open in case of severe lag.

	/declare FreeSlots int local 3

        /notify MerchantWnd ItemList listselect ${Window[MerchantWnd].Child[ItemList].List[=Bone Chips,2]}
	/delay 2s
	:goagain
	/if (${Me.FreeInventory}>${FreeSlots}) {
		/Shiftkey /notify merchantwnd MW_Buy_Button leftmouseup
	:waitforit
		/if (${Window[MerchantWnd].Child[MW_Buy_Button].Enabled}==FALSE) {
			/echo button is false
			/delay 2
			/goto :waitforit
		}
		/goto :goagain
	}
|		/echo Closing Bags
|	/keypress CLOSE_INV_BAGS
	/delay 2s
/return

| ----------------------------------------------------------------------------
| SUB: MoveToMarie
| ----------------------------------------------------------------------------

	Sub MoveToMarie
		/squelch /target clear
		/echo Moving to Marie
		
		/moveto mdist 10                
		/moveto loc ${BrellsturnY} ${BrellsturnX}
	:StillMoving 
		{
			/delay 10
        /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving
            /delay 10 !${Me.Moving}
        }

	    /target "Marie Fay"
		/if (${Target.Distance}>15) /moveto id
        		/delay 1 ${MoveTo.Stopped}
/return

| ----------------------------------------------------------------------------
| SUB: MoveToPorter
| ----------------------------------------------------------------------------

	Sub MoveToPorter
		/echo Moving to ${Porter}
		 /squelch /target clear
	/if (${Merchant.Open}) {
            /notify MerchantWnd MW_Done_Button leftmouseup
            /delay 1s !${Merchant.Open}
		}      
        /moveto mdist 10                 
        /moveto loc ${BrellsturnY} ${BrellsturnX}
 :StillMoving2 
		{
			/delay 1
        /if (${MoveTo.Moving} || ${Me.Moving}) /goto :StillMoving2
             /delay 0 !${Me.Moving}
        }

		/squelch /target ${Porter}
		/if (${Target.Distance}>15) /moveto id
		/delay 10 ${MoveTo.Stopped}

/return

| ----------------------------------------------------------------------------
| SUB: Bind
| ----------------------------------------------------------------------------

Sub Bind
    /squelch /target clear
	/if (${Merchant.Open}) {
               /notify MerchantWnd MW_Done_Button leftmouseup
               /delay 1s !${Merchant.Open}
	 }      
		   /delay 5s
	:again
	/bct ${Porter} //alt activate ${PortToBind} -maxtries|5
		/delay 15s
	/if (!${Zone.ID}==382) {
	/echo casting Gate again
		/goto :again
	} else {
		/return
	}
/return
| --------------------------------------------------------------
| Sub: SafeTarget
| --------------------------------------------------------------
Sub SafeTarget(string targ)
   /declare targid int local 0
   :retarget
   /if (${Target.ID} && ${Target.ID}==${Spawn[${targ}].ID}) /return
   /if (${Spawn[${targ}].ID}) {
      /varset targid ${Spawn[${targ}].ID}
      /if (${Spawn[${targ}].Distance}<100) {
         /echo Targeting ${Spawn[${targ}]}
         /target id ${targid}
         /delay 30 ${Target.ID}==${targid}
      }
   }
   /if (!${Target.ID}) {
      /echo [SafeTarget] couldnt find a target, retrying
      /delay 1s
      /goto :retarget
   }
/return
 
Bonechips Revised

Users who are viewing this thread

Back
Top
Cart