Skip to content

Commit

Permalink
NPCBots: Add config param to allow limiting BG bots maxlevel by Expan…
Browse files Browse the repository at this point in the history
…sion and MaxPlayerLevel
  • Loading branch information
trickerer committed Aug 13, 2023
1 parent e3c7e09 commit 8841855
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 4 deletions.
17 changes: 13 additions & 4 deletions src/server/game/AI/NpcBots/botdatamgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include "SpellInfo.h"
#include "SpellMgr.h"
#include "StringConvert.h"
#include "World.h"
#include "WorldDatabase.h"
/*
Npc Bot Data Manager by Trickerer ([email protected])
Expand Down Expand Up @@ -302,16 +303,24 @@ struct WanderingBotsGenerator
bot_template.speed_run = BotMgr::GetBotWandererSpeedMod();
bot_template.KillCredit[0] = orig_entry;
//bot_template.type_flags |= CREATURE_TYPE_FLAG_FORCE_GOSSIP;

uint32 max_level = DEFAULT_MAX_LEVEL;
if (bracketEntry && BotMgr::IsBotLevelCappedByConfigBG())
{
max_level = std::min<uint32>(sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL), max_level);
max_level = std::min<uint32>(GetMaxLevelForExpansion(sWorld->getIntConfig(CONFIG_EXPANSION)), max_level);
}

if (bracketEntry)
{
//force level range for bgs
bot_template.minlevel = std::min<uint32>(bracketEntry->MinLevel, DEFAULT_MAX_LEVEL);
bot_template.maxlevel = std::min<uint32>(bracketEntry->MaxLevel, DEFAULT_MAX_LEVEL);
bot_template.minlevel = std::min<uint32>(bracketEntry->MinLevel, max_level);
bot_template.maxlevel = std::min<uint32>(bracketEntry->MaxLevel, max_level);
}
else
{
bot_template.minlevel = std::min<uint32>(std::max<uint32>(desired_bracket * 10, spawnLoc->GetLevels().first), DEFAULT_MAX_LEVEL);
bot_template.maxlevel = std::min<uint32>(std::min<uint32>(desired_bracket * 10 + 9, spawnLoc->GetLevels().second), DEFAULT_MAX_LEVEL);
bot_template.minlevel = std::min<uint32>(std::max<uint32>(desired_bracket * 10, spawnLoc->GetLevels().first), max_level);
bot_template.maxlevel = std::min<uint32>(std::min<uint32>(desired_bracket * 10 + 9, spawnLoc->GetLevels().second), max_level);
bot_template.flags_extra &= ~(CREATURE_FLAG_EXTRA_NO_XP);
}

Expand Down
6 changes: 6 additions & 0 deletions src/server/game/AI/NpcBots/botmgr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ bool _enableclass_cryptlord;
bool _enrageOnDismiss;
bool _botStatLimits;
bool _enableWanderingBotsBG;
bool _enableConfigLevelCapBG;
bool _bothk_enable;
bool _bothk_message_enable;
bool _bothk_achievements_enable;
Expand Down Expand Up @@ -368,6 +369,7 @@ void BotMgr::LoadConfig(bool reload)
_botStatLimits_crit = sConfigMgr->GetFloatDefault("NpcBot.Stats.Limits.Crit", 95.0f);
_desiredWanderingBotsCount = sConfigMgr->GetIntDefault("NpcBot.WanderingBots.Continents.Count", 0);
_enableWanderingBotsBG = sConfigMgr->GetBoolDefault("NpcBot.WanderingBots.BG.Enable", false);
_enableConfigLevelCapBG = sConfigMgr->GetBoolDefault("NpcBot.WanderingBots.BG.CapLevel", false);
_targetBGPlayersPerTeamCount_AV = sConfigMgr->GetIntDefault("NpcBot.WanderingBots.BG.TargetTeamPlayersCount.AV", 0);
_targetBGPlayersPerTeamCount_WS = sConfigMgr->GetIntDefault("NpcBot.WanderingBots.BG.TargetTeamPlayersCount.WS", 8);
_targetBGPlayersPerTeamCount_AB = sConfigMgr->GetIntDefault("NpcBot.WanderingBots.BG.TargetTeamPlayersCount.AB", 12);
Expand Down Expand Up @@ -707,6 +709,10 @@ bool BotMgr::IsBotGenerationEnabledBGs()
{
return _enableWanderingBotsBG;
}
bool BotMgr::IsBotLevelCappedByConfigBG()
{
return _enableConfigLevelCapBG;
}
bool BotMgr::IsBotGenerationEnabledWorldMapId(uint32 mapId)
{
return std::find(std::cbegin(_enabled_wander_node_maps), std::cend(_enabled_wander_node_maps), mapId) != std::cend(_enabled_wander_node_maps);
Expand Down
1 change: 1 addition & 0 deletions src/server/game/AI/NpcBots/botmgr.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ class TC_GAME_API BotMgr
static bool IsFoodInterruptedByMovement();
static bool FilterRaces();
static bool IsBotGenerationEnabledBGs();
static bool IsBotLevelCappedByConfigBG();
static bool IsBotGenerationEnabledWorldMapId(uint32 mapId);
static bool IsBotHKEnabled();
static bool IsBotHKMessageEnabled();
Expand Down
9 changes: 9 additions & 0 deletions src/server/worldserver/worldserver.conf.dist
Original file line number Diff line number Diff line change
Expand Up @@ -4587,6 +4587,15 @@ NpcBot.WanderingBots.Continents.Maps = 0,1,530,571

NpcBot.WanderingBots.BG.Enable = 0

#
# NpcBot.WanderingBots.BG.CapLevel
# Description: Enforce BG bot maximum level limit set by Expansion and MaxPlayerLevel
# config paramter values.
# Default: 0 - (Disabled)
# 1 - (Enable)

NpcBot.WanderingBots.BG.CapLevel = 0

#
# NpcBot.WanderingBots.BG.TargetTeamPlayersCount.<BGTYPE>
# Description: Target BG players count per team to aim for when generating BG bots.
Expand Down

0 comments on commit 8841855

Please sign in to comment.