private bool ServerClientAiExists(PacketObj data) { MyEntity exists; var packet = data.Packet; uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; if (packet.PType == PacketType.ClientAiRemove && PlayerEntityIdInRange.ContainsKey(packet.SenderId)) { PlayerEntityIdInRange[packet.SenderId].Remove(packet.EntityId); } else if ((packet.PType == PacketType.ClientAiAdd)) { PlayerEntityIdInRange[packet.SenderId].Add(packet.EntityId); } else { return(Error(data, Msg("SenderId not found"))); } data.Report.PacketValid = true; } else { Log.Line($"ServerClientAiExists: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - entityExists:{MyEntities.TryGetEntityById(packet.EntityId, out exists, true)}({packet.EntityId}) - entityName:{exists?.DebugName} - entityMarked:{exists?.MarkedForClose} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } return(true); }
private bool ServerRequestShootUpdate(PacketObj data) { var packet = data.Packet; var shootStatePacket = (ShootStatePacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg("Comp", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; comp.RequestShootUpdate(shootStatePacket.Action, shootStatePacket.PlayerId); data.Report.PacketValid = true; } else { Log.Line($"ServerRequestShootUpdate: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } return(true); }
private bool ClientAiDataUpdate(PacketObj data) { var packet = data.Packet; var myGrid = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeGrid; var aiSyncPacket = (AiDataPacket)packet; if (myGrid == null) { return(Error(data, Msg($"Grid: {packet.EntityId}"))); } GridAi ai; if (GridTargetingAIs.TryGetValue(myGrid, out ai)) { if (ai.MIds[(int)packet.PType] < packet.MId) { ai.MIds[(int)packet.PType] = packet.MId; ai.Data.Repo.Sync(aiSyncPacket.Data); } else { Log.Line($"ClientAiDataUpdate: mid fail - senderId:{packet.SenderId} - mId:{ai.MIds[(int)packet.PType]} >= {packet.MId}"); } data.Report.PacketValid = true; } else { return(Error(data, Msg($"GridAi not found, is marked:{myGrid.MarkedForClose}, has root:{GridToMasterAi.ContainsKey(myGrid)}"))); } return(true); }
private bool ServerAmmoCycleRequest(PacketObj data) { var packet = data.Packet; var cyclePacket = (AmmoCycleRequestPacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg("Comp", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; comp.Data.Repo.Base.State.PlayerId = cyclePacket.PlayerId; comp.Platform.Weapons[cyclePacket.WeaponId].ChangeAmmo(cyclePacket.NewAmmoId); data.Report.PacketValid = true; } else { Log.Line($"ServerAmmoCycleRequest: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } return(true); }
private bool ServerOverRidesUpdate(PacketObj data) { var packet = data.Packet; var overRidesPacket = (OverRidesPacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId, null, true); var comp = ent?.Components.Get <CoreComponent>(); if (comp?.Ai == null || comp.Platform.State != CorePlatform.PlatformState.Ready) { return(Error(data, Msg("Comp", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == CorePlatform.PlatformState.Ready))); } uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; CoreComponent.RequestSetValue(comp, overRidesPacket.Setting, overRidesPacket.Value, SteamToPlayer[overRidesPacket.SenderId]); data.Report.PacketValid = true; } else { Log.Line($"ServerOverRidesUpdate: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } return(true); }
// no storge sync private bool ClientClientMouseEvent(PacketObj data) { var packet = data.Packet; var mousePacket = (InputPacket)packet; if (mousePacket.Data == null) { return(Error(data, Msg("Data"))); } var cube = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeBlock; if (cube == null) { return(Error(data, Msg($"CubeId: {packet.EntityId}"))); } GridAi ai; long playerId; if (GridToMasterAi.TryGetValue(cube.CubeGrid, out ai) && SteamToPlayer.TryGetValue(packet.SenderId, out playerId)) { PlayerMouseStates[playerId] = mousePacket.Data; data.Report.PacketValid = true; } else { return(Error(data, Msg("No PlayerId Found"))); } return(true); }
private bool ServerReticleUpdate(PacketObj data) { var packet = data.Packet; var reticlePacket = (BoolUpdatePacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <CoreComponent>(); if (comp?.Ai == null || comp.Platform.State != CorePlatform.PlatformState.Ready) { return(Error(data, Msg("Comp", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == CorePlatform.PlatformState.Ready))); } uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; comp.Data.Repo.Base.State.TrackingReticle = reticlePacket.Data; SendCompState(comp); data.Report.PacketValid = true; } else { Log.Line($"ServerReticleUpdate: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } return(true); }
private bool ClientWeaponAmmoUpdate(PacketObj data) { var packet = data.Packet; var ammoPacket = (WeaponAmmoPacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg($"CompId: {packet.EntityId}", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } var w = comp.Platform.Weapons[ammoPacket.WeaponId]; if (w.MIds[(int)packet.PType] < packet.MId) { w.MIds[(int)packet.PType] = packet.MId; w.Ammo.Sync(w, ammoPacket.Data); } data.Report.PacketValid = true; return(true); }
private bool ClientCompData(PacketObj data) { var packet = data.Packet; var compDataPacket = (CompBasePacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg($"CompId: {packet.EntityId}", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } if (comp.MIds[(int)packet.PType] < packet.MId) { comp.MIds[(int)packet.PType] = packet.MId; comp.Data.Repo.Base.Sync(comp, compDataPacket.Data); } else { Log.Line($"compDataSync: mid fail - senderId:{packet.SenderId} - mId:{comp.MIds[(int)packet.PType]} >= {packet.MId}"); } data.Report.PacketValid = true; return(true); }
private bool ClientConstructFoci(PacketObj data) { var packet = data.Packet; var myGrid = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeGrid; var fociPacket = (ConstructFociPacket)packet; if (myGrid == null) { return(Error(data, Msg($"Grid: {packet.EntityId}"))); } GridAi ai; if (GridToMasterAi.TryGetValue(myGrid, out ai)) { var rootConstruct = ai.Construct.RootAi.Construct; if (rootConstruct.Data.Repo.FocusData.Revision < fociPacket.Data.Revision) { rootConstruct.Data.Repo.FocusData.Sync(ai, fociPacket.Data); } else { Log.Line($"ClientConstructFoci Version failure - Version:{rootConstruct.Data.Repo.FocusData.Revision}({fociPacket.Data.Revision})"); } data.Report.PacketValid = true; } else { return(Error(data, Msg($"GridAi not found, is marked:{myGrid.MarkedForClose}, has root:{GridToMasterAi.ContainsKey(myGrid)}"))); } return(true); }
private bool ClientTargetUpdate(PacketObj data) { var packet = data.Packet; var targetPacket = (TargetPacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <CoreComponent>(); if (comp?.Ai == null || comp.Platform.State != CorePlatform.PlatformState.Ready) { return(Error(data, Msg($"CompId: {packet.EntityId}", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == CorePlatform.PlatformState.Ready))); } var w = comp.Platform.Weapons[targetPacket.Target.WeaponId]; if (w.MIds[(int)packet.PType] < packet.MId) { w.MIds[(int)packet.PType] = packet.MId; targetPacket.Target.SyncTarget(w); } data.Report.PacketValid = true; return(true); }
private bool ServerTerminalMonitor(PacketObj data) { var packet = data.Packet; var terminalMonPacket = (TerminalMonitorPacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg("Comp", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; if (terminalMonPacket.State == TerminalMonitorPacket.Change.Update) { TerminalMon.ServerUpdate(comp); } else if (terminalMonPacket.State == TerminalMonitorPacket.Change.Clean) { TerminalMon.ServerClean(comp); } data.Report.PacketValid = true; } else { Log.Line($"ServerTerminalMonitor: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } return(true); }
private bool ServerUpdateSetting(PacketObj data) { var packet = data.Packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg($"CompId: {packet.EntityId}", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; switch (packet.PType) { case PacketType.RequestSetRof: { WepUi.RequestSetRof(comp.MyCube as IMyTerminalBlock, ((FloatUpdatePacket)packet).Data); break; } case PacketType.RequestSetRange: { WepUi.RequestSetRange(comp.MyCube as IMyTerminalBlock, ((FloatUpdatePacket)packet).Data); break; } case PacketType.RequestSetDps: { WepUi.RequestSetDps(comp.MyCube as IMyTerminalBlock, ((FloatUpdatePacket)packet).Data); break; } case PacketType.RequestSetGuidance: { WepUi.RequestSetGuidance(comp.MyCube as IMyTerminalBlock, ((BoolUpdatePacket)packet).Data); break; } case PacketType.RequestSetOverload: { WepUi.RequestSetOverload(comp.MyCube as IMyTerminalBlock, ((BoolUpdatePacket)packet).Data); break; } } data.Report.PacketValid = true; } else { Log.Line($"ServerUpdateSetting: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } return(true); }
private bool ClientServerData(PacketObj data) { var packet = data.Packet; var updatePacket = (ServerPacket)packet; ServerVersion = updatePacket.VersionString; Settings.VersionControl.UpdateClientEnforcements(updatePacket.Data); data.Report.PacketValid = true; Log.Line($"Server enforcement received"); return(true); }
private bool Error(PacketObj data, params NetResult[] messages) { var message = $"[{data.Packet.PType.ToString()} - PacketError] - "; for (int i = 0; i < messages.Length; i++) { var resultPair = messages[i]; message += $"{resultPair.Message}: {resultPair.Valid} - "; } data.ErrorPacket.Error = message; Log.LineShortDate(data.ErrorPacket.Error, "net"); return(false); }
private bool ServerClientMouseEvent(PacketObj data) { var packet = data.Packet; var inputPacket = (InputPacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); if (ent == null) { return(Error(data, Msg("Entity"))); } if (inputPacket.Data == null) { return(Error(data, Msg("Data"))); } long playerId; if (SteamToPlayer.TryGetValue(packet.SenderId, out playerId)) { uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; if (PlayerMouseStates.ContainsKey(playerId)) { PlayerMouseStates[playerId].Sync(inputPacket.Data); } else { PlayerMouseStates[playerId] = new InputStateData(inputPacket.Data); } PacketsToClient.Add(new PacketInfo { Entity = ent, Packet = inputPacket }); data.Report.PacketValid = true; } else { Log.Line($"ServerClientMouseEvent: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } } else { return(Error(data, Msg("Player Not Found"))); } return(true); }
private bool ServerFocusUpdate(PacketObj data) { var packet = data.Packet; var focusPacket = (FocusPacket)packet; var myGrid = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeGrid; if (myGrid == null) { return(Error(data, Msg("Grid"))); } GridAi ai; uint[] mIds; if (GridToMasterAi.TryGetValue(myGrid, out ai) && PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId) { mIds[(int)packet.PType] = packet.MId; var targetGrid = MyEntities.GetEntityByIdOrDefault(focusPacket.TargetId) as MyCubeGrid; switch (packet.PType) { case PacketType.FocusUpdate: if (targetGrid != null) { ai.Construct.Focus.ServerAddFocus(targetGrid, ai); } break; case PacketType.NextActiveUpdate: ai.Construct.Focus.ServerNextActive(focusPacket.AddSecondary, ai); break; case PacketType.ReleaseActiveUpdate: ai.Construct.Focus.RequestReleaseActive(ai); break; case PacketType.FocusLockUpdate: ai.Construct.Focus.ServerCycleLock(ai); break; } data.Report.PacketValid = true; } else { return(Error(data, Msg($"GridAi not found or mid failure: ai:{ai != null}, is marked:{myGrid.MarkedForClose}, has root:{GridToMasterAi.ContainsKey(myGrid)}"))); } return(true); }
private bool ClientNotify(PacketObj data) { var packet = data.Packet; var clientNotifyPacket = (ClientNotifyPacket)packet; if (clientNotifyPacket.Message == string.Empty || clientNotifyPacket.Color == string.Empty) { return(Error(data, Msg("Data"))); } ShowClientNotify(clientNotifyPacket); data.Report.PacketValid = true; return(true); }
// Unmanaged state changes below this point private bool ClientSentReport(PacketObj data) { var packet = data.Packet; var sentReportPacket = (ProblemReportPacket)packet; if (sentReportPacket.Data == null) { return(Error(data, Msg("SentReport"))); } Log.Line($"remote data received"); ProblemRep.RemoteData = sentReportPacket.Data; data.Report.PacketValid = true; return(true); }
private bool ClientFakeTargetUpdate(PacketObj data) { var packet = data.Packet; data.ErrorPacket.NoReprocess = true; var targetPacket = (FakeTargetPacket)packet; var myGrid = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeGrid; GridAi ai; if (myGrid != null && GridTargetingAIs.TryGetValue(myGrid, out ai)) { if (ai.MIds[(int)packet.PType] < packet.MId) { ai.MIds[(int)packet.PType] = packet.MId; long playerId; if (SteamToPlayer.TryGetValue(packet.SenderId, out playerId)) { FakeTarget dummyTarget; if (PlayerDummyTargets.TryGetValue(playerId, out dummyTarget)) { dummyTarget.Update(targetPacket.Pos, ai, null, targetPacket.TargetId); } else { return(Error(data, Msg("Player dummy target not found"))); } } else { return(Error(data, Msg("SteamToPlayer missing Player"))); } } else { Log.Line($"ClientFakeTargetUpdate: mid fail - senderId:{packet.SenderId} - mId:{ai.MIds[(int)packet.PType]} >= {packet.MId}"); } data.Report.PacketValid = true; } else { return(Error(data, Msg($"GridId: {packet.EntityId}", myGrid != null), Msg("Ai"))); } return(true); }
private bool ClientPlayerIdUpdate(PacketObj data) { var packet = data.Packet; var updatePacket = (BoolUpdatePacket)packet; if (updatePacket.Data) { PlayerConnected(updatePacket.EntityId); } else //remove { PlayerDisconnected(updatePacket.EntityId); } data.Report.PacketValid = true; return(true); }
private bool ServerFixedWeaponHitEvent(PacketObj data) { var packet = data.Packet; var hitPacket = (FixedWeaponHitPacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg("Comp", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } var weapon = comp.Platform.Weapons[hitPacket.WeaponId]; var targetEnt = MyEntities.GetEntityByIdOrDefault(hitPacket.HitEnt); if (targetEnt == null) { return(Error(data, Msg("TargetEnt"))); } var origin = targetEnt.PositionComp.WorldMatrixRef.Translation - hitPacket.HitOffset; var direction = hitPacket.Velocity; direction.Normalize(); Projectiles.NewProjectiles.Add(new NewProjectile { AmmoDef = weapon.System.AmmoTypes[hitPacket.AmmoIndex].AmmoDef, Muzzle = weapon.Muzzles[hitPacket.MuzzleId], Weapon = weapon, TargetEnt = targetEnt, Origin = origin, OriginUp = hitPacket.Up, Direction = direction, Velocity = hitPacket.Velocity, MaxTrajectory = hitPacket.MaxTrajectory, Type = NewProjectile.Kind.Client }); data.Report.PacketValid = true; return(true); }
private bool ServerMarkedTargetUpdate(PacketObj data) { var packet = data.Packet; var targetPacket = (FakeTargetPacket)packet; var myGrid = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeGrid; if (myGrid == null) { return(Error(data, Msg($"GridId:{packet.EntityId} - entityExists:{MyEntities.EntityExists(packet.EntityId)}"))); } GridAi ai; long playerId; if (GridTargetingAIs.TryGetValue(myGrid, out ai) && SteamToPlayer.TryGetValue(packet.SenderId, out playerId)) { GridAi.FakeTargets fakeTargets; uint[] mIds; if (PlayerMIds.TryGetValue(packet.SenderId, out mIds) && mIds[(int)packet.PType] < packet.MId && PlayerDummyTargets.TryGetValue(playerId, out fakeTargets)) { mIds[(int)packet.PType] = packet.MId; fakeTargets.PaintedTarget.Sync(targetPacket, ai); PacketsToClient.Add(new PacketInfo { Entity = myGrid, Packet = targetPacket }); data.Report.PacketValid = true; } else { Log.Line($"ServerFakeTargetUpdate: MidsHasSenderId:{PlayerMIds.ContainsKey(packet.SenderId)} - midsNull:{mIds == null} - senderId:{packet.SenderId}"); } } else { return(Error(data, Msg($"GridAi not found, is marked:{myGrid.MarkedForClose}, has root:{GridToMasterAi.ContainsKey(myGrid)}"))); } return(true); }
private bool ClientWeaponReloadUpdate(PacketObj data) { var packet = data.Packet; var weaponReloadPacket = (WeaponReloadPacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg($"CompId: {packet.EntityId}", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } var w = comp.Platform.Weapons[weaponReloadPacket.WeaponId]; w.Reload.Sync(w, weaponReloadPacket.Data, false); data.Report.PacketValid = true; return(true); }
public ActionResult SubmitOrder(int OrderID, int SendType, PacketObj[] packets) { string tmpResult = "OK"; try { //提交订单 MyUser tmpUser = HttpContext.User as MyUser; if (tmpUser != null) { Order order = db.Orders.FirstOrDefault(r => r.OID == OrderID && r.UID == tmpUser.UID); if (order != null) { order.SendType = SendType; foreach (OrderPacket packet in order.Packets) { PacketObj tmpPacket = packets.FirstOrDefault(r => r.PacketID == packet.PacketID); if (tmpPacket == null) { throw new Exception("Order Packet is different!"); } packet.Count = tmpPacket.Count; } db.SaveChanges(); } } } catch { tmpResult = "Err"; } if (Request.IsAjaxRequest()) { string jsonStr = PubFunction.BuildResult(tmpResult); return(Content(jsonStr)); } else { return(View()); } }
private bool ClientStateUpdate(PacketObj data) { var packet = data.Packet; var compStatePacket = (CompStatePacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg($"CompId: {packet.EntityId}", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } if (!comp.Data.Repo.Base.State.Sync(comp, compStatePacket.Data, CompStateValues.Caller.Direct)) { Log.Line($"ClientStateUpdate: version fail - senderId:{packet.SenderId} - version:{comp.Data.Repo.Base.State.Revision}({compStatePacket.Data.Revision})"); } data.Report.PacketValid = true; return(true); }
private bool ClientFakeTargetUpdate(PacketObj data) { var packet = data.Packet; data.ErrorPacket.NoReprocess = true; var targetPacket = (FakeTargetPacket)packet; var myGrid = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeGrid; GridAi ai; if (myGrid != null && GridTargetingAIs.TryGetValue(myGrid, out ai)) { long playerId; if (SteamToPlayer.TryGetValue(packet.SenderId, out playerId)) { FakeTargets dummyTargets; if (PlayerDummyTargets.TryGetValue(playerId, out dummyTargets)) { dummyTargets.ManualTarget.Sync(targetPacket, ai); dummyTargets.PaintedTarget.Sync(targetPacket, ai); } else { return(Error(data, Msg("Player dummy target not found"))); } } else { return(Error(data, Msg("SteamToPlayer missing Player"))); } data.Report.PacketValid = true; } else { return(Error(data, Msg($"GridId: {packet.EntityId}", myGrid != null), Msg("Ai"))); } return(true); }
private bool ClientFullMouseUpdate(PacketObj data) { var packet = data.Packet; var mouseUpdatePacket = (MouseInputSyncPacket)packet; if (mouseUpdatePacket.Data == null) { return(Error(data, Msg("Data"))); } for (int i = 0; i < mouseUpdatePacket.Data.Length; i++) { var playerMousePackets = mouseUpdatePacket.Data[i]; if (playerMousePackets.PlayerId != PlayerId) { PlayerMouseStates[playerMousePackets.PlayerId] = playerMousePackets.MouseStateData; } } data.Report.PacketValid = true; return(true); }
private bool ClientConstruct(PacketObj data) { var packet = data.Packet; var myGrid = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeGrid; var cgPacket = (ConstructPacket)packet; if (myGrid == null) { return(Error(data, Msg($"Grid: {packet.EntityId}"))); } GridAi ai; if (GridToMasterAi.TryGetValue(myGrid, out ai)) { if (ai.MIds[(int)packet.PType] < packet.MId) { ai.MIds[(int)packet.PType] = packet.MId; var rootConstruct = ai.Construct.RootAi.Construct; rootConstruct.Data.Repo.Sync(rootConstruct, cgPacket.Data); rootConstruct.UpdateLeafs(); } else { Log.Line($"ClientConstructGroups MID failure - mId:{packet.MId}"); } data.Report.PacketValid = true; } else { return(Error(data, Msg($"GridAi not found, is marked:{myGrid.MarkedForClose}, has root:{GridToMasterAi.ContainsKey(myGrid)}"))); } return(true); }
private bool ClientStateUpdate(PacketObj data) { var packet = data.Packet; var compStatePacket = (CompStatePacket)packet; var ent = MyEntities.GetEntityByIdOrDefault(packet.EntityId); var comp = ent?.Components.Get <WeaponComponent>(); if (comp?.Ai == null || comp.Platform.State != MyWeaponPlatform.PlatformState.Ready) { return(Error(data, Msg($"CompId: {packet.EntityId}", comp != null), Msg("Ai", comp?.Ai != null), Msg("Ai", comp?.Platform.State == MyWeaponPlatform.PlatformState.Ready))); } if (comp.MIds[(int)packet.PType] < packet.MId) { comp.MIds[(int)packet.PType] = packet.MId; comp.Data.Repo.Base.State.Sync(comp, compStatePacket.Data, CompStateValues.Caller.Direct); } data.Report.PacketValid = true; return(true); }