• 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

Joined
May 21, 2014
RedCents
994¢
I started using these macros a few weeks back, and I wasn't impressed by their stability, hehe. I decided to see if I could figure out how I could improve them. After a LOT of research and even more trial and error, these are my offerings. These are my first major projects on macros, so please don't burn me down too bad, lol.

I found a different buy routine that EqMule wrote that works very well. You do not have to set the number of bone chips. It will buy as many as you have open inventory slots for. There is also a variable for you to set free slots if you desire. It is in the BuyChips subroutine, I couldn't get it to work at the top of the macro.

I added zone checks to the porting routines so when a gate collapses it doesn't go brain dead. It will keep trying until it zones. As you can see, I reorganized the whole thing. I had a lot of trouble following it the way it was before.

None of these use MQ2Navigation, they all use MQ2MoveUtils. I also added a required plugin check that will load any missing plugins. This was shamelessly stolen from KissAssist.

I integrated Wizard and Druid settings in the porter and solo versions of the macro. You set the proper spells/AAs at the top of the macro. the Fellowship version also has its spell/AA settings at the top of the macro.

Please feel free to improve this set of macros. It would be great if you do if you could explain it to me so I can continue to learn. I've actually had a lot of fun doing this, lol, and have leaned a ton.

I want to clean up the EmptyBags routine, but haven't figured out how to do it yet, it's a little (read WAAAY) over my abilities yet.

This shows the path and where I set up the campfire, it's in the weeds and very hard to see, hehe. With a character that has FD they basically disappear .

BrellsRest1.jpg



Porter Version:


Rich (BB code):
|AutoBonesV2.mac

| tradin.mac, by amml
| modified by tms
| full automation added by fuzzymelon
| Buy function courtesy of RedGuides.com
| Modified EmptyBags routine by Randyleo


Sub Main

| *** Change Taxi to Porter's name ***

	/declare Porter string outer Taxi
	
| **** 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 Group_Port_to_Bind to correct AA number. Wizard 456 Druid 7009

	/declare PortToBind int outer Group_Port_to_Bind
	

	
| *** You need to rem this out if the name is already in your autoaccept list ***

	 /autoaccept add ${Porter}
	
	/declare destroydelay int outer 1
	
| -------------------------------------------------------------------------------------
| Check if required plugins are loaded		Stolen from KissAssist
| -------------------------------------------------------------------------------------
    /echo Checking Plugins
	/call CheckPlugin MQ2Cast
    	/call CheckPlugin MQ2Moveutils
	/call CheckPlugin MQ2EQBC
   
	/echo Starting
| Port to Bind if macro not started in North Kaladim, Porter must be bound in Gunlok's room!!!
	/if (${Zone.ShortName.NotEqual[KaladimB]}) /call Bind
	:MainLoop
		/delay 5s
		/call MoveToGunlok
			/delay 5
		/call GiveChips
		/call EmptyBags
		/call Done
                /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: 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
	/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 1 to 4
	/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 2s
		|/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
	/declare done int local 0
	: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 5
	    /if (${Cursor.ID} && ${Cursor.ID} != 13073) /destroy
	    /delay ${destroydelay}
         }
		/next i

/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: PortToBrellsRest
| ----------------------------------------------------------------------------

Sub PortToBrellsRest

		/squelch /target clear
        	/delay 5s
	    /target ${Porter}
	    /if (${Target.Type.Equal[pc]}) {
	        /bct ${Porter} //invite ${Me.Name}
	        /delay 5s
	/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
	    /squelch /target clear
	    /target "Marie Fay"
	    		    /delay 5s
	    /call MoveToMarie
	        /delay 5s
         |       /face fast
         |       /delay 3s
        /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
|        /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
		/echo Moving to Marie
		
		/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 150 ${MoveTo.Stopped}
/return

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

	Sub MoveToPorter
		/echo Moving to ${Porter}
		
		/moveto loc -614.09 119.25
			/delay 20
		:recheck	
		/if (${Me.Moving}) {
			/delay 5
		/goto :recheck
		} else {
		/moveto loc -617.57 -15.31
			/delay 5
		}
			/delay 5s
		/if (${Target.Distance}>15) /moveto id
        		/delay 150 ${MoveTo.Stopped}

/return




Fellowship Version:
This is set up for the campfire to be on the same side of the hill as Marie. There a lines of code that are commented out to travel to and from the port in area.


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

| tradin.mac, by amml
| modified by tms
| full automation added by fuzzymelon
| Buy function courtesy of RedGuides.com
| Modified EmptyBags routine by Randyleo



Sub Main


| *** 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 outer 1
	
| *** Change Transport to spell/potion/AA you plan to use to get back to Bind.
| **** Quotation marks are required!

	/declare BackToBind string outer "Transport"

	
| -------------------------------------------------------------------------------------
| 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 5
		/call GiveChips
		/call EmptyBags
                /call Done
		/call PortToCampFire
		/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
	/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
	/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
	/declare done int local 0
	: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 5
	    /if (${Cursor.ID} && ${Cursor.ID} != 13073) /destroy
	    /delay ${destroydelay}
         }
		/next i

