• You've discovered RedGuides, an EverQuest multi-boxing and scripting community 🧙‍♀️⚙️. We want you to play several EQ characters at once, come join us and say hello! 👋

  • A TLP without truebox has thawed (Very Vanilla ready)
    Frostreaver

Healer.mac rewrite suggestions

Maskoi

old and salty
Joined
Sep 28, 2005
RedCents
82,796¢
**** Update 7/1/09 ****

OMFG this is a lot of work but making progress.

Some excellent Feedback so far. Thanks for the suggestions and please keep them coming.

|--- Changes from Original Healer.mac

[05-18-2009]
- Quick fix to be able to select Merc as MT
- Implemented Promised heal feature to include new expansions Promised Renewal@73 Promised Restoration@78 Promised Recuperation@83
- Changed recast time to 24 secs instead of 18 secs since Extended Spell Duration AAs affect PRHeal line of spells

[06-03-2009]
- Adjusted GoMana event to recognize all Gift of Mana AA messages
- Added Cleric Aura feature

[06-14-2009]
- Separated Nuke/DS/HammerPet into individual variables. Removed Autonuke feature that all these were grouped under previously.
- Removed the hard coded buff beg section was obsolete.
- Reorganized all Variables/spells into 4 areas Healing/Damage/Buffs/Misc for simplification
- Started to label/comment all subroutines for simplification and debugging
- Revised PRenewal timer to recognize if cleric has Spell Casting Reinforcement AA's.
- Removed nuke 2 and stun 2
- Will now dismount and turn off mount when using "Follow Me" command and reactivate mount with "Stop follow" command if to use mount is on.
- Added Mercenary recognition to turn off tells if Mercenary is MT
- Fixed Chat event channel wasn't recognizing requests from chat channel if active.

[06-23-2009]
- Added Clicky Support
- Reset all Gem9 code to Gem8
- Added "Use Mount" Chat/Tell Command to toggle mount usage on and off

