Warrior RH Mod

Post your completed (working) macros here. Only for macros using MQ2Data syntax!

Moderator: MacroQuest Developers

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Fri Dec 09, 2005 9:43 am

What does:

Code: Select all

/echo ${Me.AbilityReady["Taunt"]}
and

Code: Select all

/echo ${Me.AbilityReady["Kick"]}
return?

Are they mapped to a hotkey? You dont need the "" around them either, though I have no idea if that might be screwing with things.

Here's a little lesson in troubleshooting 101. You now know the area of the macro that's supposed to be doing things for you, now isolate where in the routine it's failing. Take:

Code: Select all

     /if (${Target.ID} && ${Me.Standing} && !${Me.Casting.ID} && (${Target.Distance}<${Math.Calc[${Target.MaxRangeTo}*${closeness}/100]})) { 
       /if (${Me.AbilityReady["Kick"]}) { 
         /doability "Kick" 
         /if (${verbosity}>=2) /${channel} kicking: ${Target.CleanName} 
       } 
     } 
and change it to something like:

Code: Select all

     /if (${Target.ID} && ${Me.Standing} && !${Me.Casting.ID} && (${Target.Distance}<${Math.Calc[${Target.MaxRangeTo}*${closeness}/100]})) { 
[color=red]       /echo I have a target, I'm standing, I'm not casting, and my target is in range.[/color]       
         /if (${Me.AbilityReady["Kick"]}) { 
[color=red]         /echo Kick is ready[/color]
         /doability "Kick" 
         /if (${verbosity}>=2) /${channel} kicking: ${Target.CleanName} 
       } 
     } 
Once you do that, you'll know exactly how far into that routine it's getting. From there you can further isolate what exact check it's failing by breaking each evaluation into another line and /echo, like so:

Code: Select all

  /if (${Target.ID}) { 
    /echo I have a target
    /if (${Me.Standing}) {
      /echo I'm standing
      /if (!${Me.Casting.ID}) {
        /echo I'm not casting
        /if (${Target.Distance}<${Math.Calc[${Target.MaxRangeTo}*${closeness}/100]}) { 
          /echo Target is within range
          /if (${Me.AbilityReady["Kick"]}) { 
            /echo Kick is ready
            /doability "Kick" 
            /if (${verbosity}>=2) /${channel} kicking: ${Target.CleanName} 
          } 
        } 
      }
    }
  }
Teach a man to fish.......
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

Learningcurve
orc pawn
orc pawn
Posts: 21
Joined: Sat Dec 17, 2005 6:04 pm

Post by Learningcurve » Thu Jan 05, 2006 10:33 am

How do you disable the running to the back of a mob if you are NOT using moveutils? I saw the question asked but moveutils was the answer for it. My problem is I cannot afford the software to compile the moveutils and cant seem to find a precompiled version. I wish I could. This is my first post I have been using the RH mac on my rogue for a long time and dont't mind him running to the back but it looks silly on my warrior and creates suspicion when I am trying to 2 box with it running. So I can't use it with other people around. This is my first post and I am sure I will get flamed off the planet but I would really like some help on this. I have read a million of these posts and tried to find an answer or another Mac that is simpler and not as involved as this one to no avail. I realize this is an old topic but if help is avail I would appreciate it.

I love you guys work and am trying to learn this as fast as I can.

Warauinu
a snow griffon
a snow griffon
Posts: 377
Joined: Fri Apr 15, 2005 9:21 am

Post by Warauinu » Thu Jan 05, 2006 10:41 am

How are you even compiling MQ?

Been awhile but I think the toggle Tank option will keep you from running behind. Just dont toggle taunt on if you dont want to taunt.
[quote="fearless"]
stop hindering the dev's[/quote]

Learningcurve
orc pawn
orc pawn
Posts: 21
Joined: Sat Dec 17, 2005 6:04 pm

Post by Learningcurve » Thu Jan 05, 2006 7:31 pm

Well... Sad to say I use precompiled version of MQ2 that someone else compiles. (I know this is where the flames are gonna burn me alive.) I wish I could compile my own as everytime I get the new compile there seems to be something diffrent about it. I have been reading these boards for quite some time and finally got a log in recently so I could donate for the work that has been done. And sadly now this is my second post. I am hoping sometime down the road I will be able to compile my own but until then I am stuck with no way to compile and waiting a few days after each patch for a new compile to be ready. (Serious downtime) I have tried to chunk out any code that refers to checking for the rear of the target or moving to the rear of target but I get spammed with endless error messages and still run to the rear of the mobs. I guess I will go ahead and continue to try and work it out on my own unless someone knows of a fix. Nothing like jumping in both feet first!

User avatar
dont_know_at_all
Developer
Developer
Posts: 5450
Joined: Sun Dec 01, 2002 4:15 am
Location: Florida, USA
Contact:

Post by dont_know_at_all » Thu Jan 05, 2006 7:37 pm


Hazado
decaying skeleton
decaying skeleton
Posts: 6
Joined: Mon Jul 27, 2009 2:01 am

Post by Hazado » Tue Aug 04, 2009 5:04 am

Here is my rework of this script.
I added AutoAttacking when Hit, reworked disciplines so you now can have up to 9 disciplines and added a few fixes here and there.

For the disciplines you need to convert all time into seconds. So for duration if it says 2 minutes make it 120.

I suggest you delete your disciplines section inside your personal Ini, then redo it once your in the game.

07052009 - Added a fix for disciplines to stop them from triggering every 2 seconds (My bad). Fixed a few types here and there. Should run swell now. :)
|---------------------------------------------------------------------------------
|
| Warrior Helper (WH) Macro
| - v6.0 RH by Jerle (10/26/04) Edited by lazyshammy to WH v1.0
|---------------------------------------------------------------------------------
|
| WH Syntax:
|
| Usage: /mac WH
|
| Default settings can be changed by their respective controlling /command
|
| Type /WHhelp for help or /status to see current settings!
|
|---------------------------------------------------------------------------------
|Add length timers to Disciplines, add up to 10 autodisciplines


#Chat tell
#Event AttackOn "#*#Auto attack is on#*#"
#Event AttackOff "#*#Auto attack is off#*#"
#Event Enraged "#*#|${Target.CleanName}| has become ENRAGED#*#"
#Event NLEnraged "#*#|${Target.CleanName}| is no longer enraged#*#"
#Event TooFarAway "#*#Your target is too far away, get closer#*#"
#Event Exp "#*#You gain#*#experience#*#"
#Event Slain "#*# slain#*#"
#Event Zoned "#*#You have entered#*#"
#Event GotHit "#1#YOU for#*#points of damage."
#Event GotMissed "#1#to#*#YOU, but #*#"
#Event SpellBounced "#*#Your spell did not take hold#*#"
#Event SwitchWeapon "#*#|${switchtext}|#*#"
#Event TogAAttack "[MQ2] Aattack#*#"
#Event TogDisarm "[MQ2] Autodisarm#*#"
#Event TogTaunt "[MQ2] Autotaunt#*#"
#Event TogTank "[MQ2] Autotank#*#"
#Event TogStick "[MQ2] Autostick#*#"
#Event TogLeash "[MQ2] Leash#*#"
#Event TogAuto "[MQ2] Autoassist#*#"
#Event TogDynaggro "[MQ2] Dynaggro#*#"
#Event TogPause "[MQ2] Pause#*#"
#Event TogTSwitch "[MQ2] AutoTargetSwitch#*#"
#Event TogDynclose "[MQ2] Dynclose#*#"
#Event LinkParse "[MQ2] LinkParse#*#"
#Event SetStopFighting "[MQ2] SetStopFighting#*#"
#Event SetEndFloor "[MQ2] SetEndFloor#*#"
#Event SetCloseness "[MQ2] SetCloseness#*#"
#Event SetFirstassist "[MQ2] SetMainassist#*#"
#Event SetSecondassist "[MQ2] SetSecondassist#*#"
#Event SetThirdassist "[MQ2] SetThirdassist#*#"
#Event SetAutoNinja "[MQ2] SetAutoNinja#*#"
#Event SetWeaponSwitch "[MQ2] SetWeaponSwitch#*#"
#Event SetStickDist "[MQ2] SetStickDist#*#"
#Event SetChicken "[MQ2] SetChicken#*#"
#Event SetDisc1 "[MQ2] SetDisc1#*#"
#Event SetDisc2 "[MQ2] SetDisc2#*#"
#Event SetDisc3 "[MQ2] SetDisc3#*#"
#Event SetDisc4 "[MQ2] SetDisc4#*#"
#Event SetDisc5 "[MQ2] SetDisc5#*#"
#Event SetDisc6 "[MQ2] SetDisc6#*#"
#Event SetDisc7 "[MQ2] SetDisc7#*#"
#Event SetDisc8 "[MQ2] SetDisc8#*#"
#Event SetDisc9 "[MQ2] SetDisc9#*#"
#Event SetLeashFlex "[MQ2] SetLeashFlex#*#"
#Event SetVerbosity "[MQ2] SetVerbosity#*#"
#Event SetChannel "[MQ2] SetChannel#*#"
#Event DragBodies "[MQ2] DragBodies#*#"
#Event LootMyCorpse "[MQ2] LootMyCorpse#*#"
#Event AutoFollow "[MQ2] AutoFollow#*#"
#Event AddMaster "[MQ2] AddMaster#*#"
#Event RemMaster "[MQ2] RemoveMaster#*#"
#Event ItemSet "[MQ2] ItemSet#*#"
#Event ItemBounce "[MQ2] ItemBounce#*#"
#Event ItemCast "[MQ2] ItemCast#*#"
#Event HelpInfo "[MQ2] WH Help#*#"
#Event StatInfo "[MQ2] WH Status#*#"

Sub Main

/echo Loading Warrior Helper... Please Wait!

/declare doAAttack bool outer FALSE
/declare StopFightingHealth int outer 30
/declare isEnraged bool outer FALSE
/declare LDExp float outer ${Me.PctGroupLeaderExp}
/declare AAExp float outer ${Me.PctAAExp}
/declare Exp2 float outer ${Me.PctExp}
/declare doStick bool outer TRUE
/declare X float outer
/declare Y float outer
/declare behindTarget bool outer FALSE
/declare i int outer
/declare dir int outer
/declare delta int outer
/declare strafedir string outer
/declare closeness int outer 70
/declare doLeash bool outer FALSE
/declare leashlength int outer 0
/declare stakeX int outer ${Me.X}
/declare stakeY int outer ${Me.Y}
/declare leashholder string outer Nobody
/declare doAutoassist bool outer FALSE
/declare mainassist string outer Nobody
/declare firstassist string outer Nobody
/declare secondassist string outer Nobody
/declare thirdassist string outer Nobody
/declare assistpct int outer 98
/declare oldtargetID int outer ${Target.ID}
/declare assisttimer timer outer 0
/declare doDynaggro bool outer FALSE
/declare gotHit bool outer FALSE
/declare aggrotimer timer outer 0
/declare ialias string outer None
/declare doIclick bool outer FALSE
/declare bouncenum int outer 1
/declare ibounce string outer None
/declare itemspellname string outer None
/declare clicktimer timer outer 0
/declare isPaused bool outer FALSE
/declare ninjamode string outer OFF
/declare ninjadist int outer 50
/declare doDisarm bool outer TRUE
/declare doIntim bool outer FALSE
/declare doSwitch bool outer FALSE
/declare switchtext string outer +Undefined+
/declare weapon1 string outer None
/declare weapon2 string outer None
/declare wstype string outer Detrimental
/declare doTSwitch bool outer TRUE
/declare lastevent string outer None
/declare rngtarget int outer 200
/declare rngtank int outer 100
/declare useMU bool outer FALSE
/declare oldheading string outer Default
/declare doChicken bool outer FALSE
/declare Forthealth int outer 20
/declare Forttimer timer outer 0
/declare Fortactive timer outer 0
/declare chickentimer timer outer 0
/declare doDisc1 bool outer FALSE
/declare disc1 string outer NONE
/declare disc1duration int outer 0
/declare disc1durationtimer timer outer 0
/declare disc1reuse int outer 0
/declare disc1reusetimer timer outer 0
/declare disc1end int outer 0
/declare doDisc2 bool outer FALSE
/declare disc2 string outer NONE
/declare disc2duration int outer 0
/declare disc2durationtimer timer outer 0
/declare disc2reuse int outer 0
/declare disc2reusetimer timer outer 0
/declare disc2end int outer 0
/declare doDisc3 bool outer FALSE
/declare disc3 string outer NONE
/declare disc3duration int outer 0
/declare disc3durationtimer timer outer 0
/declare disc3reuse int outer 0
/declare disc3reusetimer timer outer 0
/declare disc3end int outer 0
/declare doDisc4 bool outer FALSE
/declare disc4 string outer NONE
/declare disc4duration int outer 0
/declare disc4durationtimer timer outer 0
/declare disc4reuse int outer 0
/declare disc4reusetimer timer outer 0
/declare disc4end int outer 0
/declare doDisc5 bool outer FALSE
/declare disc5 string outer NONE
/declare disc5duration int outer 0
/declare disc5durationtimer timer outer 0
/declare disc5reuse int outer 0
/declare disc5reusetimer timer outer 0
/declare disc5end int outer 0
/declare doDisc6 bool outer FALSE
/declare disc6 string outer NONE
/declare disc6duration int outer 0
/declare disc6durationtimer timer outer 0
/declare disc6reuse int outer 0
/declare disc6reusetimer timer outer 0
/declare disc6end int outer 0
/declare doDisc7 bool outer FALSE
/declare disc7 string outer NONE
/declare disc7duration int outer 0
/declare disc7durationtimer timer outer 0
/declare disc7reuse int outer 0
/declare disc7reusetimer timer outer 0
/declare disc7end int outer 0
/declare doDisc8 bool outer FALSE
/declare disc8 string outer NONE
/declare disc8duration int outer 0
/declare disc8durationtimer timer outer 0
/declare disc8reuse int outer 0
/declare disc8reusetimer timer outer 0
/declare disc8end int outer 0
/declare doDisc9 bool outer FALSE
/declare disc9 string outer NONE
/declare disc9duration int outer 0
/declare disc9durationtimer timer outer 0
/declare disc9reuse int outer 0
/declare disc9reusetimer timer outer 0
/declare disc9end int outer 0
/declare discactive timer outer 0
/declare leashflex int outer 10
/declare doDynclose bool outer TRUE
/declare closenessdesired int outer 70
/declare acquiretimer timer outer 0
/declare snuggleup bool outer FALSE
/declare isTanking bool outer FALSE
/declare verbosity int outer 2
/declare channel string outer echo
/declare WHversion string outer 1.0
/declare doTaunt bool outer TRUE


/goto :BypassVCheck
|- Check versions and load aliases if necessary
/if (${Ini[WHSettings.ini,General,Version].Equal[${WHversion}]}) /goto :EndAlias
:BypassVCheck

