예제 #1
0
        private bool ServerRequestReport(PacketObj data)
        {
            var packet = data.Packet;

            var cube = MyEntities.GetEntityByIdOrDefault(packet.EntityId) as MyCubeBlock;

            if (cube == null)
            {
                return(Error(data, Msg("Cube")));
            }

            var reportData = ProblemRep.PullData(cube);

            if (reportData == null)
            {
                return(Error(data, Msg("RequestReport")));
            }

            ProblemRep.NetworkTransfer(false, packet.SenderId, reportData);
            data.Report.PacketValid = true;

            return(true);
        }
예제 #2
0
        public override void UpdateBeforeSimulation()
        {
            try
            {
                if (SuppressWc)
                {
                    return;
                }

                if (DeformProtection.Count > 0 && Tick - LastDeform > 0)
                {
                    DeformProtection.Clear();
                }

                Timings();

                if (IsClient)
                {
                    if (ClientSideErrorPkt.Count > 0)
                    {
                        ReproccessClientErrorPackets();
                    }

                    if (ClientPacketsToClean.Count > 0)
                    {
                        CleanClientPackets();
                    }
                }

                if (IsServer)
                {
                    if (Tick60)
                    {
                        AcqManager.Observer();
                    }
                    if (Tick600)
                    {
                        AcqManager.ReorderSleep();
                    }
                }

                if (!DedicatedServer && TerminalMon.Active)
                {
                    TerminalMon.Monitor();
                }

                MyCubeBlock cube;
                if (Tick60 && UiInput.ControlKeyPressed && UiInput.CtrlPressed && GetAimedAtBlock(out cube) && cube.BlockDefinition != null && WeaponCoreBlockDefs.ContainsKey(cube.BlockDefinition.Id.SubtypeName))
                {
                    ProblemRep.GenerateReport(cube);
                }

                if (!IsClient && !InventoryUpdate && WeaponToPullAmmo.Count > 0 && ITask.IsComplete)
                {
                    StartAmmoTask();
                }

                if (!CompsToStart.IsEmpty)
                {
                    StartComps();
                }

                if (Tick120 && CompsDelayed.Count > 0)
                {
                    DelayedComps();
                }

                if (Tick20 && !DelayedAiClean.IsEmpty)
                {
                    DelayedAiCleanup();
                }

                if (CompReAdds.Count > 0)
                {
                    ChangeReAdds();
                }

                if (Tick3600 && MpActive)
                {
                    NetReport();
                }

                if (Tick180)
                {
                    ProfilePerformance();
                }

                FutureEvents.Tick(Tick);

                if (HomingWeapons.Count > 0)
                {
                    UpdateHomingWeapons();
                }


                if (MpActive)
                {
                    if (PacketsToClient.Count > 0 || PrunedPacketsToClient.Count > 0)
                    {
                        ProccessServerPacketsForClients();
                    }
                    if (PacketsToServer.Count > 0)
                    {
                        ProccessClientPacketsForServer();
                    }
                }
            }
            catch (Exception ex) { Log.Line($"Exception in SessionBeforeSim: {ex}"); }
        }