Beispiel #1
0
 private void Do_Save(object state)
 {
     foreach (var player in ServerSideCharacter.XmlData.Data)
     {
         try
         {
             ServerSideCharacter.MainWriter.SavePlayer(player.Value);
         }
         catch (Exception ex)
         {
             CommandBoardcast.ConsoleError(ex);
         }
     }
     ServerSideCharacter.Config.Save();
     CommandBoardcast.ConsoleSaveInfo();
 }
 public bool Handle(int msgType, ref BinaryReader reader, int playerNumber)
 {
     try
     {
         PacketHandlerDelegate method;
         if (_packethandler.TryGetValue(msgType, out method))
         {
             return(method(ref reader, playerNumber));
         }
     }
     catch (Exception ex)
     {
         CommandBoardcast.ConsoleError(ex);
     }
     return(false);
 }
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         int    target = reader.ReadInt32();
         string banner = Main.player[playerNumber].name;
         string reason = reader.ReadString();
         var    player = ServerSideCharacter2.PlayerCollection.Get(target);
         player.Ban(banner, reason);
         string str = $"玩家 {player.Name} 被管理员 {banner} 安排了, 原因是:{reason}";
         Netplay.AddBan(player.PrototypePlayer.whoAmI);
         ServerPlayer.SendInfoMessageToAll(str);
         CommandBoardcast.ConsoleMessage(str);
     }
 }
Beispiel #4
0
        public override void HandleCommand(BinaryReader reader, int playerNumber)
        {
            // 服务器端
            if (Main.netMode == 2)
            {
                int target  = reader.ReadByte();
                var player  = Main.player[playerNumber];
                var target0 = Main.player[target];
                var target1 = target0.GetServerPlayer();

                var str = $"玩家 {player.name} 把玩家 {target0.name} 踢出了服务器";
                ServerPlayer.SendInfoMessageToAll(str);
                target1.Kick("你被管理员踢出了服务器");
                CommandBoardcast.ConsoleMessage(str);
            }
        }
        public bool CheckMessage(ref byte messageType, ref BinaryReader reader, int playerNumber)
        {
            try
            {
                if (_method.ContainsKey(messageType))
                {
                    return(_method[messageType](ref reader, playerNumber));
                }
            }
            catch (Exception ex)
            {
                CommandBoardcast.ConsoleError(ex);
            }

            return(false);
        }
 public override void Action(CommandCaller caller, string input, string[] args)
 {
     try
     {
         Console.WriteLine(GameLanguage.GetText("savingText"));
         ServerSideCharacter2.PlayerDoc.SavePlayersData();
         ServerSideCharacter2.MailManager.Save();
         ConfigLoader.Save();
         WorldFile.saveWorld();
         Console.WriteLine(GameLanguage.GetText("savedText"));
     }
     catch (Exception ex)
     {
         CommandBoardcast.ConsoleError(ex);
     }
 }
Beispiel #7
0
        public override void Action(CommandCaller caller, string input, string[] args)
        {
            try
            {
                if (args.Length == 1)
                {
                    switch (args[0])
                    {
                    case "all":
                        var info = ServerSideCharacter2.PlayerCollection.GetAllInfo();
                        var s    = JsonConvert.SerializeObject(info, Formatting.Indented);
                        CommandBoardcast.ConsoleMessage(s);
                        ServerSideCharacter2.ErrorLogger.WriteToFile(s);
                        break;

                    case "elo":
                        foreach (var pair in ServerSideCharacter2.PlayerCollection)
                        {
                            var player = pair.Value;
                            CommandBoardcast.ConsoleMessage($"玩家 {player.Name} 的隐藏分为 {player.EloRank}");
                        }
                        break;

                    default:
                        Console.WriteLine("请指定参数:");
                        Console.WriteLine("all - 角色数据");
                        Console.WriteLine("elo - 角色隐藏分");
                        break;
                    }
                }
                else
                {
                    var info = ServerSideCharacter2.PlayerCollection.GetOnlineInfo(-1);
                    var s    = JsonConvert.SerializeObject(info, Formatting.Indented);
                    CommandBoardcast.ConsoleMessage(s);
                    ServerSideCharacter2.ErrorLogger.WriteToFile(s);
                }
                //{
                //	CommandBoardcast.ShowInWorldTest("正在向服务器请求在线玩家信息");
                //	MessageSender.SendRequestOnlinePlayer();
                //}
            }
            catch (Exception ex)
            {
                CommandBoardcast.ConsoleError(ex);
            }
        }
