• 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

Request - Back on the chain gang...

What level clerics are you making it for and are you actually using CH for the key spell? I haven't thought about it too hard but would believe it easy to set up custom announcements into EQBC channel would give you clean parse's for the events.

A few suggestions would be:

Target cleric before you when launching to look for their specific announcement in EQBC that would in turn trigger an event for cleric to start their own timer and then cast with announcement that in turn triggers the next cleric. The event triggered cleric would then target their key cleric's target and start their spell. (this would allow you to call a /bcaa //target XXXX command mid fight if a tank switch up was required possibly)

check event for self fizzle to make fizzle announcement so the next cleric immediately starts their cast and announcement at the time rather than wait thus keeping the chain moving dynamically. At the same time as announcing the fizzle, they then cast their faster "LIGHT" heal appropriate to the level. This is essentially how I used to do heal chains in guild raids. Of course I'm used to those chains being like 8 clerics deep too. LOL

Once all clerics are set to launch in this format, you just have a hotkey set up on any one of them to make the announcement and cast the CH just like the automation you hit. It then triggers the rest of the cleric's in turn based on the events noted above.

For a Heal Over Time and patch heals, you can pretty much use KISS to do that if you wanted. Maybe just have it do the HoT(possibly promised heal or other as a Buff check and replenish it each time it drops). Could also have them cast their patch heal based on target health like any other heal macro coding I'd think.

You could drive the actual heal spells based off a personalized INI file for each cleric accordingly for the CH, Fast Heal, HoT, and Patch. This would allow you to use druids and shaman's as well in the macro. I personally used to use a cleric with CH and a druid with Karana's Renewel in a heal chain in old days. This would allow you to update the INI's for character spells as better choices come available. to them in level or Rank II etc stuff over time.

And lastly, you could have a switch to the launch command to determine if it's part of the heal chain or if it's the patcher accordingly. IE. "/mac CHChain chain" for part of the set heal chain and "/mac CHChain patcher" as the HoT/Patcher person.

I'm kind of intrigued by the thought process for the macro but I'm not sure I have the time to focus on it. I've had to put others on hold already but I'll think about it some more and maybe post a little something up. Hopefully if nothing else, this gives you some ideas. :)


-Rustycat
 
You've described a Ferrari,

/sharpens the knife to gut kissassist
 
No where close to a working macro but a start.....

Rich (BB code):
#turbo

#Event	CastBigHeal	"<#1#> casting chain heal spell#*#"
#Event	CastBigHeal	"<#1#> I fizzled, casting fast patch instead."
#Event	SpellFizzle "Your spell fizzles"

Sub Main

	/declare TargetAssisted string outer ${Target.CleanName}
	/declare IniFileName string outer CHCHain_${Me.CleanName}.ini
	/declare BigHealSpell string outer
	/declare FastHealSpell string outer
	/declare HoTHealSpell string outer
	/declare PatchHealSpell string outer
	
	/varset BigHealSpell ${Ini[IniFileName,Spells,BigHeal]}
	/varset FastHealSpell ${Ini[IniFileName,Spells,FastHeal]}
	/varset HoTHealSpell ${Ini[IniFileName,Spells,HoTHeal]}
	/varset PatchHealSpell ${Ini[IniFileName,Spells,PatchHeal]}
	
       :loop
       /goto loop

/return


Sub	Event_CastBigHeal(CasterName)

	/if (${Castername.Equal[TargetAssisted]}){
	/delay 5s
	/cast ${BigHealSpell}
	/bc casting chain heal ${BigHealSpell}
	}

/return

Sub Event_SpellFizzle

	/cast ${FastHealSpell}
	/bc I fizzled, casting fast patch instead.
	
/return
	
	
	
	
|	
| INI Info
| [Spells]
| BigHeal=
| FastHeal=
| HoTHeal=
| PatchHeal=
|
 
Will need to figure a way to add and remove healers form the chain so when one of the healers dies the whole raid doesn't take a dive. if done correctly more healers will be added to the chain as they join the raid and start the script and removed from the chain when they end the script. Will be a lot like herding cats..
 