[06-26-2009]
- Rewrote most of Nuke/DS/HammerPet section. Added a better targeting subroutine. All damage spells can be customized. % mana, % mob health, turn on/off, chat commands
- Added Epic 1.5 and epic 2.0 support under Divine arbitration. (Thanks to alt228's suggestion)
- Added Zoning protection to Divine Arbitration/Epics to prevent them from firing after cleric zones. (Thanks to alt228's suggestion)
- Added a chat/tell to activate Divine Arbitration/Epics
- Separated Variables into an INC not an ini file but it works. (I blame alt228)

[06-27-2009]
- Total rewrite of the :tankwatchloop tank targeting loop by Alatyami. (Thanks so much)
- Added resurrection support to chat request function

[06-29-2009]
- Sycn'd up help function with current spell casting commands
- Automatic recognition of complete heal vs promised heal line.
- Add timer to prevent over nuking

*** Preview of new settings file with renamed variables at the bottom of page ***

|--- Working on currently
- Syncing, rewriting, and cleaning up chat commands for buffs, nukes, and toggles
- Still cleaning up code and variables names.
- writing in macro help function/command list
- Rewriting the spell mem ruotines and gem 9/10 support.


|--- To Do List
- Add Spell Gem 9 and 10 recognition
- Add better HoT support i.e. hot tank automatically on inc.
- Define GoMana Event better code from my previous quick fix
- Add Divine Intervention support - Buffs Section
- Further definition of Mercenary recognition
- Revise /tell-say events to reflect current changes
- Add secondary tank recognition
- Add pet as main tank recognition
- Separate out main tank as controller functionality since MT can be mercenaries.
- Add a PL mode for recognizing tanks out of group (suggestion by Alatyami)
- Add Autohealmode 4 - Tank, cleric and my group will be healed but not manasponge merc warriors.

|--- Wish List
- Macro to search spell book and add predefined spell sets according to cleric level and settings
- Add chat recognition from healer mercs to prevent over healing


|--- Original Post Below

In my other post I updated the code for healer.mac. I have used this macro for about 5 years on and off and have loved it. The changes made it usable but it has gotten patchy over the years from those of us that have updated it. I want to try and streamline healer.mac so it is was as easy to use when it first came out. There are lots of macros out there for clerics but they all need 500 settings or 16 active plugins running. That is why this macro has always been my favorite because of its ease of use.

Unfortunately this will probably become a complete rewrite for healer.mac. I want to base it on the logical progression of a cleric though leveling from 1-85 and a clerics role in that party. So it will scale according to level of the cleric including AA's and gear.

I have played clerics as my main before and as boxes so I have a decent grasp of the class overall. I am starting this thread to present my logic behind the update. I am asking for ideas and suggestions because everyone plays a cleric different and may have different needs I have not thought of.

Main Goals

1. Rewrite healer.mac keeping the original functions and ideas intact while updating it for current EQ and MQ2.

2. Use as few plugins as possible
a. Macro will based on spell_routines.inc

3. Base logic on cleric level progression and role in group settings
a. Example a level 30 cleric will only have 8 spells slots, Spell gems 9 and 10 aren't even available until level 55 and 75.

4. Make macro settings intuitive and easy to use.
a. Lots of documentation and no obscure ini files with 500 settings only the original programmer understands

5 Make macro scalable for future expansions
a. Spell gem 11 and 12 lol?

What this macro won't do.

1. Run your cleric as a faceless box on raids in ch rotations.
2. Run your cleric around soloing acting a main tank or battle cleric
3. Run your shammy or druid or any other class.

Here are my ideas about basing the variables and spells on the game itself and level progression. For my first example I am only using healing spells and all that covers. This would be the core for the macro's base healing logic and routines. To start and to keep it simple stupid (KISS) items and AA's will be added later and only where they can replace or fit into these healing categories. i.e. Resurrection 96% - level 56 > Epic 1.0 - Level 46 > Blessing of Resurrection - level 65

Heals
Heal - level 1
Duration Heal - level 19
Heal Group - level 30
Heal Complete - level 39
Duration Heal Group - level 44
Quick Heal - level 51
Delayed Heal - level 73

Cures
Cure Poison - level 1
Cure Blindness - level 2
Cure Disease - level 4
Cure Curse - level 23
Cure Group - level 51 poison/disease
Cure Corruption - level 74

Resurrection
Resurrection 0% - level 12
Resurrection 96% - level 56

Realistically most people will power level their cleric to make them useful. The initial spell gems will be based on a 60 level cleric with no AA's or only 8 spell gems keeping the macro compatible with a lv 1 cleric. This line up in my experience is a good start allowing the cleric to heal and dps with a minimum of swapping spells in and out. I have left out DA initially because in my experience of a macro'd cleric it made little difference overall and the gem slot was better utilized for dps but it will be interesting to hear thoughts on leaving DA out.

Spell Gem 1 Heal/Quick Heal
Spell Gem 2 Heal Complete - CH
Spell Gem 3 Duration Heal - HoT
Spell Gem 4 Heal Group/Duration Heal Group
Spell Gem 5 Direct Damage - Nuke
Spell Gem 6 Pet
Spell Gem 7 Damage Shield/DA/DI
Spell Gem 8 Stun/Buffs/Misc/Cure/Resurrection/Pacify

Please post your ideas and comments. I am open to criticism if it is constructive and will help improve the macro.

Rich (BB code):
Sub Healer_Variables
| - healer_settings.inc 
| ---DO NOT DELETE THE FIRST OR LAST LINE
| - First Line: Sub Healer_Variables
| - Last Line: /return
| ------------------READ THIS SECTION AND EDIT IF NEEDED------------------------|
| - The following declarations are used to determine spell names and spell
| - ranges for the spells you would like to use.
|----------------------------------------------------------------------------
|   Healing Spells and AA's
|----------------------------------------------------------------------------
| - Spells
	/varset complete_heal  Promised Restoration
		/varset promised_heal_on  1
	/varset patch_heal  Solemn Light Rk. II
	/varset heal_over_time  Devout Elixir Rk. II
	/varset group_heal  Elixir of Atonement
		/varset group_heal_on  1
	/varset remove_curse  Remove Greater Curse
| - Heal percentages 
	/varset heal_self_%  70
	/varset interrupt_heal_self_hp_%  60
	/varset stop_healing_point_%  85
| - Heal at % for WAR/PAL/SK
	/varset heal_tank_%  69
| - Heal at % for WIZ/MAG/ENC/DRU
	/varset heal_over_time_caster_%  75
	/varset heal_caster_%  55
| - Heal at % for NEC/SHM
	/varset heal_nec_shm_%  45
| - Heal at % for all other classes
	/varset heal_default_%  60
| - Autohealmode 0 Tank only will be healed
| - Autohealmode 1 Tank and cleric only will be healed
| - Autohealmode 2 Tank, cleric and my group will be healed
| - Autohealmode 3 Tank and cleric will be healed before the rest of the group
    /varset autohealmode  3
| - Switches 0=OFF 1=ON
	/varset interrupt_on  1
	/varset heal_only_while_fd  1
	/varset interrupt_heal_self  1
	/varset divine_arbitration_on  1
	/varset divine_arbitration_heal_%  28
	/varset divine_arbitration_group_heal_after_on 1
	/varset divine_arbitration_interrupt_at_%  26
`
 
Last edited:
I always load my spell gems in order of use. Therefore, DA is 1 (for dangerous reloads). 2 is HoT, 3 is CH, 4 and 5 are group HoT and Group heal. Promise goes in gems 2 or 3 at higher levels. I'd love to see this macro rewritten!
 
Might be a good idea to have "spell sets".

/healer spellsetsave <new_set_name>
/healer spellsetload <saved_name>
 
Why wouldn't you just load the mac set before you run it? You can save a lot of spell sets now.
 
Is there a way to see if a spell set exists or if they are full?
 
Why wouldn't you just load the mac set before you run it? You can save a lot of spell sets now.

Good point .... it's not like you'd go from a raid to a group via a mac .... lol .....
 
I am interested in seeing this in progress. I Play my cleric manually alot especially if we grouping anguish. I would love too see something that would keep promised on at all times with some kind of logic whether too Cheal/recast promised or let the promised land.

The more efficient the better, we are considering stepping up our targets soon since we were able too group our orbs and Cleric efficiency is key for us since it takes soo long to take some of these mobs down. Took us the better part of an hour 1 group too dps hanvar down but with manual clr he had 55% mana left.
 
A while back I started on my own cleric mac but never got very far on it due to time constraints. Here are a few of my suggestions:

1) The user of the mac should never need to configure spells. The macro should be able to figure that out.
2) Use group roles rather than targeting the MA/MT at macro start time
3) Be mounted whenever possible
4) Use ini driven behaviors similar to merc stances. Sometimes I want my cleric to be an efficient healer only, sometimes I want him to heal and dps, and sometimes I want him to be a very reactive healer and not dps at all. (editing separate copies of a macro for different behaviors isn't such a good long term plan for when you want to incorporate more changes)
5) Keep divine intervention memmed when possible. (sucks to have to mem that and wait for refresh before pulling a named)
6) Divine Arbitration/epic shields are far too important to leave off until a V2, IMO
7) Never ever summon food/water when in combat

Divine Aura can be totally scrapped as far as I'm concerned. If my cleric is in really bad shape, I'll switch to that session and hit my instant camp hotkey.
 
My first updates to the healer.mac I posted a while back see link below. I just updated it to work with the higher level promised heal line and mercs mainly.

http://forums.notaddicted.com/showthread.php?t=21984

The macro at the moment either uses CH or PR not both. I have used it successfully on my cleric from lv 78 t0 82 with both pc's and mercs. I am currently cleaning up the sections putting all the healing vars, damage vars, together etc. I will post an in progress version in a few days. It has a couple sections rewritten so far but is mainly the same mac.
 
Here are a few of my suggestions:

1) The user of the mac should never need to configure spells. The macro should be able to figure that out.
2) Use group roles rather than targeting the MA/MT at macro start time
3) Be mounted whenever possible
4) Use ini driven behaviors similar to merc stances. Sometimes I want my cleric to be an efficient healer only, sometimes I want him to heal and dps, and sometimes I want him to be a very reactive healer and not dps at all. (editing separate copies of a macro for different behaviors isn't such a good long term plan for when you want to incorporate more changes)
5) Keep divine intervention memmed when possible. (sucks to have to mem that and wait for refresh before pulling a named)
6) Divine Arbitration/epic shields are far too important to leave off until a V2, IMO
7) Never ever summon food/water when in combat

Some excellent feedback so far.

1.) Eventually I hope the mac will do this but it involves a ton of work added to the Wish List.
2.) What is easier than targeting tank and hitting hot key /mac healer?
3.) I added mounts to this I haven't posted that version yet.
4.) Not a fan ini files which is why I have always loved this mac. This mac has 4 autoheal modes in it which have worked wonderful for the last 5 years.
5.) I have had little use for DI and the macro never had it. Its situational at best. As an option though it should not be hard to include as a variable I added to the TO DO list..
6) Macro has Divine Arbitration if you have the AA in it works wonderful as written. It does not currently have epic support I added to the TO DO list.
7) Macro currently will not summon food or water when mobs in camp.
 
Some excellent feedback so far.
2.) What is easier than targeting tank and hitting hot key /mac healer?
4.) Not a fan ini files which is why I have always loved this mac. This mac has 4 autoheal modes in it which have worked wonderful for the last 5 years.
5.) I have had little use for DI and the macro never had it. Its situational at best. As an option though it should not be hard to include as a variable I added to the TO DO list..


2) The problem with an initially set MT is that if you have to make a heat of the moment tank switch, you end up having to stop and restart the macro, which takes a non-negligible amount of time when the shit is hitting the fan. Also, the MT is who should have priority for heals, but that isn't necessarily the same character you want to assist for mobs.

4) I look at ini files as a good way to separate configuration/data from actual program code. As you release new versions, going back to tweak the macro for individual playstyles will get tedious. Separating the data from the application code is almost always a good idea, just like separating presentation from logic. (as an aside, if you go the ini route you could easily have a little standalone app to manipulate the ini file and make it easier on novice users to configure)

Have you made a flowchart of the healing algorithm that you intend to use?
 
Oh, another thing... I've found that sometimes when running the mac that it will use the Divine Arbitration AA right after zoning, as the group's HP start at 0 and then get populated. It would be a lot better if it could detect this and not waste the AA.
 
2) The problem with an initially set MT is that if you have to make a heat of the moment tank switch, you end up having to stop and restart the macro, which takes a non-negligible amount of time when the shit is hitting the fan. Also, the MT is who should have priority for heals, but that isn't necessarily the same character you want to assist for mobs.

4) I look at ini files as a good way to separate configuration/data from actual program code. As you release new versions, going back to tweak the macro for individual playstyles will get tedious. Separating the data from the application code is almost always a good idea, just like separating presentation from logic. (as an aside, if you go the ini route you could easily have a little standalone app to manipulate the ini file and make it easier on novice users to configure)

Have you made a flowchart of the healing algorithm that you intend to use?

2. The macro as is compensates for MT switch (i.e. tank dies) as it will heal the person next line taking the most damage depending on what mode you have it set to and % heals you have set.

The idea of assigning an SA (Secondary assist/tank) in case of MT (Main Tank) death though is very good. Where the macro will immediately recognize a predefined char/mercenary as the new tank on MT's death or /tell i.e /tell mycleric Bob is now MT. Added to the To Do list

I am not sure what you are trying to do with a separate assist from the MT. As the cleric would draw agro casting on other mobs. Please clarify this

4. I intend battle the complexity of variables by well defined and commented sections. I don't see any difference of having to change stuff in an ini file vs the macro. Also when done the macro will have a complete help file with it. I am trying to use as much of the original code of the macro as possible just because it works so well. Here is a preview of the healing spells in their own section cleaned up and commented.
Rich (BB code):
|------------------READ THIS SECTION AND EDIT IF NEEDED------------------------|
| - The following declarations are used to determine spell names and spell
| - ranges for the spells you would like to use.
|----------------------------------------------------------------------------
|   Healing Spells and AA's
|----------------------------------------------------------------------------
| - Spells
|	/declare healspell string outer Complete Heal
	/declare healspell string outer Promised Restoration
	/declare patchheal string outer Solemn Light Rk. II
	/declare hotspell string outer Devout Elixir Rk. II
	/declare groupheal string outer Elixir of Atonement
	/declare rgcspell string outer Remove Greater Curse
| - Heal percentages 	
	/declare selfhealpoint int outer 70
	/declare interrupt2divarb int outer 26
	/declare interrupt2healselfhp int outer 60
	/declare defaultstophealpoint int outer 85	
| - Heal at % for WAR/PAL/SK/MERC
	/declare tankhealpoint int outer 69
| - Heal at % for WIZ/MAG/ENC/DRU
	/declare casterhotpoint int outer 75
	/declare casterpatchpoint int outer 55
| - Heal at % for NEC/SHM
	/declare necshmpatchpoint int outer 45
| - Heal at % for all other classes
	/declare defaultpatchpoint int outer 60
| - Autohealmode 0 Tank only will be healed
| - Autohealmode 1 Tank and cleric only will be healed
| - Autohealmode 2 Tank, cleric and my group will be healed
| - Autohealmode 3 Tank and cleric will be healed before the rest of the group
    /declare autohealmode int outer 3
| - Switches 0=OFF 1=ON
	/declare prheal int outer 1
	/declare autointerrupt int outer 1
	/declare onlyhealfd int outer 1
	/declare interrupt2healself int outer 1
   	/declare usegroupheal int outer 1
	/declare usedivarb int outer 1
	/declare healafterdivarb int outer 0

I am currently mapping the healing logic of the macro with its current code. Once it again for me it has always worked very well but with all the people over the years that have revised and added to it has this become very convoluted. Trying to follow it and unravel the flow has been tedious. I am commenting and ordering sub routines as they make sense to me.
 
Are you using the version I posted HERE or another? I will look into the DI firing on zoning. I always restart it in new zones so I never noticed it.
 
I am not sure what you are trying to do with a separate assist from the MT. As the cleric would draw agro casting on other mobs. Please clarify this

Use case:
I have 2+ mobs in camp and no mezzer. For the moment they're both bashing on the MT. As the fight goes on, the cleric draws heal aggro on one of the mobs. The MT now switches to that mob temporarily to regain aggro while the rest of the group, including the PC designated as MA, stays on the original mob. In this case, the cleric would now nuke the wrong mob while the MT tries to regain aggro. In some cases the MT is the same as the MA, but not always.

4. I intend battle the complexity of variables by well defined and commented sections. I don't see any difference of having to change stuff in an ini file vs the macro.

You explicitly state that "items and AA's will be added later", meaning that there will be at least one subsequent version, with all probability being several updates due to bug fixes and enhancements. With an ini file, you can drop in a replacement macro and retain all your settings. With having to edit the macro, you make every user go and edit it with every release. It's your macro and you can do it how you wish, I just don't think it's a good idea for maintainability to have end users edit the macro file.

Are you using the version I posted HERE or another? I will look into the DI firing on zoning. I always restart it in new zones so I never noticed it.

I've tried several variations on the healer/afcleric mac, including that one, and they all try to Divine Arb/quick heal upon new group members zoning in. I'm betting that it's a non-trivial problem to solve.
 
Use case:You explicitly state that "items and AA's will be added later", meaning that there will be at least one subsequent version, with all probability being several updates due to bug fixes and enhancements. With an ini file, you can drop in a replacement macro and retain all your settings. With having to edit the macro, you make every user go and edit it with every release. It's your macro and you can do it how you wish, I just don't think it's a good idea for maintainability to have end users edit the macro file.

Well I have to admit that is a pretty good damn reason to use an ini file. This is would have be to done now and is going to take some time. I have used the MQ2 /ini function but it I am no means a master of it so I will have look other macros that use it and figure out how I want to set it up.

For the time being I may just make it an INC file with the variables instead of a true ini file.
 
Well I have to admit that is a pretty good damn reason to use an ini file. This is would have be to done now and is going to take some time. I have used the MQ2 /ini function but it I am no means a master of it so I will have look other macros that use it and figure out how I want to set it up.

For the time being I may just make it an INC file with the variables instead of a true ini file.

It should be relatively straightforward to use an ini. Let's say that you were going to do stances too, mainly because I want to say that. :)

The line "/declare selfhealpoint int outer 70" either stays as is or changes to "/declare selfhealpoint int outer" just so people don't look at it and do their editing there.

Now after you do all your declares, put this line in:
/call LoadIni Normal

Also, complete and add this function in somewhere in the macro (forgive any syntax errors, can't run a MQ command here at work):

Rich (BB code):
Sub LoadIni(string stance)
	/varset selfhealpoint ${Ini[${Macroquest.Server}_${Me.Name}_Healer.ini,Stance_${stance},SelfHealPoint,70]}
	.
	.
	.
/return

In this example if you were on the Prexus server and your character name was Bobby, it would look in the Prexus_Bobby_Healer.ini file for this value:

Rich (BB code):
[Stance_Normal]
SelfHealPoint=80

If that value didn't exist, you would get the default value of 70.

Now all you have to do to implement stances is to make an event that listens for a particular line of text and call LoadIni with the parsed stance name. Voila, good code reuse!
 
I have decided to wait on creating an ini file and instead added it to the To Do List. I played around with it for a few hours and there is just way to much work at this point that I found it was a huge distraction. It isn't really viable now with all the revising and cleaning up I still have to do.

What I am going to do in the mean time after I post the first usable macro for testing etc. is put any new variables in their own section at the bottom. So when I post a revised macro you will be able to cut and paste your existing settings into the the new/revised macro with little of now effort.
 
Healer.mac rewrite suggestions

Users who are viewing this thread

Back
Top
Cart