예제 #1
0
 public static void Load(string configFolderPath)
 {
     ConfigFolderPath = configFolderPath;
     AllColors.AddAllColors();
     AllSideEffects.AddAllSideEffects();
     AllScriptExecuteSettings.AddAllScriptExecuteSettings();
     AllBuffs.AddAllBuffs();
     AllCards.AddAllCards();
     AllBuilds.AddAllBuilds();
     AllLevels.AddAllLevels();
     AllStories.AddAllStories();
     AllCards.RefreshAllCardXML();
 }
예제 #2
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();
        }
    }