Changed Rogue Helper for Monks updated v1.2

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

Moderator: MacroQuest Developers

lazyshammy
orc pawn
orc pawn
Posts: 20
Joined: Sat Dec 11, 2004 2:49 pm

Changed Rogue Helper for Monks updated v1.2

Post by lazyshammy » Sat Dec 11, 2004 4:09 pm

i liked using Rogue helper so changed alot of it got rid of all the Rogue code (i think i did anyway)
would like some feedback on this

Zip of MH here MH.zp

RH is at http://www.macroquest2.com/phpBB2/viewtopic.php?t=7044
Last edited by lazyshammy on Fri Dec 17, 2004 8:47 am, edited 5 times in total.

lazyshammy
orc pawn
orc pawn
Posts: 20
Joined: Sat Dec 11, 2004 2:49 pm

Post by lazyshammy » Sat Dec 11, 2004 4:11 pm

Code: Select all

|--------------------------------------------------------------------------------- 
| 
| Monk Helper (MH) Macro 
| - v6.0 RH by Jerle (10/26/04) Edited by lazyshammy to MH v1.2
|--------------------------------------------------------------------------------- 
| 
| MH Syntax: 
| 
| Usage: /mac MH 
| 
| Default settings can be changed by their respective controlling /command 
| 
| Type /MHhelp for help or /status to see current settings! 
| 
|--------------------------------------------------------------------------------- 

#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 TogDisarm       "[MQ2] Autodisarm#*#"
#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 TogIntim        "[MQ2] AutoIntimidation#*#" 
#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 Setkick         "[MQ2] KickType#*#"
#Event SetMend         "[MQ2] SetMend#*#"
#Event SetFD           "[MQ2] SetFD#*#"
#Event SetWeaponSwitch "[MQ2] SetWeaponSwitch#*#" 
#Event SetStickDist    "[MQ2] SetStickDist#*#" 
#Event SetChicken      "[MQ2] SetChicken#*#" 
#Event SetDisc1        "[MQ2] SetDisc1#*#" 
#Event SetDisc2        "[MQ2] SetDisc2#*#" 
#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] MH Help#*#" 
#Event StatInfo        "[MQ2] MH Status#*#" 

