mirror of
https://github.com/mod-playerbots/mod-playerbots.git
synced 2026-02-15 08:06:11 +00:00
Big update.
This commit is contained in:
181
src/strategy/triggers/StuckTriggers.cpp
Normal file
181
src/strategy/triggers/StuckTriggers.cpp
Normal file
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
* Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU GPL v2 license, you may redistribute it and/or modify it under version 2 of the License, or (at your option), any later version.
|
||||
*/
|
||||
|
||||
#include "StuckTriggers.h"
|
||||
#include "CellImpl.h"
|
||||
#include "PathGenerator.h"
|
||||
#include "Playerbots.h"
|
||||
|
||||
bool MoveStuckTrigger::IsActive()
|
||||
{
|
||||
if (botAI->HasActivePlayerMaster())
|
||||
return false;
|
||||
|
||||
if (!botAI->AllowActivity(ALL_ACTIVITY))
|
||||
return false;
|
||||
|
||||
WorldPosition botPos(bot);
|
||||
|
||||
LogCalculatedValue<WorldPosition>* posVal = dynamic_cast<LogCalculatedValue<WorldPosition>*>(context->GetUntypedValue("current position"));
|
||||
|
||||
if (posVal->LastChangeDelay() > 5 * MINUTE)
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in the same position for {} seconds",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), posVal->LastChangeDelay());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool longLog = false;
|
||||
|
||||
for (auto tPos : posVal->ValueLog())
|
||||
{
|
||||
uint32 timePassed = time(0) - tPos.second;
|
||||
|
||||
if (timePassed > 10 * MINUTE)
|
||||
{
|
||||
if (botPos.fDist(tPos.first) > 50.0f)
|
||||
return false;
|
||||
|
||||
longLog = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (longLog)
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in the same position for 10mins",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), posVal->LastChangeDelay());
|
||||
}
|
||||
|
||||
return longLog;
|
||||
}
|
||||
|
||||
bool MoveLongStuckTrigger::IsActive()
|
||||
{
|
||||
if (botAI->HasActivePlayerMaster())
|
||||
return false;
|
||||
|
||||
if (!botAI->AllowActivity(ALL_ACTIVITY))
|
||||
return false;
|
||||
|
||||
WorldPosition botPos(bot);
|
||||
|
||||
Cell cell(bot->GetPositionX(), bot->GetPositionY());
|
||||
|
||||
GridCoord grid = botPos.getGridCoord();
|
||||
|
||||
if (grid.x_coord < 0 || grid.x_coord >= MAX_NUMBER_OF_GRIDS)
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in grid {},{} on map {}",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), grid.x_coord, grid.y_coord, botPos.getMapId());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (grid.y_coord < 0 || grid.y_coord >= MAX_NUMBER_OF_GRIDS)
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in grid {},{} on map {}",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), grid.x_coord, grid.y_coord, botPos.getMapId());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (cell.GridX() > 0 && cell.GridY() > 0 && !MMAP::MMapFactory::createOrGetMMapMgr()->loadMap(botPos.getMapId(), cell.GridX(), cell.GridY()))
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in unloaded grid {},{} on map {}",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), grid.x_coord, grid.y_coord, botPos.getMapId());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
LogCalculatedValue<WorldPosition>* posVal = dynamic_cast<LogCalculatedValue<WorldPosition>*>(context->GetUntypedValue("current position"));
|
||||
|
||||
if (posVal->LastChangeDelay() > 10 * MINUTE)
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in the same position for {} seconds",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), posVal->LastChangeDelay());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
MemoryCalculatedValue<uint32>* expVal = dynamic_cast<MemoryCalculatedValue<uint32>*>(context->GetUntypedValue("experience"));
|
||||
|
||||
if (expVal->LastChangeDelay() < 15 * MINUTE)
|
||||
return false;
|
||||
|
||||
bool longLog = false;
|
||||
|
||||
for (auto tPos : posVal->ValueLog())
|
||||
{
|
||||
uint32 timePassed = time(0) - tPos.second;
|
||||
|
||||
if (timePassed > 15 * MINUTE)
|
||||
{
|
||||
if (botPos.fDist(tPos.first) > 50.0f)
|
||||
return false;
|
||||
|
||||
longLog = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (longLog)
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in the same position for 15mins",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), posVal->LastChangeDelay());
|
||||
}
|
||||
|
||||
return longLog;
|
||||
}
|
||||
|
||||
bool CombatStuckTrigger::IsActive()
|
||||
{
|
||||
if (!bot->IsInCombat())
|
||||
return false;
|
||||
|
||||
if (botAI->HasActivePlayerMaster())
|
||||
return false;
|
||||
|
||||
if (!botAI->AllowActivity(ALL_ACTIVITY))
|
||||
return false;
|
||||
|
||||
WorldPosition botPos(bot);
|
||||
|
||||
MemoryCalculatedValue<bool>* combatVal = dynamic_cast<MemoryCalculatedValue<bool>*>(context->GetUntypedValue("combat::self target"));
|
||||
|
||||
if (combatVal->LastChangeDelay() > 5 * MINUTE)
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in combat for {} seconds",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), posVal->LastChangeDelay());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool CombatLongStuckTrigger::IsActive()
|
||||
{
|
||||
if (!bot->IsInCombat())
|
||||
return false;
|
||||
|
||||
if (botAI->HasActivePlayerMaster())
|
||||
return false;
|
||||
|
||||
if (!botAI->AllowActivity(ALL_ACTIVITY))
|
||||
return false;
|
||||
|
||||
WorldPosition botPos(bot);
|
||||
|
||||
MemoryCalculatedValue<bool>* combatVal = dynamic_cast<MemoryCalculatedValue<bool>*>(context->GetUntypedValue("combat::self target"));
|
||||
|
||||
if (combatVal->LastChangeDelay() > 15 * MINUTE)
|
||||
{
|
||||
// LOG_INFO("playerbots", "Bot {} {}:{} <{}> was in combat for {} seconds",
|
||||
// bot->GetGUID().ToString().c_str(), bot->GetTeamId() == TEAM_ALLIANCE ? "A" : "H", bot->getLevel(), bot->GetName(), posVal->LastChangeDelay());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user