예제 #1
0
        private void UpdateMe(On.Terraria.Main.orig_UpdateMenu orig)
        {
            if (Main.mouseMiddle && !genning)
            {
                genning = true;
                PutMeInAWorld();
            }

            if (genning && !WorldGen.gen && Main.menuMode != 888)
            {
                using (FileStream f = File.Create(ModLoader.ModPath + "/TempWorld"))
                {
                    BinaryWriter w = new BinaryWriter(f);
                    WorldFile.SaveWorld_Version2(w);
                }

                var temp = new PlayerFileData(ModLoader.ModPath + "/TempPlayer", false);
                temp.Name        = "Temporary Player";
                temp.Player      = new Player();
                temp.Player.name = "Temporary Player";
                temp.Metadata    = FileMetadata.FromCurrentSettings(FileType.Player);

                Main.player[0] = temp.Player;

                Main.ActivePlayerFileData = temp;

                WorldGen.playWorld();
                genning = false;
            }

            orig();
        }
예제 #2
0
        public void Load()
        {
            if (!Main.mapEnabled)
            {
                return;
            }
            string str = Main.playerPathName.Substring(0, Main.playerPathName.Length - 4);

            object[] directorySeparatorChar = new object[] { str, Path.DirectorySeparatorChar, Main.worldID, ".map" };
            string   str1 = string.Concat(directorySeparatorChar);

            if (!FileUtilities.Exists(str1))
            {
                Main.MapFileMetadata = FileMetadata.FromCurrentSettings(FileType.Map);
                return;
            }
            using (MemoryStream memoryStream = new MemoryStream(FileUtilities.ReadAllBytes(str1)))
            {
                using (BinaryReader binaryReader = new BinaryReader(memoryStream))
                {
                    try
                    {
                        int num = binaryReader.ReadInt32();
                        if (num <= Main.curRelease)
                        {
                            if (num > 91)
                            {
                                MapHelper.LoadMapVersion2(binaryReader, num);
                            }
                            else
                            {
                                MapHelper.LoadMapVersion1(binaryReader, num);
                            }
                            Main.clearMap    = true;
                            Main.loadMap     = true;
                            Main.loadMapLock = true;
                            Main.refreshMap  = false;
                        }
                        else
                        {
                            return;
                        }
                    }
                    catch (Exception exception1)
                    {
                        Exception exception = exception1;
                        using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", true))
                        {
                            streamWriter.WriteLine(DateTime.Now);
                            streamWriter.WriteLine(exception);
                            streamWriter.WriteLine("");
                        }
                        File.Copy(str1, string.Concat(str1, ".bad"), true);
                        this.Clear();
                    }
                }
            }
        }
예제 #3
0
        public void Load()
        {
            bool isCloudSave = Main.ActivePlayerFileData.IsCloudSave;

            if ((!isCloudSave || SocialAPI.Cloud != null) && Main.mapEnabled)
            {
                string text  = Main.playerPathName.Substring(0, Main.playerPathName.Length - 4);
                string text2 = text + Path.DirectorySeparatorChar + Main.worldID + ".map";
                if (!FileUtilities.Exists(text2, isCloudSave))
                {
                    Main.MapFileMetadata = FileMetadata.FromCurrentSettings(FileType.Map);
                }
                else
                {
                    using (MemoryStream input = new MemoryStream(FileUtilities.ReadAllBytes(text2, isCloudSave)))
                    {
                        using (BinaryReader binaryReader = new BinaryReader(input))
                        {
                            try
                            {
                                int num = binaryReader.ReadInt32();
                                if (num <= Main.maxSupportSaveRelease)
                                {
                                    if (num <= 91)
                                    {
                                        MapHelper.LoadMapVersion1(binaryReader, num);
                                    }
                                    else
                                    {
                                        MapHelper.LoadMapVersion2(binaryReader, num);
                                    }
                                    Main.clearMap    = true;
                                    Main.loadMap     = true;
                                    Main.loadMapLock = true;
                                    Main.refreshMap  = false;
                                }
                            }
                            catch (Exception value)
                            {
                                using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", append: true))
                                {
                                    streamWriter.WriteLine(DateTime.Now);
                                    streamWriter.WriteLine(value);
                                    streamWriter.WriteLine("");
                                }
                                if (!isCloudSave)
                                {
                                    File.Copy(text2, text2 + ".bad", overwrite: true);
                                }
                                Clear();
                            }
                        }
                    }
                }
            }
        }
