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 :
Sample for raid coth part :
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
}

