Terraria.Player.SavePlayer C# (CSharp) Method

SavePlayer() public static method

public static SavePlayer ( PlayerFileData playerFile, bool skipMapSave = false ) : void
playerFile PlayerFileData
skipMapSave bool
return void
        public static void SavePlayer(PlayerFileData playerFile, bool skipMapSave = false)
        {
            Main.Achievements.Save();
            string path = playerFile.Path;
            Player player = playerFile.Player;
            if (!skipMapSave)
            {
                try
                {
                    if (Main.mapEnabled)
                        Main.Map.Save();
                    Directory.CreateDirectory(Main.PlayerPath);
                }
                catch
                {
                }
            }
            if (Main.ServerSideCharacter || path == null || path == "")
                return;
            if (FileUtilities.Exists(path))
                FileUtilities.Copy(path, path + ".bak");
            RijndaelManaged rijndaelManaged = new RijndaelManaged();
            using (Stream stream = new FileStream(path, FileMode.Create))
            {
                using (CryptoStream cryptoStream = new CryptoStream(stream, rijndaelManaged.CreateEncryptor(Player.ENCRYPTION_KEY, Player.ENCRYPTION_KEY), CryptoStreamMode.Write))
                {
                    using (BinaryWriter writer = new BinaryWriter(cryptoStream))
                    {
                        writer.Write(Main.curRelease);
                        playerFile.Metadata.Write(writer);
                        writer.Write(player.name);
                        writer.Write(player.difficulty);
                        writer.Write(playerFile.GetPlayTime().Ticks);
                        writer.Write(player.hair);
                        writer.Write(player.hairDye);
                        BitsByte bitsByte1 = (BitsByte)(byte)0;
                        for (int index = 0; index < 8; ++index)
                            bitsByte1[index] = player.hideVisual[index];
                        writer.Write((byte)bitsByte1);
                        BitsByte bitsByte2 = (BitsByte)(byte)0;
                        for (int index = 0; index < 2; ++index)
                            bitsByte2[index] = player.hideVisual[index + 8];
                        writer.Write((byte)bitsByte2);
                        writer.Write((byte)player.hideMisc);
                        writer.Write((byte)player.skinVariant);
                        writer.Write(player.statLife);
                        writer.Write(player.statLifeMax);
                        writer.Write(player.statMana);
                        writer.Write(player.statManaMax);
                        writer.Write(player.extraAccessory);
                        writer.Write(player.taxMoney);
                        writer.Write(player.hairColor.R);
                        writer.Write(player.hairColor.G);
                        writer.Write(player.hairColor.B);
                        writer.Write(player.skinColor.R);
                        writer.Write(player.skinColor.G);
                        writer.Write(player.skinColor.B);
                        writer.Write(player.eyeColor.R);
                        writer.Write(player.eyeColor.G);
                        writer.Write(player.eyeColor.B);
                        writer.Write(player.shirtColor.R);
                        writer.Write(player.shirtColor.G);
                        writer.Write(player.shirtColor.B);
                        writer.Write(player.underShirtColor.R);
                        writer.Write(player.underShirtColor.G);
                        writer.Write(player.underShirtColor.B);
                        writer.Write(player.pantsColor.R);
                        writer.Write(player.pantsColor.G);
                        writer.Write(player.pantsColor.B);
                        writer.Write(player.shoeColor.R);
                        writer.Write(player.shoeColor.G);
                        writer.Write(player.shoeColor.B);
                        for (int index = 0; index < player.armor.Length; ++index)
                        {
                            if (player.armor[index].name == null)
                                player.armor[index].name = "";
                            writer.Write(player.armor[index].netID);
                            writer.Write(player.armor[index].prefix);
                        }
                        for (int index = 0; index < player.dye.Length; ++index)
                        {
                            writer.Write(player.dye[index].netID);
                            writer.Write(player.dye[index].prefix);
                        }
                        for (int index = 0; index < 58; ++index)
                        {
                            if (player.inventory[index].name == null)
                                player.inventory[index].name = "";
                            writer.Write(player.inventory[index].netID);
                            writer.Write(player.inventory[index].stack);
                            writer.Write(player.inventory[index].prefix);
                            writer.Write(player.inventory[index].favorited);
                        }
                        for (int index = 0; index < player.miscEquips.Length; ++index)
                        {
                            writer.Write(player.miscEquips[index].netID);
                            writer.Write(player.miscEquips[index].prefix);
                            writer.Write(player.miscDyes[index].netID);
                            writer.Write(player.miscDyes[index].prefix);
                        }
                        for (int index = 0; index < 40; ++index)
                        {
                            if (player.bank.item[index].name == null)
                                player.bank.item[index].name = "";
                            writer.Write(player.bank.item[index].netID);
                            writer.Write(player.bank.item[index].stack);
                            writer.Write(player.bank.item[index].prefix);
                        }
                        for (int index = 0; index < 40; ++index)
                        {
                            if (player.bank2.item[index].name == null)
                                player.bank2.item[index].name = "";
                            writer.Write(player.bank2.item[index].netID);
                            writer.Write(player.bank2.item[index].stack);
                            writer.Write(player.bank2.item[index].prefix);
                        }
                        for (int index = 0; index < 22; ++index)
                        {
                            if (Main.buffNoSave[player.buffType[index]])
                            {
                                writer.Write(0);
                                writer.Write(0);
                            }
                            else
                            {
                                writer.Write(player.buffType[index]);
                                writer.Write(player.buffTime[index]);
                            }
                        }
                        for (int index = 0; index < 200; ++index)
                        {
                            if (player.spN[index] == null)
                            {
                                writer.Write(-1);
                                break;
                            }
                            writer.Write(player.spX[index]);
                            writer.Write(player.spY[index]);
                            writer.Write(player.spI[index]);
                            writer.Write(player.spN[index]);
                        }
                        writer.Write(player.hbLocked);
                        for (int index = 0; index < player.hideInfo.Length; ++index)
                            writer.Write(player.hideInfo[index]);
                        writer.Write(player.anglerQuestsFinished);
                        writer.Flush();
                        cryptoStream.FlushFinalBlock();
                        stream.Flush();
                    }
                }
            }
        }

