From ee3ab6fe2a02b38a5b42da3a8be38213543d4fd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDan=20Skamlji=C4=8D?= Date: Mon, 19 Jun 2023 21:12:20 +0200 Subject: [PATCH] chore(Core/ScriptMgr): Add Hooks for profession skill gains (#16526) --- .../game/Entities/Player/PlayerUpdates.cpp | 2 ++ .../Scripting/ScriptDefines/PlayerScript.cpp | 14 +++++++++++ src/server/game/Scripting/ScriptMgr.h | 25 +++++++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/src/server/game/Entities/Player/PlayerUpdates.cpp b/src/server/game/Entities/Player/PlayerUpdates.cpp index 71b31db10..4e703b433 100644 --- a/src/server/game/Entities/Player/PlayerUpdates.cpp +++ b/src/server/game/Entities/Player/PlayerUpdates.cpp @@ -727,6 +727,7 @@ bool Player::UpdateGatherSkill(uint32 SkillId, uint32 SkillValue, uint32 gathering_skill_gain = sWorld->getIntConfig(CONFIG_SKILL_GAIN_GATHERING); + sScriptMgr->OnUpdateGatheringSkill(this, SkillId, SkillValue, RedLevel + 100, RedLevel + 50, RedLevel + 25, gathering_skill_gain); // For skinning and Mining chance decrease with level. 1-74 - no decrease, // 75-149 - 2 times, 225-299 - 8 times @@ -804,6 +805,7 @@ bool Player::UpdateCraftSkill(uint32 spellid) uint32 craft_skill_gain = sWorld->getIntConfig(CONFIG_SKILL_GAIN_CRAFTING); + sScriptMgr->OnUpdateCraftingSkill(this, _spell_idx->second, SkillValue, craft_skill_gain); return UpdateSkillPro( _spell_idx->second->SkillLine, diff --git a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp index a21f15f1d..2682193d4 100644 --- a/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp +++ b/src/server/game/Scripting/ScriptDefines/PlayerScript.cpp @@ -975,6 +975,20 @@ void ScriptMgr::OnGetMaxSkillValue(Player* player, uint32 skill, int32& result, }); } +void ScriptMgr::OnUpdateGatheringSkill(Player *player, uint32 skillId, uint32 currentLevel, uint32 gray, uint32 green, uint32 yellow, uint32 &gain) { + ExecuteScript([&](PlayerScript* script) + { + script->OnUpdateGatheringSkill(player, skillId, gray, green, yellow, currentLevel, gain); + }); +} + +void ScriptMgr::OnUpdateCraftingSkill(Player *player, SkillLineAbilityEntry const* skill, uint32 currentLevel, uint32& gain) { + ExecuteScript([&](PlayerScript* script) + { + script->OnUpdateCraftingSkill(player, skill, currentLevel, gain); + }); +} + bool ScriptMgr::OnUpdateFishingSkill(Player* player, int32 skill, int32 zone_skill, int32 chance, int32 roll) { auto ret = IsValidBoolScript([&](PlayerScript* script) diff --git a/src/server/game/Scripting/ScriptMgr.h b/src/server/game/Scripting/ScriptMgr.h index 52575dc6d..3a543c2c3 100644 --- a/src/server/game/Scripting/ScriptMgr.h +++ b/src/server/game/Scripting/ScriptMgr.h @@ -1274,6 +1274,29 @@ public: virtual void OnGetMaxSkillValue(Player* /*player*/, uint32 /*skill*/, int32& /*result*/, bool /*IsPure*/) { } + /** + * @brief This hook called before gathering skill gain is applied to the character. + * + * @param player Contains information about the Player sender + * @param skill_id Contains information about the skill line + * @param current Contains the current skill level for skill + * @param gray Contains the gray skill level for current application + * @param green Contains the green skill level for current application + * @param yellow Contains the yellow skill level for current application + * @param gain Contains the amount of points that should be added to the Player + */ + virtual void OnUpdateGatheringSkill(Player* /*player*/, uint32 /*skill_id*/, uint32 /*current*/, uint32 /*gray*/, uint32 /*green*/, uint32 /*yellow*/, uint32& /*gain*/) { } + + /** + * @brief This hook is called before crafting skill gain is applied to the character. + * + * @param player Contains information about the Player sender + * @param skill Contains information about the skill line + * @param current_level Contains the current skill level for skill + * @param gain Contains the amount of points that should be added to the Player + */ + virtual void OnUpdateCraftingSkill(Player* /*player*/, SkillLineAbilityEntry const* /*skill*/, uint32 /*current_level*/, uint32& /*gain*/) { } + [[nodiscard]] virtual bool OnUpdateFishingSkill(Player* /*player*/, int32 /*skill*/, int32 /*zone_skill*/, int32 /*chance*/, int32 /*roll*/) { return true; } [[nodiscard]] virtual bool CanAreaExploreAndOutdoor(Player* /*player*/) { return true; } @@ -2334,6 +2357,8 @@ public: /* PlayerScript */ void OnDeleteFromDB(CharacterDatabaseTransaction trans, uint32 guid); bool CanRepopAtGraveyard(Player* player); void OnGetMaxSkillValue(Player* player, uint32 skill, int32& result, bool IsPure); + void OnUpdateGatheringSkill(Player* player, uint32 skillId, uint32 currentLevel, uint32 gray, uint32 green, uint32 yellow, uint32& gain); + void OnUpdateCraftingSkill(Player* player, SkillLineAbilityEntry const* skill, uint32 currentLevel, uint32& gain); bool OnUpdateFishingSkill(Player* player, int32 skill, int32 zone_skill, int32 chance, int32 roll); bool CanAreaExploreAndOutdoor(Player* player); void OnVictimRewardBefore(Player* player, Player* victim, uint32& killer_title, uint32& victim_title);