/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: Marie
| ----------------------------------------------------------------------------
	Sub Marie
	    /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
		/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 150 ${MoveTo.Stopped}
/return

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

Sub PortToCampFire
	/echo Off to Brell's Rest5
	: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 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
		| 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 -617.57 -15.31
		|		/delay 5
		|}
		/target ${fellow}
		/moveto id
			/delay 10s
				/call Campfire
			/delay 10s
		: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 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

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

Sub	Bind
    /squelch /target clear
	/if (${Merchant.Open}) {
               /notify MerchantWnd MW_Done_Button leftmouseup
               /delay 1s !${Merchant.Open}
	       /delay 5s
	}	   
	:again
		/cast ${BackToBind} maxtries|5
		/delay 15s
	/if (!${Zone.ShortName.Equal[KaladimB]}) {
	/echo Trying again
		/goto :again
	} else {
		/return
	}
	    
/return



Solo Version:



Rich (BB code):
| AutoBones-SoloV2

| tradin.mac, by amml
| modified by tms
| full automation added by fuzzymelon
| Buy function courtesy of RedGuides.com
| Modified EmptyBags routine by Randyleo



Sub Main

| **** Change Port_to_Brells's_Rest to the correct spell.
| **** Quotation marks are required!
| **** Wizard Brell's Rest Gate
| **** Druid  Ring of Brell's Rest

	/declare BrellsSpell string outer "Port_to_Brells's_Rest"

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

	/declare destroydelay int outer 1

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

   
	/echo Starting
	/if (${Zone.ShortName.NotEqual[KaladimB]}) /call Bind
	:MainLoop
		/delay 5s
		/call MoveToGunlok
			/delay 5
		/call GiveChips
		/call EmptyBags
		/call Done
		/call PortToBrellsRest
		/call Marie
		/call Bind
		/goto :MainLoop
	
/return	

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

	Sub MoveToGunlok

	/squelch /target clear
	/target "Gunlok Jure"
		/delay 2s
	|/nav ${Math.Calc[${Target.X}-12]} ${Math.Calc[${Target.Y}+25]} ${Target.Z}
	: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
		/delay 2s
		/echo Opening Bags
	/keypress OPEN_INV_BAGS
/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 1 to 4
	/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 2s
		|/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
	/declare done int local 0
	: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 5
	    /if (${Cursor.ID} && ${Cursor.ID} != 13073) /destroy
	    /delay ${destroydelay}
         }
		/next i

/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: PortToBrellsRest
| ----------------------------------------------------------------------------

Sub PortToBrellsRest

	/squelch /target clear
        	/delay 5s
	:oncemore
	/echo Porting!
        /casting ${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
	    /squelch /target clear
	    /target "Marie Fay"
	    		    /delay 5s
	    /call MoveToMarie
	        /delay 5s
        /call npc "Marie Fay"
	    /call BuyChips
			/delay 3s
/return	

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

	Sub	Bind
    /target clear
	/if (${Merchant.Open}) {
               /notify MerchantWnd MW_Done_Button leftmouseup
               /delay 1s !${Merchant.Open}
	 }      
	/delay 5s
	:again
		/cast "Gate" maxtries|5
		/delay 15s
	/if (!${Zone.ShortName.Equal[KaladimB]}) {
	/echo Trying 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
|        /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
| ----------------------------------------------------------------------------

	Sub BuyChips
| This is to adjust number of free lots to be left open while buying Bone Chips.

	/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
		/echo Moving to Marie
		/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
/return


I hope everyone enjoys this work.


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:
just a warning, do NOT run this thing 24/7 I had a crew of 5 newbs get to level 43 then they got ported to pok at the GM spot AND logged out "forcefully" They were all buying bone chips at the time, it was strange.... I now only run 2 or 3 runs at a time to lessen a GM seeing all the exp and zoning...
 
Something I forgot to put in the writep at the top of the thread, you don't need to bind right at Gunlok, just somewhere along the east side of his room. The macroes move you to him. On the Autobone porter version the character to be power levelled does not have to be bound in Kaladim at all.

- - - Updated - - -

I'm trying to make an array to take care of the emptybags routine. This is what I have so far:


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





This is what it is dumping into the logfile:


Rich (BB code):
[2014/11/23 17:02:05] [MQ2] Clearing up your bags, this will take a moment.

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@155 (EmptyBags): /varset DestroyArray[1] "Rusty Axe"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@156 (EmptyBags): /varset DestroyArray[2] "Rusty Broad Sword"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@157 (EmptyBags): /varset DestroyArray[3] "Rusty Mace"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@158 (EmptyBags): /varset DestroyArray[4] "Rusty Short Sword"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@159 (EmptyBags): /varset DestroyArray[5] "Rusty Two Handed Sword"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@160 (EmptyBags): /varset DestroyArray[6] "Small Lanterns"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@161 (EmptyBags): /varset DestroyArray[7] "Small Tattered Gloves"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@162 (EmptyBags): /varset DestroyArray[8] "Torch"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@163 (EmptyBags): /varset DestroyArray[9] "Small Patchwork Tunic"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:05] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:05] test5.mac@164 (EmptyBags): /varset DestroyArray[10] "Small Tattered Skullcap"

