diff options
author | megamage <none@none> | 2009-03-28 16:26:31 -0600 |
---|---|---|
committer | megamage <none@none> | 2009-03-28 16:26:31 -0600 |
commit | 1299521d50503866cca9c41df8c5a4b20297312c (patch) | |
tree | 1eb8310d9e485d0df797dc3b7f04a3de77ba8108 /src/game/Player.cpp | |
parent | ce8462ccf9ba6730db6b1c17e4db95c0519a66e2 (diff) |
[7559] Implement function Player::RewardPlayerAndGroupAtEvent for reward (quest objective only) player and group at special kill-like events. Author: Ramses_II
Use it for Spell::EffectKillCredit and some dummy code.
--HG--
branch : trunk
Diffstat (limited to 'src/game/Player.cpp')
-rw-r--r-- | src/game/Player.cpp | 25 |
1 files changed, 25 insertions, 0 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)) |