diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Pet/Pet.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 13 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 14 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/Spell.cpp | 8 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/Spells/SpellMgr.cpp | 2 | 
8 files changed, 23 insertions, 22 deletions
diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index d9cdfe8762a..5d93f452b68 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -1186,7 +1186,7 @@ void Pet::_LoadAuras(uint32 timediff)              }              // negative effects should continue counting down after logout -            if (remainTime != -1 && !spellInfo->IsPositive()) +            if (remainTime != -1 && (!spellInfo->IsPositive() || spellInfo->HasAttribute(SPELL_ATTR4_AURA_EXPIRES_OFFLINE)))              {                  if (remainTime/IN_MILLISECONDS <= int32(timediff))                      continue; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index aabfbf911ee..2d054c23376 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -18681,7 +18681,7 @@ void Player::_LoadAuras(PreparedQueryResult auraResult, PreparedQueryResult effe              }              // negative effects should continue counting down after logout -            if (remainTime != -1 && !spellInfo->IsPositive()) +            if (remainTime != -1 && (!spellInfo->IsPositive() || spellInfo->HasAttribute(SPELL_ATTR4_AURA_EXPIRES_OFFLINE)))              {                  if (remainTime/IN_MILLISECONDS <= int32(timediff))                      continue; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 358787d511c..2b37ec0d1c8 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -940,7 +940,7 @@ uint32 Unit::DealDamage(Unit* victim, uint32 damage, CleanDamage const* cleanDam          if (damagetype != NODAMAGE)          {              if (victim != this -                && (!spellProto || !spellProto->HasAttribute(SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE))) +                && (!spellProto || !(spellProto->HasAttribute(SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE) || spellProto->HasAttribute(SPELL_ATTR3_TREAT_AS_PERIODIC))))              {                  if (damagetype != DOT)                  { @@ -4220,9 +4220,10 @@ void Unit::RemoveArenaAuras()      RemoveAppliedAuras([](AuraApplication const* aurApp)      {          Aura const* aura = aurApp->GetBase(); -        return !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR4_DONT_REMOVE_IN_ARENA)                        // don't remove stances, shadowform, pally/hunter auras -            && !aura->IsPassive()                                                                           // don't remove passive auras -            && (aurApp->IsPositive() || !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR3_DEATH_PERSISTENT)); // not negative death persistent auras +        return (!aura->GetSpellInfo()->HasAttribute(SPELL_ATTR4_DONT_REMOVE_IN_ARENA)                          // don't remove stances, shadowform, pally/hunter auras +            && !aura->IsPassive()                                                                              // don't remove passive auras +            && (aurApp->IsPositive() || !aura->GetSpellInfo()->HasAttribute(SPELL_ATTR3_DEATH_PERSISTENT))) || // not negative death persistent auras +            aura->GetSpellInfo()->HasAttribute(SPELL_ATTR5_REMOVE_ENTERING_ARENA);                             // special marker, always remove      });  } @@ -6777,7 +6778,7 @@ float Unit::SpellDamagePctDone(Unit* victim, SpellInfo const* spellProto, Damage          return 1.0f;      // Some spells don't benefit from pct done mods -    if (spellProto->HasAttribute(SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS)) +    if (spellProto->HasAttribute(SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS))          return 1.0f;      // For totems pct done mods are calculated when its calculation is run on the player in SpellDamageBonusDone. @@ -7698,7 +7699,7 @@ uint32 Unit::MeleeDamageBonusDone(Unit* pVictim, uint32 damage, WeaponAttackType      {          // Some spells don't benefit from pct done mods          // mods for SPELL_SCHOOL_MASK_NORMAL are already factored in base melee damage calculation -        if (!spellProto->HasAttribute(SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS) && !(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_NORMAL)) +        if (!spellProto->HasAttribute(SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS) && !(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_NORMAL))          {              float maxModDamagePercentSchool = 0.0f;              if (Player const* thisPlayer = ToPlayer()) diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index e401b044c4b..f94e0e3b00b 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -519,7 +519,7 @@ enum SpellAttr4  {      SPELL_ATTR4_IGNORE_RESISTANCES               = 0x00000001, //  0 spells with this attribute will completely ignore the target's resistance (these spells can't be resisted)      SPELL_ATTR4_PROC_ONLY_ON_CASTER              = 0x00000002, //  1 proc only on effects with TARGET_UNIT_CASTER? -    SPELL_ATTR4_UNK2                             = 0x00000004, //  2 +    SPELL_ATTR4_AURA_EXPIRES_OFFLINE             = 0x00000004, //  2 duration is removed from aura while player is logged out      SPELL_ATTR4_UNK3                             = 0x00000008, //  3      SPELL_ATTR4_UNK4                             = 0x00000010, //  4 This will no longer cause guards to attack on use??      SPELL_ATTR4_UNK5                             = 0x00000020, //  5 @@ -540,7 +540,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_UNK23                            = 0x00800000, // 23 +    SPELL_ATTR4_SUPPRESS_WEAPON_PROCS            = 0x00800000, // 23 spells with this flag should not trigger item spells / enchants (mostly in conjunction with SPELL_ATTR0_STOP_ATTACK_TARGET)      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. @@ -555,7 +555,7 @@ enum SpellAttr5  {      SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING          = 0x00000001, //  0 available casting channel spell when moving      SPELL_ATTR5_NO_REAGENT_WHILE_PREP            = 0x00000002, //  1 not need reagents if UNIT_FLAG_PREPARATION -    SPELL_ATTR5_UNK2                             = 0x00000004, //  2 +    SPELL_ATTR5_REMOVE_ENTERING_ARENA            = 0x00000004, //  2 remove this aura on arena enter      SPELL_ATTR5_USABLE_WHILE_STUNNED             = 0x00000008, //  3 usable while stunned      SPELL_ATTR5_UNK4                             = 0x00000010, //  4      SPELL_ATTR5_SINGLE_TARGET_SPELL              = 0x00000020, //  5 Only one target can be apply at a time @@ -579,7 +579,7 @@ enum SpellAttr5      SPELL_ATTR5_UNK23                            = 0x00800000, // 23      SPELL_ATTR5_UNK24                            = 0x01000000, // 24      SPELL_ATTR5_UNK25                            = 0x02000000, // 25 -    SPELL_ATTR5_UNK26                            = 0x04000000, // 26 aoe related - Boulder, Cannon, Corpse Explosion, Fire Nova, Flames, Frost Bomb, Living Bomb, Seed of Corruption, Starfall, Thunder Clap, Volley +    SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT         = 0x04000000, // 26 aoe related - Boulder, Cannon, Corpse Explosion, Fire Nova, Flames, Frost Bomb, Living Bomb, Seed of Corruption, Starfall, Thunder Clap, Volley      SPELL_ATTR5_DONT_SHOW_AURA_IF_SELF_CAST      = 0x08000000, // 27 Auras with this attribute are not visible on units that are the caster      SPELL_ATTR5_DONT_SHOW_AURA_IF_NOT_SELF_CAST  = 0x10000000, // 28 Auras with this attribute are not visible on units that are not the caster      SPELL_ATTR5_UNK29                            = 0x20000000, // 29 @@ -594,7 +594,7 @@ enum SpellAttr6      SPELL_ATTR6_IGNORE_CASTER_AURAS              = 0x00000004, //  2      SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG        = 0x00000008, //  3 skips checking UNIT_FLAG_IMMUNE_TO_PC and UNIT_FLAG_IMMUNE_TO_NPC flags on assist      SPELL_ATTR6_UNK4                             = 0x00000010, //  4 -    SPELL_ATTR6_UNK5                             = 0x00000020, //  5 +    SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES         = 0x00000020, //  5 dont consume proc charges      SPELL_ATTR6_USE_SPELL_CAST_EVENT             = 0x00000040, //  6 Auras with this attribute trigger SPELL_CAST combat log event instead of SPELL_AURA_START (clientside attribute)      SPELL_ATTR6_UNK7                             = 0x00000080, //  7      SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED     = 0x00000100, //  8 @@ -616,9 +616,9 @@ enum SpellAttr6      SPELL_ATTR6_CAN_TARGET_UNTARGETABLE          = 0x01000000, // 24      SPELL_ATTR6_NOT_RESET_SWING_IF_INSTANT       = 0x02000000, // 25 Exorcism, Flash of Light      SPELL_ATTR6_UNK26                            = 0x04000000, // 26 related to player castable positive buff -    SPELL_ATTR6_UNK27                            = 0x08000000, // 27 +    SPELL_ATTR6_IGNORE_HEALING_MODIFIERS         = 0x08000000, // 27 some custom rules - complicated      SPELL_ATTR6_UNK28                            = 0x10000000, // 28 Death Grip -    SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS          = 0x20000000, // 29 ignores done percent damage mods? +    SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS   = 0x20000000, // 29 ignores done percent damage mods? some custom rules - complicated      SPELL_ATTR6_UNK30                            = 0x40000000, // 30      SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS    = 0x80000000  // 31 Spells with this attribute skip applying modifiers to category cooldowns  }; diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 3c92d3adece..aaba2370cc4 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1651,7 +1651,7 @@ void Aura::PrepareProcToTrigger(AuraApplication* aurApp, ProcEventInfo& eventInf      ASSERT(procEntry);      // take one charge, aura expiration will be handled in Aura::TriggerProcOnEvent (if needed) -    if (!(procEntry->AttributesMask & PROC_ATTR_USE_STACKS_FOR_CHARGES) && IsUsingCharges()) +    if (!(procEntry->AttributesMask & PROC_ATTR_USE_STACKS_FOR_CHARGES) && IsUsingCharges() && (!eventInfo.GetSpellInfo() || !eventInfo.GetSpellInfo()->HasAttribute(SPELL_ATTR6_DO_NOT_CONSUME_RESOURCES)))      {          --m_procCharges;          SetNeedClientUpdateForTargets(); diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index 8059b9bc45c..f545df5ddc9 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2524,7 +2524,7 @@ void Spell::DoAllEffectOnTarget(TargetInfo* target)              DamageInfo spellDamageInfo(damageInfo, SPELL_DIRECT_DAMAGE, m_attackType, hitMask);              caster->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) && +            if (caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET) && !m_spellInfo->HasAttribute(SPELL_ATTR4_SUPPRESS_WEAPON_PROCS) &&                 (m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED))                  caster->ToPlayer()->CastItemCombatSpell(spellDamageInfo);          } @@ -2541,7 +2541,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) && +            if (caster->GetTypeId() == TYPEID_PLAYER && !m_spellInfo->HasAttribute(SPELL_ATTR0_STOP_ATTACK_TARGET) && !m_spellInfo->HasAttribute(SPELL_ATTR4_SUPPRESS_WEAPON_PROCS) &&                  (m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE || m_spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED))                  caster->ToPlayer()->CastItemCombatSpell(spellNoDamageInfo);          } @@ -5190,7 +5190,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint                      if (DynamicObject* dynObj = m_caster->GetDynObject(m_triggeredByAuraSpell->Id))                          losTarget = dynObj; -                if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, nullptr, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget, LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags::M2)) +                if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !m_spellInfo->HasAttribute(SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, nullptr, SPELL_DISABLE_LOS) && !target->IsWithinLOSInMap(losTarget, LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags::M2))                      return SPELL_FAILED_LINE_OF_SIGHT;              }          } @@ -5202,7 +5202,7 @@ SpellCastResult Spell::CheckCast(bool strict, uint32* param1 /*= nullptr*/, uint          float x, y, z;          m_targets.GetDstPos()->GetPosition(x, y, z); -        if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, nullptr, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOS(x, y, z, LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags::M2)) +        if (!m_spellInfo->HasAttribute(SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS) && !m_spellInfo->HasAttribute(SPELL_ATTR5_ALWAYS_AOE_LINE_OF_SIGHT) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_SPELL, m_spellInfo->Id, nullptr, SPELL_DISABLE_LOS) && !m_caster->IsWithinLOS(x, y, z, LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags::M2))              return SPELL_FAILED_LINE_OF_SIGHT;      } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index a0a1b6fb26b..e544e0ebfb2 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2856,7 +2856,7 @@ void Spell::EffectWeaponDmg(SpellEffIndex effIndex)      // if (addPctMods) { percent mods are added in Unit::CalculateDamage } else { percent mods are added in Unit::MeleeDamageBonusDone }      // this distinction is neccessary to properly inform the client about his autoattack damage values from Script_UnitDamage -    bool const addPctMods = !m_spellInfo->HasAttribute(SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS) && (m_spellSchoolMask & SPELL_SCHOOL_MASK_NORMAL); +    bool const addPctMods = !m_spellInfo->HasAttribute(SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS) && (m_spellSchoolMask & SPELL_SCHOOL_MASK_NORMAL);      if (addPctMods)      {          UnitMods unitMod; diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 801f7b06fc6..6dd3ff6128b 100644 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -4121,7 +4121,7 @@ void SpellMgr::LoadSpellInfoCorrections()      ApplySpellFix({ 70106 }, [](SpellInfo* spellInfo)      {          spellInfo->AttributesEx3 |= SPELL_ATTR3_NO_DONE_BONUS; -        spellInfo->AttributesEx6 |= SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS; +        spellInfo->AttributesEx6 |= SPELL_ATTR6_IGNORE_CASTER_DAMAGE_MODIFIERS;      });      // Ice Lock  | 