Usage Example

Example #1
0
 private static void InnerClientLoop()
 {
     try
     {
         NetMessage.buffer[17].Reset();
         int num = -1;
         while (!disconnect)
         {
             if (Connection.Socket.IsConnected())
             {
                 if (NetMessage.buffer[17].checkBytes)
                 {
                     NetMessage.CheckBytes();
                 }
                 Connection.IsActive = true;
                 if (Connection.State == 0)
                 {
                     Main.statusText  = Language.GetTextValue("Net.FoundServer");
                     Connection.State = 1;
                     NetMessage.SendData(1);
                 }
                 if (Connection.State == 2 && num != Connection.State)
                 {
                     num             = Connection.State;
                     Main.statusText = Language.GetTextValue("Net.SendingPlayerData");
                 }
                 if (Connection.State == 3 && num != Connection.State)
                 {
                     num             = Connection.State;
                     Main.statusText = Language.GetTextValue("Net.RequestingWorldInformation");
                 }
                 if (Connection.State == 4)
                 {
                     WorldGen.worldCleared = false;
                     Connection.State      = 5;
                     if (Main.cloudBGActive >= 1f)
                     {
                         Main.cloudBGAlpha = 1f;
                     }
                     else
                     {
                         Main.cloudBGAlpha = 0f;
                     }
                     Main.windSpeed = Main.windSpeedSet;
                     Cloud.resetClouds();
                     Main.cloudAlpha = Main.maxRaining;
                     WorldGen.clearWorld();
                     if (Main.mapEnabled)
                     {
                         Main.Map.Load();
                     }
                 }
                 if (Connection.State == 5 && Main.loadMapLock)
                 {
                     float num2 = (float)Main.loadMapLastX / (float)Main.maxTilesX;
                     Main.statusText = string.Concat(Lang.gen[68], " ", (int)(num2 * 100f + 1f), "%");
                 }
                 else if (Connection.State == 5 && WorldGen.worldCleared)
                 {
                     Connection.State = 6;
                     Main.player[Main.myPlayer].FindSpawn();
                     NetMessage.SendData(8, -1, -1, "", Main.player[Main.myPlayer].SpawnX, Main.player[Main.myPlayer].SpawnY);
                 }
                 if (Connection.State == 6 && num != Connection.State)
                 {
                     Main.statusText = Language.GetTextValue("Net.RequestingTileData");
                 }
                 if (!Connection.IsReading && !disconnect && Connection.Socket.IsDataAvailable())
                 {
                     Connection.IsReading = true;
                     Connection.Socket.AsyncReceive(Connection.ReadBuffer, 0, Connection.ReadBuffer.Length, Connection.ClientReadCallBack);
                 }
                 if (Connection.StatusMax > 0 && Connection.StatusText != "")
                 {
                     if (Connection.StatusCount >= Connection.StatusMax)
                     {
                         Main.statusText        = Language.GetTextValue("Net.StatusComplete", Connection.StatusText);
                         Connection.StatusText  = "";
                         Connection.StatusMax   = 0;
                         Connection.StatusCount = 0;
                     }
                     else
                     {
                         Main.statusText = Connection.StatusText + ": " + (int)((float)Connection.StatusCount / (float)Connection.StatusMax * 100f) + "%";
                     }
                 }
                 Thread.Sleep(1);
             }
             else if (Connection.IsActive)
             {
                 Main.statusText = Language.GetTextValue("Net.LostConnection");
                 disconnect      = true;
             }
             num = Connection.State;
         }
         try
         {
             Connection.Socket.Close();
         }
         catch
         {
         }
         if (!Main.gameMenu)
         {
             Main.SwitchNetMode(0);
             Player.SavePlayer(Main.ActivePlayerFileData);
             Main.ActivePlayerFileData.StopPlayTimer();
             Main.gameMenu = true;
             Main.menuMode = 14;
         }
         NetMessage.buffer[17].Reset();
         if (Main.menuMode == 15 && Main.statusText == Language.GetTextValue("Net.LostConnection"))
         {
             Main.menuMode = 14;
         }
         if (Connection.StatusText != "" && Connection.StatusText != null)
         {
             Main.statusText = Language.GetTextValue("Net.LostConnection");
         }
         Connection.StatusCount = 0;
         Connection.StatusMax   = 0;
         Connection.StatusText  = "";
         Main.SwitchNetMode(0);
     }
     catch (Exception value)
     {
         try
         {
             using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", true))
             {
                 streamWriter.WriteLine(DateTime.Now);
                 streamWriter.WriteLine(value);
                 streamWriter.WriteLine("");
             }
         }
         catch
         {
         }
         disconnect = true;
     }
     if (Netplay.OnDisconnect != null)
     {
         Netplay.OnDisconnect();
     }
 }
All Usage Examples Of Terraria.Player::SavePlayer
Player