aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells/SpellEffects.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
-rw-r--r--src/server/game/Spells/SpellEffects.cpp44
1 files changed, 37 insertions, 7 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp
index b6f009b971e..34743342da6 100644
--- a/src/server/game/Spells/SpellEffects.cpp
+++ b/src/server/game/Spells/SpellEffects.cpp
@@ -410,7 +410,8 @@ void Spell::EffectEnvironmentalDMG(SpellEffIndex /*effIndex*/)
m_caster->CalcAbsorbResist(damageInfo);
SpellNonMeleeDamage log(m_caster, unitTarget, m_spellInfo->Id, m_SpellVisual, m_spellInfo->GetSchoolMask(), m_castId);
- log.damage = damage;
+ log.damage = damageInfo.GetDamage();
+ log.originalDamage = damage;
log.absorb = damageInfo.GetAbsorb();
log.resist = damageInfo.GetResist();
@@ -2365,7 +2366,7 @@ void Spell::EffectLearnSkill(SpellEffIndex /*effIndex*/)
if (unitTarget->GetTypeId() != TYPEID_PLAYER)
return;
- if (damage < 0)
+ if (damage < 1)
return;
uint32 skillid = effectInfo->MiscValue;
@@ -2378,7 +2379,7 @@ void Spell::EffectLearnSkill(SpellEffIndex /*effIndex*/)
return;
uint16 skillval = unitTarget->ToPlayer()->GetPureSkillValue(skillid);
- unitTarget->ToPlayer()->SetSkill(skillid, effectInfo->CalcValue(), std::max<uint16>(skillval, 1), tier->Value[damage - 1]);
+ unitTarget->ToPlayer()->SetSkill(skillid, damage, std::max<uint16>(skillval, 1), tier->Value[damage - 1]);
}
void Spell::EffectPlayMovie(SpellEffIndex /*effIndex*/)
@@ -4182,12 +4183,41 @@ void Spell::EffectSkinning(SpellEffIndex /*effIndex*/)
creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE);
creature->SetFlag(OBJECT_DYNAMIC_FLAGS, UNIT_DYNFLAG_LOOTABLE);
- int32 reqValue = targetLevel < 10 ? 0 : targetLevel < 20 ? (targetLevel-10)*10 : targetLevel*5;
+ if (skill == SKILL_SKINNING)
+ {
+ int32 reqValue;
+ if (targetLevel <= 10)
+ reqValue = 1;
+ else if (targetLevel < 20)
+ reqValue = (targetLevel - 10) * 10;
+ else if (targetLevel <= 73)
+ reqValue = targetLevel * 5;
+ else if (targetLevel < 80)
+ reqValue = targetLevel * 10 - 365;
+ else if (targetLevel <= 84)
+ reqValue = targetLevel * 5 + 35;
+ else if (targetLevel <= 87)
+ reqValue = targetLevel * 15 - 805;
+ else if (targetLevel <= 92)
+ reqValue = (targetLevel - 62) * 20;
+ else if (targetLevel <= 104)
+ reqValue = targetLevel * 5 + 175;
+ else if (targetLevel <= 107)
+ reqValue = targetLevel * 15 - 905;
+ else if (targetLevel <= 112)
+ reqValue = (targetLevel - 72) * 20;
+ else if (targetLevel <= 122)
+ reqValue = (targetLevel - 32) * 10;
+ else
+ reqValue = 900;
- int32 skillValue = m_caster->ToPlayer()->GetPureSkillValue(skill);
+ // TODO: Specialize skillid for each expansion
+ // new db field?
+ // tied to one of existing expansion fields in creature_template?
- // Double chances for elites
- m_caster->ToPlayer()->UpdateGatherSkill(skill, skillValue, reqValue, creature->isElite() ? 2 : 1);
+ // Double chances for elites
+ m_caster->ToPlayer()->UpdateGatherSkill(skill, damage, reqValue, creature->isElite() ? 2 : 1);
+ }
}
void Spell::EffectCharge(SpellEffIndex /*effIndex*/)