diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/Creature.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Entities/Creature/CreatureData.h | 2 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 30 | ||||
-rw-r--r-- | src/server/game/Entities/Unit/Unit.h | 6 | ||||
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 6 | ||||
-rw-r--r-- | src/server/game/Miscellaneous/enuminfo_SharedDefines.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.cpp | 48 | ||||
-rw-r--r-- | src/server/game/Spells/SpellInfo.h | 14 | ||||
-rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 2 |
13 files changed, 77 insertions, 61 deletions
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) |