/if (${verbosity}>=0) /${channel} Setting Aliases...
/squelch /alias /status /echo WH Status
/squelch /alias /WHhelp /echo WH Help
/squelch /alias /aattack /echo Aattack
/squelch /alias /stopfight /echo SetStopFighting
/squelch /alias /autostick /echo Autostick
/squelch /alias /leash /echo Leash
/squelch /alias /autoassist /echo Autoassist
/squelch /alias /dynaggro /echo Dynaggro
/squelch /alias /closeness /echo SetCloseness
/squelch /alias /mainassist /echo SetMainassist
/squelch /alias /secondassist /echo SetSecondassist
/squelch /alias /thirdassist /echo SetThirdassist
/squelch /alias /drag /echo DragBodies
/squelch /alias /lootmycorpse /echo LootMyCorpse
/squelch /alias /autofollow /echo AutoFollow
/squelch /alias /iset /echo ItemSet
/squelch /alias /ibounce /echo ItemBounce
/squelch /alias /iclick /echo ItemCast
/squelch /alias /pause /echo Pause
/squelch /alias /autoninja /echo SetAutoNinja
/squelch /alias /addmaster /echo AddMaster
/squelch /alias /remmaster /echo RemoveMaster
/squelch /alias /weaponswitch /echo SetWeaponSwitch
/squelch /alias /targetswitch /echo AutoTargetSwitch
/squelch /alias /stickdist /echo SetStickDist
/squelch /alias /autochicken /echo SetChicken
/squelch /alias /autodisc1 /echo SetDisc1
/squelch /alias /autodisc2 /echo SetDisc2
/squelch /alias /autodisc3 /echo SetDisc3
/squelch /alias /autodisc4 /echo SetDisc4
/squelch /alias /autodisc5 /echo SetDisc5
/squelch /alias /autodisc6 /echo SetDisc6
/squelch /alias /autodisc7 /echo SetDisc7
/squelch /alias /autodisc8 /echo SetDisc8
/squelch /alias /autodisc9 /echo SetDisc9
/squelch /alias /leashflex /echo SetLeashFlex
/squelch /alias /verbosity /echo SetVerbosity
/squelch /alias /channel /echo SetChannel
/squelch /alias /dynclose /echo Dynclose
/squelch /alias /lp /echo LinkParse
/squelch /alias /AutoDisarm /echo TogDisarm
/squelch /alias /Autotaunt /echo TogTaunt
/squelch /alias /MainTank /echo AutoTank

:EndAlias

|-- Update the Version information
/ini "WHSettings.ini" "General" "Version" "${WHversion}"

|-- Read in INI settings, if defined... Leashing is only stored TRUE if there is a Leash-holding Master!
/if (${Ini[RHSettings.ini,General,AAttack].NotEqual[NULL]}) /varset doAAttack ${Ini[RHSettings.ini,General,AAttack]}
/if (${Ini[WHSettings.ini,General,StopFightingHealth].NotEqual[NULL]}) /varset StopFightingHealth ${Ini[WHSettings.ini,General,StopFightingHealth]}
/if (${Ini[WHSettings.ini,General,AutoStick].NotEqual[NULL]}) /varset doStick ${Ini[WHSettings.ini,General,AutoStick]}
/if (${Ini[WHSettings.ini,General,Closeness].NotEqual[NULL]}) /varset closeness ${Ini[WHSettings.ini,General,Closeness]}
/if (${Ini[WHSettings.ini,General,Leashing].NotEqual[NULL]}) /varset doLeash ${Ini[WHSettings.ini,General,Leashing]}
/if (${Ini[WHSettings.ini,General,LeashHolder].NotEqual[NULL]}) /varset leashholder ${Ini[WHSettings.ini,General,LeashHolder]}
/if (${Ini[WHSettings.ini,General,LeashLength].NotEqual[NULL]}) /varset leashlength ${Ini[WHSettings.ini,General,LeashLength]}
/if (${Ini[WHSettings.ini,General,LeashFlex].NotEqual[NULL]}) /varset leashflex ${Ini[WHSettings.ini,General,LeashFlex]}
/if (${Ini[WHSettings.ini,General,AutoAssist].NotEqual[NULL]}) /varset doAutoassist ${Ini[WHSettings.ini,General,AutoAssist]}
/if (${Ini[WHSettings.ini,General,AssistPercentage].NotEqual[NULL]}) /varset assistpct ${Ini[WHSettings.ini,General,AssistPercentage]}
/if (${Ini[WHSettings.ini,General,MainAssist].NotEqual[NULL]}) /varset mainassist ${Ini[WHSettings.ini,General,MainAssist]}
/if (${Ini[WHSettings.ini,General,MainAssist].NotEqual[NULL]}) /varset firstassist ${Ini[WHSettings.ini,General,MainAssist]}
/if (${Ini[WHSettings.ini,General,SecondAssist].NotEqual[NULL]}) /varset secondassist ${Ini[WHSettings.ini,General,SecondAssist]}
/if (${Ini[WHSettings.ini,General,ThirdAssist].NotEqual[NULL]}) /varset thirdassist ${Ini[WHSettings.ini,General,ThirdAssist]}
/if (${Ini[WHSettings.ini,General,DynamicAggro].NotEqual[NULL]}) /varset doDynaggro ${Ini[WHSettings.ini,General,DynamicAggro]}
/if (${Ini[WHSettings.ini,General,AutoNinjaMode].NotEqual[NULL]}) /varset ninjamode ${Ini[WHSettings.ini,General,AutoNinjaMode]}
/if (${Ini[WHSettings.ini,General,AutoNinjaDistance].NotEqual[NULL]}) /varset ninjadist ${Ini[WHSettings.ini,General,AutoNinjaDistance]}
/if (${Ini[WHSettings.ini,General,WeaponSwitching].NotEqual[NULL]}) /varset doSwitch ${Ini[WHSettings.ini,General,WeaponSwitching]}
/if (${Ini[WHSettings.ini,General,TargetSwitching].NotEqual[NULL]}) /varset doTSwitch ${Ini[WHSettings.ini,General,TargetSwitching]}
/if (${Ini[WHSettings.ini,General,StickRangeToTarget].NotEqual[NULL]}) /varset rngtarget ${Ini[WHSettings.ini,General,StickRangeToTarget]}
/if (${Ini[WHSettings.ini,General,StickRangeToTank].NotEqual[NULL]}) /varset rngtank ${Ini[WHSettings.ini,General,StickRangeToTank]}
/if (${Ini[WHSettings.ini,General,AutoChicken].NotEqual[NULL]}) /varset doChicken ${Ini[WHSettings.ini,General,AutoChicken]}
/if (${Ini[WHSettings.ini,General,FortHealth].NotEqual[NULL]}) /varset Forthealth ${Ini[WHSettings.ini,General,FortHealth]}
/if (${Ini[WHSettings.ini,General,AutoDisc1].NotEqual[NULL]}) /varset doDisc1 ${Ini[WHSettings.ini,General,AutoDisc1]}
/if (${Ini[WHSettings.ini,General,Disc1].NotEqual[NULL]}) /varset disc1 ${Ini[WHSettings.ini,General,Disc1]}
/if (${Ini[WHSettings.ini,General,Disc1Duration].NotEqual[NULL]}) /varset disc1duration ${Ini[WHSettings.ini,General,Disc1Duration]}
/if (${Ini[WHSettings.ini,General,Disc1Reuse].NotEqual[NULL]}) /varset disc1reuse ${Ini[WHSettings.ini,General,Disc1Reuse]}
/if (${Ini[WHSettings.ini,General,Disc1Endurance].NotEqual[NULL]}) /varset disc1end ${Ini[WHSettings.ini,General,Disc1Endurance]}
/if (${Ini[WHSettings.ini,General,AutoDisc2].NotEqual[NULL]}) /varset doDisc2 ${Ini[WHSettings.ini,General,AutoDisc2]}
/if (${Ini[WHSettings.ini,General,Disc2].NotEqual[NULL]}) /varset disc2 ${Ini[WHSettings.ini,General,Disc2]}
/if (${Ini[WHSettings.ini,General,Disc2Duration].NotEqual[NULL]}) /varset disc2duration ${Ini[WHSettings.ini,General,Disc2Duration]}
/if (${Ini[WHSettings.ini,General,Disc2Reuse].NotEqual[NULL]}) /varset disc2reuse ${Ini[WHSettings.ini,General,Disc2Reuse]}
/if (${Ini[WHSettings.ini,General,Disc2Endurance].NotEqual[NULL]}) /varset disc2end ${Ini[WHSettings.ini,General,Disc2Endurance]}
/if (${Ini[WHSettings.ini,General,AutoDisc3].NotEqual[NULL]}) /varset doDisc3 ${Ini[WHSettings.ini,General,AutoDisc3]}
/if (${Ini[WHSettings.ini,General,Disc3].NotEqual[NULL]}) /varset disc3 ${Ini[WHSettings.ini,General,Disc3]}
/if (${Ini[WHSettings.ini,General,Disc3Duration].NotEqual[NULL]}) /varset disc3duration ${Ini[WHSettings.ini,General,Disc3Duration]}
/if (${Ini[WHSettings.ini,General,Disc3Reuse].NotEqual[NULL]}) /varset disc3reuse ${Ini[WHSettings.ini,General,Disc3Reuse]}
/if (${Ini[WHSettings.ini,General,Disc3Endurance].NotEqual[NULL]}) /varset disc3end ${Ini[WHSettings.ini,General,Disc3Endurance]}
/if (${Ini[WHSettings.ini,General,AutoDisc4].NotEqual[NULL]}) /varset doDisc4 ${Ini[WHSettings.ini,General,AutoDisc4]}
/if (${Ini[WHSettings.ini,General,Disc4].NotEqual[NULL]}) /varset disc4 ${Ini[WHSettings.ini,General,Disc4]}
/if (${Ini[WHSettings.ini,General,Disc4Duration].NotEqual[NULL]}) /varset disc4duration ${Ini[WHSettings.ini,General,Disc4Duration]}
/if (${Ini[WHSettings.ini,General,Disc4Reuse].NotEqual[NULL]}) /varset disc4reuse ${Ini[WHSettings.ini,General,Disc4Reuse]}
/if (${Ini[WHSettings.ini,General,Disc4Endurance].NotEqual[NULL]}) /varset disc4end ${Ini[WHSettings.ini,General,Disc4Endurance]}
/if (${Ini[WHSettings.ini,General,AutoDisc5].NotEqual[NULL]}) /varset doDisc5 ${Ini[WHSettings.ini,General,AutoDisc5]}
/if (${Ini[WHSettings.ini,General,Disc5].NotEqual[NULL]}) /varset disc5 ${Ini[WHSettings.ini,General,Disc5]}
/if (${Ini[WHSettings.ini,General,Disc5Duration].NotEqual[NULL]}) /varset disc5duration ${Ini[WHSettings.ini,General,Disc5Duration]}
/if (${Ini[WHSettings.ini,General,Disc5Reuse].NotEqual[NULL]}) /varset disc5reuse ${Ini[WHSettings.ini,General,Disc5Reuse]}
/if (${Ini[WHSettings.ini,General,Disc5Endurance].NotEqual[NULL]}) /varset disc5end ${Ini[WHSettings.ini,General,Disc5Endurance]}
/if (${Ini[WHSettings.ini,General,AutoDisc6].NotEqual[NULL]}) /varset doDisc6 ${Ini[WHSettings.ini,General,AutoDisc6]}
/if (${Ini[WHSettings.ini,General,Disc6].NotEqual[NULL]}) /varset disc6 ${Ini[WHSettings.ini,General,Disc6]}
/if (${Ini[WHSettings.ini,General,Disc6Duration].NotEqual[NULL]}) /varset disc6duration ${Ini[WHSettings.ini,General,Disc6Duration]}
/if (${Ini[WHSettings.ini,General,Disc6Reuse].NotEqual[NULL]}) /varset disc6reuse ${Ini[WHSettings.ini,General,Disc6Reuse]}
/if (${Ini[WHSettings.ini,General,Disc6Endurance].NotEqual[NULL]}) /varset disc6end ${Ini[WHSettings.ini,General,Disc6Endurance]}
/if (${Ini[WHSettings.ini,General,AutoDisc7].NotEqual[NULL]}) /varset doDisc7 ${Ini[WHSettings.ini,General,AutoDisc7]}
/if (${Ini[WHSettings.ini,General,Disc7].NotEqual[NULL]}) /varset disc7 ${Ini[WHSettings.ini,General,Disc7]}
/if (${Ini[WHSettings.ini,General,Disc7Duration].NotEqual[NULL]}) /varset disc7duration ${Ini[WHSettings.ini,General,Disc7Duration]}
/if (${Ini[WHSettings.ini,General,Disc7Reuse].NotEqual[NULL]}) /varset disc7reuse ${Ini[WHSettings.ini,General,Disc7Reuse]}
/if (${Ini[WHSettings.ini,General,Disc7Endurance].NotEqual[NULL]}) /varset disc7end ${Ini[WHSettings.ini,General,Disc7Endurance]}
/if (${Ini[WHSettings.ini,General,AutoDisc8].NotEqual[NULL]}) /varset doDisc8 ${Ini[WHSettings.ini,General,AutoDisc8]}
/if (${Ini[WHSettings.ini,General,Disc8].NotEqual[NULL]}) /varset disc8 ${Ini[WHSettings.ini,General,Disc8]}
/if (${Ini[WHSettings.ini,General,Disc8Duration].NotEqual[NULL]}) /varset disc8duration ${Ini[WHSettings.ini,General,Disc8Duration]}
/if (${Ini[WHSettings.ini,General,Disc8Reuse].NotEqual[NULL]}) /varset disc8reuse ${Ini[WHSettings.ini,General,Disc8Reuse]}
/if (${Ini[WHSettings.ini,General,Disc8Endurance].NotEqual[NULL]}) /varset disc8end ${Ini[WHSettings.ini,General,Disc8Endurance]}
/if (${Ini[WHSettings.ini,General,AutoDisc9].NotEqual[NULL]}) /varset doDisc9 ${Ini[WHSettings.ini,General,AutoDisc9]}
/if (${Ini[WHSettings.ini,General,Disc9].NotEqual[NULL]}) /varset disc9 ${Ini[WHSettings.ini,General,Disc9]}
/if (${Ini[WHSettings.ini,General,Disc9Duration].NotEqual[NULL]}) /varset disc9duration ${Ini[WHSettings.ini,General,Disc9Duration]}
/if (${Ini[WHSettings.ini,General,Disc9Reuse].NotEqual[NULL]}) /varset disc9reuse ${Ini[WHSettings.ini,General,Disc9Reuse]}
/if (${Ini[WHSettings.ini,General,Disc9Endurance].NotEqual[NULL]}) /varset disc9end ${Ini[WHSettings.ini,General,Disc9Endurance]}
/if (${Ini[WHSettings.ini,General,DynamicCloseness].NotEqual[NULL]}) /varset doDynclose ${Ini[WHSettings.ini,General,DynamicCloseess]}
/if (${Ini[WHSettings.ini,General,Verbosity].NotEqual[NULL]}) /varset verbosity ${Ini[WHSettings.ini,General,Verbosity]}
/if (${Ini[WHSettings.ini,General,Channel].NotEqual[NULL]}) /varset channel ${Ini[WHSettings.ini,General,Channel]}
/if (${Ini[WHSettings.ini,Weapons,Weapon1].NotEqual[NULL]}) /varset weapon1 ${Ini[WHSettings.ini,Weapons,Weapon1]}
/if (${Ini[WHSettings.ini,Weapons,Weapon2].NotEqual[NULL]}) /varset weapon2 ${Ini[WHSettings.ini,Weapons,Weapon2]}
/if (${Ini[WHSettings.ini,Weapons,SwitchText].NotEqual[NULL]}) /varset switchtext ${Ini[WHSettings.ini,Weapons,SwitchText]}
/if (${Ini[WHSettings.ini,General,AutoDisarm].NotEqual[NULL]}) /varset doDisarm ${Ini[WHSettings.ini,General,AutoDisarm]}
/if (${Ini[WHSettings.ini,General,AutoTaunt].NotEqual[NULL]}) /varset doTaunt ${Ini[WHSettings.ini,General,AutoTaunt]}
/if (${Ini[WHSettings.ini,General,Tanking].NotEqual[NULL]}) /varset isTanking ${Ini[WHSettings.ini,General,Tanking]}
/varset closenessdesired ${closeness}
/varset wstype ${FindItem[${weapon1}].Spell.SpellType}

