diff --git a/src/server/game/AI/PlayerAI/BotAI.cpp b/src/server/game/AI/PlayerAI/BotAI.cpp index 17f4c44..2617cc4 100644 --- a/src/server/game/AI/PlayerAI/BotAI.cpp +++ b/src/server/game/AI/PlayerAI/BotAI.cpp @@ -1769,7 +1769,7 @@ void BotBGAI::UpdateBotAI(uint32 diff) if (Unit* siegeBoss = ObjectAccessor::GetUnit(*me, m_SiegeTarget)) { if (siegeBoss->IsAlive() && me->IsValidAttackTarget(siegeBoss) - && me->GetDistance(siegeBoss) < searchRange * 2.0f) + && me->GetDistance(siegeBoss) < sCapitalSiegeMgr->GetBossEngageRange()) me->SetSelection(m_SiegeTarget); } } diff --git a/src/server/game/CapitalSiege/CapitalSiegeMgr.cpp b/src/server/game/CapitalSiege/CapitalSiegeMgr.cpp index 1e062dc..ecfd5cf 100644 --- a/src/server/game/CapitalSiege/CapitalSiegeMgr.cpp +++ b/src/server/game/CapitalSiege/CapitalSiegeMgr.cpp @@ -52,7 +52,7 @@ namespace CapitalSiegeMgr::CapitalSiegeMgr() : m_enabled(false), m_hourMin(18), m_hourMax(24), m_botCount(50), m_botLevel(110), - m_duration(HOUR), m_spawnRate(5), m_pvpMode(1), m_engageRange(18.0f), m_stallTimeout(20), m_advanceWindow(12), + m_duration(HOUR), m_spawnRate(5), m_pvpMode(1), m_engageRange(18.0f), m_bossEngageRange(40.0f), m_stallTimeout(20), m_advanceWindow(12), m_maxDiff(400), m_announce(true), m_lastEventDay(0), m_lastAttackerTeam(TEAM_NEUTRAL), m_scheduledDay(0), m_scheduledTime(0), m_scheduledTeam(TEAM_NEUTRAL), @@ -117,6 +117,7 @@ void CapitalSiegeMgr::LoadConfig() m_spawnRate = sConfigMgr->GetIntDefault("siege_spawn_rate", 5); m_pvpMode = sConfigMgr->GetIntDefault("siege_pvp", 1); m_engageRange = sConfigMgr->GetFloatDefault("siege_engage_range", 18.0f); + m_bossEngageRange = sConfigMgr->GetFloatDefault("siege_boss_engage_range", 40.0f); m_stallTimeout = sConfigMgr->GetIntDefault("siege_stall_timeout", 20); m_advanceWindow = sConfigMgr->GetIntDefault("siege_advance_window", 12); m_maxDiff = sConfigMgr->GetIntDefault("siege_maxdiff", 400); @@ -150,6 +151,12 @@ void CapitalSiegeMgr::LoadConfig() // toute la ville au lieu de suivre leur route. if (m_engageRange < 5.0f || m_engageRange > 32.0f) m_engageRange = 18.0f; + // Le rayon de prise a partie du dirigeant est independant de la portee + // d engagement courante : les deux n ont rien a voir, et les coupler + // faisait qu abaisser siege_engage_range retrecissait aussi le rayon + // du boss, exactement quand on cherchait a le rendre atteignable. + if (m_bossEngageRange < 10.0f || m_bossEngageRange > 60.0f) + m_bossEngageRange = 40.0f; // Une fenetre de marche nulle rendrait le garde-fou anti-enlisement inutile. if (!m_advanceWindow) m_advanceWindow = 12; diff --git a/src/server/game/CapitalSiege/CapitalSiegeMgr.h b/src/server/game/CapitalSiege/CapitalSiegeMgr.h index 1e5243c..f3c6397 100644 --- a/src/server/game/CapitalSiege/CapitalSiegeMgr.h +++ b/src/server/game/CapitalSiege/CapitalSiegeMgr.h @@ -120,6 +120,7 @@ public: uint32 GetPvpMode() const { return m_pvpMode; } float GetEngageRange() const { return m_engageRange; } uint32 GetStallTimeout() const { return m_stallTimeout; } + float GetBossEngageRange() const { return m_bossEngageRange; } uint32 GetAdvanceWindow() const { return m_advanceWindow; } static char const* GetTeamName(TeamId team); @@ -172,6 +173,7 @@ private: uint32 m_spawnRate; // bots par seconde uint32 m_pvpMode; // 0 = PNJ seuls, 1 = joueurs flagges PvP, 2 = tous float m_engageRange; // yards, portee d engagement en mode siege + float m_bossEngageRange; // yards, rayon de prise a partie du dirigeant uint32 m_stallTimeout; // secondes sans progresser avant de lacher la cible uint32 m_advanceWindow; // secondes de marche forcee apres un enlisement uint32 m_maxDiff; // ms, seuil d arret d urgence (0 = desactive) diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index cb89dfa..cb607bd 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -4739,7 +4739,19 @@ siege_pvp = 1 # Default: 18 # -siege_engage_range = 18 +siege_engage_range = 10 + +# +# siege_boss_engage_range +# Description: Rayon en yards a partir duquel un bot prend le dirigeant +# pour cible prioritaire. Independant de siege_engage_range : +# coupler les deux faisait qu abaisser la portee d engagement +# retrecissait aussi ce rayon, exactement quand on cherchait +# a rendre le dirigeant atteignable. Borne a 10 - 60. +# Default: 40 +# + +siege_boss_engage_range = 40 # # siege_stall_timeout