Sub Main 

  /echo Loading Monk Helper... Please Wait! 

  /declare Mendhp int outer 70
  /declare FDhp int outer 40
  /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 FALSE 
  /declare doIntim bool outer FALSE
  /declare doSwitch bool outer FALSE 
  /declare doMend bool outer FALSE
  /declare doFD bool outer TRUE
  /declare kick string outer Flying Kick
  /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 Voidhealth int outer 20 
  /declare Voidtimer timer outer 0 
  /declare Voidactive timer outer 0 
  /declare chickentimer timer outer 0 
  /declare doDisc1 bool outer FALSE 
  /declare disc1 string outer NONE
  /declare disc1end int outer 60 
  /declare disc1reuse int outer 5 
  /declare disc1reusetimer timer outer 0 
  /declare doDisc2 bool outer FALSE 
  /declare disc2 string outer NONE 
  /declare disc2end int outer 60 
  /declare disc2reuse int outer 5 
  /declare disc2reusetimer timer 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 MHversion string outer 1.2 


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

  /if (${verbosity}>=0) /${channel} Setting Aliases... 
  /squelch /alias /status /echo MH Status 
  /squelch /alias /MHhelp /echo MH Help  
  /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 /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 /autoMend /echo SetMend
  /squelch /alias /Autofd /echo SetFD
  /squelch /alias /kick /echo KickType
  /squelch /alias /AutoIntim /echo Autointimidation
  /squelch /alias /AutoDisarm /echo Autodisarm

  :EndAlias 

  |-- Update the Version information 
  /ini "MHSettings.ini" "General" "Version" "${MHversion}" 

  |-- Read in INI settings, if defined...  Leashing is only stored TRUE if there is a Leash-holding Master! 
  /if (${Ini[MHSettings.ini,General,StopFightingHealth].NotEqual[NULL]}) /varset StopFightingHealth ${Ini[MHSettings.ini,General,StopFightingHealth]} 
  /if (${Ini[MHSettings.ini,General,AutoStick].NotEqual[NULL]}) /varset doStick ${Ini[MHSettings.ini,General,AutoStick]} 
  /if (${Ini[MHSettings.ini,General,Closeness].NotEqual[NULL]}) /varset closeness ${Ini[MHSettings.ini,General,Closeness]} 
  /if (${Ini[MHSettings.ini,General,Leashing].NotEqual[NULL]}) /varset doLeash ${Ini[MHSettings.ini,General,Leashing]} 
  /if (${Ini[MHSettings.ini,General,LeashHolder].NotEqual[NULL]}) /varset leashholder ${Ini[MHSettings.ini,General,LeashHolder]} 
  /if (${Ini[MHSettings.ini,General,LeashLength].NotEqual[NULL]}) /varset leashlength ${Ini[MHSettings.ini,General,LeashLength]} 
  /if (${Ini[MHSettings.ini,General,LeashFlex].NotEqual[NULL]}) /varset leashflex ${Ini[MHSettings.ini,General,LeashFlex]} 
  /if (${Ini[MHSettings.ini,General,AutoAssist].NotEqual[NULL]}) /varset doAutoassist ${Ini[MHSettings.ini,General,AutoAssist]} 
  /if (${Ini[MHSettings.ini,General,AssistPercentage].NotEqual[NULL]}) /varset assistpct ${Ini[MHSettings.ini,General,AssistPercentage]} 
  /if (${Ini[MHSettings.ini,General,MainAssist].NotEqual[NULL]}) /varset mainassist ${Ini[MHSettings.ini,General,MainAssist]} 
  /if (${Ini[MHSettings.ini,General,MainAssist].NotEqual[NULL]}) /varset firstassist ${Ini[MHSettings.ini,General,MainAssist]} 
  /if (${Ini[MHSettings.ini,General,SecondAssist].NotEqual[NULL]}) /varset secondassist ${Ini[MHSettings.ini,General,SecondAssist]} 
  /if (${Ini[MHSettings.ini,General,ThirdAssist].NotEqual[NULL]}) /varset thirdassist ${Ini[MHSettings.ini,General,ThirdAssist]} 
  /if (${Ini[MHSettings.ini,General,DynamicAggro].NotEqual[NULL]}) /varset doDynaggro ${Ini[MHSettings.ini,General,DynamicAggro]} 
  /if (${Ini[MHSettings.ini,General,AutoNinjaMode].NotEqual[NULL]}) /varset ninjamode ${Ini[MHSettings.ini,General,AutoNinjaMode]} 
  /if (${Ini[MHSettings.ini,General,AutoNinjaDistance].NotEqual[NULL]}) /varset ninjadist ${Ini[MHSettings.ini,General,AutoNinjaDistance]} 
  /if (${Ini[MHSettings.ini,General,WeaponSwitching].NotEqual[NULL]}) /varset doSwitch ${Ini[MHSettings.ini,General,WeaponSwitching]} 
  /if (${Ini[MHSettings.ini,General,TargetSwitching].NotEqual[NULL]}) /varset doTSwitch ${Ini[MHSettings.ini,General,TargetSwitching]} 
  /if (${Ini[MHSettings.ini,General,StickRangeToTarget].NotEqual[NULL]}) /varset rngtarget ${Ini[MHSettings.ini,General,StickRangeToTarget]} 
  /if (${Ini[MHSettings.ini,General,StickRangeToTank].NotEqual[NULL]}) /varset rngtank ${Ini[MHSettings.ini,General,StickRangeToTank]} 
  /if (${Ini[MHSettings.ini,General,AutoChicken].NotEqual[NULL]}) /varset doChicken ${Ini[MHSettings.ini,General,AutoChicken]} 
  /if (${Ini[MHSettings.ini,General,VoidHealth].NotEqual[NULL]}) /varset Voidhealth ${Ini[MHSettings.ini,General,VoidHealth]} 
  /if (${Ini[MHSettings.ini,General,AutoDisc1].NotEqual[NULL]}) /varset doDisc1 ${Ini[MHSettings.ini,General,AutoDisc1]} 
  /if (${Ini[MHSettings.ini,General,Disc1].NotEqual[NULL]}) /varset disc1 ${Ini[MHSettings.ini,General,Disc1]} 
  /if (${Ini[MHSettings.ini,General,Disc1Endurance].NotEqual[NULL]}) /varset disc1end ${Ini[MHSettings.ini,General,Disc1Endurance]} 
  /if (${Ini[MHSettings.ini,General,Disc1Reuse].NotEqual[NULL]}) /varset disc1reuse ${Ini[MHSettings.ini,General,Disc1Reuse]} 
  /if (${Ini[MHSettings.ini,General,AutoDisc2].NotEqual[NULL]}) /varset doDisc2 ${Ini[MHSettings.ini,General,AutoDisc2]} 
  /if (${Ini[MHSettings.ini,General,Disc2].NotEqual[NULL]}) /varset disc2 ${Ini[MHSettings.ini,General,Disc2]} 
  /if (${Ini[MHSettings.ini,General,Disc2Endurance].NotEqual[NULL]}) /varset disc2end ${Ini[MHSettings.ini,General,Disc2Endurance]} 
  /if (${Ini[MHSettings.ini,General,Disc2Reuse].NotEqual[NULL]}) /varset disc2reuse ${Ini[MHSettings.ini,General,Disc2Reuse]} 
  /if (${Ini[MHSettings.ini,General,DynamicCloseness].NotEqual[NULL]}) /varset dynclose ${Ini[MHSettings.ini,General,DynamicCloseess]} 
  /if (${Ini[MHSettings.ini,General,Verbosity].NotEqual[NULL]}) /varset verbosity ${Ini[MHSettings.ini,General,Verbosity]} 
  /if (${Ini[MHSettings.ini,General,Channel].NotEqual[NULL]}) /varset channel ${Ini[MHSettings.ini,General,Channel]} 
  /if (${Ini[MHSettings.ini,Weapons,Weapon1].NotEqual[NULL]}) /varset weapon1 ${Ini[MHSettings.ini,Weapons,Weapon1]} 
  /if (${Ini[MHSettings.ini,Weapons,Weapon2].NotEqual[NULL]}) /varset weapon2 ${Ini[MHSettings.ini,Weapons,Weapon2]} 
  /if (${Ini[MHSettings.ini,Weapons,SwitchText].NotEqual[NULL]}) /varset switchtext ${Ini[MHSettings.ini,Weapons,SwitchText]}
  /if (${Ini[MHSettings.ini,General,AutoDisarm].NotEqual[NULL]}) /varset doDisarm ${Ini[MHSettings.ini,General,AutoDisarm]}
  /if (${Ini[MHSettings.ini,General,AutoMend].NotEqual[NULL]}) /varset doMend ${Ini[MHSettings.ini,General,AutoMend]}
  /if (${Ini[MHSettings.ini,General,AutoFD].NotEqual[NULL]}) /varset doFD ${Ini[MHSettings.ini,General,AutoFD]}
  /if (${Ini[MHSettings.ini,General,Mendhp].NotEqual[NULL]}) /varset Mendhp ${Ini[MHSettings.ini,General,Mendhp]}
  /if (${Ini[MHSettings.ini,General,FDhp].NotEqual[NULL]}) /varset FDhp ${Ini[MHSettings.ini,General,FDhp]}
  /if (${Ini[MHSettings.ini,General,Kick].NotEqual[NULL]}) /varset Kick ${Ini[MHSettings.ini,General,Kick]}
  /if (${Ini[MHSettings.ini,General,AutoIntim].NotEqual[NULL]}) /varset AutoIntim ${Ini[MHSettings.ini,General,AutoIntim]}
  /varset closenessdesired ${closeness} 
  /varset wstype ${FindItem[${weapon1}].Spell.SpellType} 

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

  /echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= 
  /echo LazyShammy's Monk Helper (v${MHVersion})  Mod of RH v6.0 
  /echo =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  /echo Use "/MHhelp" to display help information 
  /echo MH Status 

  :ForeverLoop 

   |- Service any events 

   /doevents 
    
   |- If we're stunned or MH 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}<=${voidhealth}) && !${chickentimer}) { 
     /if (${verbosity}>=1) /${channel} Autochicken to the rescue! 
     /if (!${Voidtimer}) { 
       /disc Voiddance
       /if (${verbosity}>=1) /${channel} Voiddance mode activated! 
       /varset Voidtimer 40m 
       /varset Voidleactive 12s 
      } else /if (${Me.AltAbilityReady[Escape]} && !${nimbleactive}) { 
       /if (${verbosity}>=1) /${channel} Contingency Escape activated! (Nimble expired/unavailable) 
       /attack off 
       /alt activate 102 
       /varset chickentimer 30s 
     } else {
       /if (${verbosity}>=1) /${channel} ... or not! can't Voiddance ... Farewell! 
       /varset chickentimer 2m 
     } 
   } 

   |- are we mending?

  /if (${doMend} && (${Me.PctHPs}<=${Mendhp}) && !${mendtimer}) {
     /if (${Me.AbilityReady["Mend"]}) { 
         /doability "Mend" 
         /if (${verbosity}>=2) /${channel} Mending 
       } 
}

   |- are we going to FD?

  /if (${doFD} && (${Me.PctHPs}<=${FDhp}) && !${FDtimer}) {
     /if (${Me.AbilityReady["Feign Death"]}) { 
         /doability "Feign Death" 
         /if (${verbosity}>=2) /${channel} getting low Feign Death Time! 
       } 
}


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

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




   |- 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 MH movement tools 
     /if (${useMU}) { 
       /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.Swimming},uw,]} 
         } else { 
           /squelch /stick ${closeness}% behind mpause ${If[${Me.Swimming},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.Swimming},,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.Swimming},,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} 
       }  
     }   

     |- 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.Swimming},,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.Swimming},,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 "MHSettings.ini" "General" "Leashing" "${doLeash}" 
         /ini "MHSettings.ini" "General" "LeashHolder" "${leashholder}" 
         /goto :ForeverLoop 
       } 
     } 

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

     /if (${Target.ID} && ${Me.Standing} && !${Me.Casting.ID} && (${Target.Distance}<${Math.Calc[${Target.MaxRangeTo}*${closeness}/100]})) { 
       /if (${Me.AbilityReady["Flying Kick"]}) { 

         /doability "Flying Kick" 
         /if (${verbosity}>=2) /${channel} Kicking: ${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 trying to scare it?

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


     |- 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} && !${discactive} && !${strikeTimer} && ${Target.ID} && ${Target.PctHPs}>=50 && ${Me.PctEndurance}>=${disc1end}) { 
       /disc ${disc1} 
       /if (${verbosity}>=1) /${channel} Disc #1: ${disc1} activated 
       /delay 1s 
       /varset discactive 1m 
       /varset disc1reusetimer ${disc1reuse}m 
     } 

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

       /varset discactive 1m 
       /varset disc2reusetimer ${disc2reuse}m 
     } 

    } 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]}) /goto :DoneItemChecks 
     /varset i 1 
     :ItemCheckLoop 
     /varset ialias ${Ini[MHItems.ini].Arg[${i},|]} 
     /if (${ialias.NotEqual[NULL]}) { 
       |- Obtained an itemalias from the MHItems.ini file 
       |- We supposed to keep this spell up? 
       /if (${Ini[MHItems.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[MHItems.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[MHItems.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... 
           /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.Swimming},,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.Swimming},,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.Swimming},,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 "MHSettings.ini" "General" "Leashing" "${doLeash}" 
         /ini "MHSettings.ini" "General" "LeashHolder" "${leashholder}" 
         /goto :LeashEnd 
       } 
       :LeashEnd 
     } 
   } 
  /goto :ForeverLoop 
