diff options
| author | Subv <subv2112@gmail.com> | 2014-06-24 20:04:07 -0500 |
|---|---|---|
| committer | Subv <subv2112@gmail.com> | 2014-06-24 20:04:26 -0500 |
| commit | a0fedd1d781bd6a4c6f2790e012a0f3ee12ccbf0 (patch) | |
| tree | 32e1fc0f64ae02969241a61c89707e5ba1a2256b /src/server/game/Spells/SpellEffects.cpp | |
| parent | cac491bef8c60be0a8b20e6d49480224e50ba0a1 (diff) | |
Core/Skinning: Fixed the creatures becoming non-skinnable even before looting them completely.
Closes #5318
Diffstat (limited to 'src/server/game/Spells/SpellEffects.cpp')
| -rw-r--r-- | src/server/game/Spells/SpellEffects.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 9cf0e1ae45c..0a43c5a2c45 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4702,15 +4702,28 @@ void Spell::EffectSkinning(SpellEffIndex /*effIndex*/) uint32 skill = creature->GetCreatureTemplate()->GetRequiredLootSkill(); + bool awardPoints = true; + + // Check if a skinning loot table was already generated for this creature + if (creature->loot.loot_type == LOOT_SKINNING) + { + if (creature->GetSkinner() != m_caster->GetGUID()) + return; + + awardPoints = false; // Do not grant skill points for this loot, they were already granted the first time. + } + else + creature->SetSkinner(m_caster->GetGUID()); + m_caster->ToPlayer()->SendLoot(creature->GetGUID(), LOOT_SKINNING); - creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); int32 reqValue = targetLevel < 10 ? 0 : targetLevel < 20 ? (targetLevel-10)*10 : targetLevel*5; int32 skillValue = m_caster->ToPlayer()->GetPureSkillValue(skill); // Double chances for elites - m_caster->ToPlayer()->UpdateGatherSkill(skill, skillValue, reqValue, creature->isElite() ? 2 : 1); + if (awardPoints) + m_caster->ToPlayer()->UpdateGatherSkill(skill, skillValue, reqValue, creature->isElite() ? 2 : 1); } void Spell::EffectCharge(SpellEffIndex /*effIndex*/) |