|- Build Empty master list in WHSettings.ini file if it doesn't exist
/if (!${Ini[WHSettings.ini,Masters,Controller1].Length}) {
|- It's not in there yet
/for i 1 to 20
/ini "WHSettings.ini" "Masters" "Controller${i}" "Nobody"
/next i
}

/echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/echo LazyShammy's Warrior Helper (v${WHVersion}) Mod of RH v6.0
/echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
/echo Use "/WHhelp" to display help information
/echo WH Status

:ForeverLoop

|- Service any events

/doevents

|- If we're stunned or WH is paused, just service events

/if (${Me.State.Equal[STUN]} || ${isPaused}) {
/delay 2
/goto :ForeverLoop
}

|- While fighting or not fighting...

|- Turn attacking back on if enraged target, and no longer facing it
/if (${isEnraged} && ${Target.ID} && ${doAutoassist} && !${Me.Combat}) {
/call Check_Behind
/varset behindTarget ${Macro.Return}
/if (${Target.ID} && ${behindTarget}) {
/attack on
/if (${verbosity}>=1) /${channel} ** Attack re-started (No Enrage Risk): ${Target.CleanName}
}
}

|- Check if we should chicken out
/if (${doChicken} && (${Me.PctHPs}<=${Forthealth}) && !${chickentimer}) {
/if (${verbosity}>=1) /${channel} Autochicken to the rescue!
/if (!${Forttimer}) {
/disc Fortitude
/if (${verbosity}>=1) /${channel} Fortitude mode activated!
/varset Forttimer 40m
/varset Fortleactive 12s
} else {
/if (${verbosity}>=1) /${channel} ... or not! can't Fortitude ... Farewell!
/varset chickentimer 2m
}
}


|- Stop fighting if we lose our target
/if (${Me.Combat} && !${Target.ID}) /attack off