/return   
Last edited by lazyshammy on Fri Dec 17, 2004 8:48 am, edited 2 times in total.

lazyshammy
orc pawn
orc pawn
Posts: 20
Joined: Sat Dec 11, 2004 2:49 pm

Post by lazyshammy » Sat Dec 11, 2004 4:15 pm

Code: Select all

|---- 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.Swimming},,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_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 "MHSettings.ini" "General" "AutoAssist" "${doAutoassist}" 
  /ini "MHSettings.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 "MHSettings.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 "MHSettings.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 "MHSettings.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 "MHSettings.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 "MHSettings.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 "MHSettings.ini" "General" "LeashHolder" "${leashholder}" 
  /ini "MHSettings.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 "MHSettings.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 "MHSettings.ini" "General" "AutoAssist" "${doAutoassist}" 
  /ini "MHSettings.ini" "General" "MainAssist" "${firstassist}" 
  /ini "MHSettings.ini" "General" "AssistPercentage" "${assistpct}" 
/return 

Sub Event_TogPause 
  /varset lastevent Event_TogPause 
  /beep 
  /if (${isPaused}) { 
    /varset isPaused FALSE 
    /if (${verbosity}>=0) /${channel} ** Monk Helper is now RESUMING! 
  } else { 
    /varset isPaused TRUE 
    /if (${verbosity}>=0) /${channel} ** Monk 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 "MHSettings.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 "MHSettings.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 "MHSettings.ini" "General" "AutoDisarm" "${doDisarm}" 
/return 

Sub Event_TogIntim 
  /varset lastevent Event_TogIntim 
  /if (${doIntim}) { 
    /varset doIntim FALSE 
    /if (${verbosity}>=0) /${channel} ** Auto-Intimidation is now OFF! 
  } else { 
    /varset doIntim TRUE 
    /if (${verbosity}>=0) /${channel} ** Auto-Intimidation is now ON! 
  } 
  /ini "MHSettings.ini" "General" "AutoIntim" "${doIntim}" 
/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 "MHSettings.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 "MHSettings.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 "MHSettings.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 "MHSettings.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 "MHSettings.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 "MHSettings.ini" "General" "AutoNinjaMode" "${ninjamode}" 
  /ini "MHSettings.ini" "General" "AutoNinjaDistance" "${ninjadist}" 
/return 

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 "MHSettings.ini" "General" "WeaponSwitching" "${doSwitch}" 
  /ini "MHSettings.ini" "Weapons" "Weapon1" "${weapon1}" 
  /ini "MHSettings.ini" "Weapons" "Weapon2" "${weapon2}" 
  /ini "MHSettings.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 "MHSettings.ini" "General" "StickRangeToTarget" "${rngtarget}" 
  /ini "MHSettings.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 "MHSettings.ini" "General" "AutoChicken" "${doChicken}" 
  /ini "MHSettings.ini" "General" "VoidHealth" "${Voidhealth}" 
/return 

Sub Event_SetFD(string Line) 
  /varset lastevent Event_SetFD 
  /if (${Line.Arg[3].Equal[OFF]}) { 
    /varset doFD FALSE 
    /if (${verbosity}>=0) /${channel} ** AutoFD is now OFF! 
  } else /if (${Line.Arg[3].Equal[ON]}) { 
    /varset doFD TRUE 
    /if (${verbosity}>=0) /${channel} ** AutoFD is now ON! 
  } else { 
    /varset doFD TRUE 
    /if (${Line.Arg[3].Length}) /varset FDhp ${Line.Arg[3]} 
    /if (${verbosity}>=0) /${channel} ** AutoFD: ${doFD} -- Hp to FD at: ${FDhp}%
  } 
  /ini "MHSettings.ini" "General" "AutoFD" "${doFD}" 
  /ini "MHSettings.ini" "General" FDhp" "${FDhp}" 
/return 


Sub Event_SetKick(string Line) 
  /varset lastevent Event_SetKick
    /if (${Line.Arg[3].Length}) /varset Kick ${Line.Arg[3]} 
    /if (${verbosity}>=0) /${channel} ** Kick now set to: ${kick}
  } 
  /ini "MHSettings.ini" "General" "Kick" "${Kick}" 