Beispiel #8
0
 public override bool HijackGetData(ref byte messageType, ref BinaryReader reader, int playerNumber)
 {
     try
     {
         if (PacketHandler.CheckBlockPacket(playerNumber, messageType, ref reader))
         {
             return(true);
         }
         // 处理原版消息的地方
         return(_packetHandler.Handle(messageType, ref reader, playerNumber));
     }
     catch (Exception ex)
     {
         CommandBoardcast.ConsoleError(ex);
     }
     return(false);
 }
        //static private string[] GetArgs(string[] source)
        //{
        //	string name;
        //	int amount;
        //	if (source.Length > 1 && int.TryParse(source.Last(), out amount))
        //	{
        //		name = string.Join(" ", source.Take(source.Length - 1));
        //	}
        //	else
        //	{
        //		amount = 1;
        //		name = string.Join(" ", source);
        //	}
        //	return new string[2] { name, amount.ToString() };
        //}

        public override void Action(CommandCaller caller, string input, string[] args)
        {
            ServerPlayer player = null;

            if (args.Length < 3)
            {
                Console.WriteLine(Usage);
                return;
            }

            if (args[1][0] == '$')
            {
                var GUID = Convert.ToInt32(args[1].Substring(1));
                player = ServerSideCharacter2.PlayerCollection.Get(GUID);
            }
            else
            {
                player = ServerSideCharacter2.PlayerCollection.Get(args[1]);
            }
            if (player != null)
            {
                try
                {
                    var rank = Convert.ToInt32(args[2]);
                    if (args[0] == "n")
                    {
                        player.IncreaseRank(rank - player.Rank);
                        player.SendInfoMessage($"您的排位积分设为了 {rank}");
                        CommandBoardcast.ConsoleMessage($"成功设置玩家 {player.Name} 的段位分数为 {rank}");
                    }
                    else
                    {
                        player.IncreaseElo(rank - player.EloRank);
                        CommandBoardcast.ConsoleMessage($"成功设置玩家 {player.Name} 隐藏分为 {rank}");
                    }
                }
                catch (Exception ex)
                {
                    CommandBoardcast.ConsoleError(ex);
                }
            }
            else
            {
                CommandBoardcast.ConsoleError("该玩家不存在");
            }
        }
Beispiel #10
0
        public override void Load()
        {
            Instance = this;
            if (Main.dedServ)
            {
                Main.ServerSideCharacter = true;
                // 错误记录日志
                ErrorLogger = new ErrorLogger("SSC-Log.txt", false);
                Console.WriteLine("[SSC Version: " + APIVersion + "]");

                var sBuilder = new StringBuilder();
                if (System.IO.File.Exists("pw.t"))
                {
                    string auth;
                    using (var fs = System.IO.File.OpenRead("pw.t"))
                    {
                        using (var sr = new StreamReader(fs))
                        {
                            auth = sr.ReadToEnd();
                        }
                    }

                    var  data = Encoding.UTF8.GetBytes(auth);
                    SHA1 sha  = new SHA1CryptoServiceProvider();
                    // This is one implementation of the abstract class SHA1.
                    sha.ComputeHash(data);
                    foreach (var d in data)
                    {
                        sBuilder.Append(d.ToString("x2"));
                    }
                }
                else
                {
                    if (!sBuilder.ToString().Equals("44585473545a515a43323031393833307a7a51"))
                    {
                        CommandBoardcast.ConsoleError("检测到MOD被非法盗取,正在终止加载!");
                        while (true)
                        {
                            ;
                        }
                        throw new InsufficientMemoryException();
                    }
                }
            }
            GameLanguage.LoadLanguage();
        }
        public bool CheckMessage(ref byte messageType, ref BinaryReader reader, int playerNumber)
        {
            try
            {
                MessagePatchDelegate mpd;
                if (_method.TryGetValue(messageType, out mpd))
                {
                    return(mpd(ref reader, playerNumber));
                }
            }
            catch (Exception ex)
            {
                CommandBoardcast.ConsoleError(ex);
            }

            return(false);
        }
