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; }
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; }