/return 

Sub Event_SetMend(string Line) 
  /varset lastevent Event_SetMend 
  /if (${Line.Arg[3].Equal[OFF]}) { 
    /varset doMend FALSE 
    /if (${verbosity}>=0) /${channel} ** AutoMend is now OFF! 
  } else /if (${Line.Arg[3].Equal[ON]}) { 
    /varset doMend TRUE 
    /if (${verbosity}>=0) /${channel} ** AutoMend is now ON! 
  } else { 
    /varset doMend TRUE 
    /if (${Line.Arg[3].Length}) /varset Mendhp ${Line.Arg[3]} 
    /if (${verbosity}>=0) /${channel} ** AutoMnd: ${doMend} -- Hp to FD at: ${Mendhp}%
  } 
  /ini "MHSettings.ini" "General" "AutoMend" "${doMend}" 
  /ini "MHSettings.ini" "General" "Mendhp"   "${Mendhp}" 
/return 

Sub Event_SetDisc1(string Line) 
  /varset lastevent Event_SetDisc1 
  /if (${Line.Arg[3].Equal[OFF]}) { 
    /varset doDisc1 FALSE 
    /if (${verbosity}>=0) /${channel} ** Autodisc #1 is now OFF! 
  } else /if (${Line.Arg[3].Equal[ON]}) { 
    /varset doDisc1 TRUE 
    /if (${verbosity}>=0) /${channel} ** Autodisc #1 is now ON! 
  } else { 
    /varset doDisc1 TRUE 
    /if (${Line.Arg[3].Length}) /varset disc1 ${Line.Arg[3]} 
    /if (${Line.Arg[4]} > 0) /varset disc1end ${Line.Arg[4]} 
    /if (${Line.Arg[5]} > 0) /varset disc1reuse ${Line.Arg[5]} 
    /if (${verbosity}>=0) /${channel} ** Auto Disc #1: ${doDisc1} -> ${disc1}/${disc1reuse} mins - End: ${disc1end} 
  } 
  /ini "MHSettings.ini" "General" "AutoDisc1" "${doDisc1}" 
  /ini "MHSettings.ini" "General" "Disc1" "${disc1}" 
  /ini "MHSettings.ini" "General" "Disc1Endurance" "${disc1end}" 
  /ini "MHSettings.ini" "General" "Disc1Reuse" "${disc1reuse}" 
