Hello!
I tried out several CH rotation macs for the TLP and had issues with all of them until I found this very simple little gem of a macro.
This is not my macro. It was made over a decade ago by an individual named Pinkfloydx33. I'm new to RGs so if I have done something inappropriate by listing someone elses mac, please let me know so I can remove it.
OK. So, here is how it works:
Lets say you have 5 clerics: Bob, Matt, Jake, John, Neo
First, you join a chat channel that is going to be the rotation spam channel on all clerics (it is very important that all clerics are in this channel. It can be called anything).
Example: /join MyCHRotation
Second, you join a chat channel that is going to be the mana update spam channel on all clerics.
Example: /join MyManaUpdate
Each cleric is now in 1. MyCHRotation, 2. MyManaUpdate
Third, decide the rotation order for your clerics.
We will use: 1. Bob, 2. Matt, 3. Jake, 4. John, 5. Neo
(You can use as little as two clerics, but will have to make sure the delay between CHs is enough so the CH is refreshed before the next cleric goes. You can have as many clerics in the chain as you like)
Fourth, create a little hot key for each clerics .mac. If you saved the mac as CH.mac it would follow this format:
/mac CH <name of the next cleric> <delay in seconds to wait before casting CH> <rotation channel> <mana report channel>
Bob will have: /mac CH Matt 4 1 2
Matt will have: /mac CH Jake 4 1 2
Jake will have: /mac CH John 4 1 2
John will have: /mac CH Neo 4 1 2
Neo will have: /mac CH Bob 4 1 2
Now, you can actually create a couple of these starting macs, each with a different rotation time in it. In the above example, the CH rotation is 4 second between CH casts. You can create different hot keys with different times in them. I would do this so you can adjust the delay in the middle of a Rotation.
So if each cleric has 4 hot keys:
Bob:
1: /mac CH Matt 3 1 2
2: /mac CH Matt 4 1 2
3: /mac CH Matt 5 1 2
4: /mac CH Matt 6 1 2
So when Bob finishes his CH (delay then cast complete), you can actually restart the mac with a different delay and the chain will continue. You will have to restart on each cleric, but I think you get the idea. Just make sure you restart for a cleric that is finished casting and not about to be initiated for a cast.
If the tanks health is getting too low, or spikes are getting close to killing him, you can make the rotation faster and if the the tanks health is staying high, you can adjust the delay longer to save mana.
Fifth, starting the rotation:
OK, so each cleric is actually looking for their name to be called in a specific way with the event:
#Event go "#*# next (#1#)#*#"
which is initiated in the macro with:
/chat ${chatNum} CH on %t, next (${nextCler})
So basically, this is outputting something like this to the 1. MyCHRotation channel:
Bob output: CH on <TankName>, next (Matt)
All clerics will see this output in 1. MyCHRotation channel, but only Matt will see this as his initiator for the CH to start (delay then cast).
So, in your 1. MyCHRotation channel, you will see something like:
Bob output: CH on <TankName>, next (Matt)
Matt output: CH on <TankName>, next (Jake)
Jake output: CH on <TankName>, next (John)
John output: CH on <TankName>, next (Neo)
Neo output: CH on <TankName>, next (Bob)
IMPORTANT:
1. Chat channel is called with a number in the mac:
/mac CH Matt 4 1 2
In this case, channel 1 is the initiator channel and channel 2 is the mana update channel.
So, . . . make sure your clerics are calling the right channel. If you are already in General Channel on one of your clerics, and general is channel 1, the cleric will output the "CH on <TankName>, next (Matt)" there. Don't make that mistake.
2. When it comes time to cast the CH, the cleric is going to cast it on his target.
Make sure all the clerics have the tank on target.
3. So I started all the CH.mac on each cleric and they are all just sitting there doing nothing . . .
You have to start the rotation by initiating one of the clerics with a manual message in the 1. MyCHRotation. Anyone can type it:
"CH on %t, next (Bob)" Actually, you can do it with just "next (Bob)"
That should start the rotation.
Notes:
1. Yes there are several ways this mac can be improved. It is very basic, but for me, it's simplicity is what I liked. It gets the job done.
2. It can easily be gutted to get rid of the chat channels and just use guild chat or group chat (if you have 6 or less clerics).
3. Adding something that makes the cleric target the tank and then possibly a second tank if the first tank dies would really improve the mac.
4. Some kind of distance check on the tank with the possibility of a delayed fast heal if out of CH range would be a good addition.
5. Finally, some kind of check to see if the /varset nextCler ${Param0} is actually alive? If the cleric has been killed for some reason, can initiate the cleric after - so basically store the next two clerics in the chain and skip the first if dead - or if they are OOM?
I tried out several CH rotation macs for the TLP and had issues with all of them until I found this very simple little gem of a macro.
This is not my macro. It was made over a decade ago by an individual named Pinkfloydx33. I'm new to RGs so if I have done something inappropriate by listing someone elses mac, please let me know so I can remove it.
OK. So, here is how it works:
Lets say you have 5 clerics: Bob, Matt, Jake, John, Neo
First, you join a chat channel that is going to be the rotation spam channel on all clerics (it is very important that all clerics are in this channel. It can be called anything).
Example: /join MyCHRotation
Second, you join a chat channel that is going to be the mana update spam channel on all clerics.
Example: /join MyManaUpdate
Each cleric is now in 1. MyCHRotation, 2. MyManaUpdate
Third, decide the rotation order for your clerics.
We will use: 1. Bob, 2. Matt, 3. Jake, 4. John, 5. Neo
(You can use as little as two clerics, but will have to make sure the delay between CHs is enough so the CH is refreshed before the next cleric goes. You can have as many clerics in the chain as you like)
Fourth, create a little hot key for each clerics .mac. If you saved the mac as CH.mac it would follow this format:
/mac CH <name of the next cleric> <delay in seconds to wait before casting CH> <rotation channel> <mana report channel>
Bob will have: /mac CH Matt 4 1 2
Matt will have: /mac CH Jake 4 1 2
Jake will have: /mac CH John 4 1 2
John will have: /mac CH Neo 4 1 2
Neo will have: /mac CH Bob 4 1 2
Now, you can actually create a couple of these starting macs, each with a different rotation time in it. In the above example, the CH rotation is 4 second between CH casts. You can create different hot keys with different times in them. I would do this so you can adjust the delay in the middle of a Rotation.
So if each cleric has 4 hot keys:
Bob:
1: /mac CH Matt 3 1 2
2: /mac CH Matt 4 1 2
3: /mac CH Matt 5 1 2
4: /mac CH Matt 6 1 2
So when Bob finishes his CH (delay then cast complete), you can actually restart the mac with a different delay and the chain will continue. You will have to restart on each cleric, but I think you get the idea. Just make sure you restart for a cleric that is finished casting and not about to be initiated for a cast.
If the tanks health is getting too low, or spikes are getting close to killing him, you can make the rotation faster and if the the tanks health is staying high, you can adjust the delay longer to save mana.
Fifth, starting the rotation:
OK, so each cleric is actually looking for their name to be called in a specific way with the event:
#Event go "#*# next (#1#)#*#"
which is initiated in the macro with:
/chat ${chatNum} CH on %t, next (${nextCler})
So basically, this is outputting something like this to the 1. MyCHRotation channel:
Bob output: CH on <TankName>, next (Matt)
All clerics will see this output in 1. MyCHRotation channel, but only Matt will see this as his initiator for the CH to start (delay then cast).
So, in your 1. MyCHRotation channel, you will see something like:
Bob output: CH on <TankName>, next (Matt)
Matt output: CH on <TankName>, next (Jake)
Jake output: CH on <TankName>, next (John)
John output: CH on <TankName>, next (Neo)
Neo output: CH on <TankName>, next (Bob)
IMPORTANT:
1. Chat channel is called with a number in the mac:
/mac CH Matt 4 1 2
In this case, channel 1 is the initiator channel and channel 2 is the mana update channel.
So, . . . make sure your clerics are calling the right channel. If you are already in General Channel on one of your clerics, and general is channel 1, the cleric will output the "CH on <TankName>, next (Matt)" there. Don't make that mistake.
2. When it comes time to cast the CH, the cleric is going to cast it on his target.
Make sure all the clerics have the tank on target.
3. So I started all the CH.mac on each cleric and they are all just sitting there doing nothing . . .
You have to start the rotation by initiating one of the clerics with a manual message in the 1. MyCHRotation. Anyone can type it:
"CH on %t, next (Bob)" Actually, you can do it with just "next (Bob)"
That should start the rotation.
Notes:
1. Yes there are several ways this mac can be improved. It is very basic, but for me, it's simplicity is what I liked. It gets the job done.
2. It can easily be gutted to get rid of the chat channels and just use guild chat or group chat (if you have 6 or less clerics).
3. Adding something that makes the cleric target the tank and then possibly a second tank if the first tank dies would really improve the mac.
4. Some kind of distance check on the tank with the possibility of a delayed fast heal if out of CH range would be a good addition.
5. Finally, some kind of check to see if the /varset nextCler ${Param0} is actually alive? If the cleric has been killed for some reason, can initiate the cleric after - so basically store the next two clerics in the chain and skip the first if dead - or if they are OOM?
Rich (BB code):
#Turbo
#Event go "#*# next (#1#)#*#"
#include spell_routines.inc
Sub Main
/declare nextCler outer
/declare waitTime int outer
/declare chatNum int outer
/declare castNum int outer
/declare manaNum int outer
/if (!${Defined[Param0]}) {
/echo [CH] You must Specify the next cleric
/echo [CH] Unloading
/endmacro
}
/if (!${Defined[Param1]}) {
/echo [CH] You must Specify the delay
/echo [CH] Unloading
/endmacro
}
/if (!${Defined[Param2]}) {
/echo [CH] You must Specify the CH rot channel number
/echo [CH] Unloading
/endmacro
}
/if (!${Defined[Param3]}) {
/echo [CH] You must Specify the mana report channel number
/echo [CH] Unloading
/endmacro
}
/varset castNum 0
/varset nextCler ${Param0}
/echo Next Cleric in Rotation: ${nextCler}
/varset waitTime ${Param1}
/echo CH Rot Timer: ${waitTime}s
/varset chatNum ${Param2}
/echo Chat Number: ${chatNum}
/varset manaNum ${Param3}
/echo Mana report Chat: ${manaNum}
:loop
/doevents
/goto :loop
/return
Sub event_go(line, who)
/if (${who.Equal[${Me}]}) {
/varset castNum ${Math.Calc[${castNum}+1]}
/echo Waiting ${waitTime} seconds to CH
/delay ${waitTime}s
/stand
/chat ${chatNum} CH on %t, next (${nextCler})
/call cast "Complete Heal"
/sit
/if (${castNum}==5) {
/g ${Me.PctMana} Mana
/rs ${Me.PctMana} Mana
/chat ${manaNum} ${Me.PctMana} Mana
/varset castNum 0
}
}
/return