diff --git a/common/shareddb.cpp b/common/shareddb.cpp index ee0c2d9e6..f8a05e2cc 100644 --- a/common/shareddb.cpp +++ b/common/shareddb.cpp @@ -1729,6 +1729,7 @@ void SharedDatabase::LoadSpells(void *data, int max_spells) { sp[tempid].NimbusEffect = atoi(row[193]); sp[tempid].directional_start = (float)atoi(row[194]); sp[tempid].directional_end = (float)atoi(row[195]); + sp[tempid].suspendable = atoi(row[200]) != 0; sp[tempid].spellgroup=atoi(row[207]); sp[tempid].powerful_flag=atoi(row[209]); sp[tempid].CastRestriction = atoi(row[211]); diff --git a/common/spdat.cpp b/common/spdat.cpp index d75dd67c4..3c551e9e7 100644 --- a/common/spdat.cpp +++ b/common/spdat.cpp @@ -974,6 +974,14 @@ bool IsPersistDeathSpell(uint16 spell_id) return false; } +bool IsSuspendableSpell(uint16 spell_id) +{ + if (IsValidSpell(spell_id) && spells[spell_id].suspendable) + return true; + + return false; +} + uint32 GetMorphTrigger(uint32 spell_id) { for (int i = 0; i < EFFECT_COUNT; ++i) diff --git a/common/spdat.h b/common/spdat.h index 5b762d7d3..c6ffc062f 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -711,7 +711,7 @@ struct SPDat_Spell_Struct /* 194 */ float directional_start; /* 195 */ float directional_end; /* 196 - 199 */ -/* 200 */ //bool suspendable; // buff is suspended in suspended buff zones +/* 200 */ bool suspendable; // buff is suspended in suspended buff zones /* 201 - 202 */ /* 203 */ //int songcap; // individual song cap (how live currently does it, not implemented) /* 204 - 206 */ @@ -821,6 +821,7 @@ bool IsResistDebuffSpell(uint16 spell_id); bool IsSelfConversionSpell(uint16 spell_id); bool IsBuffSpell(uint16 spell_id); bool IsPersistDeathSpell(uint16 spell_id); +bool IsSuspendableSpell(uint16 spell_id); uint32 GetMorphTrigger(uint32 spell_id); uint32 GetPartialMeleeRuneReduction(uint32 spell_id); uint32 GetPartialMagicRuneReduction(uint32 spell_id); diff --git a/zone/spell_effects.cpp b/zone/spell_effects.cpp index 85d15ede8..725b303fa 100644 --- a/zone/spell_effects.cpp +++ b/zone/spell_effects.cpp @@ -3181,7 +3181,7 @@ void Mob::BuffProcess() if(spells[buffs[buffs_i].spellid].buffdurationformula != DF_Permanent) { - if(!zone->BuffTimersSuspended() || IsDetrimentalSpell(buffs[buffs_i].spellid)) + if(!zone->BuffTimersSuspended() || !IsSuspendableSpell(buffs[buffs_i].spellid)) { --buffs[buffs_i].ticsremaining;