using LitJson; using UnityEngine; using System; using System.IO; using System.Xml; using System.Text; using System.Collections; using System.Collections.Generic; using System.Security.Cryptography; using Random = UnityEngine.Random; public class ManaData : Regist { #region 变量 public static XmlNode PlayerNode { get { if (PlayerNode_ == null) { PlayerNode_ = PlayerDoc.SelectSingleNode("PlayerConfig"); } return PlayerNode_; } set { PlayerNode_ = value; } } public static XmlDocument PlayerDoc { get { if (PlayerDoc_ == null) { int defaultVersion; int nativeVersion; XmlNode node; XmlDocument nativeDoc = new XmlDocument(); string configPath = Application.persistentDataPath + "/PlayerConfig.xml"; if (File.Exists(configPath)) { StreamReader sr = new StreamReader(configPath); nativeDoc.LoadXml(sr.ReadToEnd()); sr.Close(); Auxiliary.DecryptXml(nativeDoc); TextAsset textAsset = ManaReso.Load("PlayerConfig", Folder.Config); DefaultDoc.LoadXml(textAsset.text); defaultVersion = int.Parse(DefaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("Version").Attributes[0].Value); node = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("Version"); if (node == null) { StreamWriter sw = new StreamWriter(Application.persistentDataPath + "/PlayerConfig.xml"); sw.Write(DefaultDoc.OuterXml); sw.Close(); PlayerDoc_ = DefaultDoc; } else { nativeVersion = int.Parse(node.Attributes[0].Value); if (nativeVersion < defaultVersion) { PlayerDoc_ = MergeXML(nativeVersion, nativeDoc, DefaultDoc); ManaServer.Save(); } else if (nativeVersion > defaultVersion) { PlayerDoc_ = DefaultDoc; } else { byte[] bytes = Encoding.UTF8.GetBytes(nativeDoc.OuterXml); MD5 md5 = new MD5CryptoServiceProvider(); if (PlayerPrefs.GetString("config") != Auxiliary.ToString(md5.ComputeHash(bytes))) { Debug.LogWarning("Download Archive"); ManaDebug.Log("Download Archive"); DamageLock = true; DownloadLock = false; return null; } PlayerDoc_ = nativeDoc; } } } else { TextAsset textAsset = ManaReso.Load("PlayerConfig", Folder.Config); DefaultDoc.LoadXml(textAsset.text); Debug.LogWarning("Download Archive"); ManaDebug.Log("Download Archive"); DamageLock = true; DownloadLock = false; return null; } } return PlayerDoc_; } set { PlayerDoc_ = value; } } public static XmlNode PlayerNode_; public static XmlDocument PlayerDoc_; public static float Timer; public static bool DamageLock; public static bool DownloadLock; public static XmlDocument DefaultDoc = new XmlDocument(); #endregion public void Update() { if (DamageLock) { Timer += Time.deltaTime; if (Timer >= 10) { DamageLock = false; TextAsset textAsset = ManaReso.Load("PlayerConfig", Folder.Config); PlayerDoc_ = new XmlDocument(); PlayerDoc_.LoadXml(textAsset.text); return; } } if (!DownloadLock) { if (ManaServer.ID != "Default") { DownloadLock = true; ManaServer.Download(ManaServer.ID, RecoveXml); } } } public override bool RegistImmed() { if (base.RegistImmed()) { return true; } enabled = true; return false; } public static void SaveXml() { if (Initializer.Complete) { byte[] bytes = Encoding.UTF8.GetBytes(PlayerDoc.OuterXml); MD5 md5 = new MD5CryptoServiceProvider(); PlayerPrefs.SetString("id", ManaServer.ID); PlayerPrefs.SetString("config", Auxiliary.ToString(md5.ComputeHash(bytes))); XmlDocument doc = new XmlDocument(); doc.LoadXml(PlayerDoc.OuterXml); Auxiliary.EncryptXml(doc); StreamWriter sw = new StreamWriter(Application.persistentDataPath + "/PlayerConfig.xml"); sw.Write(doc.OuterXml); sw.Close(); } } public static void RecoveXml(JsonData jsonData) { if (!DamageLock) { return; } DamageLock = false; TextAsset textAsset = ManaReso.Load("PlayerConfig", Folder.Config); DefaultDoc.LoadXml(textAsset.text); if (jsonData.Inst_Object.Keys.Contains("l")) { PlayerDoc_ = new XmlDocument(); PlayerDoc_.LoadXml(jsonData["l"].ToString()); int nativeVersion = int.Parse(PlayerDoc_.SelectSingleNode("PlayerConfig").SelectSingleNode("Version").Attributes[0].Value); int defaultVersion = int.Parse(DefaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("Version").Attributes[0].Value); if (nativeVersion < defaultVersion) { MergeXML(nativeVersion, PlayerDoc_, DefaultDoc); ManaServer.Save(); } else if (nativeVersion > defaultVersion) { PlayerDoc_ = DefaultDoc; } } else { PlayerDoc_ = DefaultDoc; } } public static void SaveSkillList() { if (ManaTutorial.TutorialA || !ManaCenter.Complete) { return; } XmlNode xmlNode; XmlAttribute xmlAttribute; xmlNode = PlayerNode.SelectSingleNode("SkillList"); xmlNode.RemoveAll(); for (int i = 0; i < ManaCenter.SkillList.Count; i++) { if (ManaCenter.SkillList[i].SkillType == SkillType.Skill) { #region Skill Skill skill = (Skill)ManaCenter.SkillList[i]; xmlNode = xmlNode.AppendChild(PlayerDoc.CreateNode(XmlNodeType.Element, "Skill", "")); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("ID")); xmlAttribute.Value = skill.ID; xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("SkillType")); xmlAttribute.Value = skill.SkillType.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("ItemStatus")); xmlAttribute.Value = skill.ItemStatus.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("Level")); xmlAttribute.Value = skill.Level.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("CoolTimer")); xmlAttribute.Value = skill.CoolTimer.ToString("0"); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("UseTimer")); xmlAttribute.Value = skill.UseTimer.ToString("0"); xmlNode = PlayerNode.SelectSingleNode("SkillList"); #endregion } else if (ManaCenter.SkillList[i].SkillType == SkillType.Pack) { #region Pack Pack pack = (Pack)ManaCenter.SkillList[i]; xmlNode = xmlNode.AppendChild(PlayerDoc.CreateNode(XmlNodeType.Element, "Skill", "")); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("ID")); xmlAttribute.Value = pack.ID; xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("SkillType")); xmlAttribute.Value = pack.SkillType.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("ItemStatus")); xmlAttribute.Value = pack.ItemStatus.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("Level")); xmlAttribute.Value = pack.Level.ToString(); xmlNode = PlayerNode.SelectSingleNode("SkillList"); #endregion } else if (ManaCenter.SkillList[i].SkillType == SkillType.Ability) { #region Ability Ability ability = (Ability)ManaCenter.SkillList[i]; xmlNode = xmlNode.AppendChild(PlayerDoc.CreateNode(XmlNodeType.Element, "Skill", "")); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("ID")); xmlAttribute.Value = ability.ID; xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("SkillType")); xmlAttribute.Value = ability.SkillType.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("ItemStatus")); xmlAttribute.Value = ability.ItemStatus.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("Level")); xmlAttribute.Value = ability.Level.ToString(); xmlNode = PlayerNode.SelectSingleNode("SkillList"); #endregion } else if (ManaCenter.SkillList[i].SkillType == SkillType.BigSkill) { #region BigSkill BigSkill bigSkill = (BigSkill)ManaCenter.SkillList[i]; xmlNode = xmlNode.AppendChild(PlayerDoc.CreateNode(XmlNodeType.Element, "Skill", "")); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("ID")); xmlAttribute.Value = bigSkill.ID; xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("SkillType")); xmlAttribute.Value = bigSkill.SkillType.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("ItemStatus")); xmlAttribute.Value = bigSkill.ItemStatus.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("BarStatus")); xmlAttribute.Value = bigSkill.BarStatus.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("Level")); xmlAttribute.Value = bigSkill.Level.ToString(); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("CoolTimer")); xmlAttribute.Value = bigSkill.CoolTimer.ToString("0"); xmlAttribute = xmlNode.Attributes.Append(PlayerDoc.CreateAttribute("UseTimer")); xmlAttribute.Value = bigSkill.UseTimer.ToString("0"); xmlNode = PlayerNode.SelectSingleNode("SkillList"); #endregion } } } public static void SaveDress() { XmlNode xmlNode = PlayerNode.SelectSingleNode("DressList"); xmlNode.Attributes[0].Value = ""; for (int i = 0; i < ManaPlayer.BoughtCloseList.Count; i++) { xmlNode.Attributes[0].Value += ManaPlayer.BoughtCloseList[i] + " "; } xmlNode.Attributes[0].Value = xmlNode.Attributes[0].Value.TrimEnd(' '); xmlNode = PlayerNode.SelectSingleNode("DressData"); for (int i = 0; i < ManaPlayer.DressData.Count; i++) { xmlNode.Attributes[i].Value = ManaPlayer.DressData[i]; } } public static void SaveAchieve() { XmlNode xmlNode = PlayerNode.SelectSingleNode("AchieveList"); xmlNode.Attributes[0].Value = ""; foreach (var kv in ManaAchieve.AchieveDic) { if (!kv.Value.Lock) { xmlNode.Attributes[0].Value += kv.Value.ID_ + " "; } } xmlNode.Attributes[0].Value = xmlNode.Attributes[0].Value.TrimEnd(' '); PlayerNode.SelectSingleNode("AchieveData").Attributes[0].Value = ManaCenter.AdAmt.ToString("0"); PlayerNode.SelectSingleNode("AchieveData").Attributes[1].Value = ManaCenter.SkillAmt.ToString("0"); PlayerNode.SelectSingleNode("AchieveData").Attributes[2].Value = ManaCenter.SignAmt.ToString("0"); PlayerNode.SelectSingleNode("AchieveData").Attributes[3].Value = ManaCenter.ShareAmt.ToString("0"); PlayerNode.SelectSingleNode("AchieveData").Attributes[4].Value = ManaCenter.ElfLevel.ToString("0"); PlayerNode.SelectSingleNode("AchieveData").Attributes[5].Value = ManaCenter.MiniGameAmt.ToString("0"); PlayerNode.SelectSingleNode("AchieveData").Attributes[6].Value = ManaCenter.FlowerCoin.ToString("0"); PlayerNode.SelectSingleNode("AchieveData").Attributes[7].Value = ManaCenter.TotalPerson.ToString("0"); PlayerNode.SelectSingleNode("AchieveData").Attributes[8].Value = ManaCenter.CostDiamond.ToString("0"); } public static void SavePlantList() { if (ManaVisit.InVisit || ManaTutorial.TutorialA) { return; } XmlAttributeCollection attribute = PlayerNode.SelectSingleNode("PlantList").Attributes; attribute[0].Value = ""; for (int i = 0; i < ManaGarden.PlantList.Count; i++) { Slot slot = ManaGarden.PlantList[i]; attribute[0].Value += slot.ID + "," + slot.Index + " "; } attribute[0].Value = attribute[0].Value.TrimEnd(' '); } public static void SaveCommon() { PlayerNode.SelectSingleNode("Coin").Attributes[0].Value = ManaCenter.Coin.ToString("0"); PlayerNode.SelectSingleNode("Diamond").Attributes[0].Value = ManaCenter.Diamond.ToString("0"); PlayerNode.SelectSingleNode("SignTime").Attributes[0].Value = ManaSign.SignTime.ToString(); PlayerNode.SelectSingleNode("SignIndex").Attributes[0].Value = ManaSign.SignIndex.ToString(); PlayerNode.SelectSingleNode("SignRound").Attributes[0].Value = ManaSign.SignRound.ToString(); PlayerNode.SelectSingleNode("QuitFlag").Attributes[0].Value = ManaServer.Connect.ToInt().ToString(); PlayerNode.SelectSingleNode("QuitTime").Attributes[0].Value = ManaServer.Time.ToString(); PlayerNode.SelectSingleNode("MiniTimer").Attributes[0].Value = ManaCenter.MiniTimer.ToString("0"); PlayerNode.SelectSingleNode("CircleTimer").Attributes[0].Value = ManaCenter.CircleTimer.ToString("0"); PlayerNode.SelectSingleNode("ID").Attributes[0].Value = ManaServer.ID; PlayerNode.SelectSingleNode("Language").Attributes[0].Value = ManaLan.CurrentLan.ToString(); PlayerNode.SelectSingleNode("MiniGameIndex").Attributes[0].Value = ManaMiniGame.MiniGameIndex.ToString(); PlayerNode.SelectSingleNode("TutorialA").Attributes[0].Value = ManaTutorial.TutorialA.ToInt().ToString(); PlayerNode.SelectSingleNode("TutorialB").Attributes[0].Value = ManaTutorial.TutorialB_.ToInt().ToString(); PlayerNode.SelectSingleNode("TutorialC").Attributes[0].Value = ManaTutorial.TutorialC_.ToInt().ToString(); PlayerNode.SelectSingleNode("TutorialD").Attributes[0].Value = ManaTutorial.TutorialD_.ToInt().ToString(); PlayerNode.SelectSingleNode("TutorialE").Attributes[0].Value = ManaTutorial.TutorialE_.ToInt().ToString(); PlayerNode.SelectSingleNode("TutorialIndexA").Attributes[0].Value = ManaTutorial.TutorialIndexA.ToString(); PlayerNode.SelectSingleNode("TutorialIndexB").Attributes[0].Value = ManaTutorial.TutorialIndexB.ToString(); PlayerNode.SelectSingleNode("TutorialIndexC").Attributes[0].Value = ManaTutorial.TutorialIndexC.ToString(); PlayerNode.SelectSingleNode("TutorialIndexD").Attributes[0].Value = ManaTutorial.TutorialIndexD.ToString(); PlayerNode.SelectSingleNode("TutorialIndexE").Attributes[0].Value = ManaTutorial.TutorialIndexE.ToString(); } public static void SaveFlowerList() { XmlAttribute attribute = PlayerNode.SelectSingleNode("FlowerList").Attributes[0]; attribute.Value = ""; foreach (var kv in ManaGarden.FlowerInfoDic) { if (kv.Value.Unlock) { attribute.Value += kv.Value.ID_ + " "; } } attribute.Value = attribute.Value.Trim(' '); } public static void SavePlayerConfig() { if (Initializer.Complete) { SaveSkillList(); SaveAchieve(); SaveDress(); SavePlantList(); SaveCommon(); SaveFlowerList(); } } public static void ResetPlayerConfig() { PlayerPrefs.SetString("id", ""); PlayerNode.SelectSingleNode("Version").Attributes[0].Value = "10000"; SavePlayerConfig(); ManaCenter.SaveLock = true; } public static int GetPlayerInt(string node) { return int.Parse(PlayerNode.SelectSingleNode(node).Attributes[0].Value); } public static bool GetPlayerBool(string node) { return int.Parse(PlayerNode.SelectSingleNode(node).Attributes[0].Value).ToBool(); } public static float GetPlayerFloat(string node) { return float.Parse(PlayerNode.SelectSingleNode(node).Attributes[0].Value); } public static string GetPlayerString(string node) { return PlayerNode.SelectSingleNode(node).Attributes[0].Value; } public static double GetPlayerDouble(string node) { return double.Parse(PlayerNode.SelectSingleNode(node).Attributes[0].Value); } public static void SavePlayerInt(string node, int value) { PlayerNode.SelectSingleNode(node).Attributes[0].Value = value.ToString(); } public static void SavePlayerBool(string node, bool value) { PlayerNode.SelectSingleNode(node).Attributes[0].Value = value.ToInt().ToString(); } public static void SavePlayerFloat(string node, float value) { PlayerNode.SelectSingleNode(node).Attributes[0].Value = value.ToString(); } public static void SavePlayerString(string node, string value) { PlayerNode.SelectSingleNode(node).Attributes[0].Value = value; } public static void SavePlayerDouble(string node, double value) { PlayerNode.SelectSingleNode(node).Attributes[0].Value = value.ToString(); } public static List GetDressList() { List list = new List(); XmlAttributeCollection attribute = PlayerNode.SelectSingleNode("DressList").Attributes; return Auxiliary.IntListParse(' ', attribute[0].Value, list); } public static List GetDressData(XmlNode node = null) { XmlNode xmlNode; if (node == null) { xmlNode = PlayerNode.SelectSingleNode("DressData"); } else { xmlNode = node.SelectSingleNode("DressData"); } List dataList = new List(); if (xmlNode != null && xmlNode.Attributes.Count == 8) { dataList.Add(xmlNode.Attributes[0].Value); dataList.Add(xmlNode.Attributes[1].Value); dataList.Add(xmlNode.Attributes[2].Value); dataList.Add(xmlNode.Attributes[3].Value); dataList.Add(xmlNode.Attributes[4].Value); dataList.Add(xmlNode.Attributes[5].Value); dataList.Add(xmlNode.Attributes[6].Value); dataList.Add(xmlNode.Attributes[7].Value); } else { float rate = Random.Range(0f, 1f); if (rate < 0.33f) { dataList.Add("脑壳1"); dataList.Add("裙子1"); dataList.Add("鞋子1"); dataList.Add("头饰品1"); dataList.Add("上衣1"); dataList.Add("眼睛1"); dataList.Add("嘴巴1"); dataList.Add("Empty"); } else if (rate < 0.66f) { dataList.Add("脑壳2"); dataList.Add("裙子2"); dataList.Add("鞋子2"); dataList.Add("头饰品2"); dataList.Add("上衣2"); dataList.Add("眼睛2"); dataList.Add("嘴巴2"); dataList.Add("Empty"); } else { dataList.Add("脑壳3"); dataList.Add("裙子3"); dataList.Add("鞋子3"); dataList.Add("头饰品3"); dataList.Add("上衣3"); dataList.Add("眼睛3"); dataList.Add("嘴巴3"); dataList.Add("Empty"); } } return dataList; } public static List GetFlowerList() { List list = new List(); XmlAttributeCollection attribute = PlayerNode.SelectSingleNode("FlowerList").Attributes; return Auxiliary.IntListParse(' ', attribute[0].Value, list); } public static List GetAchieveList() { return Auxiliary.IntListParse(' ', GetPlayerString("AchieveList"), new List()); } public static List GetOfflineConfig() { TextAsset textAsset = ManaReso.Load("offline_config", Folder.Config); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(textAsset.text); XmlNode xmlNode = xmlDoc.SelectSingleNode("data").SelectSingleNode("item"); List strList = new List() { xmlNode.Attributes[1].Value, xmlNode.Attributes[2].Value, xmlNode.Attributes[3].Value, }; return strList; } public static List GetAchieveData() { List dataList = new List(); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[0].Value)); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[1].Value)); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[2].Value)); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[3].Value)); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[4].Value)); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[5].Value)); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[6].Value)); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[7].Value)); dataList.Add(double.Parse(PlayerNode.SelectSingleNode("AchieveData").Attributes[8].Value)); return dataList; } public static List> GetPlantList(XmlNode node = null) { List> list = new List>(); XmlNode xmlNode; if (node == null) { xmlNode = PlayerNode.SelectSingleNode("PlantList"); } else { xmlNode = node.SelectSingleNode("PlantList"); } if (!string.IsNullOrEmpty(xmlNode.Attributes[0].Value)) { string[] strings = xmlNode.Attributes[0].Value.Split(' '); for (int i = 0; i < strings.Length; i++) { list.Add(new KV(int.Parse(strings[i].Split(',')[0]), int.Parse(strings[i].Split(',')[1]))); } } return list; } public static List GetSkillList(XmlNode node = null) { List attributeList = new List(); XmlNodeList xmlNodeList; if (node == null) { xmlNodeList = PlayerNode.SelectSingleNode("SkillList").ChildNodes; } else { xmlNodeList = node.SelectSingleNode("SkillList").ChildNodes; } for (int i = 0; i < xmlNodeList.Count; i++) { attributeList.Add(xmlNodeList[i].Attributes); } return attributeList; } public static XmlAttributeCollection GetVisitConfig() { TextAsset textAsset = ManaReso.Load("visit_config", Folder.Config); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(textAsset.text); XmlNode xmlNode = xmlDoc.SelectSingleNode("data").SelectSingleNode("item"); return xmlNode.Attributes; } public static XmlAttributeCollection GetAwardConfig() { TextAsset textAsset = ManaReso.Load("award_config", Folder.Config); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(textAsset.text); XmlNode xmlNode = xmlDoc.SelectSingleNode("data").SelectSingleNode("item"); return xmlNode.Attributes; } public static List GetIAPConfig() { TextAsset textAsset; XmlNodeList xmlNodeList; XmlDocument xmlDoc = new XmlDocument(); List attributeList = new List(); textAsset = ManaReso.Load("iap_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList = xmlDoc.SelectSingleNode("data").SelectNodes("item"); for (int i = 0; i < xmlNodeList.Count; i++) { attributeList.Add(xmlNodeList[i].Attributes); } return attributeList; } public static List GetSkillConfig() { TextAsset textAsset; XmlDocument xmlDoc = new XmlDocument(); List xmlNodeList = new List(); List attributeList = new List(); textAsset = ManaReso.Load("pack_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList.Add(xmlDoc.SelectSingleNode("data").SelectNodes("item")); textAsset = ManaReso.Load("skill_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList.Add(xmlDoc.SelectSingleNode("data").SelectNodes("item")); textAsset = ManaReso.Load("ability_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList.Add(xmlDoc.SelectSingleNode("data").SelectNodes("item")); for (int i = 0; i < xmlNodeList.Count; i++) { for (int j = 0; j < xmlNodeList[i].Count; j++) { attributeList.Add(xmlNodeList[i][j].Attributes); } } return attributeList; } public static List GetSignConfig() { TextAsset textAsset; XmlNodeList xmlNodeList; XmlDocument xmlDoc = new XmlDocument(); List attributeList = new List(); textAsset = ManaReso.Load("signin_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList = xmlDoc.SelectSingleNode("data").SelectNodes("item"); for (int i = 0; i < xmlNodeList.Count; i++) { attributeList.Add(xmlNodeList[i].Attributes); } return attributeList; } public static List GetFlowerConfig() { TextAsset textAsset; XmlNodeList xmlNodeList; XmlDocument xmlDoc = new XmlDocument(); List attributeList = new List(); textAsset = ManaReso.Load("flower_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList = xmlDoc.SelectSingleNode("data").SelectNodes("item"); for (int i = 0; i < xmlNodeList.Count; i++) { attributeList.Add(xmlNodeList[i].Attributes); } return attributeList; } public static List GetLotteryConfig() { TextAsset textAsset; XmlNodeList xmlNodeList; XmlDocument xmlDoc = new XmlDocument(); List attributeList = new List(); textAsset = ManaReso.Load("lottery_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList = xmlDoc.SelectSingleNode("data").SelectNodes("item"); for (int i = 0; i < xmlNodeList.Count; i++) { attributeList.Add(xmlNodeList[i].Attributes); } return attributeList; } public static List GetAchieveConfig() { TextAsset textAsset; XmlNodeList xmlNodeList; XmlDocument xmlDoc = new XmlDocument(); List attributeList = new List(); textAsset = ManaReso.Load("achieve_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList = xmlDoc.SelectSingleNode("data").SelectNodes("item"); for (int i = 0; i < xmlNodeList.Count; i++) { attributeList.Add(xmlNodeList[i].Attributes); } return attributeList; } public static List GetDressRoomConfig() { TextAsset textAsset; XmlNodeList xmlNodeList; XmlDocument xmlDoc = new XmlDocument(); List attributeList = new List(); textAsset = ManaReso.Load("dressRoom_config", Folder.Config); xmlDoc.LoadXml(textAsset.text); xmlNodeList = xmlDoc.SelectSingleNode("data").SelectNodes("item"); for (int i = 0; i < xmlNodeList.Count; i++) { attributeList.Add(xmlNodeList[i].Attributes); } return attributeList; } public static XmlDocument MergeXML(int nativeVersion, XmlDocument nativeDoc, XmlDocument defaultDoc) { if (nativeVersion < 681) { Debug.LogWarning("UpdateArchive"); To681(nativeDoc, defaultDoc); } return nativeDoc; } public static XmlDocument To681(XmlDocument nativeDoc, XmlDocument defaultDoc) { string playerType = ""; XmlNode xmlNode1 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("DressList"); XmlNode xmlNode2 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("DressData"); XmlNode xmlNode3 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("TutorialD"); XmlNode xmlNode4 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("TutorialIndexD"); XmlNode xmlNode5 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("Player"); XmlNode xmlNode6 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("TutorialE"); XmlNode xmlNode7 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("TutorialIndexE"); XmlNode xmlNode8 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("AchieveData"); if (xmlNode1 != null) { nativeDoc.SelectSingleNode("PlayerConfig").RemoveChild(xmlNode1); } if (xmlNode2 != null) { nativeDoc.SelectSingleNode("PlayerConfig").RemoveChild(xmlNode2); } if (xmlNode3 != null) { nativeDoc.SelectSingleNode("PlayerConfig").RemoveChild(xmlNode3); } if (xmlNode4 != null) { nativeDoc.SelectSingleNode("PlayerConfig").RemoveChild(xmlNode4); } if (xmlNode5 != null) { playerType = xmlNode5.Attributes[0].Value; nativeDoc.SelectSingleNode("PlayerConfig").RemoveChild(xmlNode5); } else { playerType = "PlayerBlond"; } if (xmlNode6 != null) { nativeDoc.SelectSingleNode("PlayerConfig").RemoveChild(xmlNode6); } if (xmlNode7 != null) { nativeDoc.SelectSingleNode("PlayerConfig").RemoveChild(xmlNode7); } if (xmlNode8 != null) { nativeDoc.SelectSingleNode("PlayerConfig").RemoveChild(xmlNode8); } nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("Version").Attributes[0].Value = 681.ToString(); xmlNode1 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("DressList"); xmlNode2 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("DressData"); xmlNode3 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("TutorialD"); xmlNode4 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("TutorialIndexD"); xmlNode5 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("Player"); xmlNode6 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("TutorialE"); xmlNode7 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("TutorialIndexE"); xmlNode8 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("AchieveData"); if (playerType == "PlayerBlond") { xmlNode2.Attributes[0].Value = "脑壳1"; xmlNode2.Attributes[1].Value = "裙子1"; xmlNode2.Attributes[2].Value = "鞋子1"; xmlNode2.Attributes[3].Value = "头饰品1"; xmlNode2.Attributes[4].Value = "上衣1"; xmlNode2.Attributes[5].Value = "眼睛1"; xmlNode2.Attributes[6].Value = "嘴巴1"; xmlNode2.Attributes[7].Value = "Empty"; } else if (playerType == "PlayerBrown") { xmlNode2.Attributes[0].Value = "脑壳2"; xmlNode2.Attributes[1].Value = "裙子2"; xmlNode2.Attributes[2].Value = "鞋子2"; xmlNode2.Attributes[3].Value = "头饰品2"; xmlNode2.Attributes[4].Value = "上衣2"; xmlNode2.Attributes[5].Value = "眼睛2"; xmlNode2.Attributes[6].Value = "嘴巴2"; xmlNode2.Attributes[7].Value = "Empty"; } else if (playerType == "PlayerPink") { xmlNode2.Attributes[0].Value = "脑壳3"; xmlNode2.Attributes[1].Value = "裙子3"; xmlNode2.Attributes[2].Value = "鞋子3"; xmlNode2.Attributes[3].Value = "头饰品3"; xmlNode2.Attributes[4].Value = "上衣3"; xmlNode2.Attributes[5].Value = "眼睛3"; xmlNode2.Attributes[6].Value = "嘴巴3"; xmlNode2.Attributes[7].Value = "Empty"; } nativeDoc.SelectSingleNode("PlayerConfig").AppendChild(nativeDoc.ImportNode(xmlNode1, true)); nativeDoc.SelectSingleNode("PlayerConfig").AppendChild(nativeDoc.ImportNode(xmlNode2, true)); nativeDoc.SelectSingleNode("PlayerConfig").AppendChild(nativeDoc.ImportNode(xmlNode3, true)); nativeDoc.SelectSingleNode("PlayerConfig").AppendChild(nativeDoc.ImportNode(xmlNode4, true)); nativeDoc.SelectSingleNode("PlayerConfig").AppendChild(nativeDoc.ImportNode(xmlNode5, true)); nativeDoc.SelectSingleNode("PlayerConfig").AppendChild(nativeDoc.ImportNode(xmlNode6, true)); nativeDoc.SelectSingleNode("PlayerConfig").AppendChild(nativeDoc.ImportNode(xmlNode7, true)); nativeDoc.SelectSingleNode("PlayerConfig").AppendChild(nativeDoc.ImportNode(xmlNode8, true)); xmlNode1 = nativeDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("SkillList"); xmlNode2 = defaultDoc.SelectSingleNode("PlayerConfig").SelectSingleNode("SkillList"); XmlNodeList xmlNodeList1 = xmlNode1.ChildNodes; XmlNodeList xmlNodeList2 = xmlNode2.ChildNodes; for (int i = 0; i < xmlNodeList1.Count; i++) { string id = xmlNodeList1[i].Attributes[0].Value; if (id.Contains("Ability")) { int index = int.Parse(id.Replace("Ability", "")); if (index >= 15 && index <= 24) { xmlNode1.RemoveChild(xmlNodeList1[i--]); } } } for (int i = 0; i < xmlNodeList2.Count; i++) { string id = xmlNodeList2[i].Attributes[0].Value; if (id.Contains("Ability")) { int index = int.Parse(id.Replace("Ability", "")); if (index >= 15 && index <= 24) { xmlNode1.AppendChild(nativeDoc.ImportNode(xmlNodeList2[i], true)); } } } return nativeDoc; } }