public static void Update(Stopwatch s)
        {
            int count = 0;

            int timeUpdateErrors     = 0;
            int worldUpdateErrors    = 0;
            int invasionUpdateErrors = 0;
            int serverUpdateErrors   = 0;

            var start = s.Elapsed;

            foreach (Player player in players)
            {
                try
                {
                    player.UpdatePlayer(null, null, count);
                }
                catch (Exception e)
                {
                    if (!ignoreErrors)
                    {
                        throw;
                    }

                    ProgramLog.Log(e, String.Format("Player update error, slot={0}, address={1}, name={2}",
                                                    player.whoAmi, player.IPAddress, player.Name != null ? string.Concat('"', player.Name, '"') : "<null>"));

                    player.Kick("Server malfunction, please reconnect.");
                }
                count++;
            }
            LastPlayerUpdateTime = s.Elapsed - start;

            lock (updatingNPCs)
            {
                start = s.Elapsed;

                NPC.SpawnNPC();

                foreach (Player player in players)
                {
                    player.ActiveNPCs = 0;
                    player.TownNPCs   = 0;
                }

                if (WallOfFlesh >= 0)
                {
                    var WoF   = npcs[WallOfFlesh];
                    var isWoF = WoF.type == NPCType.N113_WALL_OF_FLESH || WoF.type == NPCType.N114_WALL_OF_FLESH_EYE;
                    if (!isWoF && WoF.Active || !WoF.Active && isWoF)
                    {
                        WallOfFlesh = -1;
                    }
                }

                for (int i = 0; i < NPC.MAX_NPCS; i++)
                //					if (npcs[i] == null)
                //					{
                //						ProgramLog.Debug.Log ("NPC[{0}] is null", i);
                //						continue;
                //					}
#if CATCHERROR_NPCUPDATES
                { try
                  {
#endif
                { NPC.UpdateNPC(i); }
#if CATCHERROR_NPCUPDATES
            }
            catch (Exception e)
            {
                if (!ignoreErrors)
                {
                    throw;
                }

                var npc = npcs[i];
                ProgramLog.Log(e, String.Format("NPC update error, id={0}, type={1}, name={2}",
                                                i, npc.Type, npc.Name));

                npcs[i]           = Registries.NPC.Default;
                npcs[i].netUpdate = true;
            }
#endif

                LastNPCUpdateTime = s.Elapsed - start;
            }

            lock (updatingProjectiles)
            {
                start = s.Elapsed;

                for (int i = 0; i < 1000; i++)
                {
                    //					if (projectile[i] == null)
                    //					{
                    //						ProgramLog.Debug.Log ("Projectile[{0}] is null", i);
                    //						continue;
                    //					}

                    try
                    {
                        lock (WorldModify.playerEditLock)
                        {
                            var editor  = TileBreakMessage.staticEditor;
                            var sandbox = editor.Sandbox;

                            editor.Sandbox.Initialize();
                            projectile[i].Update(editor.ITileAt, sandbox, i);

                            Player player = null;
                            if (projectile != null && projectile[i].Owner != myPlayer)
                            {
                                player = players[projectile[i].Owner];
                            }

                            editor.Sandbox.Apply(player);
                        }
                    }
                    catch (Exception e)
                    {
                        if (!ignoreErrors)
                        {
                            throw;
                        }

                        var proj = projectile[i];
                        ProgramLog.Log(e, String.Format("Projectile update error, i={0}, id={1}, owner={2}, type={3}",
                                                        i, proj.identity, proj.Owner, proj.Type));
                        //projectile[i] = new Projectile();
                        Projectile.Reset(i);
                    }
                }

                LastProjectileUpdateTime = s.Elapsed - start;
            }

            lock (updatingItems)
            {
                start = s.Elapsed;

                for (int i = 0; i < 200; i++)
                    //					if (item[i] == null)
                    //					{
                    //						ProgramLog.Debug.Log ("Item[{0}] is null", i);
                    //						continue;
                    //					}

                    try
                    {
                        item[i].UpdateItem(null, i);
                    }
                    catch (Exception e)
                    {
                        if (!ignoreErrors)
                        {
                            throw;
                        }

                        var itm = item[i];
                        ProgramLog.Log(e, String.Format("Projectile update error, i={0}, type={1}, owner={2}, stack={3}",
                                                        i, itm.Type, itm.Owner, itm.Stack));
                        item[i] = new Item();
                    } }

                LastItemUpdateTime = s.Elapsed - start;
            }

            start = s.Elapsed;
            try
            {
                UpdateTime();
                timeUpdateErrors = 0;
            }
            catch (Exception e)
            {
                if (++timeUpdateErrors >= 5 || !ignoreErrors)
                {
                    throw;
                }

                ProgramLog.Log(e, "Time update error");
                checkForSpawns = 0;
            }
            LastTimeUpdateTime = s.Elapsed - start;

            start = s.Elapsed;
            try
            {
                WorldModify.UpdateWorld(null, null, World.Sender);
                worldUpdateErrors = 0;
            }
            catch (Exception e)
            {
                if (++worldUpdateErrors >= 5 || !ignoreErrors)
                {
                    throw;
                }

                ProgramLog.Log(e, "World update error");
            }
            LastWorldUpdateTime = s.Elapsed - start;

            start = s.Elapsed;
            try
            {
                UpdateInvasion();
                invasionUpdateErrors = 0;
            }
            catch (Exception e)
            {
                if (++invasionUpdateErrors >= 5 || !ignoreErrors)
                {
                    throw;
                }

                ProgramLog.Log(e, "Invasion update error");
            }
            LastInvasionUpdateTime = s.Elapsed - start;

            start = s.Elapsed;
            try
            {
                UpdateServer();
                serverUpdateErrors = 0;
            }
            catch (Exception e)
            {
                if (++serverUpdateErrors >= 5 || !ignoreErrors)
                {
                    throw;
                }

                ProgramLog.Log(e, "Server update error");
            }
            LastServerUpdateTime = s.Elapsed - start;
        }