When an even triggers from death, can the toon process that sub and issue an eqbc command to tell the others to adjust the cycle before getting a necro rez?
 
At work but something along these lines maybe in the mix (maybe Taylor clean up the write the scripting correct for me... hint hint)

Rich (BB code):
#Event	Idied	"You have died."
#Event	AdjustChain	"<#1#> I have died, adjust chain, I was after #2#"
#Event	AdjustChain	"<#2#> I'm joining the chain, assisting off #1#"

Sub Event_Idied

	/bc I have died, adjust chain, I was after ${TargetAssisted}

/return

Sub Event_AdjustChain(string ChainAdjuster, string NewAssist)

	/if (${ChainAdjuster}==${TargetedAssisted}) /vardata TargetAssisted ${NewAssist}

/return
 
Here is an idea I was thinking of, but this is very basic and just a concept for controlling adding and dropping from the chain.

First will need a way to determine what character will be the controlling Healer and who will take over as controller if the controller takes a dirt nap.

What I was thinking was maintaining a list of names or ID's. Id would be cleaner and easier to work with. The list would be used to maintain the position for each healer in the chain.

Let me try and give an example:

In the script we will have a variable let's name it HealChain and HealChain will be comprised of the character ID's of all the healers in the chain. So once populated by 4 healers, HealChain would look something like this: 101002|101234|124232|138723. We will have to come up with a way to update HealChain across all healers. This can be done using Events. Now what will this do for us?

Well this will let all healers know who is the controller to look for in events. Now... Now... be patient, don't you see it. ${Spawn[id ${HealChain.Arg[1,|]}]}(101002) will always be the controller. So if the controller dies he/she just drops their ID from the list and using /bca you could update the new HealChain sequence to all the other healers. Now what does that provide? Well now everyone in the healchain knows who the new controller is, yea it is still ${Spawn[id ${HealChain.Arg[1,|]}]}(101234) and the new controller will automatically pick up controlling.

What else would this provide? What about your position in the heal Chain? Who is the healer before and/or after me? Well that's easy.

What position am I in the heal chain? ${Select[${Me.ID},${ChainHeal.Replace[|,,]}]}. Using the original example above for ChainHeal Above and your ID=124232, ${Select[${Me.ID},${ChainHeal.Replace[|,,]}]} will return 3. Now you know your 3rd in the cycle.

Ok so how do I know who is in the heal rotation before me? Glad you asked. First lets set a variable to your position in the cycyle: /varset MyPlace ${Select[${Me.ID},${ChainHeal.Replace[|,,]}]}. Now we can get the ID of the character in the chain before you: ${ChainHeal.Arg[${MyPlace}-1,|]}. Yea I know we need to check if MyPlace equals 1 and then figure who the last character on the list is and what not, but just laying out some ideas, not detailed code.

I think if you can create the events to manage a list like I am referring too above, it would be easier to create the base of the code for controlling the healers in the chain. This will allow the list to change dynamically. As the list changes so does the operation of those in the chain.

Ahh just my 2 cents.
 
You guys are frikin rockstars, already above my writing capability. Ctaylor, that seems super dynamic, more versatile than I thought it could be. I'm blown away how far this language has come in the last decade...not to mention you guys making that happen. Now I feel bad I requested something beyond my capability to help with other than testing and feedback if it gets up off the ground. I can comprehend Rustycats code but yours is ...well...a bit beyond me since I'm not familiar the evolved code...Timewarp back to 06-07?

So in the event a cleric dies that same routine that is pumping out a new order could also be telling the spot healers to start spamming until the chain is fixed?

I guess it looks like I'm buying some Krono for you guys soon?
 
Ctaylor's got an interesting idea there and I get part of it but it's also beyond my expertise to understand at a glance. I'm going t otry and work with the direction I started some and see what comes of it. Success or fail, it's learning and fun to me. :)
 
Coming up with the basic events shouldn't be that hard, it is trying to think off all the events that will be needed for this to work.

I will shamelessly steal Rustycat's code for my example:

