| 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