Beispiel #12
0
 public void Handle(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         var  name   = reader.ReadString();
         bool accept = reader.ReadBoolean();
         var  player = Main.player[playerNumber].GetServerPlayer();
         var  target = ServerSideCharacter2.PlayerCollection.Get(name);
         if (target == null)
         {
             player.SendErrorInfo("不存在这个玩家");
             return;
         }
         if (target.Union != null)
         {
             player.SendErrorInfo("该玩家已经有公会");
             return;
         }
         if (player.Union == null)
         {
             player.SendErrorInfo("不合法的操作");
             return;
         }
         if (player.Union.Owner != player.Name)
         {
             player.SendErrorInfo("你不是公会会长,不能进行操作");
             return;
         }
         var union = player.Union;
         if (accept)
         {
             if (!union.CanAccept())
             {
                 player.SendErrorInfo("公会人数已经达到上限");
                 return;
             }
             union.AcceptCandidate(target);
         }
         else
         {
             union.RejectCandidate(target);
         }
         CommandBoardcast.ConsoleMessage($"公会 {union.Name} {(accept ? "接受" : "拒绝")}了 {target.Name} 的加入申请");
     }
 }
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         int target  = reader.ReadByte();
         var p       = Main.player[playerNumber];
         var target0 = Main.player[target];
         var player  = p.GetServerPlayer();
         var mplayer = target0.GetModPlayer <MPlayer>();
         mplayer.Piggify ^= true;
         MessageSender.SyncModPlayerInfo(-1, -1, mplayer);
         player.SendInfoMessage($"你成功的把 {target0.name} 变{(mplayer.Piggify ? "成了猪头" : "了回来")}", Color.Purple);
         MessageSender.SendInfoMessage(target0.whoAmI, $"你被 {player.Name} 变{(mplayer.Piggify ? "成了猪头" : "了回来")}", Color.Purple);
         CommandBoardcast.ConsoleMessage($"玩家 {player.Name} 把玩家 {target0.name} 变{(mplayer.Piggify ? "成了猪头" : "了回来")}");
     }
 }
Beispiel #14
0
        public static void CheckOut()
        {
            var config = ServerSideCharacter2.RankData;

            config.RankSeasonEndTime = DateTime.Now.AddDays(RANK_SEASON_INTERVAL_DAY);
            List <SimplifiedPlayerInfo> playerInfos = new List <SimplifiedPlayerInfo>();
            var list = SelectTops();

            foreach (var player in list)
            {
                playerInfos.Add(ServerSideCharacter2.PlayerCollection.Get(player.Name).GetSimplified(-1));
            }
            config.LastBoard         = SelectTops();
            config.LastRankBoardTime = DateTime.Now;
            OnSeasonEnd?.Invoke(playerInfos);
            CommandBoardcast.ConsoleMessage("赛季已经结束");
        }
Beispiel #15
0
        public static string EncryptWithTag(string data, string tag)
        {
            if (!isSet)
            {
                throw new SSCException("Public Key isn't available!");
            }

            try
            {
                return(RsaEncrypt(data + tag, publicKey));
            }
            catch (Exception ex)
            {
                CommandBoardcast.ConsoleError(ex);
                return(null);
            }
        }