|- Are we suposed to stick to a target?
/if ((${Me.Combat} || ${strikeReady}) && ${Target.ID} && ${doStick} && (${Target.Distance}<${rngtarget}) && ${Target.Type.Equal[NPC]}) {

|- Check to see if we're too far from our tank (if applicable)
/if (${doAutoassist} && (${Spawn[${mainassist}].Distance}>${rngtank})) {
/if (${useMU} && ${Stick.Status.Equal[ON]}) /squelch /stick off
/goto :DoneSticking
}

|- Check to see if we're mounted and dismount if so
/if (${Me.Buff[Summon Drogmor].ID} || ${Me.Buff[Summon Horse].ID}) /dismount

|- Use MQ2MoveUtils ? If so, start sticking and bypass WH movement tools
/if (${Target.Class.Name.Equal[Destructible Object]}) {
/varset closeness 30
/delay 5
}
/if (${useMU}) {
/if (${Ini[WHSettings.ini,General,Tanking].Equal[FALSE]}) /varset isTanking FALSE
/if (${aggrotimer.Value} || ${Me.TargetOfTarget.Name.Equal[${Me}]}) /varset isTanking TRUE
/if (!${Stick.Status.Equal[ON]} || ${snuggleup}) {
/if (${isTanking}) {
/squelch /stick ${closeness}% mpause ${If[${Me.Underwater},uw,]}
} else {
/squelch /stick ${closeness}% behind mpause ${If[${Me.Underwater},uw,]}
}
/varset snuggleup FALSE
} else {
/if (${Stick.MoveBehind}) {
/if (${isTanking}) {
/squelch /stick off
/if (${verbosity}>=2) /${channel} Switched to frontal sticking...
}
} else {
/if (!${isTanking}) {
/squelch /stick off
/if (${verbosity}>=2) /${channel} Maneuvering behind target again...
}
}
}
/goto :DoneSticking
}

/if (${Target.ID}) /face ${If[${Me.Underwater},,nolook]}

|- If we're too far away to hit it, get 1 second closer, unless we can hit it in less time
/if (${Target.Distance}>${Math.Calc[${Target.MaxRangeTo}*${closeness}/100]}) {

|- Set current position first before potentially moving (in case we get stuck)
/varset X ${Me.X}
/varset Y ${Me.Y}

/if (!${Target.ID}) /goto :Foreverloop

|- Move
/keypress forward hold
/delay 1s ${Target.Distance}<${Math.Calc[${Target.MaxRangeTo}*${closeness}/100]}
/keypress forward

|- Check to see if we got stuck trying that
/if ((${Me.X}==${X}) && (${Me.Y}==${Y})) {
|- We're stuck, back off a second, move left or right (randomly) for .5 seconds
/if (${verbosity}>=2) /${channel} We're STUCK on something, backing up...
/keypress back hold
/delay 1s
/keypress back
/if (${Math.Rand[2]}) {
/varset strafedir STRAFE_LEFT
} else {
/varset strafedir STRAFE_RIGHT
}
/if (${verbosity}>=2) /${channel} Unsticking: Strafing ${strafedir} a half-second...
/keypress ${strafedir} hold
/delay 5
/keypress ${strafedir}
}
}

/if (!${Target.ID}) /goto :Foreverloop

|- If we are close enough to hit it (and don't have aggro), lets try to get behind it a little bit at a time

/if ((${Target.Distance}<=${Target.MaxRangeTo}) && !${aggrotimer.Value} && !${Me.TargetOfTarget.Name.Equal[${Me}]}) {

/call Check_Behind
/varset behindTarget ${Macro.Return}

|- If we're not behind it, strafe around it a little
/if (!${behindTarget}) {
|- Which way do we strafe?
/varcalc delta ${Me.Heading.Clock}-${Target.Heading.Clock}
/if (${delta}>6) /varcalc delta ${delta}-12
/if (${delta}<-6) /varcalc delta ${delta}+12
/if (${delta}<0) {
/varset strafedir STRAFE_LEFT
} else {
/varset strafedir STRAFE_RIGHT
}
|- Set current position first before moving (in case we get stuck)
/varset X ${Me.X}
/varset Y ${Me.Y}

/if (!${Target.ID}) /goto :Foreverloop

|- Execute a strafe in the correct direction
/keypress ${strafedir} hold
/delay 2
/keypress ${strafedir}
/if (${Target.ID}) /face fast ${If[${Me.Underwater},,nolook]}
|- Check if we're stuck and warn if so (go through target to fix it)
/if ((${Me.X}==${X}) && (${Me.Y}==${Y})) {
/if (${verbosity}>=2) /${channel} We're STUCK trying to get behind target!
/delay 1s
}
}
}
} else {
/if (${useMU} && ${Stick.Status.Equal[ON]}) /squelch /stick off
}
:DoneSticking

|- Check on switching weapons (assuming it's a buff-weapon and buff is down)

/if (${doSwitch} && ${wstype.Equal[Beneficial]}) {
/varset itemspellname ${FindItem[${weapon1}].Spell}
/if (${itemspellname.NotEqual[${Me.Buff[${itemspellname}]}]} && !${FindItem[${weapon1}].InvSlot.Name.Equal[mainhand]} && !${FindItem[${weapon1}].InvSlot.Name.Equal[offhand]}) {
/if (${verbosity}>=1) /${channel} ** Beneficial proc-weapon swapping...
/call Weapon_Swap "${weapon1}" "${weapon2}"
}
}

|- Are we fighting?

/if (${Me.Combat}) {
|- ** We are fighting **

|- Respond to enraged targets
/if (${isEnraged} && ${Target.ID}) {
/call Check_Behind
/varset behindTarget ${Macro.Return}
/if (${Target.ID} && !${behindTarget}) {
/attack off
/if (${verbosity}>=1) /${channel} ** Attack ceased (Enrage Risk): ${Target.CleanName}
}
}

|- If we're sneaking, stop... since it serves no purpose and affects strafing
/if (${Me.Sneaking}) /doability "Sneak"

|- Check up on our autoassist targets if applicable, and switch if MA switches (1 second checks)
/if (${doTSwitch} && ${doAutoassist} && ${Target.ID} && !${assisttimer}) {
/varset oldtargetID ${Target.ID}
/assist ${mainassist}
/varset assisttimer 1s
}

|- Did we just switch targets? If so, turn off attack and start the loop over!
/if (${doAutoassist} && ${Target.ID}!=${oldtargetID}) {
/if (${verbosity}>=1) /${channel} --> *SWITCH* target to: ${Target.CleanName}
/varset oldtargetID ${Target.ID}
/attack off
/delay 2
/varset assisttimer 1s
/goto :ForeverLoop
}

|- Check for leash tugging and move back to stake some if so
/if (${doLeash}) {
/if (${leashholder.Equal[Nobody]} && (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}>${leashlength})) {
/if (${verbosity}>=2) /${channel} CHOKE! We're at the leash's length! (${leashlength} ft.)
/if (${verbosity}>=1) /${channel} ** Autoassist is now OFF!
/varset doAutoassist FALSE
/attack off
/if (${useMU}) /squelch /stick off
/face ${If[${Me.Underwater},,nolook]} loc ${stakeY},${stakeX}
/keypress forward hold
/delay 1s ${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}<${Math.Calc[${leashlength}*${leashflex}/100]}
/keypress forward
|- Slow 180degree turns take time, and we may have turned off attack, so...
/goto :ForeverLoop
}
/if (!${leashholder.Equal[Nobody]} && ${Spawn[${leashholder}].ID} && (${Spawn[${leashholder}].Distance}>${leashlength})) {
/if (${verbosity}>=2) /${channel} CHOKE! Tugging on ${leashholder}'s leash! (${leashlength} ft.)
/if (${verbosity}>=1) /${channel} ** Autoassist is now OFF!
/varset doAutoassist FALSE
/attack off
/if (${useMU}) /squelch /stick off
/squelch /face ${If[${Me.Underwater},,nolook]} id ${Spawn[${leashholder}].ID}
/keypress forward hold
/delay 1s ${Spawn[${leashholder}].Distance}<${Math.Calc[${leashlength}*${leashflex}/100]}
/keypress forward
|- Slow 180degree turns take time, and we may have turned off attack, so...
/goto :ForeverLoop
}
|- Broken leash check
/if (!${leashholder.Equal[Nobody]} && !${Spawn[${leashholder}].ID}) {
/if (${verbosity}>=1) /${channel} ** Master DEAD or ZONED! Leash is BROKEN!
/varset doLeash FALSE
/varset leashholder Nobody
/ini "WHSettings.ini" "General" "Leashing" "${doLeash}"
/ini "WHSettings.ini" "General" "LeashHolder" "${leashholder}"
/goto :ForeverLoop
}
}

|- If Target is Box/Barrel/Etc
/if (${Target.Class.Name.Equal[Destructible Object]} && ${Me.Combat} && ${Target.Distance}<10) {
/open
/delay 7
/varset closeness ${closenessdesired}
/call NinjaLoot
}

|- Are we standing, have a target, have a Kick Ready?

/if (${Target.ID} && ${Me.Standing} && !${Me.Casting.ID} && (${Target.Distance}<${Math.Calc[${Target.MaxRangeTo}*${closeness}/100]})) {
/if (${Me.AbilityReady["Kick"]}) {
/doability "Kick"
/if (${verbosity}>=2) /${channel} kicking: ${Target.CleanName}
}
}

|- Are we standing, have a target, have Taunt ready?

/if (${doTaunt} && ${Target.ID} && ${Me.Standing} && !${Me.Casting.ID} && (${Target.Distance}<${Math.Calc[${Target.MaxRangeTo}*${closeness}/100]})) {
/if (${Me.AbilityReady["Taunt"]}) {
/doability "Taunt"
/if (${verbosity}>=2) /${channel} Taunting: ${Target.CleanName}
}
}


|- Are we trying to steal its weapon?

/if (${doDisarm} && ${Target.ID} && !${Me.Casting.ID} && (${Target.Distance}<15) && ${Me.AbilityReady["Disarm"]}) {
/if (${verbosity}>=2) /${channel} Disarming ${Target.CleanName}
/doability "Disarm"
}


|- Are we so hurt we should stop fighting for a bit?

/if (${Me.PctHPs}<=${StopFightingHealth}) {
/attack off
/if (${verbosity}>=1) /${channel} Getting my ass kicked, ceasing combat!
}

|- Shall we do our optional discs?

/if (${doDisc1} && ${disc1reusetimer}==0 && (${discactive}==0 || ${disc1duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc1end}) {
/if (${disc1durationtimer}==0) {
/disc ${disc1}
/if (${verbosity}>=1) /${channel} Disc #1: ${disc1} activated
/varset discactive ${disc1duration}s
/varset disc1durationtimer ${disc1duration}s
/varset disc1reusetimer ${disc1reuse}s
/delay 1s
}
}

/if (${doDisc2} && ${disc2reusetimer}==0 && (${discactive}==0 || ${disc2duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc2end}) {
/if (${disc2durationtimer}==0) {
/disc ${disc2}
/if (${verbosity}>=1) /${channel} Disc #2: ${disc2} activated
/varset discactive ${disc2duration}s
/varset disc2durationtimer ${disc2duration}s
/varset disc2reusetimer ${disc2reuse}s
/delay 1s
}
}

/if (${doDisc3} && ${disc3reusetimer}==0 && (${discactive}==0 || ${disc3duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc3end}) {
/if (${disc3durationtimer}==0) {
/disc ${disc3}
/if (${verbosity}>=1) /${channel} Disc #3: ${disc3} activated
/varset discactive ${disc3duration}s
/varset disc3durationtimer ${disc3duration}s
/varset disc3reusetimer ${disc3reuse}s
/delay 1s
}
}

/if (${doDisc4} && ${disc4reusetimer}==0 && (${discactive}==0 || ${disc4duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc4end}) {
/if (${disc4durationtimer}==0) {
/disc ${disc4}
/if (${verbosity}>=1) /${channel} Disc #4: ${disc4} activated
/varset discactive ${disc4duration}s
/varset disc4durationtimer ${disc4duration}s
/varset disc4reusetimer ${disc4reuse}s
/delay 1s
}
}

/if (${doDisc5} && ${disc5reusetimer}==0 && (${discactive}==0 || ${disc5duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc5end}) {
/if (${disc5durationtimer}==0) {
/disc ${disc5}
/if (${verbosity}>=1) /${channel} Disc #5: ${disc5} activated
/varset discactive ${disc5duration}s
/varset disc5durationtimer ${disc5duration}s
/varset disc5reusetimer ${disc5reuse}s
/delay 1s
}
}

/if (${doDisc6} && ${disc6reusetimer}==0 && (${discactive}==0 || ${disc6duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc6end}) {
/if (${disc6durationtimer}==0) {
/disc ${disc6}
/if (${verbosity}>=1) /${channel} Disc #6: ${disc6} activated
/varset discactive ${disc6duration}s
/varset disc6durationtimer ${disc6duration}s
/varset disc6reusetimer ${disc6reuse}s
/delay 1s
}
}

/if (${doDisc7} && ${disc7reusetimer}==0 && (${discactive}==0 || ${disc7duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc7end}) {
/if (${disc7durationtimer}==0) {
/disc ${disc7}
/if (${verbosity}>=1) /${channel} Disc #7: ${disc7} activated
/varset discactive ${disc7duration}s
/varset disc7durationtimer ${disc7duration}s
/varset disc7reusetimer ${disc7reuse}s
/delay 1s
}
}

/if (${doDisc8} && ${disc8reusetimer}==0 && (${discactive}==0 || ${disc8duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc8end}) {
/if (${disc8durationtimer}==0) {
/disc ${disc8}
/if (${verbosity}>=1) /${channel} Disc #8: ${disc8} activated
/varset discactive ${disc8duration}s
/varset disc8durationtimer ${disc8duration}s
/varset disc8reusetimer ${disc8reuse}s
/delay 1s
}
}

/if (${doDisc9} && ${disc9reusetimer}==0 && (${discactive}==0 || ${disc9duration}==0) && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc9end}) {
/if (${disc9durationtimer}==0) {
/disc ${disc9}
/if (${verbosity}>=1) /${channel} Disc #9: ${disc9} activated
/varset discactive ${disc9duration}s
/varset disc9durationtimer ${disc9duration}s
/varset disc9reusetimer ${disc9reuse}s
/delay 1s
}
}

} else {
|- ** We are not fighting

|- If we're not hiding or moving, check clicky maintained spells
/if (${Me.Invis} || ${Me.Moving} || ${clicktimer} || ${Me.State.Equal[BIND]} || ${Me.Combat}) /goto :DoneItemChecks
/varset i 1
:ItemCheckLoop
/varset ialias ${Ini[WHItems.ini].Arg[${i},|]}
/if (${ialias.NotEqual[NULL]}) {
|- Obtained an itemalias from the WHItems.ini file
|- We supposed to keep this spell up?
/if (${Ini[WHItems.ini,${ialias},KeepUp].Equal[FALSE]}) /goto :NextItem
|- Scan the item's bounce list for the active bouncers
/varset bouncenum 1
/varset doIclick TRUE
:BounceCheckLoop
/varset ibounce ${Ini[WHItems.ini,${ialias},BounceOff${bouncenum}]}
/if (${ibounce.NotEqual[NULL]}) {
/if (${ibounce.Equal[${Me.Buff[${ibounce}]}]}) /varset doIclick FALSE
} else /goto :DoneBounceChecks
/varcalc bouncenum ${bouncenum}+1
/goto :BounceCheckLoop
:DoneBounceChecks
|- By now we won't click the item if a bouncer spell is on us
|- Just have to check to see if the existing buff is on too
/varset itemspellname ${FindItem[${Ini[WHItems.ini,${ialias},FullName]}].Spell}
/if (${itemspellname.Equal[${Me.Buff[${itemspellname}]}]}) /varset doIclick FALSE
|- Finally, do it if we should
/if (${doIclick}) /docommand /iclick ${ialias}
|- Did we fail to find that previous item? (i.e. Dead and naked at bind point!)
/if (${clicktimer}) /goto :DoneItemChecks
:NextItem
/varcalc i ${i}+1
} else /goto :DoneItemChecks
/goto :ItemCheckLoop
:DoneItemChecks

|- Put the closeness value back to the user's desired setting...
/varset closeness ${closenessdesired}


|- If we're set to autoassist, lets find a target
/if (${doAutoassist} && !${isEnraged} && !${Me.Casting.ID} && ${Me.State.NotEqual[BIND]}) {
|- Is main assist alive/in-zone?
/if (!${assisttimer} && !${strikeReady}) {
|- Lets try all the assists in priority order until we get an NPC to whack on
/if (!${Me.Casting.ID}) /assist ${firstassist}
/delay 1
/if (${Target.ID} && ${Target.Type.Equal[NPC]}) /goto :EngageCheck
/if (!${Me.Casting.ID}) /assist ${secondassist}
/delay 1
/if (${Target.ID} && ${Target.Type.Equal[NPC]}) /goto :EngageCheck
/if (!${Me.Casting.ID}) /assist ${thirdassist}
/delay 1
/if (${Target.ID} && ${Target.Type.Equal[NPC]}) /goto :EngageCheck
|- If we got here and don't have a target, tanks are invalid or no fighting is going on
/goto :EndAutoassist
:EngageCheck
/varset oldtargetID ${Target.ID}
/varset assisttimer ${Math.Calc[10+${Math.Rand[5]}].Int}
|- Who is the valid tank?
/if (${firstassist.Equal[Main]} || (${Math.Distance[${Target.Y},${Target.X}:${Spawn[pc ${firstassist}].Y},${Spawn[pc ${firstassist}].X}]}<${Target.MaxRangeTo})) {
/varset mainassist ${firstassist}
/goto :LastAttackCheck
}
/if (${secondassist.Equal[Main]} || (${Math.Distance[${Target.Y},${Target.X}:${Spawn[pc ${secondassist}].Y},${Spawn[pc ${secondassist}].X}]}<${Target.MaxRangeTo})) {
/varset mainassist ${secondassist}
/goto :LastAttackCheck
}
/if (${thirdassist.Equal[Main]} || (${Math.Distance[${Target.Y},${Target.X}:${Spawn[pc ${thirdassist}].Y},${Spawn[pc ${thirdassist}].X}]}<${Target.MaxRangeTo})) {
/varset mainassist ${thirdassist}
/goto :LastAttackCheck
}
/goto :EndAutoassist
:LastAttackCheck
|- Do we have an NPC targeted and is it hurt enough to attack?
/if (${Target.PctHPs}<=${assistpct} && ${Target.Animation}!=32 && ${Target.Animation}!=110) {
/if (${verbosity}>=1) /${channel} --> Assisting ${mainassist} on ${Target.CleanName} @ (${Target.PctHPs}%) HPs
/echo Seeking a Victim...
/attack on
/goto :Foreverloop
}
}
}
:EndAutoassist


|- We could be on a leash, if so move 1s closer to our stake point (or master)\\

/if (${doLeash} && !${strikeReady}) {
/varset lastevent Event_Leashing
:LeashStart
|- Look for new events
/doevents
/if (!${lastevent.Equal[Event_Leashing]}) /goto :ForeverLoop
/if (${Me.Combat}) /goto :ForeverLoop
/if (${leashholder.Equal[Nobody]} && (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}>${Math.Calc[${leashlength}*${leashflex}/100]})) {
/if (${verbosity}>=2) /${channel} Moving closer to the Stake... ${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]} ft. away
/face ${If[${Me.Underwater},,nolook]} loc ${stakeY},${stakeX}
/keypress forward hold
/delay 1s ${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}<${Math.Calc[${leashlength}*${leashflex}/100]}
/keypress forward
/if (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}<${Math.Calc[${leashlength}*${leashflex}/100]}) {
/if (${verbosity}>=2) /${channel} Arrived near enough to the Stake.
/face fast ${If[${Me.Underwater},,nolook]} away loc ${stakeY},${stakeX}
/goto :LeashEnd
}
/goto :LeashStart
}
/if (!${leashholder.Equal[Nobody]} && ${Spawn[${leashholder}].ID} && (${Spawn[${leashholder}].Distance}>${Math.Calc[${leashlength}*${leashflex}/100]})) {
/if (${verbosity}>=2) /${channel} Moving closer to ${leashholder}... ${Spawn[${leashholder}].Distance} ft. away
/if (${Target.ID}!=${Spawn[${leashholder}].ID}) /target id ${Spawn[${leashholder}].ID}
/if (${Me.Combat}) /attack off
/face ${If[${Me.Underwater},,nolook]}
/keypress forward hold
/delay 1s ${Spawn[${leashholder}].Distance}<${Math.Calc[${leashlength}*${leashflex}/100]}
/keypress forward
/if (${Spawn[${leashholder}].Distance}<${Math.Calc[${leashlength}*${leashflex}/100]}) {
/if (${verbosity}>=2) /${channel} Arrived near enough to Master (${leashholder}).
/goto :LeashEnd
}
/goto :LeashStart
}
|- Broken leash check
/if (!${leashholder.Equal[Nobody]} && !${Spawn[${leashholder}].ID}) {
/if (${verbosity}>=1) /${channel} ** Master DEAD or ZONED! Leash is BROKEN!
/varset doLeash FALSE
/varset leashholder Nobody
/ini "WHSettings.ini" "General" "Leashing" "${doLeash}"
/ini "WHSettings.ini" "General" "LeashHolder" "${leashholder}"
/goto :LeashEnd
}
:LeashEnd
}
}
/goto :ForeverLoop
/return

|---- SUBROUTINES

Sub Check_Behind
/declare behindIt FALSE
|- Are we behind our target?
/for i -1 to 1
/varcalc dir (${Target.Heading.Clock}+${i})%12
/if (${dir}<1) /varcalc dir ${dir}+12
/if (${dir}>12) /varcalc dir ${dir}-12
/if (${dir} == ${Me.Heading.Clock}) /varset behindIt TRUE
/next i
/return ${behindIt}

Sub Weapon_Swap(string weapon, string wieldedweapon)
|- Is it in a Bag?
/declare camefrom ${FindItem[${weapon}].InvSlot}
/declare goingto ${FindItem[${wieldedweapon}].InvSlot}
/if (${verbosity}>=2) /${channel} ** Looking for weapon: ${weapon}
/if (${FindItem[${weapon}].InvSlot.Pack}) {
:OpenPack
/if (!${Window[${FindItem[${weapon}].InvSlot.Pack.Name}].Open}) {
/itemnotify ${FindItem[${weapon}].InvSlot.Pack.Name} rightmouseup
/delay 2
/goto :OpenPack
}
:GrabItem
/if (!${Cursor.ID}) {
/itemnotify ${InvSlot[${camefrom}]} leftmouseup
/delay 2
/goto :GrabItem
}
/declare weaponID int local ${Cursor.ID}
:SwapIt
/if (${Cursor.ID}==${weaponID}) {
/itemnotify ${InvSlot[${goingto}]} leftmouseup
/delay 2
/goto :SwapIt
}
/delay 2
/if (${verbosity}>=2) /${channel} ** Swapping out: ${weapon}
/itemnotify ${InvSlot[${camefrom}]} leftmouseup
/delay 2
/if (${Cursor.ID}) {
/if (${verbosity}>=1) /${channel} ** Failed to use existing slot, dropping to inventory!
/autoinv
}
:ClosePack
/if (${Window[${InvSlot[${camefrom}].Pack.Name}].Open}) {
/itemnotify ${InvSlot[${camefrom}].Pack.Name} rightmouseup
/delay 2
/goto :ClosePack
}
} else {
|- It's in the main inventory
/if (${FindItem[${weapon}].InvSlot}) {
/itemnotify ${FindItem[${weapon}].InvSlot} leftmouseup
/delay 2
/itemnotify ${InvSlot[${goingto}]} leftmouseup
/delay 2
/if (${verbosity}>=2) /${channel} ** Swapping out: ${weapon}
/itemnotify ${InvSlot[${camefrom}]} leftmouseup
/delay 2
/if (${Cursor.ID}) {
/if (${verbosity}>=1) /${channel} ** Failed to use existing slot, dropping to inventory!
/autoinv
}
} else {
/if (${verbosity}>=1) /${channel} ** "${weapon}" not found!
}
}
/return

Sub NinjaLoot
|- Ninja the corpse's loot, if applicable
/if (${ninjamode.NotEqual[OFF]}) {
/declare LootTotal int local -1
/declare LootSlot int local
|- Get NPC corpse on target and continue if possible

/squelch /target npc corpse radius ${ninjadist}
/if (${Target.Type.NotEqual[CORPSE]} || !${Target.ID}) {
/if (${verbosity}>=1) /${channel} ** NPC corpse out of range or already looted!
/return
}
|- Get 5 seconds (max) closer; warning, no detecting being stuck!
/face ${If[${Me.Underwater},,nolook]} fast
/keypress forward hold
/delay 5s ${Target.Distance}<5
/keypress forward
|- Open up the loot window
/loot
/delay 1s
/if (${Me.State.NotEqual[BIND]}) {
/if (${verbosity}>=1) /${channel} ** Massive lag or error getting to corpse. Aborting!
/return
}
/if (${verbosity}>=1) /${channel} ** Looting ${Target.CleanName}
|- Get item count accurately
:LootLag
/if (${LootTotal}!=${Corpse.Items}) {
/varset LootTotal ${Corpse.Items}
/delay 5
/goto :LootLag
}
/if (!${LootTotal}) {
/if (${verbosity}>=1) /${channel} ** Empty corpse!
/goto :DoneLooting
}
|- Loot Loop
/for LootSlot 1 to ${LootTotal}
|- Check for full inventory
/if (!${Me.FreeInventory}) {
/beep
/if (${verbosity}>=1) /${channel} ** INVENTORY FULL !
/varset ninjamode OFF
/if (${verbosity}>=1) /${channel} ** AutoNinja is now OFF!
/goto :DoneLooting
}
|- Loot item if we should, skip it if not
/if (${Corpse.Item[${LootSlot}].ID}) {
/if (!${Corpse.Item[${LootSlot}].NoDrop}) /goto :LootItem
/if (${Corpse.Item[${LootSlot}].NoDrop} && ${ninjamode.Equal[ALL]}) {
/if (${verbosity}>=1) /${channel} ** Looting NODROP Item: ${Corpse.Item[${LootSlot}].Name}
/goto :LootItem
}
}
/if (${verbosity}>=1) /${channel} ** Skipping Item: ${Corpse.Item[${LootSlot}].Name}
/goto :SkipIt
:LootItem
/itemnotify loot${LootSlot} rightmouseup
/delay 3
/if (${Corpse.Item[${LootSlot}].ID}) {
/delay 2
/goto :LootItem
}
:SkipIt
/next LootSlot
/if (${verbosity}>=1) /${channel} ** Done looting ${Target.CleanName}
:DoneLooting
/delay 5
/notify LootWnd DoneButton leftmouseup
/delay 5
}

/return
|---- EVENTS

Sub Event_TogAAttack
/varset lastevent Event_TogAAttack
/if (${doAAttack}) {
/varset doAAttack FALSE
/if (${verbosity}>=1) /${channel} ** Auto-Attacking target when hit is now OFF!
} else {
/varset doAAttack TRUE
/if (${verbosity}>=1) /${channel} ** Auto-Attacking target when hit is now ON!
}
/ini "RHSettings.ini" "General" "AAttack" "${doAAttack}"
/return

Sub Event_AttackOn
/varset lastevent Event_AttackOn
/if (${verbosity}>=1) /${channel} Autoattack activated! Target: ${Target.CleanName}
/varset acquiretimer 2s
/return

Sub Event_AttackOff
/varset lastevent Event_AttackOff
/if (${verbosity}>=1) /${channel} Autoattack turned off! Target: ${Target.CleanName}
/return

Sub Event_Enraged
/varset lastevent Event_Enraged
/if (${verbosity}>=1) /${channel} Enrage detected! Target: ${Target.CleanName}
/varset isEnraged TRUE
/return

Sub Event_NLEnraged
/varset lastevent Event_NLEnraged
/if (${verbosity}>=1) /${channel} Enrage done! Target: ${Target.CleanName}
/varset isEnraged FALSE
/if (${Target.ID} && ${doAutoassist}) /attack on
/return

Sub Event_Exp(string Line)
/varset lastevent Event_Exp
|- Ignore leadership experience event triggers (redundant trigger)
/if (${Line.Find[leadership]}) /return

|- Manage aggro control here optionally
/if (${doDynaggro} && ${doAutoassist}) {
/if (${gotHit}) {
|- Got hurt that fight, drop it 1%
/if (${assistpct}>1) /varcalc assistpct ${assistpct}-1
/varset gotHit FALSE
/if (${verbosity}>=1) /${channel} ** Had Aggro! Reducing assist% to ${assistpct}%
} else {
|- Did not get hurt that fight, raise it 1%
/if (${assistpct}<99) /varcalc assistpct ${assistpct}+1
/if (${verbosity}>=1) /${channel} ** No Aggro! Raising assist% to ${assistpct}%
}
}

|- Experience calculation and reporting
/if (${verbosity}>=1) /${channel} ** XP-Delta: REG (${Math.Calc[${Me.PctExp}-${Exp2}]}%), AA (${Math.Calc[${Me.PctAAExp}-${AAExp}]}%), LDR (${Math.Calc[${Me.PctGroupLeaderExp}-${LDExp}]}%)
/varset LDExp ${Me.PctGroupLeaderExp}
/varset AAExp ${Me.PctAAExp}
/varset Exp2 ${Me.PctExp}

|- If target died while enraged, reset it so autoassist isn't broken...
/varset isEnraged FALSE

|- Do weapon swapping (back to weapon1), if applicable
/if (${doSwitch} && ${wstype.Equal[Detrimental]}) {
/call Weapon_Swap "${weapon1}" "${weapon2}"
}
/return

Sub Event_Slain
/varset lastevent Event_Slain
/call NinjaLoot
/return

Sub Event_Zoned
/varset lastevent Event_Zoned
/if (${verbosity}>=1) /${channel} ** Zoned... Setting Leash and Autoassist to OFF!
/varset doLeash FALSE
/varset doAutoassist FALSE
/ini "WHSettings.ini" "General" "AutoAssist" "${doAutoassist}"
/ini "WHSettings.ini" "General" "Leashing" "${doLeash}"
/return

Sub Event_TooFarAway
/varset lastevent Event_TooFarAway
/if (${doDynclose} && !${acquiretimer}) {
/if (${verbosity}>=1) /${channel} ** Too far away - Getting 20% closer now!
/varset closeness ${Math.Calc[${closeness}*0.8].Int}
/if (${closeness}<20) /varset closeness 20
/varset acquiretimer 2s
/varset snuggleup TRUE
}
/return


Sub Event_SetStopFighting(string Line)
/varset lastevent Event_SetStopFighting
/if (${Line.Arg[3].Length}) /varset StopFightingHealth ${Line.Arg[3]}
/if ((${StopFightingHealth}<0) || (${StopFightingHealth}>100)) {
/if (${verbosity}>=0) /${channel} Whacko stopfighting percentage input! Defaulting...
}
/if (${verbosity}>=0) /${channel} ** Cease Combat when at: ${StopFightingHealth}% HP
/ini "WHSettings.ini" "General" "StopFightingHealth" "${StopFightingHealth}"
/return

Sub Event_TogStick
/varset lastevent Event_TogStick
/if (${doStick}) {
/varset doStick FALSE
/if (${verbosity}>=0) /${channel} ** Auto-Sticking target is now OFF!
} else {
/varset doStick TRUE
/if (${verbosity}>=0) /${channel} ** Auto-Sticking target is now ON!
}
/ini "WHSettings.ini" "General" "AutoStick" "${doStick}"
/return

Sub Event_TogLeash(string Line)
/varset lastevent Event_TogLeash
/if (${Line.Arg[3].Equal[ON]}) {
/varset doLeash TRUE
/if (${verbosity}>=0) /${channel} ** Leashing is now ON!
/ini "WHSettings.ini" "General" "Leashing" "${doLeash}"
} else /if (${Line.Arg[3].Equal[OFF]} || (${Int[${Line.Arg[3]}]}<=0)) {
/varset doLeash FALSE
/varset leashholder Nobody
/if (${verbosity}>=0) /${channel} ** Leashing is now OFF!
/ini "WHSettings.ini" "General" "Leashing" "${doLeash}"
} else {
/if (${Line.Arg[4].Length}) {
/varset leashholder ${Line.Arg[4]}
/if (${Spawn[${leashholder}].ID}) {
/varset doLeash TRUE
/varset leashlength ${Int[${Line.Arg[3]}]}
/if (${verbosity}>=0) /${channel} ** Leashing is now ON! Leashlength: ${leashlength} ft.
/if (${verbosity}>=0) /${channel} ** Leash-holding master is: ${leashholder}
/ini "WHSettings.ini" "General" "Leashing" "${doLeash}"
} else {
|- This spawn/thing/target doesn't exist
/if (${verbosity}>=0) /${channel} ** Can't find "${leashholder}" -- Who is that?!
/if (${verbosity}>=0) /${channel} ** Leashing is now OFF!
/varset doLeash FALSE
/varset leashholder Nobody
}
} else {
/varset doLeash TRUE
/varset leashholder Nobody
/varset leashlength ${Int[${Line.Arg[3]}]}
/varset stakeX ${Me.X}
/varset stakeY ${Me.Y}
/if (${verbosity}>=0) /${channel} ** Leashing is now ON! Leashlength: ${leashlength} ft.
/if (${verbosity}>=0) /${channel} ** Stake planted at X:${stakeX}, Y:${stakeY}
}
}
/ini "WHSettings.ini" "General" "LeashHolder" "${leashholder}"
/ini "WHSettings.ini" "General" "LeashLength" "${leashlength}"
/return

Sub Event_SetLeashFlex(string Line)
/varset lastevent Event_SetLeashFlex
/if (${Line.Arg[3].Length}) /varset leashflex ${Line.Arg[3]}
/if ((${leashflex}<10) || (${leashflex}>101)) {
/if (${verbosity}>=0) /${channel} Leash flexibility must be between 10 and 100! Defaulting to 10...
/varset leashflex 10
}
/if (${verbosity}>=0) /${channel} ** Leash Flexibility: ${leashflex}%
/ini "WHSettings.ini" "General" "LeashFlex" "${leashflex}"
/return

Sub Event_TogAuto(string Line)
/varset lastevent Event_TogAuto
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doAutoassist FALSE
/if (${verbosity}>=0) /${channel} ** Autoassist is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doAutoassist TRUE
/if (${verbosity}>=0) /${channel} ** Autoassist is now ON!
} else {
/varset doAutoassist TRUE
/if (${Line.Arg[3].Length}) /varset firstassist ${Line.Arg[3]}
/varset mainassist ${firstassist}
/if (${Line.Arg[4]} > 0) /varset assistpct ${Line.Arg[4]}
/if (${verbosity}>=0) /${channel} ** Autoassist is now ON!
/if (${verbosity}>=0) /${channel} ** Assisting: ${mainassist} @${assistpct}% target health
/if (${verbosity}>=0) /${channel} ** SA is ${secondassist} & TA is ${thirdassist}
}
/ini "WHSettings.ini" "General" "AutoAssist" "${doAutoassist}"
/ini "WHSettings.ini" "General" "MainAssist" "${firstassist}"
/ini "WHSettings.ini" "General" "AssistPercentage" "${assistpct}"
/return

Sub Event_TogPause
/varset lastevent Event_TogPause
/beep
/if (${isPaused}) {
/varset isPaused FALSE
/if (${verbosity}>=0) /${channel} ** Warrior Helper is now RESUMING!
} else {
/varset isPaused TRUE
/if (${verbosity}>=0) /${channel} ** Warrior Helper is now PAUSED!
}
/return

Sub Event_TogDynaggro
/varset lastevent Event_TogDynaggro
/if (${doDynaggro}) {
/varset doDynaggro FALSE
/if (${verbosity}>=0) /${channel} ** Dynamic Aggro Control is now OFF!
} else {
/varset doDynaggro TRUE
/if (${verbosity}>=0) /${channel} ** Dynamic Aggro Control is now ON!
}
/ini "WHSettings.ini" "General" "DynamicAggro" "${doDynaggro}"
/return

Sub Event_TogDynclose
/varset lastevent Event_TogDynclose
/if (${doDynclose}) {
/varset doDynclose FALSE
/if (${verbosity}>=0) /${channel} ** Dynamic Closeness Control is now OFF!
} else {
/varset doDynclose TRUE
/if (${verbosity}>=0) /${channel} ** Dynamic Closeness Control is now ON!
}
/ini "WHSettings.ini" "General" "DynamicCloseness" "${doDynclose}"
/return

Sub Event_TogDisarm
/varset lastevent Event_TogDisarm
/if (${doDisarm}) {
/varset doDisarm FALSE
/if (${verbosity}>=0) /${channel} ** Auto-Disarming is now OFF!
} else {
/varset doDisarm TRUE
/if (${verbosity}>=0) /${channel} ** Auto-Disarming is now ON!
}
/ini "WHSettings.ini" "General" "AutoDisarm" "${doDisarm}"
/return

Sub Event_TogTaunt
/varset lastevent Event_TogTaunt
/if (${doTaunt}) {
/varset doTaunt FALSE
/if (${verbosity}>=0) /${channel} ** Auto-Taunting is now OFF!
} else {
/varset doTaunt TRUE
/if (${verbosity}>=0) /${channel} ** Auto-Taunting is now ON!
}
/ini "WHSettings.ini" "General" "AutoTaunt" "${doTaunt}"
/return

Sub Event_TogTank
/varset lastevent Event_TogTank
/if (${isTanking}) {
/varset isTanking FALSE
/if (${verbosity}>=0) /${channel} ** Tanking is now OFF!
} else {
/varset isTanking TRUE
/if (${verbosity}>=0) /${channel} ** Auto-Taunting is now ON!
}
/ini "WHSettings.ini" "General" "Tanking" "${isTanking}"
/return

Sub Event_TogTSwitch
/varset lastevent Event_TogTSwitch
/if (${doTSwitch}) {
/varset doTSwitch FALSE
/if (${verbosity}>=0) /${channel} ** Auto-Target Switching is now OFF!
} else {
/varset doTSwitch TRUE
/if (${verbosity}>=0) /${channel} ** Auto-Target Switching is now ON!
}
/ini "WHSettings.ini" "General" "TargetSwitching" "${doTSwitch}"
/return

Sub Event_SetCloseness(string Line)
/varset lastevent Event_SetCloseness
/if (${Line.Arg[3].Length}) /varset closeness ${Line.Arg[3]}
/if ((${closeness}<1) || (${closeness}>100)) {
/if (${verbosity}>=0) /${channel} Whacko closeness percentage input! Defaulting...
/varset closeness 70
}
/varset closenessdesired ${closeness}
/if (${verbosity}>=0) /${channel} ** AutoStick: ${doStick}, Closeness: ${closeness}
/ini "WHSettings.ini" "General" "Closeness" "${closeness}"
/return

Sub Event_SetFirstassist(string Line)
/varset lastevent Event_SetFirstassist
/if (${Line.Arg[3].Length}) /varset firstassist ${Line.Arg[3]}
/varset mainassist ${firstassist}
/if (${verbosity}>=0) /${channel} ** Assisting: ${mainassist} @${assistpct}% target health
/if (${verbosity}>=0) /${channel} ** SA is ${secondassist} & TA is ${thirdassist}
/ini "WHSettings.ini" "General" "MainAssist" "${firstassist}"
/return

Sub Event_SetSecondassist(string Line)
/varset lastevent Event_SetSecondassist
/if (${Line.Arg[3].Length}) /varset secondassist ${Line.Arg[3]}
/if (${verbosity}>=0) /${channel} ** Assisting: ${mainassist} @${assistpct}% target health
/if (${verbosity}>=0) /${channel} ** SA is ${secondassist} & TA is ${thirdassist}
/ini "WHSettings.ini" "General" "SecondAssist" "${secondassist}"
/return

Sub Event_SetThirdassist(string Line)
/varset lastevent Event_SetThirdassist
/if (${Line.Arg[3].Length}) /varset thirdassist ${Line.Arg[3]}
/if (${verbosity}>=0) /${channel} ** Assisting: ${mainassist} @${assistpct}% target health
/if (${verbosity}>=0) /${channel} ** SA is ${secondassist} & TA is ${thirdassist}
/ini "WHSettings.ini" "General" "ThirdAssist" "${thirdassist}"
/return

Sub Event_SetAutoNinja(string Line)
/varset lastevent Event_SetAutoNinja
|- Set the new ninja distance, if supplied
/if (${Line.Arg[4].Length}) /varset ninjadist ${Line.Arg[4]}
|- Set the mode, toggle off if unknown
/if (${Line.Arg[3].Equal[ALL]}) {
/varset ninjamode ALL
/if (${verbosity}>=0) /${channel} ** AutoNinja ON - Will loot ALL items
/docommand /lootnodrop never
} else /if ((${Line.Arg[3].Equal[DROP]}) || (${Line.Arg[3].Equal[DROPABLE]})) {
/varset ninjamode DROPABLE
/if (${verbosity}>=0) /${channel} ** AutoNinja ON - Will loot only DROPABLE items
/docommand /lootnodrop never
} else {
/varset ninjamode OFF
/if (${verbosity}>=0) /${channel} ** AutoNinja is now OFF!
}
/if (${verbosity}>=0) /${channel} ** AutoNinja distance is ${ninjadist} ft.
/ini "WHSettings.ini" "General" "AutoNinjaMode" "${ninjamode}"
/ini "WHSettings.ini" "General" "AutoNinjaDistance" "${ninjadist}"
/return
Last edited by Hazado on Wed Aug 05, 2009 4:52 am, edited 6 times in total.

Hazado
decaying skeleton
decaying skeleton
Posts: 6
Joined: Mon Jul 27, 2009 2:01 am

Post by Hazado » Tue Aug 04, 2009 5:04 am

Sub Event_SetWeaponSwitch(string Line)
/varset lastevent Event_SetWeaponSwitch
|- Sanity Check
/if (${Line.Arg[3].Equal[OFF]} || !${Line.Arg[5].Length} || ${Line.Arg[6].Length}) {
/varset doSwitch FALSE
/if (${verbosity}>=0) /${channel} ** Auto Weapon Switching is OFF
/goto :SaveSwitchSettings
}
|- Set the weaponswitching information
/if (${Line.Arg[3].Length}) /varset weapon1 ${Line.Arg[3]}
/if (${Line.Arg[4].Length}) /varset switchtext ${Line.Arg[4]}
/if (${Line.Arg[5].Length}) /varset weapon2 ${Line.Arg[5]}
/varset doSwitch TRUE
/if (${verbosity}>=0) /${channel} ** Auto Weapon Switching is ON
/if (${verbosity}>=0) /${channel} ** ${weapon1} will be swapped out for ${weapon2}
/if (${verbosity}>=0) /${channel} ** if the text "${switchtext}" is encountered.

:SaveSwitchSettings
/doevents flush
/ini "WHSettings.ini" "General" "WeaponSwitching" "${doSwitch}"
/ini "WHSettings.ini" "Weapons" "Weapon1" "${weapon1}"
/ini "WHSettings.ini" "Weapons" "Weapon2" "${weapon2}"
/ini "WHSettings.ini" "Weapons" "SwitchText" "${switchtext}"
/varset wstype ${FindItem[${weapon1}].Spell.SpellType}
/return

Sub Event_SetStickDist(string Line)
/varset lastevent Event_SetStickDist
|- Sanity Check
/if (!${Line.Arg[3].Length} || !${Line.Arg[4].Length}) {
/if (${verbosity}>=0) /${channel} ** What? Bad Syntax.
/if (${verbosity}>=0) /${channel} Syntax:
/if (${verbosity}>=0) /${channel} /stickdist <range_to_target> <range_to_tank>
/return
}
|- Set the weaponswitching information
/varset rngtarget ${Line.Arg[3]}
/varset rngtank ${Line.Arg[4]}
/if (${verbosity}>=0) /${channel} ** Auto Stick: ${doStick}, Closeness: ${closeness}% MaxRange
/if (${verbosity}>=0) /${channel} ** -- Range to Target: ${rngtarget} -- Range to Tank: ${rngtank}
/ini "WHSettings.ini" "General" "StickRangeToTarget" "${rngtarget}"
/ini "WHSettings.ini" "General" "StickRangeToTank" "${rngtank}"
/return

Sub Event_SetChicken(string Line)
/varset lastevent Event_SetChicken
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doChicken FALSE
/if (${verbosity}>=0) /${channel} ** Autochicken is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doChicken TRUE
/if (${verbosity}>=0) /${channel} ** Autochicken is now ON!
} else {
/varset doChicken TRUE
/if (${Line.Arg[3].Length}) /varset Voidhealth ${Line.Arg[3]}
/if (${verbosity}>=0) /${channel} ** Auto Chicken: ${doChicken} -- Voiddance: ${Voidhealth}%
}
/ini "WHSettings.ini" "General" "AutoChicken" "${doChicken}"
/ini "WHSettings.ini" "General" "VoidHealth" "${Voidhealth}"
/return

Sub Event_SetDisc1(string Line)
/varset lastevent Event_SetDisc1
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc1 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc1}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc1 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc1}" is now ON!
} else {
/varset doDisc1 TRUE
/if (${Line.Arg[3].Length}) /varset disc1 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc1duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc1reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc1end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #1: ${doDisc1} -> ${disc1}/${disc1reuse} seconds - End: ${disc1end}
}

