Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ Deserialize()

static void Terraria.Player.Deserialize ( PlayerFileData data,
Player newPlayer,
BinaryReader fileIO,
int release,
out bool gotToReadName )
inlinestaticprivate

Definition at line 51587 of file Player.cs.

51588 {
51589 gotToReadName = false;
51590 newPlayer.name = fileIO.ReadString();
51591 gotToReadName = true;
51592 if (release >= 10)
51593 {
51594 if (release >= 17)
51595 {
51596 newPlayer.difficulty = fileIO.ReadByte();
51597 }
51598 else if (fileIO.ReadBoolean())
51599 {
51600 newPlayer.difficulty = 2;
51601 }
51602 }
51603 if (release >= 138)
51604 {
51605 data.SetPlayTime(new TimeSpan(fileIO.ReadInt64()));
51606 }
51607 else
51608 {
51610 }
51611 newPlayer.hair = fileIO.ReadInt32();
51612 if (release >= 82)
51613 {
51614 newPlayer.hairDye = fileIO.ReadByte();
51615 }
51616 if (release >= 124)
51617 {
51618 BitsByte bitsByte = fileIO.ReadByte();
51619 for (int i = 0; i < 8; i++)
51620 {
51621 newPlayer.hideVisibleAccessory[i] = bitsByte[i];
51622 }
51623 bitsByte = fileIO.ReadByte();
51624 for (int j = 0; j < 2; j++)
51625 {
51626 newPlayer.hideVisibleAccessory[j + 8] = bitsByte[j];
51627 }
51628 }
51629 else if (release >= 83)
51630 {
51631 BitsByte bitsByte2 = fileIO.ReadByte();
51632 for (int k = 0; k < 8; k++)
51633 {
51634 newPlayer.hideVisibleAccessory[k] = bitsByte2[k];
51635 }
51636 }
51637 if (release >= 119)
51638 {
51639 newPlayer.hideMisc = fileIO.ReadByte();
51640 }
51641 if (release <= 17)
51642 {
51643 if (newPlayer.hair == 5 || newPlayer.hair == 6 || newPlayer.hair == 9 || newPlayer.hair == 11)
51644 {
51645 newPlayer.Male = false;
51646 }
51647 else
51648 {
51649 newPlayer.Male = true;
51650 }
51651 }
51652 else if (release < 107)
51653 {
51654 newPlayer.Male = fileIO.ReadBoolean();
51655 }
51656 else
51657 {
51658 newPlayer.skinVariant = fileIO.ReadByte();
51659 }
51660 if (release < 161 && newPlayer.skinVariant == 7)
51661 {
51662 newPlayer.skinVariant = 9;
51663 }
51664 newPlayer.statLife = fileIO.ReadInt32();
51665 newPlayer.statLifeMax = fileIO.ReadInt32();
51666 if (newPlayer.statLifeMax > 500)
51667 {
51668 newPlayer.statLifeMax = 500;
51669 }
51670 newPlayer.statMana = fileIO.ReadInt32();
51671 newPlayer.statManaMax = fileIO.ReadInt32();
51672 if (newPlayer.statManaMax > 200)
51673 {
51674 newPlayer.statManaMax = 200;
51675 }
51676 if (newPlayer.statMana > 400)
51677 {
51678 newPlayer.statMana = 400;
51679 }
51680 if (release >= 125)
51681 {
51682 newPlayer.extraAccessory = fileIO.ReadBoolean();
51683 }
51684 if (release >= 229)
51685 {
51686 newPlayer.unlockedBiomeTorches = fileIO.ReadBoolean();
51687 newPlayer.UsingBiomeTorches = fileIO.ReadBoolean();
51688 if (release >= 256)
51689 {
51690 newPlayer.ateArtisanBread = fileIO.ReadBoolean();
51691 }
51692 if (release >= 260)
51693 {
51694 newPlayer.usedAegisCrystal = fileIO.ReadBoolean();
51695 newPlayer.usedAegisFruit = fileIO.ReadBoolean();
51696 newPlayer.usedArcaneCrystal = fileIO.ReadBoolean();
51697 newPlayer.usedGalaxyPearl = fileIO.ReadBoolean();
51698 newPlayer.usedGummyWorm = fileIO.ReadBoolean();
51699 newPlayer.usedAmbrosia = fileIO.ReadBoolean();
51700 }
51701 }
51702 if (release >= 182)
51703 {
51704 newPlayer.downedDD2EventAnyDifficulty = fileIO.ReadBoolean();
51705 }
51706 if (release >= 128)
51707 {
51708 newPlayer.taxMoney = fileIO.ReadInt32();
51709 }
51710 if (release >= 254)
51711 {
51712 newPlayer.numberOfDeathsPVE = fileIO.ReadInt32();
51713 }
51714 if (release >= 254)
51715 {
51716 newPlayer.numberOfDeathsPVP = fileIO.ReadInt32();
51717 }
51718 newPlayer.hairColor = fileIO.ReadRGB();
51719 newPlayer.skinColor = fileIO.ReadRGB();
51720 newPlayer.eyeColor = fileIO.ReadRGB();
51721 newPlayer.shirtColor = fileIO.ReadRGB();
51722 newPlayer.underShirtColor = fileIO.ReadRGB();
51723 newPlayer.pantsColor = fileIO.ReadRGB();
51724 newPlayer.shoeColor = fileIO.ReadRGB();
51725 Main.player[Main.myPlayer].hairColor = newPlayer.hairColor;
51726 Main.player[Main.myPlayer].skinColor = newPlayer.skinColor;
51727 Main.player[Main.myPlayer].eyeColor = newPlayer.eyeColor;
51728 Main.player[Main.myPlayer].shirtColor = newPlayer.shirtColor;
51729 Main.player[Main.myPlayer].underShirtColor = newPlayer.underShirtColor;
51730 Main.player[Main.myPlayer].pantsColor = newPlayer.pantsColor;
51731 Main.player[Main.myPlayer].shoeColor = newPlayer.shoeColor;
51732 if (release >= 38)
51733 {
51734 if (release < 124)
51735 {
51736 int num = 11;
51737 if (release >= 81)
51738 {
51739 num = 16;
51740 }
51741 for (int l = 0; l < num; l++)
51742 {
51743 int num2 = l;
51744 if (num2 >= 8)
51745 {
51746 num2 += 2;
51747 }
51748 newPlayer.armor[num2].netDefaults(fileIO.ReadInt32());
51749 newPlayer.armor[num2].Prefix(fileIO.ReadByte());
51750 }
51751 }
51752 else
51753 {
51754 int num3 = 20;
51755 for (int m = 0; m < num3; m++)
51756 {
51757 newPlayer.armor[m].netDefaults(fileIO.ReadInt32());
51758 newPlayer.armor[m].Prefix(fileIO.ReadByte());
51759 }
51760 }
51761 if (release >= 47)
51762 {
51763 int num4 = 3;
51764 if (release >= 81)
51765 {
51766 num4 = 8;
51767 }
51768 if (release >= 124)
51769 {
51770 num4 = 10;
51771 }
51772 for (int n = 0; n < num4; n++)
51773 {
51774 int num5 = n;
51775 newPlayer.dye[num5].netDefaults(fileIO.ReadInt32());
51776 newPlayer.dye[num5].Prefix(fileIO.ReadByte());
51777 }
51778 }
51779 if (release >= 58)
51780 {
51781 for (int num6 = 0; num6 < 58; num6++)
51782 {
51783 int num7 = fileIO.ReadInt32();
51784 if (num7 >= ItemID.Count)
51785 {
51786 newPlayer.inventory[num6].netDefaults(0);
51787 fileIO.ReadInt32();
51788 fileIO.ReadByte();
51789 if (release >= 114)
51790 {
51791 fileIO.ReadBoolean();
51792 }
51793 }
51794 else
51795 {
51796 newPlayer.inventory[num6].netDefaults(num7);
51797 newPlayer.inventory[num6].stack = fileIO.ReadInt32();
51798 newPlayer.inventory[num6].Prefix(fileIO.ReadByte());
51799 if (release >= 114)
51800 {
51801 newPlayer.inventory[num6].favorited = fileIO.ReadBoolean();
51802 }
51803 }
51804 }
51805 }
51806 else
51807 {
51808 for (int num8 = 0; num8 < 48; num8++)
51809 {
51810 int num9 = fileIO.ReadInt32();
51811 if (num9 >= ItemID.Count)
51812 {
51813 newPlayer.inventory[num8].netDefaults(0);
51814 fileIO.ReadInt32();
51815 fileIO.ReadByte();
51816 }
51817 else
51818 {
51819 newPlayer.inventory[num8].netDefaults(num9);
51820 newPlayer.inventory[num8].stack = fileIO.ReadInt32();
51821 newPlayer.inventory[num8].Prefix(fileIO.ReadByte());
51822 }
51823 }
51824 }
51825 if (release >= 117)
51826 {
51827 if (release < 136)
51828 {
51829 for (int num10 = 0; num10 < 5; num10++)
51830 {
51831 if (num10 != 1)
51832 {
51833 int num11 = fileIO.ReadInt32();
51834 if (num11 >= ItemID.Count)
51835 {
51836 newPlayer.miscEquips[num10].netDefaults(0);
51837 fileIO.ReadByte();
51838 }
51839 else
51840 {
51841 newPlayer.miscEquips[num10].netDefaults(num11);
51842 newPlayer.miscEquips[num10].Prefix(fileIO.ReadByte());
51843 }
51844 num11 = fileIO.ReadInt32();
51845 if (num11 >= ItemID.Count)
51846 {
51847 newPlayer.miscDyes[num10].netDefaults(0);
51848 fileIO.ReadByte();
51849 }
51850 else
51851 {
51852 newPlayer.miscDyes[num10].netDefaults(num11);
51853 newPlayer.miscDyes[num10].Prefix(fileIO.ReadByte());
51854 }
51855 }
51856 }
51857 }
51858 else
51859 {
51860 for (int num12 = 0; num12 < 5; num12++)
51861 {
51862 int num13 = fileIO.ReadInt32();
51863 if (num13 >= ItemID.Count)
51864 {
51865 newPlayer.miscEquips[num12].netDefaults(0);
51866 fileIO.ReadByte();
51867 }
51868 else
51869 {
51870 newPlayer.miscEquips[num12].netDefaults(num13);
51871 newPlayer.miscEquips[num12].Prefix(fileIO.ReadByte());
51872 }
51873 num13 = fileIO.ReadInt32();
51874 if (num13 >= ItemID.Count)
51875 {
51876 newPlayer.miscDyes[num12].netDefaults(0);
51877 fileIO.ReadByte();
51878 }
51879 else
51880 {
51881 newPlayer.miscDyes[num12].netDefaults(num13);
51882 newPlayer.miscDyes[num12].Prefix(fileIO.ReadByte());
51883 }
51884 }
51885 }
51886 }
51887 if (release >= 58)
51888 {
51889 for (int num14 = 0; num14 < 40; num14++)
51890 {
51891 newPlayer.bank.item[num14].netDefaults(fileIO.ReadInt32());
51892 newPlayer.bank.item[num14].stack = fileIO.ReadInt32();
51893 newPlayer.bank.item[num14].Prefix(fileIO.ReadByte());
51894 }
51895 for (int num15 = 0; num15 < 40; num15++)
51896 {
51897 newPlayer.bank2.item[num15].netDefaults(fileIO.ReadInt32());
51898 newPlayer.bank2.item[num15].stack = fileIO.ReadInt32();
51899 newPlayer.bank2.item[num15].Prefix(fileIO.ReadByte());
51900 }
51901 }
51902 else
51903 {
51904 for (int num16 = 0; num16 < 20; num16++)
51905 {
51906 newPlayer.bank.item[num16].netDefaults(fileIO.ReadInt32());
51907 newPlayer.bank.item[num16].stack = fileIO.ReadInt32();
51908 newPlayer.bank.item[num16].Prefix(fileIO.ReadByte());
51909 }
51910 for (int num17 = 0; num17 < 20; num17++)
51911 {
51912 newPlayer.bank2.item[num17].netDefaults(fileIO.ReadInt32());
51913 newPlayer.bank2.item[num17].stack = fileIO.ReadInt32();
51914 newPlayer.bank2.item[num17].Prefix(fileIO.ReadByte());
51915 }
51916 }
51917 if (release >= 182)
51918 {
51919 for (int num18 = 0; num18 < 40; num18++)
51920 {
51921 newPlayer.bank3.item[num18].netDefaults(fileIO.ReadInt32());
51922 newPlayer.bank3.item[num18].stack = fileIO.ReadInt32();
51923 newPlayer.bank3.item[num18].Prefix(fileIO.ReadByte());
51924 }
51925 }
51926 if (release >= 198)
51927 {
51928 for (int num19 = 0; num19 < 40; num19++)
51929 {
51930 newPlayer.bank4.item[num19].netDefaults(fileIO.ReadInt32());
51931 newPlayer.bank4.item[num19].stack = fileIO.ReadInt32();
51932 newPlayer.bank4.item[num19].Prefix(fileIO.ReadByte());
51933 if (release >= 255)
51934 {
51935 newPlayer.bank4.item[num19].favorited = fileIO.ReadBoolean();
51936 }
51937 }
51938 }
51939 if (release >= 199)
51940 {
51941 newPlayer.voidVaultInfo = fileIO.ReadByte();
51942 }
51943 }
51944 else
51945 {
51946 for (int num20 = 0; num20 < 8; num20++)
51947 {
51948 newPlayer.armor[num20].SetDefaults(ItemID.FromLegacyName(fileIO.ReadString(), release));
51949 if (release >= 36)
51950 {
51951 newPlayer.armor[num20].Prefix(fileIO.ReadByte());
51952 }
51953 }
51954 if (release >= 6)
51955 {
51956 for (int num21 = 8; num21 < 11; num21++)
51957 {
51958 newPlayer.armor[num21].SetDefaults(ItemID.FromLegacyName(fileIO.ReadString(), release));
51959 if (release >= 36)
51960 {
51961 newPlayer.armor[num21].Prefix(fileIO.ReadByte());
51962 }
51963 }
51964 }
51965 for (int num22 = 0; num22 < 44; num22++)
51966 {
51967 newPlayer.inventory[num22].SetDefaults(ItemID.FromLegacyName(fileIO.ReadString(), release));
51968 newPlayer.inventory[num22].stack = fileIO.ReadInt32();
51969 if (release >= 36)
51970 {
51971 newPlayer.inventory[num22].Prefix(fileIO.ReadByte());
51972 }
51973 }
51974 if (release >= 15)
51975 {
51976 for (int num23 = 44; num23 < 48; num23++)
51977 {
51978 newPlayer.inventory[num23].SetDefaults(ItemID.FromLegacyName(fileIO.ReadString(), release));
51979 newPlayer.inventory[num23].stack = fileIO.ReadInt32();
51980 if (release >= 36)
51981 {
51982 newPlayer.inventory[num23].Prefix(fileIO.ReadByte());
51983 }
51984 }
51985 }
51986 for (int num24 = 0; num24 < 20; num24++)
51987 {
51988 newPlayer.bank.item[num24].SetDefaults(ItemID.FromLegacyName(fileIO.ReadString(), release));
51989 newPlayer.bank.item[num24].stack = fileIO.ReadInt32();
51990 if (release >= 36)
51991 {
51992 newPlayer.bank.item[num24].Prefix(fileIO.ReadByte());
51993 }
51994 }
51995 if (release >= 20)
51996 {
51997 for (int num25 = 0; num25 < 20; num25++)
51998 {
51999 newPlayer.bank2.item[num25].SetDefaults(ItemID.FromLegacyName(fileIO.ReadString(), release));
52000 newPlayer.bank2.item[num25].stack = fileIO.ReadInt32();
52001 if (release >= 36)
52002 {
52003 newPlayer.bank2.item[num25].Prefix(fileIO.ReadByte());
52004 }
52005 }
52006 }
52007 }
52008 if (release < 58)
52009 {
52010 for (int num26 = 40; num26 < 48; num26++)
52011 {
52012 newPlayer.inventory[num26 + 10] = newPlayer.inventory[num26].Clone();
52013 newPlayer.inventory[num26].SetDefaults();
52014 }
52015 }
52016 if (release >= 11)
52017 {
52018 int num27 = 22;
52019 if (release < 74)
52020 {
52021 num27 = 10;
52022 }
52023 if (release >= 252)
52024 {
52025 num27 = 44;
52026 }
52027 for (int num28 = 0; num28 < num27; num28++)
52028 {
52029 newPlayer.buffType[num28] = fileIO.ReadInt32();
52030 newPlayer.buffTime[num28] = fileIO.ReadInt32();
52031 if (newPlayer.buffType[num28] == 0)
52032 {
52033 num28--;
52034 num27--;
52035 }
52036 }
52037 }
52038 for (int num29 = 0; num29 < 200; num29++)
52039 {
52040 int num30 = fileIO.ReadInt32();
52041 if (num30 == -1)
52042 {
52043 break;
52044 }
52045 newPlayer.spX[num29] = num30;
52046 newPlayer.spY[num29] = fileIO.ReadInt32();
52047 newPlayer.spI[num29] = fileIO.ReadInt32();
52048 newPlayer.spN[num29] = fileIO.ReadString();
52049 }
52050 if (release >= 16)
52051 {
52052 newPlayer.hbLocked = fileIO.ReadBoolean();
52053 }
52054 if (release >= 115)
52055 {
52056 int num31 = 13;
52057 for (int num32 = 0; num32 < num31; num32++)
52058 {
52059 newPlayer.hideInfo[num32] = fileIO.ReadBoolean();
52060 }
52061 }
52062 if (release >= 98)
52063 {
52064 newPlayer.anglerQuestsFinished = fileIO.ReadInt32();
52065 }
52066 if (release >= 162)
52067 {
52068 for (int num33 = 0; num33 < 4; num33++)
52069 {
52070 newPlayer.DpadRadial.Bindings[num33] = fileIO.ReadInt32();
52071 }
52072 }
52073 if (release >= 164)
52074 {
52075 int num34 = 8;
52076 if (release >= 167)
52077 {
52078 num34 = 10;
52079 }
52080 if (release >= 197)
52081 {
52082 num34 = 11;
52083 }
52084 if (release >= 230)
52085 {
52086 num34 = 12;
52087 }
52088 for (int num35 = 0; num35 < num34; num35++)
52089 {
52090 newPlayer.builderAccStatus[num35] = fileIO.ReadInt32();
52091 }
52092 if (release < 210)
52093 {
52094 newPlayer.builderAccStatus[0] = 1;
52095 }
52096 if (release < 249)
52097 {
52098 bool flag = false;
52099 for (int num36 = 0; num36 < 58; num36++)
52100 {
52101 if (newPlayer.inventory[num36].type == 3611)
52102 {
52103 flag = true;
52104 break;
52105 }
52106 }
52107 if (flag)
52108 {
52109 newPlayer.builderAccStatus[1] = 1;
52110 }
52111 }
52112 }
52113 if (release >= 181)
52114 {
52115 newPlayer.bartenderQuestLog = fileIO.ReadInt32();
52116 }
52117 if (release >= 200)
52118 {
52119 newPlayer.dead = fileIO.ReadBoolean();
52120 if (newPlayer.dead)
52121 {
52122 newPlayer.respawnTimer = Utils.Clamp(fileIO.ReadInt32(), 0, 60000);
52123 }
52124 }
52125 newPlayer.lastTimePlayerWasSaved = 0L;
52126 if (release >= 202)
52127 {
52128 newPlayer.lastTimePlayerWasSaved = fileIO.ReadInt64();
52129 }
52130 else
52131 {
52132 newPlayer.lastTimePlayerWasSaved = DateTime.UtcNow.ToBinary();
52133 }
52134 if (release >= 206)
52135 {
52136 newPlayer.golferScoreAccumulated = fileIO.ReadInt32();
52137 }
52138 if (release >= 218)
52139 {
52140 newPlayer.creativeTracker.Load(fileIO, release);
52141 }
52142 if (release >= 214)
52143 {
52144 newPlayer.LoadTemporaryItemSlotContents(fileIO);
52145 }
52146 newPlayer.savedPerPlayerFieldsThatArentInThePlayerClass = new SavedPlayerDataWithAnnoyingRules();
52147 CreativePowerManager.Instance.ResetDataForNewPlayer(newPlayer);
52148 if (release >= 220)
52149 {
52151 }
52152 if (release >= 253)
52153 {
52154 BitsByte bitsByte3 = fileIO.ReadByte();
52155 newPlayer.unlockedSuperCart = bitsByte3[0];
52156 newPlayer.enabledSuperCart = bitsByte3[1];
52157 }
52158 else
52159 {
52160 newPlayer.unlockedSuperCart = newPlayer.HasItemInAnyInventory(3353);
52161 }
52162 if (release >= 262)
52163 {
52164 int value = fileIO.ReadInt32();
52165 newPlayer.CurrentLoadoutIndex = Utils.Clamp(value, 0, newPlayer.Loadouts.Length - 1);
52166 for (int num37 = 0; num37 < newPlayer.Loadouts.Length; num37++)
52167 {
52168 newPlayer.Loadouts[num37].Deserialize(fileIO, release);
52169 }
52170 }
52172 }
static readonly short Count
Definition ItemID.cs:12138
static short FromLegacyName(string name, int release)
Definition ItemID.cs:12856
void SetPlayTime(TimeSpan time)
static void LoadPlayer_LastMinuteFixes(Player newPlayer)
Definition Player.cs:52242
static unsafe DateTime UtcNow
Definition DateTime.cs:142
static readonly TimeSpan Zero
Definition TimeSpan.cs:21

References Terraria.ID.ItemID.Count, Terraria.ID.ItemID.FromLegacyName(), Terraria.GameContent.Creative.CreativePowerManager.Instance, System.L, Terraria.Main.myPlayer, Terraria.Main.player, Terraria.IO.PlayerFileData.SetPlayTime(), System.DateTime.UtcNow, System.value, and System.TimeSpan.Zero.