Lazy Tank - need help

Status
Not open for further replies.

Anishp

New member
Joined
Jul 19, 2006
Messages
53
Reaction score
0
Points
0
Hello I am trying to clean up this mac a bit need some help if anyone could take a look at it / test it out for me please.
I am not the original author of the mac I have just tweaked / removed bits and tried to modify it.

Basically I am trying to remove the bits about bows, raids, and also the lines relating to calling the group assist to a certain mob or ready to tag etc and also make the ENRAGE routine more sensitive.
At the moment I seem to plow rage a lot and die on almost every 2-4 mobs.

Any help testing / modifying this would be appreciated.


Code:
#Event CampCheck    "#1# says out of character, #*#camp check#*#" 
#Event CampCheck    "#1# shouts, #*#camp check#*#" 
#Event GotSummoned  "You have been summoned!" 
#Event Enraged       "#*#|${Target.CleanName}| has become ENRAGED#*#" 
#Event EnragedOff   "#*#|${Target.CleanName}| is no longer enraged#*#" 
#Event MobGate      "|${Target.CleanName}| begins to cast the gate spell#*#" 
#Event MobDead      "#*#You have slain#*#" 
#Event MobDead      "#*#has been slain by#*#" 
#event GotHit       "#*#hits YOU for#*#" 
#event GotHit       "#*#slashes YOU for#*#" 
#event GotHit       "#*#crushes YOU for#*#" 
#event GotHit       "#*#bashes YOU for#*#" 
#event GotHit       "#*#kicks YOU for#*#" 
#event GotHit       "#*#smashes YOU for#*#" 
#event GotHit       "#*#mauls YOU for#*#" 
#event GotHit       "#*#gores YOU for#*#" 
#event GotHit       "#*#pierces YOU for#*#" 
#event GotHit       "#*#kicks YOU for#*#" 
#event GotHit       "#*#bashes YOU for#*#"  
#event Zoned        "You have entered#*#" 
#Event TooFarAway   "#*#Your target is too far away, get closer#*#" 
#event NotStanding  "#*#You must be standing to attack!#*#" 
#event NoSeeTarget  "#*#You cannot see your target.#*#" 
#event NoSeeTarget  "#*#You can't hit them from here#*#" 
#event Dead         "#*#Returning to home point#*#" 
#event ManualLoot   "[MQ2] loooot#*#" 
#event MakeCamp     "[MQ2] make camp#*#" 
#event SetPuller    "[MQ2] set puller #1#" 
#event SetRaidMA    "[MQ2] set raidma #1#" 
#event RaidMode     "[MQ2] set raidmode#*#" 
#event beepbeep     "#*# tells you#*#wake up#*#" 
#event Restart      "#1# tells the group, #*#reset home!#*#" 
#event Restart      "#1# tells you, #*#reset home!#*#" 
#event AssistPuller "|${Puller}| tells the group, 'assist me#*#" 

#include advloot.inc 
#include wait4rez.inc 
#include spell_routines.inc 

#define DEBUG_1 "/squelch /echo" 
#define DEBUG_2 "/echo" 

