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:
@@ -450,15 +450,16 @@ void MotionMaster::MovePathfinding(PathParameter* pathParam)
|
|||||||
{
|
{
|
||||||
if (!pathParam)
|
if (!pathParam)
|
||||||
return;
|
return;
|
||||||
UnitMoveType curMoveType = UnitMoveType::MOVE_RUN;
|
// SylvaniaCore (module BG BotFill): l ancien PointMovementGenerator (generatePath=false)
|
||||||
G3D::Vector3 dest = pathParam->destPosition;
|
// relancait un deplacement en ligne droite au moindre evenement (changement de vitesse),
|
||||||
Mutate(new PointMovementGenerator<Player>(0, dest.x, dest.y, dest.z, false, _owner->GetSpeed(curMoveType)), MOTION_SLOT_CONTROLLED);// MOTION_SLOT_ACTIVE);
|
// 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);
|
Movement::MoveSplineInit init(_owner);
|
||||||
init.MovebyPath(pathParam->finishPaths);
|
init.MovebyPath(pathParam->finishPaths);
|
||||||
init.SetSmooth();
|
init.SetSmooth();
|
||||||
init.SetWalk(false);
|
init.SetWalk(false);
|
||||||
init.Launch();
|
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*/)
|
void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, float speedZ, Movement::SpellEffectExtraData const* spellEffectExtraData /*= nullptr*/)
|
||||||
|
|||||||
@@ -1882,6 +1882,22 @@ void World::SetInitialWorldSettings()
|
|||||||
MMAP::MMapManager* mmmgr = MMAP::MMapFactory::createOrGetMMapManager();
|
MMAP::MMapManager* mmmgr = MMAP::MMapFactory::createOrGetMMapManager();
|
||||||
mmmgr->InitializeThreadUnsafe(mapData);
|
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...");
|
TC_LOG_INFO("server.loading", "Loading SpellInfo store...");
|
||||||
sSpellMgr->LoadSpellInfoStore();
|
sSpellMgr->LoadSpellInfoStore();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user