/return 

Sub Event_SetDisc2(string Line) 
  /varset lastevent Event_SetDisc2 
  /if (${Line.Arg[3].Equal[OFF]}) { 
    /varset doDisc2 FALSE 
    /if (${verbosity}>=0) /${channel} ** Autodisc #2 is now OFF! 
  } else /if (${Line.Arg[3].Equal[ON]}) { 
    /varset doDisc2 TRUE 
    /if (${verbosity}>=0) /${channel} ** Autodisc #2 is now ON! 
  } else { 
    /varset doDisc2 TRUE 
    /if (${Line.Arg[3].Length}) /varset disc2 ${Line.Arg[3]} 
    /if (${Line.Arg[4]} > 0) /varset disc2end ${Line.Arg[4]} 
    /if (${Line.Arg[5]} > 0) /varset disc2reuse ${Line.Arg[5]} 
    /if (${verbosity}>=0) /${channel} ** Auto Disc #2: ${doDisc2} -> ${disc2}/${disc2reuse} mins - End: ${disc2end} 
  } 
  /ini "MHSettings.ini" "General" "AutoDisc2" "${doDisc2}" 
  /ini "MHSettings.ini" "General" "Disc2" "${disc2}" 
  /ini "MHSettings.ini" "General" "Disc2Endurance" "${disc2end}" 
  /ini "MHSettings.ini" "General" "Disc2Reuse" "${disc2reuse}" 