Sub Main 
/echo Now running lazytank, combat helper... 
/if (!${Bool[${Plugin[mq2moveutils]}]}) { 
  /echo MQ2MoveUtils not detected!  This macro requires it! 
  /beep 
  /end 
} 
/declare ResetMasters      string outer "YOURMASTER" 
/declare Provoke           string outer "Bazu Bellow" 
/declare ShieldDistance    int    outer 25 
/declare ShootBow                 outer TRUE 
/declare AssistMeAt        int    outer 98 
/declare Puller            string outer 
/declare PullerID          int    outer 
/declare RaidMode          string outer FALSE 
/declare RaidMA            string outer 
/declare RaidEngageAt      int    outer 96 
/declare Closeness         int    outer 99 
/declare DefaultPuller     string outer YOURFAVORITEPULLER 
/declare Casters           string outer Necromancer|Enchanter|Wizard|Magician|Cleric|Druid|Shaman 
/declare CallAssist        string outer TRUE 
/declare Verbose                  outer TRUE 
/declare Channel           string outer /gsay 
/declare HomeXLoc          int    outer ${Me.X} 
/declare HomeYLoc          int    outer ${Me.Y} 
/declare Berated                  outer FALSE 
/declare Engaged                  outer   FALSE 
/declare DeadTarget               outer FALSE 
/declare Adds                     outer TRUE 
/declare DEBUG                    outer FALSE 
/declare TargetArray[4]    string outer 
/declare ShieldTimer       timer  outer 300s        
/declare LootMobs          int    outer 1 
/declare CorpseList        string outer 0 
/declare CorpseRadius      int    outer 70 
/declare MobsTooClose      int    outer 50 
/declare CorpseAlertList   int    outer 70 
/declare CorpseRotTime     string outer 440s 
/declare CorpseRotTimer    timer  outer 
/declare CorpseRotSetTimer string outer FALSE 
/declare LootINIFile       string outer "${Me.Name}_loot.ini" 
/declare useAutoLoot       string outer TRUE 
/declare cz                string local ${Zone} 
/declare BowShots          int    outer 0 
/declare WaitTimer         timer  outer 
/declare SanityTimer       timer  outer 
/declare OldItem           string outer 
/squelch /alias /lootmobs /echo loooot 
/squelch /alias /makecamp /echo make camp 
/squelch /alias /setpuller /echo set puller 
/squelch /alias /setraidma /echo set raidma 
/squelch /alias /setraidmode /echo set raidmode 

/if (!${Target.Type.Equal[NPC]}) { 
  /if (!${Target.ID} || ${Target.Type.NotEqual[PC]} || ${Target.Type.Equal[Corpse]} || ${Target.Type.Equal[PET]}) { 
    /varset Puller ${DefaultPuller} 
    /target ${Puller} 
    /delay 3 
    /varset PullerID ${Target.ID} 
    /squelch /target clear 
  } else { 
    /varset Puller ${Target} 
    /target ${Puller} 
    /delay 3 
    /varset PullerID ${Target.ID} 
    /squelch /target clear  
  } 
} 

/if (${PullerID}) { 
  /echo I Will assist ${Puller} for incoming targets. 
  /echo I Will call assist from the group at ${AssistMeAt}% 
  /echo I am using ${Provoke} for my provoke /disc 
} else { 
  /echo Waiting for mobs to come to camp... 
} 
/if (${Verbose}) /echo Default channel for announcements is ${Channel} 
/if (!${InvSlot[charm].Item.Name.Length} && !${InvSlot[chest].Item.Name.Length} && !${InvSlot[head].Item.Name.Length} ) /call Event_Dead 

:Main_Loop 
DEBUG_1 top of main loop. 
  /delay 1 
  :needamob 
  /doevents 
  /if (!${Target.ID} && ${PullerID} && ${Spawn[${PullerID}].Distance} < 180 && !${RaidMode}) { 
    /squelch /assist ${Puller} 
    /delay 3 
    /if (${Target.Type.Equal[PC]}) /target clear 
    /delay 3 
    /if (${Target.Type.Equal[PC]}) /target clear 
    /if (${Target.ID} && ${Target.ID} != ${Me.ID}) { 
      /face fast 
      /if (${DEBUG}) /echo Setting TargetArray 
      /varset TargetArray[1] ${Target.CleanName} 
      /varset TargetArray[2] ${Target.Level} 
      /varset TargetArray[3] ${Target.Name} 
      /varset TargetArray[4] ${Target.ID} 
      /varset SanityTimer 1m 
    } else /if (${Target.ID} == ${Me.ID}) { 
      /squelch /target clear 
    } 
  } 
  /if (${Target.ID} && ${Verbose}&& ${Target.Type.Equal[NPC]}) ${Channel} Ready to tag ${Target.CleanName} from you, bring it in! 
  /if (!${Target.ID} && ${PullerID} && ${Spawn[${PullerID}].Type.Equal[PC]}) { 
    /goto :needamob 
  } else { 
    /call CheckForAdds 
  } 
  :waitformob 
  /doevents 
DEBUG_2 :waitformob 
    :BowShot 
