From f6624ceb8185e1ba91988073ed6c8749c99a652b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maicol=20Gonz=C3=A1lez?= Date: Sun, 1 Sep 2024 02:08:25 -0300 Subject: [PATCH 1/6] added exclude accounts parameter --- conf/individualProgression.conf.dist | 16 ++++++++++++++++ src/IndividualProgression.cpp | 2 ++ src/IndividualProgression.h | 4 +++- src/IndividualProgressionPlayer.cpp | 16 ++++++++++++++-- 4 files changed, 35 insertions(+), 3 deletions(-) diff --git a/conf/individualProgression.conf.dist b/conf/individualProgression.conf.dist index 1366994..5eb42bd 100644 --- a/conf/individualProgression.conf.dist +++ b/conf/individualProgression.conf.dist @@ -358,3 +358,19 @@ IndividualProgression.PvPGearRequirements = 1 # 1 - Disabled # IndividualProgression.DisableRDF = 0 +# +# IndividualProgression.ExcludeAccounts +# Description: Enable or disable the exclusion of accounts from Individual Progression. +# This is useful for accounts that are used for bots, testing, or other purposes where progression should not be enforced. +# Default: 0 - Disabled +# 1 - Enabled +# +IndividualProgression.ExcludeAccounts = 0 +# +# IndividualProgression.ExcludedAccountsRegex +# Description: A regular expression to match account names that should be excluded from Individual Progression. +# This is useful for accounts that are used for bots, testing, or other purposes where progression should not be enforced. +# Only used if ExcludeAccounts is enabled. +# Default: "" +# +IndividualProgression.ExcludedAccountsRegex = "" \ No newline at end of file diff --git a/src/IndividualProgression.cpp b/src/IndividualProgression.cpp index 98aef72..826e00f 100644 --- a/src/IndividualProgression.cpp +++ b/src/IndividualProgression.cpp @@ -315,6 +315,8 @@ private: sIndividualProgression->LoadCustomProgressionEntries(sConfigMgr->GetOption("IndividualProgression.CustomProgression", "")); sIndividualProgression->earlyDungeonSet2 = sConfigMgr->GetOption("IndividualProgression.AllowEarlyDungeonSet2", true); sIndividualProgression->pvpGearRequirements = sConfigMgr->GetOption("IndividualProgression.PvPGearRequirements", true); + sIndividualProgression->excludeAccounts = sConfigMgr->GetOption("IndividualProgression.ExcludeAccounts", false); + sIndividualProgression->excludedAccountsRegex = sConfigMgr->GetOption("IndividualProgression.ExcludedAccountsRegex", ""); } static void LoadXpValues() diff --git a/src/IndividualProgression.h b/src/IndividualProgression.h index dc795a5..7362301 100644 --- a/src/IndividualProgression.h +++ b/src/IndividualProgression.h @@ -16,6 +16,7 @@ #include "QuestDef.h" #include "GameObject.h" #include "IWorld.h" +#include typedef std::unordered_map questXpMapType; @@ -180,8 +181,9 @@ public: std::map customProgressionMap; questXpMapType questXpMap; float vanillaPowerAdjustment, vanillaHealthAdjustment, tbcPowerAdjustment, tbcHealthAdjustment, vanillaHealingAdjustment, tbcHealingAdjustment, previousGearTuning; - bool enabled, questXpFix, hunterPetLevelFix, requirePreAQQuests, enforceGroupRules, fishingFix, simpleConfigOverride, questMoneyAtLevelCap, repeatableVanillaQuestsXp, disableDefaultProgression, earlyDungeonSet2, requireNaxxStrath, pvpGearRequirements; + bool enabled, questXpFix, hunterPetLevelFix, requirePreAQQuests, enforceGroupRules, fishingFix, simpleConfigOverride, questMoneyAtLevelCap, repeatableVanillaQuestsXp, disableDefaultProgression, earlyDungeonSet2, requireNaxxStrath, pvpGearRequirements, excludeAccounts; int progressionLimit, startingProgression, tbcRacesProgressionLevel, deathKnightProgressionLevel, deathKnightStartingProgression; + std::string excludedAccountsRegex; bool hasPassedProgression(Player* player, ProgressionState state) const; static bool isBeforeProgression(Player* player, ProgressionState state) ; diff --git a/src/IndividualProgressionPlayer.cpp b/src/IndividualProgressionPlayer.cpp index 69e97e2..a12bb96 100644 --- a/src/IndividualProgressionPlayer.cpp +++ b/src/IndividualProgressionPlayer.cpp @@ -31,10 +31,11 @@ public: void OnSetMaxLevel(Player* player, uint32& maxPlayerLevel) override { - if (!sIndividualProgression->enabled) + if (!sIndividualProgression->enabled || isExcludedFromProgression(player)) { return; } + if (!sIndividualProgression->hasPassedProgression(player, PROGRESSION_NAXX40)) { if (sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL) > 60) @@ -159,9 +160,20 @@ public: } } + bool isExcludedFromProgression(Player* player) + { + if(!sIndividualProgression->excludeAccounts) { + return false; + } + std::string accountName; + bool gotAccountName = AccountMgr::GetName(player->GetSession()->GetAccountId(), accountName); + std::regex excludedAccountsRegex (sIndividualProgression->excludedAccountsRegex); + return (gotAccountName && std::regex_match(accountName, excludedAccountsRegex)); + } + bool OnBeforeTeleport(Player* player, uint32 mapid, float x, float y, float z, float /*orientation*/, uint32 /*options*/, Unit* /*target*/) override { - if (!sIndividualProgression->enabled || player->IsGameMaster()) + if (!sIndividualProgression->enabled || player->IsGameMaster() || isExcludedFromProgression(player)) { return true; } From 333cc730c7700e8b9ae3195721ae6c1a6c8e96a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maicol=20Gonz=C3=A1lez?= Date: Sun, 1 Sep 2024 02:11:17 -0300 Subject: [PATCH 2/6] added exclude accounts parameter --- src/IndividualProgressionPlayer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/IndividualProgressionPlayer.cpp b/src/IndividualProgressionPlayer.cpp index a12bb96..5b2de1b 100644 --- a/src/IndividualProgressionPlayer.cpp +++ b/src/IndividualProgressionPlayer.cpp @@ -166,9 +166,9 @@ public: return false; } std::string accountName; - bool gotAccountName = AccountMgr::GetName(player->GetSession()->GetAccountId(), accountName); + bool accountNameFound = AccountMgr::GetName(player->GetSession()->GetAccountId(), accountName); std::regex excludedAccountsRegex (sIndividualProgression->excludedAccountsRegex); - return (gotAccountName && std::regex_match(accountName, excludedAccountsRegex)); + return (accountNameFound && std::regex_match(accountName, excludedAccountsRegex)); } bool OnBeforeTeleport(Player* player, uint32 mapid, float x, float y, float z, float /*orientation*/, uint32 /*options*/, Unit* /*target*/) override From a80b788631fce7f66bfb1ec757790df6d137b82f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maicol=20Gonz=C3=A1lez?= Date: Sun, 1 Sep 2024 02:36:24 -0300 Subject: [PATCH 3/6] added exclude accounts parameter --- src/IndividualProgressionPlayer.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/IndividualProgressionPlayer.cpp b/src/IndividualProgressionPlayer.cpp index 5b2de1b..8101f34 100644 --- a/src/IndividualProgressionPlayer.cpp +++ b/src/IndividualProgressionPlayer.cpp @@ -87,7 +87,7 @@ public: void OnAfterUpdateMaxHealth(Player* player, float& value) override { // TODO: This should be adjust to use an aura like damage adjustment. This is more robust to update when changing equipment, etc. - if (!sIndividualProgression->enabled) + if (!sIndividualProgression->enabled || isExcludedFromProgression(player)) { return; } @@ -119,7 +119,7 @@ public: void OnQuestComputeXP(Player* player, Quest const* quest, uint32& xpValue) override { - if (!sIndividualProgression->enabled || !sIndividualProgression->questXpFix) + if (!sIndividualProgression->enabled || !sIndividualProgression->questXpFix || isExcludedFromProgression(player)) { return; } @@ -136,7 +136,7 @@ public: void OnGiveXP(Player* player, uint32& amount, Unit* /*victim*/, uint8 xpSource) override { - if (!sIndividualProgression->enabled) + if (!sIndividualProgression->enabled || isExcludedFromProgression(player)) { return; } @@ -249,7 +249,7 @@ public: void OnPlayerCompleteQuest(Player* player, Quest const* quest) override { - if (!sIndividualProgression->enabled) + if (!sIndividualProgression->enabled || isExcludedFromProgression(player)) { return; } @@ -276,7 +276,7 @@ public: bool CanGroupInvite(Player* player, std::string& membername) override { - if (!sIndividualProgression->enabled || !sIndividualProgression->enforceGroupRules) + if (!sIndividualProgression->enabled || !sIndividualProgression->enforceGroupRules || isExcludedFromProgression(player)) { return true; } @@ -288,7 +288,7 @@ public: bool CanGroupAccept(Player* player, Group* group) override { - if (!sIndividualProgression->enabled || !sIndividualProgression->enforceGroupRules) + if (!sIndividualProgression->enabled || !sIndividualProgression->enforceGroupRules || isExcludedFromProgression(player)) { return true; } @@ -321,7 +321,7 @@ public: bool OnUpdateFishingSkill(Player* player, int32 /*skill*/, int32 /*zone_skill*/, int32 chance, int32 roll) override { - if (!sIndividualProgression->enabled || !sIndividualProgression->fishingFix) + if (!sIndividualProgression->enabled || !sIndividualProgression->fishingFix || isExcludedFromProgression(player)) return true; if (chance < roll) return false; From 9d9da7513383a7ebf4460ba3dcdb40ce5f153087 Mon Sep 17 00:00:00 2001 From: Grimfeather <88028633+Grimfeather@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:22:54 +0200 Subject: [PATCH 4/6] Update professions.sql Fix syntax errors --- sql/world/base/professions.sql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sql/world/base/professions.sql b/sql/world/base/professions.sql index bd4032e..85b327a 100644 --- a/sql/world/base/professions.sql +++ b/sql/world/base/professions.sql @@ -864,7 +864,8 @@ INSERT INTO `npc_trainer` (`ID`, `SpellID`, `MoneyCost`, `ReqSkillLine`, `ReqSki (4212, -380002, 0, 0, 0, 0); -- Master Leatherworking Trainer -INSERT INTO `npc_trainer` (`ID`, `SpellID`, `MoneyCost`, `ReqSkillLine`, `ReqSkillRank`, `ReqLevel`) VALUES (18754, -201028, 0, 0, 0, 0); +INSERT INTO `npc_trainer` (`ID`, `SpellID`, `MoneyCost`, `ReqSkillLine`, `ReqSkillRank`, `ReqLevel`) VALUES +(18754, -201028, 0, 0, 0, 0), (18771, -201028, 0, 0, 0, 0), (19187, -201028, 0, 0, 0, 0), (21087, -201028, 0, 0, 0, 0), From cb90156bc47cd588017ea1255ea3f7858301b870 Mon Sep 17 00:00:00 2001 From: Grimfeather <88028633+Grimfeather@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:27:40 +0200 Subject: [PATCH 5/6] Update zone_eversong_woods.sql Fixed syntax error --- sql/world/base/zone_eversong_woods.sql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sql/world/base/zone_eversong_woods.sql b/sql/world/base/zone_eversong_woods.sql index 0561d32..b8439da 100644 --- a/sql/world/base/zone_eversong_woods.sql +++ b/sql/world/base/zone_eversong_woods.sql @@ -5,7 +5,9 @@ INSERT INTO `creature_questender` (`id`, `quest`) VALUES (15283, 8344); -- Windows to the Source (Warlock) DELETE FROM `creature_queststarter` WHERE `id`=15283 AND `quest`=8344; INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES (15283, 8344); -INSERT INTO creature_loot_template (Entry, Item, Reference, Chance, QuestRequired, LootMode, GroupId, MinCount, MaxCount, Comment) VALUES + +DELETE FROM `creature_loot_template` WHERE `Entry`= 15298; +INSERT INTO `creature_loot_template` (Entry, Item, Reference, Chance, QuestRequired, LootMode, GroupId, MinCount, MaxCount, Comment) VALUES (15298, 20935, 0, 80, 1, 1, 0, 1, 1, 'Tainted Arcane Wraith - Tainted Wraith Essence'); -- Kanaria From 0bc28903106bd364a3c257041dc2959dd1f591d7 Mon Sep 17 00:00:00 2001 From: Grimfeather <88028633+Grimfeather@users.noreply.github.com> Date: Tue, 8 Oct 2024 21:46:40 +0200 Subject: [PATCH 6/6] Update zone_eversong_woods.sql fix --- sql/world/base/zone_eversong_woods.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/world/base/zone_eversong_woods.sql b/sql/world/base/zone_eversong_woods.sql index b8439da..3714078 100644 --- a/sql/world/base/zone_eversong_woods.sql +++ b/sql/world/base/zone_eversong_woods.sql @@ -6,7 +6,7 @@ INSERT INTO `creature_questender` (`id`, `quest`) VALUES (15283, 8344); DELETE FROM `creature_queststarter` WHERE `id`=15283 AND `quest`=8344; INSERT INTO `creature_queststarter` (`id`, `quest`) VALUES (15283, 8344); -DELETE FROM `creature_loot_template` WHERE `Entry`= 15298; +DELETE FROM `creature_loot_template` WHERE `Entry`= 15298 AND `Item`=20935; INSERT INTO `creature_loot_template` (Entry, Item, Reference, Chance, QuestRequired, LootMode, GroupId, MinCount, MaxCount, Comment) VALUES (15298, 20935, 0, 80, 1, 1, 0, 1, 1, 'Tainted Arcane Wraith - Tainted Wraith Essence');