예제 #2
0
        public static void Update(Stopwatch s)
        {
            int count = 0;

            int timeUpdateErrors     = 0;
            int worldUpdateErrors    = 0;
            int invasionUpdateErrors = 0;
            int serverUpdateErrors   = 0;

            var start = s.Elapsed;

            foreach (Player player in Main.players)
            {
                try
                {
                    player.UpdatePlayer(count);
                }
                catch (Exception e)
                {
                    if (!Main.ignoreErrors)
                    {
                        throw;
                    }

                    ProgramLog.Log(e, String.Format("Player update error, slot={0}, address={1}, name={2}",
                                                    player.whoAmi, player.IPAddress, player.Name != null ? string.Concat('"', player.Name, '"') : "<null>"));

                    player.Kick("Server malfunction, please reconnect.");
                }
                count++;
            }
            LastPlayerUpdateTime = s.Elapsed - start;

            lock (updatingNPCs)
            {
                start = s.Elapsed;

                NPC.SpawnNPC();

                foreach (Player player in Main.players)
                {
                    player.activeNPCs = 0;
                    player.townNPCs   = 0;
                }

                if (Main.WallOfFlesh >= 0 && !Main.npcs[Main.WallOfFlesh].Active)
                {
                    Main.WallOfFlesh = -1;
                }

                for (int i = 0; i < NPC.MAX_NPCS; i++)
                {
//					if (Main.npcs[i] == null)
//					{
//						ProgramLog.Debug.Log ("NPC[{0}] is null", i);
//						continue;
//					}

                    try
                    {
                        NPC.UpdateNPC(i);
                    }
                    catch (Exception e)
                    {
                        if (!Main.ignoreErrors)
                        {
                            throw;
                        }

                        var npc = Main.npcs[i];
                        ProgramLog.Log(e, String.Format("NPC update error, id={0}, type={1}, name={2}",
                                                        i, npc.Type, npc.Name));

                        Main.npcs[i]           = Registries.NPC.Default;
                        Main.npcs[i].netUpdate = true;
                    }
                }

                LastNPCUpdateTime = s.Elapsed - start;
            }

            lock (updatingProjectiles)
            {
                start = s.Elapsed;

                for (int i = 0; i < 1000; i++)
                {
//					if (Main.projectile[i] == null)
//					{
//						ProgramLog.Debug.Log ("Projectile[{0}] is null", i);
//						continue;
//					}

                    try
                    {
                        Main.projectile[i].Update(i);
                    }
                    catch (Exception e)
                    {
                        if (!Main.ignoreErrors)
                        {
                            throw;
                        }

                        var proj = Main.projectile[i];
                        ProgramLog.Log(e, String.Format("Projectile update error, i={0}, id={1}, owner={2}, type={3}",
                                                        i, proj.identity, proj.Owner, proj.Type));
                        //Main.projectile[i] = new Projectile();
                        Projectile.Reset(i);
                    }
                }

                LastProjectileUpdateTime = s.Elapsed - start;
            }

            lock (updatingItems)
            {
                start = s.Elapsed;

                for (int i = 0; i < 200; i++)
                {
//					if (Main.item[i] == null)
//					{
//						ProgramLog.Debug.Log ("Item[{0}] is null", i);
//						continue;
//					}

                    try
                    {
                        Main.item[i].UpdateItem(i);
                    }
                    catch (Exception e)
                    {
                        if (!Main.ignoreErrors)
                        {
                            throw;
                        }

                        var item = Main.item[i];
                        ProgramLog.Log(e, String.Format("Projectile update error, i={0}, type={1}, owner={2}, stack={3}",
                                                        i, item.Type, item.Owner, item.Stack));
                        Main.item[i] = new Item();
                    }
                }

                LastItemUpdateTime = s.Elapsed - start;
            }

            start = s.Elapsed;
            try
            {
                Main.UpdateTime();
                timeUpdateErrors = 0;
            }
            catch (Exception e)
            {
                if (++timeUpdateErrors >= 5 || !Main.ignoreErrors)
                {
                    throw;
                }

                ProgramLog.Log(e, "Time update error");
                Main.checkForSpawns = 0;
            }
            LastTimeUpdateTime = s.Elapsed - start;

            start = s.Elapsed;
            try
            {
                WorldModify.UpdateWorld(World.Sender);
                worldUpdateErrors = 0;
            }
            catch (Exception e)
            {
                if (++worldUpdateErrors >= 5 || !Main.ignoreErrors)
                {
                    throw;
                }

                ProgramLog.Log(e, "World update error");
            }
            LastWorldUpdateTime = s.Elapsed - start;

            start = s.Elapsed;
            try
            {
                Main.UpdateInvasion();
                invasionUpdateErrors = 0;
            }
            catch (Exception e)
            {
                if (++invasionUpdateErrors >= 5 || !Main.ignoreErrors)
                {
                    throw;
                }

                ProgramLog.Log(e, "Invasion update error");
            }
            LastInvasionUpdateTime = s.Elapsed - start;

            start = s.Elapsed;
            try
            {
                Main.UpdateServer();
                serverUpdateErrors = 0;
            }
            catch (Exception e)
            {
                if (++serverUpdateErrors >= 5 || !Main.ignoreErrors)
                {
                    throw;
                }

                ProgramLog.Log(e, "Server update error");
            }
            LastServerUpdateTime = s.Elapsed - start;
        }