通过长期的战场和野外与机器人的互怼,我发现一个规律,就是机器人在被控制后,一般情况来说是被晕,被定身,被恐惧等被控制的情况下,瞬移会发生,总结原因如下:
一、发生的前提
机器人在被控制之前有固定的行进路线并且出于行进状态中,比如说上马跑,自己奔跑情况下会发生,一般原地不动的机器人被控制后不会产生瞬移。
二、具体瞬移现象
在满足第一个情况下被控制后,机器人往往在控制状态结束后就会产生瞬移,而一般瞬移的最终地点一般取决于机器人没有被控制之前的前进方向,距离取决于没有被控制之前机器人的移动速度。
三、瞬移的效果
就是有时候明明机器人被定身处于自己攻击范围内的时候,会显示超出攻击范围,这就是因为画面虽然显示机器人是被控制在攻击范围内,但实际上机器人还在行进中,所以实际上真实位置已经超出了攻击范围,过一会儿后就会显示在实际的坐标,这个时候就会发现其实已经超出了攻击范围。
四、解决方案
1、机器人的行进速度受到控制技能影响
2、玩家自己预判,比如控制了机器人,但是它之前有行进方向和行进速度,在被控制的情况下,虽然机器人无法做出攻击和移动行为,但实际上还是在产生位移的,这个时候需要玩家自行进行计算机器人的实际方位进行攻击。
-------------------- modules/bot/playerbot/PlayerbotAI.cpp --------------------
index 193f14a..809a3e4 100644
@@ -542,6 +542,19 @@ void PlayerbotAI::DoNextAction()
sLog->outBasic("Bot %s DoNextAction: BotState %u LFGState %u %s", bot->GetName().c_str(), currentState, sLFGMgr->GetState(bot->GetGUID()), currentEngine->ListStrategies().c_str());
}
+ if (bot->isMoving())//这里判断,如果机器人在移动中,具备这些BUFF,那么就立即停止移动
+ {
+ if (bot->IsInCombat())
+ {
+ if (bot->isInRoots() || bot->isFeared() || bot->HasAuraType(SPELL_AURA_MOD_CONFUSE) || bot->HasAuraType(SPELL_AURA_MOD_STUN))
+ {
+ bot->GetMotionMaster()->MovementExpired();
+ bot->GetMotionMaster()->MoveIdle();
+ bot->StopMoving();
+ }
+ }
+ }
+
currentEngine->DoNextAction(NULL);
if (bot->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))