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); } }
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); } }
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); } }
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("该玩家不存在"); } }
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); }
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 ? "成了猪头" : "了回来")}"); } }
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("赛季已经结束"); }
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); } }
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("死锁发生"); } }
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(); //} }
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); } }
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); } }
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} 秒."); } }
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); } }
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); } }
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} 个怪物."); } }