/ini "WHSettings.ini" "General" "AutoDisc1" "${doDisc1}"
/ini "WHSettings.ini" "General" "Disc1" "${disc1}"
/ini "WHSettings.ini" "General" "Disc1Duration" "${disc1duration}"
/ini "WHSettings.ini" "General" "Disc1Reuse" "${disc1reuse}"
/ini "WHSettings.ini" "General" "Disc1Endurance" "${disc1end}"
/return

Sub Event_SetDisc2(string Line)
/varset lastevent Event_SetDisc2
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc2 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc2}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc2 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc2}" is now ON!
} else {
/varset doDisc2 TRUE
/if (${Line.Arg[3].Length}) /varset disc2 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc2duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc2reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc2end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #2: ${doDisc2} -> ${disc2}/${disc2reuse} seconds - End: ${disc2end}
}

/ini "WHSettings.ini" "General" "AutoDisc2" "${doDisc2}"
/ini "WHSettings.ini" "General" "Disc2" "${disc2}"
/ini "WHSettings.ini" "General" "Disc2Duration" "${disc2duration}"
/ini "WHSettings.ini" "General" "Disc2Reuse" "${disc2reuse}"
/ini "WHSettings.ini" "General" "Disc2Endurance" "${disc1end}"
/return

Sub Event_SetDisc3(string Line)
/varset lastevent Event_SetDisc3
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc3 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc3}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc3 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc3}" is now ON!
} else {
/varset doDisc3 TRUE
/if (${Line.Arg[3].Length}) /varset disc3 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc3duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc3reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc3end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #3: ${doDisc3} -> ${disc3}/${disc3reuse} seconds - End: ${disc3end}
}

