From ad7064665691573572d2246d8a46b446a7067967 Mon Sep 17 00:00:00 2001 From: Hakoyu Date: Fri, 13 Oct 2023 22:08:52 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=BB=93=E6=9E=84=20?= =?UTF-8?q?=E5=BC=95=E7=94=A8=E6=9C=AC=E4=BD=93=E7=9A=84=E5=AE=A0=E7=89=A9?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- VPet.ModMaker/Models/ModMaker.cs | 9 + VPet.ModMaker/Models/ModMakerInfo.cs | 8 + VPet.ModMaker/Models/ModModel/FoodModel.cs | 29 +++ VPet.ModMaker/Models/ModModel/ModInfoModel.cs | 171 +++--------------- VPet.ModMaker/Models/ModModel/PetModel.cs | 163 +++++++++++++++++ .../ModEdit/FoodEdit/FoodEditWindowVM.cs | 27 +++ .../ViewModels/ModEdit/MoveEdit/MovePageVM.cs | 8 +- .../ViewModels/ModEdit/PetEdit/PetPageVM.cs | 18 +- .../ViewModels/ModEdit/WorkEdit/WorkPageVM.cs | 8 +- .../ModEdit/FoodEdit/FoodEditWindow.xaml | 22 ++- .../Views/ModEdit/ModEditWindow.xaml | 12 +- .../ModEdit/WorkEdit/WorkEditWindow.xaml | 6 +- 12 files changed, 309 insertions(+), 172 deletions(-) diff --git a/VPet.ModMaker/Models/ModMaker.cs b/VPet.ModMaker/Models/ModMaker.cs index f951278..a36830c 100644 --- a/VPet.ModMaker/Models/ModMaker.cs +++ b/VPet.ModMaker/Models/ModMaker.cs @@ -47,6 +47,15 @@ public class ModMaker : MainPlugin { // 载入ModMaker资源 Maker = new ModMakerWindow(); + // 设置游戏版本 + ModMakerInfo.GameVersion = MW.version; + // 载入本体宠物 + foreach (var pet in MW.Pets) + { + var petModel = new PetModel(); + petModel.Id.Value = pet.Name; + ModMakerInfo.Pets.Add(petModel); + } //Maker.ModMaker = this; Maker.Show(); Maker.Closed += Maker_Closed; diff --git a/VPet.ModMaker/Models/ModMakerInfo.cs b/VPet.ModMaker/Models/ModMakerInfo.cs index 0d24e91..a6f127f 100644 --- a/VPet.ModMaker/Models/ModMakerInfo.cs +++ b/VPet.ModMaker/Models/ModMakerInfo.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using VPet.ModMaker.Models.ModModel; namespace VPet.ModMaker.Models; @@ -25,4 +26,11 @@ public static class ModMakerInfo /// 信息文件 /// public const string InfoFile = "info.lps"; + + /// + /// 游戏版本 + /// + public static int GameVersion { get; set; } = 100; + + public static List Pets { get; } = new(); } diff --git a/VPet.ModMaker/Models/ModModel/FoodModel.cs b/VPet.ModMaker/Models/ModModel/FoodModel.cs index f2f4e1f..e48c5c7 100644 --- a/VPet.ModMaker/Models/ModModel/FoodModel.cs +++ b/VPet.ModMaker/Models/ModModel/FoodModel.cs @@ -87,6 +87,10 @@ public class FoodModel : I18nModel /// public ObservableValue Image { get; } = new(); + public ObservableValue ReferencePrice { get; } = new(); + + private readonly Food _food = new(); + public FoodModel() { DescriptionId.Value = $"{Id.Value}_{nameof(DescriptionId)}"; @@ -94,6 +98,19 @@ public class FoodModel : I18nModel { DescriptionId.Value = $"{n}_{nameof(DescriptionId)}"; }; + ReferencePrice.AddNotifyReceiver( + Strength, + StrengthFood, + StrengthDrink, + Feeling, + Health, + Likability, + Exp + ); + ReferencePrice.NotifyReceived += (ref double v) => + { + v = Math.Floor(SetValueToFood(_food).RealPrice); + }; } public FoodModel(FoodModel model) @@ -155,6 +172,18 @@ public class FoodModel : I18nModel }; } + public Food SetValueToFood(Food food) + { + food.Strength = Strength.Value; + food.StrengthFood = StrengthFood.Value; + food.StrengthDrink = StrengthDrink.Value; + food.Feeling = Feeling.Value; + food.Health = Health.Value; + food.Likability = Likability.Value; + food.Exp = Exp.Value; + return food; + } + public void Close() { Image.Value?.StreamSource?.Close(); diff --git a/VPet.ModMaker/Models/ModModel/ModInfoModel.cs b/VPet.ModMaker/Models/ModModel/ModInfoModel.cs index 57b68bd..da65a49 100644 --- a/VPet.ModMaker/Models/ModModel/ModInfoModel.cs +++ b/VPet.ModMaker/Models/ModModel/ModInfoModel.cs @@ -56,12 +56,12 @@ public class ModInfoModel : I18nModel /// /// 支持的游戏版本 /// - public ObservableValue GameVersion { get; } = new(); + public ObservableValue GameVersion { get; } = new(ModMakerInfo.GameVersion); /// /// 模组版本 /// - public ObservableValue ModVersion { get; } = new(); + public ObservableValue ModVersion { get; } = new(100); /// /// 封面 @@ -96,7 +96,7 @@ public class ModInfoModel : I18nModel /// /// 宠物 /// - public ObservableCollection Pets { get; } = new(); + public ObservableCollection Pets { get; } = new(ModMakerInfo.Pets); /// /// 其它I18n数据 @@ -106,8 +106,7 @@ public class ModInfoModel : I18nModel /// /// 需要保存的I18n数据 /// - - private readonly Dictionary> _saveI18nDatas = new(); + public static Dictionary> SaveI18nDatas { get; } = new(); public ModInfoModel() { @@ -125,8 +124,8 @@ public class ModInfoModel : I18nModel Id.Value = loader.Name; DescriptionId.Value = loader.Intro; Author.Value = loader.Author; - GameVersion.Value = loader.GameVer.ToString(); - ModVersion.Value = loader.Ver.ToString(); + GameVersion.Value = loader.GameVer; + ModVersion.Value = loader.Ver; ItemID = loader.ItemID; AuthorID = loader.AuthorID; var imagePath = Path.Combine(loader.ModPath.FullName, "icon.png"); @@ -144,7 +143,6 @@ public class ModInfoModel : I18nModel { var petModel = new PetModel(pet); Pets.Add(petModel); - // TODO: 动画加载 foreach (var p in pet.path) { LoadAnime(petModel, p); @@ -317,6 +315,7 @@ public class ModInfoModel : I18nModel /// 路径 public void SaveTo(string path) { + SaveI18nDatas.Clear(); // 保存模型信息 SaveModInfo(path); // 保存模组数据 @@ -325,6 +324,7 @@ public class ModInfoModel : I18nModel SaveText(path); SaveI18nData(path); SaveImage(path); + SaveI18nDatas.Clear(); } /// @@ -337,9 +337,9 @@ public class ModInfoModel : I18nModel if (File.Exists(modInfoFile) is false) File.Create(modInfoFile).Close(); - _saveI18nDatas.Clear(); + SaveI18nDatas.Clear(); foreach (var cultureName in I18nHelper.Current.CultureNames) - _saveI18nDatas.Add(cultureName, new()); + SaveI18nDatas.Add(cultureName, new()); var lps = new LPS() { @@ -368,11 +368,6 @@ public class ModInfoModel : I18nModel File.WriteAllText(modInfoFile, lps.ToString()); } - #region SavePet - /// - /// 保存宠物 - /// - /// 路径 private void SavePets(string path) { var petPath = Path.Combine(path, "pet"); @@ -385,137 +380,13 @@ public class ModInfoModel : I18nModel Directory.CreateDirectory(petPath); foreach (var pet in Pets) { - foreach (var cultureName in I18nHelper.Current.CultureNames) - { - _saveI18nDatas[cultureName].TryAdd( - pet.Id.Value, - pet.I18nDatas[cultureName].Name.Value - ); - _saveI18nDatas[cultureName].TryAdd( - pet.DescriptionId.Value, - pet.I18nDatas[cultureName].Description.Value - ); - } - var petFile = Path.Combine(petPath, $"{pet.Id.Value}.lps"); - if (File.Exists(petFile) is false) - File.Create(petFile).Close(); - var lps = new LPS(); - SavePetInfo(lps, pet); - SaveWorksInfo(lps, pet); - SaveMoveInfo(lps, pet); - File.WriteAllText(petFile, lps.ToString()); - - var petAnimePath = Path.Combine(petPath, pet.Id.Value); - foreach (var animeType in pet.Animes) - animeType.Save(petAnimePath); + pet.Save(petPath); } + // 如果没有一个完成保存, 则删除文件夹 + if (Directory.EnumerateFiles(petPath).Any() is false) + Directory.Delete(petPath); } - /// - /// 保存移动信息 - /// - /// - /// - void SaveMoveInfo(LPS lps, PetModel pet) - { - foreach (var move in pet.Moves) - { - lps.Add(LPSConvert.SerializeObjectToLine(move.ToMove(), "move")); - } - } - - /// - /// 保存工作信息 - /// - /// - /// - void SaveWorksInfo(LPS lps, PetModel pet) - { - foreach (var work in pet.Works) - { - lps.Add(LPSConvert.SerializeObjectToLine(work.ToWork(), "work")); - foreach (var cultureName in I18nHelper.Current.CultureNames) - { - _saveI18nDatas[cultureName].TryAdd( - work.Id.Value, - work.I18nDatas[cultureName].Name.Value - ); - } - } - } - - /// - /// 保存宠物信息 - /// - /// - /// - private void SavePetInfo(LPS lps, PetModel pet) - { - lps.Add( - new Line("pet", pet.Id.Value) - { - new Sub("intor", pet.DescriptionId.Value), - new Sub("path", pet.Id.Value), - new Sub("petname", pet.Id.Value) - } - ); - lps.Add( - new Line("touchhead") - { - new Sub("px", pet.TouchHeadRect.Value.X.Value), - new Sub("py", pet.TouchHeadRect.Value.Y.Value), - new Sub("sw", pet.TouchHeadRect.Value.Width.Value), - new Sub("sh", pet.TouchHeadRect.Value.Height.Value), - } - ); - lps.Add( - new Line("touchraised") - { - new Sub("happy_px", pet.TouchRaisedRect.Value.Happy.Value.X.Value), - new Sub("happy_py", pet.TouchRaisedRect.Value.Happy.Value.Y.Value), - new Sub("happy_sw", pet.TouchRaisedRect.Value.Happy.Value.Width.Value), - new Sub("happy_sh", pet.TouchRaisedRect.Value.Happy.Value.Height.Value), - // - new Sub("nomal_px", pet.TouchRaisedRect.Value.Nomal.Value.X.Value), - new Sub("nomal_py", pet.TouchRaisedRect.Value.Nomal.Value.Y.Value), - new Sub("nomal_sw", pet.TouchRaisedRect.Value.Nomal.Value.Width.Value), - new Sub("nomal_sh", pet.TouchRaisedRect.Value.Nomal.Value.Height.Value), - // - new Sub("poorcondition_px", pet.TouchRaisedRect.Value.PoorCondition.Value.X.Value), - new Sub("poorcondition_py", pet.TouchRaisedRect.Value.PoorCondition.Value.Y.Value), - new Sub( - "poorcondition_sw", - pet.TouchRaisedRect.Value.PoorCondition.Value.Width.Value - ), - new Sub( - "poorcondition_sh", - pet.TouchRaisedRect.Value.PoorCondition.Value.Height.Value - ), - // - new Sub("ill_px", pet.TouchRaisedRect.Value.Ill.Value.X.Value), - new Sub("ill_py", pet.TouchRaisedRect.Value.Ill.Value.Y.Value), - new Sub("ill_sw", pet.TouchRaisedRect.Value.Ill.Value.Width.Value), - new Sub("ill_sh", pet.TouchRaisedRect.Value.Ill.Value.Height.Value), - } - ); - lps.Add( - new Line("raisepoint") - { - new Sub("happy_x", pet.RaisePoint.Value.Happy.Value.X.Value), - new Sub("happy_y", pet.RaisePoint.Value.Happy.Value.Y.Value), - // - new Sub("nomal_x", pet.RaisePoint.Value.Nomal.Value.X.Value), - new Sub("nomal_y", pet.RaisePoint.Value.Nomal.Value.Y.Value), - // - new Sub("poorcondition_x", pet.RaisePoint.Value.PoorCondition.Value.X.Value), - new Sub("poorcondition_y", pet.RaisePoint.Value.PoorCondition.Value.Y.Value), - // - new Sub("ill_x", pet.RaisePoint.Value.Ill.Value.X.Value), - new Sub("ill_y", pet.RaisePoint.Value.Ill.Value.Y.Value), - } - ); - } - #endregion /// /// 保存食物 /// @@ -539,11 +410,11 @@ public class ModInfoModel : I18nModel lps.Add(LPSConvert.SerializeObjectToLine(food.ToFood(), "food")); foreach (var cultureName in I18nHelper.Current.CultureNames) { - _saveI18nDatas[cultureName].TryAdd( + SaveI18nDatas[cultureName].TryAdd( food.Id.Value, food.I18nDatas[cultureName].Name.Value ); - _saveI18nDatas[cultureName].TryAdd( + SaveI18nDatas[cultureName].TryAdd( food.DescriptionId.Value, food.I18nDatas[cultureName].Description.Value ); @@ -588,11 +459,11 @@ public class ModInfoModel : I18nModel lps.Add(LPSConvert.SerializeObjectToLine(text.ToSelectText(), "SelectText")); foreach (var cultureName in I18nHelper.Current.CultureNames) { - _saveI18nDatas[cultureName].TryAdd( + SaveI18nDatas[cultureName].TryAdd( text.Id.Value, text.I18nDatas[cultureName].Text.Value ); - _saveI18nDatas[cultureName].TryAdd( + SaveI18nDatas[cultureName].TryAdd( text.ChooseId.Value, text.I18nDatas[cultureName].Choose.Value ); @@ -617,7 +488,7 @@ public class ModInfoModel : I18nModel lps.Add(LPSConvert.SerializeObjectToLine(text.ToLowText(), "lowfoodtext")); foreach (var cultureName in I18nHelper.Current.CultureNames) { - _saveI18nDatas[cultureName].TryAdd( + SaveI18nDatas[cultureName].TryAdd( text.Id.Value, text.I18nDatas[cultureName].Text.Value ); @@ -642,7 +513,7 @@ public class ModInfoModel : I18nModel lps.Add(LPSConvert.SerializeObjectToLine(text.ToClickText(), "clicktext")); foreach (var cultureName in I18nHelper.Current.CultureNames) { - _saveI18nDatas[cultureName].TryAdd( + SaveI18nDatas[cultureName].TryAdd( text.Id.Value, text.I18nDatas[cultureName].Text.Value ); @@ -666,7 +537,7 @@ public class ModInfoModel : I18nModel var cultureFile = Path.Combine(culturePath, $"{cultureName}.lps"); File.Create(cultureFile).Close(); var lps = new LPS(); - foreach (var data in _saveI18nDatas[cultureName]) + foreach (var data in SaveI18nDatas[cultureName]) lps.Add(new Line(data.Key, data.Value)); File.WriteAllText(cultureFile, lps.ToString()); } diff --git a/VPet.ModMaker/Models/ModModel/PetModel.cs b/VPet.ModMaker/Models/ModModel/PetModel.cs index f9e4c65..8c43a09 100644 --- a/VPet.ModMaker/Models/ModModel/PetModel.cs +++ b/VPet.ModMaker/Models/ModModel/PetModel.cs @@ -1,7 +1,10 @@ using HKW.HKWViewModels.SimpleObservable; +using LinePutScript; +using LinePutScript.Converter; using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -67,6 +70,8 @@ public class PetModel : I18nModel /// public ObservableCollection Animes { get; } = new(); + public bool IsSimplePetModel { get; } = false; + public PetModel() { DescriptionId.Value = $"{Id.Value}_{nameof(DescriptionId)}"; @@ -152,7 +157,165 @@ public class PetModel : I18nModel Moves.Add(new(move)); } + public PetModel(PetLoader loader, bool isSimplePet) + : this() + { + Id.Value = loader.PetName; + IsSimplePetModel = isSimplePet; + } + public void Close() { } + + #region Save + /// + /// 保存宠物 + /// + /// 路径 + public void Save(string path) + { + if (IsSimplePetModel) + { + SaveSimplePetInfo(path); + return; + } + foreach (var cultureName in I18nHelper.Current.CultureNames) + { + ModInfoModel.SaveI18nDatas[cultureName].TryAdd( + Id.Value, + I18nDatas[cultureName].Name.Value + ); + ModInfoModel.SaveI18nDatas[cultureName].TryAdd( + DescriptionId.Value, + I18nDatas[cultureName].Description.Value + ); + } + var petFile = Path.Combine(path, $"{Id.Value}.lps"); + if (File.Exists(petFile) is false) + File.Create(petFile).Close(); + var lps = new LPS(); + SavePetInfo(lps); + SaveWorksInfo(lps); + SaveMoveInfo(lps); + File.WriteAllText(petFile, lps.ToString()); + + var petAnimePath = Path.Combine(path, Id.Value); + foreach (var animeType in Animes) + animeType.Save(petAnimePath); + } + + private void SaveSimplePetInfo(string path) + { + if (Works.Count == 0 && Moves.Count == 0 && Animes.Count == 0) + return; + var petFile = Path.Combine(path, $"{Id.Value}.lps"); + var lps = new LPS { new Line("pet", Id.Value) { new Sub("path", Id.Value), } }; + SaveWorksInfo(lps); + SaveMoveInfo(lps); + File.WriteAllText(petFile, lps.ToString()); + var petAnimePath = Path.Combine(path, Id.Value); + foreach (var animeType in Animes) + animeType.Save(petAnimePath); + } + + /// + /// 保存移动信息 + /// + /// + /// + void SaveMoveInfo(LPS lps) + { + foreach (var move in Moves) + { + lps.Add(LPSConvert.SerializeObjectToLine(move.ToMove(), "move")); + } + } + + /// + /// 保存工作信息 + /// + /// + /// + void SaveWorksInfo(LPS lps) + { + foreach (var work in Works) + { + lps.Add(LPSConvert.SerializeObjectToLine(work.ToWork(), "work")); + foreach (var cultureName in I18nHelper.Current.CultureNames) + { + ModInfoModel.SaveI18nDatas[cultureName].TryAdd( + work.Id.Value, + work.I18nDatas[cultureName].Name.Value + ); + } + } + } + + /// + /// 保存宠物信息 + /// + /// + /// + private void SavePetInfo(LPS lps) + { + lps.Add( + new Line("pet", Id.Value) + { + new Sub("intor", DescriptionId.Value), + new Sub("path", Id.Value), + new Sub("petname", Id.Value) + } + ); + lps.Add( + new Line("touchhead") + { + new Sub("px", TouchHeadRect.Value.X.Value), + new Sub("py", TouchHeadRect.Value.Y.Value), + new Sub("sw", TouchHeadRect.Value.Width.Value), + new Sub("sh", TouchHeadRect.Value.Height.Value), + } + ); + lps.Add( + new Line("touchraised") + { + new Sub("happy_px", TouchRaisedRect.Value.Happy.Value.X.Value), + new Sub("happy_py", TouchRaisedRect.Value.Happy.Value.Y.Value), + new Sub("happy_sw", TouchRaisedRect.Value.Happy.Value.Width.Value), + new Sub("happy_sh", TouchRaisedRect.Value.Happy.Value.Height.Value), + // + new Sub("nomal_px", TouchRaisedRect.Value.Nomal.Value.X.Value), + new Sub("nomal_py", TouchRaisedRect.Value.Nomal.Value.Y.Value), + new Sub("nomal_sw", TouchRaisedRect.Value.Nomal.Value.Width.Value), + new Sub("nomal_sh", TouchRaisedRect.Value.Nomal.Value.Height.Value), + // + new Sub("poorcondition_px", TouchRaisedRect.Value.PoorCondition.Value.X.Value), + new Sub("poorcondition_py", TouchRaisedRect.Value.PoorCondition.Value.Y.Value), + new Sub("poorcondition_sw", TouchRaisedRect.Value.PoorCondition.Value.Width.Value), + new Sub("poorcondition_sh", TouchRaisedRect.Value.PoorCondition.Value.Height.Value), + // + new Sub("ill_px", TouchRaisedRect.Value.Ill.Value.X.Value), + new Sub("ill_py", TouchRaisedRect.Value.Ill.Value.Y.Value), + new Sub("ill_sw", TouchRaisedRect.Value.Ill.Value.Width.Value), + new Sub("ill_sh", TouchRaisedRect.Value.Ill.Value.Height.Value), + } + ); + lps.Add( + new Line("raisepoint") + { + new Sub("happy_x", RaisePoint.Value.Happy.Value.X.Value), + new Sub("happy_y", RaisePoint.Value.Happy.Value.Y.Value), + // + new Sub("nomal_x", RaisePoint.Value.Nomal.Value.X.Value), + new Sub("nomal_y", RaisePoint.Value.Nomal.Value.Y.Value), + // + new Sub("poorcondition_x", RaisePoint.Value.PoorCondition.Value.X.Value), + new Sub("poorcondition_y", RaisePoint.Value.PoorCondition.Value.Y.Value), + // + new Sub("ill_x", RaisePoint.Value.Ill.Value.X.Value), + new Sub("ill_y", RaisePoint.Value.Ill.Value.Y.Value), + } + ); + } + #endregion } public class I18nPetInfoModel diff --git a/VPet.ModMaker/ViewModels/ModEdit/FoodEdit/FoodEditWindowVM.cs b/VPet.ModMaker/ViewModels/ModEdit/FoodEdit/FoodEditWindowVM.cs index be8623f..45c766c 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/FoodEdit/FoodEditWindowVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/FoodEdit/FoodEditWindowVM.cs @@ -20,17 +20,44 @@ public class FoodEditWindowVM #region Value public FoodModel OldFood { get; set; } public ObservableValue Food { get; } = new(new()); + public ObservableValue AutoSetReferencePrice { get; } = new(false); #endregion #region Command public ObservableCommand AddImageCommand { get; } = new(); public ObservableCommand ChangeImageCommand { get; } = new(); + + public ObservableCommand SetReferencePriceCommand { get; } = new(); #endregion public FoodEditWindowVM() { AddImageCommand.ExecuteEvent += AddImage; ChangeImageCommand.ExecuteEvent += ChangeImage; + AutoSetReferencePrice.ValueChanged += AutoSetReferencePrice_ValueChanged; + SetReferencePriceCommand.ExecuteEvent += SetReferencePriceToPrice; + Food.Value.ReferencePrice.ValueChanged += ReferencePrice_ValueChanged; + } + + private void AutoSetReferencePrice_ValueChanged(bool oldValue, bool newValue) + { + if (newValue) + { + SetReferencePriceToPrice(Food.Value.ReferencePrice.Value); + } + } + + private void ReferencePrice_ValueChanged(double oldValue, double newValue) + { + if (AutoSetReferencePrice.Value) + { + SetReferencePriceToPrice(newValue); + } + } + + private void SetReferencePriceToPrice(double value) + { + Food.Value.Price.Value = value; } public void Close() diff --git a/VPet.ModMaker/ViewModels/ModEdit/MoveEdit/MovePageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/MoveEdit/MovePageVM.cs index 1cb2d18..8625c52 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/MoveEdit/MovePageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/MoveEdit/MovePageVM.cs @@ -91,18 +91,18 @@ public class MovePageVM } } - private void Remove(MoveModel food) + private void Remove(MoveModel model) { if (MessageBox.Show("确定删除吗".Translate(), "", MessageBoxButton.YesNo) is MessageBoxResult.No) return; if (ShowMoves.Value.Count == Moves.Count) { - Moves.Remove(food); + Moves.Remove(model); } else { - ShowMoves.Value.Remove(food); - Moves.Remove(food); + ShowMoves.Value.Remove(model); + Moves.Remove(model); } } } diff --git a/VPet.ModMaker/ViewModels/ModEdit/PetEdit/PetPageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/PetEdit/PetPageVM.cs index fd4f559..cce1231 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/PetEdit/PetPageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/PetEdit/PetPageVM.cs @@ -62,6 +62,11 @@ public class PetPageVM public void Edit(PetModel model) { + if (model.IsSimplePetModel.Value) + { + MessageBox.Show("这是本体自带的宠物, 无法编辑".Translate()); + return; + } var window = new PetEditWindow(); var vm = window.ViewModel; vm.OldPet = model; @@ -81,18 +86,23 @@ public class PetPageVM model.Close(); } - private void Remove(PetModel food) + private void Remove(PetModel model) { + if (model.IsSimplePetModel.Value) + { + MessageBox.Show("这是本体自带的宠物, 无法删除".Translate()); + return; + } if (MessageBox.Show("确定删除吗".Translate(), "", MessageBoxButton.YesNo) is MessageBoxResult.No) return; if (ShowPets.Value.Count == Pets.Count) { - Pets.Remove(food); + Pets.Remove(model); } else { - ShowPets.Value.Remove(food); - Pets.Remove(food); + ShowPets.Value.Remove(model); + Pets.Remove(model); } } } diff --git a/VPet.ModMaker/ViewModels/ModEdit/WorkEdit/WorkPageVM.cs b/VPet.ModMaker/ViewModels/ModEdit/WorkEdit/WorkPageVM.cs index 00eccbb..8ed96e3 100644 --- a/VPet.ModMaker/ViewModels/ModEdit/WorkEdit/WorkPageVM.cs +++ b/VPet.ModMaker/ViewModels/ModEdit/WorkEdit/WorkPageVM.cs @@ -91,18 +91,18 @@ public class WorkPageVM } } - private void Remove(WorkModel food) + private void Remove(WorkModel model) { if (MessageBox.Show("确定删除吗".Translate(), "", MessageBoxButton.YesNo) is MessageBoxResult.No) return; if (ShowWorks.Value.Count == Works.Count) { - Works.Remove(food); + Works.Remove(model); } else { - ShowWorks.Value.Remove(food); - Works.Remove(food); + ShowWorks.Value.Remove(model); + Works.Remove(model); } } } diff --git a/VPet.ModMaker/Views/ModEdit/FoodEdit/FoodEditWindow.xaml b/VPet.ModMaker/Views/ModEdit/FoodEdit/FoodEditWindow.xaml index 9287875..b83fd6b 100644 --- a/VPet.ModMaker/Views/ModEdit/FoodEdit/FoodEditWindow.xaml +++ b/VPet.ModMaker/Views/ModEdit/FoodEdit/FoodEditWindow.xaml @@ -125,6 +125,7 @@ +