Corrected issues with Ability declaration not matching macro. Cast cancelling moves now properly cancel any active cast. All abilities have configurable cancelCast settings.
{uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[3]==0?255:#class".Right Click Ability.Cooldown Bar Color 1"_f[3])}, \
{uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 1"_f[3]==0?255:#class".Right Click Ability.Cooldown Bar Color 1"_f[3])}, \
{uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[0]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[1]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[2]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[3]==0?255:#class".Right Click Ability.Cooldown Bar Color 2"_f[3])}, \
{uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[0]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[1]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[2]),uint8_t(#class".Right Click Ability.Cooldown Bar Color 2"_f[3]==0?255:#class".Right Click Ability.Cooldown Bar Color 2"_f[3])}, \
{uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 2.Cooldown Bar Color 1"_f[3])}, \
{uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[0]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[1]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[2]),uint8_t(#class".Ability 2.Cooldown Bar Color 1"_f[3]==0?255:#class".Ability 2.Cooldown Bar Color 1"_f[3])}, \
{uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[0]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[1]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[2]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[3]==0?255:#class".Ability 2.Cooldown Bar Color 2"_f[3])}, \
{uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[0]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[1]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[2]),uint8_t(#class".Ability 2.Cooldown Bar Color 2"_f[3]==0?255:#class".Ability 2.Cooldown Bar Color 2"_f[3])}, \
Warrior::name="Warrior"".ClassName"_S;Warrior::cl=WARRIOR;Warrior::rightClickAbility=Ability{"Warrior"".Right Click Ability.Name"_S,"Warrior"".Right Click Ability.Cooldown"_F,"Warrior"".Right Click Ability.Mana Cost"_I,{uint8_t("Warrior"".Right Click Ability.Cooldown Bar Color 1"_f[0]),uint8_t("Warrior"".Right Click Ability.Cooldown Bar Color 1"_f[1]),uint8_t("Warrior"".Right Click Ability.Cooldown Bar Color 1"_f[2]),uint8_t("Warrior"".Right Click Ability.Cooldown Bar Color 1"_f[3]==0?255:"Warrior"".Right Click Ability.Cooldown Bar Color 1"_f[3])},{uint8_t("Warrior"".Right Click Ability.Cooldown Bar Color 2"_f[0]),uint8_t("Warrior"".Right Click Ability.Cooldown Bar Color 2"_f[1]),uint8_t("Warrior"".Right Click Ability.Cooldown Bar Color 2"_f[2]),uint8_t("Warrior"".Right Click Ability.Cooldown Bar Color 2"_f[3]==0?255:"Warrior"".Right Click Ability.Cooldown Bar Color 2"_f[3])},{"Warrior"".Right Click Ability.Precast Time"_F,"Warrior"".Right Click Ability.Casting Range"_I/100.f*24,"Warrior"".Right Click Ability.Casting Size"_I/100.f*24},bool("Warrior"".Right Click Ability.CancelCast"_I)};Warrior::ability1={"Warrior"".Ability 1.Name"_S,"Warrior"".Ability 1.Cooldown"_F,"Warrior"".Ability 1.Mana Cost"_I,{uint8_t("Warrior"".Ability 1.Cooldown Bar Color 1"_f[0]),uint8_t("Warrior"".Ability 1.Cooldown Bar Color 1"_f[1]),uint8_t("Warrior"".Ability 1.Cooldown Bar Color 1"_f[2]),uint8_t("Warrior"".Ability 1.Cooldown Bar Color 1"_f[3]==0?255:"Warrior"".Ability 1.Cooldown Bar Color 1"_f[3])},{uint8_t("Warrior"".Ability 1.Cooldown Bar Color 2"_f[0]),uint8_t("Warrior"".Ability 1.Cooldown Bar Color 2"_f[1]),uint8_t("Warrior"".Ability 1.Cooldown Bar Color 2"_f[2]),uint8_t("Warrior"".Ability 1.Cooldown Bar Color 2"_f[3]==0?255:"Warrior"".Ability 1.Cooldown Bar Color 2"_f[3])},{"Warrior"".Ability 1.Precast Time"_F,"Warrior"".Ability 1.Casting Range"_I/100.f*24,"Warrior"".Ability 1.Casting Size"_I/100.f*24},bool("Warrior"".Ability 1.CancelCast"_I)};Warrior::ability2={"Warrior"".Ability 2.Name"_S,"Warrior"".Ability 2.Cooldown"_F,"Warrior"".Ability 2.Mana Cost"_I,{uint8_t("Warrior"".Ability 2.Cooldown Bar Color 1"_f[0]),uint8_t("Warrior"".Ability 2.Cooldown Bar Color 1"_f[1]),uint8_t("Warrior"".Ability 2.Cooldown Bar Color 1"_f[2]),uint8_t("Warrior"".Ability 2.Cooldown Bar Color 1"_f[3]==0?255:"Warrior"".Ability 2.Cooldown Bar Color 1"_f[3])},{uint8_t("Warrior"".Ability 2.Cooldown Bar Color 2"_f[0]),uint8_t("Warrior"".Ability 2.Cooldown Bar Color 2"_f[1]),uint8_t("Warrior"".Ability 2.Cooldown Bar Color 2"_f[2]),uint8_t("Warrior"".Ability 2.Cooldown Bar Color 2"_f[3]==0?255:"Warrior"".Ability 2.Cooldown Bar Color 2"_f[3])},{"Warrior"".Ability 2.Precast Time"_F,"Warrior"".Ability 2.Casting Range"_I/100.f*24,"Warrior"".Ability 2.Casting Size"_I/100.f*24}bool("Warrior"".Ability 2.CancelCast"_I)};Warrior::ability3={"Warrior"".Ability 3.Name"_S,"Warrior"".Ability 3.Cooldown"_F,"Warrior"".Ability 3.Mana Cost"_I,{uint8_t("Warrior"".Ability 3.Cooldown Bar Color 1"_f[0]),uint8_t("Warrior"".Ability 3.Cooldown Bar Color 1"_f[1]),uint8_t("Warrior"".Ability 3.Cooldown Bar Color 1"_f[2]),uint8_t("Warrior"".Ability 3.Cooldown Bar Color 1"_f[3]==0?255:"Warrior"".Ability 3.Cooldown Bar Color 1"_f[3])},{uint8_t("Warrior"".Ability 3.Cooldown Bar Color 2"_f[0]),uint8_t("Warrior"".Ability 3.Cooldown Bar Color 2"_f[1]),uint8_t("Warrior"".Ability 3.Cooldown Bar Color 2"_f[2]),uint8_t("Warrior"".Ability 3.Cooldown Bar Color 2"_f[3]==0?255:"Warrior"".Ability 3.Cooldown Bar Color 2"_f[3])},{"Warrior"".Ability 3.Precast Time"_F,"Warrior"".Ability 3.Casting Range"_I/100.f*24,"Warrior"".Ability 3.Casting Size"_I/100.f*24},bool("Warrior"".Ability 3.CancelCast"_I)};Warrior::ability4={"???",0,0};