/ini "WHSettings.ini" "General" "AutoDisc3" "${doDisc3}"
/ini "WHSettings.ini" "General" "Disc3" "${disc3}"
/ini "WHSettings.ini" "General" "Disc3Duration" "${disc3duration}"
/ini "WHSettings.ini" "General" "Disc3Reuse" "${disc3reuse}"
/ini "WHSettings.ini" "General" "Disc3Endurance" "${disc1end}"
/return

Sub Event_SetDisc4(string Line)
/varset lastevent Event_SetDisc4
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc4 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc4}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc4 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc4}" is now ON!
} else {
/varset doDisc4 TRUE
/if (${Line.Arg[3].Length}) /varset disc4 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc4duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc4reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc4end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #4: ${doDisc4} -> ${disc4}/${disc4reuse} seconds - End: ${disc4end}
}

/ini "WHSettings.ini" "General" "AutoDisc4" "${doDisc4}"
/ini "WHSettings.ini" "General" "Disc4" "${disc4}"
/ini "WHSettings.ini" "General" "Disc4Duration" "${disc4duration}"
/ini "WHSettings.ini" "General" "Disc4Reuse" "${disc4reuse}"
/ini "WHSettings.ini" "General" "Disc4Endurance" "${disc1end}"
/return

Sub Event_SetDisc5(string Line)
/varset lastevent Event_SetDisc5
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc5 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc5}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc5 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc5}" is now ON!
} else {
/varset doDisc5 TRUE
/if (${Line.Arg[3].Length}) /varset disc5 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc5duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc5reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc5end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #5: ${doDisc5} -> ${disc5}/${disc5reuse} seconds - End: ${disc5end}
}

/ini "WHSettings.ini" "General" "AutoDisc5" "${doDisc5}"
/ini "WHSettings.ini" "General" "Disc5" "${disc5}"
/ini "WHSettings.ini" "General" "Disc5Duration" "${disc5duration}"
/ini "WHSettings.ini" "General" "Disc5Reuse" "${disc5reuse}"
/ini "WHSettings.ini" "General" "Disc5Endurance" "${disc1end}"
/return

Sub Event_SetDisc6(string Line)
/varset lastevent Event_SetDisc6
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc6 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc6}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc6 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc6}" is now ON!
} else {
/varset doDisc6 TRUE
/if (${Line.Arg[3].Length}) /varset disc6 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc6duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc6reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc6end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #6: ${doDisc6} -> ${disc6}/${disc6reuse} seconds - End: ${disc6end}
}

/ini "WHSettings.ini" "General" "AutoDisc6" "${doDisc6}"
/ini "WHSettings.ini" "General" "Disc6" "${disc6}"
/ini "WHSettings.ini" "General" "Disc6Duration" "${disc6duration}"
/ini "WHSettings.ini" "General" "Disc6Reuse" "${disc6reuse}"
/ini "WHSettings.ini" "General" "Disc6Endurance" "${disc1end}"
/return

Sub Event_SetDisc7(string Line)
/varset lastevent Event_SetDisc7
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc7 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc7}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc7 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc7}" is now ON!
} else {
/varset doDisc7 TRUE
/if (${Line.Arg[3].Length}) /varset disc7 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc7duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc7reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc7end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #7: ${doDisc7} -> ${disc7}/${disc7reuse} seconds - End: ${disc7end}
}

/ini "WHSettings.ini" "General" "AutoDisc7" "${doDisc7}"
/ini "WHSettings.ini" "General" "Disc7" "${disc7}"
/ini "WHSettings.ini" "General" "Disc7Duration" "${disc7duration}"
/ini "WHSettings.ini" "General" "Disc7Reuse" "${disc7reuse}"
/ini "WHSettings.ini" "General" "Disc7Endurance" "${disc1end}"
/return

Sub Event_SetDisc8(string Line)
/varset lastevent Event_SetDisc8
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc8 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc8}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc8 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc8}" is now ON!
} else {
/varset doDisc8 TRUE
/if (${Line.Arg[3].Length}) /varset disc8 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc8duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc8reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc8end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #8: ${doDisc8} -> ${disc8}/${disc8reuse} seconds - End: ${disc8end}
}

/ini "WHSettings.ini" "General" "AutoDisc8" "${doDisc8}"
/ini "WHSettings.ini" "General" "Disc8" "${disc8}"
/ini "WHSettings.ini" "General" "Disc8Duration" "${disc8duration}"
/ini "WHSettings.ini" "General" "Disc8Reuse" "${disc8reuse}"
/ini "WHSettings.ini" "General" "Disc8Endurance" "${disc1end}"
/return

Sub Event_SetDisc9(string Line)
/varset lastevent Event_SetDisc9
/if (${Line.Arg[3].Equal[OFF]}) {
/varset doDisc9 FALSE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc9}" is now OFF!
} else /if (${Line.Arg[3].Equal[ON]}) {
/varset doDisc9 TRUE
/if (${verbosity}>=0) /${channel} ** Auto Discipline "${disc9}" is now ON!
} else {
/varset doDisc9 TRUE
/if (${Line.Arg[3].Length}) /varset disc9 ${Line.Arg[3]}
/if (${Line.Arg[4]} >= 0) /varset disc9duration ${Line.Arg[4]}
/if (${Line.Arg[5]} >= 0) /varset disc9reuse ${Line.Arg[5]}
/if (${Line.Arg[6]} >= 0) /varset disc9end ${Line.Arg[6]}
/if (${verbosity}>=0) /${channel} ** Auto Disc #9: ${doDisc9} -> ${disc9}/${disc9reuse} seconds - End: ${disc9end}
}

/ini "WHSettings.ini" "General" "AutoDisc9" "${doDisc9}"
/ini "WHSettings.ini" "General" "Disc9" "${disc9}"
/ini "WHSettings.ini" "General" "Disc9Duration" "${disc9duration}"
/ini "WHSettings.ini" "General" "Disc9Reuse" "${disc9reuse}"
/ini "WHSettings.ini" "General" "Disc9Endurance" "${disc1end}"
/return

Sub Event_SetVerbosity(string Line)
/varset lastevent Event_SetVerbosity
/if (${Line.Arg[3].Length}) /varset verbosity ${Line.Arg[3]}
/if ((${verbosity}<0) || (${verbosity}>2)) {
/if (${verbosity}>=0) /${channel} Verbosity must be between 0 and 2! Defaulting to 2...
/varset verbosity 2
}
/if (${verbosity}>=0) /${channel} ** Verbosity Level: ${verbosity}
/ini "WHSettings.ini" "General" "Verbosity" "${verbosity}"
/return

Sub Event_SetChannel(string Line)
/varset lastevent Event_SetChannel
/if (${Line.Arg[3].Length}) /varset channel ${Line.Arg[3]}
/if (${verbosity}>=0) /${channel} ** WH Output Channel: ${channel}
/ini "WHSettings.ini" "General" "Channel" "${channel}"
/return

Sub Event_SwitchWeapon
/varset lastevent Event_SwitchWeapon
/if (${doSwitch}) {
/call Weapon_Swap "${weapon2}" "${weapon1}"
}
/return

Sub Event_GotHit
/varset lastevent Event_GotHit
/if (!${aggrotimer}) /if (${verbosity}>=1) /${channel} ** AGGRO Detected (struck) **
/if (${Me.State.Equal[Feign]}) /stand
/varset gotHit TRUE
/varset aggrotimer 5s
/if (${doAAttack} && !${Me.Combat} && !${isPaused} && !${isEnraged}) {
/if (${verbosity}>=1) /${channel} ** AutoAttacking ${Target.CleanName} **
/attack on
}
/return

Sub Event_GotMissed
/varset lastevent Event_GotMissed
/if (!${aggrotimer}) /if (${verbosity}>=1) /${channel} ** AGGRO Detected (whiff) **
/if (${Me.State.Equal[Feign]}) /stand
/varset gotHit TRUE
/varset aggrotimer 5s
/if (${doAAttack} && !${Me.Combat} && !${isPaused} && !${isEnraged}) {
/if (${verbosity}>=1) /${channel} ** AutoAttacking ${Target.CleanName} **
/attack on
}
/return

Sub Event_SpellBounced
/varset lastevent Event_SpellBounced
/varset clicktimer 60s
/beep
/beep
/beep
/if (${verbosity}>=1) /${channel} ** Just detected a BOUNCED spell!
/if (${verbosity}>=1) /${channel} ** Use /ibounce to update click-item info!
/return

Sub Event_DragBodies(string Line)
/varset lastevent Event_DragBodies
/declare ArgNum int local 3
/declare bodycount int local

