예제 #1
0
        public static DM_ImbueEffect ParseImbueEffect(ImbueEffectPreset imbue)
        {
            var template = new DM_ImbueEffect
            {
                StatusID    = imbue.PresetID,
                Name        = imbue.Name,
                Description = imbue.Description
            };

            template.Effects = new List <DM_EffectTransform>();
            foreach (Transform child in imbue.transform)
            {
                var effectsChild = DM_EffectTransform.ParseTransform(child);

                if (effectsChild.ChildEffects.Count > 0 || effectsChild.Effects.Count > 0) // || effectsChild.EffectConditions.Count > 0)
                {
                    template.Effects.Add(effectsChild);
                }
            }

            return(template);
        }
        public static void ParseAllEffects()
        {
            var parsedIdentifiers = new List <string>();

            string dir = Serializer.Folders.Effects;

            if (References.RPM_EFFECT_PRESETS is Dictionary <int, EffectPreset> dict)
            {
                SL.Log("Parsing " + dict.Count + " EffectPresets!");

                foreach (EffectPreset preset in dict.Values)
                {
                    if (preset is ImbueEffectPreset imbuePreset)
                    {
                        var name     = imbuePreset.Name?.Trim();
                        var template = DM_ImbueEffect.ParseImbueEffect(imbuePreset);
                        ListManager.ImbueEffects.Add(template.StatusID.ToString(), template);
                        Serializer.SaveToXml(dir, name, template);
                    }
                    else if (preset.GetComponent <StatusEffect>() is StatusEffect status)
                    {
                        if (string.IsNullOrEmpty(status.IdentifierName) || parsedIdentifiers.Contains(status.IdentifierName))
                        {
                            continue;
                        }
                        var name = status.IdentifierName;
                        parsedIdentifiers.Add(status.IdentifierName);

                        var template = ParseStatusEffect(status);
                        ListManager.Effects.Add(template.PresetID.ToString(), template);
                        Serializer.SaveToXml(dir, name, template);
                    }
                }
            }
            else
            {
                SL.LogError("Could not find Effect Prefabs!");
            }

            int manualID = 1000;

            if (References.RPM_STATUS_EFFECTS is Dictionary <string, StatusEffect> statusDict)
            {
                SL.Log("Parsing " + statusDict.Count + " StatusEffect Prefabs! (before dupe check)");

                foreach (var status in statusDict.Values)
                {
                    //SL.Log(status.name);

                    if (string.IsNullOrEmpty(status.IdentifierName) || parsedIdentifiers.Contains(status.IdentifierName))
                    {
                        continue;
                    }

                    var template = ParseStatusEffect(status);

                    if (!string.IsNullOrEmpty(template.Name?.Trim()))
                    {
                        if (template.PresetID == -1)
                        {
                            manualID++;
                            template.PresetID = manualID;
                        }

                        ListManager.Effects.Add(template.PresetID.ToString(), template);
                        Serializer.SaveToXml(dir, status.IdentifierName, template);
                    }
                }
            }
        }