diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 031d12ea4..7fdbb4f19 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -15379,9 +15379,9 @@ uint16 Player::GetMaxSkillValueForLevel() const return result; } -float Player::GetQuestRate() +float Player::GetQuestRate(bool isDFQuest) { - float result = sWorld->getRate(RATE_XP_QUEST); + float result = isDFQuest ? sWorld->getRate(RATE_XP_QUEST_DF) : sWorld->getRate(RATE_XP_QUEST); sScriptMgr->OnGetQuestRate(this, result); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c8fedc792..9469bbab0 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1412,7 +1412,7 @@ public: void RemoveRewardedQuest(uint32 questId, bool update = true); void SendQuestUpdate(uint32 questId); QuestGiverStatus GetQuestDialogStatus(Object* questGiver); - float GetQuestRate(); + float GetQuestRate(bool isDFQuest = false); void SetDailyQuestStatus(uint32 quest_id); bool IsDailyQuestDone(uint32 quest_id); void SetWeeklyQuestStatus(uint32 quest_id); diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index 2c5ccff18..bfdbf4c79 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -726,7 +726,7 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, bool rewarded = IsQuestRewarded(quest_id) && !quest->IsDFQuest(); // Not give XP in case already completed once repeatable quest - uint32 XP = rewarded ? 0 : uint32(quest->XPValue(getLevel()) * GetQuestRate()); + uint32 XP = rewarded ? 0 : uint32(quest->XPValue(getLevel()) * GetQuestRate(quest->IsDFQuest())); // handle SPELL_AURA_MOD_XP_QUEST_PCT auras Unit::AuraEffectList const& ModXPPctAuras = GetAuraEffectsByType(SPELL_AURA_MOD_XP_QUEST_PCT); diff --git a/src/server/game/World/IWorld.h b/src/server/game/World/IWorld.h index 5582c43f8..924ba75e5 100644 --- a/src/server/game/World/IWorld.h +++ b/src/server/game/World/IWorld.h @@ -439,6 +439,7 @@ enum Rates RATE_XP_KILL, RATE_XP_BG_KILL, RATE_XP_QUEST, + RATE_XP_QUEST_DF, RATE_XP_EXPLORE, RATE_XP_PET, RATE_XP_PET_NEXT_LEVEL, diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index c79390c02..89c74d603 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -506,6 +506,7 @@ void World::LoadConfigSettings(bool reload) rate_values[RATE_XP_KILL] = sConfigMgr->GetOption("Rate.XP.Kill", 1.0f); rate_values[RATE_XP_BG_KILL] = sConfigMgr->GetOption("Rate.XP.BattlegroundKill", 1.0f); rate_values[RATE_XP_QUEST] = sConfigMgr->GetOption("Rate.XP.Quest", 1.0f); + rate_values[RATE_XP_QUEST_DF] = sConfigMgr->GetOption("Rate.XP.Quest.DF", 1.0f); rate_values[RATE_XP_EXPLORE] = sConfigMgr->GetOption("Rate.XP.Explore", 1.0f); rate_values[RATE_XP_PET] = sConfigMgr->GetOption("Rate.XP.Pet", 1.0f); rate_values[RATE_XP_PET_NEXT_LEVEL] = sConfigMgr->GetOption("Rate.Pet.LevelXP", 0.05f); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index 64c0c024c..6766a477b 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -2252,13 +2252,15 @@ Rate.Drop.Item.ReferencedAmount = 1 # Description: Experience rates (outside battleground) # Default: 1 - (Rate.XP.Kill) # 1 - (Rate.XP.Quest) +# 1 - (Rate.XP.Quest.DF) - Dungeon Finder/LFG quests only. # 1 - (Rate.XP.Explore) # 1 - (Rate.XP.Pet) -Rate.XP.Kill = 1 -Rate.XP.Quest = 1 -Rate.XP.Explore = 1 -Rate.XP.Pet = 1 +Rate.XP.Kill = 1 +Rate.XP.Quest = 1 +Rate.XP.Quest.DF = 1 +Rate.XP.Explore = 1 +Rate.XP.Pet = 1 # # Rate.XP.BattlegroundKill