Rich (BB code):
#Event	Idied	"You have died."
#Event	AdjustChain	"<#1#> <#2#> I have died, adjust chain"
#Event	JoinChain	"<#1#> <#2#> Waiting to joining the chain"
#Event	ResetChain	"<#1#> <#2#> Reset Chain #3# Rotation #4#"
#Event	ListenChain	"<#1#> <#2#> Casting Normal Heal as #3#"

Sub Main
   /declare HealChain         outer       string
   /declare HealChainNext     outer       string
   /declare Timer1            outer       timer 
   /declare MyPosition        outer       int
   /declare TempStr           outer       string
   /declare OldPosition       outer       int
   /declare WhosCastingID     outer       string
   /declare WhosCasting       outer       int
   /declare LastOnList        outer       int
   
   /if (!${HealChain.Length}) { 
      /bc ${Me.ID} Waiting to joining the chain
      /varset Timer1 5s
      /while (Timer1 && !${HealChain.Length} ) {
        /doevents Event_ResetChain
        /delay 5
      }
      /if (${HealChain.Length}) /doevents flush
   }
   /if (!${HealChain.Length}) /varset HealChain |${Me.ID}

   /varset MyPosition ${Select[${Me.ID},nul${HealChain.Replace[|,,]}]}
   /if (${MyPosition}==1) /echo I am Taking Control of the ChainHeals.
   /while (1) {
      /if (!${HealChain.Length} && !${HealChainNext.Length}) /end
      /varset MyPosition ${Select[${Me.ID}, ${HealChain.Replace[|,,]}]}
      /varset OldPosition ${MyPosition}
      /doevents
      |If I haven't entered the casting chain wait for the First Caster to start before checking for my turn.'
      /if (!${MyPosition} && ${HealChainNext.Length} && ${WhosCasting}==1) {
         /varset HealChain ${HealChainNext}
         /varset MyPosition ${Select[${Me.ID}, ${HealChain.Replace[|,,]}]}
      }
      |Check to see if I am next
      /if ((${MyPosition}>1 && ${WhosCasting}==${Math.Calc[${MyPosition}-1]}) || (${MyPosition}==1 && ${WhosCasting}==${HealChain.Count[|]})) {
         |this is where we would start casting.
      }
   }
   
   
/return
:OnExit
  /if (${HealChain.Length}) /bc <$Me.ID> I have died, adjust chain
/return

Sub Event_Idied

	/bc <$Me.ID> I have died, adjust chain
    /varset HealChain 
    /varset LastOnList

/return

Sub Event_ListenChain(string ChainAdjuster, string TempID, string txtPos)
   /varset WhosCastingID ${TempID}
   /varset WhosCasting ${txtPos}
/return

Sub Event_AdjustChain(string ChainAdjuster, string TempID)
   /if $({Me.ID}==${TempID}) /return
   /if (${HealChain.Find[|${TempID}]}) {
      /varset HealChain ${HealChain.Replace[|${TempID},]}
      /varcalc MyPosition ${Select[${Me.ID},nul${HealChain.Replace[|,,]}]}-1
   }   
/return

Sub Event_JoinChain(string ChainAdjuster, string TempID)
   /if $({Me.ID}==${TempID} || ${MyPosition}>1) /return
   /varset HealChain ${HealChain}|${TempID}
   /varset LastOnList ${TempID}
   /bc ${Me.ID} Reset Chain Next Rotation ${HealChain}

/return

Sub Event_ResetChain(string ChainAdjuster, string TempID, string txtWhen, string WithWhat)
   /if $({Me.ID}==${TempID}) /return
   /if (${txtWhen.Equal[next]}) {
      /if (!${MyPosition}) {
         /varset HealChainNext ${WithWhat}
         /varset HealChain ${HealChainNext.Replace[|${Me.ID},]}
      } else {
         /varset HealChainNext ${WithWhat}
      }
   } else /if (${txtWhen.Equal[now]}) {
      /varset HealChain ${WithWhat}
      /varcalc MyPosition ${Select[${Me.ID},nul${HealChain.Replace[|,,]}]}-1
   }
   
