示例#1
0
        private void UpdateSpatial()
        {
            if (null != m_Npc)
            {
                if (ObjectInfo.IsGfxMoveControl)
                {
                    if (ObjectInfo.DataChangedByGfx)
                    {
                        MovementStateInfo msi = m_Npc.GetMovementStateInfo();
                        msi.PositionX = ObjectInfo.X;
                        msi.PositionY = ObjectInfo.Y;
                        msi.PositionZ = ObjectInfo.Z;
                        msi.SetFaceDir(ObjectInfo.FaceDir);

                        ObjectInfo.DataChangedByGfx = false;
                    }
                }
                else
                {
                    if (ObjectInfo.DataChangedByGfx)
                    {
                        MovementStateInfo msi = m_Npc.GetMovementStateInfo();
                        msi.PositionX = ObjectInfo.X;
                        msi.PositionY = ObjectInfo.Y;
                        msi.PositionZ = ObjectInfo.Z;
                        msi.SetFaceDir(ObjectInfo.FaceDir);

                        ObjectInfo.DataChangedByGfx = false;
                    }
                    UpdateMovement();
                }
            }
        }
示例#2
0
        internal static void Execute(object msg, User user)
        {
            Msg_CRC_Skill use_skill = msg as Msg_CRC_Skill;

            if (use_skill == null)
            {
                return;
            }
            CharacterInfo charactor = user.Info;

            if (charactor == null)
            {
                LogSys.Log(LOG_TYPE.ERROR, "UseSkillHandler, charactor {0} not exist", user.RoleId);
                return;
            }
            charactor = charactor.GetRealControlledObject();
            MovementStateInfo msi = charactor.GetMovementStateInfo();

            if (!msi.IsSkillMoving)
            {
                float x        = use_skill.stand_pos.x;
                float z        = use_skill.stand_pos.z;
                float velocity = (float)user.Info.GetActualProperty().MoveSpeed;
                if (!user.VerifyPosition(x, z, velocity, use_skill.send_time, 4.0f))
                {
                    //todo:记录违规次数
                }
                msi.SetPosition2D(x, z);

                user.SampleMoveData(use_skill.stand_pos.x, use_skill.stand_pos.z, velocity, msi.MoveDirCosAngle, msi.MoveDirSinAngle, use_skill.send_time);
            }

            msi.SetFaceDir(use_skill.face_direction);

            Scene scene = user.OwnRoom.GetActiveScene();

            if (null != scene)
            {
                scene.SkillSystem.StartSkill(user.RoleId, use_skill.skill_id);
            }

            //LogSys.Log(LOG_TYPE.DEBUG, "UseSkillHandler User:{0} skill:{1} isskillmoving:{2} ismovemeetobstacle:{3} time:{4} client time:{5}", user.RoleId, use_skill.skill_id, msi.IsSkillMoving, msi.IsMoveMeetObstacle, TimeUtility.GetServerMilliseconds(), use_skill.send_time);
        }
