internal static void Execute(object msg, NetConnection conn, NetworkSystem networkSystem) { Msg_CRC_GfxControlMoveStop _msg = msg as Msg_CRC_GfxControlMoveStop; if (null == _msg) { return; } }
internal static void Execute(object msg, RoomPeer peer) { Msg_CRC_GfxControlMoveStop _msg = msg as Msg_CRC_GfxControlMoveStop; if (null == _msg) { return; } peer.BroadCastMsgToRoom(_msg); }
internal void SyncGfxMoveControlStop(int objId, float x, float z, int id, bool isSkill) { Msg_CRC_GfxControlMoveStop msg = new Msg_CRC_GfxControlMoveStop(); msg.obj_id = objId; msg.skill_or_impact_id = id; msg.is_skill = isSkill; msg.target_pos = new ArkCrossEngineMessage.Position(); msg.target_pos.x = x; msg.target_pos.z = z; msg.face_dir = 0; msg.send_time = TimeUtility.GetServerMilliseconds(); SendMessage(msg); }
internal void SyncGfxMoveControlStop(CharacterInfo obj, int id, bool isSkill) { MovementStateInfo msi = obj.GetMovementStateInfo(); Msg_CRC_GfxControlMoveStop msg = new Msg_CRC_GfxControlMoveStop(); msg.obj_id = obj.GetId(); msg.skill_or_impact_id = id; msg.is_skill = isSkill; msg.target_pos = new ArkCrossEngineMessage.Position(); msg.target_pos.x = msi.PositionX; msg.target_pos.z = msi.PositionZ; msg.face_dir = msi.GetFaceDir(); msg.send_time = TimeUtility.GetServerMilliseconds(); SendMessage(msg); }
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); } } } }