[2014/11/23 17:02:05] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:05] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:06] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:06] test5.mac@165 (EmptyBags): /varset DestroyArray[11] "Small Patchwork Sleeves"

[2014/11/23 17:02:06] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:06] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:06] /varset 'DestroyArray[-1]' failed, out of bounds on array

[2014/11/23 17:02:06] test5.mac@166 (EmptyBags): /varset DestroyArray[12] "Small Patchwork Pants"

[2014/11/23 17:02:06] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:06] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:06] /for loop using invalid variable

[2014/11/23 17:02:06] test5.mac@169 (EmptyBags): /for i 1 to 12

[2014/11/23 17:02:06] test5.mac@89 (GiveChips): /call EmptyBags

[2014/11/23 17:02:06] test5.mac@26 (Main): /call GiveChips

[2014/11/23 17:02:06] The current macro has ended.


Where am I fouling up? I've tried changing a lot of different things and am a loss. Any help would be greatly appreciated.

- - - Updated - - -

I finally got it figured out and working. Here is my version of the EmptyBags routine:


Rich (BB code):
| ----------------------------------------------------------------------------
| SUB: EmptyBags
| ----------------------------------------------------------------------------	
	
Sub EmptyBags
	/declare done int local 0
	: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 5
	    /if (${Cursor.ID} && ${Cursor.ID} != 13073) /destroy
	    /delay ${destroydelay}
         }
		/next i

/return

All versions are now updated.
 
Last edited:
More updates, lol, I moved the settings for the turns to the top of the macro and took out the hard coded loc's. It means a little bit of work on the users part but will keep us from all having the same turn point. I also reworked the movement routines. The checks I had in there were not working. So, I paid another visit to KissAssist to see how it is done.

You will need to go to Brell's Rest an figure out where you want your turn. From portin turn left 90 degrees and you will be facing the gap you will run though. Go forward until you can turn and see Marie Fay, then do a /loc and write down your coordinates. You only need the first two sets. You can use whole numbers (####) or decimal (####.##) format.

You need to do the same thing in North Kaladim for the turn to Gunlok Jure. This way you don't have to bind within 15 units of Gunlok, it will make the movement for you. You can bind anywhere in his room this way.

This macro can be started outside of Kaladim if desired. Just make sure the transportation toon is bound in Gunlok's room somewhere before starting.



Rich (BB code):
| *** 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 GunlokTurnY outer ####
	/declare GunlokTurnX outer ####
	
	/declare BrellsturnY outer ####
	/declare BrellsturnX outer ####
	
| **** 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 "Brell's Rest Portal"
	
| **** Change #### to correct AA number. Wizard 456 Druid 7009

	/declare PortToBind int outer ####	

	
| *** You need to rem this out if the name is already in your autoaccept list ***

	 /autoaccept add ${Porter}

I'm no developer, but, I'm trying very had, lol. Please let me know of any bugs, if you like them, or if you would like something added. It may take me some time to figure out how to implement requests, but I'll try.

Macro files below.
 

Attachments

I just tried this out. I noticed a couple of things. I did not have the plugin mq2autoaccept loaded and the mac did not check that, so auto accepting invites was not set up. Isn't there a way to do that with mq2melee too? I don't think I had a melee.ini file set up on that computer either, so it didn't autoaccept. Is there a } missing in the disband section? Something was a little hinky there because the group never disbanded. I was not sure what ctrl+d was supposed to do, so I changed the command to /disband. I think that has it going for me now. Thanks for the hard work.
 