/return

This is just a basic start, RustyCat I hope this better explains what I was trying to show in my last example.
 
This is what I was dabbling with last night while I was playing my other game and farming with my teams. It's not a finished macro but most of the events are working it seems in my testing. I didn't dig into CTaylor's post still other than glancing through. I'll have to stop and pick it apart to understand it I'm sure. What I have so far you start with each healer in the chain by targeting the healer you will follow at the start in heal order. As events happen with someone joining or dying in the chain, they make announcements so the healers following them adjust their line up. Say you have 4 cleric's started and a 5th comes to join. When they launch targeted on someone, they announce who they are assisting off in order. This in turn triggers any other healer that was assisting off the same target to switch to the newly joined one instead. This keeps the heal chain in tack. Same thing when a healer dies, they announce their death and who it was they were following in heal order. That way the healer that was following them now switches to follow the dead players old assist instead. All this is through the same EQBC channel, so they need to be there of course. More work to do without a doubt but this is it so far.

Rich (BB code):
|
| CHChain.mac 1.0 beta    by Rustycat and friends (still being developed)
|
| Requires healers to be logged into the same EQBC server to communication.
| Useage: Set up character specific INI with spell list to be used in heal chain.
| Target the healer you will be following in chain order and launch marco.
|__________________________________________________________________________________________

#turbo

#Event	CastBigHeal	"<#1#> casting chain heal spell - #*#"
#Event	CastBigHeal	"<#1#> I fizzled, casting fast patch instead."
#Event	SpellFizzle "Your spell fizzles!"
#Event	Idied		"You died."
#Event	DeathAdjustment	"<#1#> I have died, adjust chain, I was after #2#"
#Event	JoinAdjustment	"<#1#> I'm joining the chain, assisting off #2#"
#Event	StartChain	"#*#Start the chain with #1#"


Sub Main

	/declare TargetAssisted string outer ${Target.CleanName}
	/if (!${Target.ID} || ${Spawn[${Target.ID}].Type.NotEqual[pc]} || ${Target.ID}==${Me.ID}) {
            /echo You didn't target a PC. Target someone and restart.
            /endmacro
		}
	/bc I'm joining the chain, assisting off ${Target.Name}
	/declare IniFileName string outer CHChain_${Me.CleanName}.ini
	/declare CurrentTank string outer
	/declare BigHealSpell string outer
	/declare FastHealSpell string outer
	/declare HoTHealSpell string outer
	/declare PatchHealSpell string outer
	
	/call INICheck
	
	:loop
	/if (${Me.Standing[TRUE]}) /sit
	/doevents
	/delay 1s
	/goto :loop
	
	
/return

|______________________________________________________________________________________________

Sub	Event_CastBigHeal(Line,CasterName)

	/if (${Castername.NotEqual[${TargetAssisted}]}) /return

	/delay 10s
	/cast "${BigHealSpell}"
	/bc casting chain heal ${BigHealSpell} on ${Target.Name}


/return

|______________________________________________________________________________________________

Sub Event_SpellFizzle

	/cast "${FastHealSpell}"
	/bc I fizzled, casting fast patch instead.
	
/return

|______________________________________________________________________________________________

Sub INICheck

	/varset CurrentTank ${Ini[${IniFileName},General,StartingTank]}
	/echo My starting tank is ${CurrentTank}
	/target ${CurrentTank}
	/if (!${Target.ID} || ${Spawn[${Target.ID}].Type.NotEqual[pc]} || ${Target.ID}==${Me.ID}) {
            /echo Can't target your tank, make sure it's correct.
            /endmacro
		}

	/varset BigHealSpell ${Ini[${IniFileName},Spells,BigHeal]}
	/echo Chain heal spell is ${BigHealSpell}
	/if (${BigHealSpell.Equal[NULL]}) {
		/echo Set up your INI BigHeal.
		/endmacro
		}
	/varset FastHealSpell ${Ini[${IniFileName},Spells,FastHeal]}
	/echo Fast heal spell is ${FastHealSpell}
	/if (${FastHealSpell.Equal[NULL]}) {
		/echo Set up your INI FastHeal.
		/endmacro
		}	
	/varset HoTHealSpell ${Ini[${IniFileName},Spells,HoTHeal]}
	/echo HoT/Promised heal spell is ${HoTHealSpell}
	/if (${HoTHealSpell.Equal[NULL]}) {
		/echo Set up your INI HoTHeal.
		/endmacro
		}
	/varset PatchHealSpell ${Ini[${IniFileName},Spells,PatchHeal]}
	/echo Patch heal spell is ${PatchHealSpell}
	/if (${PatchHealSpell.Equal[NULL]}) {
		/echo Set up your INI PatchHeal.
		/endmacro
		}
