示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        // 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);
        }
示例#7
0
        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);
        }
示例#10
0
        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);
        }
示例#11
0
        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);
        }
示例#12
0
        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);
        }
示例#13
0
        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);
        }
示例#15
0
        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);
        }
示例#16
0
        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);
        }
示例#17
0
        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);
        }
示例#23
0
        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);
        }
示例#24
0
        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);
        }
示例#25
0
        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());
            }
        }
示例#26
0
        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);
        }