Esempio n. 1
0
        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);
                }
            }
        }
Esempio n. 2
0
 public override void OnInvoke(CommandObject[] obj)
 {
     ItemStorage.Save();
     Print("正在等待数据库刷新...");
     Data.timer.Enabled = false;
     ForgetiveServer.WaitExecute(1500, () =>
     {
         Print("正在将临时数据写入到文件...");
         Data.SaveAll();
         Print("正在结束进程...");
         Process.GetCurrentProcess().Kill();
     });
 }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
        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 { }
            }
        }
Esempio n. 5
0
        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);
            }
        }