• 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

SuperCoth

moguay

Member
Joined
Jan 17, 2011
RedCents
1,190¢
SuperCoth

Is to perform mass coth to optimize and therefore to minimize the time of coth raid.
For this your macro need to identifies each type of coth on bots, in order to sort them by order of speed

Important, once more for me, This function is performed by an exchange between bots custom plugin, same as netbots but more flexible.

SuperCoth Function must have at least one parameter of type (target, group, bots, raid, perma) and another for the coth master.

Create a wait function to start the coth (to chain) at the time here your character will be summon near to the coth master.
Important, for a good functioning during a raid fight, does not create an infinite wait loop (/delay is evil), as it is done all the time. So just continue running your handlers of bots.

After it is a bit as usual, management of different types of coth...
For all coths chained, maintain a list of the coth in order of speed and availability.
Important, before each cast coth do an audit on bots does not have the same coth on the same target.

With this on a raid you easily switch more than 6 min of coth to 1 min.

https://youtu.be/a1HTqzr6_HU

Sample of coth waiting for create mass group coth :
Rich (BB code):
    /if (!${Defined}) /declare i int local 0
    /if (!${Defined[j]}) /declare j int local 0
    /if (!${Defined[k]}) /declare k int local 0
    /if (!${Defined[l]}) /declare l int local 0
    /if (!${Defined[m]}) /declare m int local 0
    /if (!${Defined[n]}) /declare n int local 0

    | Very Fast Raid/Bot Coth
    /if (${Me.CleanName.NotEqual[${CothType}]}) {
        /if (${CothMode.Equal[raid]}) {
            /if (${Int[${Spawn[PC =${CothType}].Distance3D}]} < 50 && ${Spawn[PC =${CothType}].LineOfSight} && ${Spawn[PC =${CothType}].ID}!=NULL) {
                /if (!${Defined[SuperCothCount]}) /declare SuperCothCount int local
                /if (!${Defined[SpellCasting]}) /declare SpellCasting string local
                /varset SuperCothCount 0
                /for j 1 to ${Raid.Members}
                    /if (${Spawn[PC =${Raid.Member[${j}].Name}].ID}!=NULL && (${Spawn[PC =${Raid.Member[${j}].Name}].Distance3D} > 50 || !${Spawn[PC =${Raid.Member[${j}].Name}].LineOfSight})) {
                        | Count can coth
                        /varcalc SuperCothCount ${SuperCothCount} + 1
                        | Exclude inc coth casting
                        /for i 1 to ${Raid.Members}
                            | Check current casting
                            /varset SpellCasting
                            /if (${NetBots[${Raid.Member[${i}].Name}].ID}!=NULL && ${NetBots[${Raid.Member[${i}].Name}].TargetID}==${Spawn[PC =${Raid.Member[${j}].Name}].ID} && ${Bool[${NetBots[${Raid.Member[${i}].Name}].Casting}]}) {
                                /varset SpellCasting ${NetBots[${Raid.Member[${i}].Name}].Casting}
                                /if (${Select[${SpellCasting},Call of the Hero,Orb of the Crimson Bull,Ino's Lost Trinket]} || ${SpellCasting.Find[Arion]}) {
                                    /varcalc SuperCothCount ${SuperCothCount} - 1
                                }
                            }
                        /next i
                    }
                /next j
                | Fast end of coth
                /if (${SuperCothCount} <= 4 && ${Select[${NetBots[${CothType}].Data[${DataCanCoth}]},4]}) /varset CothType 0
                /if (${SuperCothCount} <= 2 && ${Select[${NetBots[${CothType}].Data[${DataCanCoth}]},3,2,1]}) /varset CothType 0
                /if (${CothType.Equal[0]}) /return
            } else {
                | Waiting for ready to coth other
                /return
            }
        } else /if (${CothMode.Equal[bot]}) {
            /if (${Int[${Spawn[PC =${CothType}].Distance3D}]} < 50 && ${Spawn[PC =${CothType}].LineOfSight} && ${Spawn[PC =${CothType}].ID}!=NULL) {
                /if (!${Defined[SuperCothCount]}) /declare SuperCothCount int local
                /if (!${Defined[SpellCasting]}) /declare SpellCasting string local
                /varset SuperCothCount 0
                /for j 1 to ${NetBots.Counts}
                    /if (${Spawn[pc =${NetBots.Client.Arg[${j}, ]}].ID}!=NULL && (${Spawn[pc =${NetBots.Client.Arg[${j}, ]}].Distance3D} > 50 || !${Spawn[pc =${NetBots.Client.Arg[${j}, ]}].LineOfSight})) {
                        | Count can coth
                        /varcalc SuperCothCount ${SuperCothCount} + 1
                        | Exclude inc coth casting
                        /for i 1 to ${NetBots.Counts}
                            | Check current casting
                            /varset SpellCasting
                            /if (${Spawn[pc =${NetBots.Client.Arg[${i}, ]}].ID}!=NULL && ${NetBots[${NetBots.Client.Arg[${i}, ]}].TargetID}==${Spawn[pc =${NetBots.Client.Arg[${j}, ]}].ID} && ${Bool[${NetBots[${NetBots.Client.Arg[${i}, ]}].Casting}]}) {
                                /varset SpellCasting ${NetBots[${NetBots.Client.Arg[${i}, ]}].Casting}
                                /if (${Select[${SpellCasting},Call of the Hero,Orb of the Crimson Bull,Ino's Lost Trinket]} || ${SpellCasting.Find[Arion]}) {
                                    /varcalc SuperCothCount ${SuperCothCount} - 1
                                }
                            }
                        /next i
                    }
                /next j

                | Fast end of coth
                /if (${SuperCothCount} <= 4 && ${Select[${NetBots[${CothType}].Data[${DataCanCoth}]},4]}) /varset CothType 0
                /if (${SuperCothCount} <= 2 && ${Select[${NetBots[${CothType}].Data[${DataCanCoth}]},3,2,1]}) /varset CothType 0
                /if (${CothType.Equal[0]}) /return
            } else {
                | Waiting for ready to coth other
                /return
            }
         } else /if (${CothMode.Equal[group]} && ${Group.Member[${CothType}]}!=NULL) {
            /if (${Int[${Spawn[PC =${CothType}].Distance3D}]} < 50 && ${Spawn[PC =${CothType}].LineOfSight} && ${Spawn[PC =${CothType}].ID}!=NULL) {
                /if (!${Defined[SuperCothCount]}) /declare SuperCothCount int local
                /if (!${Defined[SpellCasting]}) /declare SpellCasting string local
                /varset SuperCothCount 0
                /for j 0 to ${Group.Members}
                    /if (${Spawn[PC =${Group.Member[${j}].Name}].ID}!=NULL && (${Spawn[PC =${Group.Member[${j}].Name}].Distance3D} > 50 || !${Spawn[PC =${Group.Member[${j}].Name}].LineOfSight})) {
                        | Count can coth
                        /varcalc SuperCothCount ${SuperCothCount} + 1
                        | Exclude inc coth casting
                        /for i 0 to ${Group.Members}
                            | Check current casting
                            /varset SpellCasting
                            /if (${NetBots[${Group.Member[${i}].Name}].ID}!=NULL && ${NetBots[${Group.Member[${i}].Name}].TargetID}==${Spawn[PC =${Group.Member[${j}].Name}].ID} && ${Bool[${NetBots[${Group.Member[${i}].Name}].Casting}]}) {
                                /varset SpellCasting ${NetBots[${Group.Member[${i}].Name}].Casting}
                                /if (${Select[${SpellCasting},Call of the Hero,Orb of the Crimson Bull,Ino's Lost Trinket]} || ${SpellCasting.Find[Arion]}) {
                                    /varcalc SuperCothCount ${SuperCothCount} - 1
                                }
                            }
                        /next i
                    }
                /next j
                | Fast end of coth
                /if (${SuperCothCount} <= 4 && ${Select[${NetBots[${CothType}].Data[${DataCanCoth}]},4]}) /varset CothType 0
                /if (${SuperCothCount} <= 2 && ${Select[${NetBots[${CothType}].Data[${DataCanCoth}]},3,2,1]}) /varset CothType 0

                /if (${CothType.Equal[0]}) /return
            } else {
                | Waiting for ready to coth other
                /return
            }
        } else {
            /varset CothType 0
            /return
        }
        /if (${broadcast}==1) /docommand /${echo} [${Me.CleanName}] [Fast CoTH ${CothMode.Upper}]: ${Cg}inc${Cx}...
    }


Sample for raid coth part :
Rich (BB code):
    /if (${CothMode.Equal[raid]} || ${CothMode.Equal[bot]} || ${Me.CleanName.Equal[${CothType}]}) {

        /if (!${Defined[strName]}) /declare strName string local

        /if (!${Defined[CanCothInc]}) /declare CanCothInc int local 1
        /if (!${Select[${NetBots[${Me.CleanName}].Data[${DataCanCoth}]},NULL]}) /varset CanCothInc 4

        /if (${CothMode.Equal[raid]}) {
            /if (!${Defined[lMax]}) /declare lMax int local ${Raid.Members}
        } else {
            /if (!${Defined[lMax]}) /declare lMax int local ${NetBots.Counts}
        }

        /for n 1 to ${CanCothInc}
        /for l 1 to ${lMax}

            | Set strName
            /if (${CothMode.Equal[raid]}) {
                /varset strName ${Raid.Member[${l}]}
            } else /if (${CothMode.Equal[bot]}) {
                /varset strName ${NetBots.Client.Arg[${l}]}
            }

            /if (${Spawn[pc =${strName}].ID}!=NULL && (${Int[${Spawn[pc =${strName}].Distance3D}]} > 50 || !${Spawn[pc =${strName}].LineOfSight})) {

                | Coth Target
                /if ((${CothMode.Equal[2]} || ${CothMode.Equal[perma]}) && ${CothTarget.Equal[${strName}]}) /goto :CothBotNext

                | Fast Coth: Coth Prio order
                /if (!${Select[${NetBots[${Me.CleanName}].Data[${DataCanCoth}]},NULL]} && ${NetBots[${strName}].Data[${DataCanCoth}].NotEqual[${n}]} && ${n} != ${CanCothInc}) {
                    /goto :CothBotNext
                }

                | Semi Fast Coth : Exclude inc coth casting
                /if (${CothMode.Equal[raid]}) {
                    /for i 1 to ${Raid.Members}
                        /if (!${Defined[SpellCasting]}) /declare SpellCasting string local
                        /varset SpellCasting
                        /if (${NetBots[${Raid.Member[${i}].Name}].ID}!=NULL && ${NetBots[${Raid.Member[${i}].Name}].TargetID}==${Spawn[pc =${strName}].ID} && ${Bool[${NetBots[${Raid.Member[${i}].Name}].Casting}]}) {
                        /varset SpellCasting ${NetBots[${Raid.Member[${i}].Name}].Casting}
                        /if (${Select[${SpellCasting},Call of the Hero,Orb of the Crimson Bull,Ino's Lost Trinket]} || ${SpellCasting.Find[Arion]}) {
                            /goto :CothBotNext
                        }
                        }
                    /next i
                } else /if (${CothMode.Equal[bot]}) {
                    /for i 1 to ${NetBots.Counts}
                        /if (!${Defined[SpellCasting]}) /declare SpellCasting string local
                        /varset SpellCasting
                        /if (${NetBots[${NetBots.Client.Arg[${i}, ]}].ID}!=NULL && ${NetBots[${NetBots.Client.Arg[${i}, ]}].TargetID}==${Spawn[pc =${strName}].ID} && ${Bool[${NetBots[${NetBots.Client.Arg[${i}, ]}].Casting}]}) {
                        /varset SpellCasting ${NetBots[${NetBots.Client.Arg[${i}, ]}].Casting}
                        /if (${Select[${SpellCasting},Call of the Hero,Orb of the Crimson Bull,Ino's Lost Trinket]} || ${SpellCasting.Find[Arion]}) {
                            /goto :CothBotNext
                        }
                        }
                    /next i
                }

                /if (${Me.Class.Name.Equal[Bard]}) /call BardTwistOff standby
                /doevents CothList

                /call CastCoth "${strName}" "${CothMode}" " ${If[${CothList.Length},${Math.Calc[${CothList.Count[|]}+2].Int},1]}/${Math.Calc[${NetBots.Counts}-1].Int} "
            }

            :CothBotNext

         /next l
         /next n
    }
 
I see you're showing a video for THF. Is this intended for THF/UF/ROF builds of MQ2 or is the target audience for all of MQ2?

There is sample code that appears complex. However, I'm afraid I'm not sure if you're providing snippets of code intended to be put into a larger macro or if this is intended to be a complete macro.

I don't know enough about CoTH to know what options are available to the user. You're talking about using CoTH on a raid. I was led to believe you could only use it on group members. Are you able to use it on raid members as well?

What is the benefit/purpose of a mass CoTH? I'm afraid that raiding isn't typical for me at this point, but isn't the banner supposed to get you to the raid if you're lagging behind? In the event of death, wouldn't you be better served with a rez than a CoTH?
 
mages have 2 CoTH spells now, both affect group only. First one is the standard CoTH single target couple sec casting time 6 second reuse time. Second one is a group CoTH, which it will summon the entire group to the mage, its a 3 sec cast time with a 15 sec reuse time. best way to move is make 5 man grps in the raid and move the mage from group to group and coth the grp to the mage, kinda of how I move my 20 bot army around.
 
I see you're showing a video for THF. Is this intended for THF/UF/ROF builds of MQ2 or is the target audience for all of MQ2?

First of all, I find its very relevant comments.
What's important to remember it is the structure and how to interact in a way intelligent.
This code is for UT, but easily convertible to higher versions. It's a little more difficult in the other direction, or not... Need a bite time. Or do request to macro developer.

There is sample code that appears complex. However, I'm afraid I'm not sure if you're providing snippets of code intended to be put into a larger macro or if this is intended to be a complete macro.

I hate standalone macro. And realize only macros completely integrate into a macro management overall, solo, group and solo/multi players raid.

I don't know enough about CoTH to know what options are available to the user. You're talking about using CoTH on a raid. I was led to believe you could only use it on group members. Are you able to use it on raid members as well?
What is the benefit/purpose of a mass CoTH? I'm afraid that raiding isn't typical for me at this point, but isn't the banner supposed to get you to the raid if you're lagging behind? In the event of death, wouldn't you be better served with a rez than a CoTH?

Yes on raid members as well. I use to move between zone, in instance for different event, in fight, for complex loot.
In Raid fight, we need to reposition some characters, or group, according to the event or death. So actually, i use in parallel rez, consents/summon and coth. (I do not hide rez function is equally complex, with the same subtlety)
Most of the time the complex event, I am talking about those or you must fighter at different location clearly put off everyone and are deserted. And yet so interesting with the right tools.
And it must be understood with this on private server or there are donor items, you can be faster and more efficient without.

mages have 2 CoTH spells now, both affect group only. First one is the standard CoTH single target couple sec casting time 6 second reuse time. Second one is a group CoTH, which it will summon the entire group to the mage, its a 3 sec cast time with a 15 sec reuse time. best way to move is make 5 man grps in the raid and move the mage from group to group and coth the grp to the mage, kinda of how I move my 20 bot army around.

Same as private server with in more an all class item (10s) and other one donator. So i prefert best dps with 6man groups, and your solution is probably easy to code an automatic group switch before casting, and I avoid it in fight...

To conclude, this makes effective a basic function with its analyses and its filters, in order to interact directly in the big fight event, so that the player itself keeps control of actions, especially without be stuck with stress, switches on different bots.

More if notice you well, if the filters are well done, it permit to you to do some errors without consequence. (ie doing mistake coth by error, or coth again for the latecomers without lose time)
this philosophy is applies to all functions and macro. But my biggest disappointment is never applied

Brief efficiency rhyme with more time to devote to the real thing of life, like take care with his family: P
 
SuperCoth

Users who are viewing this thread

Back
Top
Cart