aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Achievements/AchievementMgr.cpp83
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp127
2 files changed, 14 insertions, 196 deletions
diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp
index 2118b4cf42c..30b6de3fc4d 100644
--- a/src/server/game/Achievements/AchievementMgr.cpp
+++ b/src/server/game/Achievements/AchievementMgr.cpp
@@ -2935,89 +2935,6 @@ void AchievementGlobalMgr::LoadAchievementCriteriaData()
}
while (result->NextRow());
- // post loading checks
- for (uint32 entryId = 0; entryId < sAchievementCriteriaStore.GetNumRows(); ++entryId)
- {
- AchievementCriteriaEntry const* criteria = sAchievementCriteriaStore.LookupEntry(entryId);
- if (!criteria)
- continue;
-
- switch (criteria->requiredType)
- {
- case ACHIEVEMENT_CRITERIA_TYPE_WIN_BG: // any cases
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE:
- break; // any cases
- case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_QUEST:
- {
- AchievementEntry const* achievement = sAchievementStore.LookupEntry(criteria->referredAchievement);
- if (!achievement)
- continue;
-
- // exist many achievements with this criteria, use at this moment hardcoded check to skil simple case
- if (achievement->ID == 1282)
- break;
-
- continue;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_FALL_WITHOUT_DYING:
- break; // any cases
- case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET: // any cases
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL: // any cases
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_WIN_RATED_ARENA: // need skip generic cases
- if (criteria->additionalRequirements[0].additionalRequirement_type != ACHIEVEMENT_CRITERIA_CONDITION_NO_LOSE)
- continue;
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_EQUIP_EPIC_ITEM: // any cases
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_ROLL_NEED_ON_LOOT:
- break; // any cases
- case ACHIEVEMENT_CRITERIA_TYPE_ROLL_GREED_ON_LOOT:
- break; // any cases
- case ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE: // need skip generic cases
- if (criteria->do_emote.count == 0)
- continue;
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET2:
- break; // any cases
- case ACHIEVEMENT_CRITERIA_TYPE_WIN_DUEL: // skip statistics
- if (criteria->win_duel.duelCount == 0)
- continue;
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_CAST_SPELL2: // any cases
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_LOOT_TYPE: // need skip generic cases
- if (criteria->loot_type.lootTypeCount != 1)
- continue;
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_BG_OBJECTIVE_CAPTURE:
- break; // any cases
- case ACHIEVEMENT_CRITERIA_TYPE_SPECIAL_PVP_KILL:
- break; // any cases
- case ACHIEVEMENT_CRITERIA_TYPE_HONORABLE_KILL: // any cases
- break;
- case ACHIEVEMENT_CRITERIA_TYPE_COMPLETE_DAILY_QUEST:
- case ACHIEVEMENT_CRITERIA_TYPE_USE_ITEM: // only Children's Week achievements
- {
- AchievementEntry const* achievement = sAchievementStore.LookupEntry(criteria->referredAchievement);
- if (!achievement)
- continue;
- if (achievement->categoryId != CATEGORY_CHILDRENS_WEEK)
- continue;
- break;
- }
- case ACHIEVEMENT_CRITERIA_TYPE_GET_KILLING_BLOWS:
- break;
- default: // type not use DB data, ignore
- continue;
- }
-
- if (!GetCriteriaDataSet(criteria) && !DisableMgr::IsDisabledFor(DISABLE_TYPE_ACHIEVEMENT_CRITERIA, entryId, NULL))
- sLog->outError(LOG_FILTER_SQL, "Table `achievement_criteria_data` does not have expected data for criteria (Entry: %u Type: %u) for achievement %u.", criteria->ID, criteria->requiredType, criteria->referredAchievement);
- }
-
sLog->outInfo(LOG_FILTER_SERVER_LOADING, ">> Loaded %u additional achievement criteria data in %u ms", count, GetMSTimeDiffToNow(oldMSTime));
}
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index d0f4a93e35d..027ab164ad8 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -523,7 +523,7 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
{
if ((*itr)->IsAffectingSpell(m_spellInfo))
{
- // Glyph of Fear, Glyph of Frost nova and similar auras
+ // Glyph of Frost nova and similar auras
if ((*itr)->GetMiscValue() == 7801)
{
AddPctN(amount, (*itr)->GetAmount());
@@ -543,28 +543,19 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
// Ice Barrier
if (GetSpellInfo()->SpellFamilyFlags[1] & 0x1 && GetSpellInfo()->SpellFamilyFlags[2] & 0x8)
{
- // +80.68% from sp bonus
- DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f;
- // Glyph of Ice Barrier: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :)
- // Glyph of Ice Barrier is only applied at the spell damage bonus because it was already applied to the base value in CalculateSpellDamage
- DoneActualBenefit = caster->ApplyEffectModifiers(GetSpellInfo(), m_effIndex, DoneActualBenefit);
+ // +87% from sp bonus
+ DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.87f;
}
- // Fire Ward
+ // Mage Ward
else if (GetSpellInfo()->SpellFamilyFlags[0] & 0x8 && GetSpellInfo()->SpellFamilyFlags[2] & 0x8)
{
// +80.68% from sp bonus
DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f;
}
- // Frost Ward
- else if (GetSpellInfo()->SpellFamilyFlags[0] & 0x100 && GetSpellInfo()->SpellFamilyFlags[2] & 0x8)
- {
- // +80.68% from sp bonus
- DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f;
- }
break;
case SPELLFAMILY_WARLOCK:
// Shadow Ward
- if (m_spellInfo->SpellFamilyFlags[2] & 0x40)
+ if (m_spellInfo->SpellFamilyFlags[2] & 0x80000000)
{
// +80.68% from sp bonus
DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f;
@@ -572,28 +563,18 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
break;
case SPELLFAMILY_PRIEST:
// Power Word: Shield
- if (GetSpellInfo()->SpellFamilyFlags[0] & 0x1 && GetSpellInfo()->SpellFamilyFlags[2] & 0x400)
+ if (GetSpellInfo()->SpellFamilyFlags[0] & 0x1)
{
// +80.68% from sp bonus
- float bonus = 0.8068f;
-
- // Borrowed Time
- if (AuraEffect const* pAurEff = caster->GetDummyAuraEffect(SPELLFAMILY_PRIEST, 2899, 1))
- bonus += CalculatePctN(1.0f, pAurEff->GetAmount());
-
- DoneActualBenefit += caster->SpellBaseHealingBonusDone(m_spellInfo->GetSchoolMask()) * bonus;
- // Improved PW: Shield: its weird having a SPELLMOD_ALL_EFFECTS here but its blizzards doing :)
- // Improved PW: Shield is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage
- DoneActualBenefit = caster->ApplyEffectModifiers(GetSpellInfo(), m_effIndex, DoneActualBenefit);
+ DoneActualBenefit += caster->SpellBaseHealingBonusDone(m_spellInfo->GetSchoolMask()) * 0.8068f;
DoneActualBenefit *= caster->CalculateLevelPenalty(GetSpellInfo());
amount += int32(DoneActualBenefit);
// Twin Disciplines
- if (AuraEffect const* pAurEff = caster->GetAuraEffect(SPELL_AURA_ADD_PCT_MODIFIER, SPELLFAMILY_PRIEST, 0x400000, 0, 0, caster->GetGUID()))
+ if (AuraEffect const* pAurEff = caster->GetAuraEffect(SPELL_AURA_MOD_DAMAGE_PERCENT_DONE, SPELLFAMILY_PRIEST, 2292, 0))
AddPctN(amount, pAurEff->GetAmount());
- // Focused Power
// Reuse variable, not sure if this code below can be moved before Twin Disciplines
DoneActualBenefit = float(amount);
DoneActualBenefit *= caster->GetTotalAuraMultiplier(SPELL_AURA_MOD_HEALING_DONE_PERCENT);
@@ -602,30 +583,6 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
return amount;
}
break;
- case SPELLFAMILY_PALADIN:
- // Sacred Shield
- if (m_spellInfo->SpellFamilyFlags[1] & 0x80000)
- {
- //+75.00% from sp bonus
- float bonus = 0.75f;
-
- DoneActualBenefit += caster->SpellBaseHealingBonusDone(m_spellInfo->GetSchoolMask()) * bonus;
- // Divine Guardian is only applied at the spell healing bonus because it was already applied to the base value in CalculateSpellDamage
- DoneActualBenefit = caster->ApplyEffectModifiers(GetSpellInfo(), m_effIndex, DoneActualBenefit);
- DoneActualBenefit *= caster->CalculateLevelPenalty(GetSpellInfo());
-
- amount += (int32)DoneActualBenefit;
-
- // Arena - Dampening
- AuraEffect const* pAurEff = caster->GetAuraEffect(74410, 0);
- if (!pAurEff)
- pAurEff = caster->GetAuraEffect(74411, 0); // Battleground - Dampening
- if (pAurEff)
- AddPctN(amount, pAurEff->GetAmount());
-
- return amount;
- }
- break;
default:
break;
}
@@ -637,8 +594,8 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
// Mana Shield
if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_MAGE && GetSpellInfo()->SpellFamilyFlags[0] & 0x8000 && m_spellInfo->SpellFamilyFlags[2] & 0x8)
{
- // +80.53% from +spd bonus
- DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.8053f;
+ // +80.7% from +spd bonus
+ DoneActualBenefit += caster->SpellBaseDamageBonusDone(m_spellInfo->GetSchoolMask()) * 0.807f;
}
break;
case SPELL_AURA_DUMMY:
@@ -654,24 +611,8 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
case SPELL_AURA_PERIODIC_DAMAGE:
if (!caster)
break;
- // Rupture
- if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_ROGUE && m_spellInfo->SpellFamilyFlags[0] & 0x100000)
- {
- m_canBeRecalculated = false;
- if (caster->GetTypeId() != TYPEID_PLAYER)
- break;
- //1 point : ${($m1+$b1*1+0.015*$AP)*4} damage over 8 secs
- //2 points: ${($m1+$b1*2+0.024*$AP)*5} damage over 10 secs
- //3 points: ${($m1+$b1*3+0.03*$AP)*6} damage over 12 secs
- //4 points: ${($m1+$b1*4+0.03428571*$AP)*7} damage over 14 secs
- //5 points: ${($m1+$b1*5+0.0375*$AP)*8} damage over 16 secs
- float AP_per_combo[6] = {0.0f, 0.015f, 0.024f, 0.03f, 0.03428571f, 0.0375f};
- uint8 cp = caster->ToPlayer()->GetComboPoints();
- if (cp > 5) cp = 5;
- amount += int32(caster->GetTotalAttackPowerValue(BASE_ATTACK) * AP_per_combo[cp]);
- }
// Rip
- else if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_DRUID && m_spellInfo->SpellFamilyFlags[0] & 0x00800000 && GetAuraType() == SPELL_AURA_PERIODIC_DAMAGE)
+ if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_DRUID && m_spellInfo->SpellFamilyFlags[0] & 0x00800000)
{
m_canBeRecalculated = false;
// 0.01*$AP*cp
@@ -693,20 +634,13 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
else if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_WARRIOR && GetSpellInfo()->SpellFamilyFlags[0] & 0x20)
{
m_canBeRecalculated = false;
- // $0.2 * (($MWB + $mwb) / 2 + $AP / 14 * $MWS) bonus per tick
+ // ${0.25 * 6 * (($MWB + $mwb) / 2 + $AP / 14 * $MWS)} bonus per tick
float ap = caster->GetTotalAttackPowerValue(BASE_ATTACK);
int32 mws = caster->GetAttackTime(BASE_ATTACK);
float mwb_min = caster->GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE);
float mwb_max = caster->GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE);
- float mwb = ((mwb_min + mwb_max) / 2 + ap * mws / 14000) * 0.2f;
+ float mwb = ((mwb_min + mwb_max) / 2 + ap * mws / 14000) * 0.25f * 6.0f;
amount += int32(caster->ApplyEffectModifiers(m_spellInfo, m_effIndex, mwb));
- // "If used while your target is above 75% health, Rend does 35% more damage."
- // as for 3.1.3 only ranks above 9 (wrong tooltip?)
- if (m_spellInfo->GetRank() >= 9)
- {
- if (GetBase()->GetUnitOwner()->HasAuraState(AURA_STATE_HEALTH_ABOVE_75_PERCENT, m_spellInfo, caster))
- AddPctN(amount, m_spellInfo->Effects[EFFECT_2].CalcValue(caster));
- }
}
// Unholy Blight damage over time effect
else if (GetId() == 50536)
@@ -720,7 +654,7 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
switch (m_spellInfo->Id)
{
case 57669: // Replenishment (0.2% from max)
- amount = GetBase()->GetUnitOwner()->GetMaxPower(POWER_MANA) * 0.002f;
+ amount = CalculatePctN(GetBase()->GetUnitOwner()->GetMaxPower(POWER_MANA), amount);
break;
case 61782: // Infinite Replenishment
amount = GetBase()->GetUnitOwner()->GetMaxPower(POWER_MANA) * 0.0025f;
@@ -747,39 +681,6 @@ int32 AuraEffect::CalculateAmount(Unit* caster)
AddPctN(amount, modHealing->GetAmount());
}
break;
- case SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN:
- if (!caster)
- break;
- // Icebound Fortitude
- if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_DEATHKNIGHT && m_spellInfo->SpellFamilyFlags[0] & 0x00100000)
- {
- if (caster->GetTypeId() == TYPEID_PLAYER)
- {
- int32 value = (-1 * amount) - 10;
- uint32 defva = uint32(caster->ToPlayer()->GetSkillValue(SKILL_DEFENSE) + caster->ToPlayer()->GetRatingBonusValue(CR_DEFENSE_SKILL));
-
- if (defva > 400)
- value += int32((defva - 400) * 0.15);
-
- // Glyph of Icebound Fortitude
- if (AuraEffect const* aurEff = caster->GetAuraEffect(58625, 0))
- {
- int32 valMax = aurEff->GetAmount();
- if (value < valMax)
- value = valMax;
- }
- amount = -value;
- }
- }
- // Hand of Salvation
- else if (GetSpellInfo()->SpellFamilyName == SPELLFAMILY_PALADIN && GetSpellInfo()->SpellFamilyFlags[0] & 0x00000100)
- {
- //Glyph of Salvation
- if (caster->GetGUID() == GetBase()->GetUnitOwner()->GetGUID())
- if (AuraEffect const* aurEff = caster->GetAuraEffect(63225, 0))
- amount = -aurEff->GetAmount();
- }
- break;
case SPELL_AURA_MOD_THREAT:
{
uint8 level_diff = 0;