private static void SetMaidData(XElement maidXml)
        {
            XElement xelement = maidXml.Element("GUID");
            bool     flag     = xelement == null;

            if (!flag)
            {
                Maid maid  = GameMain.Instance.CharacterMgr.GetMaid((string)xelement);
                bool flag2 = !maid;
                if (!flag2)
                {
                    XElement xelement2 = maidXml.Element("Slots");
                    bool     flag3     = xelement2 == null;
                    if (!flag3)
                    {
                        IEnumerable <XElement> enumerable = xelement2.Elements("Slot");
                        bool flag4 = enumerable == null;
                        if (!flag4)
                        {
                            foreach (XElement slotXml in enumerable)
                            {
                                SceneDataManager.SetSlotData(maid, slotXml);
                            }
                        }
                    }
                }
            }
        }
        private static XElement GetMaidData(Maid maid)
        {
            BackUpMaidData orNullMaidData = BackUpData.GetOrNullMaidData(maid);
            bool           flag           = orNullMaidData == null;
            XElement       result;

            if (flag)
            {
                result = null;
            }
            else
            {
                XElement xelement  = new XElement("Maid");
                XElement xelement2 = new XElement("GUID");
                xelement2.Add(maid.status.guid);
                XElement xelement3 = new XElement("Name");
                xelement3.Add(maid.status.fullNameJpStyle);
                xelement.Add(xelement2);
                xelement.Add(xelement3);
                XElement xelement4 = new XElement("Slots");
                foreach (int slotID in orNullMaidData.slotDataDic.Keys)
                {
                    XElement slotData = SceneDataManager.GetSlotData(maid, slotID);
                    bool     flag2    = slotData == null;
                    if (!flag2)
                    {
                        xelement4.Add(slotData);
                    }
                }
                xelement.Add(xelement4);
                result = xelement;
            }
            return(result);
        }
        public static XElement GetSceneXmlData()
        {
            XElement xelement = new XElement("SceneData");

            xelement.Add(SceneDataManager.GetMaidListData());
            xelement.Add(SceneDataManager.GetObjectListData());
            return(xelement);
        }
        public static void SetSceneXmlData(XElement xmlData)
        {
            BackUpData.Refresh();
            XElement xelement = xmlData.Element("Maids");
            bool     flag     = xelement == null;

            if (!flag)
            {
                SceneDataManager.SetMaidListData(xelement);
            }
        }
        private static void SetMaidListData(XElement maidListXml)
        {
            IEnumerable <XElement> enumerable = maidListXml.Elements("Maid");
            bool flag = enumerable == null;

            if (!flag)
            {
                foreach (XElement maidData in enumerable)
                {
                    SceneDataManager.SetMaidData(maidData);
                }
            }
        }
        private static void SetSlotData(Maid maid, XElement slotXml)
        {
            XElement xelement = slotXml.Element("Category");
            bool     flag     = xelement == null;

            if (!flag)
            {
                int  categoryID = SceneDataManager.GetCategoryID((string)xelement);
                bool flag2      = categoryID == -2;
                if (!flag2)
                {
                    XElement xelement2 = slotXml.Element("ModelFileName");
                    bool     flag3     = xelement2 == null;
                    if (!flag3)
                    {
                        string    text  = (string)xelement2;
                        bool      flag4 = categoryID == -1;
                        TBodySkin tbodySkin;
                        if (flag4)
                        {
                            tbodySkin = maid.body0.goSlot[0];
                        }
                        else
                        {
                            tbodySkin = maid.body0.GetSlot(categoryID);
                        }
                        bool flag5 = tbodySkin.m_strModelFileName != text;
                        if (flag5)
                        {
                            Debug.Log("PartsEdit:" + (string)xelement + "カテゴリのmodelファイルがセーブ時と変わっているため、ロードされません");
                            Debug.Log(text + "→" + tbodySkin.m_strModelFileName);
                        }
                        else
                        {
                            XElement xelement3 = slotXml.Element("ObjectData");
                            bool     flag6     = xelement3 == null;
                            if (!flag6)
                            {
                                SceneDataManager.SetMaidObjectData(maid, categoryID, xelement3);
                            }
                        }
                    }
                }
            }
        }
 public void OnStudioExCallLoadFinishing(Dictionary <string, XElement[]> hConfig)
 {
     try
     {
         string     empty = string.Empty;
         XElement[] array = hConfig.ContainsKey(PluginInfo.Name) ? hConfig[PluginInfo.Name] : null;
         bool       flag  = array != null;
         if (flag)
         {
             XElement xelement     = array[0];
             XElement sceneXmlData = xelement.Element("SceneData");
             SceneDataManager.SetSceneXmlData(sceneXmlData);
         }
     }
     catch (Exception message)
     {
         Debug.Log(message);
     }
 }
 public void OnStudioExCallLeave(Dictionary <string, XElement[]> hConfig)
 {
     try
     {
         XElement xelement = new XElement("PartsEdit");
         xelement.Add(new XElement("PluginVersion", "1.7"));
         xelement.Add(SceneDataManager.GetSceneXmlData());
         XElement[] value = new XElement[]
         {
             xelement
         };
         KeyValuePair <string, XElement[]> keyValuePair = new KeyValuePair <string, XElement[]>(PluginInfo.Name, value);
         this.hPluginStudioExCoPluginManager.SendMessage("OnStudioExCallWriteXML", keyValuePair);
     }
     catch (Exception message)
     {
         Debug.Log(message);
     }
 }
        private static XElement GetMaidListData()
        {
            XElement     xelement     = new XElement("Maids");
            CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
            int          maidCount    = characterMgr.GetMaidCount();

            for (int i = 0; i < maidCount; i++)
            {
                Maid maid = characterMgr.GetMaid(i);
                bool flag = !maid;
                if (!flag)
                {
                    XElement maidData = SceneDataManager.GetMaidData(maid);
                    bool     flag2    = maidData == null;
                    if (!flag2)
                    {
                        xelement.Add(maidData);
                    }
                }
            }
            return(xelement);
        }
        private static XElement GetSlotData(Maid maid, int slotID)
        {
            bool       flag = slotID == -1;
            TBodySkin  tbodySkin;
            GameObject gameObject;

            if (flag)
            {
                tbodySkin  = maid.body0.goSlot[0];
                gameObject = maid.body0.m_Bones.gameObject;
            }
            else
            {
                tbodySkin  = maid.body0.GetSlot(slotID);
                gameObject = tbodySkin.obj;
            }
            bool     flag2 = !gameObject;
            XElement result;

            if (flag2)
            {
                result = null;
            }
            else
            {
                BackUpSlotData orNullMaidSlotData = BackUpData.GetOrNullMaidSlotData(maid, slotID);
                bool           flag3 = orNullMaidSlotData == null;
                if (flag3)
                {
                    result = null;
                }
                else
                {
                    bool flag4 = !orNullMaidSlotData.objectDataDic.ContainsKey(gameObject);
                    if (flag4)
                    {
                        result = null;
                    }
                    else
                    {
                        XElement xelement  = new XElement("Slot");
                        XElement xelement2 = new XElement("Category");
                        bool     flag5     = slotID == -1;
                        if (flag5)
                        {
                            xelement2.Add("base");
                        }
                        else
                        {
                            XContainer   xcontainer = xelement2;
                            TBody.SlotID slotID2    = (TBody.SlotID)slotID;
                            xcontainer.Add(slotID2.ToString());
                        }
                        xelement.Add(xelement2);
                        XElement xelement3 = new XElement("ModelFileName");
                        xelement3.Add(tbodySkin.m_strModelFileName);
                        xelement.Add(xelement3);
                        XElement maidObjectData = SceneDataManager.GetMaidObjectData(maid, slotID);
                        xelement.Add(maidObjectData);
                        result = xelement;
                    }
                }
            }
            return(result);
        }
        private static void SetMaidObjectData(Maid maid, int slotID, XElement objectXml)
        {
            bool       flag = slotID == -1;
            GameObject gameObject;

            if (flag)
            {
                TBodySkin tbodySkin = maid.body0.goSlot[0];
                gameObject = maid.body0.m_Bones.gameObject;
            }
            else
            {
                TBodySkin tbodySkin = maid.body0.GetSlot(slotID);
                gameObject = tbodySkin.obj;
            }
            XElement xelement = objectXml.Element("Yure");
            bool     flag2    = xelement != null;

            if (flag2)
            {
                bool flag3    = (bool)xelement;
                bool yureAble = YureUtil.GetYureAble(maid, slotID);
                if (yureAble)
                {
                    bool flag4 = YureUtil.GetYureState(maid, slotID) != flag3;
                    if (flag4)
                    {
                        BackUpObjectData orAddMaidObjectData = BackUpData.GetOrAddMaidObjectData(maid, slotID, gameObject);
                        bool             changedYure         = orAddMaidObjectData.changedYure;
                        if (changedYure)
                        {
                            orAddMaidObjectData.changedYure = false;
                            orAddMaidObjectData.bYure       = true;
                        }
                        else
                        {
                            orAddMaidObjectData.changedYure = true;
                            orAddMaidObjectData.bYure       = YureUtil.GetYureState(maid, slotID);
                        }
                        YureUtil.SetYureState(maid, slotID, flag3);
                    }
                }
            }
            IEnumerable <XElement> enumerable = objectXml.Elements("TransformData");
            bool flag5 = enumerable != null;

            if (flag5)
            {
                foreach (XElement xelement2 in enumerable)
                {
                    XElement xelement3 = xelement2.Element("Name");
                    bool     flag6     = xelement3 == null;
                    if (flag6)
                    {
                        break;
                    }
                    bool      flag7 = slotID == -1;
                    Transform transform;
                    if (flag7)
                    {
                        transform = CMT.SearchObjName(gameObject.transform, (string)xelement3, true);
                    }
                    else
                    {
                        transform = CMT.SearchObjName(gameObject.transform, (string)xelement3, false);
                    }
                    bool flag8 = transform == null;
                    if (!flag8)
                    {
                        BackUpBoneData orAddMaidBoneData = BackUpData.GetOrAddMaidBoneData(maid, slotID, gameObject, transform);
                        XElement       xelement4         = xelement2.Element("Scale");
                        bool           flag9             = xelement4 != null;
                        if (flag9)
                        {
                            bool flag10 = !orAddMaidBoneData.changedScl;
                            if (flag10)
                            {
                                orAddMaidBoneData.changedScl = true;
                                orAddMaidBoneData.scale      = transform.localScale;
                            }
                            Vector3 vectorData = SceneDataManager.GetVectorData(xelement4);
                            transform.localScale = vectorData;
                        }
                        XElement xelement5 = xelement2.Element("Position");
                        bool     flag11    = xelement5 != null;
                        if (flag11)
                        {
                            bool flag12 = !orAddMaidBoneData.changedPos;
                            if (flag12)
                            {
                                orAddMaidBoneData.changedPos = true;
                                orAddMaidBoneData.position   = transform.localPosition;
                            }
                            Vector3 vectorData2 = SceneDataManager.GetVectorData(xelement5);
                            transform.localPosition = vectorData2;
                        }
                        XElement xelement6 = xelement2.Element("Rotation");
                        bool     flag13    = xelement6 != null;
                        if (flag13)
                        {
                            bool flag14 = !orAddMaidBoneData.changedRot;
                            if (flag14)
                            {
                                orAddMaidBoneData.changedRot = true;
                                orAddMaidBoneData.rotation   = transform.localRotation;
                            }
                            Vector3 vectorData3 = SceneDataManager.GetVectorData(xelement6);
                            transform.localEulerAngles = vectorData3;
                        }
                    }
                }
            }
        }
        private static XElement GetMaidObjectData(Maid maid, int slotID)
        {
            SceneDataManager.trsHash = new HashSet <Transform>();
            bool       flag  = false;
            bool       flag2 = slotID == -1;
            GameObject gameObject;

            if (flag2)
            {
                TBodySkin tbodySkin = maid.body0.goSlot[0];
                gameObject = maid.body0.m_Bones.gameObject;
            }
            else
            {
                TBodySkin tbodySkin = maid.body0.GetSlot(slotID);
                gameObject = tbodySkin.obj;
            }
            bool     flag3 = !gameObject;
            XElement result;

            if (flag3)
            {
                result = null;
            }
            else
            {
                BackUpSlotData orNullMaidSlotData = BackUpData.GetOrNullMaidSlotData(maid, slotID);
                bool           flag4 = orNullMaidSlotData == null;
                if (flag4)
                {
                    result = null;
                }
                else
                {
                    bool flag5 = !orNullMaidSlotData.objectDataDic.ContainsKey(gameObject);
                    if (flag5)
                    {
                        result = null;
                    }
                    else
                    {
                        BackUpObjectData backUpObjectData = orNullMaidSlotData.objectDataDic[gameObject];
                        XElement         xelement         = new XElement("ObjectData");
                        bool             changedYure      = backUpObjectData.changedYure;
                        if (changedYure)
                        {
                            XElement xelement2 = new XElement("Yure");
                            bool     yureState = YureUtil.GetYureState(maid, slotID);
                            xelement2.Add(yureState);
                            xelement.Add(xelement2);
                            bool flag6 = !yureState;
                            if (flag6)
                            {
                                flag = true;
                            }
                        }
                        bool        flag7 = slotID == -1;
                        Transform   rootBone;
                        Transform[] array;
                        if (flag7)
                        {
                            SkinnedMeshRenderer componentInChildren = maid.body0.goSlot[0].obj.GetComponentInChildren <SkinnedMeshRenderer>();
                            rootBone = maid.body0.m_Bones.transform;
                            array    = (from bone in componentInChildren.bones
                                        where bone != null
                                        select CMT.SearchObjName(rootBone, bone.name, true) into bone
                                        where bone != null
                                        select bone).ToArray <Transform>();
                        }
                        else
                        {
                            rootBone = maid.body0.goSlot[slotID].obj_tr;
                            SkinnedMeshRenderer componentInChildren2 = rootBone.gameObject.GetComponentInChildren <SkinnedMeshRenderer>();
                            array = (from bone in componentInChildren2.bones
                                     where bone != null
                                     select bone).ToArray <Transform>();
                        }
                        foreach (Transform transform in array)
                        {
                            Transform transform2 = transform;
                            while (transform2 != rootBone)
                            {
                                bool flag8 = !transform2;
                                if (flag8)
                                {
                                    Debug.Log("ルートオブジェクト配下にありません:" + transform.name);
                                    return(null);
                                }
                                bool flag9 = SceneDataManager.trsHash.Contains(transform2);
                                if (flag9)
                                {
                                    break;
                                }
                                bool flag10 = flag || BackUpData.GetOrNullMaidBoneData(maid, slotID, gameObject, transform2) != null;
                                if (flag10)
                                {
                                    XElement xelement3 = new XElement("TransformData");
                                    XElement xelement4 = new XElement("Name");
                                    xelement4.Add(transform2.name);
                                    xelement3.Add(xelement4);
                                    xelement3.Add(SceneDataManager.GetVector3Data("Scale", transform2.localScale));
                                    xelement3.Add(SceneDataManager.GetVector3Data("Position", transform2.localPosition));
                                    xelement3.Add(SceneDataManager.GetVector3Data("Rotation", transform2.localEulerAngles));
                                    xelement.Add(xelement3);
                                }
                                SceneDataManager.trsHash.Add(transform2);
                                transform2 = transform2.parent;
                            }
                        }
                        result = xelement;
                    }
                }
            }
            return(result);
        }