diff --git a/VPet.ModMaker/Models/ModMaker.cs b/VPet.ModMaker/Models/ModMaker.cs
index a36830c..2e195ba 100644
--- a/VPet.ModMaker/Models/ModMaker.cs
+++ b/VPet.ModMaker/Models/ModMaker.cs
@@ -53,7 +53,8 @@ public class ModMaker : MainPlugin
foreach (var pet in MW.Pets)
{
var petModel = new PetModel();
- petModel.Id.Value = pet.Name;
+ petModel.SourceId = pet.Name;
+ petModel.Id.Value = pet.Name + " (来自本体)".Translate();
ModMakerInfo.Pets.Add(petModel);
}
//Maker.ModMaker = this;
diff --git a/VPet.ModMaker/Models/ModMakerInfo.cs b/VPet.ModMaker/Models/ModMakerInfo.cs
index a6f127f..787adfa 100644
--- a/VPet.ModMaker/Models/ModMakerInfo.cs
+++ b/VPet.ModMaker/Models/ModMakerInfo.cs
@@ -32,5 +32,8 @@ public static class ModMakerInfo
///
public static int GameVersion { get; set; } = 100;
+ ///
+ /// 本体的宠物
+ ///
public static List Pets { get; } = new();
}
diff --git a/VPet.ModMaker/Models/ModModel/ModInfoModel.cs b/VPet.ModMaker/Models/ModModel/ModInfoModel.cs
index 87296b4..5c589d0 100644
--- a/VPet.ModMaker/Models/ModModel/ModInfoModel.cs
+++ b/VPet.ModMaker/Models/ModModel/ModInfoModel.cs
@@ -96,7 +96,7 @@ public class ModInfoModel : I18nModel
///
/// 宠物
///
- public ObservableCollection Pets { get; } = new(ModMakerInfo.Pets);
+ public ObservableCollection Pets { get; } = new();
///
/// 其它I18n数据
@@ -139,15 +139,25 @@ public class ModInfoModel : I18nModel
LowTexts.Add(new(lowText));
foreach (var selectText in loader.SelectTexts)
SelectTexts.Add(new(selectText));
+ // 缓存pets
+ var pets = new List();
foreach (var pet in loader.Pets)
{
var petModel = new PetModel(pet);
- Pets.Add(petModel);
+ pets.Add(petModel);
foreach (var p in pet.path)
- {
LoadAnime(petModel, p);
- }
}
+ // 先载入本体宠物
+ foreach (var pet in ModMakerInfo.Pets)
+ {
+ // 确保Id不重复
+ if (pets.All(i => i.Id.Value != pet.SourceId))
+ Pets.Add(pet);
+ }
+ // 再载入模组宠物
+ foreach (var pet in pets)
+ Pets.Add(pet);
foreach (var lang in loader.I18nDatas)
I18nDatas.Add(lang.Key, lang.Value);
diff --git a/VPet.ModMaker/Models/ModModel/PetModel.cs b/VPet.ModMaker/Models/ModModel/PetModel.cs
index 22e8059..7dacebe 100644
--- a/VPet.ModMaker/Models/ModModel/PetModel.cs
+++ b/VPet.ModMaker/Models/ModModel/PetModel.cs
@@ -1,6 +1,7 @@
using HKW.HKWViewModels.SimpleObservable;
using LinePutScript;
using LinePutScript.Converter;
+using LinePutScript.Localization.WPF;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -20,6 +21,11 @@ namespace VPet.ModMaker.Models;
///
public class PetModel : I18nModel
{
+ ///
+ /// 显示的Id 若不为空则判断为来自本体的宠物
+ ///
+ public string? SourceId { get; set; } = null;
+
///
/// Id
///
@@ -92,6 +98,7 @@ public class PetModel : I18nModel
public PetModel()
{
+ PetNameId.Value = $"{Id.Value}_{nameof(PetNameId)}";
DescriptionId.Value = $"{Id.Value}_{nameof(DescriptionId)}";
Id.ValueChanged += (o, n) =>
{
@@ -208,6 +215,8 @@ public class PetModel : I18nModel
/// 路径
public void Save(string path)
{
+ if (SourceId is not null)
+ Id.Value = SourceId;
if (IsSimplePetModel)
{
SaveSimplePetInfo(path);
@@ -242,6 +251,8 @@ public class PetModel : I18nModel
anime.Save(petAnimePath);
foreach (var anime in FoodAnimes)
anime.Save(petAnimePath);
+ if (SourceId is not null)
+ Id.Value = SourceId + " (来自本体)".Translate();
}
private void SaveSimplePetInfo(string path)