예제 #4
0
        private void final(GenerationProgress customProgressObject)
        {
            float weight = GetTotalLoadWeight(_generator);

            WorldHooks.ModifyWorldGenTasks(GetPasses(_generator), ref weight);
            SetTotalLoadWeight(_generator, weight);
            Main.menuMode = 888;
            _generator.GenerateWorld(customProgressObject);
            WorldHooks.PostWorldGen();
            Main.WorldFileMetadata = FileMetadata.FromCurrentSettings(FileType.World);
        }
예제 #5
0
        private void LoadFileFormatTrueHeader(out bool[] importance, out int[] positions)
        {
            string path = Path.Combine(Main.ActiveWorldFileData.Path.Replace(".wld", ""), ActiveDimensionName.Split(':')[1]) + "\\Trueheader.data";

            using (BinaryReader reader = new BinaryReader(File.Open(path, FileMode.Open)))
            {
                importance = null;
                positions  = null;
                int num = reader.ReadInt32();
                WorldFile.versionNumber = num;
                if (num >= 135)
                {
                    try
                    {
                        Main.WorldFileMetadata = FileMetadata.Read(reader, FileType.World);
                        goto IL_54;
                    }
                    catch (FileFormatException value)
                    {
                        Console.WriteLine(Language.GetTextValue("Error.UnableToLoadWorld"));
                        Console.WriteLine(value);
                    }
                }
                Main.WorldFileMetadata = FileMetadata.FromCurrentSettings(FileType.World);
IL_54:
                short num2 = reader.ReadInt16();
                positions  = new int[(int)num2];
                for (int i = 0; i < (int)num2; i++)
                {
                    positions[i] = reader.ReadInt32();
                }
                short num3 = reader.ReadInt16();
                importance = new bool[(int)num3];
                byte b  = 0;
                byte b2 = 128;
                for (int i = 0; i < (int)num3; i++)
                {
                    if (b2 == 128)
                    {
                        b  = reader.ReadByte();
                        b2 = 1;
                    }
                    else
                    {
                        b2 = (byte)(b2 << 1);
                    }
                    if ((b & b2) == b2)
                    {
                        importance[i] = true;
                    }
                }
            }
        }
예제 #6
0
        public void Load()
        {
            Lighting.Clear();
            bool isCloudSave = Main.ActivePlayerFileData.IsCloudSave;

            if ((isCloudSave && SocialAPI.Cloud == null) || !Main.mapEnabled)
            {
                return;
            }
            string text = Main.playerPathName.Substring(0, Main.playerPathName.Length - 4) + Path.DirectorySeparatorChar.ToString();

            if (Main.ActiveWorldFileData.UseGuidAsMapName)
            {
                string arg = text;
                text = text + Main.ActiveWorldFileData.UniqueId + ".map";
                if (!FileUtilities.Exists(text, isCloudSave))
                {
                    text = arg + Main.worldID + ".map";
                }
            }
            else
            {
                text = text + Main.worldID + ".map";
            }
            if (!FileUtilities.Exists(text, isCloudSave))
            {
                Main.MapFileMetadata = FileMetadata.FromCurrentSettings(FileType.Map);
            }
            else
            {
                using (MemoryStream input = new MemoryStream(FileUtilities.ReadAllBytes(text, isCloudSave)))
                {
                    using (BinaryReader binaryReader = new BinaryReader(input))
                    {
                        try
                        {
                            int num = binaryReader.ReadInt32();
                            if (num <= 227)
                            {
                                if (num <= 91)
                                {
                                    MapHelper.LoadMapVersion1(binaryReader, num);
                                }
                                else
                                {
                                    MapHelper.LoadMapVersion2(binaryReader, num);
                                }
                                ClearEdges();
                                Main.clearMap    = true;
                                Main.loadMap     = true;
                                Main.loadMapLock = true;
                                Main.refreshMap  = false;
                            }
                        }
                        catch (Exception value)
                        {
                            using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", append: true))
                            {
                                streamWriter.WriteLine(DateTime.Now);
                                streamWriter.WriteLine(value);
                                streamWriter.WriteLine("");
                            }
                            if (!isCloudSave)
                            {
                                File.Copy(text, text + ".bad", overwrite: true);
                            }
                            Clear();
                        }
                    }
                }
            }
        }
