示例#1
0
 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);
            }
        }
示例#3
0
        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);
        }
示例#5
0
        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);
        }