:CountCorpses
/if (${Line.Arg[${ArgNum}].Length}) {
|- There's a body name for this argument
/varcalc ArgNum ${ArgNum}+1
/goto :CountCorpses
}
/varcalc ArgNum ${ArgNum}-1

/if (${ArgNum}==2) {
/if (${verbosity}>=0) /${channel} ** No corpse names supplied!
/return
} else {
/if (${verbosity}>=0) /${channel} ** Target self (F1) to stop dragging!
}
:DragLoop
/for bodycount 3 to ${ArgNum}
/if (${Target.CleanName.Equal[${Me.Name}]}) {
/if (${verbosity}>=0) /${channel} ** Body dragging ceased.
/goto :CeaseDragging
}
/target ${Line.Arg[${bodycount}]}'s
/corpse
|- Lower this delay at your own risk; too many /corpse commands too fast = cheater!
/delay 4
/next bodycount
/goto :DragLoop
:CeaseDragging
/return

Sub Event_LootMyCorpse
/varset lastevent Event_LootMyCorpse
|- Logic ripped off from Loot.mac and simplified somewhat
/declare LootTotal int local 0
/declare LootSlot int local
|- Get corpse on target and continue looting if possible
/squelch /target mycorpse
/if (${Target.Type.NotEqual[CORPSE]} || !${Target.ID}) {
/if (${verbosity}>=0) /${channel} ** Can't target my corpse.
/return
}
/corpse
/delay 1s
/loot
/delay 1s
/if (${Me.State.NotEqual[BIND]}) {
/if (${verbosity}>=0) /${channel} ** Massive lag right now... Aborting looting.
/return
}
|- Get item count accurately
:LootLag
/if (${LootTotal}!=${Corpse.Items}) {
/varset LootTotal ${Corpse.Items}
/delay 5
/goto :LootLag
}
|- Loot Loop
/for LootSlot 1 to ${LootTotal}
:LootItem
/itemnotify loot${LootSlot} rightmouseup
/delay 3
/if (${Corpse.Item[${LootSlot}].ID}) {
/delay 2
/goto :LootItem
}
/next LootSlot
/delay 5
/if (${verbosity}>=0) /${channel} ** Done looting my corpse.
/notify LootWnd DoneButton leftmouseup
/return

Sub Event_AutoFollow(string Line)
/varset lastevent Event_AutoFollow
/declare distance int local 30
/if (${Ini[WHSettings.ini,General,FollowDistance].NotEqual[NULL]}) /varset distance ${Ini[WHSettings.ini,General,FollowDistance]}
/if (${Line.Arg[3].Length}) /target ${Line.Arg[3]}
/if (${Line.Arg[4].Length}) /varset distance ${Line.Arg[4]}
/if (${distance}<10) /varset distance 10
/ini "WHSettings.ini" "General" "FollowDistance" "${distance}"
/if (${Target.ID}) {
/if (${verbosity}>=0) /${channel} ** Autofollow on: ${Target.CleanName} (${distance} ft.)
/if (${verbosity}>=0) /${channel} ** Change targets to stop autofollowing.
} else {
/if (${verbosity}>=0) /${channel} ** Can't activate Autofollow -- no valid target!
/return
}
/declare followID int local ${Target.ID}
:FollowingLoop
|- Look for new events
/doevents
/if (!${lastevent.Equal[Event_AutoFollow]}) {
/if (${verbosity}>=0) /${channel} ** Autofollow blocked by: ${lastevent}
/goto :StopFollowing
}
/if (${Target.ID}==${followID}) {
/if (${Target.ID}) /face fast
/if (${Target.Distance}>${distance}) {
/keypress forward hold
/delay 1s ${Target.Distance}<=${distance}
/keypress forward
}
/goto :FollowingLoop
}
:StopFollowing
/if (${verbosity}>=0) /${channel} ** Autofollow ended.
/return

Sub Event_ItemSet(string Line)
/varset lastevent Event_ItemSet
|- Sanity check parameters
/if (!${Line.Arg[5].Length} || ${Line.Arg[6].Length}) {
/if (${verbosity}>=0) /${channel} ** Improper use of /iset
/if (${verbosity}>=0) /${channel} -- /iset <itemalias> keepup|nokeepup <"Item Name">
/if (${verbosity}>=0) /${channel} -- For example:
/if (${verbosity}>=0) /${channel} -- /iset gobby keepup "Shrunken Goblin Skull Earring"
/return
}
/ini "WHItems.ini" "${Line.Arg[3]}" "FullName" "${Line.Arg[5]}"
/ini "WHItems.ini" "${Line.Arg[3]}" "KeepUp" "${If[${Line.Arg[4].Equal[keepup]},TRUE,FALSE]}"
/if (${verbosity}>=0) /${channel} ** ${Line.Arg[5]} (KeepUp=${If[${Line.Arg[4].Equal[keepup]},TRUE,FALSE]}) updated in INI!
/return

Sub Event_ItemBounce(string Line)
/varset lastevent Event_ItemBounce
|- Sanity check parameters
/if (!${Line.Arg[4].Length}) {
/if (${verbosity}>=0) /${channel} ** Improper use of /ibounce
/if (${verbosity}>=0) /${channel} -- /ibounce <itemalias> "Some Spell Name"
/if (${verbosity}>=0) /${channel} -- For example:
/if (${verbosity}>=0) /${channel} -- /ibounce gobby "Strength of Tunare"
/return
}
|- Look for that item's section, return if non-existent
/if (!${Ini[WHItems.ini,${Line.Arg[3]}].Length}) {
/if (${verbosity}>=0) /${channel} ** [${Line.Arg[3]}] not in INI file!
/return
}
|- Find the next available BounceOff key number and store the spell
/declare bindex int local 1
:CheckNextKey
/if (${Ini[WHItems.ini,${Line.Arg[3]},BounceOff${bindex}].Length}) {
|- This one is in use...
/varcalc bindex ${bindex}+1
/goto :CheckNextKey
} else {
|- This one not defined (yet). Good.
/ini "WHItems.ini" "${Line.Arg[3]}" "BounceOff${bindex}" "${Line.Arg[4]}"
/if (${verbosity}>=0) /${channel} ** Added "${Line.Arg[4]}" to [${Line.Arg[3]}]'s bounce list
}
/return

Sub Event_ItemCast(string Line)
/varset lastevent Event_ItemCast
|- Sanity check parameter
/if (!${Line.Arg[3].Length}) {
/if (${verbosity}>=0) /${channel} ** Improper use of /icast
/if (${verbosity}>=0) /${channel} -- /icast <itemalias>
/if (${verbosity}>=0) /${channel} -- For example:
/if (${verbosity}>=0) /${channel} -- /icast gobby
/return
}
|- Look for that item's section, return if non-existent
/if (!${Ini[WHItems.ini,${Line.Arg[3]}].Length}) {
/if (${verbosity}>=0) /${channel} ** [${Line.Arg[3]}] not in INI file!
/return
}
/declare fullname string local ${Ini[WHItems.ini,${Line.Arg[3]},FullName]}
|- Is it in a Bag?
/if (${verbosity}>=1) /${channel} ** Attempting to use: ${fullname}
/if (${FindItem[${fullname}].InvSlot.Pack}) {
:OpenPack
/if (!${Window[${FindItem[${fullname}].InvSlot.Pack.Name}].Open}) {
/itemnotify ${FindItem[${fullname}].InvSlot.Pack.Name} rightmouseup
/delay 2
/goto :OpenPack
}
/declare camefrom ${FindItem[${fullname}].InvSlot}
:GrabItem
/if (!${Cursor.ID}) {
/itemnotify ${InvSlot[${camefrom}]} leftmouseup
/delay 2
/goto :GrabItem
}
/declare clickyID int local ${Cursor.ID}
/declare wornat int local ${Cursor.WornSlot[1]}
:SwapFirst
/if (${Cursor.ID}==${clickyID}) {
/itemnotify ${InvSlot[${wornat}]} leftmouseup
/delay 2
/goto :SwapFirst
}
|- Click it
/delay 2
/if (${verbosity}>=1) /${channel} ** Clicking: ${fullname}
/declare previousID ${Cursor.ID}
/itemnotify ${InvSlot[${wornat}]} rightmouseup
:SwapAgain
/if (${Cursor.ID}==${previousID}) {
/itemnotify ${InvSlot[${wornat}]} leftmouseup
/delay 2
/goto :SwapAgain
}
|- Put it back
:PutItBack
/if (${Cursor.ID}==${clickyID}) {
/itemnotify ${InvSlot[${camefrom}]} leftmouseup
/delay 2
/goto :PutItBack
}
:SummonedCheck
/if (${Cursor.ID}) {
|- Something was summoned
/autoinv
/delay 2
/goto :SummonedCheck
}

:ClosePack
/if (${Window[${InvSlot[${camefrom}].Pack.Name}].Open}) {
/itemnotify ${InvSlot[${camefrom}].Pack.Name} rightmouseup
/delay 2
/goto :ClosePack
}
} else {
|- Just click it
/if (${FindItem[${fullname}].InvSlot}) {
/if (${verbosity}>=1) /${channel} ** Clicking: ${fullname}
/itemnotify ${FindItem[${fullname}].InvSlot} rightmouseup
/delay 2
} else {
/if (${verbosity}>=0) /${channel} ** "${fullname}" not found!
}
}
:CastLoop
/delay 1
/if (${Me.Casting.ID}) /goto :CastLoop
/return

Sub Event_LinkParse(string Line)
/varset lastevent Event_LinkParse
/if (${Line.Arg[3].Length}) {
/declare comtext string ${Line.Right[-16]}

/declare linksub ${comtext.Token[1,*]}0013895-00001-00001-00001-00001-00001A04D01F5${comtext.Token[2,*]}${comtext.Token[3,*]}
/docommand ${linksub}
}
/return

Sub Event_AddMaster(string Line)
/varset lastevent Event_AddMaster
/declare index int local
/if (${Line.Arg[3].Length}) {
/for index 1 to 20
/if (${Ini[WHSettings.ini,Masters,Controller${index}].Equal[Nobody]}) {
/ini "WHSettings.ini" "Masters" "Controller${index}" "${Line.Arg[3]}"
/if (${verbosity}>=0) /${channel} ** ${Line.Arg[3]} added as a controller...
/goto :FallOut
}
/next index
/if (${verbosity}>=0) /${channel} ** Master controller slots all filled! Get rid of some!
} else {
/if (${verbosity}>=0) /${channel} ** Huh?
}
:FallOut
/return

Sub Event_RemMaster(string Line)
/varset lastevent Event_RemMaster
/declare index int local
/if (${Line.Arg[3].Length}) {
/for index 1 to 20
/if (${Ini[WHSettings.ini,Masters,Controller${index}].Equal[${Line.Arg[3]}]}) {
/ini "WHSettings.ini" "Masters" "Controller${index}" "Nobody"
/if (${verbosity}>=0) /${channel} ** ${Line.Arg[3]} removed from controller list...
/goto :FallOut
}
/next index
/if (${verbosity}>=0) /${channel} ** Can't find ${Line.Arg[3]} in access list!
} else {
/if (${verbosity}>=0) /${channel} ** Huh?
}
:FallOut
/return

Sub Event_Chat(ChatType, Sender, ChatText)
/varset lastevent Event_Chat
|- Authenticate if valid controller
/declare authorized bool local FALSE
/for i 1 to 20
/if (${Ini[WHSettings.ini,Masters,Controller${i}].Equal[${Sender}]}) /varset authorized TRUE
/next i
/if (${authorized} && ${ChatText.Left[1].Equal[/]}) {
/if (${verbosity}>=1) /${channel} ** User ${Sender} Authenticated!
/if (${verbosity}>=0) /${channel} Action --> "${ChatText}"
/if (${Me.AFK}) /delay 2s
/tell ${Sender} Command received, performing: ${ChatText}
/docommand ${ChatText}
}
/return

Sub Event_HelpInfo
/varset lastevent Event_HelpInfo
/if (${verbosity}>=0) /${channel} --------=========(WH Help)=========----------
/if (${verbosity}>=0) /${channel} /WHhelp - Display this information!
/if (${verbosity}>=0) /${channel} /status - Display status of all WH modes
/if (${verbosity}>=0) /${channel} /pause - Suspends the operations of WH
/if (${verbosity}>=0) /${channel} /aattack - Toggle AutoAttack on Hit on or off
/if (${verbosity}>=0) /${channel} /stopfight <%> - Set % of your health to stop attacking
/if (${verbosity}>=0) /${channel} /autostick - Toggle autosticking to NPCs while attacking
/if (${verbosity}>=0) /${channel} /stickdist <range_target> <range_tank> - Set stick thresholds
/if (${verbosity}>=0) /${channel} /closeness <%> - Set % of max hit range while autosticking
/if (${verbosity}>=0) /${channel} /dynclose - Toggle automatic real time closeness adjustments
/if (${verbosity}>=0) /${channel} /autoassist <main_assist> <%health> - Activate autoassist
/if (${verbosity}>=0) /${channel} /autoassist off - Disable autoassisting
/if (${verbosity}>=0) /${channel} /autoassist on - Turn on autoassist w/existing tank info
/if (${verbosity}>=0) /${channel} /mainassist <player> - Sets main assist to <player>
/if (${verbosity}>=0) /${channel} /secondassist <player> - Sets secondary assist to <player>
/if (${verbosity}>=0) /${channel} /thirdassist <player> - Sets third assist to <player>
/if (${verbosity}>=0) /${channel} /autoDisarm - Toggles Disarming on or off
/if (${verbosity}>=0) /${channel} /dynaggro - Toggle dynamic management of assist health %
/if (${verbosity}>=0) /${channel} /leash <distance> - Activate leash with <distance> ft.
/if (${verbosity}>=0) /${channel} /leash <distance> <master> - Activate leash w/a master
/if (${verbosity}>=0) /${channel} /leash off - Disable leashing
/if (${verbosity}>=0) /${channel} /leashflex <%length> - Set leash flexibility
/if (${verbosity}>=0) /${channel} /drag <body1> <body2> ... <bodyN> - Drag corpses
/if (${verbosity}>=0) /${channel} /lootmycorpse - Loot your own corpse completely
/if (${verbosity}>=0) /${channel} /iset <itemalias> keepup|nokeepup <"Item Name"> - Item settings
/if (${verbosity}>=0) /${channel} /ibounce <itemalias> <"Spell Name"> - Add bounce-off spell
/if (${verbosity}>=0) /${channel} /iclick <itemalias> - Click cast item defined in <itemalias>
/if (${verbosity}>=0) /${channel} /autoninja <mode> [<range>] - Automatic NPC corpse looting
/if (${verbosity}>=0) /${channel} /autofollow [<name>] [<distance>] - Follow <name> at <distance>
/if (${verbosity}>=0) /${channel} /autodisarm - Toggle Disarming during combat on or off
/if (${verbosity}>=0) /${channel} /weaponswitch <weapon1> <"switch text"> <weapon2> - weapon swap
/if (${verbosity}>=0) /${channel} /targetswitch - Toggle autoswitching of targets in autoassist
/if (${verbosity}>=0) /${channel} /autochicken [ON|OFF|<Void%>]
/if (${verbosity}>=0) /${channel} /addmaster <name> - Add a master to remote control users
/if (${verbosity}>=0) /${channel} /remmaster <name> - Remove a master from remote control users
/if (${verbosity}>=0) /${channel}
/if (${verbosity}>=0) /${channel} For AutoDisciplines to function you need everything to be in seconds
/if (${verbosity}>=0) /${channel} So convert the minutes into seconds
/if (${verbosity}>=0) /${channel}
/if (${verbosity}>=0) /${channel} Auto Disciplines Supports up to 9 disciplines
/if (${verbosity}>=0) /${channel} Put the Disciplines in order of what you want to come first
/if (${verbosity}>=0) /${channel} Discipline 1 will come first, then Discipline 2, Etc Etc
/if (${verbosity}>=0) /${channel} You turn off/on Auto Disciplines by the command : /Autodisc# OFF/ON
/if (${verbosity}>=0) /${channel}
/if (${verbosity}>=0) /${channel} /autodisc# "Discipline Name" <Duration> <Reuse> <End%>
/return

