feat: color cast bars green/red by spell interruptibility from Spell.dbc

Load AttributesEx from Spell.dbc for all expansions (Classic/TBC/WotLK/
Turtle). Check SPELL_ATTR_EX_NOT_INTERRUPTIBLE (bit 4 = 0x10) to classify
each cast as interruptible or not when SMSG_SPELL_START arrives.

Target frame and nameplate cast bars now use:
- Green: spell can be interrupted by Kick/Counterspell/Pummel etc.
- Red: spell is immune to interrupt (boss abilities, instant-cast effects)
Both colors pulse faster at >80% completion to signal the closing window.

Adds GameHandler::isSpellInterruptible() and UnitCastState::interruptible.
This commit is contained in:
Kelsi 2026-03-17 19:43:19 -07:00
parent b8712f380d
commit 279b4de09a
7 changed files with 55 additions and 17 deletions

View file

@ -1,6 +1,6 @@
{
"Spell": {
"ID": 0, "Attributes": 5, "IconID": 117,
"ID": 0, "Attributes": 5, "AttributesEx": 6, "IconID": 117,
"Name": 120, "Tooltip": 147, "Rank": 129, "SchoolEnum": 1,
"CastingTimeIndex": 15, "PowerType": 28, "ManaCost": 29, "RangeIndex": 33,
"DispelType": 4

View file

@ -1,6 +1,6 @@
{
"Spell": {
"ID": 0, "Attributes": 5, "IconID": 124,
"ID": 0, "Attributes": 5, "AttributesEx": 6, "IconID": 124,
"Name": 127, "Tooltip": 154, "Rank": 136, "SchoolMask": 215,
"CastingTimeIndex": 22, "PowerType": 35, "ManaCost": 36, "RangeIndex": 40,
"DispelType": 3

View file

@ -1,6 +1,6 @@
{
"Spell": {
"ID": 0, "Attributes": 5, "IconID": 117,
"ID": 0, "Attributes": 5, "AttributesEx": 6, "IconID": 117,
"Name": 120, "Tooltip": 147, "Rank": 129, "SchoolEnum": 1,
"CastingTimeIndex": 15, "PowerType": 28, "ManaCost": 29, "RangeIndex": 33,
"DispelType": 4

View file

@ -1,6 +1,6 @@
{
"Spell": {
"ID": 0, "Attributes": 4, "IconID": 133,
"ID": 0, "Attributes": 4, "AttributesEx": 5, "IconID": 133,
"Name": 136, "Tooltip": 139, "Rank": 153, "SchoolMask": 225,
"PowerType": 14, "ManaCost": 39, "CastingTimeIndex": 47, "RangeIndex": 49,
"DispelType": 2