DEBUG_2 :Bowshot Bowshots: ${BowShots}, ShootBow: ${ShootBow} 
    /if (${Target.ID} && ${Target.LineOfSight} && ${ShootBow} && ${Target.Distance} > 40 && ${Target.Type.Equal[NPC]} && ${BowShots} < 3 && ${Target.Distance} < 225) { 
DEBUG_2 Inside /goto :BowShot 
      /face fast 
      /ranged 
      /varcalc BowShots ${BowShots}+1 
      /delay 12 
      /goto :BowShot 
    } 
    /if (${Target.Distance} > 60 && ${Target.ID} && ${Target.Type.Equal[NPC]} && ${SanityTimer} && ${Target.ID} != ${Me.ID}) { 
DEBUG_2 Inside /goto :waitformob 
      /delay 5 
      /face fast 
      /goto :waitformob 
    } 
  /if (${Math.Distance[${HomeYLoc},${HomeXLoc}]} < 100 && !${Target.ID} && !${RaidMode}) /call CheckForAdds 
  /if (${RaidMode} && !${Engaged}) { 
DEBUG_1 Inside /if ({RaidMode}) switch, main loop. 
    :HoldEngage 
    /assist ${RaidMA} 
    /delay 1 
    /doevents 
    /if (!${Target.ID} || ${Target.PctHPs} > ${RaidEngageAt}) /goto :HoldEngage 
    /varset Engaged TRUE 
    /squelch /stick 15 moveback 
    /call KillTarget 
  } 
  /if (${Target.ID} && ${Math.Distance[${HomeYLoc},${HomeXLoc}]} < 50 && ${Target.Distance} < 65 && ${Target.Type.Equal[NPC]}) { 
    /varset Engaged TRUE 
    /call KillTarget 
  } 
  /if (!${Target.ID}) /call ReadyForNext 
  /goto :Main_Loop 
/return 

Sub CheckForAdds 
DEBUG_1 Entered CheckForAdds 
  /if (${DEBUG}) /echo In CheckForAdds! 
  /declare i int local 1 
  /declare s int local 
  /for i 1 to 4 
    /varset s ${NearestSpawn[${i},npc].ID} 
    /if (${Spawn[${s}].Distance} < 60 && ${Math.Distance[${Me.Z}:${Spawn[${s}].Z}]} < 40 && ${Spawn[${s}].LineOfSight}) { 
      /squelch /target npc id ${s} 
      /if (${Verbose}) /echo Target Information: 
      /if (${Verbose}) /echo [ ${Target.Level} ${Target.Race} ${Target.Class} ] ${Target} ${Target.Surname} ( ${Target.Type} ) 
      /if (${DEBUG}) /echo Setting TargetArray 
      /varset TargetArray[1] ${Target.CleanName} 
      /varset TargetArray[2] ${Target.Level} 
      /varset TargetArray[3] ${Target.Name} 
      /varset TargetArray[4] ${Target.ID} 
      /return 
    } 
  /next i 
/return 

Sub KillTarget 
DEBUG_1 Entered KillTarget 
  /declare BackTimer timer local 5s 
  /varset SanityTimer 90s 
  /if (!${Target.ID}) /return 
   /varset WaitTimer 1s 
   :Waiting 
   /if (${WaitTimer}) { 
     /delay 1 
     /doevents 
     /goto :Waiting 
   } 
   :Combat 
  /doevents 
   /if (!${SanityTimer} && ${Target.Distance} > 20) { 
     /squelch /target clear 
     /delay 3 
     /call ReadyForNext 
     /return 
   } 
   /if (${Paused}) { 
     /delay 1s 
     /doevents 
     /goto :Combat 
   } 
   /if (${Target.ID}) { 
     /face fast nolook 
     /if (${CallAssist} && ${Verbose}) /call AssistMe 
    /if (${Me.PctHPs}<=9) /call DoFurious 
  } 
  /if (${Me.Feigning}) { 
    /stand 
    /delay 1 
    /attack on 
    /if (${Target.Distance} > 12) /stick 10 moveback 
  } 
  /if (${Target.Distance} > 140) { 
    /target clear 
    /varset Engaged FALSE 
    /return 
  } 
   /if (!${Berated} && ${Me.CombatAbilityReady[${Provoke}]} && !${RaidMode}) /call DoIncite 
   /if (!${Me.Combat} && ${Int[${Target.Distance}]} < 70) /squelch /stick 10 moveback 
  /if (!${Me.Combat} && ${Target.Distance} < ${Target.MaxRangeTo}) /attack on 
  /if (!${Me.TargetOfTarget.Name.Equal[${Me}]}) /if (${Target.Distance} < 25 && ${Me.AbilityReady["Taunt"]} && !${RaidMode}) /doability "Taunt" 
   /if (!${Me.Combat} && ${Int[${Target.Distance}]} < 100 && ${RaidMode}) /stick moveback behindonce ${Math.Calc[${Target.MaxRangeTo}*${Closeness}/100]} 
   /if (${BackTimer} <=1 && ${RaidMode} && ${Me.Combat}) { 
     /stick moveback behindonce ${Math.Calc[${Target.MaxRangeTo}*${Closeness}/100]} 
     /varset BackTimer 5s 
   } 
   /if (!${ShieldTimer} && ${Me.PctHPs} > 40) /call DoShielding 
  /if (!${Target.ID} || ${Target.Type.Equal[Corpse]}) { 
    /squelch /target clear 
    /delay 3 
    /attack off 
    /delay 3 
    /call CheckForAdds 
    /if (${Target.ID}) /call KillTarget 
    /doevents MobDead 
    /return 
  } 
  /doevents 
  /goto :Combat 
