mirror of
https://github.com/kadeshar/mod-player-bot-level-brackets.git
synced 2026-01-13 01:08:36 +00:00
Fixing some issues with tables
This commit is contained in:
@@ -403,43 +403,52 @@ static void UpdatePersistentGuildTracker()
|
|||||||
LOG_INFO("server.loading", "[BotLevelBrackets] Starting persistent guild tracker update...");
|
LOG_INFO("server.loading", "[BotLevelBrackets] Starting persistent guild tracker update...");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Query to get all guilds and check if they have real players
|
// Use the same approach as LoadRealPlayerGuildIds - iterate through all players
|
||||||
QueryResult result = CharacterDatabase.Query(
|
std::unordered_set<uint32> currentRealPlayerGuilds;
|
||||||
"SELECT DISTINCT g.guildid, "
|
|
||||||
"CASE WHEN EXISTS("
|
|
||||||
" SELECT 1 FROM characters c "
|
|
||||||
" WHERE c.guid = gm.guid "
|
|
||||||
" AND c.guid NOT IN ("
|
|
||||||
" SELECT owner FROM ai_playerbot_random_bots"
|
|
||||||
" )"
|
|
||||||
") THEN 1 ELSE 0 END as has_real_players "
|
|
||||||
"FROM guild g "
|
|
||||||
"LEFT JOIN guild_member gm ON g.guildid = gm.guildid"
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!result)
|
// Get all players using standard AzerothCore method
|
||||||
|
SessionMap const& sessions = sWorld->GetAllSessions();
|
||||||
|
for (SessionMap::const_iterator itr = sessions.begin(); itr != sessions.end(); ++itr)
|
||||||
|
{
|
||||||
|
WorldSession* session = itr->second;
|
||||||
|
if (!session)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Player* player = session->GetPlayer();
|
||||||
|
if (!player || !player->IsInWorld())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Use the existing bot detection function
|
||||||
|
if (!IsPlayerBot(player))
|
||||||
|
{
|
||||||
|
uint32 guildId = player->GetGuildId();
|
||||||
|
if (guildId != 0)
|
||||||
|
{
|
||||||
|
currentRealPlayerGuilds.insert(guildId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get all guild IDs to ensure we update all records
|
||||||
|
QueryResult guildResult = CharacterDatabase.Query("SELECT guildid FROM guild");
|
||||||
|
if (!guildResult)
|
||||||
{
|
{
|
||||||
if (g_BotDistFullDebugMode)
|
if (g_BotDistFullDebugMode)
|
||||||
{
|
{
|
||||||
LOG_INFO("server.loading", "[BotLevelBrackets] No guild data found for persistent tracker update.");
|
LOG_INFO("server.loading", "[BotLevelBrackets] No guilds found for persistent tracker update.");
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unordered_set<uint32> currentRealPlayerGuilds;
|
|
||||||
uint32 updatedCount = 0;
|
uint32 updatedCount = 0;
|
||||||
|
|
||||||
|
// Update all guild records
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
uint32 guildId = result->Fetch()->Get<uint32>();
|
uint32 guildId = guildResult->Fetch()->Get<uint32>();
|
||||||
bool hasRealPlayers = result->Fetch()->Get<bool>();
|
bool hasRealPlayers = currentRealPlayerGuilds.find(guildId) != currentRealPlayerGuilds.end();
|
||||||
|
|
||||||
if (hasRealPlayers)
|
// Update or insert the record - ONLY database call for bot_level_brackets_guild_tracker
|
||||||
{
|
|
||||||
currentRealPlayerGuilds.insert(guildId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update or insert the record
|
|
||||||
CharacterDatabase.Execute(
|
CharacterDatabase.Execute(
|
||||||
"INSERT INTO bot_level_brackets_guild_tracker (guild_id, has_real_players) "
|
"INSERT INTO bot_level_brackets_guild_tracker (guild_id, has_real_players) "
|
||||||
"VALUES ({}, {}) "
|
"VALUES ({}, {}) "
|
||||||
@@ -449,7 +458,7 @@ static void UpdatePersistentGuildTracker()
|
|||||||
|
|
||||||
updatedCount++;
|
updatedCount++;
|
||||||
|
|
||||||
} while (result->NextRow());
|
} while (guildResult->NextRow());
|
||||||
|
|
||||||
// Update our in-memory cache
|
// Update our in-memory cache
|
||||||
g_PersistentRealPlayerGuildIds = currentRealPlayerGuilds;
|
g_PersistentRealPlayerGuildIds = currentRealPlayerGuilds;
|
||||||
|
|||||||
Reference in New Issue
Block a user