aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Creature/Creature.cpp31
-rw-r--r--src/server/game/Entities/Creature/Creature.h3
-rw-r--r--src/server/game/Entities/Creature/CreatureData.h2
-rw-r--r--src/server/game/Entities/Pet/Pet.cpp2
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp2
-rw-r--r--src/server/game/Miscellaneous/SharedDefines.h7
6 files changed, 18 insertions, 29 deletions
diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp
index bc19dab4571..3763b166890 100644
--- a/src/server/game/Entities/Creature/Creature.cpp
+++ b/src/server/game/Entities/Creature/Creature.cpp
@@ -667,8 +667,7 @@ bool Creature::UpdateEntry(uint32 entry, CreatureData const* data /*= nullptr*/,
UpdateMovementFlags();
LoadCreaturesAddon();
- LoadMechanicTemplateImmunity();
- LoadSpellTemplateImmunity();
+ LoadTemplateImmunities();
return true;
}
@@ -2201,7 +2200,7 @@ void Creature::DespawnOrUnsummon(uint32 msTimeToDespawn /*= 0*/, Seconds const&
ForcedDespawn(msTimeToDespawn, forceRespawnTimer);
}
-void Creature::LoadMechanicTemplateImmunity()
+void Creature::LoadTemplateImmunities()
{
// uint32 max used for "spell id", the immunity system will not perform SpellInfo checks against invalid spells
// used so we know which immunities were loaded from template
@@ -2211,6 +2210,9 @@ void Creature::LoadMechanicTemplateImmunity()
for (uint32 i = MECHANIC_NONE + 1; i < MAX_MECHANIC; ++i)
ApplySpellImmune(placeholderSpellId, IMMUNITY_MECHANIC, i, false);
+ for (uint32 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
+ ApplySpellImmune(placeholderSpellId, IMMUNITY_SCHOOL, 1 << i, false);
+
// don't inherit immunities for hunter pets
if (GetOwnerGUID().IsPlayer() && IsHunterPet())
return;
@@ -2223,26 +2225,15 @@ void Creature::LoadMechanicTemplateImmunity()
ApplySpellImmune(placeholderSpellId, IMMUNITY_MECHANIC, i, true);
}
}
-}
-
-void Creature::LoadSpellTemplateImmunity()
-{
- // uint32 max used for "spell id", the immunity system will not perform SpellInfo checks against invalid spells
- // used so we know which immunities were loaded from template
- static uint32 const placeholderSpellId = std::numeric_limits<uint32>::max();
-
- // unapply template immunities (in case we're updating entry)
- for (uint8 i = SPELL_SCHOOL_NORMAL; i <= SPELL_SCHOOL_ARCANE; ++i)
- ApplySpellImmune(placeholderSpellId, IMMUNITY_SCHOOL, i, false);
- // don't inherit immunities for hunter pets
- if (GetOwnerGUID().IsPlayer() && IsHunterPet())
- return;
-
- if (uint8 mask = GetCreatureTemplate()->SpellSchoolImmuneMask)
- for (uint8 i = SPELL_SCHOOL_NORMAL; i <= SPELL_SCHOOL_ARCANE; ++i)
+ if (uint32 mask = GetCreatureTemplate()->SpellSchoolImmuneMask)
+ {
+ for (uint8 i = SPELL_SCHOOL_NORMAL; i < MAX_SPELL_SCHOOL; ++i)
+ {
if (mask & (1 << i))
ApplySpellImmune(placeholderSpellId, IMMUNITY_SCHOOL, 1 << i, true);
+ }
+ }
}
bool Creature::IsImmunedToSpell(SpellInfo const* spellInfo, Unit* caster) const
diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h
index a77b07ba6a6..618175be89c 100644
--- a/src/server/game/Entities/Creature/Creature.h
+++ b/src/server/game/Entities/Creature/Creature.h
@@ -111,8 +111,7 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
bool isCanInteractWithBattleMaster(Player* player, bool msg) const;
bool CanResetTalents(Player* player) const;
bool CanCreatureAttack(Unit const* victim, bool force = true) const;
- void LoadMechanicTemplateImmunity();
- void LoadSpellTemplateImmunity();
+ void LoadTemplateImmunities();
bool IsImmunedToSpell(SpellInfo const* spellInfo, Unit* caster) const override;
bool IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index, Unit* caster) const override;
bool isElite() const;
diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h
index 2f74b757999..7a311bcbb31 100644
--- a/src/server/game/Entities/Creature/CreatureData.h
+++ b/src/server/game/Entities/Creature/CreatureData.h
@@ -399,7 +399,7 @@ struct TC_GAME_API CreatureTemplate
int32 WidgetSetUnitConditionID;
bool RegenHealth;
uint32 MechanicImmuneMask;
- uint8 SpellSchoolImmuneMask;
+ uint32 SpellSchoolImmuneMask;
uint32 flags_extra;
uint32 ScriptID;
WorldPacket QueryData[TOTAL_LOCALES];
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp
index 7b60c7209eb..d7aef0df8c4 100644
--- a/src/server/game/Entities/Pet/Pet.cpp
+++ b/src/server/game/Entities/Pet/Pet.cpp
@@ -376,7 +376,7 @@ bool Pet::LoadPetFromDB(Player* owner, uint32 petEntry, uint32 petnumber, bool c
owner->ToPlayer()->SetLastPetNumber(petId);
// must be after SetMinion (owner guid check)
- LoadMechanicTemplateImmunity();
+ LoadTemplateImmunities();
m_loading = false;
return true;
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp
index a8a42d6a107..ee587490ab7 100644
--- a/src/server/game/Globals/ObjectMgr.cpp
+++ b/src/server/game/Globals/ObjectMgr.cpp
@@ -540,7 +540,7 @@ void ObjectMgr::LoadCreatureTemplate(Field* fields)
creatureTemplate.WidgetSetUnitConditionID = fields[72].GetInt32();
creatureTemplate.RegenHealth = fields[73].GetBool();
creatureTemplate.MechanicImmuneMask = fields[74].GetUInt32();
- creatureTemplate.SpellSchoolImmuneMask = fields[75].GetUInt8();
+ creatureTemplate.SpellSchoolImmuneMask = fields[75].GetUInt32();
creatureTemplate.flags_extra = fields[76].GetUInt32();
creatureTemplate.ScriptID = GetScriptId(fields[77].GetString());
}
diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h
index 9d826f04f86..ace37edc11f 100644
--- a/src/server/game/Miscellaneous/SharedDefines.h
+++ b/src/server/game/Miscellaneous/SharedDefines.h
@@ -294,11 +294,10 @@ enum SpellSchools : uint16
SPELL_SCHOOL_NATURE = 3,
SPELL_SCHOOL_FROST = 4,
SPELL_SCHOOL_SHADOW = 5,
- SPELL_SCHOOL_ARCANE = 6
+ SPELL_SCHOOL_ARCANE = 6,
+ MAX_SPELL_SCHOOL = 7
};
-#define MAX_SPELL_SCHOOL 7
-
enum SpellSchoolMask
{
SPELL_SCHOOL_MASK_NONE = 0x00, // not exist
@@ -2363,7 +2362,7 @@ enum Mechanics
MECHANIC_SAPPED = 30,
MECHANIC_ENRAGED = 31,
MECHANIC_WOUNDED = 32,
- MAX_MECHANIC = 33
+ MAX_MECHANIC = 33
};
// Used for spell 42292 Immune Movement Impairment and Loss of Control (0x49967ca6)