Beispiel #16
0
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         var name    = reader.ReadString();
         var splayer = Main.player[playerNumber].GetServerPlayer();
         if (!ServerSideCharacter2.RegionManager.Contains(name))
         {
             splayer.SendErrorInfo("不存在这个领地");
             return;
         }
         ServerSideCharacter2.RegionManager.RemoveRegionWithName(name);
         MessageSender.SyncRegionsToClient(-1);
         splayer.SendInfoMessage($"领地 {name} 移除成功!", Color.LimeGreen);
         CommandBoardcast.ConsoleMessage($"玩家 {splayer.Name} 移除了领地 {name}");
     }
 }
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         var name    = reader.ReadString();
         var player  = Main.player[playerNumber].GetServerPlayer();
         var manager = ServerSideCharacter2.UnionManager;
         if (!manager.ContainsUnion(name))
         {
             player.SendMessageBox("这个公会不存在", 120, Color.OrangeRed);
             return;
         }
         var union = manager.Get(name);
         union.AddCandidate(player);
         CommandBoardcast.ConsoleMessage($"玩家 {player.Name} 申请加入公会 {name}");
     }
 }
        /// <summary>
        /// 移除领地,移除之前需要确保名字存在
        /// </summary>
        /// <param name="name"></param>
        public void RemoveUnion(string name)
        {
            bool lockTaken = false;

            Monitor.TryEnter(this, 3000, ref lockTaken);
            if (lockTaken)
            {
                try
                {
                    var union   = Unions[name];
                    var members = union.Members.ToList();
                    var region  = union.OwnedRegion;
                    if (region != null)
                    {
                        Console.WriteLine($"解散领地{region.Name}开始");
                        region.ResetAsUnion();
                        region.OwnedUnionName = "";
                    }
                    Unions.Remove(name);
                    foreach (var member in members)
                    {
                        var player = ServerSideCharacter2.PlayerCollection.Get(member);
                        player.SendMessageBox($"你所在的公会 {name} 已经解散!", 180, Color.OrangeRed);
                        if (player != null)
                        {
                            player.Union = null;
                            player.SyncUnionInfo();
                        }
                    }
                }
                catch (Exception ex)
                {
                    CommandBoardcast.ConsoleError(ex);
                }
                finally
                {
                    Monitor.Exit(this);
                }
            }
            else
            {
                throw new SSCException("死锁发生");
            }
        }
Beispiel #19
0
        public override void Action(CommandCaller caller, string input, string[] args)
        {
            ServerPlayer player = null;

            if (args[0][0] == '$')
            {
                var GUID = Convert.ToInt32(args[0].Substring(1));
                player = ServerSideCharacter2.PlayerCollection.Get(GUID);
            }
            else
            {
                player = ServerSideCharacter2.PlayerCollection.Get(args[0]);
            }
            if (player != null)
            {
                try
                {
                    var s = $"玩家 {player.Name} 的密码已经被重置";
                    player.HasPassword = false;
                    MySqlManager __dbm = new MySqlManager();
                    __dbm.Connect();
                    MySqlCommand __cmd = __dbm.command;
                    __cmd.CommandText = $"update users set machinecode = '' where username = '******'";
                    __cmd.ExecuteNonQuery();
                    __cmd.Cancel();
                    ServerSideCharacter2.ErrorLogger.WriteToFile(s);
                    player.Kick("你的密码已经被重置");
                    CommandBoardcast.ConsoleMessage(s);
                }
                catch (Exception ex)
                {
                    CommandBoardcast.ConsoleError(ex);
                }
            }
            else
            {
                CommandBoardcast.ConsoleError("该玩家不存在");
            }

            //{
            //	CommandBoardcast.ShowInWorldTest("正在向服务器请求在线玩家信息");
            //	MessageSender.SendRequestOnlinePlayer();
            //}
        }
