feat(Hooks/PlayerScript): ShouldBeRewardedWithMoneyInsteadOfExp (#4445)

This commit is contained in:
Francesco Borzì
2021-02-09 20:09:41 +01:00
committed by GitHub
parent 639d49509d
commit 8915ab1362
4 changed files with 21 additions and 3 deletions
+7 -3
View File
@@ -16071,10 +16071,14 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver,
AddPct(XP, (*i)->GetAmount()); AddPct(XP, (*i)->GetAmount());
int32 moneyRew = 0; int32 moneyRew = 0;
if (getLevel() < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) if (getLevel() >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) || sScriptMgr->ShouldBeRewardedWithMoneyInsteadOfExp(this))
GiveXP(XP, nullptr); {
else
moneyRew = int32(quest->GetRewMoneyMaxLevel() * sWorld->getRate(RATE_DROP_MONEY)); 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 // Give player extra money if GetRewOrReqMoney > 0 and get ReqMoney if negative
if (quest->GetRewOrReqMoney()) if (quest->GetRewOrReqMoney())
+11
View File
@@ -1714,6 +1714,17 @@ bool ScriptMgr::CanJoinInBattlegroundQueue(Player* player, uint64 BattlemasterGu
return ret; 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) void ScriptMgr::OnBeforeTempSummonInitStats(Player* player, TempSummon* tempSummon, uint32& duration)
{ {
FOREACH_SCRIPT(PlayerScript)->OnBeforeTempSummonInitStats(player, tempSummon, duration); FOREACH_SCRIPT(PlayerScript)->OnBeforeTempSummonInitStats(player, tempSummon, duration);
+2
View File
@@ -936,6 +936,7 @@ public:
virtual void OnFirstLogin(Player* /*player*/) { } virtual void OnFirstLogin(Player* /*player*/) { }
virtual bool CanJoinInBattlegroundQueue(Player* /*player*/, uint64 /*BattlemasterGuid*/, BattlegroundTypeId /*BGTypeID*/, uint8 /*joinAsGroup*/, GroupJoinBattlegroundResult& /*err*/) { return true; } 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 // Called before the player's temporary summoned creature has initialized it's stats
virtual void OnBeforeTempSummonInitStats(Player* /*player*/, TempSummon* /*tempSummon*/, uint32& /*duration*/) { } virtual void OnBeforeTempSummonInitStats(Player* /*player*/, TempSummon* /*tempSummon*/, uint32& /*duration*/) { }
@@ -1394,6 +1395,7 @@ public: /* PlayerScript */
void OnFirstLogin(Player* player); void OnFirstLogin(Player* player);
void OnPlayerCompleteQuest(Player* player, Quest const* quest); void OnPlayerCompleteQuest(Player* player, Quest const* quest);
bool CanJoinInBattlegroundQueue(Player* player, uint64 BattlemasterGuid, BattlegroundTypeId BGTypeID, uint8 joinAsGroup, GroupJoinBattlegroundResult& err); 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 OnBeforeTempSummonInitStats(Player* player, TempSummon* tempSummon, uint32& duration);
void OnBeforeGuardianInitStatsForLevel(Player* player, Guardian* guardian, CreatureTemplate const* cinfo, PetType& petType); void OnBeforeGuardianInitStatsForLevel(Player* player, Guardian* guardian, CreatureTemplate const* cinfo, PetType& petType);
void OnAfterGuardianInitStatsForLevel(Player* player, Guardian* guardian); void OnAfterGuardianInitStatsForLevel(Player* player, Guardian* guardian);
@@ -819,6 +819,7 @@ ChatLogs.Guild = 0
ChatLogs.Public = 0 ChatLogs.Public = 0
# #
# WARNING: enabling this might cause issues to your addon channel
# ChatLogs.Addon # ChatLogs.Addon
# Description: Log addon messages. # Description: Log addon messages.
# Default: 0 - (Disabled) # Default: 0 - (Disabled)