From ba63751269632d04bf9d9b16af9a6a2624b92efb Mon Sep 17 00:00:00 2001 From: sindoring Date: Sat, 21 Mar 2026 16:29:01 +0400 Subject: [PATCH] =?UTF-8?q?=D0=BC=D0=BD=D0=BE=D0=B6=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D0=B8=20=D0=BE=D0=BF=D1=8B=D1=82=D0=B0=20=D0=BE=D1=82=20?= =?UTF-8?q?=D0=BA=D0=B2=D0=B5=D1=81=D1=82=D0=BE=D0=B2=20=D1=81=20=D1=88?= =?UTF-8?q?=D0=B0=D0=B3=D0=BE=D0=BC=20=D0=B2=2010=20=D1=83=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.example | 28 ++++++++ .../conf/mod_progressive_quest_xp.conf.dist | 72 +++++++++++++++++++ modules/mod-progressive-quest-xp/include.sh | 1 + .../src/progressive_quest_xp.cpp | 59 +++++++++++++++ .../src/progressive_quest_xp_loader.cpp | 6 ++ setup-modules.sh | 27 +++++++ 6 files changed, 193 insertions(+) create mode 100644 modules/mod-progressive-quest-xp/conf/mod_progressive_quest_xp.conf.dist create mode 100644 modules/mod-progressive-quest-xp/include.sh create mode 100644 modules/mod-progressive-quest-xp/src/progressive_quest_xp.cpp create mode 100644 modules/mod-progressive-quest-xp/src/progressive_quest_xp_loader.cpp diff --git a/.env.example b/.env.example index 7d97628..cb3a1e7 100644 --- a/.env.example +++ b/.env.example @@ -276,6 +276,34 @@ ACORE_PROGRESSION_MC_AQUAL_COOLDOWN_REDUCTION=60 # 0 = отключены, 1 = включены. ACORE_PROGRESSION_PVP_GEAR_REQUIREMENTS=0 +# ------------------------------------------------------------------------------ +# mod-progressive-quest-xp +# ------------------------------------------------------------------------------ + +# 1 = включает прогрессивный множитель XP за квесты. +ACORE_DYNAMIC_QUEST_XP_ENABLE=1 + +# Множитель квестового XP для уровней 1-20. +ACORE_DYNAMIC_QUEST_XP_LEVEL_1_20=1.5 + +# Множитель квестового XP для уровней 21-30. +ACORE_DYNAMIC_QUEST_XP_LEVEL_21_30=1.3 + +# Множитель квестового XP для уровней 31-40. +ACORE_DYNAMIC_QUEST_XP_LEVEL_31_40=1.1 + +# Множитель квестового XP для уровней 41-50. +ACORE_DYNAMIC_QUEST_XP_LEVEL_41_50=1.0 + +# Множитель квестового XP для уровней 51-60. +ACORE_DYNAMIC_QUEST_XP_LEVEL_51_60=1.0 + +# Множитель квестового XP для уровней 61-70. +ACORE_DYNAMIC_QUEST_XP_LEVEL_61_70=1.0 + +# Множитель квестового XP для уровней 70-80. +ACORE_DYNAMIC_QUEST_XP_LEVEL_70_PLUS=1.0 + # ------------------------------------------------------------------------------ # mod-aoe-loot # ------------------------------------------------------------------------------ diff --git a/modules/mod-progressive-quest-xp/conf/mod_progressive_quest_xp.conf.dist b/modules/mod-progressive-quest-xp/conf/mod_progressive_quest_xp.conf.dist new file mode 100644 index 0000000..4eff82a --- /dev/null +++ b/modules/mod-progressive-quest-xp/conf/mod_progressive_quest_xp.conf.dist @@ -0,0 +1,72 @@ +# +# Progressive Quest XP module configuration +# + +######################################## +# DynamicQuestXP settings +######################################## + +# +# DynamicQuestXP.Enable +# Description: Enable progressive quest XP multiplier +# Default: 1 - (Enabled) +# 0 - (Disabled) +# + +DynamicQuestXP.Enable = 1 + +# +# DynamicQuestXP.Level_1_20 +# Description: XP multiplier for quest rewards at levels 1-20 +# Default: 1.5 +# + +DynamicQuestXP.Level_1_20 = 1.5 + +# +# DynamicQuestXP.Level_21_30 +# Description: XP multiplier for quest rewards at levels 21-30 +# Default: 1.3 +# + +DynamicQuestXP.Level_21_30 = 1.3 + +# +# DynamicQuestXP.Level_31_40 +# Description: XP multiplier for quest rewards at levels 31-40 +# Default: 1.1 +# + +DynamicQuestXP.Level_31_40 = 1.1 + +# +# DynamicQuestXP.Level_41_50 +# Description: XP multiplier for quest rewards at levels 41-50 +# Default: 1.0 +# + +DynamicQuestXP.Level_41_50 = 1.0 + +# +# DynamicQuestXP.Level_51_60 +# Description: XP multiplier for quest rewards at levels 51-60 +# Default: 1.0 +# + +DynamicQuestXP.Level_51_60 = 1.0 + +# +# DynamicQuestXP.Level_61_70 +# Description: XP multiplier for quest rewards at levels 61-70 +# Default: 1.0 +# + +DynamicQuestXP.Level_61_70 = 1.0 + +# +# DynamicQuestXP.Level_70_plus +# Description: XP multiplier for quest rewards at levels 70-80 +# Default: 1.0 +# + +DynamicQuestXP.Level_70_plus = 1.0 diff --git a/modules/mod-progressive-quest-xp/include.sh b/modules/mod-progressive-quest-xp/include.sh new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/modules/mod-progressive-quest-xp/include.sh @@ -0,0 +1 @@ + diff --git a/modules/mod-progressive-quest-xp/src/progressive_quest_xp.cpp b/modules/mod-progressive-quest-xp/src/progressive_quest_xp.cpp new file mode 100644 index 0000000..2047701 --- /dev/null +++ b/modules/mod-progressive-quest-xp/src/progressive_quest_xp.cpp @@ -0,0 +1,59 @@ +/* + * Progressive Quest XP Module for AzerothCore + * + * Applies a level-based XP multiplier to quest rewards only. + * Does not affect kill XP, exploration XP, or PvP XP. + */ + +#include "Config.h" +#include "Player.h" +#include "ScriptMgr.h" + +class ProgressiveQuestXPPlayer : public PlayerScript +{ +public: + ProgressiveQuestXPPlayer() : PlayerScript("ProgressiveQuestXPPlayer", + {PLAYERHOOK_ON_QUEST_COMPUTE_EXP}) { } + + void OnPlayerQuestComputeXP(Player* player, Quest const* /*quest*/, + uint32& xpValue) override + { + if (!sConfigMgr->GetOption("DynamicQuestXP.Enable", true)) + return; + + if (!xpValue) + return; + + uint8 level = player->GetLevel(); + float multiplier; + + if (level <= 20) + multiplier = sConfigMgr->GetOption( + "DynamicQuestXP.Level_1_20", 1.5f); + else if (level <= 30) + multiplier = sConfigMgr->GetOption( + "DynamicQuestXP.Level_21_30", 1.3f); + else if (level <= 40) + multiplier = sConfigMgr->GetOption( + "DynamicQuestXP.Level_31_40", 1.1f); + else if (level <= 50) + multiplier = sConfigMgr->GetOption( + "DynamicQuestXP.Level_41_50", 1.0f); + else if (level <= 60) + multiplier = sConfigMgr->GetOption( + "DynamicQuestXP.Level_51_60", 1.0f); + else if (level <= 70) + multiplier = sConfigMgr->GetOption( + "DynamicQuestXP.Level_61_70", 1.0f); + else + multiplier = sConfigMgr->GetOption( + "DynamicQuestXP.Level_70_plus", 1.0f); + + xpValue = static_cast(xpValue * multiplier); + } +}; + +void AddSC_ProgressiveQuestXP() +{ + new ProgressiveQuestXPPlayer(); +} diff --git a/modules/mod-progressive-quest-xp/src/progressive_quest_xp_loader.cpp b/modules/mod-progressive-quest-xp/src/progressive_quest_xp_loader.cpp new file mode 100644 index 0000000..2663db7 --- /dev/null +++ b/modules/mod-progressive-quest-xp/src/progressive_quest_xp_loader.cpp @@ -0,0 +1,6 @@ +void AddSC_ProgressiveQuestXP(); + +void Addmod_progressive_quest_xpScripts() +{ + AddSC_ProgressiveQuestXP(); +} diff --git a/setup-modules.sh b/setup-modules.sh index db7b085..f959eba 100644 --- a/setup-modules.sh +++ b/setup-modules.sh @@ -65,6 +65,15 @@ FORCE_PLAYERBOTS="${FORCE_PLAYERBOTS:-${ACORE_PLAYERBOTS_FORCE:-0}}" : "${ACORE_PROGRESSION_MC_AQUAL_COOLDOWN_REDUCTION:=60}" : "${ACORE_PROGRESSION_PVP_GEAR_REQUIREMENTS:=0}" +: "${ACORE_DYNAMIC_QUEST_XP_ENABLE:=1}" +: "${ACORE_DYNAMIC_QUEST_XP_LEVEL_1_20:=1.5}" +: "${ACORE_DYNAMIC_QUEST_XP_LEVEL_21_30:=1.3}" +: "${ACORE_DYNAMIC_QUEST_XP_LEVEL_31_40:=1.1}" +: "${ACORE_DYNAMIC_QUEST_XP_LEVEL_41_50:=1.0}" +: "${ACORE_DYNAMIC_QUEST_XP_LEVEL_51_60:=1.0}" +: "${ACORE_DYNAMIC_QUEST_XP_LEVEL_61_70:=1.0}" +: "${ACORE_DYNAMIC_QUEST_XP_LEVEL_70_PLUS:=1.0}" + : "${ACORE_AOE_LOOT_ENABLE:=1}" : "${ACORE_AOE_LOOT_MESSAGE:=0}" : "${ACORE_AOE_LOOT_RANGE:=55.0}" @@ -316,6 +325,8 @@ ensure_world_conf() { } sync_module_dists() { + sync_file "$ROOT_DIR/modules/mod-progressive-quest-xp/conf/mod_progressive_quest_xp.conf.dist" \ + "$MODULES_ETC_DIR/mod_progressive_quest_xp.conf.dist" sync_file "$ROOT_DIR/modules/mod-aoe-loot/conf/mod_aoe_loot.conf.dist" \ "$MODULES_ETC_DIR/mod_aoe_loot.conf.dist" sync_file "$ROOT_DIR/modules/mod-autobalance/conf/AutoBalance.conf.dist" \ @@ -393,6 +404,20 @@ IndividualProgression.PvPGearRequirements = ${ACORE_PROGRESSION_PVP_GEAR_REQUIRE EOF } +write_progressive_quest_xp_conf() { + write_file "$MODULES_ETC_DIR/mod_progressive_quest_xp.conf.dist" <