diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 3 | ||||
| -rw-r--r-- | src/server/game/Groups/Group.cpp | 18 | ||||
| -rw-r--r-- | src/server/game/Handlers/LootHandler.cpp | 2 |
3 files changed, 13 insertions, 10 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 0be87aeee6e..0f4058d6bd2 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -23754,6 +23754,9 @@ bool Player::IsAtGroupRewardDistance(WorldObject const* pRewardSource) const if (player->GetMapId() != pRewardSource->GetMapId() || player->GetInstanceId() != pRewardSource->GetInstanceId()) return false; + if (player->GetMap()->IsDungeon()) + return true; + return pRewardSource->GetDistance(player) <= sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE); } diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index 0d2fd19f2d5..dca2a887200 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -979,7 +979,7 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject) continue; if (i->AllowedForPlayer(member)) { - if (member->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (member->IsAtGroupRewardDistance(pLootedObject)) { r->totalPlayersRolling++; @@ -1064,7 +1064,7 @@ void Group::GroupLoot(Loot* loot, WorldObject* pLootedObject) if (i->AllowedForPlayer(member)) { - if (member->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (member->IsAtGroupRewardDistance(pLootedObject)) { r->totalPlayersRolling++; r->playerVote[member->GetGUID()] = NOT_EMITED_YET; @@ -1123,7 +1123,7 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject) continue; bool allowedForPlayer = i->AllowedForPlayer(playerToRoll); - if (allowedForPlayer && playerToRoll->IsWithinDistInMap(lootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (allowedForPlayer && playerToRoll->IsAtGroupRewardDistance(lootedObject)) { r->totalPlayersRolling++; if (playerToRoll->GetPassOnGroupLoot()) @@ -1198,7 +1198,7 @@ void Group::NeedBeforeGreed(Loot* loot, WorldObject* lootedObject) continue; bool allowedForPlayer = i->AllowedForPlayer(playerToRoll); - if (allowedForPlayer && playerToRoll->IsWithinDistInMap(lootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (allowedForPlayer && playerToRoll->IsAtGroupRewardDistance(lootedObject)) { r->totalPlayersRolling++; r->playerVote[playerToRoll->GetGUID()] = NOT_EMITED_YET; @@ -1274,7 +1274,7 @@ void Group::MasterLoot(Loot* loot, WorldObject* pLootedObject) if (!looter->IsInWorld()) continue; - if (looter->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (looter->IsAtGroupRewardDistance(pLootedObject)) { data << looter->GetGUID(); ++real_count; @@ -1286,7 +1286,7 @@ void Group::MasterLoot(Loot* loot, WorldObject* pLootedObject) for (GroupReference* itr = GetFirstMember(); itr != NULL; itr = itr->next()) { Player* looter = itr->GetSource(); - if (looter->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (looter->IsAtGroupRewardDistance(pLootedObject)) looter->GetSession()->SendPacket(&data); } } @@ -1835,7 +1835,7 @@ void Group::UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed) { // not update if only update if need and ok Player* looter = ObjectAccessor::FindPlayer(guid_itr->guid); - if (looter && looter->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (looter && looter->IsAtGroupRewardDistance(pLootedObject)) return; } ++guid_itr; @@ -1846,7 +1846,7 @@ void Group::UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed) for (member_citerator itr = guid_itr; itr != m_memberSlots.end(); ++itr) { if (Player* player = ObjectAccessor::FindPlayer(itr->guid)) - if (player->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (player->IsAtGroupRewardDistance(pLootedObject)) { pNewLooter = player; break; @@ -1859,7 +1859,7 @@ void Group::UpdateLooterGuid(WorldObject* pLootedObject, bool ifneed) for (member_citerator itr = m_memberSlots.begin(); itr != guid_itr; ++itr) { if (Player* player = ObjectAccessor::FindPlayer(itr->guid)) - if (player->IsWithinDistInMap(pLootedObject, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (player->IsAtGroupRewardDistance(pLootedObject)) { pNewLooter = player; break; diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index ddd084cbd9d..d53c20329b3 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -178,7 +178,7 @@ void WorldSession::HandleLootMoneyOpcode(WorldPackets::Loot::LootMoney& /*packet if (!member) continue; - if (player->IsWithinDistInMap(member, sWorld->getFloatConfig(CONFIG_GROUP_XP_DISTANCE), false)) + if (player->IsAtGroupRewardDistance(member)) playersNear.push_back(member); } |