Sub Event_StatInfo
/varset lastevent Event_StatInfo
/if (${verbosity}>=0) /${channel} -------=======(Current Status)=======--------
|- Check for the presense of MQ2MoveUtils plugin
/if (${Stick.Status.Length}) {
/varset useMU TRUE
/if (${verbosity}>=0) /${channel} ** MQ2MoveUtils ENABLED (Enhanced Movement ON)
} else {
/varset useMU FALSE
/if (${verbosity}>=0) /${channel} ** MQ2MoveUtils NOT FOUND (Enhanced Movement OFF)
}
/if (${verbosity}>=0) /${channel} ** Cease Combat: ${StopFightingHealth}% HP
/if (${verbosity}>=0) /${channel} ** Auto Stick: ${doStick}, Closeness${If[${doDynclose},[DYN],]}: ${closeness}% MaxRange
/if (${verbosity}>=0) /${channel} ** -- Range to Target: ${rngtarget} -- Range to Tank: ${rngtank}
/if (${verbosity}>=0) /${channel} ** Auto Disarm: ${doDisarm}, Auto Taunt: ${doTaunt}
/if (${verbosity}>=0) /${channel} ** Auto Chicken: ${doChicken} -- Voiddance: ${Voidhealth}%
/if (${verbosity}>=0) /${channel} ** Auto Ninja: ${ninjamode}, Distance: ${ninjadist} ft.
/if (${verbosity}>=0) /${channel} ** Auto TargetSwitching: ${doTSwitch}
/if (${verbosity}>=0) /${channel} ** Auto Assist: ${doAutoassist}, Assist at ${assistpct}% HP
/if (${verbosity}>=0) /${channel} ** MA: ${firstassist}, SA: ${secondassist}, TA: ${thirdassist}
/if (${verbosity}>=0) /${channel} ** Leashing: ${doLeash} (${leashlength} ft.), Master: ${leashholder}, Flex: ${leashflex}
/if (${verbosity}>=0) /${channel} ** Auto Disc #1: ${doDisc1} -> ${disc1} / ${disc1reuse} sec - End: ${disc1end}%
/if (${verbosity}>=0) /${channel} ** Auto Disc #2: ${doDisc2} -> ${disc2} / ${disc2reuse} sec - End: ${disc2end}%
/if (${verbosity}>=0) /${channel} ** Auto Disc #3: ${doDisc3} -> ${disc3} / ${disc3reuse} sec - End: ${disc3end}%
/if (${verbosity}>=0) /${channel} ** Auto Disc #4: ${doDisc4} -> ${disc4} / ${disc4reuse} sec - End: ${disc4end}%
/if (${verbosity}>=0) /${channel} ** Auto Disc #5: ${doDisc5} -> ${disc5} / ${disc5reuse} sec - End: ${disc5end}%
/if (${verbosity}>=0) /${channel} ** Auto Disc #6: ${doDisc6} -> ${disc6} / ${disc6reuse} sec - End: ${disc6end}%
/if (${verbosity}>=0) /${channel} ** Auto Disc #7: ${doDisc7} -> ${disc7} / ${disc7reuse} sec - End: ${disc7end}%
/if (${verbosity}>=0) /${channel} ** Auto Disc #8: ${doDisc8} -> ${disc8} / ${disc8reuse} sec - End: ${disc8end}%
/if (${verbosity}>=0) /${channel} ** Auto Disc #9: ${doDisc9} -> ${disc9} / ${disc9reuse} sec - End: ${disc9end}%
/if (${verbosity}>=0) /${channel} ** Dynamic Aggro Control: ${doDynaggro}
/if (${verbosity}>=0) /${channel} ** WeaponSwitching: ${doSwitch}, ${weapon1}->${weapon2} (${switchtext})
/if (${verbosity}>=0) /${channel} ** AutoAttacking on Hit : ${doAAttack}
/if (${verbosity}>=0) /${channel} ** Authorized remote controllers:
/for i 1 to 20
/if (${Ini[WHSettings.ini,Masters,Controller${i}].NotEqual[Nobody]}) /if (${verbosity}>=0) /${channel} ---- ${Ini[WHSettings.ini,Masters,Controller${i}]} allowed...
/next i
/doevents flush
/return

jumpyfrog
Macro Author
Macro Author
Posts: 100
Joined: Thu Dec 11, 2003 5:42 am

Post by jumpyfrog » Sun Nov 01, 2009 3:47 pm

I've been playing around a bit with this macro, and it is very nice so thank you to both authors, however I am still having trouble with one aspect.

I understand code well and I have dug through the macro a bit but I still cannot seem to figure out the problem.

so my questions...

1.) Does this maybe not work with mercs being the assist?
2.) I can get everything to work perfectly with myself(real player) as the assist but he will only move to engage if I am close to the mob. IE if I pull it into camp I have to stand near the mob in order for him to move in and attack. The merc rushes in to tank and if I stand back by the casters(you know what I mean) he will just stand there and do nothing. However the second I move close to the mob he engages and everything else works perfectly.

Through my limited research it seems like this might have something to do with "stick" or "leash" but I have tried both numbers very high(500-1000) and he still still only engage if I stand right near the mob. Any suggestions on where to look?
-Mark

FrankJScott
a grimling bloodguard
a grimling bloodguard
Posts: 1613
Joined: Sun Feb 19, 2023 7:11 am

Best News For Deciding On Download Windows Programs Free

Post by FrankJScott » Tue Mar 07, 2023 5:25 am

In response to the person asking about bmcc microsoft office, microsoft csp license, necessary software for windows 7, free wordpad for windows 10, top programs for windows 10, ms project management, I highly suggest this killer deal for download microsoft programs free site or best software for pc windows 7, free program to open rar files windows 10, texas tech microsoft office, small business microsoft office, registry repair freeware, top programs for windows 10, alongside all this read full article about windows programs for free url as well as best programs for windows 7, microsoft excel associate certification, best pc software for windows 10, zip program free download, usfca microsoft office, deskpins windows 10 free download, and don't forget this what is it worth for download windows software free blog which is as good as program driver pc, mastering excel for business, ccleaner xp download, free unzip for pc, microsoft flowchart software, best desktop software for windows 10, . Also, have a look at this my latest blog post about download windows software free blog not to mention microsoft office 365 certification, ms excel certification, academic software microsoft, microsoft word and excel certification, bootable software free download, dosbox app download, alongside all this look what i found for microsoft programs torrent blog on top of excel certification cost, best unzip software for windows 10, microsoft msp program, microsoft office master certification, registry cleaner for windows 7 free download, office word alternative, and don't forget my response for windows programs for free advice which is also worth a look as well as microsoft openhack program, programs like onenote, free download wise disk cleaner, ms project management, microsoft office uwo, ucsf microsoft office, also. I also suggest this published here for microsoft programs torrent site alongside all winrar software free download for windows 10 64 bit, microsoft access coding, open source word alternative, free word processor for windows, microsoft money program, learning vba for excel, as well as this learn more here about download windows software free url and don't forget blender animation software free download for windows 10, download rocketdock, all computer software windows 7, word processing program, excel class for beginners, microsoft office mos, on top of how you can help on microsoft programs crack link alongside all download app uninstaller for pc, azure sales certification, asu free microsoft office, microsoft access similar programs, turtle art software free download for windows 10, youtube video download software windows 7, which is also great. Finally, have a look at this website about microsoft programs crack url with best pc software for windows 10, microsoft office uc berkeley, free word processing software for windows, iobit uninstaller 10 pro download, free excel for students, wise program uninstaller free download, for good measure. Check more @ Great Facts For Selecting Car Selling 2_aad26

FrankJScott
a grimling bloodguard
a grimling bloodguard
Posts: 1613
Joined: Sun Feb 19, 2023 7:11 am

Handy Tips For Choosing Automated Trading

Post by FrankJScott » Wed Mar 08, 2023 5:28 am

In reply to the man inquiring about forex trading strategies forum, forex algo bot, crypto buy and sell, automatic share trading, alpaca automated trading, best stock market discussion forum, I highly recommend this for beginners on crypto trading site or international crypto exchange, kite automated trading, pionex grid trading, nts auto trading, trading shiba inu, automated robinhood trading, on top of this click for source about crypto trading link as well as automate your trading, forex mt4 ea automated trading system, robo trading software free, binance futures us, trade shiba inu crypto, stock trading discord reddit, not to mention this click this for automated trading details which is as good as ea forex bot, crypto buying platforms, webull crypto trading, binance to ftx, automated trading tradingview, tradingview 3commas bot, . Also, have a look at this click for source on automated trading forum on top of nifty live auto trading system, ftx trading ltd, binance selling fees, auto trading, top 100 crypto exchanges, bank nifty robot trading, on top of this on bing about crypto trading link on top of olymp trade auto trading software, pionex smart trade, ninjatrader 8 automated strategies, gemini auto trading, robot trading software, auto robot trading software, as well as linked here about crypto trading forum which is also worth a look alongside all auto trade oil, kraken exchange fees, cryptocurrency stock exchange, merrill edge automated trading, automate robinhood trading, wazirx auto trading, also. I also suggest this cool training for crypto trading link and don't forget true trader review reddit, kraken crypto fees, best forex auto trading software, altsignals, institutional investor trader forum, intraday traders forum, and don't forget this had me going about automated trading details on top of most reliable crypto exchange, trading bot system, cryptocurrency stock exchange, crypto trading company, software to buy and sell stocks automatically, best forex robots mt4, on top of clicking here about forex trading tips not to mention bitfinex margin, best app for crypto trading, phemex bonus, the best ea forex, best app for stocks and crypto, videforex review reddit, which is also great. Finally, have a look at this my response for automated trading info with gemini active trader fees, telegram forex signals reddit, cheapest cryptocurrency on robinhood, autotrading systems global, cryptocurrency trading platform, day trading binance reddit, for good measure. Check more @ Best Tips For Picking Download Windows Software Free ce3c8de

FrankJScott
a grimling bloodguard
a grimling bloodguard
Posts: 1613
Joined: Sun Feb 19, 2023 7:11 am

New Tips On Selecting Business Massage

Post by FrankJScott » Thu Apr 27, 2023 1:18 pm

In response to the lady talking about thai massage medavakkam, leg massager, chinese massage places near me, sun spa massage, asian massage near me, massage central, private massage therapist near me, travel on business, thai male massage, independent massage therapist near me, thai massage canary wharf, types of business trips, thai massage brunswick street, thai massage kensington, head scalp massager, deep tissue massage, black massage, jirapa thai massage, foot and leg massager, neuromuscular massage, I can vouch for this 부천출장마사지 for lymph drainage massage near me, thai massage for sciatica, massage reflexology full body oil thailand 2019, massage service at home near me, domestic business travel, head massager, crystal massage, thai massage in near me, european massage, lava shell massage, thai hot oil massage, friction massage, thai massage kingsland, smile thai massage, thai combination massage, places to get massages near me, back massage near me, business travel package, thai massage fourways, ems foot massager, also. See More New Ideas On Picking Business Massage 1b86b3c

FrankJScott
a grimling bloodguard
a grimling bloodguard
Posts: 1613
Joined: Sun Feb 19, 2023 7:11 am

New News To Deciding On Business Trip Massage

Post by FrankJScott » Tue May 09, 2023 9:09 pm

To the man talking about thailand full body massage, thai massage manukau, i massage, zabai thai massage & spa chiang mai, business tour package, thai massage mayo, I highly recommend this going here for business trip massage advice or regular business travelers, thai massage kota damansara, sun spa massage, thai stretch massage, thai massage finchley, thai massage locanto, not to mention this conversational tone about business trip massage site as well as luna massage, rmt thai massage, thailand massage, tour travel business start, best full body massager, u massage, on top of this at bing for business trip massage forum which is as good as indian head massage, vip massage, sunflower massage, business travel solution, lower back massager, a business travel, not to mention he said for business trip massage advice on top of reya thai massage, thai massage ealing, therapeutic massage, massages near me thai, male thai massage therapist, alicia thai massage, on top of this click for source for business trip massage link as well as thailand massage therapist, massage se, hatyai massage, thai massage experience, business travel coming back, lymphatic massage, not to mention see post on business trip massage link which is about energy massage, back massage near me, thai back massage, sawasdee thai massage, thailand massage, thai massage extra, alongside all this our site for business trip massage site on top of road trip business, thai massage fishponds, energy massage, hatyai massage, thai massage greenwich, facial massage, and don't forget this click for source on business trip massage details and don't forget best massage places near me, massage near me, revive massage, sarong thai massage, thai herbal massage, business travel package, alongside all on front page for business trip massage tips not to mention foot and leg massager, walk in massage, relax massage, original thai massage, hair massager, massage for back pain, which is also great. Finally, have a look at this for beginners on business trip massage advice with massages near me open now, thai massage somerset west, full body thai massage prices near me, massage reflexology full body oil thailand, thai massage henderson, thai massage chingford, for good measure. Check more @ Recommended Facts To Choosing Merino Wool Base Layers For Hiking 3c8dec9

FrankJScott
a grimling bloodguard
a grimling bloodguard
Posts: 1613
Joined: Sun Feb 19, 2023 7:11 am

New Interior Design Info

Post by FrankJScott » Thu Aug 10, 2023 9:18 pm

Why don't you Google it! before you post

FrankJScott
a grimling bloodguard
a grimling bloodguard
Posts: 1613
Joined: Sun Feb 19, 2023 7:11 am

Awesome Product Tips

Post by FrankJScott » Mon Oct 16, 2023 7:34 pm

Please try Google for Recommended Product Website ce3c8de