/return

|______________________________________________________________________________________________

Sub Event_Idied

	/bc I have died, adjust chain, I was after ${TargetAssisted}

/return

|______________________________________________________________________________________________
Sub Event_DeathAdjustment(Announcement,ChainAdjuster,NewAssist)

	/if (${ChainAdjuster.Equal[${TargetAssisted}]}) {
		/varset TargetAssisted ${NewAssist}
		/echo Assisting off ${TargetAssisted} now.
		/return
		}
	/echo Still assisting off ${TargetAssisted}
	
/return

|______________________________________________________________________________________________

Sub Event_Joinadjustment(Announcement,NewAssist,ChainAdjuster)

	/if (${NewAssist.Equal[${Me.Name}]}) /return
	/if (${ChainAdjuster.Equal[${TargetAssisted}]}) {
		/varset TargetAssisted ${NewAssist}
		/echo Assisting off ${TargetAssisted} now.
		/return
		}
	/echo Still assisting off ${TargetAssisted}
	
/return

|______________________________________________________________________________________________

Sub Event_StartChain(Announcement,ChainStarter)

	/if (${ChainStarter.NotEqual[${Me.Name}]}) /return
		/cast "${BigHealSpell}"
		/bc casting chain heal ${BigHealSpell} on ${Target.Name}

/return
 
B.E.A.utiful! I will start screwing with this tonight and post my results!
 
Here is what I have been playing with. I have not tested any of this, so just use it for reference. RustyCat's will be much easier to understand. Just trying to give some ideas that you can choose from.

Rich (BB code):
|==================================================================================
| /macro Chainstart ma Name|ID sa Name|ID role normal|patch ndelay # phealat # 
| /macro Chainstart Name|ID Name|ID normal|patch # # 
| 
| ma Main Assist (this is who you will assist, not who you target)
| sa Secondary Assist (this is who you will assist, not who you target)
| role normal|patch (Default: normal) (patch not implemented yet)
| ndelay Delay in seconds to wait before casting Normal Heal
| phealat Target Health Percent to start Patch Healing
|==================================================================================
#Event	Idied	"You have died."
#Event	AdjustChain	"<#1#> <#2#> I have died, adjust chain"
#Event	JoinChain	"<#1#> <#2#> Waiting to join the chain"
#Event	ResetChain	"<#1#> <#2#> Reset Chain #3# Rotation #4#"
#Event	ListenChain	"<#1#> <#2#> Casting #3# Heal as #4# on #5#"

