public void ReceiveSetPos(S2CNwarSetPos pack) { if (mOwner.MoveImplement != null) { Vector3 pos = RoleHelp.GetPositionInScene(mOwner.ActorId, pack.move.pos.px * GlobalConst.UnitScale, pack.move.pos.py * GlobalConst.UnitScale); bool result = false; pos = InstanceHelper.ClampInWalkableRange(pos, pos, out result); mOwner.MoveImplement.SetPosition(pos); } bool isWalking = mOwner.ActorMachine.IsWalking(); mOwner.Stop(); TryWalkAlongStop(); // 如果当前正在寻路,则重新寻路,因为需要重新计算路径 if (isWalking == true && mOwner.ActorMachine.DestList.size > 0) { int newWalkId = 0; if (mReachCallbacks != null && mReachCallbacks.ContainsKey(m_WalkId) == true) { newWalkId = TryWalkToAlong(mOwner.ActorMachine.DestList[mOwner.ActorMachine.DestList.size - 1], mReachCallbacks[m_WalkId]); } else { newWalkId = TryWalkToAlong(mOwner.ActorMachine.DestList[mOwner.ActorMachine.DestList.size - 1]); } // 如果当前正在任务寻路,则赋值给最新的walk id if (TargetPathManager.Instance.IsNavigating == true && TargetPathManager.Instance.PathWalker != null) { TargetPathManager.Instance.PathWalker.WalkId = newWalkId; } } // 本地是否要激活自动战斗 if (pack.move.id == LocalPlayerManager.Instance.LocalActorAttribute.UnitId.obj_idx) { if (SceneHelp.Instance.IsAutoFightingAfterSwitchInstance == true) { SceneHelp.Instance.IsAutoFightingAfterSwitchInstance = false; InstanceManager.Instance.IsAutoFighting = true; } mIsMoving = false; } }
// 强制位置同步 public static void ReceiveSetPos(byte[] data) { S2CNwarSetPos pack = S2CPackBase.DeserializePack <S2CNwarSetPos>(data); Actor actor = ActorManager.Instance.GetPlayer(pack.move.id); if (null == actor) { return; } MoveCtrl ctrl = actor.MoveCtrl; if (null != ctrl) { ctrl.ReceiveSetPos(pack); } }