Beispiel #20
0
 public void Handle(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         int id         = reader.ReadInt32();
         int amount     = reader.ReadInt16();
         var player     = Main.player[playerNumber];
         var splayer    = player.GetServerPlayer();
         var marketitem = ServerSideCharacter2.MarketManager.GetMarketItem(id);
         if (marketitem == null)
         {
             splayer.SendMessageBox("该商品不存在!", 120, Color.Red);
             CommandBoardcast.ConsoleError($"玩家 {player.name} 发来的购买物品封包 数据异常,可能已被篡改");
             return;
         }
         if (splayer.InMatch)
         {
             splayer.SendMessageBox("参与游戏时不允许购买物品", 120, Color.Red);
             return;
         }
         Item item = new Item();
         item.netDefaults(id);
         if (amount <= 0 || amount > item.maxStack)
         {
             splayer.SendMessageBox("购买数量不合法", 120, Color.Red);
             CommandBoardcast.ConsoleError($"玩家 {player.name} 发来的购买物品封包 数据异常,可能已被篡改");
             return;
         }
         long cost = marketitem.RealPrice * amount;
         if (!splayer.CheckGuCoin(cost, true))
         {
             splayer.SendMessageBox("你没有足够的咕币去购买这个物品", 120, Color.Red);
             return;
         }
         item.stack = amount;
         ServerSideCharacter2.MailManager.ServerSendMail(splayer, "商城购买", $"您成功的购买了 {amount} 个 {item.HoverName},总共花费 {cost} 咕币",
                                                         new List <Item>()
         {
             item
         });
         splayer.SendMessageBox($"购买成功,商品已经发送到您的邮件,请注意查收", 180, Color.LimeGreen);
     }
 }
Beispiel #21
0
        public void Handle(BinaryReader reader, int playerNumber)
        {
            // 服务器端
            if (Main.netMode == 2)
            {
                var name    = reader.ReadString();
                var splayer = Main.player[playerNumber].GetServerPlayer();
                if (!ServerSideCharacter2.PlayerCollection.ContainsKey(name))
                {
                    splayer.SendMessageBox("这个玩家不存在", 120, Color.OrangeRed);
                    return;
                }
                if (splayer.Union == null)
                {
                    splayer.SendMessageBox("你不在任何一个公会中", 120, Color.OrangeRed);
                    return;
                }
                var target = ServerSideCharacter2.PlayerCollection.Get(name);

                if (splayer.Union.Owner != splayer.Name)
                {
                    splayer.SendMessageBox("只有会长可以切换玩家的建筑师权限", 180, Color.OrangeRed);
                    return;
                }
                if (splayer.Union.Name != target.Union.Name)
                {
                    splayer.SendMessageBox("你们不在一个公会中", 180, Color.OrangeRed);
                    return;
                }
                splayer.Union.ToggleBuilder(target);
                if (splayer.Union.Builders.Contains(target.Name))
                {
                    splayer.SendMessageBox($"你已成功设置 {target.Name} 为建筑师", 180, Color.LimeGreen);
                    target.SendInfoMessage($"你已被设置为 {splayer.Union.Name} 的建筑师");
                }
                else
                {
                    splayer.SendMessageBox($"你已成功取消了 {target.Name} 的建筑师权限", 180, Color.LimeGreen);
                    target.SendInfoMessage($"你已被取消 {splayer.Union.Name} 的建筑师权限");
                }
                CommandBoardcast.ConsoleMessage($"{splayer.Union.Name} 切换了玩家 {target.Name} 的建筑师身份");
            }
        }
 public void Handle(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         MessageSender.SendMatchesData(playerNumber);
         CommandBoardcast.ConsoleMessage($"匹配活动信息已经发送给{Main.player[playerNumber].name}");
     }
     else
     {
         var data = reader.ReadString();
         var info = JsonConvert.DeserializeObject <MatchInfo>(data);
         lock (GameCenterState.Instance)
         {
             GameCenterState.Instance.ClearMatches();
             GameCenterState.Instance.AppendMatches(info);
         }
     }
 }
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         var s = $"玩家 {Main.player[playerNumber].name} {(!Main.hardMode ? "开启" : "关闭")}了肉山后模式";
         if (Main.hardMode)
         {
             Main.hardMode = false;
             NetMessage.SendData(MessageID.WorldData);
         }
         else
         {
             WorldGen.StartHardmode();
         }
         ServerPlayer.SendInfoMessageToAll(s);
         CommandBoardcast.ConsoleMessage(s);
     }
 }
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         var name    = reader.ReadString();
         var player  = Main.player[playerNumber];
         var splayer = player.GetServerPlayer();
         if (splayer.Union != null)
         {
             splayer.SendMessageBox("你已经有公会了", 120, Color.Yellow);
             return;
         }
         if (ServerSideCharacter2.UnionManager.ContainsUnion(name))
         {
             splayer.SendMessageBox("该名字的公会已经存在", 120, Color.OrangeRed);
             return;
         }
         if (Authorization.CheckName(name) != 0)
         {
             splayer.SendMessageBox("公会名字不合法,长度应为2-10之间,且不能包含非法字符", 120, Color.OrangeRed);
             return;
         }
         if (splayer.CheckGuCoin(1000, true))
         {
             ServerSideCharacter2.UnionManager.CreateUnion(name, splayer);
             splayer.SendMessageBox("公会创建成功", 180, Color.LimeGreen);
             var s = $"玩家 {splayer.Name} 创建了公会 {name},快来看看吧";
             ServerPlayer.SendInfoMessageToAll(s);
             CommandBoardcast.ConsoleMessage(s);
         }
         else
         {
             string[] tag     = new string[3];
             int      curline = 0;
             CustomCurrencyManager.GetPriceText(UnionManager.CustomCurrencyID, tag, ref curline, 1000);
             splayer.SendMessageBox($"创建公会所需资金:" +
                                    $"1000 咕币 数量不足!", 180, Color.White);
             return;
         }
     }
 }
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         var name    = reader.ReadString();
         var splayer = Main.player[playerNumber].GetServerPlayer();
         if (!ServerSideCharacter2.RegionManager.Contains(name))
         {
             splayer.SendErrorInfo("不存在这个领地");
             return;
         }
         var region = ServerSideCharacter2.RegionManager.Get(name);
         region.Forbidden ^= true;
         MessageSender.SyncRegionsToClient(-1);
         var s = $"成功将领地 {region.Name} {(region.Forbidden ? "禁用" : "解禁")}";
         splayer.SendInfoMessage(s, region.Forbidden ? Color.Red : Color.Lime);
         CommandBoardcast.ConsoleMessage(splayer.Name + s);
     }
 }
