107 lines
4.3 KiB
C#
107 lines
4.3 KiB
C#
using Newtonsoft.Json.Linq;
|
||
using System.IO;
|
||
using System.Text;
|
||
namespace H5MotaUpdate.ViewModels
|
||
{
|
||
internal class ItemsJSMigrator
|
||
{
|
||
string sourcePath, destPath;
|
||
Version version;
|
||
readonly string FILENAME = "items.js",
|
||
DATANAME = "items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a";
|
||
|
||
/// <summary>
|
||
/// 请输入新旧Project文件夹的路径
|
||
/// </summary>
|
||
public ItemsJSMigrator(string oldProjectDirectory, string newProjectDirectory, Version ver)
|
||
{
|
||
sourcePath = System.IO.Path.Combine(oldProjectDirectory, FILENAME);
|
||
destPath = System.IO.Path.Combine(newProjectDirectory, FILENAME);
|
||
this.version = ver;
|
||
}
|
||
|
||
public void Migrate()
|
||
{
|
||
try
|
||
{
|
||
if (version.CompareTo(new Version(2, 7)) >= 0)
|
||
{
|
||
MigrateDirect();
|
||
}
|
||
else
|
||
{
|
||
JObject jsonObject = StringUtils.getValidJson(sourcePath);
|
||
if (version.CompareTo(new Version(2, 7)) < 0)
|
||
{
|
||
Convert(ref jsonObject);
|
||
}
|
||
StringBuilder newJsContent = new StringBuilder();
|
||
newJsContent.Append("var " + DATANAME + " = ");
|
||
newJsContent.Append(jsonObject.ToString());
|
||
File.WriteAllText(destPath, newJsContent.ToString());
|
||
}
|
||
ErrorLogger.LogError("迁移project/" + FILENAME + "文件完成。");
|
||
}
|
||
catch (Exception e)
|
||
{
|
||
ErrorLogger.LogError("迁移project/" + FILENAME + $"过程中出现错误: {e.Message}", "red");
|
||
}
|
||
}
|
||
|
||
void MigrateDirect()
|
||
{
|
||
FileUtils.CopyFile(sourcePath, destPath, FILENAME);
|
||
}
|
||
|
||
void Convert(ref JObject jsonObject)
|
||
{
|
||
//2.7之前items.js有items,itemEffect, itemEffectTip, useItemEvent, useItemEffect, canUseItemEffect, equipCondition七个键
|
||
//新建一个items对象,迁移其他对象中的内容
|
||
JObject newItemDatas = (JObject)jsonObject["items"],
|
||
itemEffect = (JObject)jsonObject["itemEffect"],
|
||
itemEffectTip = (JObject)jsonObject["itemEffectTip"],
|
||
useItemEvent = (JObject)jsonObject["useItemEvent"],
|
||
useItemEffect = (JObject)jsonObject[" useItemEffect"],
|
||
canUseItemEffect = (JObject)jsonObject["canUseItemEffect"],
|
||
equipCondition = (JObject)jsonObject["equipCondition"];
|
||
string[] arr = ["itemEffect", "itemEffectTip", "useItemEvent", "useItemEffect", "canUseItemEffect", "equipCondition"];
|
||
foreach (string ele in arr)
|
||
{
|
||
JObject eleData = (JObject)jsonObject[ele];
|
||
if (eleData == null || eleData.Count == 0) { continue; }
|
||
foreach (JProperty prop in eleData.Properties())
|
||
{
|
||
string key = prop.Name,
|
||
valueString = prop.Value.ToString();
|
||
valueString = StringUtils.ReplaceOldNames(valueString, version); //危险操作
|
||
if (newItemDatas.ContainsKey(key))
|
||
{
|
||
JObject itemData = (JObject)newItemDatas[key];
|
||
if (ele == "itemEffectTip")
|
||
{
|
||
valueString = "${" + valueString + "}";
|
||
}
|
||
itemData[ele] = valueString;
|
||
}
|
||
}
|
||
}
|
||
foreach (JProperty prop in newItemDatas.Properties())
|
||
{
|
||
string key = prop.Name;
|
||
JObject perData = (JObject)prop.Value;
|
||
if (perData["cls"].ToString() == "keys")
|
||
{
|
||
perData["cls"] = "tools";
|
||
perData["hideInToolbox"] = true;
|
||
}
|
||
}
|
||
if (newItemDatas.ContainsKey("snow"))
|
||
{
|
||
newItemDatas["freezeBadge"] = newItemDatas["snow"];
|
||
newItemDatas.Remove("snow");
|
||
}
|
||
jsonObject = newItemDatas; //直接赋值操作需要加ref
|
||
}
|
||
}
|
||
}
|