mirror of
https://github.com/mod-playerbots/mod-playerbots
synced 2025-11-29 15:58:20 +08:00
@@ -497,6 +497,7 @@ void PlayerbotAI::Reset(bool full)
|
||||
}
|
||||
|
||||
currentEngine = engines[BOT_STATE_NON_COMBAT];
|
||||
currentState = BOT_STATE_NON_COMBAT;
|
||||
nextAICheckDelay = 0;
|
||||
whispers.clear();
|
||||
|
||||
@@ -1166,18 +1167,25 @@ void PlayerbotAI::DoNextAction(bool min)
|
||||
else if ((nextAICheckDelay < 1000) && bot->IsSitState())
|
||||
bot->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
|
||||
if (bot->IsFlying() && !!bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !bot->HasAuraType(SPELL_AURA_FLY))
|
||||
bool hasMountAura = bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED) || bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
|
||||
if (hasMountAura && !bot->IsMounted())
|
||||
{
|
||||
if (bot->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING))
|
||||
bot->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
|
||||
if (bot->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY))
|
||||
bot->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_CAN_FLY);
|
||||
|
||||
if (bot->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY))
|
||||
bot->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
|
||||
bot->RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_SPEED);
|
||||
bot->RemoveAurasByType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED);
|
||||
}
|
||||
|
||||
// if (bot->IsFlying() && !bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !bot->HasAuraType(SPELL_AURA_FLY))
|
||||
// {
|
||||
// if (bot->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING))
|
||||
// bot->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
|
||||
// if (bot->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY))
|
||||
// bot->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_CAN_FLY);
|
||||
|
||||
// if (bot->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY))
|
||||
// bot->m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_DISABLE_GRAVITY);
|
||||
// }
|
||||
|
||||
/*
|
||||
// land after kncokback/jump
|
||||
if (bot->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING))
|
||||
|
||||
@@ -95,11 +95,11 @@ bool AttackAction::Attack(Unit* target, bool with_pet /*true*/)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (bot->IsMounted() && bot->IsWithinLOSInMap(target))
|
||||
{
|
||||
WorldPacket emptyPacket;
|
||||
bot->GetSession()->HandleCancelMountAuraOpcode(emptyPacket);
|
||||
}
|
||||
// if (bot->IsMounted() && bot->IsWithinLOSInMap(target))
|
||||
// {
|
||||
// WorldPacket emptyPacket;
|
||||
// bot->GetSession()->HandleCancelMountAuraOpcode(emptyPacket);
|
||||
// }
|
||||
|
||||
ObjectGuid guid = target->GetGUID();
|
||||
bot->SetSelection(target->GetGUID());
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "CheckMountStateAction.h"
|
||||
#include "BattlegroundWS.h"
|
||||
#include "Event.h"
|
||||
#include "PlayerbotAI.h"
|
||||
#include "Playerbots.h"
|
||||
#include "ServerFacade.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
@@ -20,18 +21,11 @@ bool CheckMountStateAction::Execute(Event event)
|
||||
bool attackdistance = false;
|
||||
bool chasedistance = false;
|
||||
float attack_distance = 35.0f;
|
||||
|
||||
switch (bot->getClass())
|
||||
{
|
||||
case CLASS_WARRIOR:
|
||||
case CLASS_PALADIN:
|
||||
if (PlayerbotAI::IsMelee(bot)) {
|
||||
attack_distance = 10.0f;
|
||||
break;
|
||||
case CLASS_ROGUE:
|
||||
} else {
|
||||
attack_distance = 40.0f;
|
||||
break;
|
||||
}
|
||||
|
||||
if (enemy)
|
||||
attack_distance /= 2;
|
||||
|
||||
@@ -41,6 +35,12 @@ bool CheckMountStateAction::Execute(Event event)
|
||||
chasedistance = enemy && sServerFacade->IsDistanceGreaterThan(AI_VALUE2(float, "distance", "enemy player target"), 45.0f) && AI_VALUE2(bool, "moving", "enemy player target");
|
||||
}
|
||||
|
||||
if (bot->IsMounted() && attackdistance) {
|
||||
WorldPacket emptyPacket;
|
||||
bot->GetSession()->HandleCancelMountAuraOpcode(emptyPacket);
|
||||
return true;
|
||||
}
|
||||
|
||||
Player* master = GetMaster();
|
||||
if (master != nullptr && !bot->InBattleground())
|
||||
{
|
||||
@@ -48,7 +48,7 @@ bool CheckMountStateAction::Execute(Event event)
|
||||
return false;
|
||||
|
||||
// bool farFromMaster = sServerFacade->GetDistance2d(bot, master) > sPlayerbotAIConfig->sightDistance;
|
||||
if (master->IsMounted() && !bot->IsMounted() && noattackers)
|
||||
if (master->IsMounted() && !bot->IsMounted() && noattackers && !attackdistance && !bot->IsInCombat() && botAI->GetState() != BOT_STATE_COMBAT)
|
||||
{
|
||||
return Mount();
|
||||
}
|
||||
@@ -72,6 +72,13 @@ bool CheckMountStateAction::Execute(Event event)
|
||||
return false;
|
||||
}
|
||||
|
||||
// For random bots
|
||||
if (!bot->InBattleground() && !master) {
|
||||
if (!bot->IsMounted() && noattackers && !attackdistance && !bot->IsInCombat()) {
|
||||
return Mount();
|
||||
}
|
||||
}
|
||||
|
||||
if (bot->InBattleground() && !attackdistance && (noattackers || fartarget) && !bot->IsInCombat() && !bot->IsMounted())
|
||||
{
|
||||
if (bot->GetBattlegroundTypeId() == BATTLEGROUND_WS)
|
||||
@@ -269,8 +276,8 @@ bool CheckMountStateAction::Mount()
|
||||
if (index >= ids.size())
|
||||
continue;
|
||||
|
||||
botAI->CastSpell(ids[index], bot);
|
||||
return true;
|
||||
|
||||
return botAI->CastSpell(ids[index], bot);;
|
||||
}
|
||||
|
||||
std::vector<Item*> items = AI_VALUE2(std::vector<Item*>, "inventory items", "mount");
|
||||
|
||||
@@ -857,9 +857,16 @@ void MovementAction::UpdateMovementState()
|
||||
bot->SetSwim(false);
|
||||
}
|
||||
|
||||
if (bot->IsFlying())
|
||||
bot->UpdateSpeed(MOVE_FLIGHT, true);
|
||||
bool onGround = bot->GetPositionZ() < bot->GetMapWaterOrGroundLevel(bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ()) + 1.0f;
|
||||
|
||||
if (!bot->HasUnitMovementFlag(MOVEMENTFLAG_FLYING) && bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) && !onGround)
|
||||
{
|
||||
bot->AddUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
}
|
||||
if (bot->HasUnitMovementFlag(MOVEMENTFLAG_FLYING) && (!bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) || onGround))
|
||||
{
|
||||
bot->RemoveUnitMovementFlag(MOVEMENTFLAG_FLYING);
|
||||
}
|
||||
Transport* newTransport = bot->GetMap()->GetTransportForPos(bot->GetPhaseMask(), bot->GetPositionX(), bot->GetPositionY(), bot->GetPositionZ(), bot);
|
||||
if (newTransport != bot->GetTransport())
|
||||
{
|
||||
@@ -874,10 +881,13 @@ void MovementAction::UpdateMovementState()
|
||||
bot->StopMovingOnCurrentPos();
|
||||
}
|
||||
|
||||
bot->SendMovementFlagUpdate();
|
||||
// Temporary speed increase in group
|
||||
//if (botAI->HasRealPlayerMaster())
|
||||
// if (botAI->HasRealPlayerMaster()) {
|
||||
// bot->SetSpeedRate(MOVE_RUN, 1.1f);
|
||||
|
||||
// } else {
|
||||
// bot->SetSpeedRate(MOVE_RUN, 1.0f);
|
||||
// }
|
||||
// check if target is not reachable (from Vmangos)
|
||||
// if (bot->GetMotionMaster()->GetCurrentMovementGeneratorType() == CHASE_MOTION_TYPE && bot->CanNotReachTarget() && !bot->InBattleground())
|
||||
// {
|
||||
@@ -1146,7 +1156,18 @@ bool MovementAction::ChaseTo(WorldObject* obj, float distance, float angle)
|
||||
|
||||
float MovementAction::MoveDelay(float distance)
|
||||
{
|
||||
return distance / bot->GetSpeed(MOVE_RUN);
|
||||
float speed;
|
||||
if (bot->isSwimming()) {
|
||||
speed = bot->GetSpeed(MOVE_SWIM);
|
||||
} else if (bot->IsFlying()) {
|
||||
speed = bot->GetSpeed(MOVE_FLIGHT);
|
||||
} else {
|
||||
speed = bot->GetSpeed(MOVE_RUN);
|
||||
}
|
||||
float delay = distance / speed - sPlayerbotAIConfig->reactDistance;
|
||||
if (delay < 0)
|
||||
delay = 0;
|
||||
return delay;
|
||||
}
|
||||
|
||||
void MovementAction::WaitForReach(float distance)
|
||||
|
||||
Reference in New Issue
Block a user