Terraria.Player.LoadPlayer C# (CSharp) Method

LoadPlayer() public static method

public static LoadPlayer ( string playerPath, bool cloudSave ) : PlayerFileData
playerPath string
cloudSave bool
return PlayerFileData
        public static PlayerFileData LoadPlayer(string playerPath, bool cloudSave)
        {
            PlayerFileData playerFileData = new PlayerFileData(playerPath);
            if (Main.rand == null)
                Main.rand = new Random((int)DateTime.Now.Ticks);
            Player player1 = new Player();
            try
            {
                RijndaelManaged rijndaelManaged = new RijndaelManaged();
                rijndaelManaged.Padding = PaddingMode.None;
                using (MemoryStream memoryStream = new MemoryStream(FileUtilities.ReadAllBytes(playerPath)))
                {
                    using (CryptoStream cryptoStream = new CryptoStream((Stream)memoryStream, rijndaelManaged.CreateDecryptor(Player.ENCRYPTION_KEY, Player.ENCRYPTION_KEY), CryptoStreamMode.Read))
                    {
                        using (BinaryReader binaryReader = new BinaryReader((Stream)cryptoStream))
                        {
                            int release = binaryReader.ReadInt32();
                            if (release >= 135)
                                playerFileData.Metadata = FileMetadata.Read(binaryReader, FileType.Player);
                            else
                                playerFileData.Metadata = FileMetadata.FromCurrentSettings(FileType.Player);
                            if (release > Main.curRelease)
                            {
                                player1.loadStatus = 1;
                                player1.name = binaryReader.ReadString();
                                playerFileData.Player = player1;
                                return playerFileData;
                            }
                            player1.name = binaryReader.ReadString();
                            if (release >= 10)
                            {
                                if (release >= 17)
                                    player1.difficulty = binaryReader.ReadByte();
                                else if (binaryReader.ReadBoolean())
                                    player1.difficulty = (byte)2;
                            }
                            if (release >= 138)
                                playerFileData.SetPlayTime(new TimeSpan(binaryReader.ReadInt64()));
                            else
                                playerFileData.SetPlayTime(TimeSpan.Zero);
                            player1.hair = binaryReader.ReadInt32();
                            if (release >= 82)
                                player1.hairDye = binaryReader.ReadByte();
                            if (release >= 124)
                            {
                                BitsByte bitsByte = (BitsByte)binaryReader.ReadByte();
                                for (int index = 0; index < 8; ++index)
                                    player1.hideVisual[index] = bitsByte[index];
                                bitsByte = (BitsByte)binaryReader.ReadByte();
                                for (int index = 0; index < 2; ++index)
                                    player1.hideVisual[index + 8] = bitsByte[index];
                            }
                            else if (release >= 83)
                            {
                                BitsByte bitsByte = (BitsByte)binaryReader.ReadByte();
                                for (int index = 0; index < 8; ++index)
                                    player1.hideVisual[index] = bitsByte[index];
                            }
                            if (release >= 119)
                                player1.hideMisc = (BitsByte)binaryReader.ReadByte();
                            if (release <= 17)
                                player1.Male = player1.hair != 5 && player1.hair != 6 && (player1.hair != 9 && player1.hair != 11);
                            else if (release < 107)
                                player1.Male = binaryReader.ReadBoolean();
                            else
                                player1.skinVariant = (int)binaryReader.ReadByte();
                            player1.statLife = binaryReader.ReadInt32();
                            player1.statLifeMax = binaryReader.ReadInt32();
                            if (player1.statLifeMax > 500)
                                player1.statLifeMax = 500;
                            player1.statMana = binaryReader.ReadInt32();
                            player1.statManaMax = binaryReader.ReadInt32();
                            if (player1.statManaMax > 200)
                                player1.statManaMax = 200;
                            if (player1.statMana > 400)
                                player1.statMana = 400;
                            if (release >= 125)
                                player1.extraAccessory = binaryReader.ReadBoolean();
                            if (release >= 128)
                                player1.taxMoney = binaryReader.ReadInt32();
                            player1.hairColor = Utils.ReadRGB(binaryReader);
                            player1.skinColor = Utils.ReadRGB(binaryReader);
                            player1.eyeColor = Utils.ReadRGB(binaryReader);
                            player1.shirtColor = Utils.ReadRGB(binaryReader);
                            player1.underShirtColor = Utils.ReadRGB(binaryReader);
                            player1.pantsColor = Utils.ReadRGB(binaryReader);
                            player1.shoeColor = Utils.ReadRGB(binaryReader);
                            Main.player[Main.myPlayer].shirtColor = player1.shirtColor;
                            Main.player[Main.myPlayer].pantsColor = player1.pantsColor;
                            Main.player[Main.myPlayer].hairColor = player1.hairColor;
                            if (release >= 38)
                            {
                                if (release < 124)
                                {
                                    int num = 11;
                                    if (release >= 81)
                                        num = 16;
                                    for (int index1 = 0; index1 < num; ++index1)
                                    {
                                        int index2 = index1;
                                        if (index2 >= 8)
                                            index2 += 2;
                                        player1.armor[index2].netDefaults(binaryReader.ReadInt32());
                                        player1.armor[index2].Prefix((int)binaryReader.ReadByte());
                                    }
                                }
                                else
                                {
                                    int num = 20;
                                    for (int index = 0; index < num; ++index)
                                    {
                                        player1.armor[index].netDefaults(binaryReader.ReadInt32());
                                        player1.armor[index].Prefix((int)binaryReader.ReadByte());
                                    }
                                }
                                if (release >= 47)
                                {
                                    int num = 3;
                                    if (release >= 81)
                                        num = 8;
                                    if (release >= 124)
                                        num = 10;
                                    for (int index1 = 0; index1 < num; ++index1)
                                    {
                                        int index2 = index1;
                                        player1.dye[index2].netDefaults(binaryReader.ReadInt32());
                                        player1.dye[index2].Prefix((int)binaryReader.ReadByte());
                                    }
                                }
                                if (release >= 58)
                                {
                                    for (int index = 0; index < 58; ++index)
                                    {
                                        int type = binaryReader.ReadInt32();
                                        if (type >= 3601)
                                        {
                                            player1.inventory[index].netDefaults(0);
                                        }
                                        else
                                        {
                                            player1.inventory[index].netDefaults(type);
                                            player1.inventory[index].stack = binaryReader.ReadInt32();
                                            player1.inventory[index].Prefix((int)binaryReader.ReadByte());
                                            if (release >= 114)
                                                player1.inventory[index].favorited = binaryReader.ReadBoolean();
                                        }
                                    }
                                }
                                else
                                {
                                    for (int index = 0; index < 48; ++index)
                                    {
                                        int type = binaryReader.ReadInt32();
                                        if (type >= 3601)
                                        {
                                            player1.inventory[index].netDefaults(0);
                                        }
                                        else
                                        {
                                            player1.inventory[index].netDefaults(type);
                                            player1.inventory[index].stack = binaryReader.ReadInt32();
                                            player1.inventory[index].Prefix((int)binaryReader.ReadByte());
                                        }
                                    }
                                }
                                if (release >= 117)
                                {
                                    if (release < 136)
                                    {
                                        for (int index = 0; index < 5; ++index)
                                        {
                                            if (index != 1)
                                            {
                                                int type1 = binaryReader.ReadInt32();
                                                if (type1 >= 3601)
                                                {
                                                    player1.miscEquips[index].netDefaults(0);
                                                }
                                                else
                                                {
                                                    player1.miscEquips[index].netDefaults(type1);
                                                    player1.miscEquips[index].Prefix((int)binaryReader.ReadByte());
                                                }
                                                int type2 = binaryReader.ReadInt32();
                                                if (type2 >= 3601)
                                                {
                                                    player1.miscDyes[index].netDefaults(0);
                                                }
                                                else
                                                {
                                                    player1.miscDyes[index].netDefaults(type2);
                                                    player1.miscDyes[index].Prefix((int)binaryReader.ReadByte());
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        for (int index = 0; index < 5; ++index)
                                        {
                                            int type1 = binaryReader.ReadInt32();
                                            if (type1 >= 3601)
                                            {
                                                player1.miscEquips[index].netDefaults(0);
                                            }
                                            else
                                            {
                                                player1.miscEquips[index].netDefaults(type1);
                                                player1.miscEquips[index].Prefix((int)binaryReader.ReadByte());
                                            }
                                            int type2 = binaryReader.ReadInt32();
                                            if (type2 >= 3601)
                                            {
                                                player1.miscDyes[index].netDefaults(0);
                                            }
                                            else
                                            {
                                                player1.miscDyes[index].netDefaults(type2);
                                                player1.miscDyes[index].Prefix((int)binaryReader.ReadByte());
                                            }
                                        }
                                    }
                                }
                                if (release >= 58)
                                {
                                    for (int index = 0; index < 40; ++index)
                                    {
                                        player1.bank.item[index].netDefaults(binaryReader.ReadInt32());
                                        player1.bank.item[index].stack = binaryReader.ReadInt32();
                                        player1.bank.item[index].Prefix((int)binaryReader.ReadByte());
                                    }
                                    for (int index = 0; index < 40; ++index)
                                    {
                                        player1.bank2.item[index].netDefaults(binaryReader.ReadInt32());
                                        player1.bank2.item[index].stack = binaryReader.ReadInt32();
                                        player1.bank2.item[index].Prefix((int)binaryReader.ReadByte());
                                    }
                                }
                                else
                                {
                                    for (int index = 0; index < 20; ++index)
                                    {
                                        player1.bank.item[index].netDefaults(binaryReader.ReadInt32());
                                        player1.bank.item[index].stack = binaryReader.ReadInt32();
                                        player1.bank.item[index].Prefix((int)binaryReader.ReadByte());
                                    }
                                    for (int index = 0; index < 20; ++index)
                                    {
                                        player1.bank2.item[index].netDefaults(binaryReader.ReadInt32());
                                        player1.bank2.item[index].stack = binaryReader.ReadInt32();
                                        player1.bank2.item[index].Prefix((int)binaryReader.ReadByte());
                                    }
                                }
                            }
                            else
                            {
                                for (int index = 0; index < 8; ++index)
                                {
                                    player1.armor[index].SetDefaults(Item.VersionName(binaryReader.ReadString(), release));
                                    if (release >= 36)
                                        player1.armor[index].Prefix((int)binaryReader.ReadByte());
                                }
                                if (release >= 6)
                                {
                                    for (int index = 8; index < 11; ++index)
                                    {
                                        player1.armor[index].SetDefaults(Item.VersionName(binaryReader.ReadString(), release));
                                        if (release >= 36)
                                            player1.armor[index].Prefix((int)binaryReader.ReadByte());
                                    }
                                }
                                for (int index = 0; index < 44; ++index)
                                {
                                    player1.inventory[index].SetDefaults(Item.VersionName(binaryReader.ReadString(), release));
                                    player1.inventory[index].stack = binaryReader.ReadInt32();
                                    if (release >= 36)
                                        player1.inventory[index].Prefix((int)binaryReader.ReadByte());
                                }
                                if (release >= 15)
                                {
                                    for (int index = 44; index < 48; ++index)
                                    {
                                        player1.inventory[index].SetDefaults(Item.VersionName(binaryReader.ReadString(), release));
                                        player1.inventory[index].stack = binaryReader.ReadInt32();
                                        if (release >= 36)
                                            player1.inventory[index].Prefix((int)binaryReader.ReadByte());
                                    }
                                }
                                for (int index = 0; index < 20; ++index)
                                {
                                    player1.bank.item[index].SetDefaults(Item.VersionName(binaryReader.ReadString(), release));
                                    player1.bank.item[index].stack = binaryReader.ReadInt32();
                                    if (release >= 36)
                                        player1.bank.item[index].Prefix((int)binaryReader.ReadByte());
                                }
                                if (release >= 20)
                                {
                                    for (int index = 0; index < 20; ++index)
                                    {
                                        player1.bank2.item[index].SetDefaults(Item.VersionName(binaryReader.ReadString(), release));
                                        player1.bank2.item[index].stack = binaryReader.ReadInt32();
                                        if (release >= 36)
                                            player1.bank2.item[index].Prefix((int)binaryReader.ReadByte());
                                    }
                                }
                            }
                            if (release < 58)
                            {
                                for (int index = 40; index < 48; ++index)
                                {
                                    player1.inventory[index + 10] = player1.inventory[index].Clone();
                                    player1.inventory[index].SetDefaults(0, false);
                                }
                            }
                            if (release >= 11)
                            {
                                int num = 22;
                                if (release < 74)
                                    num = 10;
                                for (int index = 0; index < num; ++index)
                                {
                                    player1.buffType[index] = binaryReader.ReadInt32();
                                    player1.buffTime[index] = binaryReader.ReadInt32();
                                    if (player1.buffType[index] == 0)
                                    {
                                        --index;
                                        --num;
                                    }
                                }
                            }
                            for (int index = 0; index < 200; ++index)
                            {
                                int num = binaryReader.ReadInt32();
                                if (num != -1)
                                {
                                    player1.spX[index] = num;
                                    player1.spY[index] = binaryReader.ReadInt32();
                                    player1.spI[index] = binaryReader.ReadInt32();
                                    player1.spN[index] = binaryReader.ReadString();
                                }
                                else
                                    break;
                            }
                            if (release >= 16)
                                player1.hbLocked = binaryReader.ReadBoolean();
                            if (release >= 115)
                            {
                                int num = 13;
                                for (int index = 0; index < num; ++index)
                                    player1.hideInfo[index] = binaryReader.ReadBoolean();
                            }
                            if (release >= 98)
                                player1.anglerQuestsFinished = binaryReader.ReadInt32();
                            player1.skinVariant = (int)MathHelper.Clamp((float)player1.skinVariant, 0.0f, 7f);
                            for (int index = 3; index < 8 + player1.extraAccessorySlots; ++index)
                            {
                                int num = player1.armor[index].itemId;
                                if (num == 908)
                                    player1.lavaMax += 420;
                                if (num == 906)
                                    player1.lavaMax += 420;
                                if (player1.wingsLogic == 0 && (int)player1.armor[index].wingSlot >= 0)
                                    player1.wingsLogic = (int)player1.armor[index].wingSlot;
                                if (num == 158 || num == 396 || (num == 1250 || num == 1251) || num == 1252)
                                    player1.noFallDmg = true;
                                player1.lavaTime = player1.lavaMax;
                            }
                        }
                    }
                }
                player1.PlayerFrame();
                player1.loadStatus = 0;
                playerFileData.Player = player1;
                return playerFileData;
            }
            catch
            {
            }
            Player player2 = new Player();
            player2.loadStatus = 2;
            if (player1.name != "")
            {
                player2.name = player1.name;
            }
            else
            {
                string[] strArray = playerPath.Split(Path.DirectorySeparatorChar);
                player1.name = strArray[strArray.Length - 1].Split('.')[0];
            }
            playerFileData.Player = player2;
            return playerFileData;
        }
Player