[Random bots] Teleport locs shuffle

This commit is contained in:
Yunfan Li
2024-06-22 14:55:04 +08:00
parent 02db9c6c8a
commit 7c0f67fe18

View File

@@ -1174,12 +1174,10 @@ void RandomPlayerbotMgr::RandomTeleport(Player* bot, std::vector<WorldLocation>&
PerformanceMonitorOperation* pmo = sPerformanceMonitor->start(PERF_MON_RNDBOT, "RandomTeleportByLocations"); PerformanceMonitorOperation* pmo = sPerformanceMonitor->start(PERF_MON_RNDBOT, "RandomTeleportByLocations");
uint32 index = 0; std::shuffle(std::begin(tlocs), std::end(tlocs), RandomEngine::Instance());
for (uint32 i = 0; i < tlocs.size(); i++) for (uint32 i = 0; i < tlocs.size(); i++)
{ {
for (uint8 attemtps = 0; attemtps < 3; ++attemtps) WorldLocation loc = tlocs[i];
{
WorldLocation loc = tlocs[urand(0, tlocs.size() - 1)];
float x = loc.GetPositionX(); // + (attemtps > 0 ? urand(0, sPlayerbotAIConfig->grindDistance) - sPlayerbotAIConfig->grindDistance / 2 : 0); float x = loc.GetPositionX(); // + (attemtps > 0 ? urand(0, sPlayerbotAIConfig->grindDistance) - sPlayerbotAIConfig->grindDistance / 2 : 0);
float y = loc.GetPositionY(); // + (attemtps > 0 ? urand(0, sPlayerbotAIConfig->grindDistance) - sPlayerbotAIConfig->grindDistance / 2 : 0); float y = loc.GetPositionY(); // + (attemtps > 0 ? urand(0, sPlayerbotAIConfig->grindDistance) - sPlayerbotAIConfig->grindDistance / 2 : 0);
@@ -1203,7 +1201,7 @@ void RandomPlayerbotMgr::RandomTeleport(Player* bot, std::vector<WorldLocation>&
if (map->IsInWater(bot->GetPhaseMask(), x, y, z, bot->GetCollisionHeight())) if (map->IsInWater(bot->GetPhaseMask(), x, y, z, bot->GetCollisionHeight()))
continue; continue;
float ground = map->GetHeight(x, y, z + 0.5f); float ground = map->GetHeight(bot->GetPhaseMask(), x, y, z + 0.5f);
if (ground <= INVALID_HEIGHT) if (ground <= INVALID_HEIGHT)
continue; continue;
@@ -1241,12 +1239,11 @@ void RandomPlayerbotMgr::RandomTeleport(Player* bot, std::vector<WorldLocation>&
return; return;
} }
}
if (pmo) if (pmo)
pmo->finish(); pmo->finish();
LOG_ERROR("playerbots", "Cannot teleport bot {} - no locations available", bot->GetName().c_str()); LOG_ERROR("playerbots", "Cannot teleport bot {} - no locations available ({} locations)", bot->GetName().c_str(), tlocs.size());
} }
void RandomPlayerbotMgr::PrepareTeleportCache() void RandomPlayerbotMgr::PrepareTeleportCache()
@@ -1413,7 +1410,7 @@ void RandomPlayerbotMgr::RandomTeleportForLevel(Player* bot)
uint32 level = bot->getLevel(); uint32 level = bot->getLevel();
uint8 race = bot->getRace(); uint8 race = bot->getRace();
LOG_DEBUG("playerbots", "Random teleporting bot {} for level {} ({} locations available)", bot->GetName().c_str(), bot->GetLevel(), locsPerLevelCache[level].size()); LOG_DEBUG("playerbots", "Random teleporting bot {} for level {} ({} locations available)", bot->GetName().c_str(), bot->GetLevel(), locsPerLevelCache[level].size());
if (urand(0, 100) < sPlayerbotAIConfig->probTeleToBankers * 100) { if (level > 10 && urand(0, 100) < sPlayerbotAIConfig->probTeleToBankers * 100) {
RandomTeleport(bot, bankerLocsPerLevelCache[level], true); RandomTeleport(bot, bankerLocsPerLevelCache[level], true);
} else { } else {
RandomTeleport(bot, locsPerLevelCache[level]); RandomTeleport(bot, locsPerLevelCache[level]);