I'm at work right now, as soon as the suits go home, about half an hour, I'll take a look at it. Thanks for the feedback.

- - - Updated - - -

Items fixed, here is the updated file.
 

Attachments

I've been running this on my f2p wizard for a day or so now, This has been the most resilient autobones yet.
I had a peacemeal one I was hacking together but it would ultimately fall apart at some point.
I've added to your autobones-solov2b a small adjustment, in the Sub PortToBrellsRest
...
Rich (BB code):
/echo porting!
/alt activate 405
/casting ${BrellsSpell} -maxtries|5
...

This was for my solo sub 80 wizard, post lvl 66 wizard.
It requires getting a stone of marking from a vendor in N karana or the Baz and binding next to Marie
but its really worth it especially considering i had a wizard go OOM fizzling on trying to cast brells portal.
 
Also for anyone else with the issue of having an item that escaped the deleting procedure hanging on cursor, and preventing the character from buying bone chips; I got around this by just adding a /autoinventory command early into the buying sub,
as I'd rather lose a stack of chips for that round and not get hung up.
 
In these versions it checks open inventory spots while buying and will not hang a stack on the cursor. I lowered the delay in the destroy sub on my personal version and it destroys all of the junk items in less than a minute. I haven't seen it leave any of those items in inventory since I rewrote it.
 
I suspect it could be an issue of latency which leads to the failure to delete and hanging,
because it only happens sometimes and typically when i'm not watching it.
 
found out today that with the festive quests launched there are a bunch of mobs around the port area and near the merchant that agro and kill you on sight.
 
Yeah, they got me this morning, going to check a few things this evening to try to get around that.

- - - Updated - - -

There is one behind the port in spot, that is the one that jumps you as soon as you get in. I can't find anything near Marie (the merchant). For a light blue to 85 that joker hits hard. It looks like the best way to do it until after Frostfell is by using the Felloship version and put the campfire on the same side as Marie.

- - - Updated - - -

Did some further testing, the mob doesn't always attack right away, so, maybe if we moved the porter into the alleyway he won't agro? Any thoughts on that? Just send a /bct moveto loc #### #### to the porter as the PLee is leaving the zone in area?
 
I was about to park a heroic sk with merc up at the spot to keep it clear,
similarly you could send a BCT to porter to cast group invis.

Wizards use:
/Alt activate 1210
for group perfected invis


----
so it works most of the time in terms of protecting my porter from dying but upon running back to get ported to bind the SK gets attacked.
He can obviously stand and get beat on for a spell without much issue but it might be another thing with a lower level non heroic sk type toon
 
Last edited:
These are my first major projects on macros, so please don't burn me down too bad, lol. .

