diff --git a/cmake/MangosParams.cmake b/cmake/MangosParams.cmake index 55302c304..3165760ec 100644 --- a/cmake/MangosParams.cmake +++ b/cmake/MangosParams.cmake @@ -1,5 +1,5 @@ set(MANGOS_EXP "WOTLK") set(MANGOS_PKG "Mangos Two") -set(MANGOS_WORLD_VER 2023102200) +set(MANGOS_WORLD_VER 2023062700) set(MANGOS_REALM_VER 2021010100) set(MANGOS_AHBOT_VER 2021010100) diff --git a/src/game/Object/Player.cpp b/src/game/Object/Player.cpp index 234a68bc6..0cb9fff4c 100644 --- a/src/game/Object/Player.cpp +++ b/src/game/Object/Player.cpp @@ -4010,7 +4010,7 @@ void Player::removeSpell(uint32 spell_id, bool disabled, bool learn_low_rank, bo UpdateFreeTalentPoints(false); } - // update free primary prof.points (if any, can be none in case GM .learn prof. learning) + // update free primary prof.points (if not overflow setting, can be in case GM use before .learn prof. learning) if (sSpellMgr.IsPrimaryProfessionFirstRankSpell(spell_id)) { uint32 freeProfs = GetFreePrimaryProfessionPoints() + 1; @@ -4744,6 +4744,17 @@ TrainerSpellState Player::GetTrainerSpellState(TrainerSpell const* trainer_spell return TRAINER_SPELL_RED; } + bool prof = SpellMgr::IsProfessionSpell(trainer_spell->learnedSpell); + + // check level requirement + if (!prof || GetSession()->GetSecurity() < AccountTypes(sWorld.getConfig(CONFIG_UINT32_TRADE_SKILL_GMIGNORE_LEVEL))) + { + if (getLevel() < reqLevel) + { + return TRAINER_SPELL_RED; + } + } + if (SpellChainNode const* spell_chain = sSpellMgr.GetSpellChainNode(trainer_spell->learnedSpell)) { // check prev.rank requirement @@ -4759,18 +4770,12 @@ TrainerSpellState Player::GetTrainerSpellState(TrainerSpell const* trainer_spell } } - // check level requirement - bool prof = SpellMgr::IsProfessionSpell(trainer_spell->spell); - if (prof || trainer_spell->reqLevel && (trainer_spell->reqLevel) < reqLevel) - { - return TRAINER_SPELL_RED; - } - // check skill requirement - if (prof || trainer_spell->reqSkill && GetBaseSkillValue(trainer_spell->reqSkill) < trainer_spell->reqSkillValue) - { - return TRAINER_SPELL_RED; - } + if (!prof || GetSession()->GetSecurity() < AccountTypes(sWorld.getConfig(CONFIG_UINT32_TRADE_SKILL_GMIGNORE_SKILL))) + if (trainer_spell->reqSkill && GetBaseSkillValue(trainer_spell->reqSkill) < trainer_spell->reqSkillValue) + { + return TRAINER_SPELL_RED; + } // exist, already checked at loading SpellEntry const* spell = sSpellStore.LookupEntry(trainer_spell->learnedSpell); diff --git a/src/game/WorldHandlers/World.cpp b/src/game/WorldHandlers/World.cpp index c9e00f512..d9af7dcba 100644 --- a/src/game/WorldHandlers/World.cpp +++ b/src/game/WorldHandlers/World.cpp @@ -660,6 +660,10 @@ void World::LoadConfigSettings(bool reload) setConfigMinMax(CONFIG_UINT32_MAX_PRIMARY_TRADE_SKILL, "MaxPrimaryTradeSkill", 2, 0, 11); + setConfigMinMax(CONFIG_UINT32_TRADE_SKILL_GMIGNORE_MAX_PRIMARY_COUNT, "TradeSkill.GMIgnore.MaxPrimarySkillsCount", SEC_CONSOLE, SEC_PLAYER, SEC_CONSOLE); + setConfigMinMax(CONFIG_UINT32_TRADE_SKILL_GMIGNORE_LEVEL, "TradeSkill.GMIgnore.Level", SEC_CONSOLE, SEC_PLAYER, SEC_CONSOLE); + setConfigMinMax(CONFIG_UINT32_TRADE_SKILL_GMIGNORE_SKILL, "TradeSkill.GMIgnore.Skill", SEC_CONSOLE, SEC_PLAYER, SEC_CONSOLE); + setConfigMinMax(CONFIG_UINT32_MIN_PETITION_SIGNS, "MinPetitionSigns", 9, 0, 9); setConfig(CONFIG_UINT32_GM_LOGIN_STATE, "GM.LoginState", 2); diff --git a/src/game/WorldHandlers/World.h b/src/game/WorldHandlers/World.h index 2580b5ca9..0feddc274 100644 --- a/src/game/WorldHandlers/World.h +++ b/src/game/WorldHandlers/World.h @@ -124,6 +124,9 @@ enum eConfigUInt32Values CONFIG_UINT32_BIRTHDAY_TIME, CONFIG_UINT32_RABBIT_DAY, CONFIG_UINT32_MAX_PRIMARY_TRADE_SKILL, + CONFIG_UINT32_TRADE_SKILL_GMIGNORE_MAX_PRIMARY_COUNT, + CONFIG_UINT32_TRADE_SKILL_GMIGNORE_LEVEL, + CONFIG_UINT32_TRADE_SKILL_GMIGNORE_SKILL, CONFIG_UINT32_MIN_PETITION_SIGNS, CONFIG_UINT32_GM_LOGIN_STATE, CONFIG_UINT32_GM_VISIBLE_STATE, diff --git a/src/mangosd/mangosd.conf.dist.in b/src/mangosd/mangosd.conf.dist.in index 287050534..3a6edad56 100644 --- a/src/mangosd/mangosd.conf.dist.in +++ b/src/mangosd/mangosd.conf.dist.in @@ -738,6 +738,18 @@ SD3ErrorLogFile = "scriptdev3-errors.log" # Default: 2 # Max : 10 # +# TradeSkill.GMIgnore.MaxPrimarySkillsCount +# GM level starting from max primary skill count requirement ignored. +# Default: 4 (Console as noneone) +# +# TradeSkill.GMIgnore.Level +# GM level starting from trade skill level requirement ignored. +# Default: 4 (Console as noneone) +# +# TradeSkill.GMIgnore.Skill +# GM level starting from trade skill skill requirement ignored. +# Default: 4 (Console as noneone) +# # MinPetitionSigns # Min signatures count to creating guild (0..9). # Default: 9 @@ -883,6 +895,9 @@ TimerBar.Breath.Max = 180 TimerBar.Fire.GMLevel = 4 TimerBar.Fire.Max = 1 MaxPrimaryTradeSkill = 2 +TradeSkill.GMIgnore.MaxPrimarySkillsCount = 4 +TradeSkill.GMIgnore.Level = 4 +TradeSkill.GMIgnore.Skill = 4 MinPetitionSigns = 9 MaxGroupXPDistance = 74 MailDeliveryDelay = 3600