/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 "MHSettings.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} ** MH Output Channel: ${channel} 
  /ini "MHSettings.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 
/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 
/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[MHSettings.ini,General,FollowDistance].NotEqual[NULL]}) /varset distance ${Ini[MHSettings.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 "MHSettings.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 "MHItems.ini" "${Line.Arg[3]}" "FullName" "${Line.Arg[5]}"  
  /ini "MHItems.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[MHItems.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[MHItems.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 "MHItems.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[MHItems.ini,${Line.Arg[3]}].Length}) { 
    /if (${verbosity}>=0) /${channel} ** [${Line.Arg[3]}] not in INI file! 
    /return 
  } 
  /declare fullname string local ${Ini[MHItems.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[MHSettings.ini,Masters,Controller${index}].Equal[Nobody]}) { 
        /ini "MHSettings.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[MHSettings.ini,Masters,Controller${index}].Equal[${Line.Arg[3]}]}) { 
        /ini "MHSettings.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[MHSettings.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} --------=========(MH Help)=========---------- 
  /if (${verbosity}>=0) /${channel} /MHhelp - Display this information! 
  /if (${verbosity}>=0) /${channel} /status - Display status of all MH modes 
  /if (${verbosity}>=0) /${channel} /pause - Suspends the operations of MH 
  /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} /autoIntim - Toggles Intimidation on or off
  /if (${verbosity}>=0) /${channel} /Kick [Name] - Sets the type of attack you wish to use eg Flying Kick
  /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} /autofd [ON|OFF|FD%]
  /if (${verbosity}>=0) /${channel} /autoMend [ON|OFF|Mend%]
  /if (${verbosity}>=0) /${channel} /autodisc1 "Discipline Name"|ON|OFF <end%> <reuse> - Auto disc 1 
  /if (${verbosity}>=0) /${channel} /autodisc2 "Discipline Name"|ON|OFF <end%> <reuse> - Auto disc 2 
  /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 
