diff --git a/src/server/game/Entities/Player/KillRewarder.cpp b/src/server/game/Entities/Player/KillRewarder.cpp index 50d83a692..04ba9ca1d 100644 --- a/src/server/game/Entities/Player/KillRewarder.cpp +++ b/src/server/game/Entities/Player/KillRewarder.cpp @@ -204,12 +204,13 @@ void KillRewarder::_RewardPlayer(Player* player, bool isDungeon) if (_victim->GetTypeId() == TYPEID_PLAYER) player->KilledPlayerCredit(); } + // Give XP only in PvE or in battlegrounds. // Give reputation and kill credit only in PvE. 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. - sScriptMgr->OnRewardKillRewarder(player, isDungeon, xpRate); // Personal rate is 100%. + sScriptMgr->OnRewardKillRewarder(player, this, isDungeon, xpRate); // Personal rate is 100%. if (_xp) { @@ -290,3 +291,13 @@ void KillRewarder::Reward() if (Map* map = _victim->FindMap()) map->UpdateEncounterState(ENCOUNTER_CREDIT_KILL_CREATURE, _victim->GetEntry(), _victim); } + +Unit* KillRewarder::GetVictim() +{ + return _victim; +} + +Player* KillRewarder::GetKiller() +{ + return _killer; +} diff --git a/src/server/game/Entities/Player/KillRewarder.h b/src/server/game/Entities/Player/KillRewarder.h index 6f1fda257..3efc3cc62 100644 --- a/src/server/game/Entities/Player/KillRewarder.h +++ b/src/server/game/Entities/Player/KillRewarder.h @@ -30,6 +30,8 @@ public: KillRewarder(Player* killer, Unit* victim, bool isBattleGround); void Reward(); + Unit* GetVictim(); + Player* GetKiller(); private: void _InitXP(Player* player); diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index 290837d1f..f5b777245 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -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* script) { - script->OnRewardKillRewarder(player, isDungeon, rate); + script->OnRewardKillRewarder(player, rewarder, isDungeon, rate); }); } diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.h b/src/server/game/Scripting/ScriptDefines/PlayerScript.h index 48c72f726..a0f9aa57a 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.h +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.h @@ -22,6 +22,7 @@ // TODO to remove #include "AchievementMgr.h" +#include "KillRewarder.h" class PlayerScript : public ScriptObject { @@ -314,7 +315,7 @@ public: 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; } diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 2a7766495..a242119bc 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -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); 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 OnRewardKillRewarder(Player* player, bool isDungeon, float& rate); + void OnRewardKillRewarder(Player* player, KillRewarder* rewarder, bool isDungeon, float& rate); bool CanGiveMailRewardAtGiveLevel(Player* player, uint8 level); void OnDeleteFromDB(CharacterDatabaseTransaction trans, uint32 guid); bool CanRepopAtGraveyard(Player* player);