예제 #7
0
        public void Load()
        {
            Lighting.Clear();
            bool isCloudSave = Main.ActivePlayerFileData.IsCloudSave;

            if (isCloudSave && SocialAPI.Cloud == null || !Main.mapEnabled)
            {
                return;
            }
            string str1 = Main.playerPathName.Substring(0, Main.playerPathName.Length - 4) + Path.DirectorySeparatorChar.ToString();
            string str2;

            if (Main.ActiveWorldFileData.UseGuidAsMapName)
            {
                string str3 = str1;
                str2 = str1 + (object)Main.ActiveWorldFileData.UniqueId + ".map";
                if (!FileUtilities.Exists(str2, isCloudSave))
                {
                    str2 = str3 + (object)Main.worldID + ".map";
                }
            }
            else
            {
                str2 = str1 + (object)Main.worldID + ".map";
            }
            if (!FileUtilities.Exists(str2, isCloudSave))
            {
                Main.MapFileMetadata = FileMetadata.FromCurrentSettings(FileType.Map);
            }
            else
            {
                using (MemoryStream memoryStream = new MemoryStream(FileUtilities.ReadAllBytes(str2, isCloudSave)))
                {
                    using (BinaryReader fileIO = new BinaryReader((Stream)memoryStream))
                    {
                        try
                        {
                            int release = fileIO.ReadInt32();
                            if (release > 230)
                            {
                                return;
                            }
                            if (release <= 91)
                            {
                                MapHelper.LoadMapVersion1(fileIO, release);
                            }
                            else
                            {
                                MapHelper.LoadMapVersion2(fileIO, release);
                            }
                            this.ClearEdges();
                            Main.clearMap    = true;
                            Main.loadMap     = true;
                            Main.loadMapLock = true;
                            Main.refreshMap  = false;
                        }
                        catch (Exception ex)
                        {
                            using (StreamWriter streamWriter = new StreamWriter("client-crashlog.txt", true))
                            {
                                streamWriter.WriteLine((object)DateTime.Now);
                                streamWriter.WriteLine((object)ex);
                                streamWriter.WriteLine("");
                            }
                            if (!isCloudSave)
                            {
                                File.Copy(str2, str2 + ".bad", true);
                            }
                            this.Clear();
                        }
                    }
                }
            }
        }
