From 59fefdfdc70566310a766c8bcac071f0fbfb9191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCssig?= Date: Tue, 4 Feb 2025 16:39:20 +0100 Subject: [PATCH] Include more ReputationSources --- src/server/game/Battlegrounds/Battleground.cpp | 4 ++++ src/server/game/Handlers/CharacterHandler.cpp | 7 +++++-- src/server/game/Reputation/ReputationSource.h | 2 ++ src/server/scripts/Commands/cs_modify.cpp | 6 ++++-- src/server/scripts/Commands/cs_quest.cpp | 9 +++++++-- src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp | 9 +++++++-- 6 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/server/game/Battlegrounds/Battleground.cpp b/src/server/game/Battlegrounds/Battleground.cpp index 454bb3e4f875c5..8dac92a435f064 100644 --- a/src/server/game/Battlegrounds/Battleground.cpp +++ b/src/server/game/Battlegrounds/Battleground.cpp @@ -744,7 +744,11 @@ void Battleground::RewardReputationToTeam(uint32 factionId, uint32 reputation, T AddPct(repGain, itr->second->GetTotalAuraModifier(SPELL_AURA_MOD_REPUTATION_GAIN)); AddPct(repGain, itr->second->GetTotalAuraModifierByMiscValue(SPELL_AURA_MOD_FACTION_REPUTATION_GAIN, realFactionId)); if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(realFactionId)) + { + ScriptMgr::instance()->OnBeforePlayerReputationChange(itr->second, factionId, repGain, ReputationSource::PvP); itr->second->GetReputationMgr().ModifyReputation(factionEntry, repGain); + + } } } diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index b5d85760e5ad9c..83e24921736ffe 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1017,11 +1017,14 @@ void WorldSession::HandlePlayerLoginFromDB(LoginQueryHolder const& holder) { ReputationMgr& repMgr = pCurrChar->GetReputationMgr(); - auto SendFullReputation = [&repMgr](std::initializer_list factionsList) + auto SendFullReputation = [&repMgr, pCurrChar](std::initializer_list factionsList) { for (auto const& itr : factionsList) { - repMgr.SetOneFactionReputation(sFactionStore.LookupEntry(itr), 42999.f, false); + auto faction = sFactionStore.LookupEntry(itr); + float reputation = 42999.f; + ScriptMgr::instance()->OnBeforePlayerReputationChange(pCurrChar, faction->ID, reputation, ReputationSource::Config); + repMgr.SetOneFactionReputation(sFactionStore.LookupEntry(itr), reputation, false); } }; diff --git a/src/server/game/Reputation/ReputationSource.h b/src/server/game/Reputation/ReputationSource.h index e710dae2f68590..e3f55e624f473b 100644 --- a/src/server/game/Reputation/ReputationSource.h +++ b/src/server/game/Reputation/ReputationSource.h @@ -20,6 +20,8 @@ enum class ReputationSource : uint8 { RepeatableQuest, /// The player used a spell Spell, + // The player get reputation by doing PvP related tasks + PvP, /// The player get reputation by a console command Console, /// The player get some reputation by server configuration diff --git a/src/server/scripts/Commands/cs_modify.cpp b/src/server/scripts/Commands/cs_modify.cpp index df975ac6e25267..5e59f4575c1e80 100644 --- a/src/server/scripts/Commands/cs_modify.cpp +++ b/src/server/scripts/Commands/cs_modify.cpp @@ -29,6 +29,7 @@ EndScriptData */ #include "Pet.h" #include "Player.h" #include "ReputationMgr.h" +#include "ScriptMgr.h" #include "StringConvert.h" using namespace Acore::ChatCommands; @@ -826,8 +827,9 @@ class modify_commandscript : public CommandScript handler->SendErrorMessage(LANG_COMMAND_FACTION_NOREP_ERROR, factionEntry->name[handler->GetSessionDbcLocale()], factionId); return false; } - - target->GetReputationMgr().SetOneFactionReputation(factionEntry, float(amount), false); + float rep = target->GetReputationMgr().GetReputation(factionId) - float(amount); + ScriptMgr::instance()->OnBeforePlayerReputationChange(target, factionId, rep, ReputationSource::Console); + target->GetReputationMgr().SetOneFactionReputation(factionEntry, rep, false); target->GetReputationMgr().SendState(target->GetReputationMgr().GetState(factionEntry)); handler->PSendSysMessage(LANG_COMMAND_MODIFY_REP, factionEntry->name[handler->GetSessionDbcLocale()], factionId, diff --git a/src/server/scripts/Commands/cs_quest.cpp b/src/server/scripts/Commands/cs_quest.cpp index ba7cf4ebb606a6..28fe1ae358e8e8 100644 --- a/src/server/scripts/Commands/cs_quest.cpp +++ b/src/server/scripts/Commands/cs_quest.cpp @@ -28,6 +28,7 @@ EndScriptData */ #include "ObjectMgr.h" #include "Player.h" #include "ReputationMgr.h" +#include "ScriptMgr.h" using namespace Acore::ChatCommands; @@ -309,7 +310,9 @@ class quest_commandscript : public CommandScript { if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(repFaction)) { - player->GetReputationMgr().SetReputation(factionEntry, static_cast(repValue)); + auto repDiv = static_cast(repValue - curRep); + ScriptMgr::instance()->OnBeforePlayerReputationChange(player, repFaction, repDiv, ReputationSource::Console); + player->GetReputationMgr().SetReputation(factionEntry, repDiv + curRep); } } } @@ -323,7 +326,9 @@ class quest_commandscript : public CommandScript { if (FactionEntry const* factionEntry = sFactionStore.LookupEntry(repFaction)) { - player->GetReputationMgr().SetReputation(factionEntry, static_cast(repValue2)); + auto repDiv = static_cast(repValue2 - curRep); + ScriptMgr::instance()->OnBeforePlayerReputationChange(player, repFaction, repDiv, ReputationSource::Console); + player->GetReputationMgr().SetReputation(factionEntry, repDiv + curRep); } } } diff --git a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp index 357f810ea81ba6..a0d099d09e57d0 100644 --- a/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp +++ b/src/server/scripts/OutdoorPvP/OutdoorPvPSI.cpp @@ -25,6 +25,7 @@ #include "OutdoorPvPScript.h" #include "Player.h" #include "ReputationMgr.h" +#include "ScriptMgr.h" #include "Transport.h" #include "World.h" #include "WorldPacket.h" @@ -114,7 +115,9 @@ bool OutdoorPvPSI::HandleAreaTrigger(Player* player, uint32 trigger) // add 19 honor player->RewardHonor(nullptr, 1, 19); // add 20 cenarion circle repu - player->GetReputationMgr().ModifyReputation(sFactionStore.LookupEntry(609), 20.f); + float reputation = 20.f; + ScriptMgr::instance()->OnBeforePlayerReputationChange(player, 609, reputation, ReputationSource::PvP); + player->GetReputationMgr().ModifyReputation(sFactionStore.LookupEntry(609), reputation); // complete quest player->KilledMonsterCredit(SI_TURNIN_QUEST_CM_A); } @@ -140,7 +143,9 @@ bool OutdoorPvPSI::HandleAreaTrigger(Player* player, uint32 trigger) // add 19 honor player->RewardHonor(nullptr, 1, 19); // add 20 cenarion circle repu - player->GetReputationMgr().ModifyReputation(sFactionStore.LookupEntry(609), 20.f); + float reputation = 20.f; + ScriptMgr::instance()->OnBeforePlayerReputationChange(player, 609, reputation, ReputationSource::PvP); + player->GetReputationMgr().ModifyReputation(sFactionStore.LookupEntry(609), reputation); // complete quest player->KilledMonsterCredit(SI_TURNIN_QUEST_CM_H); }