aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/master/2022_12_16_00_world.sql5
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp4
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp4
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h2
-rw-r--r--src/server/game/Entities/Unit/Unit.cpp30
-rw-r--r--src/server/game/Entities/Unit/Unit.h6
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp4
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h6
-rw-r--r--src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp14
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp2
-rw-r--r--src/server/game/Spells/SpellEffects.cpp2
-rw-r--r--src/server/game/Spells/SpellInfo.cpp48
-rw-r--r--src/server/game/Spells/SpellInfo.h14
-rw-r--r--src/server/game/Spells/SpellMgr.cpp2
14 files changed, 82 insertions, 61 deletions
diff --git a/sql/updates/world/master/2022_12_16_00_world.sql b/sql/updates/world/master/2022_12_16_00_world.sql
new file mode 100644
index 00000000000..d6acc6310b0
--- /dev/null
+++ b/sql/updates/world/master/2022_12_16_00_world.sql
@@ -0,0 +1,5 @@
+--
+-- Table structure for table `creature_template`
+--
+ALTER TABLE `creature_template` MODIFY `mechanic_immune_mask` bigint unsigned NOT NULL DEFAULT 0;
+
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp
index b456cd24029..63476dc1b8d 100644
--- a/src/server/game/Conditions/ConditionMgr.cpp
+++ b/src/server/game/Conditions/ConditionMgr.cpp
@@ -3787,7 +3787,7 @@ int32 GetUnitConditionVariable(Unit const* unit, Unit const* otherUnit, UnitCond
case UnitConditionVariable::HasHelpfulAuraMechanic:
return unit->GetAuraApplication([value](AuraApplication const* aurApp)
{
- return (aurApp->GetFlags() & AFLAG_NEGATIVE) == 0 && (aurApp->GetBase()->GetSpellInfo()->GetSpellMechanicMaskByEffectMask(aurApp->GetEffectMask()) & (1 << value)) != 0;
+ return (aurApp->GetFlags() & AFLAG_NEGATIVE) == 0 && (aurApp->GetBase()->GetSpellInfo()->GetSpellMechanicMaskByEffectMask(aurApp->GetEffectMask()) & (UI64LIT(1) << value)) != 0;
}) != nullptr ? value : 0;
case UnitConditionVariable::HasHarmfulAuraSpell:
return unit->GetAuraApplication(value, [](AuraApplication const* aurApp)
@@ -3802,7 +3802,7 @@ int32 GetUnitConditionVariable(Unit const* unit, Unit const* otherUnit, UnitCond
case UnitConditionVariable::HasHarmfulAuraMechanic:
return unit->GetAuraApplication([value](AuraApplication const* aurApp)
{
- return (aurApp->GetFlags() & AFLAG_NEGATIVE) != 0 && (aurApp->GetBase()->GetSpellInfo()->GetSpellMechanicMaskByEffectMask(aurApp->GetEffectMask()) & (1 << value)) != 0;
+ return (aurApp->GetFlags() & AFLAG_NEGATIVE) != 0 && (aurApp->GetBase()->GetSpellInfo()->GetSpellMechanicMaskByEffectMask(aurApp->GetEffectMask()) & (UI64LIT(1) << value)) != 0;
}) != nullptr ? value : 0;
case UnitConditionVariable::HasHarmfulAuraSchool:
return unit->GetAuraApplication([value](AuraApplication const* aurApp)
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index 907c30ecaea..f684c8c5ea6 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -2326,11 +2326,11 @@ void Creature::LoadTemplateImmunities()
if (GetOwnerGUID().IsPlayer() && IsHunterPet())
return;
- if (uint32 mask = GetCreatureTemplate()->MechanicImmuneMask)
+ if (uint64 mask = GetCreatureTemplate()->MechanicImmuneMask)
{
for (uint32 i = MECHANIC_NONE + 1; i < MAX_MECHANIC; ++i)
{
- if (mask & (1 << (i - 1)))
+ if (mask & (UI64LIT(1) << (i - 1)))
ApplySpellImmune(placeholderSpellId, IMMUNITY_MECHANIC, i, true);
}
}
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index 1b083f82c8b..c3da5761ea4 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -474,7 +474,7 @@ struct TC_GAME_API CreatureTemplate
int32 WidgetSetID;
int32 WidgetSetUnitConditionID;
bool RegenHealth;
- uint32 MechanicImmuneMask;
+ uint64 MechanicImmuneMask;
uint32 SpellSchoolImmuneMask;
uint32 flags_extra;
uint32 ScriptID;
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
index ac0da0fef82..3580a5c2824 100644
--- a/src/server/game/Entities/Unit/Unit.cpp
+++ b/src/server/game/Entities/Unit/Unit.cpp
@@ -4011,7 +4011,7 @@ void Unit::RemoveMovementImpairingAuras(bool withRoot)
RemoveAurasWithMechanic(1 << MECHANIC_SNARE, AURA_REMOVE_BY_DEFAULT, 0, false);
}
-void Unit::RemoveAurasWithMechanic(uint32 mechanicMaskToRemove, AuraRemoveMode removeMode, uint32 exceptSpellId, bool withEffectMechanics)
+void Unit::RemoveAurasWithMechanic(uint64 mechanicMaskToRemove, AuraRemoveMode removeMode, uint32 exceptSpellId, bool withEffectMechanics)
{
RemoveAppliedAuras([=](AuraApplication const* aurApp)
{
@@ -4019,12 +4019,12 @@ void Unit::RemoveAurasWithMechanic(uint32 mechanicMaskToRemove, AuraRemoveMode r
if (exceptSpellId && aura->GetId() == exceptSpellId)
return false;
- uint32 appliedMechanicMask = aura->GetSpellInfo()->GetSpellMechanicMaskByEffectMask(aurApp->GetEffectMask());
+ uint64 appliedMechanicMask = aura->GetSpellInfo()->GetSpellMechanicMaskByEffectMask(aurApp->GetEffectMask());
if (!(appliedMechanicMask & mechanicMaskToRemove))
return false;
// spell mechanic matches required mask for removal
- if ((1 << aura->GetSpellInfo()->Mechanic) & mechanicMaskToRemove || withEffectMechanics)
+ if ((UI64LIT(1) << aura->GetSpellInfo()->Mechanic) & mechanicMaskToRemove || withEffectMechanics)
return true;
// effect mechanic matches required mask for removal - don't remove, only update targets
@@ -4035,7 +4035,7 @@ void Unit::RemoveAurasWithMechanic(uint32 mechanicMaskToRemove, AuraRemoveMode r
void Unit::RemoveAurasByShapeShift()
{
- uint32 mechanic_mask = (1 << MECHANIC_SNARE) | (1 << MECHANIC_ROOT);
+ uint64 mechanic_mask = (1 << MECHANIC_SNARE) | (1 << MECHANIC_ROOT);
for (AuraApplicationMap::iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end();)
{
Aura const* aura = iter->second->GetBase();
@@ -4578,17 +4578,17 @@ bool Unit::HasNegativeAuraWithInterruptFlag(InterruptFlags flag, ObjectGuid guid
template TC_GAME_API bool Unit::HasNegativeAuraWithInterruptFlag(SpellAuraInterruptFlags flag, ObjectGuid guid) const;
template TC_GAME_API bool Unit::HasNegativeAuraWithInterruptFlag(SpellAuraInterruptFlags2 flag, ObjectGuid guid) const;
-bool Unit::HasAuraWithMechanic(uint32 mechanicMask) const
+bool Unit::HasAuraWithMechanic(uint64 mechanicMask) const
{
for (AuraApplicationMap::const_iterator iter = m_appliedAuras.begin(); iter != m_appliedAuras.end(); ++iter)
{
SpellInfo const* spellInfo = iter->second->GetBase()->GetSpellInfo();
- if (spellInfo->Mechanic && (mechanicMask & (1 << spellInfo->Mechanic)))
+ if (spellInfo->Mechanic && (mechanicMask & (UI64LIT(1) << spellInfo->Mechanic)))
return true;
for (SpellEffectInfo const& spellEffectInfo : spellInfo->GetEffects())
if (iter->second->HasEffect(spellEffectInfo.EffectIndex) && spellEffectInfo.IsEffect() && spellEffectInfo.Mechanic)
- if (mechanicMask & (1 << spellEffectInfo.Mechanic))
+ if (mechanicMask & (UI64LIT(1) << spellEffectInfo.Mechanic))
return true;
}
@@ -6604,11 +6604,11 @@ uint32 Unit::SpellDamageBonusTaken(Unit* caster, SpellInfo const* spellProto, ui
float TakenTotalMod = 1.0f;
// Mod damage from spell mechanic
- if (uint32 mechanicMask = spellProto->GetAllEffectsMechanicMask())
+ if (uint64 mechanicMask = spellProto->GetAllEffectsMechanicMask())
{
TakenTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT, [mechanicMask](AuraEffect const* aurEff) -> bool
{
- if (mechanicMask & uint32(1 << (aurEff->GetMiscValue())))
+ if (mechanicMask & uint64(UI64LIT(1) << aurEff->GetMiscValue()))
return true;
return false;
});
@@ -7310,12 +7310,12 @@ uint32 Unit::GetDamageImmunityMask() const
return mask;
}
-uint32 Unit::GetMechanicImmunityMask() const
+uint64 Unit::GetMechanicImmunityMask() const
{
- uint32 mask = 0;
+ uint64 mask = 0;
SpellImmuneContainer const& mechanicList = m_spellImmune[IMMUNITY_MECHANIC];
for (auto itr = mechanicList.begin(); itr != mechanicList.end(); ++itr)
- mask |= (1 << itr->first);
+ mask |= (UI64LIT(1) << itr->first);
return mask;
}
@@ -7520,7 +7520,7 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* attacker, uint32 pdamage, WeaponAttackT
});
// Mod damage from spell mechanic
- uint32 mechanicMask = spellProto->GetAllEffectsMechanicMask();
+ uint64 mechanicMask = spellProto->GetAllEffectsMechanicMask();
// Shred, Maul - "Effects which increase Bleed damage also increase Shred damage"
if (spellProto->SpellFamilyName == SPELLFAMILY_DRUID && spellProto->SpellFamilyFlags[0] & 0x00008800)
@@ -7530,7 +7530,7 @@ uint32 Unit::MeleeDamageBonusTaken(Unit* attacker, uint32 pdamage, WeaponAttackT
{
TakenTotalMod *= GetTotalAuraMultiplier(SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT, [mechanicMask](AuraEffect const* aurEff) -> bool
{
- if (mechanicMask & uint32(1 << (aurEff->GetMiscValue())))
+ if (mechanicMask & uint64(UI64LIT(1) << (aurEff->GetMiscValue())))
return true;
return false;
});
@@ -8198,7 +8198,7 @@ void Unit::UpdateSpeed(UnitMoveType mtype)
{
if (Creature* creature = ToCreature())
{
- uint32 immuneMask = creature->GetCreatureTemplate()->MechanicImmuneMask;
+ uint64 immuneMask = creature->GetCreatureTemplate()->MechanicImmuneMask;
if (immuneMask & (1 << (MECHANIC_SNARE - 1)) || immuneMask & (1 << (MECHANIC_DAZE - 1)))
break;
}
diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h
index 3589a004690..9f8c2fbafcb 100644
--- a/src/server/game/Entities/Unit/Unit.h
+++ b/src/server/game/Entities/Unit/Unit.h
@@ -1387,7 +1387,7 @@ class TC_GAME_API Unit : public WorldObject
void RemoveAurasWithInterruptFlags(InterruptFlags flag, SpellInfo const* source = nullptr);
void RemoveAurasWithAttribute(uint32 flags);
void RemoveAurasWithFamily(SpellFamilyNames family, flag128 const& familyFlag, ObjectGuid casterGUID);
- void RemoveAurasWithMechanic(uint32 mechanicMaskToRemove, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT, uint32 exceptSpellId = 0, bool withEffectMechanics = false);
+ void RemoveAurasWithMechanic(uint64 mechanicMaskToRemove, AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT, uint32 exceptSpellId = 0, bool withEffectMechanics = false);
void RemoveMovementImpairingAuras(bool withRoot);
void RemoveAurasByShapeShift();
@@ -1441,7 +1441,7 @@ class TC_GAME_API Unit : public WorldObject
bool HasAuraTypeWithTriggerSpell(AuraType auratype, uint32 triggerSpell) const;
template <typename InterruptFlags>
bool HasNegativeAuraWithInterruptFlag(InterruptFlags flag, ObjectGuid guid = ObjectGuid::Empty) const;
- bool HasAuraWithMechanic(uint32 mechanicMask) const;
+ bool HasAuraWithMechanic(uint64 mechanicMask) const;
bool HasStrongerAuraWithDR(SpellInfo const* auraSpellInfo, Unit* caster) const;
AuraEffect* IsScriptOverriden(SpellInfo const* spell, int32 script) const;
@@ -1712,7 +1712,7 @@ class TC_GAME_API Unit : public WorldObject
bool IsImmunedToSpell(SpellInfo const* spellInfo, WorldObject const* caster, bool requireImmunityPurgesEffectAttribute = false) const;
uint32 GetSchoolImmunityMask() const;
uint32 GetDamageImmunityMask() const;
- uint32 GetMechanicImmunityMask() const;
+ uint64 GetMechanicImmunityMask() const;
bool IsImmunedToDamage(SpellSchoolMask meleeSchoolMask) const;
bool IsImmunedToDamage(SpellInfo const* spellInfo) const;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index c1ec9b52d81..4a3f3ee4464 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -497,7 +497,7 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
creatureTemplate.WidgetSetID = fields[64].GetInt32();
creatureTemplate.WidgetSetUnitConditionID = fields[65].GetInt32();
creatureTemplate.RegenHealth = fields[66].GetBool();
- creatureTemplate.MechanicImmuneMask = fields[67].GetUInt32();
+ creatureTemplate.MechanicImmuneMask = fields[67].GetUInt64();
creatureTemplate.SpellSchoolImmuneMask = fields[68].GetUInt32();
creatureTemplate.flags_extra = fields[69].GetUInt32();
creatureTemplate.ScriptID = GetScriptId(fields[70].GetString());
@@ -1019,7 +1019,7 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
differenceMask = cInfo->MechanicImmuneMask & (~difficultyInfo->MechanicImmuneMask);
if (differenceMask)
{
- TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, mechanic_immune_mask: %u) has weaker immunities in difficulty %u mode (Entry: %u, mechanic_immune_mask: %u).",
+ TC_LOG_ERROR("sql.sql", "Creature (Entry: %u, mechanic_immune_mask: " UI64FMTD ") has weaker immunities in difficulty %u mode (Entry: %u, mechanic_immune_mask: " UI64FMTD ").",
cInfo->Entry, cInfo->MechanicImmuneMask, diff + 1, cInfo->DifficultyEntry[diff], difficultyInfo->MechanicImmuneMask);
TC_LOG_ERROR("sql.sql", "Possible FIX: UPDATE `creature_template` SET `mechanic_immune_mask`=`mechanic_immune_mask`|%u WHERE `entry`=%u;",
differenceMask, cInfo->DifficultyEntry[diff]);
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 651a88ddd43..c7a9f4ee74b 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -2482,7 +2482,11 @@ enum Mechanics : uint32
MECHANIC_SAPPED = 30,
MECHANIC_ENRAGED = 31,
MECHANIC_WOUNDED = 32,
- MAX_MECHANIC = 33 // SKIP
+ MECHANIC_INFECTED_2 = 33,
+ MECHANIC_INFECTED_3 = 34,
+ MECHANIC_INFECTED_4 = 35,
+ MECHANIC_TAUNTED = 36,
+ MAX_MECHANIC = 37 // SKIP
};
// Used for spell 42292 Immune Movement Impairment and Loss of Control (0x49967ca6)
diff --git a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
index 722c8abb8c2..d5300a4832a 100644
--- a/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
+++ b/src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp
@@ -3307,12 +3307,16 @@ TC_API_EXPORT EnumText EnumUtils<Mechanics>::ToString(Mechanics value)
case MECHANIC_SAPPED: return { "MECHANIC_SAPPED", "MECHANIC_SAPPED", "" };
case MECHANIC_ENRAGED: return { "MECHANIC_ENRAGED", "MECHANIC_ENRAGED", "" };
case MECHANIC_WOUNDED: return { "MECHANIC_WOUNDED", "MECHANIC_WOUNDED", "" };
+ case MECHANIC_INFECTED_2: return { "MECHANIC_INFECTED_2", "MECHANIC_INFECTED_2", "" };
+ case MECHANIC_INFECTED_3: return { "MECHANIC_INFECTED_3", "MECHANIC_INFECTED_3", "" };
+ case MECHANIC_INFECTED_4: return { "MECHANIC_INFECTED_4", "MECHANIC_INFECTED_4", "" };
+ case MECHANIC_TAUNTED: return { "MECHANIC_TAUNTED", "MECHANIC_TAUNTED", "" };
default: throw std::out_of_range("value");
}
}
template <>
-TC_API_EXPORT size_t EnumUtils<Mechanics>::Count() { return 33; }
+TC_API_EXPORT size_t EnumUtils<Mechanics>::Count() { return 37; }
template <>
TC_API_EXPORT Mechanics EnumUtils<Mechanics>::FromIndex(size_t index)
@@ -3352,6 +3356,10 @@ TC_API_EXPORT Mechanics EnumUtils<Mechanics>::FromIndex(size_t index)
case 30: return MECHANIC_SAPPED;
case 31: return MECHANIC_ENRAGED;
case 32: return MECHANIC_WOUNDED;
+ case 33: return MECHANIC_INFECTED_2;
+ case 34: return MECHANIC_INFECTED_3;
+ case 35: return MECHANIC_INFECTED_4;
+ case 36: return MECHANIC_TAUNTED;
default: throw std::out_of_range("index");
}
}
@@ -3394,6 +3402,10 @@ TC_API_EXPORT size_t EnumUtils<Mechanics>::ToIndex(Mechanics value)
case MECHANIC_SAPPED: return 30;
case MECHANIC_ENRAGED: return 31;
case MECHANIC_WOUNDED: return 32;
+ case MECHANIC_INFECTED_2: return 33;
+ case MECHANIC_INFECTED_3: return 34;
+ case MECHANIC_INFECTED_4: return 35;
+ case MECHANIC_TAUNTED: return 36;
default: throw std::out_of_range("value");
}
}
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index f80309dcfc6..e1d291eb857 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -1156,7 +1156,7 @@ bool AuraEffect::CheckEffectProc(AuraApplication* aurApp, ProcEventInfo& eventIn
case SPELL_AURA_MECHANIC_IMMUNITY:
case SPELL_AURA_MOD_MECHANIC_RESISTANCE:
// compare mechanic
- if (!spellInfo || !(spellInfo->GetAllEffectsMechanicMask() & (1 << GetMiscValue())))
+ if (!spellInfo || !(spellInfo->GetAllEffectsMechanicMask() & (UI64LIT(1) << GetMiscValue())))
return false;
break;
case SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK:
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index 3ef9d533e47..6aefb6c38d9 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -4090,7 +4090,7 @@ void Spell::EffectDispelMechanic()
if (!aura->GetApplicationOfTarget(unitTarget->GetGUID()))
continue;
if (roll_chance_i(aura->CalcDispelChance(unitTarget, !unitTarget->IsFriendlyTo(m_caster))))
- if ((aura->GetSpellInfo()->GetAllEffectsMechanicMask() & (1 << mechanic)))
+ if ((aura->GetSpellInfo()->GetAllEffectsMechanicMask() & (UI64LIT(1) << mechanic)))
dispel_list.emplace_back(aura->GetId(), aura->GetCasterGUID());
}
diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp
index a1c84545a6a..9317c8d2e73 100644
--- a/src/server/game/Spells/SpellInfo.cpp
+++ b/src/server/game/Spells/SpellInfo.cpp
@@ -2367,40 +2367,40 @@ SpellSchoolMask SpellInfo::GetSchoolMask() const
return SpellSchoolMask(SchoolMask);
}
-uint32 SpellInfo::GetAllEffectsMechanicMask() const
+uint64 SpellInfo::GetAllEffectsMechanicMask() const
{
- uint32 mask = 0;
+ uint64 mask = 0;
if (Mechanic)
- mask |= 1 << Mechanic;
+ mask |= UI64LIT(1) << Mechanic;
for (SpellEffectInfo const& effect : GetEffects())
if (effect.IsEffect() && effect.Mechanic)
- mask |= 1 << effect.Mechanic;
+ mask |= UI64LIT(1) << effect.Mechanic;
return mask;
}
-uint32 SpellInfo::GetEffectMechanicMask(SpellEffIndex effIndex) const
+uint64 SpellInfo::GetEffectMechanicMask(SpellEffIndex effIndex) const
{
- uint32 mask = 0;
+ uint64 mask = 0;
if (Mechanic)
- mask |= 1 << Mechanic;
+ mask |= UI64LIT(1) << Mechanic;
if (GetEffect(effIndex).IsEffect() && GetEffect(effIndex).Mechanic)
- mask |= 1 << GetEffect(effIndex).Mechanic;
+ mask |= UI64LIT(1) << GetEffect(effIndex).Mechanic;
return mask;
}
-uint32 SpellInfo::GetSpellMechanicMaskByEffectMask(uint32 effectMask) const
+uint64 SpellInfo::GetSpellMechanicMaskByEffectMask(uint32 effectMask) const
{
- uint32 mask = 0;
+ uint64 mask = 0;
if (Mechanic)
- mask |= 1 << Mechanic;
+ mask |= UI64LIT(1) << Mechanic;
for (SpellEffectInfo const& effect : GetEffects())
if ((effectMask & (1 << effect.EffectIndex)) && effect.Mechanic)
- mask |= 1 << effect.Mechanic;
+ mask |= UI64LIT(1) << effect.Mechanic;
return mask;
}
@@ -2461,7 +2461,7 @@ void SpellInfo::_LoadAuraState()
return AURA_STATE_ENRAGED;
// Bleeding aura state
- if (GetAllEffectsMechanicMask() & 1<<MECHANIC_BLEED)
+ if (GetAllEffectsMechanicMask() & (1 << MECHANIC_BLEED))
return AURA_STATE_BLEED;
if (GetSchoolMask() & SPELL_SCHOOL_MASK_FROST)
@@ -3210,7 +3210,7 @@ void SpellInfo::_LoadImmunityInfo()
{
uint32 schoolImmunityMask = 0;
uint32 applyHarmfulAuraImmunityMask = 0;
- uint32 mechanicImmunityMask = 0;
+ uint64 mechanicImmunityMask = 0;
uint32 dispelImmunity = 0;
uint32 damageImmunityMask = 0;
@@ -3414,7 +3414,7 @@ void SpellInfo::_LoadImmunityInfo()
if (miscVal < 1)
return;
- mechanicImmunityMask |= 1 << miscVal;
+ mechanicImmunityMask |= UI64LIT(1) << miscVal;
break;
}
break;
@@ -3528,10 +3528,10 @@ void SpellInfo::ApplyAllSpellImmunitiesTo(Unit* target, SpellEffectInfo const& s
target->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::InvulnerabilityBuff);
}
- if (uint32 mechanicImmunity = immuneInfo.MechanicImmuneMask)
+ if (uint64 mechanicImmunity = immuneInfo.MechanicImmuneMask)
{
for (uint32 i = 0; i < MAX_MECHANIC; ++i)
- if (mechanicImmunity & (1 << i))
+ if (mechanicImmunity & (UI64LIT(1) << i))
target->ApplySpellImmune(Id, IMMUNITY_MECHANIC, i, apply);
if (HasAttribute(SPELL_ATTR1_IMMUNITY_PURGES_EFFECT))
@@ -3612,8 +3612,8 @@ bool SpellInfo::CanSpellProvideImmunityAgainstAura(SpellInfo const* auraSpellInf
return true;
}
- if (uint32 mechanicImmunity = immuneInfo.MechanicImmuneMask)
- if ((mechanicImmunity & (1 << auraSpellInfo->Mechanic)) != 0)
+ if (uint64 mechanicImmunity = immuneInfo.MechanicImmuneMask)
+ if ((mechanicImmunity & (UI64LIT(1) << auraSpellInfo->Mechanic)) != 0)
return true;
if (uint32 dispelImmunity = immuneInfo.DispelImmune)
@@ -3635,7 +3635,7 @@ bool SpellInfo::CanSpellProvideImmunityAgainstAura(SpellInfo const* auraSpellInf
if (uint32 mechanic = auraSpellEffectInfo.Mechanic)
{
- if (!(immuneInfo.MechanicImmuneMask & (1 << mechanic)))
+ if (!(immuneInfo.MechanicImmuneMask & (UI64LIT(1) << mechanic)))
{
immuneToAllEffects = false;
break;
@@ -3721,15 +3721,15 @@ bool SpellInfo::SpellCancelsAuraEffect(AuraEffect const* aurEff) const
return false;
}
-uint32 SpellInfo::GetAllowedMechanicMask() const
+uint64 SpellInfo::GetAllowedMechanicMask() const
{
return _allowedMechanicMask;
}
-uint32 SpellInfo::GetMechanicImmunityMask(Unit const* caster) const
+uint64 SpellInfo::GetMechanicImmunityMask(Unit const* caster) const
{
- uint32 casterMechanicImmunityMask = caster->GetMechanicImmunityMask();
- uint32 mechanicImmunityMask = 0;
+ uint64 casterMechanicImmunityMask = caster->GetMechanicImmunityMask();
+ uint64 mechanicImmunityMask = 0;
if (CanBeInterrupted(nullptr, caster, true))
{
diff --git a/src/server/game/Spells/SpellInfo.h b/src/server/game/Spells/SpellInfo.h
index 1b6083f5277..100c1166ee4 100644
--- a/src/server/game/Spells/SpellInfo.h
+++ b/src/server/game/Spells/SpellInfo.h
@@ -222,7 +222,7 @@ struct TC_GAME_API ImmunityInfo
uint32 SchoolImmuneMask = 0;
uint32 ApplyHarmfulAuraImmuneMask = 0;
- uint32 MechanicImmuneMask = 0;
+ uint64 MechanicImmuneMask = 0;
uint32 DispelImmune = 0;
uint32 DamageSchoolMask = 0;
@@ -543,9 +543,9 @@ class TC_GAME_API SpellInfo
bool CheckTargetCreatureType(Unit const* target) const;
SpellSchoolMask GetSchoolMask() const;
- uint32 GetAllEffectsMechanicMask() const;
- uint32 GetEffectMechanicMask(SpellEffIndex effIndex) const;
- uint32 GetSpellMechanicMaskByEffectMask(uint32 effectMask) const;
+ uint64 GetAllEffectsMechanicMask() const;
+ uint64 GetEffectMechanicMask(SpellEffIndex effIndex) const;
+ uint64 GetSpellMechanicMaskByEffectMask(uint32 effectMask) const;
Mechanics GetEffectMechanic(SpellEffIndex effIndex) const;
uint32 GetDispelMask() const;
static uint32 GetDispelMask(DispelType type);
@@ -600,9 +600,9 @@ class TC_GAME_API SpellInfo
bool CanSpellProvideImmunityAgainstAura(SpellInfo const* auraSpellInfo) const;
bool SpellCancelsAuraEffect(AuraEffect const* aurEff) const;
- uint32 GetAllowedMechanicMask() const;
+ uint64 GetAllowedMechanicMask() const;
- uint32 GetMechanicImmunityMask(Unit const* caster) const;
+ uint64 GetMechanicImmunityMask(Unit const* caster) const;
// Player Condition
bool MeetsFutureSpellPlayerCondition(Player const* player) const;
@@ -628,7 +628,7 @@ class TC_GAME_API SpellInfo
AuraStateType _auraState = AURA_STATE_NONE;
SpellDiminishInfo _diminishInfo;
- uint32 _allowedMechanicMask = 0;
+ uint64 _allowedMechanicMask = 0;
};
#endif // _SPELLINFO_H
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 5d843696649..9d90a5560bb 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -2932,7 +2932,7 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
for (SpellEffectInfo const& spellEffectInfo : spellInfoMutable->GetEffects())
{
// all bleed effects and spells ignore armor
- if (spellInfo.GetEffectMechanicMask(spellEffectInfo.EffectIndex) & (1 << MECHANIC_BLEED))
+ if (spellInfo.GetEffectMechanicMask(spellEffectInfo.EffectIndex) & (UI64LIT(1) << MECHANIC_BLEED))
spellInfoMutable->AttributesCu |= SPELL_ATTR0_CU_IGNORE_ARMOR;
switch (spellEffectInfo.ApplyAuraName)