aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/DungeonFinding/LFGMgr.cpp122
1 files changed, 63 insertions, 59 deletions
diff --git a/src/server/game/DungeonFinding/LFGMgr.cpp b/src/server/game/DungeonFinding/LFGMgr.cpp
index 056ffed393c..0cce09ca896 100644
--- a/src/server/game/DungeonFinding/LFGMgr.cpp
+++ b/src/server/game/DungeonFinding/LFGMgr.cpp
@@ -1523,6 +1523,69 @@ void LFGMgr::TeleportPlayer(Player *plr, bool out)
}
}
+/// <summary>
+/// Give completion reward to player
+/// </summary>
+/// <param name="const uint32">dungeonId</param>
+/// <param name="Player *">player</param>
+void LFGMgr::RewardDungeonDoneFor(const uint32 dungeonId, Player *player)
+{
+ Group* group = player->GetGroup();
+ if (!group || !group->isLFGGroup())
+ return;
+
+ if (!group->isLfgDungeonComplete())
+ group->SetLfgStatus(LFG_STATUS_COMPLETE);
+
+ player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS, 1);
+
+ if (isRandomDungeon(dungeonId))
+ player->SetLfgDungeonDone(dungeonId);
+
+ LfgReward const* reward = GetRandomDungeonReward(dungeonId, player->getLevel());
+ if (!reward)
+ return;
+
+ uint8 index = player->isLfgDungeonDone(dungeonId) ? 1 : 0;
+ Quest const* qReward = sObjectMgr.GetQuestTemplate(reward->reward[index].questId);
+ if (!qReward)
+ return;
+
+ if (qReward->GetRewItemsCount() > 0)
+ {
+ for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i)
+ {
+ if (uint32 itemId = qReward->RewItemId[i])
+ {
+ ItemPosCountVec dest;
+ if (player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, qReward->RewItemCount[i]) == EQUIP_ERR_OK)
+ {
+ Item* item = player->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
+ player->SendNewItem(item, qReward->RewItemCount[i], true, false);
+ }
+ }
+ }
+ }
+
+ // Not give XP in case already completed once repeatable quest
+ uint32 XP = qReward->XPValue(player) * sWorld.getRate(RATE_XP_QUEST);
+
+ XP += (5 - group->GetMembersCount()) * reward->reward[index].variableXP;
+
+ // Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative
+ int32 moneyRew = qReward->GetRewOrReqMoney();
+
+ if (player->getLevel() < sWorld.getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
+ player->GiveXP(XP, NULL);
+ else
+ moneyRew += int32(qReward->GetRewMoneyMaxLevel() * sWorld.getRate(RATE_DROP_MONEY));
+
+ moneyRew += (5 - group->GetMembersCount()) * reward->reward[index].variableMoney;
+
+ if (moneyRew)
+ player->ModifyMoney(moneyRew);
+}
+
// --------------------------------------------------------------------------//
// Packet Functions
// --------------------------------------------------------------------------//
@@ -1877,65 +1940,6 @@ void LFGMgr::BuildPlayerLockDungeonBlock(WorldPacket &data, LfgLockStatusSet *lo
delete lockSet;
}
-/// <summary>
-/// Give completion reward to player
-/// </summary>
-/// <param name="const uint32">dungeonId</param>
-/// <param name="Player *">player</param>
-void LFGMgr::RewardDungeonDoneFor(const uint32 dungeonId, Player *player)
-{
- player->GetAchievementMgr().UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_USE_LFD_TO_GROUP_WITH_PLAYERS, 1);
-
- if (isRandomDungeon(dungeonId))
- player->SetLfgDungeonDone(dungeonId);
-
- LfgReward const* reward = GetRandomDungeonReward(dungeonId, player->getLevel());
- if (!reward)
- return;
-
- uint8 index = player->isLfgDungeonDone(dungeonId) ? 1 : 0;
- Quest const* qReward = sObjectMgr.GetQuestTemplate(reward->reward[index].questId);
- if (!qReward)
- return;
-
- if (qReward->GetRewItemsCount() > 0)
- {
- for (uint32 i = 0; i < QUEST_REWARDS_COUNT; ++i)
- {
- if (uint32 itemId = qReward->RewItemId[i])
- {
- ItemPosCountVec dest;
- if (player->CanStoreNewItem(NULL_BAG, NULL_SLOT, dest, itemId, qReward->RewItemCount[i]) == EQUIP_ERR_OK)
- {
- Item* item = player->StoreNewItem(dest, itemId, true, Item::GenerateItemRandomPropertyId(itemId));
- player->SendNewItem(item, qReward->RewItemCount[i], true, false);
- }
- }
- }
- }
-
- // Not give XP in case already completed once repeatable quest
- uint32 XP = qReward->XPValue(player) * sWorld.getRate(RATE_XP_QUEST);
-
- Group* group = player->GetGroup();
- if (group)
- XP += (5 - group->GetMembersCount()) * reward->reward[index].variableXP;
-
- // Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative
- int32 moneyRew = qReward->GetRewOrReqMoney();
-
- if (player->getLevel() < sWorld.getIntConfig(CONFIG_MAX_PLAYER_LEVEL))
- player->GiveXP(XP, NULL);
- else
- moneyRew += int32(qReward->GetRewMoneyMaxLevel() * sWorld.getRate(RATE_DROP_MONEY));
-
- if (group)
- moneyRew += (5 - group->GetMembersCount()) * reward->reward[index].variableMoney;
-
- if (moneyRew)
- player->ModifyMoney(moneyRew);
-}
-
// --------------------------------------------------------------------------//
// Auxiliar Functions
// --------------------------------------------------------------------------//