Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
VersionConverter22To23.cs
浏览该文件的文档.
1using System.Xml.Linq;
2using Engine;
3using XmlUtilities;
4
5namespace Game {
7 public override string SourceVersion => "2.2";
8
9 public override string TargetVersion => "2.3";
10
11 public override void ConvertProjectXml(XElement projectNode) {
12 XmlUtils.SetAttributeValue(projectNode, "Version", TargetVersion);
13 }
14
15 public override void ConvertWorld(string directoryName) {
16 try {
17 ConvertChunks(directoryName);
18 ConvertProject(directoryName);
19 foreach (string item in from f in Storage.ListFileNames(directoryName) where Storage.GetExtension(f) == ".new" select f) {
20 string sourcePath = Storage.CombinePaths(directoryName, item);
21 string destinationPath = Storage.CombinePaths(directoryName, Storage.GetFileNameWithoutExtension(item));
22 Storage.MoveFile(sourcePath, destinationPath);
23 }
24 foreach (string item2 in from f in Storage.ListDirectoryNames(directoryName) where Storage.GetExtension(f) == ".new" select f) {
25 string sourcePath2 = Storage.CombinePaths(directoryName, item2);
26 string destinationPath2 = Storage.CombinePaths(directoryName, Storage.GetFileNameWithoutExtension(item2));
27 Storage.MoveDirectory(sourcePath2, destinationPath2);
28 }
29 foreach (string item3 in from f in Storage.ListFileNames(directoryName) where Storage.GetExtension(f) == ".old" select f) {
30 Storage.DeleteFile(Storage.CombinePaths(directoryName, item3));
31 }
32 foreach (string item4 in from f in Storage.ListDirectoryNames(directoryName) where Storage.GetExtension(f) == ".old" select f) {
34 }
35 }
36 catch (Exception) {
37 foreach (string item5 in from f in Storage.ListFileNames(directoryName) where Storage.GetExtension(f) == ".old" select f) {
38 string sourcePath3 = Storage.CombinePaths(directoryName, item5);
39 string destinationPath3 = Storage.CombinePaths(directoryName, Storage.GetFileNameWithoutExtension(item5));
40 Storage.MoveFile(sourcePath3, destinationPath3);
41 }
42 foreach (string item6 in from f in Storage.ListDirectoryNames(directoryName) where Storage.GetExtension(f) == ".old" select f) {
43 string sourcePath4 = Storage.CombinePaths(directoryName, item6);
44 string destinationPath4 = Storage.CombinePaths(directoryName, Storage.GetFileNameWithoutExtension(item6));
45 Storage.MoveDirectory(sourcePath4, destinationPath4);
46 }
47 foreach (string item7 in from f in Storage.ListFileNames(directoryName) where Storage.GetExtension(f) == ".new" select f) {
48 Storage.DeleteFile(Storage.CombinePaths(directoryName, item7));
49 }
50 foreach (string item8 in from f in Storage.ListDirectoryNames(directoryName) where Storage.GetExtension(f) == ".new" select f) {
52 }
53 throw;
54 }
55 }
56
57 void ConvertProject(string directoryName) {
58 string path = Storage.CombinePaths(directoryName, "Project.xml");
59 string path2 = Storage.CombinePaths(directoryName, "Project.xml.new");
60 XElement xElement;
61 using (Stream stream = Storage.OpenFile(path, OpenFileMode.Read)) {
62 xElement = XmlUtils.LoadXmlFromStream(stream, null, true);
63 }
64 ConvertProjectXml(xElement);
65 using (Stream stream2 = Storage.OpenFile(path2, OpenFileMode.Create)) {
66 XmlUtils.SaveXmlToStream(xElement, stream2, null, true);
67 }
68 }
69
70 void ConvertChunks(string directoryName) {
71 long num = Storage.GetFileSize(Storage.CombinePaths(directoryName, "Chunks32h.dat")) / 10 + 52428800;
72 if (Storage.FreeSpace < num) {
73 throw new InvalidOperationException($"Not enough free space to convert world. {num / 1024 / 1024}MB required.");
74 }
75 using (TerrainSerializer22 terrainSerializer = new(null, directoryName)) {
76 using (TerrainSerializer23 terrainSerializer2 = new(directoryName, ".new")) {
77 foreach (Point2 chunk2 in terrainSerializer.Chunks) {
78 TerrainChunk chunk = new(null, chunk2.X, chunk2.Y);
79 terrainSerializer.LoadChunk(chunk);
80 terrainSerializer2.SaveChunkData(chunk);
81 }
82 }
83 }
84 Storage.MoveFile(Storage.CombinePaths(directoryName, "Chunks32h.dat"), Storage.CombinePaths(directoryName, "Chunks32h.dat.old"));
85 }
86 }
87}
static void MoveFile(string sourcePath, string destinationPath)
static IEnumerable< string > ListDirectoryNames(string path)
static IEnumerable< string > ListFileNames(string path)
static Stream OpenFile(string path, OpenFileMode openFileMode)
static string GetExtension(string path)
static void DeleteDirectoryRecursive(string path)
static string GetFileNameWithoutExtension(string path)
static void MoveDirectory(string path, string newPath)
static long FreeSpace
static long GetFileSize(string path)
static void DeleteFile(string path)
static string CombinePaths(params string[] paths)
bool LoadChunk(TerrainChunk chunk)
virtual void SaveChunkData(TerrainChunk chunk)
override void ConvertProjectXml(XElement projectNode)
void ConvertChunks(string directoryName)
void ConvertProject(string directoryName)
override void ConvertWorld(string directoryName)
static void SetAttributeValue(XElement node, string attributeName, object value)
static XElement LoadXmlFromStream(Stream stream, Encoding encoding, bool throwOnError)
static void SaveXmlToStream(XElement node, Stream stream, Encoding encoding, bool throwOnError)