/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}, Kick set to: ${Kick}, Auto Intim: ${dointim}
  /if (${verbosity}>=0) /${channel} ** Auto Chicken: ${doChicken} -- Voiddance: ${Voidhealth}% 
  /if (${verbosity}>=0) /${channel} ** Auto Mend: ${domend} -- Mend at: ${Mendhp}% 
  /if (${verbosity}>=0) /${channel} ** Auto FD: ${doFD} -- FD at: ${FDhp}% 
  /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} mins - End: ${disc1end}% 
  /if (${verbosity}>=0) /${channel} ** Auto Disc #2: ${doDisc2} -> ${disc2} / ${disc2reuse} mins - End: ${disc2end}% 
  /if (${verbosity}>=0) /${channel} ** Dynamic Aggro Control: ${doDynaggro} 
  /if (${verbosity}>=0) /${channel} ** WeaponSwitching: ${doSwitch}, ${weapon1}->${weapon2} (${switchtext}) 
  /if (${verbosity}>=0) /${channel} ** Authorized remote controllers: 
  /for i 1 to 20 
    /if (${Ini[MHSettings.ini,Masters,Controller${i}].NotEqual[Nobody]}) /if (${verbosity}>=0) /${channel} ---- ${Ini[MHSettings.ini,Masters,Controller${i}]} allowed... 
  /next i 
  /doevents flush 
/return
Last edited by lazyshammy on Fri Dec 17, 2004 8:49 am, edited 1 time in total.

IskarMonky
decaying skeleton
decaying skeleton
Posts: 1
Joined: Tue Dec 14, 2004 4:43 pm

Post by IskarMonky » Tue Dec 14, 2004 4:54 pm

Just started using MQ2 and was looking at doing this myself. Looks like you did a great job though!!

Have had one problem though. Can't remember the exact error, but something about an unparsed if statement on the /stand statement. Traced it to the following;

Sub Event_GotHit
/varset lastevent Event_GotHit
/if (!${aggrotimer}) /if (${verbosity}>=1) /${channel} ** AGGRO Detected (struck) **
/if (${Me.State[Feign]}) /stand <------HERE
/varset gotHit TRUE
/varset aggrotimer 5s
/return

Sub Event_GotMissed
/varset lastevent Event_GotMissed
/if (!${aggrotimer}) /if (${verbosity}>=1) /${channel} ** AGGRO Detected (whiff) **
/if (${Me.State[Feign]}) /stand <-------HERE
/varset gotHit TRUE
/varset aggrotimer 5s
/return

Those two lines shoud be:

/if (${Me.State.Equal[Feign]}) /stand

At least this has gotten rid of the errors for me.

IskarMonky

Do not MEDDLE in the affairs of DRAGONS, for you are CRUNCHY and taste good with KETCHUP!

lazyshammy
orc pawn
orc pawn
Posts: 20
Joined: Sat Dec 11, 2004 2:49 pm

Post by lazyshammy » Fri Dec 17, 2004 8:41 am

ok thanks, i never really got around to testing some of this stuff SK version been taking up most of my Time

gxs
orc pawn
orc pawn
Posts: 24
Joined: Sun Dec 19, 2004 3:00 pm

Post by gxs » Sun Dec 19, 2004 7:08 pm

annyway to get there wehere it doesnt frantically turn around the mobs? looks suspicious sort of when its blocky

lazyshammy
orc pawn
orc pawn
Posts: 20
Joined: Sat Dec 11, 2004 2:49 pm

Post by lazyshammy » Mon Dec 20, 2004 12:59 pm

to stop it trying to go behind i guess you could try to just fix it by setting the is tanking Var to true at begining if you are using MQ2MoveUtils, if your not i dont know as yet, i have not modified the code from Jerle RH

Code: Select all

     |- Use MQ2MoveUtils ? If so, start sticking and bypass MH movement tools 
     /if (${useMU}) { 
       /varset isTanking FALSE <------ TRUE
       /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.Swimming},uw,]} 
         } else { 
           /squelch /stick ${closeness}% behind mpause ${If[${Me.Swimming},uw,]} 
         } 

gxs
orc pawn
orc pawn
Posts: 24
Joined: Sun Dec 19, 2004 3:00 pm

Post by gxs » Tue Dec 21, 2004 12:57 am

