public void SendUserMsg(Player player, string[] args) { if (args.Length != 1) { return; } string msg = ForgetiveServer.Base64Decode(args[0]); if (msg[0] == '@') { string cmd = msg.Substring(1); Program.engine.ExecuteByPlayer(cmd, player); Logger.WriteLine(LogLevel.Info, "玩家调用指令 <" + player.Name + "> " + msg); } else { Logger.WriteLine(LogLevel.Info, "消息 <" + player.Name + "> " + msg); userSendMsgs.Add(new Key <string, string>(player.Name, msg)); Player[] ps = player.MapContext.GetPlayers(); for (int i = 0; i < ps.Length; i++) { ps[i].SendChat(msg, player.Name); } } }
public override void OnInvoke(CommandObject[] obj) { ItemStorage.Save(); Print("正在等待数据库刷新..."); Data.timer.Enabled = false; ForgetiveServer.WaitExecute(1500, () => { Print("正在将临时数据写入到文件..."); Data.SaveAll(); Print("正在结束进程..."); Process.GetCurrentProcess().Kill(); }); }
public static Item GetItemDesc(int serverId) { for (int i = 0; i < ServerItems.Count; i++) { if (ServerItems[i].ServerId == serverId) { return(ServerItems[i]); } } errorTimes++; Logger.WriteLine(LogLevel.Warning, "尝试在物品池中寻找ID=" + serverId + "时失败,这可能源于一次保存异常。累计错误 " + errorTimes); if (errorTimes == maxTimes) { Logger.WriteLine(LogLevel.Error, "服务器即将被强制关闭,因为触发的物品异常次数大于最大值。这通常说明服务器的数据出现了严重问题。请询问XCBOSA获取数据修复帮助并修复服务器的数据再重试。"); Program.engine.Execute("shutdown", true); ForgetiveServer.FillThread(); } return(null); }
public void SendAddMessage(ThrownOutItem item) { List <string> adData = new List <string>(); Item itemDesc = ItemStorage.GetItemDesc(item.ItemServerId); adData.Add("addThrownItem"); adData.Add(itemDesc.ItemStaticId.ToString()); adData.Add(itemDesc.ServerId.ToString()); adData.Add(ForgetiveServer.Base64Encode(itemDesc.DescribeMessage)); adData.Add(ForgetiveServer.Base64Encode(itemDesc.ExtraInfo)); adData.Add(item.Location.ToXYZ()); for (int i = 0; i < Map.players.Count; i++) { try { Map.players[i].SendDataPackage(adData); } catch { } } }
public void SendToNewPlayer(Player player) { List <string> data = new List <string>(); data.Add("updateThrownItems"); for (int i = 0; i < Items.Count; i++) { int index = Items[i].ItemServerId; Item itemdesc = ItemStorage.GetItemDesc(index); if (itemdesc == null) { continue; } data.Add(itemdesc.ItemStaticId.ToString()); data.Add(itemdesc.ServerId.ToString()); data.Add(ForgetiveServer.Base64Encode(itemdesc.DescribeMessage)); data.Add(ForgetiveServer.Base64Encode(itemdesc.ExtraInfo)); data.Add(Items[i].Location.ToXYZ()); data.Add("next"); player.SendDataPackage(data); } }