/return    

Sub DoShielding 
DEBUG_1 Entered DoShielding 
  /if (${Me.TargetOfTarget.PctHPs} < 30 && ${Me.TargetOfTarget.Type.Equal[pc]} && ${Me.PctHPs} > 50 && ${Me.TargetOfTarget.Distance} <= ${ShieldDistance} && ${Me.TargetOfTarget.ID} != ${Me.ID}) { 
    /shield ${Me.TargetOfTarget} 
    /varset ShieldTimer 300s 
    /if (${Verbose}) ${Channel} SHIELDING is now on ${Me.TargetOfTarget} 
    /return 
  } 
  /declare i int local 0 
  /for i 1 to ${Group} 
    /if (${Casters.Find[${Group.Member[${i}].Class}]} && ${Group.Member[${i}].PctHPs} < 60 && ${Group.Member[${i}].Distance} <= ${ShieldDistance}) { 
      /shield ${Group.Member[${i}]} 
      /varset ShieldTimer 300s 
      /if (${Verbose}) ${Channel} Now SHIELDING ${Group.Member[${i}]}!! 
      /return 
    } 
/return 

Sub ReadyForNext 
DEBUG_1 Entered ReadyForNext 
  /if (!${Me.Buff[Nettle Shield].ID} && ${Spawn[pc DRUIDFRIEND].ID}) { 
    /tell DRUIDFRIEND ds 
    /delay 6s 
  } 
  /if (!${Me.Buff[Steeloak Skin].ID} && !${Me.Buff[Conviction].ID} && !${Me.Buff[Hand of Conviction].ID} && ${Spawn[pc DRUIDFRIEND].ID}) { 
    /tell DRUIDFRIEND ss please 
    /delay 9s 
  } 
  /if (!${Me.Buff[Ward of Valiance].ID} && !${Me.Buff[Conviction].ID} && !${Me.Buff[Hand of Conviction].ID} && ${Me.Buff[Steeloak Skin].ID} && ${Spawn[pc CLERICFRIEND].ID}) { 
    /tell CLERICFRIEND buffme 
    /delay 7s 
  } 
  /if (!${Me.Buff[Symbol of Balikor].ID} && !${Me.Buff[Balikor's Mark].ID} && !${Me.Buff[Conviction].ID} && !${Me.Buff[Hand of Conviction].ID} && ${Me.Buff[Steeloak Skin].ID} && ${Spawn[pc CLERICFRIEND].ID}) { 
    /tell CLERICFRIEND balikor 
    /delay 7s 
  } 
  /if (!${Me.Buff[Speed of Salik].ID} && !${Me.Buff[Hastening of Salik].ID} && ${Spawn[pc CHANTER].ID}) { 
    /tell CHANTER haste 
    /delay 10s 
  } 
  /if (!${Me.Buff[Ward of Valiance].ID} && !${Me.Buff[Conviction].ID} && !${Me.Buff[Hand of Conviction].ID} && !${Me.Buff[Steeloak Skin].ID} && ${Spawn[pc CLERICFRIEND].ID}) { 
    /tell CLERICFRIEND V 
    /delay 7s 
  } 
  /if (!${Me.Buff[Form of Defense I].ID}) { 
    /call EquipItem "Shroud of the Fallen Defender" back 
    /varset OldItem ${Macro.Return} 
    /call cast "Form of Defense 1" item 10s 
    /delay 5 
    /call EquipItem "${OldItem}" back 
  } 
  /varset Closeness 99 
  /varset CallAssist TRUE 
  /varset Engaged FALSE 
  /varset Berated FALSE 
  /varset BowShots 0 
  /varset Adds    TRUE 
DEBUG_1 Leaving ReadyForNext 
/return 
  
Sub DoFurious 
DEBUG_1 Entereed DoFurious 
  /if (${Me.CombatAbilityReady["Furious"]}) { 
    /disc Furious 
    /echo Health too low! Hitting Furious! 
    /if (${Verbose}) ${Channel} Going into Riposte mode!  Will need healing within 12 seconds! 
  } 
/return 

Sub AssistMe 
DEBUG_1 Entered AssistMe 
  /if (${CallAssist} ${Target.PctHPs} <= ${AssistMeAt} && ${Me.Combat}) { 
    /if (${Verbose}) /gsay Assist me now on [ %t ] 
    /varset CallAssist FALSE 
  } 
/return 

Sub ReturnHome 
DEBUG_1 Entered ReturnHome 
  :MoveHome 
  /doevents 
  /face fast nolook loc ${HomeYLoc},${HomeXLoc} 
  /if (${Math.Distance[${HomeYLoc},${HomeXLoc}]}>20) /keypress forward hold 
  /call AreWeStuck 
  /if (${Math.Distance[${HomeYLoc},${HomeXLoc}]}<25) { 
    /keypress forward 
    /keypress back 
    /keypress left 
    /keypress right 
    /if (${DEBUG}) /echo Leaving Sub ReturnHome 
    /return 
  } 
  /goto :MoveHome 
/return 

Sub AreWeStuck 
   /doevents 
  /declare  StuckXLoc      int local ${Me.X} 
  /declare  StuckYLoc      int local ${Me.Y} 
  /delay 5 
  /if (${StuckXLoc}==${Me.X} && ${StuckYLoc}==${Me.Y}) /call MoveAround 
/return 

Sub MoveAround 
  /doevents 
  /keypress forward 
  /keypress back hold 
  /delay 3 
  /keypress back 
  /if (${Math.Rand[2]}) { 
     /keypress strafe_right hold 
  } else { 
     /keypress strafe_left hold 
  } 
  /delay 10 
  /keypress strafe_right 
  /keypress strafe_left 
/return 

Sub DoIncite 
DEBUG_1 Inside DoIncite 
  /if (${Me.PctEndurance} > 40 && !${Berated} && ${Target.Distance} < 50) { 
DEBUG_1 DoIncite, /if statement 
    /squelch /face nolook fast 
    /delay 1 
    /disc Bazu 
    /delay 1 
    /varset Berated TRUE 
  } 
/return 

Sub Event_GotSummoned 
  /keypress back hold 
  /delay 5 
  /keypress back 
/return 

Sub Event_Dead 
  /call Wait4Rez 
/return 

Sub Event_SetRaidMA(string Line,string NewRaidMA) 
  /varset RaidMA ${NewRaidMA} 
  /if (${Verbose}) /echo Now assisting ${RaidMA} for incoming Raid Targets 
/return 

Sub Event_SetPuller(string Line,string NewPuller) 
  /varset Puller ${NewPuller} 
  /target ${Puller} 
  /delay 2 
  /varset PullerID ${Target.ID} 
  /squelch /target clear 
  /if (${Verbose}) /echo Now assisting ${Puller} for incoming mob target! 
/return 

Sub Event_MobGate 
  /if (${Verbose}) ${Channel} ${Target.CleanName} is GATING!  Stun/Mezz! 
/return 

Sub Event_MakeCamp 
  /varset HomeXLoc ${Me.X} 
  /varset HomeYLoc ${Me.Y} 
/return 

Sub Event_Enraged 
   /attack off 
   /delay 1 
   /varset Paused TRUE 
   /echo Mob is Enraged, turning off attack and waiting! 
/return 

Sub Event_EnragedOff 
   /attack on 
   /delay 2 
   /varset Paused FALSE 
   /echo Enrage off, attacking.. 
/return 

Sub Event_TooFarAway 
  /if (${RaidMode}) { 
    /echo ** Too far away - Getting 10% closer now! 
    /varset Closeness ${Math.Calc[${Closeness}*0.9].Int} 
    /if (${Closeness}<20) /varset Closeness 20 
    /stick hold loose behindonce ${Math.Calc[${Target.MaxRangeTo} * ${Closeness} / 100]} 
    /return 
  } 
  /if (${Math.Distance[${HomeYLoc},${HomeXLoc}]} > 100) /call ReturnHome 
  /if (${Spawn[${TargetArray[4]}].ID} && ${Target.ID} != ${TargetArray[4]}) { 
    /squelch /target id ${TargetArray[4]} 
    /delay 1s ${Target.ID} == ${TargetArray[4]} 
    /squelch /stick 12 moveback 
  } else { 
    /squelch /stick 12 moveback 
  } 
/return 

Sub Event_GotHit 
  /if (!${Engaged}  && !${Target.ID}) { 
    /target radius 15 npc 
    /varset Engaged TRUE 
    /call KillTarget 
  } 
/return 

Sub Event_NotStanding 
  /if (!${Engaged}  || ${Target.ID}) /return 
  /call MoveAround 
  /target radius 60 npc 
  /call KillTarget 
/return 

Sub Event_NoSeeTarget 
  /if (!${Engaged}  || ${Target.ID}) /return 
  /target radius 30 npc 
  /call KillTarget 
/return 

Sub Event_ManualLoot 
  /echo in manual loot 
  /call LootMobs 
/return 

Sub Event_MobDead 
  /delay 3 
  /if (${LootMobs}==1 && !${Me.Moving}) /call LootMobs 
  /call CheckForAdds 
  /if (${Target.ID}) /return 
  /if (${Math.Distance[${HomeYLoc},${HomeXLoc}]} > 30) /call ReturnHome 
/return 

Sub Event_Zoned 
  /varset cz ${Zone} 
  /varset HomeXLoc ${Me.X} 
  /varset HomeYLoc ${Me.Y} 
/return 

Sub Event_CampCheck 
  /if (${cz.Find[Muramite Provinggrounds]}) { 
    /if (${Math.Distance[${Me.Y},${Me.X}:-4200,-1800]} < 400) /ooc Stormer at Realms. 
  } 
/return 

Sub Event_beepbeep 
  /beep 
  /delay 2 
  /beep 
  /delay 2 
  /beep 
/return 

Sub Event_Restart(string Line,string Sender) 
  /if (${ResetMasters.Find[${Sender}]}) { 
    /squelch /target clear 
    /delay 1s !${Target.ID} 
    /varset TargetArray[4] 0 
    /varset Engaged FALSE 
    /call ReturnHome 
  } 
/return 

Sub Event_AssistPuller 
  /if (${Spawn[${PullerID}].Distance} > 200) { 
    /gsay You're too far away from camp to assist! 
  } else { 
    /assist ${Puller} 
    /if (${Target.ID} && ${Target.ID} != ${Me.ID}) { 
      /face fast 
      /if (${DEBUG}) /echo Setting TargetArray 
      /varset TargetArray[1] ${Target.CleanName} 
      /varset TargetArray[2] ${Target.Level} 
      /varset TargetArray[3] ${Target.Name} 
      /varset TargetArray[4] ${Target.ID} 
      /varset SanityTimer 1m 
    } else /if (${Target.ID} == ${Me.ID}) { 
      /squelch /target clear 
    } 
  } 
/return
 
Use mq2autoskills for enrage, i use this macro. I have the same spam, would be nice to get rid of it.
 
Throw this macro out, and start over again.

Start with MQ2Melee, and you're already 99% done.
 
Status
Not open for further replies.