示例#3
0
        public void Tick()
        {
            long now = TimeUtility.GetServerMilliseconds();

            m_LastTickIntervalMs = now - m_LastTickTime;

            m_LastTickTime = now;

            if (WorldSystem.Instance.IsObserver && !WorldSystem.Instance.IsFollowObserver)
            {
                bool  keyPressed = false;
                float x = 0.5f, y = 0.5f;
                if (GfxSystem.IsKeyPressed(Keyboard.Code.A))
                {
                    x          = 0.1f;
                    keyPressed = true;
                }
                else if (GfxSystem.IsKeyPressed(Keyboard.Code.D))
                {
                    x          = 0.9f;
                    keyPressed = true;
                }
                if (GfxSystem.IsKeyPressed(Keyboard.Code.W))
                {
                    y          = 0.1f;
                    keyPressed = true;
                }
                else if (GfxSystem.IsKeyPressed(Keyboard.Code.S))
                {
                    y          = 0.9f;
                    keyPressed = true;
                }
                if (keyPressed)
                {
                    WorldSystem.Instance.UpdateObserverCamera(x, y);
                }
                return;
            }

            // if move input is disable
            // MotionStatus is MoveStop, and MotionChanged is reflect the change accordingly
            // pm_.Update(EnableMoveInput);

            UserInfo playerself = WorldSystem.Instance.GetPlayerSelf();

            if (null == playerself)
            {
                return;
            }

            Vector3 pos       = playerself.GetMovementStateInfo().GetPosition3D();
            Vector3 mouse_pos = new Vector3(GfxSystem.GetMouseX(), GfxSystem.GetMouseY(), GfxSystem.GetMouseZ());//GfxSystem.Instance.MainScene.GetMousePos(pos.Y);

            if (pm_.MotionStatus == PlayerMovement.Motion.Moving)
            {
                if (pm_.MotionChanged)
                {
                    WorldSystem.Instance.InputMoveDir = pm_.MoveDir;
                    playerself.GetMovementStateInfo().SetWantMoveDir(pm_.MoveDir);

                    if (WorldSystem.Instance.IsPveScene())
                    {
                        playerself.GetMovementStateInfo().SetMoveDir(pm_.MoveDir);
                        playerself.GetMovementStateInfo().IsMoving       = true;
                        playerself.GetMovementStateInfo().TargetPosition = Vector3.Zero;
                    }
                    else
                    {
                        NetworkSystem.Instance.SyncPlayerMoveStart((float)pm_.MoveDir);
                    }

                    if (EnableRotateInput)
                    {
                        MovementStateInfo msi = playerself.GetMovementStateInfo();
                        msi.SetFaceDir(pm_.MoveDir);
                        NetworkSystem.Instance.SyncFaceDirection((float)pm_.MoveDir);
                    }
                }
            }
            else
            {
                if (pm_.MotionChanged)
                {
                    WorldSystem.Instance.LastMoveDirAdjust = 0;

                    if (WorldSystem.Instance.IsPveScene())
                    {
                        playerself.GetMovementStateInfo().IsMoving = false;
                    }
                    else
                    {
                        NetworkSystem.Instance.SyncPlayerMoveStop();
                    }
                }
            }

            old_mouse_pos_ = mouse_pos_;
            mouse_pos_.X   = GfxSystem.GetMouseX();
            mouse_pos_.Y   = GfxSystem.GetMouseY();

            UserAiStateInfo aiInfo = playerself.GetAiStateInfo();

            if (null != aiInfo && (int)AiStateId.Idle == aiInfo.CurState)
            {
                m_lastSelectObjId = -1;
            }
        }
