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 void ExtractPlayersData() { try { if (!File.Exists(FileName)) { CommandBoardcast.ConsoleMessage(GameLanguage.GetText("creatingPlayerDoc")); ServerSideCharacter2.PlayerCollection = new PlayerCollection(); SavePlayersData(); return; } CommandBoardcast.ConsoleMessage(GameLanguage.GetText("readingPlayerDoc")); string data; using (var reader = new StreamReader(FileName, Encoding.UTF8)) { data = reader.ReadToEnd(); } var dict = JsonConvert.DeserializeObject <ServerPlayerInfo>(data); if (dict.Playerdata.Count > 0) { foreach (var player in dict.Playerdata) { var p = new ServerPlayer(); p.SetPlayerInfo(player.Value); p.LoadFromInfo(); ServerSideCharacter2.PlayerCollection.Add(p); } ServerSideCharacter2.PlayerCollection.SetID(dict.CurrentID); } CommandBoardcast.ConsoleMessage(GameLanguage.GetText("FinishReadPlayerDoc")); CommandBoardcast.ConsoleMessage($"共计 {ServerSideCharacter2.PlayerCollection.Count} 名玩家的存档"); } catch (Exception ex) { CommandBoardcast.ConsoleError(ex); } }
public void Load() { try { if (!File.Exists(FILENAME)) { CommandBoardcast.ConsoleMessage(GameLanguage.GetText("creatingMailsData")); MailsData mailsData = new MailsData(); mailsData.SaveTo(FILENAME); return; } CommandBoardcast.ConsoleMessage(GameLanguage.GetText("readingMailsData")); string data; using (var reader = new StreamReader(FILENAME, Encoding.UTF8)) { data = reader.ReadToEnd(); } var list = JsonConvert.DeserializeObject <MailsData>(data); MainCurrentID = list.MainCurrentID; foreach (var mail in list.Mails) { MailList.Add(mail.MailHead.MailID, mail); var player = ServerSideCharacter2.PlayerCollection.Get(mail.MailHead.Recevier); player?.MailList.Add(mail); } foreach (var pair in ServerSideCharacter2.PlayerCollection) { pair.Value.MailList.Sort(); } CommandBoardcast.ConsoleMessage(GameLanguage.GetText("finishReadPlayerDoc")); } catch (Exception ex) { CommandBoardcast.ConsoleError(ex); } }
protected override void Initialize(UIAdvPanel WindowPanel) { WindowPanel.MainTexture = ServerSideCharacter2.ModTexturesTable["AdvInvBack1"]; WindowPanel.Left.Set(Main.screenWidth / 2 - WINDOW_WIDTH / 2, 0f); WindowPanel.Top.Set(Main.screenHeight / 2 - WINDOW_HEIGHT / 2, 0f); WindowPanel.Width.Set(WINDOW_WIDTH, 0f); WindowPanel.Height.Set(WINDOW_HEIGHT, 0f); WindowPanel.Color = Color.White * 0.8f; outerContentPanel = new UIAdvPanel(ServerSideCharacter2.ModTexturesTable["Box"]) { CornerSize = new Vector2(8, 8), Color = new Color(33, 43, 79) * 0.8f }; outerContentPanel.Top.Set(-UNIONLIST_HEIGHT / 2 + UNIONLIST_OFFSET_TOP, 0.5f); outerContentPanel.Left.Set(-UNIONLIST_WIDTH / 2 + UNIONLIST_OFFSET_RIGHT, 0.5f); outerContentPanel.Width.Set(UNIONLIST_WIDTH, 0f); outerContentPanel.Height.Set(UNIONLIST_HEIGHT + ITEMSLOT_HEIGHT, 0f); outerContentPanel.SetPadding(10f); WindowPanel.Append(outerContentPanel); mailContentPanel = new UIAdvPanel(ServerSideCharacter2.ModTexturesTable["Box"]) { CornerSize = new Vector2(8, 8), OverflowHidden = true, Color = new Color(33, 43, 79) * 0.8f }; mailContentPanel.Top.Set(-UNIONLIST_HEIGHT / 2 + UNIONLIST_OFFSET_TOP, 0.5f); mailContentPanel.Left.Set(-UNIONLIST_WIDTH / 2 + UNIONLIST_OFFSET_RIGHT, 0.5f); mailContentPanel.Width.Set(UNIONLIST_WIDTH, 0f); mailContentPanel.Height.Set(UNIONLIST_HEIGHT, 0f); mailContentPanel.SetPadding(10f); mailContentPanel.Visible = false; WindowPanel.Append(mailContentPanel); _mailContent = new UIMessageBox(GameLanguage.GetText("rankannouncement")); _mailContent.Width.Set(-25f, 1f); _mailContent.Height.Set(0f, 1f); mailContentPanel.Append(_mailContent); UIAdvScrollBar uiscrollbar = new UIAdvScrollBar(); uiscrollbar.SetView(100f, 1000f); uiscrollbar.Height.Set(-20f, 1f); uiscrollbar.VAlign = 0.5f; uiscrollbar.HAlign = 1f; mailContentPanel.Append(uiscrollbar); _mailContent.SetScrollbar(uiscrollbar); AddItemSlots(); // 上方标题 _uiTitle = new UIText("标题", 0.6f, true); _uiTitle.Top.Set(-70f, 0f); _uiTitle.SetPadding(15f); outerContentPanel.Append(_uiTitle); mailHeadPanel = new UIAdvPanel(ServerSideCharacter2.ModTexturesTable["Box"]) { CornerSize = new Vector2(8, 8), OverflowHidden = true, Color = new Color(33, 43, 79) * 0.8f }; mailHeadPanel.Top.Set(-UNIONLIST_HEIGHT / 2 + UNIONLIST_OFFSET_TOP, 0.5f); mailHeadPanel.Left.Set(-UNIONLIST_WIDTH / 2 + UNIONLIST_OFFSET_RIGHT - 260, 0.5f); mailHeadPanel.Width.Set(240, 0f); mailHeadPanel.Height.Set(UNIONLIST_HEIGHT + ITEMSLOT_HEIGHT, 0f); mailHeadPanel.SetPadding(10f); WindowPanel.Append(mailHeadPanel); _mailList = new UIAdvList(); _mailList.Width.Set(-25f, 1f); _mailList.Height.Set(0f, 1f); _mailList.ListPadding = 5f; mailHeadPanel.Append(_mailList); // ScrollBar设定 var uiscrollbar2 = new UIAdvScrollBar(); uiscrollbar2.SetView(100f, 1000f); uiscrollbar2.Height.Set(0f, 1f); uiscrollbar2.HAlign = 1f; mailHeadPanel.Append(uiscrollbar2); _mailList.SetScrollbar(uiscrollbar2); refreshButton = new UICDButton(ServerSideCharacter2.ModTexturesTable["Refresh"], false); refreshButton.Top.Set(-UNIONLIST_HEIGHT / 2 + UNIONLIST_OFFSET_TOP - 50, 0.5f); refreshButton.Left.Set(UNIONLIST_OFFSET_RIGHT + UNIONLIST_WIDTH / 2 - 35, 0.5f); refreshButton.Width.Set(35, 0f); refreshButton.Height.Set(35, 0f); refreshButton.ButtonDefaultColor = new Color(200, 200, 200); refreshButton.ButtonChangeColor = Color.White; refreshButton.UseRotation = true; refreshButton.TextureScale = 0.2f; refreshButton.Tooltip = "刷新"; refreshButton.OnClick += RefreshButton_OnClick; WindowPanel.Append(refreshButton); }
protected override void Initialize(UIAdvPanel WindowPanel) { WindowPanel.MainTexture = ServerSideCharacter2.ModTexturesTable["AdvInvBack1"]; WindowPanel.Left.Set(Main.screenWidth / 2 - WINDOW_WIDTH / 2, 0f); WindowPanel.Top.Set(Main.screenHeight / 2 - WINDOW_HEIGHT / 2, 0f); WindowPanel.Width.Set(WINDOW_WIDTH, 0f); WindowPanel.Height.Set(WINDOW_HEIGHT, 0f); WindowPanel.Color = Color.White * 0.8f; _onlinePlayerPanel = new UIAdvPanel(ServerSideCharacter2.ModTexturesTable["Box"]) { CornerSize = new Vector2(8, 8), OverflowHidden = true }; _onlinePlayerPanel.Top.Set(-FRIENDLIST_HEIGHT / 2 + FRIENDLIST_OFFSET_TOP, 0.5f); _onlinePlayerPanel.Left.Set(-FRIENDLIST_WIDTH / 2 + FRIENDLIST_OFFSET_RIGHT, 0.5f); _onlinePlayerPanel.Width.Set(FRIENDLIST_WIDTH, 0f); _onlinePlayerPanel.Height.Set(FRIENDLIST_HEIGHT, 0f); _onlinePlayerPanel.SetPadding(10f); onlinelabel = new UIText("排位积分榜(每天更新)"); onlinelabel.Top.Set(-FRIENDLIST_HEIGHT / 2 + FRIENDLIST_OFFSET_TOP - 25f, 0.5f); var texSize = Main.fontMouseText.MeasureString(onlinelabel.Text); onlinelabel.Left.Set(-FRIENDLIST_WIDTH / 2 + FRIENDLIST_OFFSET_RIGHT, 0.5f); WindowPanel.Append(onlinelabel); WindowPanel.Append(_onlinePlayerPanel); refreshButton = new UIButton(ServerSideCharacter2.ModTexturesTable["Refresh"], false); refreshButton.Top.Set(55, 0f); refreshButton.Left.Set(-35 / 2 - 65, 1f); refreshButton.Width.Set(35, 0f); refreshButton.Height.Set(35, 0f); refreshButton.OnClick += RefreshButton_OnClick; refreshButton.ButtonDefaultColor = new Color(200, 200, 200); refreshButton.ButtonChangeColor = Color.White; refreshButton.UseRotation = true; refreshButton.TextureScale = 0.2f; refreshButton.Tooltip = "刷新"; WindowPanel.Append(refreshButton); _onlinePlayerList = new UIAdvList(); _onlinePlayerList.Width.Set(-25f, 1f); _onlinePlayerList.Height.Set(0f, 1f); _onlinePlayerList.ListPadding = 5f; _onlinePlayerList.OverflowHidden = true; _onlinePlayerPanel.Append(_onlinePlayerList); // ScrollBar设定 var uiscrollbar = new UIAdvScrollBar(); // uiscrollbar.SetView(100f, 1000f); uiscrollbar.Height.Set(0f, 1f); uiscrollbar.HAlign = 1f; _onlinePlayerPanel.Append(uiscrollbar); _onlinePlayerList.SetScrollbar(uiscrollbar); distanceToEnd = new UIText("00:00:00", 0.6f, true); distanceToEnd.Top.Set(20f, 0f); distanceToEnd.Left.Set(20f, 0f); WindowPanel.Append(distanceToEnd); UIAdvPanel infoPanel = new UIAdvPanel(); infoPanel.Top.Set(-FRIENDLIST_HEIGHT / 2 + FRIENDLIST_OFFSET_TOP, 0.5f); infoPanel.Left.Set(440, 0f); infoPanel.Width.Set(200, 0f); infoPanel.Height.Set(FRIENDLIST_HEIGHT, 0f); WindowPanel.Append(infoPanel); var announcement = new UIMessageBox(GameLanguage.GetText("rankannouncement")); announcement.Width.Set(-25f, 1f); announcement.Height.Set(0f, 1f); infoPanel.Append(announcement); var uiscrollbar2 = new UIAdvScrollBar(); uiscrollbar2.SetView(100f, 1000f); uiscrollbar2.Height.Set(-20f, 1f); uiscrollbar2.VAlign = 0.5f; uiscrollbar2.HAlign = 1f; infoPanel.Append(uiscrollbar2); announcement.SetScrollbar(uiscrollbar2); }
private static void SyncOnePlayer(int plr, int toWho, int fromWho) { var active = 0; if (Main.player[plr].active) { active = 1; } if (Netplay.Clients[plr].State == 10) { var name = Main.player[plr].name; var player = ServerSideCharacter2.PlayerCollection.Get(name); player.SetID(plr); player.ApplyToPlayer(); NetMessage.SendData(MessageID.PlayerActive, toWho, fromWho, null, plr, active, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.SyncPlayer, toWho, fromWho, null, plr, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.PlayerControls, toWho, fromWho, null, plr, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.PlayerHealth, toWho, fromWho, null, plr); NetMessage.SendData(MessageID.PlayerPvP, toWho, fromWho, null, plr, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.PlayerTeam, toWho, fromWho, null, plr, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.PlayerMana, toWho, fromWho, null, plr); NetMessage.SendData(MessageID.PlayerBuffs, toWho, fromWho, null, plr, 0f, 0f, 0f, 0, 0, 0); if (toWho == -1) { player.IsLogin = false; player.ClearAllBuffs(); player.Lock(); player.SyncUnionInfo(); player.SendMailList(); MessageSender.SendWelcomeMessage(plr, player.HasPassword ? GameLanguage.GetText("welcomeold") : GameLanguage.GetText("welcomenew")); MessageSender.SyncRegionsToClient(plr); if (!player.InRegion || player.CurrentRegion.PVP == JsonData.PVPMode.Normal) { if (ServerSideCharacter2.Config.PvpMode == JsonData.PVPMode.Always) { player.PrototypePlayer.hostile = true; NetMessage.SendData(MessageID.PlayerPvP, -1, -1, NetworkText.FromLiteral(""), player.PrototypePlayer.whoAmI); } } } Main.player[plr].trashItem = new Item(); for (var i = 0; i < 59; i++) { NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, NetworkText.FromLiteral(Main.player[plr].inventory[i].Name), plr, i, Main.player[plr].inventory[i].prefix, 0f, 0, 0, 0); } for (var j = 0; j < Main.player[plr].armor.Length; j++) { NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, NetworkText.FromLiteral(Main.player[plr].armor[j].Name), plr, (59 + j), Main.player[plr].armor[j].prefix, 0f, 0, 0, 0); } for (var k = 0; k < Main.player[plr].dye.Length; k++) { NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, NetworkText.FromLiteral(Main.player[plr].dye[k].Name), plr, (58 + Main.player[plr].armor.Length + 1 + k), Main.player[plr].dye[k].prefix, 0f, 0, 0, 0); } for (var l = 0; l < Main.player[plr].miscEquips.Length; l++) { NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, NetworkText.Empty, plr, 58 + Main.player[plr].armor.Length + Main.player[plr].dye.Length + 1 + l, Main.player[plr].miscEquips[l].prefix, 0f, 0, 0, 0); } for (var m = 0; m < Main.player[plr].miscDyes.Length; m++) { NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, NetworkText.Empty, plr, 58 + Main.player[plr].armor.Length + Main.player[plr].dye.Length + Main.player[plr].miscEquips.Length + 1 + m, Main.player[plr].miscDyes[m].prefix, 0f, 0, 0, 0); } for (var i = 0; i < Main.player[plr].bank.item.Length; i++) { NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, null, plr, 58 + Main.player[plr].armor.Length + Main.player[plr].dye.Length + Main.player[plr].miscEquips.Length + Main.player[plr].miscDyes.Length + 1 + i, Main.player[plr].bank.item[i].prefix, 0f, 0, 0, 0); } for (var i = 0; i < Main.player[plr].bank2.item.Length; i++) { NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, null, plr, 58 + Main.player[plr].armor.Length + Main.player[plr].dye.Length + Main.player[plr].miscEquips.Length + Main.player[plr].miscDyes.Length + Main.player[plr].bank.item.Length + 1 + i, Main.player[plr].bank2.item[i].prefix, 0f, 0, 0, 0); } NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, null, plr, 58 + Main.player[plr].armor.Length + Main.player[plr].dye.Length + Main.player[plr].miscEquips.Length + Main.player[plr].bank.item.Length + Main.player[plr].bank2.item.Length + 1, Main.player[plr].trashItem.prefix); for (var i = 0; i < Main.player[plr].bank3.item.Length; i++) { NetMessage.SendData(MessageID.SyncEquipment, toWho, fromWho, null, plr, 58 + Main.player[plr].armor.Length + Main.player[plr].dye.Length + Main.player[plr].miscEquips.Length + Main.player[plr].bank.item.Length + Main.player[plr].bank2.item.Length + 2 + i, Main.player[plr].bank2.item[i].prefix, 0f, 0, 0, 0); } PlayerHooks.SyncPlayer(Main.player[plr], toWho, fromWho, false); if (!Netplay.Clients[plr].IsAnnouncementCompleted) { Netplay.Clients[plr].IsAnnouncementCompleted = true; if (Main.dedServ) { Console.WriteLine(Main.player[plr].name + GameLanguage.GetText("entergame")); } } } else { active = 0; NetMessage.SendData(MessageID.PlayerActive, -1, plr, NetworkText.Empty, plr, active, 0f, 0f, 0, 0, 0); if (Netplay.Clients[plr].IsAnnouncementCompleted) { Netplay.Clients[plr].IsAnnouncementCompleted = false; NetMessage.BroadcastChatMessage(NetworkText.FromLiteral(Netplay.Clients[plr].Name + GameLanguage.GetText("leavegame")), new Color(255, 255, 240, 20), plr); if (Main.dedServ) { Console.WriteLine(Netplay.Clients[plr].Name + GameLanguage.GetText("leavegame")); } Netplay.Clients[plr].Name = "Anonymous"; } } }
private bool PlayerSpawn(ref BinaryReader reader, int playerNumber) { int id = reader.ReadByte(); if (Main.netMode == 2) { id = playerNumber; } var player = Main.player[id]; player.SpawnX = reader.ReadInt16(); player.SpawnY = reader.ReadInt16(); player.Spawn(); if (id == Main.myPlayer && Main.netMode != 2) { Main.ActivePlayerFileData.StartPlayTimer(); Player.Hooks.EnterWorld(Main.myPlayer); } if (Main.netMode != 2 || Netplay.Clients[playerNumber].State < 3) { return(true); } if (ServerSideCharacter2.Config.MediumcoreOnly && player.difficulty < 1) { NetMessage.SendData(2, id, -1, NetworkText.FromLiteral("你必须使用中核难度的人物"), 0, 0f, 0f, 0f, 0, 0, 0); return(true); } else if (!ServerSideCharacter2.Config.MediumcoreOnly && player.difficulty >= 1) { NetMessage.SendData(2, id, -1, NetworkText.FromLiteral("请不要使用中核难度的人物"), 0, 0f, 0f, 0f, 0, 0, 0); return(true); } //如果数据中没有玩家的信息 if (!ServerSideCharacter2.PlayerCollection.ContainsKey(Main.player[playerNumber].name)) { try { newflag = true; CommandBoardcast.ConsoleMessage(string.Format(GameLanguage.GetText("newPlayer"), Main.player[playerNumber].name)); ServerSideCharacter2.PlayerCollection.AddNewPlayer(Main.player[playerNumber]); } catch (Exception ex) { CommandBoardcast.ConsoleError(ex); } } else { CommandBoardcast.ConsoleMessage(string.Format(GameLanguage.GetText("recognizedPlayer"), Main.player[playerNumber].name)); } if (Netplay.Clients[playerNumber].State == 3) { Netplay.Clients[playerNumber].State = 10; NetMessage.greetPlayer(playerNumber); NetMessage.buffer[playerNumber].broadcast = true; MessageSender.SendRSAPublic(); SyncConnectedPlayer(playerNumber); NetMessage.SendData(MessageID.SpawnPlayer, -1, playerNumber, NetworkText.Empty, playerNumber, 0f, 0f, 0f, 0, 0, 0); NetMessage.SendData(MessageID.AnglerQuest, playerNumber, -1, NetworkText.FromLiteral(Main.player[playerNumber].name), Main.anglerQuest, 0f, 0f, 0f, 0, 0, 0); return(true); } NetMessage.SendData(MessageID.SpawnPlayer, -1, playerNumber, NetworkText.Empty, playerNumber, 0f, 0f, 0f, 0, 0, 0); return(true); }