protected async void EternalLandUpdate() { await Task.Run(() => { OnlineEPlayer.ForEach(e => e.Update()); MapManager.UpdateMap(); }); }
public void PostInitialize(EventArgs args) { if (Main.rand == null) { Main.rand = new Terraria.Utilities.UnifiedRandom(); } Main.ServerSideCharacter = true; ServerApi.Hooks.NetGreetPlayer.Register(this, NetProccess.PlayerJoin); ServerApi.Hooks.ServerLeave.Register(this, NetProccess.PlayerLeave); // ServerApi.Hooks.NetGetData.Register(this, NetProccess.GetData); ServerApi.Hooks.WorldSave.Register(this, delegate { DataBase.SaveAllEPlayer(); }); Hooks.Game.PostUpdate += delegate(ref GameTime gameTime) { EternalLandUpdate(); }; Hooks.Player.PreUpdate += PlayerUpdate; TShockAPI.Hooks.AccountHooks.AccountCreate += NetProccess.PlayerRegister; GetDataHandlers.KillMe += NetProccess.PlayerDeath; if (!IsGameMode) { ServerApi.Hooks.NpcSpawn.Register(this, NetProccess.NpcSpawn); ServerApi.Hooks.NpcStrike.Register(this, NetProccess.NpcStrike); //ServerApi.Hooks.NpcKilled.Register(this, NetProccess.NpcKill); ServerApi.Hooks.ServerChat.Register(this, delegate(ServerChatEventArgs args) { Terraria.Chat.ChatHelper.SendChatMessageToClientAs((byte)args.Who, NetworkText.FromLiteral(args.Text), Color.White, args.Who); }); Commands.ChatCommands.Add(new Command("eternalland.bank.use", ProcessCommand.Bank, new string[] { "bank", "资产" }) { HelpText = "资产相关命令." }); } else { DataBase.GetAllCharacter(); DataBase.GetAllMap(); ServerApi.Hooks.NetSendBytes.Register(this, GameNet.OnSendBytes); ServerApi.Hooks.NetSendData.Register(this, GameNet.OnSendData); ServerApi.Hooks.NetGetData.Register(this, GameNet.OnGetData); ServerApi.Hooks.ServerChat.Register(this, GameNet.OnChat); GetDataHandlers.PlayerInfo += delegate(object o, GetDataHandlers.PlayerInfoEventArgs args) { if (args.Player.IsLoggedIn) { args.Handled = true; } args.Player.SendData(PacketTypes.PlayerInfo, "", args.Player.Index); }; TShockAPI.Hooks.PlayerHooks.PlayerCommand += GameCommand.OnPlayerCommand; ServerApi.Hooks.NpcStrike.Register(this, GameNet.OnNpcStrike); //GetDataHandlers.NewProjectile += GameNet.OnReceiveNewProj; GetDataHandlers.ProjectileKill += GameNet.OnReceiveKillProj; GetDataHandlers.PlayerSpawn += GameNet.OnPlayerSpawn; GetDataHandlers.SendTileSquare += delegate(object o, GetDataHandlers.SendTileSquareEventArgs args) { args.Handled = true; }; GetDataHandlers.ChestOpen += GameNet.OnChestOpen; //GetDataHandlers.DisplayDollItemSync += GameNet.OnUpdateSign; GetDataHandlers.LiquidSet += GameNet.OnLiquidSet; Commands.ChatCommands.Add(new Command("eternalland.game.admin", GameCommand.AdminCommand, new string[] { "/char" }) { HelpText = "小遊戲服管理員命令." }); Commands.ChatCommands.Add(new Command("eternalland.game.admin", GameCommand.AdminCommand, new string[] { "/map" }) { HelpText = "小遊戲服管理員命令 <地图>." }); Commands.ChatCommands.Add(new Command("eternalland.game.admin", GameCommand.Territory, new string[] { "territory", "属地", "sd" }) { HelpText = "小遊戲服管理員命令 <地图>." }); new Thread(new ThreadStart(MapManager.CheckMapActive)).Start(); new Thread(new ThreadStart(delegate { while (true) { Thread.Sleep(1500); OnlineEPlayer.ForEach(e => { NetMessage.SendData(4, -1, -1, null, e.Index); UserManager.SetBag(e); UserManager.SetBuff(e); }); } })).Start(); } StatusSender.SendStatus(); }