From 298d32ecf7565549ed9f9f55dba3fd0032bed263 Mon Sep 17 00:00:00 2001 From: Cyberium Date: Fri, 13 Jan 2017 08:00:47 +0100 Subject: [PATCH] Fix skill upgrade for herbalism/mining/skinning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When loot is générated for an game object we cannot be anymore able to gain skill point. fix https://github.com/cmangos/issues/issues/42 --- src/game/SpellEffects.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index cf0a3f60c27..36e95429195 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -5310,10 +5310,8 @@ void Spell::EffectOpenLock(SpellEffectIndex eff_idx) if (itemTarget) itemTarget->SetFlag(ITEM_FIELD_FLAGS, ITEM_DYNFLAG_UNLOCKED); - SendLoot(guid, LOOT_SKINNING, LockType(m_spellInfo->EffectMiscValue[eff_idx])); - // not allow use skill grow at item base open - if (!m_CastItem && skillId != SKILL_NONE) + if (!m_CastItem && skillId != SKILL_NONE && !gameObjTarget->loot) { // update skill if really known if (uint32 pureSkillValue = player->GetPureSkillValue(skillId)) @@ -5332,6 +5330,8 @@ void Spell::EffectOpenLock(SpellEffectIndex eff_idx) } } } + + SendLoot(guid, LOOT_SKINNING, LockType(m_spellInfo->EffectMiscValue[eff_idx])); } void Spell::EffectSummonChangeItem(SpellEffectIndex eff_idx) @@ -11008,8 +11008,18 @@ void Spell::EffectSkinning(SpellEffectIndex /*eff_idx*/) uint32 skill = creature->GetCreatureInfo()->GetRequiredLootSkill(); Loot*& loot = unitTarget->loot; + if (!loot) + { loot = new Loot((Player*)m_caster, creature, LOOT_SKINNING); + + int32 reqValue = targetLevel < 10 ? 0 : targetLevel < 20 ? (targetLevel - 10) * 10 : targetLevel * 5; + + int32 skillValue = ((Player*)m_caster)->GetPureSkillValue(skill); + + // Double chances for elites + ((Player*)m_caster)->UpdateGatherSkill(skill, skillValue, reqValue, creature->IsElite() ? 2 : 1); + } else { if (loot->GetLootType() != LOOT_SKINNING) @@ -11021,13 +11031,6 @@ void Spell::EffectSkinning(SpellEffectIndex /*eff_idx*/) loot->ShowContentTo((Player*)m_caster); creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_SKINNABLE); - - int32 reqValue = targetLevel < 10 ? 0 : targetLevel < 20 ? (targetLevel - 10) * 10 : targetLevel * 5; - - int32 skillValue = ((Player*)m_caster)->GetPureSkillValue(skill); - - // Double chances for elites - ((Player*)m_caster)->UpdateGatherSkill(skill, skillValue, reqValue, creature->IsElite() ? 2 : 1); } void Spell::EffectCharge(SpellEffectIndex /*eff_idx*/)