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); } }
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); } } }
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); }
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); } } } }