예제 #8
0
 public static async Task <bool> Export(Player plr)
 {
     return(await Task.Run(() =>
     {
         string path = Environment.CurrentDirectory + "\\PlayerExport\\" + plr.name + ".plr";
         try
         {
             if (!Directory.Exists(Environment.CurrentDirectory + "\\PlayerExport"))
             {
                 Directory.CreateDirectory(Environment.CurrentDirectory + "\\PlayerExport");
             }
             if (File.Exists(path))
             {
                 File.Copy(path, path + ".bak", true);
             }
             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))
                 {
                     PlayerFileData playerFileData = new PlayerFileData
                     {
                         Metadata = FileMetadata.FromCurrentSettings(FileType.Player),
                         Player = plr,
                         _isCloudSave = false,
                         _path = path
                     };
                     Main.LocalFavoriteData.ClearEntry(playerFileData);
                     using (BinaryWriter binaryWriter = new BinaryWriter(cryptoStream))
                     {
                         binaryWriter.Write(230);
                         playerFileData.Metadata.Write(binaryWriter);
                         binaryWriter.Write(plr.name);
                         binaryWriter.Write(plr.difficulty);
                         binaryWriter.Write(playerFileData.GetPlayTime().Ticks);
                         binaryWriter.Write(plr.hair);
                         binaryWriter.Write(plr.hairDye);
                         BitsByte bb = 0;
                         for (int i = 0; i < 8; i++)
                         {
                             bb[i] = plr.hideVisibleAccessory[i];
                         }
                         binaryWriter.Write(bb);
                         bb = 0;
                         for (int j = 0; j < 2; j++)
                         {
                             bb[j] = plr.hideVisibleAccessory[j + 8];
                         }
                         binaryWriter.Write(bb);
                         binaryWriter.Write(plr.hideMisc);
                         binaryWriter.Write((byte)plr.skinVariant);
                         binaryWriter.Write(plr.statLife);
                         binaryWriter.Write(plr.statLifeMax);
                         binaryWriter.Write(plr.statMana);
                         binaryWriter.Write(plr.statManaMax);
                         binaryWriter.Write(plr.extraAccessory);
                         binaryWriter.Write(plr.unlockedBiomeTorches);
                         binaryWriter.Write(plr.UsingBiomeTorches);
                         binaryWriter.Write(plr.downedDD2EventAnyDifficulty);
                         binaryWriter.Write(plr.taxMoney);
                         binaryWriter.Write(plr.hairColor.R);
                         binaryWriter.Write(plr.hairColor.G);
                         binaryWriter.Write(plr.hairColor.B);
                         binaryWriter.Write(plr.skinColor.R);
                         binaryWriter.Write(plr.skinColor.G);
                         binaryWriter.Write(plr.skinColor.B);
                         binaryWriter.Write(plr.eyeColor.R);
                         binaryWriter.Write(plr.eyeColor.G);
                         binaryWriter.Write(plr.eyeColor.B);
                         binaryWriter.Write(plr.shirtColor.R);
                         binaryWriter.Write(plr.shirtColor.G);
                         binaryWriter.Write(plr.shirtColor.B);
                         binaryWriter.Write(plr.underShirtColor.R);
                         binaryWriter.Write(plr.underShirtColor.G);
                         binaryWriter.Write(plr.underShirtColor.B);
                         binaryWriter.Write(plr.pantsColor.R);
                         binaryWriter.Write(plr.pantsColor.G);
                         binaryWriter.Write(plr.pantsColor.B);
                         binaryWriter.Write(plr.shoeColor.R);
                         binaryWriter.Write(plr.shoeColor.G);
                         binaryWriter.Write(plr.shoeColor.B);
                         for (int k = 0; k < plr.armor.Length; k++)
                         {
                             binaryWriter.Write(plr.armor[k].netID);
                             binaryWriter.Write(plr.armor[k].prefix);
                         }
                         for (int l = 0; l < plr.dye.Length; l++)
                         {
                             binaryWriter.Write(plr.dye[l].netID);
                             binaryWriter.Write(plr.dye[l].prefix);
                         }
                         for (int m = 0; m < 58; m++)
                         {
                             binaryWriter.Write(plr.inventory[m].netID);
                             binaryWriter.Write(plr.inventory[m].stack);
                             binaryWriter.Write(plr.inventory[m].prefix);
                             binaryWriter.Write(plr.inventory[m].favorited);
                         }
                         for (int n = 0; n < plr.miscEquips.Length; n++)
                         {
                             binaryWriter.Write(plr.miscEquips[n].netID);
                             binaryWriter.Write(plr.miscEquips[n].prefix);
                             binaryWriter.Write(plr.miscDyes[n].netID);
                             binaryWriter.Write(plr.miscDyes[n].prefix);
                         }
                         for (int num = 0; num < 40; num++)
                         {
                             binaryWriter.Write(plr.bank.item[num].netID);
                             binaryWriter.Write(plr.bank.item[num].stack);
                             binaryWriter.Write(plr.bank.item[num].prefix);
                         }
                         for (int num2 = 0; num2 < 40; num2++)
                         {
                             binaryWriter.Write(plr.bank2.item[num2].netID);
                             binaryWriter.Write(plr.bank2.item[num2].stack);
                             binaryWriter.Write(plr.bank2.item[num2].prefix);
                         }
                         for (int num3 = 0; num3 < 40; num3++)
                         {
                             binaryWriter.Write(plr.bank3.item[num3].netID);
                             binaryWriter.Write(plr.bank3.item[num3].stack);
                             binaryWriter.Write(plr.bank3.item[num3].prefix);
                         }
                         for (int num4 = 0; num4 < 40; num4++)
                         {
                             binaryWriter.Write(plr.bank4.item[num4].netID);
                             binaryWriter.Write(plr.bank4.item[num4].stack);
                             binaryWriter.Write(plr.bank4.item[num4].prefix);
                         }
                         binaryWriter.Write(plr.voidVaultInfo);
                         for (int num5 = 0; num5 < 22; num5++)
                         {
                             if (Main.buffNoSave[plr.buffType[num5]])
                             {
                                 binaryWriter.Write(0);
                                 binaryWriter.Write(0);
                             }
                             else
                             {
                                 binaryWriter.Write(plr.buffType[num5]);
                                 binaryWriter.Write(plr.buffTime[num5]);
                             }
                         }
                         for (int num6 = 0; num6 < 200; num6++)
                         {
                             if (plr.spN[num6] == null)
                             {
                                 binaryWriter.Write(-1);
                                 break;
                             }
                             binaryWriter.Write(plr.spX[num6]);
                             binaryWriter.Write(plr.spY[num6]);
                             binaryWriter.Write(plr.spI[num6]);
                             binaryWriter.Write(plr.spN[num6]);
                         }
                         binaryWriter.Write(plr.hbLocked);
                         for (int num7 = 0; num7 < plr.hideInfo.Length; num7++)
                         {
                             binaryWriter.Write(plr.hideInfo[num7]);
                         }
                         binaryWriter.Write(plr.anglerQuestsFinished);
                         for (int num8 = 0; num8 < plr.DpadRadial.Bindings.Length; num8++)
                         {
                             binaryWriter.Write(plr.DpadRadial.Bindings[num8]);
                         }
                         for (int num9 = 0; num9 < plr.builderAccStatus.Length; num9++)
                         {
                             binaryWriter.Write(plr.builderAccStatus[num9]);
                         }
                         binaryWriter.Write(plr.bartenderQuestLog);
                         binaryWriter.Write(plr.dead);
                         if (plr.dead)
                         {
                             binaryWriter.Write(plr.respawnTimer);
                         }
                         long value = DateTime.UtcNow.ToBinary();
                         binaryWriter.Write(value);
                         binaryWriter.Write(plr.golferScoreAccumulated);
                         plr.creativeTracker.Save(binaryWriter);
                         plr.SaveTemporaryItemSlotContents(binaryWriter);
                         CreativePowerManager.Instance.SaveToPlayer(plr, binaryWriter);
                         binaryWriter.Flush();
                         cryptoStream.FlushFinalBlock();
                         stream.Flush();
                     }
                 }
             }
             return true;
         }
         catch (Exception ex) { File.Delete(path); TShock.Log.ConsoleError(ex.Message); }
         return false;
     }));
 }