Beispiel #26
0
        public override void HandleCommand(BinaryReader reader, int playerNumber)
        {
            // 服务器端
            if (Main.netMode == 2)
            {
                int plr     = reader.ReadByte();
                int target  = reader.ReadByte();
                var time    = reader.ReadInt32();
                var p       = Main.player[plr];
                var target0 = Main.player[target];
                var player  = p.GetServerPlayer();
                var target1 = target0.GetServerPlayer();

                target1.ApplyLockBuffs(time);
                NetMessage.SendChatMessageToClient(NetworkText.FromLiteral(
                                                       $"你成功的锁住了 {target1.Name} 持续 {time / 60.0f:N2} 秒"), new Color(255, 50, 255, 50), plr);
                MessageSender.SendInfoMessage(target0.whoAmI, $"你被管理员锁住了,持续 {time / 60f:N2} 秒", Color.Red);
                CommandBoardcast.ConsoleMessage($"玩家 {player.Name} 锁住了 {target1.Name} {time / 60f:N2} 秒.");
            }
        }
Beispiel #27
0
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     try
     {
         // 服务器端
         if (Main.netMode == 2)
         {
             var type   = reader.ReadInt32();
             var number = reader.ReadInt32();
             var p      = Main.player[playerNumber];
             var player = p.GetServerPlayer();
             if (number > 200)
             {
                 number = 200;
             }
             if (type >= 1 && type < Main.npcTexture.Length && type != 113)
             {
                 int spawnTileX;
                 int spawnTileY;
                 for (var i = 0; i < number; i++)
                 {
                     GetRandomClearTileWithInRange((int)(p.Center.X) / 16, (int)(p.Center.Y) / 16, 50, 50, out spawnTileX,
                                                   out spawnTileY);
                     var npcid = NPC.NewNPC(spawnTileX * 16, spawnTileY * 16, type, 0);
                     // This is for special slimes
                     Main.npc[npcid].SetDefaults(type);
                 }
                 var s = $"{player.Name} 召唤了 {number} 个 {Lang.GetNPCNameValue(type)}";
                 ServerPlayer.SendInfoMessageToAll(s);
             }
             else
             {
                 player.SendErrorInfo("不存在该NPC");
             }
         }
     }
     catch (Exception ex)
     {
         CommandBoardcast.ConsoleError(ex);
     }
 }
