diff options
-rw-r--r-- | src/server/game/DungeonFinding/LFGMgr.cpp | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp index 90f1970ffea..1f1ec3f3919 100644 --- a/src/server/game/DungeonFinding/LFGMgr.cpp +++ b/src/server/game/DungeonFinding/LFGMgr.cpp @@ -1534,23 +1534,40 @@ void LFGMgr::RewardDungeonDoneFor(const uint32 dungeonId, Player *player) if (!group || !group->isLFGGroup()) return; + // Mark dungeon as finished if (!group->isLfgDungeonComplete()) group->SetLfgStatus(LFG_STATUS_COMPLETE); - player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS, 1); + // Clear player related lfg stuff + uint32 rDungeonId = *player->GetLfgDungeons()->begin(); + player->GetLfgDungeons()->clear(); + player->SetLfgRoles(ROLE_NONE); + + // Give rewards only if its a random dungeon + LFGDungeonEntry const *dungeon = sLFGDungeonStore.LookupEntry(dungeonId); + if (!dungeon || dungeon->type != LFG_TYPE_RANDOM) + return; - if (isRandomDungeon(dungeonId)) - player->SetLfgDungeonDone(dungeonId); + // Mark random dungeon as complete + uint8 index = player->isLfgDungeonDone(rDungeonId) ? 1 : 0; + if (!index) + player->SetLfgDungeonDone(rDungeonId); - LfgReward const* reward = GetRandomDungeonReward(dungeonId, player->getLevel()); + // Update achievements + if (dungeon->difficulty == DUNGEON_DIFFICULTY_HEROIC) + player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS, 1); + + LfgReward const* reward = GetRandomDungeonReward(rDungeonId, player->getLevel()); if (!reward) return; - uint8 index = player->isLfgDungeonDone(dungeonId) ? 1 : 0; Quest const* qReward = sObjectMgr.GetQuestTemplate(reward->reward[index].questId); if (!qReward) return; + // Give rewards + SendLfgPlayerReward(player); + if (qReward->GetRewItemsCount() > 0) { for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i) @@ -1570,7 +1587,7 @@ void LFGMgr::RewardDungeonDoneFor(const uint32 dungeonId, Player *player) // Not give XP in case already completed once repeatable quest uint32 XP = uint32(qReward->XPValue(player) * sWorld.getRate(RATE_XP_QUEST)); - XP += (5 - group->GetMembersCount()) * reward->reward[index].variableXP; + XP += (MAXGROUPSIZE - group->GetMembersCount()) * reward->reward[index].variableXP; // Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative int32 moneyRew = qReward->GetRewOrReqMoney(); @@ -1580,7 +1597,7 @@ void LFGMgr::RewardDungeonDoneFor(const uint32 dungeonId, Player *player) else moneyRew += int32(qReward->GetRewMoneyMaxLevel() * sWorld.getRate(RATE_DROP_MONEY)); - moneyRew += (5 - group->GetMembersCount()) * reward->reward[index].variableMoney; + moneyRew += (MAXGROUPSIZE - group->GetMembersCount()) * reward->reward[index].variableMoney; if (moneyRew) player->ModifyMoney(moneyRew); |