Sub Main
   /declare Pline             outer       string 
   /declare TempInt           outer       int      0
   /while (${Defined[Param${TempInt}]}) {
       /varset Pline Pline ${Param${TempInt}}
       /varcalc TempInt ${TempInt}+1
   }
   /declare HealChain         outer       string
   /declare HealChainNext     outer       string
   /declare Timer1            outer       timer 
   /declare MyPosition        outer       int
   /declare TempStr           outer       string
   /declare OldPosition       outer       int
   /declare WhosCastingID     outer       string
   /declare WhosCasting       outer       int
   /declare LastOnList        outer       int
   /declare LastHealType      outer       string    normal
   /declare WhoToHeal         outer       int
   /declare MainAssist        outer       int       0
   /declare SecondAssist      outer       int       0
   /declare Ndelay            outer       int       0
   /declare PHealat           outer       int       60
   /declare HRole             outer       string    normal       
   
   /call Parse_CommandLine
   
   /if (!${HealChain.Length}) { 
      /bc ${Me.ID} Waiting to join the chain
      /varset Timer1 5s
      /while (Timer1 && !${HealChain.Length} ) {
        /doevents Event_ResetChain
        /delay 5
      }
      /if (${HealChain.Length}) /doevents flush
   }
   /if (!${HealChain.Length}) /varset HealChain |${Me.ID}

   /varcalc MyPosition ${Select[${Me.ID},nul${HealChain.Replace[|,,]}]}-1
   /if (${MyPosition}==1) /echo I am Taking Control of the ChainHeals.
   /while (1) {
      /if (!${HealChain.Length} && !${HealChainNext.Length}) /end
      /varcalc MyPosition ${Select[${Me.ID},nul${HealChain.Replace[|,,]}]}-1
      /varset OldPosition ${MyPosition}
      /doevents
      |If I haven't entered the casting chain wait for the First Caster to start before checking for my turn.'
      /if (!${MyPosition} && ${HealChainNext.Length} && ${WhosCasting}==1) {
         /varset HealChain ${HealChainNext}
         /varcalc MyPosition ${Select[${Me.ID},nul${HealChain.Replace[|,,]}]}-1
         /varset HealChainNext
      }
      | Figure out who to assist/target
      /if (${MainAssist} && ${Spawn[id ${MainAssist}].Type.NotEqual[corpse]} && (!${Target.ID} || ${Target.Type.Equal[corpse]})) {
         /assist ${Spawn[id ${MainAssist}].CleanName}
         /delay 5s ${Me.AssistComplete}==TRUE
      } else /if (${SecondAssist} && ${Spawn[id ${SecondAssist}].Type.NotEqual[corpse]} && (!${Target.ID} || ${Target.Type.Equal[corpse]})) {
         /assist ${Spawn[id ${SecondAssist}].CleanName}
         /delay 5s ${Me.AssistComplete}==TRUE
      }
      /if ((!${Target.ID} || ${Target.Type.Equal[corpse]}) && ${Target.ID}!=${WhoToHeal}) {
         /target id ${WhoToHeal}
         /delay 5s ${Target.BuffsPopulated}==TRUE
      }
      /if (${Target.ID} && ${Target.Type.NotEqual[corpse]}) {
         |Check to see if I am next
         /if (${OldPosition}!=${MyPosition} && ${MyPosition}==${WhosCasting}) {
            |cast a fast/patch heal if healer before you drops out of list.  
            /bc <${Me.ID}> Casting Fast Heal as ${MyPosition} on ${Target.ID}
      
         } else /if ((${MyPosition}>1 && ${WhosCasting}==${Math.Calc[${MyPosition}-1]}) || (${MyPosition}==1 && ${WhosCasting}==${HealChain.Count[|]})) {
            |this is where we would start casting.
            /bc <${Me.ID}> Casting Normal Heal as ${MyPosition} on ${Target.ID}
         }
      } else /if ${Target.Type.Equal[corpse]} /target clear
   }
   
   
/return
:OnExit
  /if (${HealChain.Length}) /bc <$Me.ID> I have died, adjust chain
/return
#Event	AdjustChain	"<#1#> <#2#> I have died, adjust chain"
#Event	JoinChain	"<#1#> <#2#> Waiting to join the chain"
#Event	ResetChain	"<#1#> <#2#> Reset Chain #3# Rotation #4#"
#Event	ListenChain	"<#1#> <#2#> Casting #3# Heal as #4# on #5#"


Sub Event_Idied

	/bc <$Me.ID> I have died, adjust chain
    /varset HealChain 
    /varset LastOnList

/return

Sub Event_ListenChain(string ChainAdjuster, string TempID, string Htype, string txtPos, string txtTargetID)
   /varset WhosCastingID ${TempID}
   /varset LastHealType ${Htype}
   /varset WhosCasting ${txtPos}
   /varset WhoToHeal ${txtTargetID}
/return

