MCSharp.World.Map.Save C# (CSharp) Method

Save() public method

public Save ( ) : void
return void
        public void Save()
        {
            if (changed)
            {
                string path = "levels/" + name + ".lvl";
                try
                {

                    if (!Directory.Exists("levels")) { Directory.CreateDirectory("levels"); }

                    FileStream fs = File.Create(path);
                    GZipStream gs = new GZipStream(fs, CompressionMode.Compress);

                    byte[] header = new byte[16];
                    BitConverter.GetBytes(1874).CopyTo(header, 0);
                    gs.Write(header, 0, 2);

                    // Compile the header
                    BitConverter.GetBytes(width).CopyTo(header, 0);
                    BitConverter.GetBytes(height).CopyTo(header, 2);
                    BitConverter.GetBytes(depth).CopyTo(header, 4);
                    BitConverter.GetBytes(spawnx).CopyTo(header, 6);
                    BitConverter.GetBytes(spawnz).CopyTo(header, 8);
                    BitConverter.GetBytes(spawny).CopyTo(header, 10);
                    header[12] = rotx; header[13] = roty;
                    header[14] = (byte)permissionvisit;
                    header[15] = (byte)permissionbuild;

                    // Write the header
                    gs.Write(header, 0, header.Length);

                    // Get the block information
                    byte[] level = new byte[blocks.Length];
                    for (int i = 0; i < blocks.Length; ++i)
                    {
                        if (blocks[i] < 200)
                        {
                            level[i] = blocks[i];
                        }
                        else
                        {
                            level[i] = Block.SaveConvert(blocks[i]);
                        }
                    }
                    gs.Write(level, 0, level.Length);
                    gs.Close();

                    Logger.Log("SAVED: Map \"" + name + "\". " + Player.players.Count + "/" + Properties.MaxPlayers);

                    // Set changed to false as we've saved
                    // And backup to false because it now needs to be backed up!
                    changed = false;
                    backedup = false;

                    try
                    {
                        File.Copy(path, path + ".backup", true);
                        Logger.Log("And backed up");
                    }
                    catch (Exception e)
                    {
                        Logger.Log("Failed to make backup", LogType.Error);
                        Logger.Log(e.Message, LogType.ErrorMessage);
                    }

                }
                catch (Exception e)
                {
                    Logger.Log("FAILED TO SAVE :" + name, LogType.Error);
                    Logger.Log(e.Message, LogType.ErrorMessage);
                    Player.GlobalMessage("FAILED TO SAVE :" + name);
                    return;
                }

                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
        }

Usage Example

Example #1
0
        void SetupLevels()
        {
            levels = new List<Map>(Properties.MaxMaps);
            MapGen = new MapGenerator();

            Random random = new Random();

            if (File.Exists("levels/" + Properties.MainLevel + ".lvl"))
            {
                mainLevel = Map.Load(Properties.MainLevel);
                if (mainLevel == null)
                {
                    if (File.Exists("levels/" + Properties.MainLevel + ".lvl.backup"))
                    {
                        Logger.Log("Atempting to load backup.", LogType.Debug);
                        File.Copy("levels/" + Properties.MainLevel + ".lvl.backup", "levels/" + Properties.MainLevel + ".lvl", true);
                        mainLevel = Map.Load(Properties.MainLevel);
                        if (mainLevel == null)
                        {
                            Logger.Log("BACKUP FAILED!", LogType.Error);
                        }
                    }
                    else
                    {
                        Logger.Log("BACKUP NOT FOUND!", LogType.Error);
                    }

                }
            }
            else
            {
                Logger.Log("Warning: No main.lvl found.", LogType.Debug);
                Logger.Log("Creating Default main.lvl", LogType.Debug);
                mainLevel = new Map(Properties.MainLevel, 128, 64, 128, "flat");

                mainLevel.permissionvisit = LevelPermission.Guest;
                mainLevel.permissionbuild = LevelPermission.Guest;
                mainLevel.Save();
            }
            levels.Add(mainLevel);

            if (File.Exists("autoload.txt"))
            {
                try
                {
                    string[] lines = File.ReadAllLines("autoload.txt");
                    foreach (string line in lines)
                    {
                        //int temp = 0;
                        string _line = line.Trim();
                        try
                        {

                            if (_line == "") { continue; }
                            if (_line[0] == '#') { continue; }
                            int index = _line.IndexOf("=");

                            string key = line.Split('=')[0].Trim();
                            string value;
                            try
                            {
                                value = line.Split('=')[1].Trim();
                            }
                            catch
                            {
                                value = "0";
                            }

                            if (!key.Equals("main"))
                            {
                                Command.all.Find("load").Use(key + " " + value);
                            }
                            else // Main's already loaded so we just check and set the physics level
                            {
                                try
                                {
                                    int temp = int.Parse(value);
                                    if (temp >= 0 && temp <= 2)
                                    {
                                        mainLevel.Physics = (Physics) temp;
                                    }
                                }
                                catch
                                {
                                    Logger.Log("The Physics variable for main in autoload.txt is invalid!", LogType.Warning);
                                }
                            }

                        }
                        catch (Exception ex)
                        {
                            Logger.Log(_line + " failed.", LogType.Error);
                            Logger.Log(ex.Message, LogType.ErrorMessage);
                        }
                    }
                }
                catch
                {
                    Logger.Log("autoload.txt error", LogType.Error);
                }
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            else
            {
                Logger.Log("autoload.txt does not exist", LogType.Debug);
            }
        }