feat(Core/Hooks): Add the KillRewarder reference to the OnRewardKillRewarder hook. (#18290)

* Another hackfix attempt at warden payload forcechecks ban fix.

* Revert last commit, interrupt all forcechecks instead of just _dataSent ones.

* Add rewarder parameter to OnRewardKillRewarder hook.

* Undo old warden changes.

* Removed too much!
This commit is contained in:
AnchyDev
2024-02-11 07:58:49 +11:00
committed by GitHub
parent 6b1dd7e19e
commit 1d8c4056b3
5 changed files with 19 additions and 5 deletions
@@ -204,12 +204,13 @@ void KillRewarder::_RewardPlayer(Player* player, bool isDungeon)
if (_victim->GetTypeId() == TYPEID_PLAYER) if (_victim->GetTypeId() == TYPEID_PLAYER)
player->KilledPlayerCredit(); player->KilledPlayerCredit();
} }
// Give XP only in PvE or in battlegrounds. // Give XP only in PvE or in battlegrounds.
// Give reputation and kill credit only in PvE. // Give reputation and kill credit only in PvE.
if (!_isPvP || _isBattleGround) if (!_isPvP || _isBattleGround)
{ {
float xpRate = _group ? _groupRate * float(player->GetLevel()) / _aliveSumLevel : /*Personal rate is 100%.*/ 1.0f; // Group rate depends on the sum of levels. float xpRate = _group ? _groupRate * float(player->GetLevel()) / _aliveSumLevel : /*Personal rate is 100%.*/ 1.0f; // Group rate depends on the sum of levels.
sScriptMgr->OnRewardKillRewarder(player, isDungeon, xpRate); // Personal rate is 100%. sScriptMgr->OnRewardKillRewarder(player, this, isDungeon, xpRate); // Personal rate is 100%.
if (_xp) if (_xp)
{ {
@@ -290,3 +291,13 @@ void KillRewarder::Reward()
if (Map* map = _victim->FindMap()) if (Map* map = _victim->FindMap())
map->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim); map->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim);
} }
Unit* KillRewarder::GetVictim()
{
return _victim;
}
Player* KillRewarder::GetKiller()
{
return _killer;
}
@@ -30,6 +30,8 @@ public:
KillRewarder(Player* killer, Unit* victim, bool isBattleGround); KillRewarder(Player* killer, Unit* victim, bool isBattleGround);
void Reward(); void Reward();
Unit* GetVictim();
Player* GetKiller();
private: private:
void _InitXP(Player* player); void _InitXP(Player* player);
@@ -992,11 +992,11 @@ void ScriptMgr::PetitionShowList(Player* player, Creature* creature, uint32& Cha
}); });
} }
void ScriptMgr::OnRewardKillRewarder(Player* player, bool isDungeon, float& rate) void ScriptMgr::OnRewardKillRewarder(Player* player, KillRewarder* rewarder, bool isDungeon, float& rate)
{ {
ExecuteScript<PlayerScript>([&](PlayerScript* script) ExecuteScript<PlayerScript>([&](PlayerScript* script)
{ {
script->OnRewardKillRewarder(player, isDungeon, rate); script->OnRewardKillRewarder(player, rewarder, isDungeon, rate);
}); });
} }
@@ -22,6 +22,7 @@
// TODO to remove // TODO to remove
#include "AchievementMgr.h" #include "AchievementMgr.h"
#include "KillRewarder.h"
class PlayerScript : public ScriptObject class PlayerScript : public ScriptObject
{ {
@@ -314,7 +315,7 @@ public:
virtual void PetitionShowList(Player* /*player*/, Creature* /*creature*/, uint32& /*CharterEntry*/, uint32& /*CharterDispayID*/, uint32& /*CharterCost*/) { } virtual void PetitionShowList(Player* /*player*/, Creature* /*creature*/, uint32& /*CharterEntry*/, uint32& /*CharterDispayID*/, uint32& /*CharterCost*/) { }
virtual void OnRewardKillRewarder(Player* /*player*/, bool /*isDungeon*/, float& /*rate*/) { } virtual void OnRewardKillRewarder(Player* /*player*/, KillRewarder* /*rewarder*/, bool /*isDungeon*/, float& /*rate*/) { }
[[nodiscard]] virtual bool CanGiveMailRewardAtGiveLevel(Player* /*player*/, uint8 /*level*/) { return true; } [[nodiscard]] virtual bool CanGiveMailRewardAtGiveLevel(Player* /*player*/, uint8 /*level*/) { return true; }
+1 -1
View File
@@ -397,7 +397,7 @@ public: /* PlayerScript */
bool CanSendMail(Player* player, ObjectGuid receiverGuid, ObjectGuid mailbox, std::string& subject, std::string& body, uint32 money, uint32 COD, Item* item); bool CanSendMail(Player* player, ObjectGuid receiverGuid, ObjectGuid mailbox, std::string& subject, std::string& body, uint32 money, uint32 COD, Item* item);
void PetitionBuy(Player* player, Creature* creature, uint32& charterid, uint32& cost, uint32& type); void PetitionBuy(Player* player, Creature* creature, uint32& charterid, uint32& cost, uint32& type);
void PetitionShowList(Player* player, Creature* creature, uint32& CharterEntry, uint32& CharterDispayID, uint32& CharterCost); void PetitionShowList(Player* player, Creature* creature, uint32& CharterEntry, uint32& CharterDispayID, uint32& CharterCost);
void OnRewardKillRewarder(Player* player, bool isDungeon, float& rate); void OnRewardKillRewarder(Player* player, KillRewarder* rewarder, bool isDungeon, float& rate);
bool CanGiveMailRewardAtGiveLevel(Player* player, uint8 level); bool CanGiveMailRewardAtGiveLevel(Player* player, uint8 level);
void OnDeleteFromDB(CharacterDatabaseTransaction trans, uint32 guid); void OnDeleteFromDB(CharacterDatabaseTransaction trans, uint32 guid);
bool CanRepopAtGraveyard(Player* player); bool CanRepopAtGraveyard(Player* player);