diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 14016a01c..ccf2aec6d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -16071,10 +16071,14 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, AddPct(XP, (*i)->GetAmount()); int32 moneyRew = 0; - if (getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) - GiveXP(XP, nullptr); - else + if (getLevel() >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) || sScriptMgr->ShouldBeRewardedWithMoneyInsteadOfExp(this)) + { moneyRew = int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY)); + } + else + { + GiveXP(XP, nullptr); + } // Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative if (quest->GetRewOrReqMoney()) diff --git a/src/server/game/Scripting/ScriptMgr.cpp b/src/server/game/Scripting/ScriptMgr.cpp index 06008186e..75e55e1b8 100644 --- a/src/server/game/Scripting/ScriptMgr.cpp +++ b/src/server/game/Scripting/ScriptMgr.cpp @@ -1714,6 +1714,17 @@ bool ScriptMgr::CanJoinInBattlegroundQueue(Player* player, uint64 BattlemasterGu return ret; } +bool ScriptMgr::ShouldBeRewardedWithMoneyInsteadOfExp(Player* player) +{ + bool ret = false; // return false by default if not scripts + + FOR_SCRIPTS_RET(PlayerScript, itr, end, ret) + if (itr->second->ShouldBeRewardedWithMoneyInsteadOfExp(player)) + ret = true; // we change ret value only when a script returns true + + return ret; +} + void ScriptMgr::OnBeforeTempSummonInitStats(Player* player, TempSummon* tempSummon, uint32& duration) { FOREACH_SCRIPT(PlayerScript)->OnBeforeTempSummonInitStats(player, tempSummon, duration); diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index d7c9e64ec..90404e9b4 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -936,6 +936,7 @@ public: virtual void OnFirstLogin(Player* /*player*/) { } virtual bool CanJoinInBattlegroundQueue(Player* /*player*/, uint64 /*BattlemasterGuid*/, BattlegroundTypeId /*BGTypeID*/, uint8 /*joinAsGroup*/, GroupJoinBattlegroundResult& /*err*/) { return true; } + virtual bool ShouldBeRewardedWithMoneyInsteadOfExp(Player* /*player*/) { return false; } // Called before the player's temporary summoned creature has initialized it's stats virtual void OnBeforeTempSummonInitStats(Player* /*player*/, TempSummon* /*tempSummon*/, uint32& /*duration*/) { } @@ -1394,6 +1395,7 @@ public: /* PlayerScript */ void OnFirstLogin(Player* player); void OnPlayerCompleteQuest(Player* player, Quest const* quest); bool CanJoinInBattlegroundQueue(Player* player, uint64 BattlemasterGuid, BattlegroundTypeId BGTypeID, uint8 joinAsGroup, GroupJoinBattlegroundResult& err); + bool ShouldBeRewardedWithMoneyInsteadOfExp(Player* player); void OnBeforeTempSummonInitStats(Player* player, TempSummon* tempSummon, uint32& duration); void OnBeforeGuardianInitStatsForLevel(Player* player, Guardian* guardian, CreatureTemplate const* cinfo, PetType& petType); void OnAfterGuardianInitStatsForLevel(Player* player, Guardian* guardian); diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index da69ad405..7080dd378 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -819,6 +819,7 @@ ChatLogs.Guild = 0 ChatLogs.Public = 0 # +# WARNING: enabling this might cause issues to your addon channel # ChatLogs.Addon # Description: Log addon messages. # Default: 0 - (Disabled)