Exemplo n.º 1
0
        internal static void Execute(object msg, User user)
        {
            Msg_CRC_MoveMeetObstacle obstacle_msg = msg as Msg_CRC_MoveMeetObstacle;

            if (null == obstacle_msg)
            {
                return;
            }
            UserInfo userInfo = user.Info;

            if (userInfo != null)
            {
                MovementStateInfo msi = userInfo.GetMovementStateInfo();
                userInfo.GetMovementStateInfo().IsMoveMeetObstacle = true;

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

                    user.SampleMoveData(obstacle_msg.cur_pos_x, obstacle_msg.cur_pos_z, velocity, msi.MoveDirCosAngle, msi.MoveDirSinAngle, obstacle_msg.send_time);
                }

                //LogSys.Log(LOG_TYPE.DEBUG, "MoveMeetObstacleHandler User:{0} isskillmoving:{1} ismovemeetobstacle:{2} time:{3} client time:{4}", user.RoleId, msi.IsSkillMoving, msi.IsMoveMeetObstacle, TimeUtility.GetServerMilliseconds(), obstacle_msg.send_time);
            }
        }
Exemplo n.º 2
0
        public static void AdjustUserPosition(int id, float x, float y, float z, float time, float dir)
        {
            CharacterInfo info = WorldSystem.Instance.GetCharacterById(id);

            if (null != info)
            {
                MovementStateInfo msi = info.GetMovementStateInfo();
                if (time < 1000)
                {
                    Vector3 pos      = msi.GetPosition3D();
                    float   speed    = info.GetActualProperty().MoveSpeed;
                    float   distance = (speed * time) / 1000;
                    float   len      = pos.Length();
                    float   nz       = (float)(z + distance * Math.Cos(dir));
                    float   nx       = (float)(x + distance * Math.Sin(dir));

                    int ctrlId = ControllerIdCalculator.Calc(ControllerType.Position, id);
                    PositionController ctrl = ControlSystem.Instance.PositionControllerPool.Alloc();
                    if (null != ctrl)
                    {
                        ctrl.Init(ctrlId, id, nx - pos.X, 0, nz - pos.Z, 1000);
                        ControlSystem.Instance.AddController(ctrl);
                    }
                    LogSystem.Debug("PositionController start, dx:{0} dz:{1} time:{2}", nx - pos.X, nz - pos.Z, 500);
                }
                else
                {
                    msi.SetPosition2D(x, z);

                    LogSystem.Debug("PositionController just move to pos, x:{0} z:{1}", x, z);
                }
            }
        }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
        internal static void Execute(object msg, User user)
        {
            Msg_CRC_GfxControlMoveStart _msg = msg as Msg_CRC_GfxControlMoveStart;

            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))
                {
                    bool enableControl = false;
                    if (_msg.is_skill)
                    {
                        SkillInfo skillInfo = info.GetSkillStateInfo().GetSkillInfoById(_msg.skill_or_impact_id);
                        if (null != skillInfo)
                        {
                            enableControl = true;
                        }
                    }
                    else
                    {
                        /*ImpactInfo impactInfo = info.GetSkillStateInfo().GetImpactInfoForCheck(_msg.skill_or_impact_id);
                         * if (null != impactInfo) {*/
                        enableControl = true;
                        //}
                    }
                    if (enableControl)
                    {
                        MovementStateInfo msi = info.GetMovementStateInfo();
                        bool isSkillMoving    = msi.IsSkillMoving;
                        msi.IsSkillMoving = true;

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

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

                        //LogSys.Log(LOG_TYPE.WARN, "Msg_CRC_GfxControlMoveStartHandler, charactor {0} skill_or_impact_id {1} isskill {2}", _msg.obj_id, _msg.skill_or_impact_id, _msg.is_skill);
                    }
                    else
                    {
                        LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStartHandler, charactor {0} skill_or_impact_id {1} isskill {2}, skill or impact not found", _msg.obj_id, _msg.skill_or_impact_id, _msg.is_skill);
                    }
                }
                else
                {
                    if (null == info)
                    {
                        LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStartHandler, charactor {0} not exist", _msg.obj_id);
                    }
                    else
                    {
                        LogSys.Log(LOG_TYPE.ERROR, "Msg_CRC_GfxControlMoveStartHandler, charactor {0} or owner {1} not user {2}", info.GetId(), info.OwnerId, user.RoleId);
                    }
                }
            }
        }