Core/Spells: Rename SpellAttr0 to use official attribute names

This commit is contained in:
Shauren authored and Ovahlord committed 2022-09-12 09:15:04 +02:00
1 parent 24b84ba980
commit d448ea4370
15 files changed
+104 -104

No files matched your search

+1 -1
View File
@@ -192,7 +192,7 @@ void UnitAI::FillAISpellInfo()
if (!spellInfo)
continue;
if (spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
if (spellInfo->HasAttribute(SPELL_ATTR0_ALLOW_CAST_WHILE_DEAD))
AIInfo->condition = AICOND_DIE;
else if (spellInfo->IsPassive() || spellInfo->GetDuration() == -1)
AIInfo->condition = AICOND_AGGRO;
+1 -1
View File
@@ -683,7 +683,7 @@ void PlayerAI::CancelAllShapeshifts()
SpellInfo const* auraInfo = aura->GetSpellInfo();
if (!auraInfo)
continue;
if (auraInfo->HasAttribute(SPELL_ATTR0_CANT_CANCEL))
if (auraInfo->HasAttribute(SPELL_ATTR0_NO_AURA_CANCEL))
continue;
if (!auraInfo->IsPositive() || auraInfo->IsPassive())
continue;
@@ -560,7 +560,7 @@ inline void Battleground::_ProcessJoin(uint32 diff)
return !aura->IsPermanent()
&& aura->GetDuration() <= 30 * IN_MILLISECONDS
&& aurApp->IsPositive()
&& !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
&& !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES)
&& !aura->HasEffectType(SPELL_AURA_MOD_INVISIBILITY);
});
}
+1 -1
View File
@@ -282,7 +282,7 @@ bool SpellChatLink::ValidateName(char* buffer, char const* context)
ChatLink::ValidateName(buffer, context);
// spells with that flag have a prefix of "$PROFESSION: "
if (_spell->HasAttribute(SPELL_ATTR0_TRADESPELL))
if (_spell->HasAttribute(SPELL_ATTR0_IS_TRADESKILL))
{
SkillLineAbilityMapBounds bounds = sSpellMgr->GetSkillLineAbilityMapBounds(_spell->Id);
if (bounds.first == bounds.second)
+1 -1
View File
@@ -6013,7 +6013,7 @@ void Player::CheckAreaExploreAndOutdoor()
return;
if (sWorld->getBoolConfig(CONFIG_VMAP_INDOOR_CHECK) && !IsOutdoors())
RemoveAurasWithAttribute(SPELL_ATTR0_OUTDOORS_ONLY);
RemoveAurasWithAttribute(SPELL_ATTR0_ONLY_OUTDOORS);
uint32 const areaId = GetAreaId();
AreaTableEntry const* areaEntry = sAreaTableStore.LookupEntry(areaId);
+11 -11
View File
@@ -2287,7 +2287,7 @@ bool Unit::isSpellBlocked(Unit* victim, SpellInfo const* spellProto)
{
// These spells can't be blocked
if (spellProto
&& (spellProto->HasAttribute(SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK)
&& (spellProto->HasAttribute(SPELL_ATTR0_NO_ACTIVE_DEFENSE)
|| spellProto->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT)
|| spellProto->HasAttribute(SPELL_ATTR8_CANT_BLOCK)))
return false;
@@ -2375,7 +2375,7 @@ SpellMissInfo Unit::MeleeSpellHitResult(Unit* victim, SpellInfo const* spellInfo
return SPELL_MISS_RESIST;
// Same spells cannot be parried/dodged
if (spellInfo->HasAttribute(SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK))
if (spellInfo->HasAttribute(SPELL_ATTR0_NO_ACTIVE_DEFENSE))
return SPELL_MISS_NONE;
bool canDodge = !spellInfo->HasAttribute(SPELL_ATTR7_CANT_DODGE);
@@ -6354,7 +6354,7 @@ bool Unit::IsMagnet() const
Unit* Unit::GetMagicHitRedirectTarget(Unit* victim, SpellInfo const* spellInfo)
{
// Patch 1.2 notes: Spell Reflection no longer reflects abilities
if (spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR1_CANT_BE_REDIRECTED) || spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
if (spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR1_CANT_BE_REDIRECTED) || spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
return victim;
Unit::AuraEffectList const& magnetAuras = victim->GetAuraEffectsByType(SPELL_AURA_SPELL_MAGNET);
@@ -7749,7 +7749,7 @@ bool Unit::IsImmunedToDamage(SpellInfo const* spellInfo) const
return false;
// for example 40175
if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY) && spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT))
if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES) && spellInfo->HasAttribute(SPELL_ATTR3_IGNORE_HIT_RESULT))
return false;
if (spellInfo->HasAttribute(SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE) || spellInfo->HasAttribute(SPELL_ATTR2_UNAFFECTED_BY_AURA_SCHOOL_IMMUNE))
@@ -7787,7 +7787,7 @@ bool Unit::IsImmunedToSpell(SpellInfo const* spellInfo, Unit* caster, Optional<u
if (idList.count(spellInfo->Id) > 0)
return true;
if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
return false;
if (uint32 dispel = spellInfo->Dispel)
@@ -7883,7 +7883,7 @@ bool Unit::IsImmunedToSpellEffect(SpellInfo const* spellInfo, uint32 index, Unit
if (!spellInfo || !spellInfo->Effects[index].IsEffect())
return false;
if (spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
if (spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
return false;
// If m_immuneToEffect type contain this effect type, IMMUNE effect.
@@ -9257,7 +9257,7 @@ void Unit::AtEnterCombat()
{
if (Spell* spell = m_currentSpells[CURRENT_GENERIC_SPELL])
if (spell->getState() == SPELL_STATE_PREPARING
&& spell->m_spellInfo->HasAttribute(SPELL_ATTR0_CANT_USED_IN_COMBAT)
&& spell->m_spellInfo->HasAttribute(SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL)
&& spell->m_spellInfo->InterruptFlags.HasFlag(SpellInterruptFlags::Combat))
InterruptNonMeleeSpells(false);
@@ -9444,10 +9444,10 @@ void Unit::ModSpellCastTime(SpellInfo const* spellInfo, int32 & castTime, Spell*
float castSpeedMod = 1;
castSpeedMod = castSpeedMod - GetTotalAuraMultiplier(SPELL_AURA_HASTE_SPELLS) + 1.0f;
if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) &&
if (!(spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_IS_TRADESKILL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) &&
((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT))
castTime = int32(float(castTime) * GetFloatValue(UNIT_MOD_CAST_SPEED));
else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
else if (spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
castTime = int32(float(castTime) * m_modAttackSpeedPct[RANGED_ATTACK] * castSpeedMod);
else if (spellInfo->SpellVisual[0] == 3881 && HasAura(67556)) // cooking with Chef Hat.
castTime = 500;
@@ -9465,10 +9465,10 @@ void Unit::ModSpellDurationTime(SpellInfo const* spellInfo, int32 & duration, Sp
if (Player* modOwner = GetSpellModOwner())
modOwner->ApplySpellMod(spellInfo->Id, SPELLMOD_CASTING_TIME, duration, spell);
if (!(spellInfo->HasAttribute(SPELL_ATTR0_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) &&
if (!(spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY) || spellInfo->HasAttribute(SPELL_ATTR0_IS_TRADESKILL) || spellInfo->HasAttribute(SPELL_ATTR3_NO_DONE_BONUS)) &&
((GetTypeId() == TYPEID_PLAYER && spellInfo->SpellFamilyName) || GetTypeId() == TYPEID_UNIT))
duration = int32(float(duration) * GetFloatValue(UNIT_MOD_CAST_SPEED));
else if (spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
else if (spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT) && !spellInfo->HasAttribute(SPELL_ATTR2_AUTOREPEAT_FLAG))
duration = int32(float(duration) * m_modAttackSpeedPct[RANGED_ATTACK]);
}
+1 -1
View File
@@ -96,7 +96,7 @@ void WorldSession::HandlePetAction(WorldPacket& recvData)
SpellInfo const* spell = (flag == ACT_ENABLED || flag == ACT_PASSIVE) ? sSpellMgr->GetSpellInfo(spellid) : nullptr;
if (!spell)
return;
if (!spell->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD))
if (!spell->HasAttribute(SPELL_ATTR0_ALLOW_CAST_WHILE_DEAD))
return;
}
+4 -4
View File
@@ -301,8 +301,8 @@ void WorldSession::HandleCancelAuraOpcode(WorldPacket& recvPacket)
if (!spellInfo)
return;
// not allow remove spells with attr SPELL_ATTR0_CANT_CANCEL
if (spellInfo->HasAttribute(SPELL_ATTR0_CANT_CANCEL))
// not allow remove spells with attr SPELL_ATTR0_NO_AURA_CANCEL
if (spellInfo->HasAttribute(SPELL_ATTR0_NO_AURA_CANCEL))
return;
// channeled spell case (it currently cast then)
@@ -398,8 +398,8 @@ void WorldSession::HandleCancelChanneling(WorldPacket& recvData)
if (!spellInfo)
return;
// not allow cancel channeling with attr SPELL_ATTR0_CANT_CANCEL
if (spellInfo->HasAttribute(SPELL_ATTR0_CANT_CANCEL))
// not allow cancel channeling with attr SPELL_ATTR0_NO_AURA_CANCEL
if (spellInfo->HasAttribute(SPELL_ATTR0_NO_AURA_CANCEL))
return;
Unit* mover = GetGameClient()->GetActivelyMovedUnit();
+1 -1
View File
@@ -1124,7 +1124,7 @@ void LoadLootTemplates_Spell()
{
// not report about not trainable spells (optionally supported by DB)
// ignore 61756 (Northrend Inscription Research (FAST QA VERSION) for example
if (!spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT) || spellInfo->HasAttribute(SPELL_ATTR0_TRADESPELL))
if (!spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFTED) || spellInfo->HasAttribute(SPELL_ATTR0_IS_TRADESKILL))
{
LootTemplates_Spell.ReportNonExistingId(spell_id, "Spell", spellInfo->Id);
}
+34 -34
View File
@@ -351,40 +351,40 @@ const uint32 ItemQualityColors[MAX_ITEM_QUALITY] =
// Spell Attributes definitions
// ***********************************
enum SpellAttr0
enum SpellAttr0 : uint32
{
SPELL_ATTR0_UNK0 = 0x00000001, // 0
SPELL_ATTR0_REQ_AMMO = 0x00000002, // 1 on next ranged
SPELL_ATTR0_ON_NEXT_SWING = 0x00000004, // 2
SPELL_ATTR0_IS_REPLENISHMENT = 0x00000008, // 3 not set in 3.0.3
SPELL_ATTR0_ABILITY = 0x00000010, // 4 client puts 'ability' instead of 'spell' in game strings for these spells
SPELL_ATTR0_TRADESPELL = 0x00000020, // 5 trade spells (recipes), will be added by client to a sublist of profession spell
SPELL_ATTR0_PASSIVE = 0x00000040, // 6 Passive spell
SPELL_ATTR0_HIDDEN_CLIENTSIDE = 0x00000080, // 7 Spells with this attribute are not visible in spellbook or aura bar
SPELL_ATTR0_HIDE_IN_COMBAT_LOG = 0x00000100, // 8 This attribite controls whether spell appears in combat logs
SPELL_ATTR0_TARGET_MAINHAND_ITEM = 0x00000200, // 9 Client automatically selects item from mainhand slot as a cast target
SPELL_ATTR0_ON_NEXT_SWING_2 = 0x00000400, // 10
SPELL_ATTR0_UNK11 = 0x00000800, // 11
SPELL_ATTR0_DAYTIME_ONLY = 0x00001000, // 12 only useable at daytime, not set in 2.4.2
SPELL_ATTR0_NIGHT_ONLY = 0x00002000, // 13 only useable at night, not set in 2.4.2
SPELL_ATTR0_INDOORS_ONLY = 0x00004000, // 14 only useable indoors, not set in 2.4.2
SPELL_ATTR0_OUTDOORS_ONLY = 0x00008000, // 15 Only useable outdoors.
SPELL_ATTR0_NOT_SHAPESHIFT = 0x00010000, // 16 Not while shapeshifted
SPELL_ATTR0_ONLY_STEALTHED = 0x00020000, // 17 Must be in stealth
SPELL_ATTR0_DONT_AFFECT_SHEATH_STATE = 0x00040000, // 18 client won't hide unit weapons in sheath on cast/channel
SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION = 0x00080000, // 19 spelldamage depends on caster level
SPELL_ATTR0_STOP_ATTACK_TARGET = 0x00100000, // 20 Stop attack after use this spell (and not begin attack if use)
SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK = 0x00200000, // 21 Cannot be dodged/parried/blocked
SPELL_ATTR0_CAST_TRACK_TARGET = 0x00400000, // 22 Client automatically forces player to face target when casting
SPELL_ATTR0_CASTABLE_WHILE_DEAD = 0x00800000, // 23 castable while dead?
SPELL_ATTR0_CASTABLE_WHILE_MOUNTED = 0x01000000, // 24 castable while mounted
SPELL_ATTR0_DISABLED_WHILE_ACTIVE = 0x02000000, // 25 Activate and start cooldown after aura fade or remove summoned creature or go
SPELL_ATTR0_NEGATIVE_1 = 0x04000000, // 26 Many negative spells have this attr
SPELL_ATTR0_CASTABLE_WHILE_SITTING = 0x08000000, // 27 castable while sitting
SPELL_ATTR0_CANT_USED_IN_COMBAT = 0x10000000, // 28 Cannot be used in combat
SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY = 0x20000000, // 29 unaffected by invulnerability (hmm possible not...)
SPELL_ATTR0_HEARTBEAT_RESIST_CHECK = 0x40000000, // 30 random chance the effect will end TODO: implement core support
SPELL_ATTR0_CANT_CANCEL = 0x80000000 // 31 positive aura can't be canceled
SPELL_ATTR0_PROC_FAILURE_BURNS_CHARGE = 0x00000001, /*NYI*/ // Proc Failure Burns Charge
SPELL_ATTR0_USES_RANGED_SLOT = 0x00000002, // Uses Ranged Slot DESCRIPTION Use ammo, ranged attack range modifiers, ranged haste, etc.
SPELL_ATTR0_ON_NEXT_SWING_NO_DAMAGE = 0x00000004, // On Next Swing (No Damage) DESCRIPTION Both "on next swing" attributes have identical handling in server & client
SPELL_ATTR0_DO_NOT_LOG_IMMUNE_MISSES = 0x00000008, // Do Not Log Immune Misses (client only)
SPELL_ATTR0_IS_ABILITY = 0x00000010, // Is Ability DESCRIPTION Cannot be reflected, not affected by cast speed modifiers, etc.
SPELL_ATTR0_IS_TRADESKILL = 0x00000020, // Is Tradeskill DESCRIPTION Displayed in recipe list, not affected by cast speed modifiers
SPELL_ATTR0_PASSIVE = 0x00000040, // Passive DESCRIPTION Spell is automatically cast on self by core
SPELL_ATTR0_DO_NOT_DISPLAY_SPELLBOOK_AURA_ICON_COMBAT_LOG = 0x00000080, // Do Not Display (Spellbook, Aura Icon, Combat Log) (client only) DESCRIPTION Not visible in spellbook or aura bar
SPELL_ATTR0_DO_NOT_LOG = 0x00000100, // Do Not Log (client only) DESCRIPTION Spell will not appear in combat logs
SPELL_ATTR0_HELD_ITEM_ONLY = 0x00000200, // Held Item Only (client only) DESCRIPTION Client will automatically select main-hand item as cast target
SPELL_ATTR0_ON_NEXT_SWING = 0x00000400, // On Next Swing DESCRIPTION Both "on next swing" attributes have identical handling in server & client
SPELL_ATTR0_WEARER_CASTS_PROC_TRIGGER = 0x00000800, /*NYI*/ // Wearer Casts Proc Trigger
SPELL_ATTR0_SERVER_ONLY = 0x00001000, // Server Only
SPELL_ATTR0_ALLOW_ITEM_SPELL_IN_PVP = 0x00002000, // Allow Item Spell In PvP
SPELL_ATTR0_ONLY_INDOORS = 0x00004000, // Only Indoors
SPELL_ATTR0_ONLY_OUTDOORS = 0x00008000, // Only Outdoors
SPELL_ATTR0_NOT_SHAPESHIFTED = 0x00010000, // Not Shapeshifted
SPELL_ATTR0_ONLY_STEALTHED = 0x00020000, // Only Stealthed
SPELL_ATTR0_DO_NOT_SHEATH = 0x00040000, // Do Not Sheath (client only)
SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL = 0x00080000, // Scales w/ Creature Level DESCRIPTION For non-player casts, scale impact and power cost with caster's level
SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT = 0x00100000, // Cancels Auto Attack Combat DESCRIPTION After casting this, the current auto-attack will be interrupted
SPELL_ATTR0_NO_ACTIVE_DEFENSE = 0x00200000, // No Active Defense DESCRIPTION Spell cannot be dodged, parried or blocked
SPELL_ATTR0_TRACK_TARGET_IN_CAST_PLAYER_ONLY = 0x00400000, // Track Target in Cast (Player Only) (client only)
SPELL_ATTR0_ALLOW_CAST_WHILE_DEAD = 0x00800000, // Allow Cast While Dead DESCRIPTION Spells without this flag cannot be cast by dead units in non-triggered contexts
SPELL_ATTR0_ALLOW_WHILE_MOUNTED = 0x01000000, // Allow While Mounted
SPELL_ATTR0_COOLDOWN_ON_EVENT = 0x02000000, // Cooldown On Event DESCRIPTION Spell is unusable while already active, and cooldown does not begin until the effects have worn off
SPELL_ATTR0_AURA_IS_DEBUFF = 0x04000000, // Aura Is Debuff DESCRIPTION Forces the spell to be treated as a negative spell
SPELL_ATTR0_ALLOW_WHILE_SITTING = 0x08000000, // Allow While Sitting
SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL = 0x10000000, // Not In Combat (Only Peaceful)
SPELL_ATTR0_NO_IMMUNITIES = 0x20000000, // No Immunities DESCRIPTION Allows spell to pierce invulnerability, unless the invulnerability spell also has this attribute
SPELL_ATTR0_HEARTBEAT_RESIST = 0x40000000, // Heartbeat Resist DESCRIPTION Periodically re-rolls against resistance to potentially expire aura early
SPELL_ATTR0_NO_AURA_CANCEL = 0x80000000 // No Aura Cancel DESCRIPTION Prevents the player from voluntarily canceling a positive aura
};
enum SpellAttr1
@@ -520,7 +520,7 @@ enum SpellAttr4
SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER = 0x00100000, // 20 supersedes message "More powerful spell applied" for self casts.
SPELL_ATTR4_DONT_REMOVE_IN_ARENA = 0x00200000, // 21 Pally aura, dk presence, dudu form, warrior stance, shadowform, hunter track
SPELL_ATTR4_UNK22 = 0x00400000, // 22 Seal of Command (42058, 57770) and Gymer's Smash 55426
SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS = 0x00800000, // 23 spells with this flag should not trigger item spells / enchants (mostly in conjunction with SPELL_ATTR0_STOP_ATTACK_TARGET)
SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS = 0x00800000, // 23 spells with this flag should not trigger item spells / enchants (mostly in conjunction with SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT)
SPELL_ATTR4_UNK24 = 0x01000000, // 24 some shoot spell
SPELL_ATTR4_IS_PET_SCALING = 0x02000000, // 25 pet scaling auras
SPELL_ATTR4_CAST_ONLY_IN_OUTLAND = 0x04000000, // 26 Can only be used in Outland.
@@ -1286,7 +1286,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
continue;
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(itr->first);
if (!spellInfo || !(spellInfo->IsPassive() || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE)))
if (!spellInfo || !(spellInfo->IsPassive() || spellInfo->HasAttribute(SPELL_ATTR0_DO_NOT_DISPLAY_SPELLBOOK_AURA_ICON_COMBAT_LOG)))
continue;
if (spellInfo->HasAttribute(SPELL_ATTR8_MASTERY_SPECIALIZATION) && !plrTarget->IsCurrentSpecMasterySpell(spellInfo))
@@ -1304,7 +1304,7 @@ void AuraEffect::HandleShapeshiftBoosts(Unit* target, bool apply) const
if (GlyphPropertiesEntry const* glyph = sGlyphPropertiesStore.LookupEntry(glyphId))
{
SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(glyph->SpellID);
if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_HIDDEN_CLIENTSIDE)))
if (!spellInfo || !(spellInfo->HasAttribute(SPELL_ATTR0_PASSIVE) || spellInfo->HasAttribute(SPELL_ATTR0_DO_NOT_DISPLAY_SPELLBOOK_AURA_ICON_COMBAT_LOG)))
continue;
if (spellInfo->Stances & (UI64LIT(1) << (GetMiscValue() - 1)))
@@ -3680,9 +3680,9 @@ void AuraEffect::HandleModTotalPercentStat(AuraApplication const* aurApp, uint8
}
}
// recalculate current HP/MP after applying aura modifications (only for spells with SPELL_ATTR0_ABILITY 0x00000010 flag)
// recalculate current HP/MP after applying aura modifications (only for spells with SPELL_ATTR0_IS_ABILITY 0x00000010 flag)
// this check is total bullshit i think
if (((GetMiscValueB() & 1 << STAT_STAMINA) || GetMiscValueB() == - 1) && m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
if (((GetMiscValueB() & 1 << STAT_STAMINA) || GetMiscValueB() == - 1) && m_spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY))
target->SetHealth(std::max<uint32>(CalculatePct(target->GetMaxHealth(), healthPct), (zeroHealth ? 0 : 1)));
}
+1 -1
View File
@@ -169,7 +169,7 @@ class TC_GAME_API Aura
return GetCasterGUID() == target->GetGUID()
&& m_spellInfo->Stances
&& !m_spellInfo->HasAttribute(SPELL_ATTR2_NOT_NEED_SHAPESHIFT)
&& !m_spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT);
&& !m_spellInfo->HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFTED);
}
bool CanBeSaved() const;
+21 -21
View File
@@ -684,8 +684,8 @@ m_caster((info->HasAttribute(SPELL_ATTR6_CAST_BY_CHARMER) && caster->GetCharmerO
// Determine if spell can be reflected back to the caster
// Patch 1.2 notes: Spell Reflection no longer reflects abilities
m_canReflect = m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && !m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY)
&& !m_spellInfo->HasAttribute(SPELL_ATTR1_CANT_BE_REFLECTED) && !m_spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)
m_canReflect = m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MAGIC && !m_spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY)
&& !m_spellInfo->HasAttribute(SPELL_ATTR1_CANT_BE_REFLECTED) && !m_spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES)
&& !m_spellInfo->IsPassive();
CleanupTargetList();
@@ -2587,7 +2587,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
case SPELL_DAMAGE_CLASS_MAGIC:
if (m_spellInfo->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC))
procAttacker |= PROC_FLAG_DEAL_PERIODIC;
else if (m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
else if (m_spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY))
{
if (positive)
procAttacker |= PROC_FLAG_DEAL_HELPFUL_ABILITY;
@@ -2613,7 +2613,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
case SPELL_DAMAGE_CLASS_MAGIC:
if (m_spellInfo->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC))
procVictim |= PROC_FLAG_TAKE_PERIODIC;
else if (m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
else if (m_spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY))
{
if (positive)
procVictim |= PROC_FLAG_TAKE_HELPFUL_ABILITY;
@@ -2706,7 +2706,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
if (Unit* summoner = caster->ToTempSummon()->GetSummoner())
summoner->ProcSkillsAndAuras(unitTarget, procAttacker, procVictim, PROC_SPELL_TYPE_DAMAGE, PROC_SPELL_PHASE_HIT, hitMask, this, &spellDamageInfo, nullptr);
if (caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET) && !m_spellInfo->HasAttribute(SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS) &&
if (caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT) && !m_spellInfo->HasAttribute(SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS) &&
(m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED))
caster->ToPlayer()->CastItemCombatSpell(spellDamageInfo);
}
@@ -2723,7 +2723,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)
DamageInfo spellNoDamageInfo(damageInfo, NODAMAGE, m_attackType, hitMask);
caster->ProcSkillsAndAuras(unitTarget, procAttacker, procVictim, PROC_SPELL_TYPE_NO_DMG_HEAL, PROC_SPELL_PHASE_HIT, hitMask, this, &spellNoDamageInfo, nullptr);
if (caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET) && !m_spellInfo->HasAttribute(SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS) &&
if (caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT) && !m_spellInfo->HasAttribute(SPELL_ATTR4_CANT_TRIGGER_ITEM_SPELLS) &&
(m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED))
caster->ToPlayer()->CastItemCombatSpell(spellNoDamageInfo);
}
@@ -3212,7 +3212,7 @@ void Spell::prepare(SpellCastTargets const& targets, AuraEffect const* triggered
// Don't allow to interrupt channeled spells that are not allowed to be cancelled
if (Spell* curSpell = m_caster->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
{
if (curSpell->m_spellInfo->HasAttribute(SPELL_ATTR0_CANT_CANCEL) && !m_spellInfo->HasAttribute(SPELL_ATTR4_CAN_CAST_WHILE_CASTING))
if (curSpell->m_spellInfo->HasAttribute(SPELL_ATTR0_NO_AURA_CANCEL) && !m_spellInfo->HasAttribute(SPELL_ATTR4_CAN_CAST_WHILE_CASTING))
{
SendCastResult(SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW);
finish(false);
@@ -3674,7 +3674,7 @@ void Spell::_cast(bool skipCheck)
{
if (m_spellInfo->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC))
procAttacker |= PROC_FLAG_DEAL_PERIODIC;
else if (m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
else if (m_spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY))
{
if (IsPositive())
procAttacker |= PROC_FLAG_DEAL_HELPFUL_ABILITY;
@@ -3897,7 +3897,7 @@ void Spell::_handle_finish_phase()
{
if (m_spellInfo->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC))
procAttacker |= PROC_FLAG_DEAL_PERIODIC;
else if (m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
else if (m_spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY))
{
if (IsPositive())
procAttacker |= PROC_FLAG_DEAL_HELPFUL_ABILITY;
@@ -4095,7 +4095,7 @@ void Spell::finish(bool ok, bool sendChannelUpdate /* = false */)
}
// Stop Attack for some spells
if (m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET))
if (m_spellInfo->HasAttribute(SPELL_ATTR0_CANCELS_AUTO_ATTACK_COMBAT))
m_caster->AttackStop();
}
@@ -4338,7 +4338,7 @@ void Spell::SendSpellStart()
if (((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell) && !m_cast_count)
castFlags |= CAST_FLAG_PENDING;
if (m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO))
if (m_spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT))
castFlags |= CAST_FLAG_PROJECTILE;
if ((m_caster->GetTypeId() == TYPEID_PLAYER ||
@@ -4433,7 +4433,7 @@ void Spell::SendSpellGo()
if (((IsTriggered() && !m_spellInfo->IsAutoRepeatRangedSpell()) || m_triggeredByAuraSpell) && !m_cast_count)
castFlags |= CAST_FLAG_PENDING;
if (m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO))
if (m_spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT))
castFlags |= CAST_FLAG_PROJECTILE; // arrows/bullets visual
if ((m_caster->GetTypeId() == TYPEID_PLAYER ||
@@ -5445,7 +5445,7 @@ void Spell::HandleEffects(Unit* pUnitTarget, Item* pItemTarget, GameObject* pGoT
SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint32* param2 /*= nullptr*/, MountResult* mountResult /*= nullptr*/)
{
// check death state
if (!m_caster->IsAlive() && !m_spellInfo->IsPassive() && !(m_spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell)))
if (!m_caster->IsAlive() && !m_spellInfo->IsPassive() && !(m_spellInfo->HasAttribute(SPELL_ATTR0_ALLOW_CAST_WHILE_DEAD) || (IsTriggered() && !m_triggeredByAuraSpell)))
return SPELL_FAILED_CASTER_DEAD;
// Prevent cheating in case the player has an immunity effect and tries to interact with a non-allowed gameobject. The error message is handled by the client so we don't report anything here
@@ -5465,7 +5465,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
{
// These two auras check SpellFamilyName defined by dbc class data instead of current spell SpellFamilyName
if (m_caster->HasAuraType(SPELL_AURA_DISABLE_CASTING_EXCEPT_ABILITIES)
&& !m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO)
&& !m_spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT)
&& !m_spellInfo->HasEffect(SPELL_EFFECT_ATTACK)
&& !m_caster->HasAuraTypeWithFamilyFlags(SPELL_AURA_DISABLE_CASTING_EXCEPT_ABILITIES, sChrClassesStore.AssertEntry(m_caster->getClass())->SpellClassSet, m_spellInfo->SpellFamilyFlags))
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
@@ -5474,7 +5474,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
{
if (!m_caster->HasAuraTypeWithFamilyFlags(SPELL_AURA_DISABLE_ATTACKING_EXCEPT_ABILITIES, sChrClassesStore.AssertEntry(m_caster->getClass())->SpellClassSet, m_spellInfo->SpellFamilyFlags))
{
if (m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO)
if (m_spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT)
|| m_spellInfo->IsNextMeleeSwingSpell()
|| m_spellInfo->HasAttribute(SPELL_ATTR1_MELEE_COMBAT_START)
|| m_spellInfo->HasAttribute(SPELL_ATTR2_INITIATE_COMBAT_POST_CAST)
@@ -5510,7 +5510,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
// Check global cooldown
if (strict && !(_triggeredCastFlags & TRIGGERED_IGNORE_GCD) && HasGlobalCooldown())
return !m_spellInfo->HasAttribute(SPELL_ATTR0_DISABLED_WHILE_ACTIVE) ? SPELL_FAILED_NOT_READY : SPELL_FAILED_DONT_REPORT;
return !m_spellInfo->HasAttribute(SPELL_ATTR0_COOLDOWN_ON_EVENT) ? SPELL_FAILED_NOT_READY : SPELL_FAILED_DONT_REPORT;
// only triggered spells can be processed an ended battleground
if (!IsTriggered() && m_caster->GetTypeId() == TYPEID_PLAYER)
@@ -5520,11 +5520,11 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
if (m_caster->GetTypeId() == TYPEID_PLAYER && VMAP::VMapFactory::createOrGetVMapManager()->isLineOfSightCalcEnabled())
{
if (m_spellInfo->HasAttribute(SPELL_ATTR0_OUTDOORS_ONLY) &&
if (m_spellInfo->HasAttribute(SPELL_ATTR0_ONLY_OUTDOORS) &&
!m_caster->IsOutdoors())
return SPELL_FAILED_ONLY_OUTDOORS;
if (m_spellInfo->HasAttribute(SPELL_ATTR0_INDOORS_ONLY) &&
if (m_spellInfo->HasAttribute(SPELL_ATTR0_ONLY_INDOORS) &&
!m_caster->IsOutdoors())
return SPELL_FAILED_ONLY_INDOORS;
}
@@ -5741,7 +5741,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint
// not let players cast spells at mount (and let do it to creatures)
if (m_caster->IsMounted() && m_caster->GetTypeId() == TYPEID_PLAYER && !(_triggeredCastFlags & TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE) &&
!m_spellInfo->IsPassive() && !m_spellInfo->HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_MOUNTED))
!m_spellInfo->IsPassive() && !m_spellInfo->HasAttribute(SPELL_ATTR0_ALLOW_WHILE_MOUNTED))
{
if (m_caster->IsInFlight())
return SPELL_FAILED_NOT_ON_TAXI;
@@ -6776,7 +6776,7 @@ std::pair<float, float> Spell::GetMinMaxRange(bool strict) const
rangeMod += 8.0f / 3.0f;
}
if (m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && m_caster->GetTypeId() == TYPEID_PLAYER)
if (m_spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT) && m_caster->GetTypeId() == TYPEID_PLAYER)
if (Item* ranged = m_caster->ToPlayer()->GetWeaponForAttack(RANGED_ATTACK, true))
maxRange *= ranged->GetTemplate()->GetRangedModRange() * 0.01f;
@@ -8358,7 +8358,7 @@ void Spell::TriggerGlobalCooldown()
// Apply haste rating
if (m_spellInfo->StartRecoveryCategory == 133 && m_spellInfo->StartRecoveryTime == 1500 &&
m_spellInfo->DmgClass != SPELL_DAMAGE_CLASS_MELEE && m_spellInfo->DmgClass != SPELL_DAMAGE_CLASS_RANGED &&
!m_spellInfo->HasAttribute(SPELL_ATTR0_REQ_AMMO) && !m_spellInfo->HasAttribute(SPELL_ATTR0_ABILITY))
!m_spellInfo->HasAttribute(SPELL_ATTR0_USES_RANGED_SLOT) && !m_spellInfo->HasAttribute(SPELL_ATTR0_IS_ABILITY))
{
gcd = int32(float(gcd) * m_caster->GetFloatValue(UNIT_MOD_CAST_SPEED));
RoundToInterval<int32>(gcd, MIN_GCD, MAX_GCD);
+15 -15
View File
@@ -552,7 +552,7 @@ int32 SpellEffectInfo::CalcValue(Unit const* caster, int32 const* bp, Unit const
if (!caster->IsControlledByPlayer() &&
_spellInfo->SpellLevel && _spellInfo->SpellLevel != caster->getLevel() &&
!basePointsPerLevel && _spellInfo->HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION))
!basePointsPerLevel && _spellInfo->HasAttribute(SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL))
{
bool canEffectScale = false;
switch (Effect)
@@ -1394,7 +1394,7 @@ bool SpellInfo::IsStackableOnOneSlotWithDifferentCasters() const
bool SpellInfo::IsCooldownStartedOnEvent() const
{
if (HasAttribute(SPELL_ATTR0_DISABLED_WHILE_ACTIVE))
if (HasAttribute(SPELL_ATTR0_COOLDOWN_ON_EVENT))
return true;
return CategoryEntry && CategoryEntry->GetFlags().HasFlag(SpellCategoryFlags::CooldownEventOnLeaveCombat);
@@ -1442,7 +1442,7 @@ bool SpellInfo::IsGroupBuff() const
bool SpellInfo::CanBeUsedInCombat() const
{
return !HasAttribute(SPELL_ATTR0_CANT_USED_IN_COMBAT);
return !HasAttribute(SPELL_ATTR0_NOT_IN_COMBAT_ONLY_PEACEFUL);
}
bool SpellInfo::IsPositive() const
@@ -1481,7 +1481,7 @@ bool SpellInfo::NeedsComboPoints() const
bool SpellInfo::IsNextMeleeSwingSpell() const
{
return HasAttribute(SpellAttr0(SPELL_ATTR0_ON_NEXT_SWING | SPELL_ATTR0_ON_NEXT_SWING_2));
return HasAttribute(SpellAttr0(SPELL_ATTR0_ON_NEXT_SWING_NO_DAMAGE | SPELL_ATTR0_ON_NEXT_SWING));
}
bool SpellInfo::IsBreakingStealth() const
@@ -1566,11 +1566,11 @@ bool SpellInfo::IsAffectedBySpellMod(SpellModifier const* mod) const
bool SpellInfo::CanPierceImmuneAura(SpellInfo const* auraSpellInfo) const
{
// aura can't be pierced
if (!auraSpellInfo || auraSpellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
if (!auraSpellInfo || auraSpellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
return false;
// these spells pierce all available spells (Resurrection Sickness for example)
if (HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
if (HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
return true;
// these spells (Cyclone for example) can pierce all...
@@ -1593,11 +1593,11 @@ bool SpellInfo::CanPierceImmuneAura(SpellInfo const* auraSpellInfo) const
bool SpellInfo::CanDispelAura(SpellInfo const* auraSpellInfo) const
{
// These auras (like Divine Shield) can't be dispelled
if (auraSpellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
if (auraSpellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
return false;
// These spells (like Mass Dispel) can dispel all auras
if (HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
if (HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
return true;
// These auras (Cyclone for example) are not dispelable
@@ -1708,7 +1708,7 @@ SpellCastResult SpellInfo::CheckShapeshift(uint32 form) const
if (actAsShifted)
{
if (HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFT) || (shapeInfo && shapeInfo->GetFlags().HasFlag(SpellShapeshiftFormFlags::CanOnlyCastShapeshiftSpells))) // not while shapeshifted
if (HasAttribute(SPELL_ATTR0_NOT_SHAPESHIFTED) || (shapeInfo && shapeInfo->GetFlags().HasFlag(SpellShapeshiftFormFlags::CanOnlyCastShapeshiftSpells))) // not while shapeshifted
return SPELL_FAILED_NOT_SHAPESHIFT;
else if (Stances != 0) // needs other shapeshift
return SPELL_FAILED_ONLY_SHAPESHIFT;
@@ -2098,7 +2098,7 @@ SpellCastResult SpellInfo::CheckVehicle(Unit const* caster) const
if (!vehicleSeat)
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
if (!HasAttribute(SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !HasAttribute(SPELL_ATTR0_CASTABLE_WHILE_MOUNTED)
if (!HasAttribute(SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE) && !HasAttribute(SPELL_ATTR0_ALLOW_WHILE_MOUNTED)
&& (vehicleSeat->Flags & checkMask) != checkMask)
return SPELL_FAILED_CANT_DO_THAT_RIGHT_NOW;
@@ -3254,7 +3254,7 @@ bool SpellInfo::SpellCancelsAuraEffect(SpellInfo const* auraSpellInfo, uint8 aur
if (!HasAttribute(SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY))
return false;
if (auraSpellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY))
if (auraSpellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES))
return false;
for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
@@ -3637,7 +3637,7 @@ int32 SpellInfo::CalcPowerCost(Unit const* caster, SpellSchoolMask schoolMask, S
if (!caster->IsControlledByPlayer())
{
if (HasAttribute(SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION))
if (HasAttribute(SPELL_ATTR0_SCALES_WITH_CREATURE_LEVEL))
{
GtNPCManaCostScalerEntry const* spellScaler = sGtNPCManaCostScalerStore.LookupEntry(SpellLevel - 1);
GtNPCManaCostScalerEntry const* casterScaler = sGtNPCManaCostScalerStore.LookupEntry(caster->getLevel() - 1);
@@ -3737,7 +3737,7 @@ SpellInfo const* SpellInfo::GetAuraRankForLevel(uint8 level) const
return this;
// Client ignores spell with these attributes (sub_53D9D0)
if (HasAttribute(SPELL_ATTR0_NEGATIVE_1) || HasAttribute(SPELL_ATTR2_UNK3))
if (HasAttribute(SPELL_ATTR0_AURA_IS_DEBUFF) || HasAttribute(SPELL_ATTR2_UNK3))
return this;
bool needRankSelection = false;
@@ -3828,7 +3828,7 @@ void SpellInfo::_InitializeExplicitTargetMask()
bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
{
// not found a single positive spell with this attribute
if (HasAttribute(SPELL_ATTR0_NEGATIVE_1))
if (HasAttribute(SPELL_ATTR0_AURA_IS_DEBUFF))
return false;
switch (SpellFamilyName)
@@ -4013,7 +4013,7 @@ bool SpellInfo::_IsPositiveEffect(uint8 effIndex, bool deep) const
if (Effects[effIndex].TargetA.GetTarget() != TARGET_UNIT_CASTER)
return false;
// but not this if this first effect (didn't find better check)
if (HasAttribute(SPELL_ATTR0_NEGATIVE_1) && effIndex == 0)
if (HasAttribute(SPELL_ATTR0_AURA_IS_DEBUFF) && effIndex == 0)
return false;
break;
case SPELL_AURA_MECHANIC_IMMUNITY:
+7 -7
View File
@@ -2404,7 +2404,7 @@ void SpellMgr::LoadSpellAreas()
if (SpellInfo const* spellInfo = GetSpellInfo(spell))
{
if (spellArea.flags & SPELL_AREA_FLAG_AUTOCAST)
const_cast<SpellInfo*>(spellInfo)->Attributes |= SPELL_ATTR0_CANT_CANCEL;
const_cast<SpellInfo*>(spellInfo)->Attributes |= SPELL_ATTR0_NO_AURA_CANCEL;
}
else
{
@@ -2792,8 +2792,8 @@ void SpellMgr::LoadSpellInfoCustomAttributes()
[[fallthrough]];
default:
{
// No value and not interrupt cast or crowd control without SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY flag
if (!spellInfo->Effects[j].CalcValue() && !((spellInfo->Effects[j].Effect == SPELL_EFFECT_INTERRUPT_CAST || spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC)) && !spellInfo->HasAttribute(SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY)))
// No value and not interrupt cast or crowd control without SPELL_ATTR0_NO_IMMUNITIES flag
if (!spellInfo->Effects[j].CalcValue() && !((spellInfo->Effects[j].Effect == SPELL_EFFECT_INTERRUPT_CAST || spellInfo->HasAttribute(SPELL_ATTR0_CU_AURA_CC)) && !spellInfo->HasAttribute(SPELL_ATTR0_NO_IMMUNITIES)))
break;
// Sindragosa Frost Breath
@@ -3258,7 +3258,7 @@ void SpellMgr::LoadSpellInfoCorrections()
ApplySpellFix({ 47569 }, [](SpellInfo* spellInfo)
{
// with this spell atrribute aura can be stacked several times
spellInfo->Attributes &= ~SPELL_ATTR0_NOT_SHAPESHIFT;
spellInfo->Attributes &= ~SPELL_ATTR0_NOT_SHAPESHIFTED;
});
// Hymn of Hope
@@ -4044,7 +4044,7 @@ void SpellMgr::LoadSpellInfoCorrections()
{
spellInfo->Effects[EFFECT_0].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
spellInfo->Effects[EFFECT_1].RadiusEntry = sSpellRadiusStore.LookupEntry(EFFECT_RADIUS_200_YARDS); // 200yd
spellInfo->Attributes |= SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY;
spellInfo->Attributes |= SPELL_ATTR0_NO_IMMUNITIES;
});
// Raging Spirit Visual
@@ -4237,7 +4237,7 @@ void SpellMgr::LoadSpellInfoCorrections()
// Introspection
ApplySpellFix({ 40055, 40165, 40166, 40167 }, [](SpellInfo* spellInfo)
{
spellInfo->Attributes |= SPELL_ATTR0_NEGATIVE_1;
spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF;
});
// Minor Fortitude
@@ -4909,7 +4909,7 @@ void SpellMgr::LoadSpellInfoCorrections()
// Torment
ApplySpellFix({ 99256, 100230, 100231, 100232 }, [](SpellInfo* spellInfo)
{
spellInfo->Attributes |= SPELL_ATTR0_NEGATIVE_1;
spellInfo->Attributes |= SPELL_ATTR0_AURA_IS_DEBUFF;
});
// Summon Fragment of Rhyolith