mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
- Added disabled without real player feature (#1335)
This commit is contained in:
@@ -96,6 +96,11 @@ AiPlayerbot.RandomBotAccountCount = 0
|
|||||||
# To apply this, set the number to 1 and run the Worldserver. Once deletion is complete, if you would like to recreate randombots, set the number back to 0 and rerun the Worldserver.
|
# To apply this, set the number to 1 and run the Worldserver. Once deletion is complete, if you would like to recreate randombots, set the number back to 0 and rerun the Worldserver.
|
||||||
AiPlayerbot.DeleteRandomBotAccounts = 0
|
AiPlayerbot.DeleteRandomBotAccounts = 0
|
||||||
|
|
||||||
|
# Disabled without real player
|
||||||
|
AiPlayerbot.DisabledWithoutRealPlayer = 0
|
||||||
|
AiPlayerbot.DisabledWithoutRealPlayerLoginDelay = 30
|
||||||
|
AiPlayerbot.DisabledWithoutRealPlayerLogoutDelay = 300
|
||||||
|
|
||||||
####################################################################################################
|
####################################################################################################
|
||||||
|
|
||||||
###################################
|
###################################
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ bool PlayerbotAIConfig::Initialize()
|
|||||||
sitDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.SitDelay", 30000);
|
sitDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.SitDelay", 30000);
|
||||||
returnDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.ReturnDelay", 7000);
|
returnDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.ReturnDelay", 7000);
|
||||||
lootDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.LootDelay", 1000);
|
lootDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.LootDelay", 1000);
|
||||||
|
disabledWithoutRealPlayerLoginDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.DisabledWithoutRealPlayerLoginDelay", 30);
|
||||||
|
disabledWithoutRealPlayerLogoutDelay = sConfigMgr->GetOption<int32>("AiPlayerbot.DisabledWithoutRealPlayerLogoutDelay", 300);
|
||||||
|
|
||||||
farDistance = sConfigMgr->GetOption<float>("AiPlayerbot.FarDistance", 20.0f);
|
farDistance = sConfigMgr->GetOption<float>("AiPlayerbot.FarDistance", 20.0f);
|
||||||
sightDistance = sConfigMgr->GetOption<float>("AiPlayerbot.SightDistance", 75.0f);
|
sightDistance = sConfigMgr->GetOption<float>("AiPlayerbot.SightDistance", 75.0f);
|
||||||
@@ -129,6 +131,7 @@ bool PlayerbotAIConfig::Initialize()
|
|||||||
allowAccountBots = sConfigMgr->GetOption<bool>("AiPlayerbot.AllowAccountBots", true);
|
allowAccountBots = sConfigMgr->GetOption<bool>("AiPlayerbot.AllowAccountBots", true);
|
||||||
allowGuildBots = sConfigMgr->GetOption<bool>("AiPlayerbot.AllowGuildBots", true);
|
allowGuildBots = sConfigMgr->GetOption<bool>("AiPlayerbot.AllowGuildBots", true);
|
||||||
allowTrustedAccountBots = sConfigMgr->GetOption<bool>("AiPlayerbot.AllowTrustedAccountBots", true);
|
allowTrustedAccountBots = sConfigMgr->GetOption<bool>("AiPlayerbot.AllowTrustedAccountBots", true);
|
||||||
|
disabledWithoutRealPlayer = sConfigMgr->GetOption<bool>("AiPlayerbot.DisabledWithoutRealPlayer", false);
|
||||||
randomBotGuildNearby = sConfigMgr->GetOption<bool>("AiPlayerbot.RandomBotGuildNearby", false);
|
randomBotGuildNearby = sConfigMgr->GetOption<bool>("AiPlayerbot.RandomBotGuildNearby", false);
|
||||||
randomBotInvitePlayer = sConfigMgr->GetOption<bool>("AiPlayerbot.RandomBotInvitePlayer", false);
|
randomBotInvitePlayer = sConfigMgr->GetOption<bool>("AiPlayerbot.RandomBotInvitePlayer", false);
|
||||||
inviteChat = sConfigMgr->GetOption<bool>("AiPlayerbot.InviteChat", false);
|
inviteChat = sConfigMgr->GetOption<bool>("AiPlayerbot.InviteChat", false);
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public:
|
|||||||
bool IsInPvpProhibitedArea(uint32 id);
|
bool IsInPvpProhibitedArea(uint32 id);
|
||||||
|
|
||||||
bool enabled;
|
bool enabled;
|
||||||
|
bool disabledWithoutRealPlayer;
|
||||||
bool allowAccountBots, allowGuildBots, allowTrustedAccountBots;
|
bool allowAccountBots, allowGuildBots, allowTrustedAccountBots;
|
||||||
bool randomBotGuildNearby, randomBotInvitePlayer, inviteChat;
|
bool randomBotGuildNearby, randomBotInvitePlayer, inviteChat;
|
||||||
uint32 globalCoolDown, reactDelay, maxWaitForMove, disableMoveSplinePath, maxMovementSearchTime, expireActionTime,
|
uint32 globalCoolDown, reactDelay, maxWaitForMove, disableMoveSplinePath, maxMovementSearchTime, expireActionTime,
|
||||||
@@ -99,6 +100,7 @@ public:
|
|||||||
uint32 minRandomBotPvpTime, maxRandomBotPvpTime;
|
uint32 minRandomBotPvpTime, maxRandomBotPvpTime;
|
||||||
uint32 randomBotsPerInterval;
|
uint32 randomBotsPerInterval;
|
||||||
uint32 minRandomBotsPriceChangeInterval, maxRandomBotsPriceChangeInterval;
|
uint32 minRandomBotsPriceChangeInterval, maxRandomBotsPriceChangeInterval;
|
||||||
|
uint32 disabledWithoutRealPlayerLoginDelay, disabledWithoutRealPlayerLogoutDelay;
|
||||||
bool randomBotJoinLfg;
|
bool randomBotJoinLfg;
|
||||||
|
|
||||||
// chat
|
// chat
|
||||||
|
|||||||
@@ -49,6 +49,7 @@
|
|||||||
#include "UpdateTime.h"
|
#include "UpdateTime.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
#include "RandomPlayerbotFactory.h"
|
#include "RandomPlayerbotFactory.h"
|
||||||
|
#include <WorldSessionMgr.h>
|
||||||
|
|
||||||
struct GuidClassRaceInfo {
|
struct GuidClassRaceInfo {
|
||||||
ObjectGuid::LowType guid;
|
ObjectGuid::LowType guid;
|
||||||
@@ -355,7 +356,43 @@ void RandomPlayerbotMgr::UpdateAIInternal(uint32 elapsed, bool /*minimal*/)
|
|||||||
PERF_MON_TOTAL,
|
PERF_MON_TOTAL,
|
||||||
onlineBotCount < maxAllowedBotCount ? "RandomPlayerbotMgr::Login" : "RandomPlayerbotMgr::UpdateAIInternal");
|
onlineBotCount < maxAllowedBotCount ? "RandomPlayerbotMgr::Login" : "RandomPlayerbotMgr::UpdateAIInternal");
|
||||||
|
|
||||||
if (availableBotCount < maxAllowedBotCount)
|
bool realPlayerIsLogged = false;
|
||||||
|
if (sPlayerbotAIConfig->disabledWithoutRealPlayer)
|
||||||
|
{
|
||||||
|
if (sWorldSessionMgr->GetActiveAndQueuedSessionCount() > 0)
|
||||||
|
{
|
||||||
|
RealPlayerLastTimeSeen = time(nullptr);
|
||||||
|
realPlayerIsLogged = true;
|
||||||
|
|
||||||
|
if (DelayLoginBotsTimer == 0)
|
||||||
|
{
|
||||||
|
DelayLoginBotsTimer = time(nullptr) + sPlayerbotAIConfig->disabledWithoutRealPlayerLoginDelay;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (DelayLoginBotsTimer)
|
||||||
|
{
|
||||||
|
DelayLoginBotsTimer = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (RealPlayerLastTimeSeen != 0 && onlineBotCount > 0 &&
|
||||||
|
time(nullptr) > RealPlayerLastTimeSeen + sPlayerbotAIConfig->disabledWithoutRealPlayerLogoutDelay)
|
||||||
|
{
|
||||||
|
LogoutAllBots();
|
||||||
|
LOG_INFO("playerbots",
|
||||||
|
"Logout all bots due no real player session.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (availableBotCount < maxAllowedBotCount &&
|
||||||
|
(sPlayerbotAIConfig->disabledWithoutRealPlayer == false ||
|
||||||
|
(realPlayerIsLogged && DelayLoginBotsTimer != 0 && time(nullptr) >= DelayLoginBotsTimer)))
|
||||||
|
{
|
||||||
|
AddRandomBots();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (availableBotCount < maxAllowedBotCount)
|
||||||
{
|
{
|
||||||
AddRandomBots();
|
AddRandomBots();
|
||||||
}
|
}
|
||||||
@@ -391,7 +428,11 @@ void RandomPlayerbotMgr::UpdateAIInternal(uint32 elapsed, bool /*minimal*/)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
uint32 updateBots = sPlayerbotAIConfig->randomBotsPerInterval * onlineBotFocus / 100;
|
uint32 updateBots = sPlayerbotAIConfig->randomBotsPerInterval * onlineBotFocus / 100;
|
||||||
uint32 maxNewBots = onlineBotCount < maxAllowedBotCount ? maxAllowedBotCount - onlineBotCount : 0;
|
uint32 maxNewBots = onlineBotCount < maxAllowedBotCount &&
|
||||||
|
(sPlayerbotAIConfig->disabledWithoutRealPlayer == false ||
|
||||||
|
(realPlayerIsLogged && DelayLoginBotsTimer != 0 && time(nullptr) >= DelayLoginBotsTimer))
|
||||||
|
? maxAllowedBotCount - onlineBotCount
|
||||||
|
: 0;
|
||||||
uint32 loginBots = std::min(sPlayerbotAIConfig->randomBotsPerInterval - updateBots, maxNewBots);
|
uint32 loginBots = std::min(sPlayerbotAIConfig->randomBotsPerInterval - updateBots, maxNewBots);
|
||||||
|
|
||||||
if (!availableBots.empty())
|
if (!availableBots.empty())
|
||||||
@@ -432,6 +473,8 @@ void RandomPlayerbotMgr::UpdateAIInternal(uint32 elapsed, bool /*minimal*/)
|
|||||||
if (!loginBots)
|
if (!loginBots)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DelayLoginBotsTimer = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -206,6 +206,8 @@ private:
|
|||||||
time_t BgCheckTimer;
|
time_t BgCheckTimer;
|
||||||
time_t LfgCheckTimer;
|
time_t LfgCheckTimer;
|
||||||
time_t PlayersCheckTimer;
|
time_t PlayersCheckTimer;
|
||||||
|
time_t RealPlayerLastTimeSeen = 0;
|
||||||
|
time_t DelayLoginBotsTimer;
|
||||||
time_t printStatsTimer;
|
time_t printStatsTimer;
|
||||||
uint32 AddRandomBots();
|
uint32 AddRandomBots();
|
||||||
bool ProcessBot(uint32 bot);
|
bool ProcessBot(uint32 bot);
|
||||||
|
|||||||
Reference in New Issue
Block a user