Add LimitTalentsExpansion config (#954)

This commit is contained in:
Yunfan Li
2025-02-09 21:50:04 +08:00
committed by GitHub
parent 08008a3155
commit 2c224d3121
4 changed files with 26 additions and 7 deletions

View File

@@ -529,6 +529,11 @@ AiPlayerbot.RandomBotHordeRatio = 50
# Disable death knight for bots login # Disable death knight for bots login
AiPlayerbot.DisableDeathKnightLogin = 0 AiPlayerbot.DisableDeathKnightLogin = 0
# Enable expansion limitation for talents and glyphs - ie: level <= 60 bot only uses talents
# available in vanilla, level <= 70 bot only uses talents available in TBC)
# Default: 0
AiPlayerbot.LimitTalentsExpansion = 0
# #
# #
# #

View File

@@ -485,6 +485,7 @@ bool PlayerbotAIConfig::Initialize()
randomBotAllianceRatio = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomBotAllianceRatio", 50); randomBotAllianceRatio = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomBotAllianceRatio", 50);
randomBotHordeRatio = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomBotHordeRatio", 50); randomBotHordeRatio = sConfigMgr->GetOption<int32>("AiPlayerbot.RandomBotHordeRatio", 50);
disableDeathKnightLogin = sConfigMgr->GetOption<bool>("AiPlayerbot.DisableDeathKnightLogin", 0); disableDeathKnightLogin = sConfigMgr->GetOption<bool>("AiPlayerbot.DisableDeathKnightLogin", 0);
limitTalentsExpansion = sConfigMgr->GetOption<bool>("AiPlayerbot.LimitTalentsExpansion", 0);
botActiveAlone = sConfigMgr->GetOption<int32>("AiPlayerbot.BotActiveAlone", 100); botActiveAlone = sConfigMgr->GetOption<int32>("AiPlayerbot.BotActiveAlone", 100);
BotActiveAloneForceWhenInRadius = sConfigMgr->GetOption<uint32>("AiPlayerbot.BotActiveAloneForceWhenInRadius", 150); BotActiveAloneForceWhenInRadius = sConfigMgr->GetOption<uint32>("AiPlayerbot.BotActiveAloneForceWhenInRadius", 150);
BotActiveAloneForceWhenInZone = sConfigMgr->GetOption<bool>("AiPlayerbot.BotActiveAloneForceWhenInZone", 1); BotActiveAloneForceWhenInZone = sConfigMgr->GetOption<bool>("AiPlayerbot.BotActiveAloneForceWhenInZone", 1);

View File

@@ -279,6 +279,7 @@ public:
uint32 randomBotAllianceRatio; uint32 randomBotAllianceRatio;
uint32 randomBotHordeRatio; uint32 randomBotHordeRatio;
bool disableDeathKnightLogin; bool disableDeathKnightLogin;
bool limitTalentsExpansion;
uint32 botActiveAlone; uint32 botActiveAlone;
uint32 BotActiveAloneForceWhenInRadius; uint32 BotActiveAloneForceWhenInRadius;
bool BotActiveAloneForceWhenInZone; bool BotActiveAloneForceWhenInZone;

View File

@@ -1021,13 +1021,13 @@ void PlayerbotFactory::InitTalentsTree(bool increment /*false*/, bool use_templa
{ {
InitTalentsByTemplate(specTab); InitTalentsByTemplate(specTab);
} }
// always use template now // if LimitTalentsExpansion = 1 there may be unused talent points
// else if (bot->GetFreeTalentPoints())
// { InitTalents((specTab + 1) % 3);
// InitTalents(specTab);
// if (bot->GetFreeTalentPoints()) if (bot->GetFreeTalentPoints())
// InitTalents((specTab + 1) % 3); InitTalents((specTab + 2) % 3);
// }
bot->SendTalentsInfoData(false); bot->SendTalentsInfoData(false);
} }
@@ -2620,6 +2620,12 @@ void PlayerbotFactory::InitTalentsByTemplate(uint32 specTab)
for (std::vector<uint32>& p : sPlayerbotAIConfig->parsedSpecLinkOrder[cls][specIndex][level]) for (std::vector<uint32>& p : sPlayerbotAIConfig->parsedSpecLinkOrder[cls][specIndex][level])
{ {
uint32 tab = p[0], row = p[1], col = p[2], lvl = p[3]; uint32 tab = p[0], row = p[1], col = p[2], lvl = p[3];
if (sPlayerbotAIConfig->limitTalentsExpansion && bot->GetLevel() <= 60 && (row > 6 || (row == 6 && col != 1)))
continue;
if (sPlayerbotAIConfig->limitTalentsExpansion && bot->GetLevel() <= 70 && (row > 8 || (row == 8 && col != 1)))
continue;
uint32 talentID = 0; uint32 talentID = 0;
uint32 learnLevel = 0; uint32 learnLevel = 0;
std::vector<TalentEntry const*>& spells = spells_row[row]; std::vector<TalentEntry const*>& spells = spells_row[row];
@@ -3224,6 +3230,12 @@ void PlayerbotFactory::InitGlyphs(bool increment)
} }
} }
if (sPlayerbotAIConfig->limitTalentsExpansion && bot->GetLevel() <= 70)
{
bot->SendTalentsInfoData(false);
return;
}
uint32 level = bot->GetLevel(); uint32 level = bot->GetLevel();
uint32 maxSlot = 0; uint32 maxSlot = 0;
if (level >= 15) if (level >= 15)