Sub Event_AdjustChain(string ChainAdjuster, string TempID)
   /if $({Me.ID}==${TempID}) /return
   /if (${HealChain.Find[|${TempID}]}) {
      /varset HealChain ${HealChain.Replace[|${TempID},]}
      /varcalc MyPosition ${Select[${Me.ID},nul${HealChain.Replace[|,,]}]}-1
   }   
/return

Sub Event_JoinChain(string ChainAdjuster, string TempID)
   /if $({Me.ID}==${TempID} || ${MyPosition}>1) /return
   /varset HealChain ${HealChain}|${TempID}
   /varset LastOnList ${TempID}
   /bc ${Me.ID} Reset Chain Next Rotation ${HealChain}

/return

Sub Event_ResetChain(string ChainAdjuster, string TempID, string txtWhen, string WithWhat)
   /if $({Me.ID}==${TempID}) /return
   /if (${txtWhen.Equal[next]}) {
      /if (!${MyPosition}) {
         /varset HealChainNext ${WithWhat}
         /if (${HealChainNext.Find[|${Me.ID}]}) /varset HealChain ${HealChainNext.Replace[|${Me.ID},]}
      } else {
         /varset HealChainNext ${WithWhat}
      }
   } else /if (${txtWhen.Equal[now]}) {
      /varset HealChain ${WithWhat}
      /varcalc MyPosition ${Select[${Me.ID},nul${HealChain.Replace[|,,]}]}-1
      /varset HealChainNext
   }
   
/return

Sub Parse_CommandLine
   /varset TempInt 1
   /if (${Select[${Pline.Arg[${TempInt}, ]},ma,sa,ndelay,phealat,role]}) {
      /while (${Int[${Pline.Arg[${TempInt}, ].Length}]}) {
         /if (${Pline.Arg[${TempInt}, ].Equal[ma]}) {
            /varset MainAssist ${If[${Int[${Pline.Arg[${TempInt}+1, ]}]},${Pline.Arg[${TempInt}+1, ]},${Spawn[${Pline.Arg[${TempInt}+1, ]}].ID}]}
         } else /if (${Pline.Arg[${TempInt}, ].Equal[sa]}) {
            /varset SecondAssist ${If[${Int[${Pline.Arg[${TempInt}+1, ]}]},${Pline.Arg[${TempInt}+1, ]},${Spawn[${Pline.Arg[${TempInt}+1, ]}].ID}]}
         } else /if (${Pline.Arg[${TempInt}, ].Equal[role]}) {
            /varset HRole ${Pline.Arg[${TempInt}+1, ]}
         } else /if (${Pline.Arg[${TempInt}, ].Equal[ndelay]}) {
            /varset Ndelay ${Pline.Arg[${TempInt}+1, ]}
         } else /if (${Pline.Arg[${TempInt}, ].Equal[phealat]}) {
            /varset NHealat ${Pline.Arg[${TempInt}+1, ]}
         }
         /varcalc TempInt ${TempInt}+2
      }
   } else {
      /varset MainAssist ${If[${Int[${Pline.Arg[1, ]}]},${Pline.Arg[1, ]},${Spawn[${Pline.Arg[1, ]}].ID}]}
      /varset SecondAssist ${If[${Int[${Pline.Arg[2, ]}]},${Pline.Arg[2, ]},${Spawn[${Pline.Arg[2, ]}].ID}]}
      /if (${Pline.Arg[3, ].NotEqual[null]}) /varset HRole ${Pline.Arg[3, ]}
      /if (${Pline.Arg[4, ].NotEqual[null]}) /varset Ndelay ${Pline.Arg[4, ]}
      /if (${Pline.Arg[5, ].NotEqual[null]}) /varset PHealat ${Pline.Arg[5, ]}
   }
/return
 
You guys have no idea how great of a start this is to work on. I was telling Rusty that at least this way I can comprehend most whats going on but I have a very hard time starting from scratch. That is a great gift you guys have. Will Rock both of them tonight and post results.
 
This thread is awesome and something my Boxer guild has been deliberating. As of recently we all have to manually player our healers and it's difficult at best.
 