示例#4
0
        internal static void Execute(object msg, User user)
        {
            Msg_CRC_GfxControlMoveStop _msg = msg as Msg_CRC_GfxControlMoveStop;

            if (_msg == null)
            {
                return;
            }
            Scene scene = user.OwnRoom.GetActiveScene();

            if (null != scene)
            {
                CharacterInfo info = scene.SceneContext.GetCharacterInfoById(_msg.obj_id);
                if (null != info && (_msg.obj_id == user.RoleId || info.OwnerId == user.RoleId))
                {
                    MovementStateInfo msi = info.GetMovementStateInfo();
                    Vector3           pos;
                    if (_msg.obj_id == user.RoleId)
                    {
                        pos = user.LastClientPosition;
                    }
                    else
                    {
                        pos = msi.GetPosition3D();
                    }
                    Vector3 newPos = new Vector3(_msg.target_pos.x, 0, _msg.target_pos.z);
                    msi.IsSkillMoving = false;

                    bool enableControl = false;
                    if (_msg.is_skill)
                    {
                        SkillInfo skillInfo = info.GetSkillStateInfo().GetSkillInfoById(_msg.skill_or_impact_id);
                        float     distance  = Geometry.Distance(pos, newPos);
                        if (null != skillInfo && (skillInfo.m_LeftEnableMoveCount > 0 || distance <= 0.3))
                        {
                            //校验
                            --skillInfo.m_LeftEnableMoveCount;

                            if (distance <= skillInfo.m_MaxMoveDistance + 1)
                            {
                                enableControl = true;

                                //LogSys.Log(LOG_TYPE.WARN, "Msg_CRC_GfxControlMoveStopHandler {0} ({1} <= {2}) LeftEnableMoveCount:{3} skill:{4} accept by server ({5}->{6})", _msg.obj_id, distSqr, skillInfo.m_MaxMoveDistanceSqr, skillInfo.m_LeftEnableMoveCount, _msg.skill_or_impact_id, pos.ToString(), newPos.ToString());
                            }
                            else
                            {
                                LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStopHandler {0} ({1} > {2}) LeftEnableMoveCount:{3} skill:{4} can't accept by server ({5}->{6})", _msg.obj_id, distance, skillInfo.m_MaxMoveDistance, skillInfo.m_LeftEnableMoveCount, _msg.skill_or_impact_id, pos.ToString(), newPos.ToString());
                            }
                        }
                        else
                        {
                            LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStopHandler {0} (LeftEnableMoveCount:{1} skill:{2}) can't accept by server ({3}->{4})", _msg.obj_id, skillInfo != null ? skillInfo.m_LeftEnableMoveCount : -1, _msg.skill_or_impact_id, pos.ToString(), newPos.ToString());
                        }
                    }
                    else
                    {
                        ImpactInfo impactInfo = info.GetSkillStateInfo().GetImpactInfoForCheck(_msg.skill_or_impact_id);
                        if (null != impactInfo && impactInfo.m_LeftEnableMoveCount > 0)
                        {
                            //校验
                            --impactInfo.m_LeftEnableMoveCount;

                            float distance = Geometry.Distance(pos, newPos);
                            if (distance <= impactInfo.m_MaxMoveDistance + 1)
                            {
                                enableControl = true;

                                //LogSys.Log(LOG_TYPE.WARN, "Msg_CRC_GfxControlMoveStopHandler {0} ({1} <= {2}) LeftEnableMoveCount:{3} skill:{4} impact:{5} accept by server ({6}->{7})", _msg.obj_id, distSqr, impactInfo.m_MaxMoveDistanceSqr, impactInfo.m_LeftEnableMoveCount, impactInfo.m_SkillId, _msg.skill_or_impact_id, pos.ToString(), newPos.ToString());
                            }
                            else
                            {
                                LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStopHandler {0} ({1} > {2}) LeftEnableMoveCount:{3} skill:{4} impact:{5} can't accept by server ({6}->{7})", _msg.obj_id, distance, impactInfo.m_MaxMoveDistance, impactInfo.m_LeftEnableMoveCount, impactInfo.m_SkillId, _msg.skill_or_impact_id, pos.ToString(), newPos.ToString());
                            }
                        }
                        else
                        {
                            LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStopHandler {0} (LeftEnableMoveCount:{1} skill:{2} impact:{3}) can't accept by server ({4}->{5})", _msg.obj_id, impactInfo != null ? impactInfo.m_LeftEnableMoveCount : -1, impactInfo != null ? impactInfo.m_SkillId : -1, _msg.skill_or_impact_id, pos.ToString(), newPos.ToString());
                        }
                    }
                    if (enableControl)
                    {
                        msi.SetFaceDir(_msg.face_dir);
                        msi.SetPosition(newPos);
                    }
                    else
                    {
                        //todo:记录违规次数
                    }
                    if (_msg.obj_id == user.RoleId)
                    {
                        float velocity = (float)user.Info.GetActualProperty().MoveSpeed;
                        user.SampleMoveData(msi.PositionX, msi.PositionZ, velocity, msi.MoveDirCosAngle, msi.MoveDirSinAngle, _msg.send_time);
                    }
                }
                else
                {
                    if (null == info)
                    {
                        LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStopHandler, charactor {0} not exist", _msg.obj_id);
                    }
                    else
                    {
                        LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStopHandler, charactor {0} or owner {1} not user {2}", info.GetId(), info.OwnerId, user.RoleId);
                    }
                }
            }
        }