From 6fcdfc7d2f71e51c29477e83526fa62103c72e8d Mon Sep 17 00:00:00 2001 From: SylvaniaCore deploy Date: Wed, 12 Aug 2026 09:36:30 +0200 Subject: [PATCH] BG BotFill : pathfinding des bots repare (tuiles navmesh + generateur de mouvement) 1. Les tuiles navmesh ne se chargeaient qu avec les grilles occupees : tout trajet de bot vers une zone vide retombait en BuildShortcut (ligne droite a travers le decor). Prechargement des tuiles des 5 cartes BG au boot. 2. MovePathfinding empilait un PointMovementGenerator generatePath=false qui relancait un deplacement en ligne droite au moindre changement de vitesse, ecrasant la spline du chemin. Remplace par un generateur passif. Co-Authored-By: Claude Fable 5 --- src/server/game/Movement/MotionMaster.cpp | 9 +++++---- src/server/game/World/World.cpp | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 8e23672..317245c 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -450,15 +450,16 @@ void MotionMaster::MovePathfinding(PathParameter* pathParam) { if (!pathParam) return; - UnitMoveType curMoveType = UnitMoveType::MOVE_RUN; - G3D::Vector3 dest = pathParam->destPosition; - Mutate(new PointMovementGenerator(0, dest.x, dest.y, dest.z, false, _owner->GetSpeed(curMoveType)), MOTION_SLOT_CONTROLLED);// MOTION_SLOT_ACTIVE); - + // SylvaniaCore (module BG BotFill): l ancien PointMovementGenerator (generatePath=false) + // relancait un deplacement en ligne droite au moindre evenement (changement de vitesse), + // ecrasant la spline du chemin calcule -> bots a travers le decor et vitesse anormale. + // On lance la spline du chemin puis on pose un generateur passif qui attend sa fin. Movement::MoveSplineInit init(_owner); init.MovebyPath(pathParam->finishPaths); init.SetSmooth(); init.SetWalk(false); init.Launch(); + Mutate(new EffectMovementGenerator(0), MOTION_SLOT_CONTROLLED); } void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData /*= nullptr*/) diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 5304ad8..afced8b 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1882,6 +1882,22 @@ void World::SetInitialWorldSettings() MMAP::MMapManager* mmmgr = MMAP::MMapFactory::createOrGetMMapManager(); mmmgr->InitializeThreadUnsafe(mapData); + // SylvaniaCore (module BG BotFill): precharge les tuiles navmesh des cartes de champs de + // bataille. Sans cela, les tuiles ne se chargent qu avec les grilles (la ou il y a des + // joueurs) et le pathfinding des bots vers les zones vides retombe en ligne droite + // (BuildShortcut) : bots a travers le decor. + if (sConfigMgr->GetIntDefault("pbotbg", 0) || sConfigMgr->GetIntDefault("pbotall", 1)) + { + uint32 preloadTiles = 0; + uint32 const bgNavMaps[5] = { 30, 489, 529, 566, 628 }; + for (uint32 bgMapId : bgNavMaps) + for (int32 gx = 0; gx < 64; ++gx) + for (int32 gy = 0; gy < 64; ++gy) + if (mmmgr->loadMap(m_dataPath, bgMapId, gx, gy)) + ++preloadTiles; + TC_LOG_INFO("server.loading", ">> BG BotFill: %u tuiles navmesh prechargees pour les champs de bataille", preloadTiles); + } + TC_LOG_INFO("server.loading", "Loading SpellInfo store..."); sSpellMgr->LoadSpellInfoStore();