From 8df577ebfed34131184d2fd08b131b29b96d4fd3 Mon Sep 17 00:00:00 2001 From: xinef1 Date: Sun, 19 Feb 2017 06:30:04 +0100 Subject: Corrected points per level calculation for some spells (#19105) (cherry picked from commit 9142c778dd861eda188ba868433af05038c4e13c) --- src/server/game/Spells/SpellInfo.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/server/game/Spells/SpellInfo.cpp') diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 12eb37b6861..3b27c060639 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -510,14 +510,16 @@ int32 SpellEffectInfo::CalcValue(Unit const* caster /*= nullptr*/, int32 const* if (Scaling.ResourceCoefficient) comboDamage = Scaling.ResourceCoefficient * value; } - else + else if (GetScalingExpectedStat() == ExpectedStatType::None) { - if (GetScalingExpectedStat() == ExpectedStatType::None) + if (caster && basePointsPerLevel != 0.0f) { - int32 level = caster ? int32(caster->getLevel()) : 0; + int32 level = int32(caster->getLevel()); if (level > int32(_spellInfo->MaxLevel) && _spellInfo->MaxLevel > 0) level = int32(_spellInfo->MaxLevel); - level -= int32(_spellInfo->BaseLevel); + + // if base level is greater than spell level, reduce by base level (eg. pilgrims foods) + level -= int32(std::max(_spellInfo->BaseLevel, _spellInfo->SpellLevel)); if (level < 0) level = 0; value += level * basePointsPerLevel; -- cgit v1.2.3 From d80350da6886bea546c01b2d3e15c9bad39606fd Mon Sep 17 00:00:00 2001 From: ariel- Date: Mon, 3 Apr 2017 04:04:02 -0300 Subject: Core/Spell: don't set scaleAura for some special spells Closes #14541 (cherry picked from commit 1ca8434b365687dbd12ca232a615d126234eba5e) --- src/server/game/Spells/SpellInfo.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/server/game/Spells/SpellInfo.cpp') diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 3b27c060639..98604c278d4 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -4329,6 +4329,10 @@ bool SpellInfo::_IsPositiveEffect(uint32 effIndex, bool deep) const if (HasAttribute(SPELL_ATTR0_NEGATIVE_1)) return false; + // these spells must not be downscaled, thus marking them negative (see GetAuraRankForLevel) + if (HasAttribute(SPELL_ATTR2_UNK3)) + return false; + switch (SpellFamilyName) { case SPELLFAMILY_GENERIC: -- cgit v1.2.3 From 92719d1dc9f8294b7a07129297e23cae1ef0a659 Mon Sep 17 00:00:00 2001 From: ariel- Date: Fri, 21 Apr 2017 01:35:42 -0300 Subject: Revert "Core/Spell: don't set scaleAura for some special spells" This reverts commit 1ca8434b365687dbd12ca232a615d126234eba5e. Closes #19472 (cherry picked from commit c296d255e25a2d0eb7155f64eea32cc36fed280a) --- src/server/game/Spells/SpellInfo.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/server/game/Spells/SpellInfo.cpp') diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index 98604c278d4..eb37c3da5d7 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -4329,10 +4329,6 @@ bool SpellInfo::_IsPositiveEffect(uint32 effIndex, bool deep) const if (HasAttribute(SPELL_ATTR0_NEGATIVE_1)) return false; - // these spells must not be downscaled, thus marking them negative (see GetAuraRankForLevel) - if (HasAttribute(SPELL_ATTR2_UNK3)) - return false; - switch (SpellFamilyName) { case SPELLFAMILY_GENERIC: @@ -4513,6 +4509,7 @@ bool SpellInfo::_IsPositiveEffect(uint32 effIndex, bool deep) const case SPELL_AURA_MOD_STALKED: case SPELL_AURA_PERIODIC_DAMAGE_PERCENT: case SPELL_AURA_PREVENT_RESURRECTION: + case SPELL_AURA_EMPATHY: return false; case SPELL_AURA_PERIODIC_DAMAGE: // used in positive spells also. // part of negative spell if cast at self (prevent cancel) -- cgit v1.2.3 From 5e32e96278757aa52ef87cb122dd99825e6c8de9 Mon Sep 17 00:00:00 2001 From: ariel- Date: Sun, 23 Apr 2017 20:38:14 -0300 Subject: Core/Spell: define channels without movement interrupt flags as allowed move - Remove script hacks no longer needed (cherry picked from commit 3a0cb90ea994e82dd8c70888fb847082f738d5dc) --- src/server/game/Spells/SpellInfo.cpp | 2 +- .../scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp | 4 ---- .../scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp | 1 - src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp | 1 - src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp | 1 - src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp | 2 -- src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 1 - src/server/scripts/Outland/BlackTemple/boss_illidan.cpp | 1 - 8 files changed, 1 insertion(+), 12 deletions(-) (limited to 'src/server/game/Spells/SpellInfo.cpp') diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index eb37c3da5d7..bec8a653fee 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -1675,7 +1675,7 @@ bool SpellInfo::IsChanneled() const bool SpellInfo::IsMoveAllowedChannel() const { - return IsChanneled() && HasAttribute(SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING); + return IsChanneled() && (HasAttribute(SPELL_ATTR5_CAN_CHANNEL_WHEN_MOVING) || (!(ChannelInterruptFlags[0] & (AURA_INTERRUPT_FLAG_MOVE | AURA_INTERRUPT_FLAG_TURNING)))); } bool SpellInfo::NeedsComboPoints() const diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 50dcb98bcab..4e7ddbc453b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -1129,10 +1129,7 @@ class npc_dark_nucleus : public CreatureScript if (Unit* victim = me->GetVictim()) { if (me->GetDistance(victim) < 15.0f && !victim->HasAura(SPELL_SHADOW_RESONANCE_RESIST, me->GetGUID())) - { DoCast(victim, SPELL_SHADOW_RESONANCE_RESIST); - me->ClearUnitState(UNIT_STATE_CASTING); - } else MoveInLineOfSight(me->GetVictim()); } @@ -1146,7 +1143,6 @@ class npc_dark_nucleus : public CreatureScript } DoCast(who, SPELL_SHADOW_RESONANCE_RESIST); - me->ClearUnitState(UNIT_STATE_CASTING); } void DamageTaken(Unit* attacker, uint32& /*damage*/) override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 116843c2398..f21051a36b3 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -933,7 +933,6 @@ class spell_putricide_ooze_channel : public SpellScriptLoader void StartAttack() { - GetCaster()->ClearUnitState(UNIT_STATE_CASTING); GetCaster()->DeleteThreatList(); GetCaster()->ToCreature()->AI()->AttackStart(GetHitUnit()); GetCaster()->AddThreat(GetHitUnit(), 500000000.0f); // value seen in sniff diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 94bf769b771..73877fa1ac9 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -725,7 +725,6 @@ class boss_the_lich_king : public CreatureScript summon->CastSpell(summon, SPELL_ICE_SPHERE, false); summon->CastSpell(summon, SPELL_ICE_BURST_TARGET_SEARCH, false); summon->CastSpell(target, SPELL_ICE_PULSE, false); - summon->ClearUnitState(UNIT_STATE_CASTING); summon->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f); } else diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp index d5859e27f3a..e51db2e2878 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_loken.cpp @@ -161,7 +161,6 @@ public: break; case EVENT_RESUME_PULSING_SHOCKWAVE: DoCast(me, SPELL_PULSING_SHOCKWAVE_AURA, true); - me->ClearUnitState(UNIT_STATE_CASTING); // This flag breaks movement. DoCast(me, SPELL_PULSING_SHOCKWAVE, true); break; case EVENT_INTRO_DIALOGUE: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index 5a6c4aeeef6..ec3c449f0ca 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -230,8 +230,6 @@ class boss_kologarn : public CreatureScript summon->CastSpell(summon, SPELL_FOCUSED_EYEBEAM_PERIODIC, true); summon->CastSpell(summon, SPELL_FOCUSED_EYEBEAM_VISUAL, true); summon->SetReactState(REACT_PASSIVE); - // One of the above spells is a channeled spell, we need to clear this unit state for MoveChase to work - summon->ClearUnitState(UNIT_STATE_CASTING); // Victim gets 67351 if (!eyebeamTarget.IsEmpty()) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index fd4d7b02229..4d9ed335279 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -1304,7 +1304,6 @@ class npc_mimiron_assault_bot : public CreatureScript { case EVENT_MAGNETIC_FIELD: DoCastVictim(SPELL_MAGNETIC_FIELD); - me->ClearUnitState(UNIT_STATE_CASTING); events.RescheduleEvent(EVENT_MAGNETIC_FIELD, 30000); break; default: diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index b41199670a9..706bc7d99eb 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -2305,7 +2305,6 @@ class spell_illidan_find_target : public SpellScriptLoader if (Creature* caster = GetCaster()->ToCreature()) { caster->CastSpell(target, SPELL_PARALYZE, true); - caster->ClearUnitState(UNIT_STATE_CASTING); caster->AI()->SetGUID(target->GetGUID(), 0); } } -- cgit v1.2.3 From 05ba662d5daaa3428cc01cdaa3794bf5a073ef17 Mon Sep 17 00:00:00 2001 From: ariel- Date: Sat, 22 Apr 2017 06:45:03 -0300 Subject: Core/Spell: implement pvp trinket immunity against Judgement of Justice By Riztazz, closes #19484 (cherry picked from commit 25a449a90e01d7100d482c156fffa3ac2e7730d2) --- src/server/game/Spells/SpellInfo.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/server/game/Spells/SpellInfo.cpp') diff --git a/src/server/game/Spells/SpellInfo.cpp b/src/server/game/Spells/SpellInfo.cpp index bec8a653fee..b9f26ed4e08 100644 --- a/src/server/game/Spells/SpellInfo.cpp +++ b/src/server/game/Spells/SpellInfo.cpp @@ -3384,11 +3384,14 @@ void SpellInfo::_LoadImmunityInfo() { switch (Id) { + case 42292: // PvP trinket + case 59752: // Every Man for Himself + mechanicImmunityMask |= IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK; + immuneInfo.AuraTypeImmune.insert(SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED); + break; case 34471: // The Beast Within case 19574: // Bestial Wrath - case 42292: // PvP trinket case 46227: // Medallion of Immunity - case 59752: // Every Man for Himself case 53490: // Bullheaded case 65547: // PvP Trinket case 134946: // Supremacy of the Alliance -- cgit v1.2.3