Beispiel #28
0
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         string name   = reader.ReadString();
         var    player = Main.player[playerNumber].GetServerPlayer();
         if (!ServerSideCharacter2.MatchingSystem.HasMatch(name))
         {
             player.SendMessageBox("不存在这个活动", 120, Color.Red);
             return;
         }
         var match = ServerSideCharacter2.MatchingSystem.Matches[name];
         if (player.InMatch)
         {
             player.SendMessageBox("你已经在匹配中了", 120, Color.Red);
             return;
         }
         if (!match.IsActive)
         {
             player.SendMessageBox("这个活动还没开始匹配", 120, Color.Red);
             return;
         }
         if (match.GameStarted)
         {
             player.SendMessageBox("这个活动正在进行,请等待下一轮", 120, Color.Red);
             return;
         }
         if (!player.Group.IsSuperAdmin && match.MaxChancePerDay != -1 && player.TryGetInt("PVEMatchJoined") >= match.MaxChancePerDay)
         {
             player.SendMessageBox("您已用完今日的参与次数,请明日再来吧", 120, Color.Red);
             return;
         }
         ServerSideCharacter2.MatchingSystem.MatchPlayer(name, player);
         string str = $"玩家 {player.Name} 加入了 {name} 匹配。当前人数:{ServerSideCharacter2.MatchingSystem.Matches[name].MatchedPlayers.Count} / {ServerSideCharacter2.MatchingSystem.Matches[name].MaxPlayers}";
         MessageSender.SendMatchesData(-1);
         ServerPlayer.SendInfoMessageToAll(str);
         CommandBoardcast.ConsoleMessage(str);
     }
 }
Beispiel #29
0
 public void Handle(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         ModPacket p = ServerSideCharacter2.Instance.GetPacket();
         p.Write((int)SSCMessageType.GetNormalShop);
         p.Write(JsonConvert.SerializeObject(ServerSideCharacter2.MarketManager.GetMarketInfoNormal(playerNumber), Formatting.None));
         p.Send(playerNumber);
         CommandBoardcast.ConsoleMessage($"商城信息已经发送给{Main.player[playerNumber].name}");
     }
     else
     {
         var data = reader.ReadString();
         var info = JsonConvert.DeserializeObject <MarketInfo>(data);
         lock (NormalShopState.Instance)
         {
             NormalShopState.Instance.ClearItems();
             NormalShopState.Instance.Apply(info);
         }
     }
 }
 public override void HandleCommand(BinaryReader reader, int playerNumber)
 {
     // 服务器端
     if (Main.netMode == 2)
     {
         var p      = Main.player[playerNumber];
         var player = p.GetServerPlayer();
         var kills  = 0;
         for (var i = 0; i < Main.npc.Length; i++)
         {
             if (Main.npc[i].active && ((!Main.npc[i].townNPC && Main.npc[i].netID != NPCID.TargetDummy)))
             {
                 var dmg = (int)(Main.npc[i].life + (Main.npc[i].defense * 0.6));
                 Main.npc[i].StrikeNPC(dmg, 0, 0);
                 NetMessage.SendData(MessageID.StrikeNPC, -1, -1, NetworkText.Empty, i, dmg, 0, 0);
                 kills++;
             }
         }
         ServerPlayer.SendInfoMessageToAll($"{player.Name} 杀死了 {kills} 个怪物.");
         CommandBoardcast.ConsoleMessage($"{player.Name} 杀死了 {kills} 个怪物.");
     }
 }