private void SaveStory() { ChapterMap?.SaveChapter(); AllStories.RefreshStoryXML(Cur_Story); AllStories.ReloadStoryXML(); SetStory(AllStories.GetStory("DefaultStory", CloneVariantUtils.OperationType.Clone)); NoticeManager.Instance.ShowInfoPanelCenter("Success", 0, 1f); }
/// <summary> /// Can only be executed in StoryEditor/CardEditor/LevelEditor /// </summary> public static void RenameLevel(LevelTypes levelType, string levelName_en_ori, Level newLevel) { string text; using (StreamReader sr = new StreamReader(LevelDefaultXMLDict[levelType])) { text = sr.ReadToEnd(); } XmlDocument doc = new XmlDocument(); doc.LoadXml(text); XmlElement allLevel = doc.DocumentElement; SortedDictionary <string, XmlElement> levelNodesDict = new SortedDictionary <string, XmlElement>(); foreach (XmlElement node in allLevel.ChildNodes) { string name = node.Attributes["name_en"].Value; if (name != levelName_en_ori && name != newLevel.LevelNames["en"]) { levelNodesDict.Add(name, node); } } allLevel.RemoveAll(); newLevel.ExportToXML(allLevel); foreach (KeyValuePair <string, XmlElement> kv in levelNodesDict) { allLevel.AppendChild(kv.Value); } using (StreamWriter sw = new StreamWriter(LevelDefaultXMLDict[levelType])) { doc.Save(sw); } ReloadLevelXML(); // 从Story中移除该Level HashSet <string> changeList = new HashSet <string>(); foreach (KeyValuePair <string, Story> kv in AllStories.StoryDict) { foreach (KeyValuePair <int, Chapter> _kv in kv.Value.Chapters) { foreach (KeyValuePair <int, Level> KV in _kv.Value.Levels) { if (KV.Value.LevelNames["en"].Equals(levelName_en_ori)) { changeList.Add(kv.Key); KV.Value.LevelNames["en"] = newLevel.LevelNames["en"]; } } } } foreach (string storyName in changeList) { Story story = AllStories.StoryDict[storyName]; AllStories.RefreshStoryXML(story); AllStories.ReloadStoryXML(); } }
/// <summary> /// Can only be executed in StoryEditor/CardEditor/LevelEditor /// </summary> public static void DeleteLevel(LevelTypes levelType, string levelName_en) { string text; using (StreamReader sr = new StreamReader(LevelDefaultXMLDict[levelType])) { text = sr.ReadToEnd(); } XmlDocument doc = new XmlDocument(); doc.LoadXml(text); XmlElement allLevel = doc.DocumentElement; SortedDictionary <string, XmlElement> levelNodesDict = new SortedDictionary <string, XmlElement>(); foreach (XmlElement node in allLevel.ChildNodes) { string name = node.Attributes["name_en"].Value; if (name != levelName_en) { levelNodesDict.Add(name, node); } } allLevel.RemoveAll(); foreach (KeyValuePair <string, XmlElement> kv in levelNodesDict) { allLevel.AppendChild(kv.Value); } using (StreamWriter sw = new StreamWriter(LevelDefaultXMLDict[levelType])) { doc.Save(sw); } ReloadLevelXML(); // 从Story中移除该Level SortedDictionary <string, SortedDictionary <int, List <int> > > removeList = new SortedDictionary <string, SortedDictionary <int, List <int> > >(); foreach (KeyValuePair <string, Story> kv in AllStories.StoryDict) { removeList.Add(kv.Key, new SortedDictionary <int, List <int> >()); foreach (KeyValuePair <int, Chapter> _kv in kv.Value.Chapters) { removeList[kv.Key].Add(_kv.Key, new List <int>()); foreach (KeyValuePair <int, Level> KV in _kv.Value.Levels) { if (KV.Value.LevelNames["en"].Equals(levelName_en)) { removeList[kv.Key][_kv.Key].Add(KV.Key); } } } } foreach (KeyValuePair <string, SortedDictionary <int, List <int> > > kv in removeList) { Story story = AllStories.StoryDict[kv.Key]; foreach (KeyValuePair <int, List <int> > _kv in kv.Value) { Chapter chapter = story.Chapters[_kv.Key]; foreach (int i in _kv.Value) { chapter.Levels.Remove(i); } } AllStories.RefreshStoryXML(story); AllStories.ReloadStoryXML(); } }
/// <summary> /// Can only be executed in StoryEditor/CardEditor/LevelEditor /// </summary> public static void DeleteCard(int cardID) { string text; using (StreamReader sr = new StreamReader(CardsXMLFile)) { text = sr.ReadToEnd(); } XmlDocument doc = new XmlDocument(); doc.LoadXml(text); XmlElement allCards = doc.DocumentElement; SortedDictionary <int, XmlElement> cardNodesDict = new SortedDictionary <int, XmlElement>(); foreach (XmlElement node in allCards.ChildNodes) { int id = int.Parse(node.Attributes["id"].Value); if (cardID != id) { cardNodesDict.Add(id, node); } } allCards.RemoveAll(); foreach (KeyValuePair <int, XmlElement> kv in cardNodesDict) { allCards.AppendChild(kv.Value); } using (StreamWriter sw = new StreamWriter(CardsXMLFile)) { doc.Save(sw); } ReloadCardXML(); //从 Story、Builds、 Levels、和AddCard类型的SideEffect中移除该卡片ID //Story List <Story> refreshStories = new List <Story>(); foreach (KeyValuePair <string, Story> kv in AllStories.StoryDict) { bool thisNeedsRefresh = false; foreach (KeyValuePair <int, BuildInfo> _kv in kv.Value.PlayerBuildInfos) { if (_kv.Value.M_BuildCards.CardSelectInfos.ContainsKey(cardID)) { _kv.Value.M_BuildCards.CardSelectInfos.Remove(cardID); thisNeedsRefresh = true; } } if (thisNeedsRefresh) { refreshStories.Add(kv.Value); kv.Value.RefreshBaseCardLimitDict(); } } foreach (Story story in refreshStories) { AllStories.RefreshStoryXML(story); } if (refreshStories.Count > 0) { AllStories.ReloadStoryXML(); } //Build bool buildXMLNeedsReload = false; Dictionary <BuildGroups, List <BuildInfo> > refreshBuildInfoDict = new Dictionary <BuildGroups, List <BuildInfo> >(); foreach (KeyValuePair <BuildGroups, BuildGroup> kv in AllBuilds.BuildGroupDict) { refreshBuildInfoDict.Add(kv.Key, new List <BuildInfo>()); foreach (KeyValuePair <string, BuildInfo> _kv in kv.Value.Builds) { if (_kv.Value.M_BuildCards.CardSelectInfos.ContainsKey(cardID)) { _kv.Value.M_BuildCards.CardSelectInfos.Remove(cardID); refreshBuildInfoDict[kv.Key].Add(_kv.Value); buildXMLNeedsReload = true; } } } foreach (KeyValuePair <BuildGroups, List <BuildInfo> > kv in refreshBuildInfoDict) { foreach (BuildInfo bi in kv.Value) { AllBuilds.RefreshBuildXML(kv.Key, bi); } } if (buildXMLNeedsReload) { AllBuilds.ReloadBuildXML(); } //Levels List <Level> refreshLevel = new List <Level>(); foreach (KeyValuePair <LevelTypes, SortedDictionary <string, Level> > kv in AllLevels.LevelDict) { foreach (KeyValuePair <string, Level> _kv in kv.Value) { bool thisNeedsRefresh = _kv.Value.DeleteCard(cardID); refreshLevel.Add(_kv.Value); } } foreach (Level level in refreshLevel) { AllLevels.RefreshLevelXML(level); } if (refreshLevel.Count > 0) { AllLevels.ReloadLevelXML(); } //SideEffect, ICardDeckLinked bool sideEffectNeedsReload = false; foreach (KeyValuePair <int, CardInfo_Base> kv in CardDict) { bool thisCardNeedsRefresh = false; foreach (SideEffectExecute see in kv.Value.SideEffectBundle.SideEffectExecutes) { foreach (SideEffectBase se in see.SideEffectBases) { if (se is ICardDeckLinked link_se) { int value = link_se.GetCardIDSideEffectValue().Value; if (value == cardID) { link_se.GetCardIDSideEffectValue().SetValue(((int)EmptyCardTypes.NoCard).ToString()); sideEffectNeedsReload = true; thisCardNeedsRefresh = true; } } } } if (thisCardNeedsRefresh) { RefreshCardXML(kv.Value); } } if (sideEffectNeedsReload) { ReloadCardXML(); } }