Exemplo n.º 1
0
 private void SaveStory()
 {
     ChapterMap?.SaveChapter();
     AllStories.RefreshStoryXML(Cur_Story);
     AllStories.ReloadStoryXML();
     SetStory(AllStories.GetStory("DefaultStory", CloneVariantUtils.OperationType.Clone));
     NoticeManager.Instance.ShowInfoPanelCenter("Success", 0, 1f);
 }
Exemplo n.º 2
0
    /// <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();
        }
    }
Exemplo n.º 3
0
    /// <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();
        }
    }
Exemplo n.º 4
0
    /// <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();
        }
    }