that did the trick, thanks a bunch!

Phatsacks
decaying skeleton
decaying skeleton
Posts: 5
Joined: Sat Nov 13, 2004 7:59 pm

Post by Phatsacks » Tue Dec 28, 2004 1:51 pm

Posted this in the other MH thread:

Awesome macro, still trying to get the hang of the settings. I've successfully added a master, setup the mend, attack, fd settings. However i'm not autosticking. I keep getting the "seeking a victim..." I move what seems to be 1 point of loc, as if i was about to autostick, and I don't. I stared at settings for awhile and tried a few different things

Any advice?

Edit: (More details)

**Too far away - Getting 20% closer now!

Just repeats, and I don't move, /stick works just fine otherwise

/dynclose off removes this message, but hasn't changed anything

I even tried doing /stick while the macro is loaded and unless I add in a % number /stick 15 for instance, I dont' budge, only when I add in a number do I move a hair and that is it. If I /pause, then try stick it works no problem. I tried solving this myself, and I read several pages in different threads to see if I could find the answer on my own, but no luck. Appreciate any help with this.

idoit2
orc pawn
orc pawn
Posts: 12
Joined: Thu Nov 11, 2004 2:18 am

..

Post by idoit2 » Fri Feb 04, 2005 2:34 am

does the zip still work for Mh.. doesnt seem to work for me thanks.

superslam
a lesser mummy
a lesser mummy
Posts: 47
Joined: Sat Jan 22, 2005 3:34 pm

Post by superslam » Fri Feb 04, 2005 9:48 am

Nice work, I'm also working on one of these for berserkers =) We'll see how it turns out.

dewey2461
Contributing Member
Contributing Member
Posts: 1759
Joined: Sun Apr 17, 2005 1:53 am

For those with Crippling Strike .. aka .. Monk SNARE!

Post by dewey2461 » Sat Oct 01, 2005 4:42 pm

Heres a mod to auto snare mobs.

1. Add timer to the /declare section ....

..............
/declare channel string outer echo
/declare MHVersion string outer 1.2

/declare snaretimer timer outer 0



2. Add this block of code somewhere in the main loop - I choose after the check of the Kick Ready

|- If in combat and Crippling Strike ready and target hp < 20% use it.
/if (${Me.Combat} && ${Target.ID} && ${Target.PctHPs}<20 && ${Me.AltAbilityReady[468]} && !${snaretimer} && ${Target.Distance} < 50 ) {
/echo Do Snare now!
/alt activate 468
|- Added so we don't spam the key
/varset snaretimer 5
}

Not fully tested yet but seems to work

3ball
a lesser mummy
a lesser mummy
Posts: 65
Joined: Fri Dec 17, 2004 10:43 am
Location: Florida
Contact:

Post by 3ball » Mon Oct 03, 2005 1:31 pm

There is a completed, working berserker version of Rogue helper in VIP macros. Even has disciplines, volleys, and the rest properly implemented. Good motivation for you to toss in a few bucks to the admins eh?

Below code...
This option will keep you not in front of the mob, so off to the side or behind.
This option should reduce the amount your toon moves around during a fight with a mob when you are not the
target as your will only adjust your position if you you are in the front 180 degrees of the mob, as long as you are
in the behind 180 degrees you will not move around just because the mob shifts.

(straight rip from http://www.macroquest2.com/phpBB2/viewt ... 2moveutils)

Code: Select all

|- Use MQ2MoveUtils ? If so, start sticking and bypass MH movement tools 
     /if (${useMU}) { 
       /varset isTanking FALSE <------ TRUE 
       /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.Swimming},uw,]} 
         } else { 
           [b][color=red]/squelch /stick ${closeness}% !front mpause ${If[${Me.Swimming},uw,]}[/color][/b] 
         }

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 » Mon Oct 03, 2005 1:47 pm

The latest version of MoveUtils also uses HoTT to determine if you're the mob's Target, and turns of /stick behind, !front, pin, etc, until you are no longer tanking.
[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]

3ball
a lesser mummy
a lesser mummy
Posts: 65
Joined: Fri Dec 17, 2004 10:43 am
Location: Florida
Contact:

Post by 3ball » Mon Oct 03, 2005 2:09 pm

hey a_druid, so if HOTT wasn't available, you'd not get that functionality, right? Or does it function whether HOTT is available or not?