diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/game/Player.cpp | 25 | ||||
-rw-r--r-- | src/game/Player.h | 1 | ||||
-rw-r--r-- | src/game/SpellEffects.cpp | 4 |
3 files changed, 28 insertions, 2 deletions
diff --git a/src/game/Player.cpp b/src/game/Player.cpp index cb63810fbd3..548ddfc3c72 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -19277,6 +19277,31 @@ bool Player::RewardPlayerAndGroupAtKill(Unit* pVictim) return xp || honored_kill; } +void Player::RewardPlayerAndGroupAtEvent(uint32 creature_id, WorldObject* pRewardSource) +{ + uint64 creature_guid = pRewardSource->GetTypeId()==TYPEID_UNIT ? pRewardSource->GetGUID() : uint64(0); + + // prepare data for near group iteration + if(Group *pGroup = GetGroup()) + { + for(GroupReference *itr = pGroup->GetFirstMember(); itr != NULL; itr = itr->next()) + { + Player* pGroupGuy = itr->getSource(); + if(!pGroupGuy) + continue; + + if(!pGroupGuy->IsAtGroupRewardDistance(pRewardSource)) + continue; // member (alive or dead) or his corpse at req. distance + + // quest objectives updated only for alive group member or dead but with not released body + if(pGroupGuy->isAlive()|| !pGroupGuy->GetCorpse()) + pGroupGuy->KilledMonster(creature_id, creature_guid); + } + } + else // if (!pGroup) + KilledMonster(creature_id, creature_guid); +} + bool Player::IsAtGroupRewardDistance(WorldObject const* pRewardSource) const { if(pRewardSource->GetDistance(this) <= sWorld.getConfig(CONFIG_GROUP_XP_DISTANCE)) diff --git a/src/game/Player.h b/src/game/Player.h index 74389247a9f..e1f79f993a1 100644 --- a/src/game/Player.h +++ b/src/game/Player.h @@ -1675,6 +1675,7 @@ class TRINITY_DLL_SPEC Player : public Unit bool IsAtGroupRewardDistance(WorldObject const* pRewardSource) const; bool RewardPlayerAndGroupAtKill(Unit* pVictim); + void RewardPlayerAndGroupAtEvent(uint32 creature_id,WorldObject* pRewardSource); bool isHonorOrXPTarget(Unit* pVictim); ReputationMgr& GetReputationMgr() { return m_reputationMgr; } diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp index 9f4b240f6b4..e7ac5f71d02 100644 --- a/src/game/SpellEffects.cpp +++ b/src/game/SpellEffects.cpp @@ -1183,7 +1183,7 @@ void Spell::EffectDummy(uint32 i) return; pCreature->SetHealth(health); - ((Player*)m_caster)->KilledMonster(16992,pCreature->GetGUID()); + ((Player*)m_caster)->RewardPlayerAndGroupAtEvent(16992,pCreature); if (pCreature->IsAIEnabled) pCreature->AI()->AttackStart(m_caster); @@ -6357,7 +6357,7 @@ void Spell::EffectKillCredit(uint32 i) if(!unitTarget || unitTarget->GetTypeId() != TYPEID_PLAYER) return; - ((Player*)unitTarget)->KilledMonster(m_spellInfo->EffectMiscValue[i], 0); + ((Player*)unitTarget)->RewardPlayerAndGroupAtEvent(m_spellInfo->EffectMiscValue[i], unitTarget); } void Spell::EffectQuestFail(uint32 i) |