nyghteyes
What is a macro??
- Joined
- Mar 21, 2006
- RedCents
- 1,347¢
Last edited:
Follow along with the video below to see how to install our site as a web app on your home screen.
Note: This feature may not be available in some browsers.


#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=
|
#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

#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
|
| 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
|==================================================================================
| /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
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.
[General]
Version=1.0
ChainRole=Chainheal
ChainDelay=
Tank1=
Tank2=
Tank3=
RaidTarget=
[Spells]
BigHeal=
FastHeal=
HoTHeal=
PatchHeal=
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.

