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