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 <noreply@anthropic.com>
This commit is contained in:
SylvaniaCore deploy
2026-08-12 09:36:30 +02:00
parent b40f842134
commit 6fcdfc7d2f
2 changed files with 21 additions and 4 deletions
+5 -4
View File
@@ -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<Player>(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*/)
+16
View File
@@ -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();