mirror of
https://github.com/liyunfan1223/mod-playerbots.git
synced 2026-02-21 02:20:00 +01:00
Compare commits
No commits in common. "e35900f9d041e755854c930afe376789c644039a" and "43164e74e1f10ede8bb19231fe7629bec764e5d5" have entirely different histories.
e35900f9d0
...
43164e74e1
@ -1530,4 +1530,5 @@ UPDATE `ai_playerbot_texts` SET `text_loc3`='%player bewegt sich, um den roten S
|
|||||||
UPDATE `ai_playerbot_texts` SET `text_loc3`='%player bewegt sich, um den blauen Strahl zu blocken!' WHERE `id`=1713;
|
UPDATE `ai_playerbot_texts` SET `text_loc3`='%player bewegt sich, um den blauen Strahl zu blocken!' WHERE `id`=1713;
|
||||||
UPDATE `ai_playerbot_texts` SET `text_loc3`='%player bewegt sich, um den grünen Strahl zu blocken!' WHERE `id`=1714;
|
UPDATE `ai_playerbot_texts` SET `text_loc3`='%player bewegt sich, um den grünen Strahl zu blocken!' WHERE `id`=1714;
|
||||||
UPDATE `ai_playerbot_texts` SET `text_loc3`='%player verlässt den blauen Strahl--nächster Blocker los!' WHERE `id`=1715;
|
UPDATE `ai_playerbot_texts` SET `text_loc3`='%player verlässt den blauen Strahl--nächster Blocker los!' WHERE `id`=1715;
|
||||||
|
|
||||||
UPDATE `ai_playerbot_texts` SET `text_loc3`='%player verlässt den grünen Strahl--nächster Blocker los!' WHERE `id`=1716;
|
UPDATE `ai_playerbot_texts` SET `text_loc3`='%player verlässt den grünen Strahl--nächster Blocker los!' WHERE `id`=1716;
|
||||||
|
|||||||
@ -875,67 +875,23 @@ void RandomPlayerbotFactory::CreateRandomGuilds()
|
|||||||
LOG_INFO("playerbots", "Random bot guilds deleted");
|
LOG_INFO("playerbots", "Random bot guilds deleted");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unordered_set<uint32> botAccounts;
|
|
||||||
botAccounts.reserve(sPlayerbotAIConfig->randomBotAccounts.size());
|
|
||||||
for (uint32 acc : sPlayerbotAIConfig->randomBotAccounts)
|
|
||||||
botAccounts.insert(acc);
|
|
||||||
|
|
||||||
// Recount bot guilds directly from the database (does not depend on connected bots)
|
|
||||||
uint32 guildNumber = 0;
|
uint32 guildNumber = 0;
|
||||||
sPlayerbotAIConfig->randomBotGuilds.clear();
|
GuidVector availableLeaders;
|
||||||
sPlayerbotAIConfig->randomBotGuilds.shrink_to_fit(); // avoids accumulating old capacity
|
for (std::vector<uint32>::iterator i = randomBots.begin(); i != randomBots.end(); ++i)
|
||||||
|
|
||||||
if (!botAccounts.empty())
|
|
||||||
{
|
{
|
||||||
if (QueryResult res = CharacterDatabase.Query(
|
ObjectGuid leader = ObjectGuid::Create<HighGuid::Player>(*i);
|
||||||
// We only retrieve what is necessary (guildid, leader account)
|
if (Guild* guild = sGuildMgr->GetGuildByLeader(leader))
|
||||||
"SELECT g.guildid, c.account "
|
|
||||||
"FROM guild g JOIN characters c ON g.leaderguid = c.guid"))
|
|
||||||
{
|
|
||||||
do
|
|
||||||
{
|
|
||||||
Field* f = res->Fetch();
|
|
||||||
const uint32 guildId = f[0].Get<uint32>();
|
|
||||||
const uint32 accountId = f[1].Get<uint32>();
|
|
||||||
|
|
||||||
// Determine if guild leader's account is a bot account.
|
|
||||||
if (botAccounts.find(accountId) != botAccounts.end())
|
|
||||||
{
|
{
|
||||||
++guildNumber;
|
++guildNumber;
|
||||||
sPlayerbotAIConfig->randomBotGuilds.push_back(guildId);
|
sPlayerbotAIConfig->randomBotGuilds.push_back(guild->GetId());
|
||||||
}
|
|
||||||
} while (res->NextRow());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_INFO("playerbots", "{}/{} random bot guilds exist in guild table",guildNumber, sPlayerbotAIConfig->randomBotGuildCount);
|
|
||||||
if (guildNumber >= sPlayerbotAIConfig->randomBotGuildCount)
|
|
||||||
{
|
|
||||||
LOG_DEBUG("playerbots", "No new random guilds required");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We list the available leaders (online bots, not in guilds)
|
|
||||||
GuidVector availableLeaders;
|
|
||||||
availableLeaders.reserve(randomBots.size()); // limit reallocs
|
|
||||||
for (const uint32 botLowGuid : randomBots)
|
|
||||||
{
|
|
||||||
ObjectGuid leader = ObjectGuid::Create<HighGuid::Player>(botLowGuid);
|
|
||||||
if (sGuildMgr->GetGuildByLeader(leader))
|
|
||||||
{
|
|
||||||
// already GuildLeader -> ignored
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (Player* player = ObjectAccessor::FindPlayer(leader))
|
Player* player = ObjectAccessor::FindPlayer(leader);
|
||||||
{
|
if (player && !player->GetGuildId())
|
||||||
if (!player->GetGuildId())
|
|
||||||
availableLeaders.push_back(leader);
|
availableLeaders.push_back(leader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
LOG_DEBUG("playerbots", "{} available leaders for new guilds found", availableLeaders.size());
|
|
||||||
|
|
||||||
// Create up to randomBotGuildCount by counting only EFFECTIVE creations
|
// Create up to randomBotGuildCount by counting only EFFECTIVE creations
|
||||||
uint32 createdThisRun = 0;
|
uint32 createdThisRun = 0;
|
||||||
@ -943,10 +899,10 @@ void RandomPlayerbotFactory::CreateRandomGuilds()
|
|||||||
{
|
{
|
||||||
std::string const guildName = CreateRandomGuildName();
|
std::string const guildName = CreateRandomGuildName();
|
||||||
if (guildName.empty())
|
if (guildName.empty())
|
||||||
break; // no more names available in playerbots_guild_names
|
continue;
|
||||||
|
|
||||||
if (sGuildMgr->GetGuildByName(guildName))
|
if (sGuildMgr->GetGuildByName(guildName))
|
||||||
continue; // name already taken, skip
|
continue;
|
||||||
|
|
||||||
if (availableLeaders.empty())
|
if (availableLeaders.empty())
|
||||||
{
|
{
|
||||||
@ -1025,7 +981,8 @@ void RandomPlayerbotFactory::CreateRandomGuilds()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Shows the true total and how many were created during this run
|
// Shows the true total and how many were created during this run
|
||||||
LOG_INFO("playerbots", "{} random bot guilds created this run)", createdThisRun);
|
LOG_INFO("playerbots", "{} random bot guilds available (created this run: {})",
|
||||||
|
uint32(sPlayerbotAIConfig->randomBotGuilds.size()), createdThisRun);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string const RandomPlayerbotFactory::CreateRandomGuildName()
|
std::string const RandomPlayerbotFactory::CreateRandomGuildName()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user