We would never do that to someone trying to help the community man! (as TreeHuginDruid enters the final coordinates to his laser guided drone napalm bomb set for Randyleo's house)... lol
 
For PLing an evil race or class you can do the Bone Chip turn in in East Freeport with Xelha Nevagon. She will take the chips from anyone and no mobs agro. The Zone.ShortName is FreeportEast. Just make the appropriate changes to the macro. Tested working, I'm PLing a DE Enchanter at the moment. She also does not hand you back all the junk, just coins.
 
Yes, about the only way I can figure out how to do it. Unless you could invis the PLee and translocate them, and have a second wiz up there to translocate them back. I haven't figured out how to code that yet.
 
Another new guy here trying to teach himself by looking at others. In the beginning of the macro you define a "fellow" variable which is used in the BackToKaladim section. It seems to move the PLee back to the campfire before they do anything as opposed to gating right right away from Marie - can someone confirm that I am reading how this is functioning correctly?
 
Yes it moves back to the campfire location to redrop the campfire. If it was to be run for a long time the campfire would expire after 6 hours and disappear.
 
Ok thanks Randy. I am still having all kinds of trouble with it leaving items in the bags. i have upped the destroy delay to 3 and same issue.

If I substitute the original tradin.mac for the /Give Chips and /Empty Bags subroutines, the whole thing runs solid.

Any thoughts?
 
Go to Sub EmptyBags and look for this delay:

Rich (BB code):
/for i 1 to 12
    /while (${FindItem[${Junk[${i}]}].InvSlot}) { 
		/nomodkey /itemnotify ${FindItem[${Junk[${i}]}].InvSlot} leftmouseup
	    /delay 5

Up that delay by 1 until it gets everything. Let me know what happens. On all of my machines it clears all the junk in less than a minute with that delay set to 1 and destroydelay set to 0.
 
Last edited:
5 is only half a second I would start at 15 or 1.5 seconds then move down til you find the fastest time you can delete them all
 
FYI if you have an evil toon and want to do this, you can shroud to a level 10 goblin, invis/sneak/hide and do the drink turn in quest or crushbone belts it does not take too much like 1k drink or 150 belts... easy to get with kissassist
 
I'm so lost. What is the latest and working one for fellowship?
 
Which one in this thread? The one in the original post? I'm trying to level a bard so I need the fellowship version.
 
So I ran this last night on my new bard.

1. Purchased 28800 bone chips, put down a fellowship on level ground (like 6 feet away from Bone Chip vendor), gated out using Philter of Major Translocation (bound next to the guy in North Kaladim), targeted him, and started macro. This worked great for the first few round. Then he destroyed the campfire and tried to make a new one on uneven ground. I had to edit the macro to not destroy the campfire nor make a new one. First time I deleted that whole section but the macro complained it couldn't find that routine and stopped. I had to remove everything between Sub Campfire to return. Then After two rounds he bought a full set of Bone Chips and the macro stated it couldn't find the spell to gate. I still had over 100 potions in his bag.
2. I manually ended the macro, gated to bind using a potion and started the macro again. This time I played another toon while letting this one run in the background. He seemed to work much better when the focus was not on his instance of EQ. This lasted about a dozen rounds. Then he was handing in 400 bone chips at a time and getting back 30 or so of the rewards. It was complaining that his bags were full. He was getting 10 tunics, arms, legs, gloves along with 10 to 20 lanterns, maces, swords, etc. each time he turned in bone chips. It was really odd.
 
First, on the campfire, you need to leave two fellowship members near it so he can refresh it. That is why I put it over in the weeds, hehe, to hide the other two toons. It will travel to and from the campfire no problems, if you put it on the same side as Marie.

On the not destroying the junk, it was working fine for me this last weekend and I left it running for 12 hours. Try to run an unmodified version of the mac with the campfire and friends in the weeds, and let me know what happens.
 
Ok, I will try that. Your picture looks a bit off and is a bit confusing. You have the camp fire off to the west and your character arrow is way east showing a route to Marie. Why is your toon way off to the east?
 
That is where toons port into Brell's Rest, with a wizard or druid. That picture was for use with all the different versions.
 
Hello Randy,

Thx for this macro. It works well, andit is written well as I see your thought processin the script.

One question/request I have.
How difficult would it be to add a subroutine to allow the other two characters to buy the chips, then give the chips to the one being PL. So once the PL toon turns all chips in, another toon trades full bags with the PL toon. Then the PL toon goes back to turn in right away, and the other toon goes and buys more chips. This way you have multiple toons ferry chips to the turn in toon. This will speed up leveling making it twice as fast, and would require a seperate macro for the ferry toons.Then the added complexity when you make it fellowship friendly.

Just curiouos :)

Cheers,
MNKenr
 
I think that has been tried, but not sure how well it worked. See this macro thread: Bone chips - Full Auto - FAST as possible mods. It is in the Macro List at the top of the page.

Just reread your post, I don't think using your fellowship partners would work. If one of them is gone when the toon goes to redrop the campfire it will stall. You could put in a check so they wouldn't destroy the campfire until 3 toons are there. But this would defeat the possible speed increase. Another thing is that it is well beyond my capabilities to code, lol. The revised bone chips macros were my first major edits of macros.
 
Thanks Randyleo. I used this over the weekend putting the campfire at the suggested spot on your map. I am only leveling a bard while actually playing my other characters. I didn't want the bard destroying the campfire and trying to place another one. I'm not sure why this is in your macro so I removed that portion of the routine. It worked without a flaw and probably ran more than a dozen times.
 
It will for up to 6 hours, then the campfire poofs. I never figured out a timer to have him redrop it when it gets close to expiring. But that would mean having to move two fellowship members there at that time. I'm glad it is working well for you.
 
Dallas when you run the macro for more than 6 hours the Campfire will poof. Here is what I did to help speed up the process, and not include the removal or placement of the campfire every time you finish buying chips.

Set up 3 characters (part of the fellowship) at the campfire spot (can be new FTP accounts). Just have them sit there. On one of them have them remove and refresh the camp fire once every 4-5 hours or so. Then comment out the campfire code on the PL toon, and have them gate (or wizard gate to bind) to Kaladim as soon as they are finished buying the chips.

I did not like the fact the campfire was destroyed every run. I do the above with 3 toons doing the quest. Remember to add in a simple zone checker in case the off chance you try to port the instant the campfire is removed.
 
Bonechips Revised

Users who are viewing this thread

Back
Top
Cart