|
|
|
|
@@ -239,6 +239,7 @@ void PlayerbotAI::UpdateAI(uint32 elapsed, bool minimal)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// if (!GetMaster() || !GetMaster()->IsInWorld() || !GetMaster()->GetSession() ||
|
|
|
|
|
// GetMaster()->GetSession()->isLogingOut()) {
|
|
|
|
|
// return;
|
|
|
|
|
@@ -301,6 +302,7 @@ void PlayerbotAI::UpdateAI(uint32 elapsed, bool minimal)
|
|
|
|
|
// bot->GetMotionMaster()->Clear();
|
|
|
|
|
// bot->GetMotionMaster()->MoveIdle();
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// cheat options
|
|
|
|
|
if (bot->IsAlive() && ((uint32)GetCheat() > 0 || (uint32)sPlayerbotAIConfig->botCheatMask > 0))
|
|
|
|
|
{
|
|
|
|
|
@@ -4188,7 +4190,7 @@ ActivePiorityType PlayerbotAI::GetPriorityType(ActivityType activityType)
|
|
|
|
|
// Ie. 10,20 means all bots in this bracket will be inactive below 10% activityMod, all bots in this bracket will be
|
|
|
|
|
// active above 20% activityMod and scale between those values.
|
|
|
|
|
std::pair<uint32, uint32> PlayerbotAI::GetPriorityBracket(ActivePiorityType type)
|
|
|
|
|
{
|
|
|
|
|
{
|
|
|
|
|
switch (type)
|
|
|
|
|
{
|
|
|
|
|
case ActivePiorityType::HAS_REAL_PLAYER_MASTER:
|
|
|
|
|
@@ -4219,13 +4221,13 @@ std::pair<uint32, uint32> PlayerbotAI::GetPriorityBracket(ActivePiorityType type
|
|
|
|
|
default:
|
|
|
|
|
return {90, 100};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {90, 100};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool PlayerbotAI::AllowActive(ActivityType activityType)
|
|
|
|
|
{
|
|
|
|
|
//General exceptions
|
|
|
|
|
// General exceptions
|
|
|
|
|
if (activityType == PACKET_ACTIVITY)
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
@@ -4285,19 +4287,17 @@ bool PlayerbotAI::AllowActive(ActivityType activityType)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetPriorityBracket acitivity
|
|
|
|
|
std::pair<uint8, uint8> priorityBracket = GetPriorityBracket(type);
|
|
|
|
|
if (!priorityBracket.second)
|
|
|
|
|
return true; // No scaling
|
|
|
|
|
|
|
|
|
|
// Activity between 0 and 100.
|
|
|
|
|
float activityPercentage = sRandomPlayerbotMgr->getActivityPercentage();
|
|
|
|
|
if (priorityBracket.first >= activityPercentage)
|
|
|
|
|
return false;
|
|
|
|
|
if (priorityBracket.second <= activityPercentage && priorityBracket.second < 100)
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
|
|
float activePerc = (activityPercentage - priorityBracket.first) / (priorityBracket.second - priorityBracket.first);
|
|
|
|
|
activePerc *= (priorityBracket.second == 100) ? sPlayerbotAIConfig->botActiveAlone : 100;
|
|
|
|
|
float activePerc = 100;
|
|
|
|
|
if (sPlayerbotAIConfig->botActiveAloneSmartScale)
|
|
|
|
|
{
|
|
|
|
|
std::pair<uint8, uint8> priorityBracket = GetPriorityBracket(type);
|
|
|
|
|
if (!priorityBracket.second) return true;
|
|
|
|
|
float activityPercentage = sRandomPlayerbotMgr->getActivityPercentage();
|
|
|
|
|
if (priorityBracket.first >= activityPercentage) return false;
|
|
|
|
|
if (priorityBracket.second <= activityPercentage && priorityBracket.second < 100) return true;
|
|
|
|
|
activePerc = (activityPercentage - priorityBracket.first) / (priorityBracket.second - priorityBracket.first);
|
|
|
|
|
activePerc *= (priorityBracket.second == 100) ? sPlayerbotAIConfig->botActiveAlone : 100;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// The last number if the amount it cycles per min. Currently set to 1% of the active bots.
|
|
|
|
|
uint32 ActivityNumber = GetFixedBotNumer(BotTypeNumber::ACTIVITY_TYPE_NUMBER, 100, activePerc * 0.01f);
|
|
|
|
|
@@ -5427,15 +5427,29 @@ bool PlayerbotAI::CanMove()
|
|
|
|
|
if (IsInVehicle() && !IsInVehicle(true))
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
if (bot->isFrozen() || bot->IsPolymorphed() || (bot->isDead() && !bot->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) ||
|
|
|
|
|
bot->IsBeingTeleported() || bot->isInRoots() || bot->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION) ||
|
|
|
|
|
bot->HasAuraType(SPELL_AURA_MOD_CONFUSE) || bot->IsCharmed() || bot->HasAuraType(SPELL_AURA_MOD_STUN) ||
|
|
|
|
|
bot->HasUnitState(UNIT_STATE_IN_FLIGHT) || bot->HasUnitState(UNIT_STATE_LOST_CONTROL))
|
|
|
|
|
if (bot->isFrozen() ||
|
|
|
|
|
bot->IsPolymorphed() ||
|
|
|
|
|
(bot->isDead() && !bot->HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_GHOST)) ||
|
|
|
|
|
bot->IsBeingTeleported() ||
|
|
|
|
|
bot->isInRoots() ||
|
|
|
|
|
bot->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION) ||
|
|
|
|
|
bot->HasAuraType(SPELL_AURA_MOD_CONFUSE) ||
|
|
|
|
|
bot->IsCharmed() ||
|
|
|
|
|
bot->HasAuraType(SPELL_AURA_MOD_STUN) ||
|
|
|
|
|
bot->HasUnitState(UNIT_STATE_IN_FLIGHT) ||
|
|
|
|
|
bot->HasUnitState(UNIT_STATE_LOST_CONTROL))
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
return bot->GetMotionMaster()->GetCurrentMovementGeneratorType() != FLIGHT_MOTION_TYPE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool PlayerbotAI::IsTaxiFlying()
|
|
|
|
|
{
|
|
|
|
|
return bot->HasUnitMovementFlag(MOVEMENTFLAG_ONTRANSPORT) &&
|
|
|
|
|
bot->HasUnitState(UNIT_STATE_IGNORE_PATHFINDING);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool PlayerbotAI::IsInRealGuild()
|
|
|
|
|
{
|
|
|
|
|
if (!bot->GetGuildId())
|
|
|
|
|
|