Well stay tuned. There is more to come I am sure.

Exactly what CT said. I think he and I both have the bug on this.

That said CT, I couldn't remember how many parameters you can use on a macro launch. My thought was to use them to do similar to what you did. Thinking set the role, the delay between heals within the chain, the tank line up so if tank goes down, it immediately jumps to the next tank and the raidtarget optional for HoTT healing if no tanks show. Then have slash commands to also manually change them on the fly yourself. So you can update them in the chain without those para's clarified.

/macro CHChain <role> <chaincastdelaytime, ie 10s> <Tank1> <Tank2> <Tank3> <RaidTarget>

The more I think about the patch healer etc., I'm not sure that's really needed so much honestly. Using KISS, RaidDruid, etc, can easily be set to throws target heals outside the chain and refresh the buffs (aka Promised Renewal, Zealous Elixir, etc.) I've nto really touched the patch healing, delayed stuff yet obviously but food for thought.
 
Exactly what CT said. I think he and I both have the bug on this.

That said CT, I couldn't remember how many parameters you can use on a macro launch. My thought was to use them to do similar to what you did. Thinking set the role, the delay between heals within the chain, the tank line up so if tank goes down, it immediately jumps to the next tank and the raidtarget optional for HoTT healing if no tanks show. Then have slash commands to also manually change them on the fly yourself. So you can update them in the chain without those para's clarified.

/macro CHChain <role> <chaincastdelaytime, ie 10s> <Tank1> <Tank2> <Tank3> <RaidTarget>

The more I think about the patch healer etc., I'm not sure that's really needed so much honestly. Using KISS, RaidDruid, etc, can easily be set to throws target heals outside the chain and refresh the buffs (aka Promised Renewal, Zealous Elixir, etc.) I've nto really touched the patch healing, delayed stuff yet obviously but food for thought.

May want to think about away to run the macro in Raid .vs. multiple groups. When in a Raid if the raid leader sets all the tanks/main assists, you could just default a lot of the information. I am kind of torn between /targeting the tank or /assisting the mainassist. Personally I think /assisting has more advantages, and when I use to raid most of my hot keys used /assist and not /target. The MA can change targets at any time and you have to switch targets when they do.

I don't think Patch healing is needed, if you are using a Big heal and a Fast Heal like you are doing. Basically your Fast Heal is what I consider Patch healing.
 
CT I sent you back a message, hopefully it went through okay. Had a net hiccup but think that went out before it.

Patchday, so won't be doing any testing to speak of and other than some conceptional thinking, I won't be doing anything on this tonight I don't think. A few things I had earmarked though as follows:

INI information would look like this:
Rich (BB code):
[General]
Version=1.0
ChainRole=Chainheal
ChainDelay=
Tank1=
Tank2=
Tank3=
RaidTarget=
[Spells]
BigHeal=
FastHeal=
HoTHeal=
PatchHeal=

Most of general would be set at marco launch as optional or remain from previous launch or could be set at launch.
Tank line up is for fast switch concept I have if a tank goes down to automatically go to the next one to start heals on when they cast. Also to have it changable with a /Tank1, etc. type command in /bc so it can be adjusted once chain is up or such.

Did decide that having a Patch heal functionality role would be valuable for the transitions when a healer fizzle's, dies, etc to smooth things over for the main chain etc.

Few other things in my mind and some suggestions from CT already sent to me.
 
Great, I was hoping that would get added.

Any thoughts on Necro Twitching Maybe just a sub and a few declares that can be grafted into whatever macros necros are running ie Kiss?
 
We need to walk before we start running.

Sure thing, I wasn't sure if it was easier to figure that into the layout initially or not.

Didn't get time to do any testing last night by the time compile came back up :(
 
Just fyi, there's some combine efforts going into this whole thing instead individual directions that started. Might be a bit before another posting but it's definitely alive and active work. As CT stated before.... stay tuned!...

- - - Updated - - -

Go here now....

Complete Heal Chain Macro
 
Request - Back on the chain gang...

Users who are viewing this thread

Back
Top
Cart