diff options
author | Shauren <shauren.trinity@gmail.com> | 2011-06-15 20:46:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2011-06-15 20:46:49 +0200 |
commit | 50dbb8c8a548aa2b34aec9393dee69bb030968e8 (patch) | |
tree | ec2c958bf016577674260366a22185298b025124 /src | |
parent | 8b14aff9097bd18838f6f1322a0aa2822574c9f4 (diff) |
Core/Spells: Fixed spell effect quest complete when quest was already in target's quest log
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/SpellEffects.cpp | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 3255f818ddf..9627b5c4f83 100755 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5121,7 +5121,7 @@ void Spell::EffectScriptEffect(SpellEffIndex effIndex) if (chargesAura->ModCharges(-1)) m_caster->ToTempSummon()->UnSummon(); } - + return; } // Stoneclaw Totem @@ -5895,27 +5895,26 @@ void Spell::EffectReputation(SpellEffIndex effIndex) void Spell::EffectQuestComplete(SpellEffIndex effIndex) { - Player *pPlayer; - - if (m_caster->GetTypeId() == TYPEID_PLAYER) - pPlayer = (Player*)m_caster; - else if (unitTarget && unitTarget->GetTypeId() == TYPEID_PLAYER) - pPlayer = (Player*)unitTarget; + Player* player = NULL; + if (unitTarget && unitTarget->GetTypeId() == TYPEID_PLAYER) + player = (Player*)unitTarget; + else if (m_caster->GetTypeId() == TYPEID_PLAYER) + player = (Player*)m_caster; else return; - uint32 quest_id = m_spellInfo->EffectMiscValue[effIndex]; - if (quest_id) + uint32 questId = m_spellInfo->EffectMiscValue[effIndex]; + if (questId) { - Quest* pQuest = sObjectMgr->GetQuestTemplate(quest_id); - if (!pQuest || !pPlayer->CanTakeQuest(pQuest, false)) + Quest const* quest = sObjectMgr->GetQuestTemplate(questId); + if (!quest) return; - uint16 log_slot = pPlayer->FindQuestSlot(quest_id); - if (log_slot < MAX_QUEST_LOG_SIZE) - pPlayer->AreaExploredOrEventHappens(quest_id); - else if (!pPlayer->GetQuestRewardStatus(quest_id)) // never rewarded before - pPlayer->CompleteQuest(quest_id); // quest not in log - for internal use + uint16 logSlot = player->FindQuestSlot(questId); + if (logSlot < MAX_QUEST_LOG_SIZE) + player->AreaExploredOrEventHappens(questId); + else if (player->CanTakeQuest(quest, false)) // never rewarded before + player->CompleteQuest(questId); // quest not in log - for internal use } } |