/// <summary> /// 雑魚敵のデータを戦闘開始時にロードする /// </summary> public void LoadEnemy(int AreaLevel) { Level = AreaLevel; //どうにかしてエリアのレベルを取得する //Level = 1; //デバッグ用で1を設定 //エリアレベルをもとに敵のNoを選出したリストを作成する //その後、ランダム(重複あり)に抽出し、配列にする List <int> EnemyChoiceList = new List <int>(ConvertEnemyNoFromAreaLavel(AreaLevel)); int[] NoRadomChoice = new int[EnemyChoiceList.Count]; for (int i = 0; i <= EnemyChoiceList.Count - 1; i++) { NoRadomChoice[i] = EnemyChoiceList[UnityEngine.Random.Range(0, EnemyChoiceList.Count - 1)]; } //乱数で敵の出現数を設定 int EnemyCount = UnityEngine.Random.Range(1, 3); //エリアレベル1の時は1体だけ if (Level == 1) { EnemyCount = 1; } string EnemyCountToString = Convert.ToString(EnemyCount); XDocument XmlDoc = XDocument.Load(GetXmlPath.EnemyDataPath()); XDocument xmlDoc2 = XDocument.Load(GetXmlPath.BattleEnemyDataSheetPath()); //バトルシート値リセット ResetXML.ResetBattleSheet(); //乱数をもとにクエリ生成し、バトルシートに転写 for (int i = 0; i <= EnemyCount - 1; i++) { //EnemyData var query = from x in XmlDoc.Descendants("Enemy") where x.Attribute("No").Value == NoRadomChoice[i].ToString() select new { EnemyNo = x.Attribute("No").Value, EnemyName = x.Element("EnemyName").Value, EnemyHP = x.Element("EnemyHP").Value, EnemyAttackValue = x.Element("EnemyAttackValue").Value, EnemyDiffenceValue = x.Element("EnemyDiffenceValue").Value, EnemySpeedValue = x.Element("EnemySpeedValue").Value, EnemyExperience = x.Element("EnemyExperience").Value, EnemySkill_Name_No1 = x.Element("EnemySkill_Name_No1").Value, EnemySkill_StringValue1_No1 = x.Element("EnemySkill_StringValue1_No1").Value, EnemySkill_StringValue2_No1 = x.Element("EnemySkill_StringValue2_No1").Value, EnemySkill_StringValue3_No1 = x.Element("EnemySkill_StringValue3_No1").Value, EnemySkill_IntValue1_No1 = x.Element("EnemySkill_IntValue1_No1").Value, EnemySkill_IntValue2_No1 = x.Element("EnemySkill_IntValue2_No1").Value, EnemySkill_IntValue3_No1 = x.Element("EnemySkill_IntValue3_No1").Value, EnemySkill_Name_No2 = x.Element("EnemySkill_Name_No2").Value, EnemySkill_StringValue1_No2 = x.Element("EnemySkill_StringValue1_No2").Value, EnemySkill_StringValue2_No2 = x.Element("EnemySkill_StringValue2_No2").Value, EnemySkill_StringValue3_No2 = x.Element("EnemySkill_StringValue3_No2").Value, EnemySkill_IntValue1_No2 = x.Element("EnemySkill_IntValue1_No2").Value, EnemySkill_IntValue2_No2 = x.Element("EnemySkill_IntValue2_No2").Value, EnemySkill_IntValue3_No2 = x.Element("EnemySkill_IntValue3_No2").Value, EnemySkill_Name_No3 = x.Element("EnemySkill_Name_No3").Value, EnemySkill_StringValue1_No3 = x.Element("EnemySkill_StringValue1_No3").Value, EnemySkill_StringValue2_No3 = x.Element("EnemySkill_StringValue2_No3").Value, EnemySkill_StringValue3_No3 = x.Element("EnemySkill_StringValue3_No3").Value, EnemySkill_IntValue1_No3 = x.Element("EnemySkill_IntValue1_No3").Value, EnemySkill_IntValue2_No3 = x.Element("EnemySkill_IntValue2_No3").Value, EnemySkill_IntValue3_No3 = x.Element("EnemySkill_IntValue3_No3").Value, EnemyResistance_Name_No1 = x.Element("EnemyResistance_Name_No1").Value, EnemyResistance_StringValue1_No1 = x.Element("EnemyResistance_StringValue1_No1").Value, EnemyResistance_StringValue2_No1 = x.Element("EnemyResistance_StringValue2_No1").Value, EnemyResistance_StringValue3_No1 = x.Element("EnemyResistance_StringValue3_No1").Value, EnemyResistance_IntValue1_No1 = x.Element("EnemyResistance_IntValue1_No1").Value, EnemyResistance_IntValue2_No1 = x.Element("EnemyResistance_IntValue2_No1").Value, EnemyResistance_IntValue3_No1 = x.Element("EnemyResistance_IntValue3_No1").Value, DropItem = x.Element("DropItem").Value, DropItemID = x.Element("DropItemID").Value, DropPercent = x.Element("DropPercent").Value, }; //BattleEnemyDataSheet var query2 = (from y in xmlDoc2.Root.Descendants("Enemy") where y.Element("BattleNo").Value == Convert.ToString(i + 1) select y).Single(); foreach (var item in query) { query2.Attribute("No").Value = item.EnemyNo; query2.Element("EnemyName").Value = item.EnemyName; query2.Element("EnemyHP").Value = item.EnemyHP; query2.Element("EnemyAttackValue").Value = item.EnemyAttackValue; query2.Element("EnemyDiffenceValue").Value = item.EnemyDiffenceValue; query2.Element("EnemySpeedValue").Value = item.EnemySpeedValue; query2.Element("EnemyExperience").Value = item.EnemyExperience; query2.Element("EnemySkill_Name_No1").Value = item.EnemySkill_Name_No1; query2.Element("EnemySkill_StringValue1_No1").Value = item.EnemySkill_StringValue1_No1; query2.Element("EnemySkill_StringValue2_No1").Value = item.EnemySkill_StringValue2_No1; query2.Element("EnemySkill_StringValue3_No1").Value = item.EnemySkill_StringValue3_No1; query2.Element("EnemySkill_IntValue1_No1").Value = item.EnemySkill_IntValue1_No1; query2.Element("EnemySkill_IntValue2_No1").Value = item.EnemySkill_IntValue2_No1; query2.Element("EnemySkill_IntValue3_No1").Value = item.EnemySkill_IntValue3_No1; query2.Element("EnemySkill_Name_No2").Value = item.EnemySkill_Name_No2; query2.Element("EnemySkill_StringValue1_No2").Value = item.EnemySkill_StringValue1_No2; query2.Element("EnemySkill_StringValue2_No2").Value = item.EnemySkill_StringValue2_No2; query2.Element("EnemySkill_StringValue3_No2").Value = item.EnemySkill_StringValue3_No2; query2.Element("EnemySkill_IntValue1_No2").Value = item.EnemySkill_IntValue1_No2; query2.Element("EnemySkill_IntValue2_No2").Value = item.EnemySkill_IntValue2_No2; query2.Element("EnemySkill_IntValue3_No2").Value = item.EnemySkill_IntValue3_No2; query2.Element("EnemySkill_Name_No3").Value = item.EnemySkill_Name_No3; query2.Element("EnemySkill_StringValue1_No3").Value = item.EnemySkill_StringValue1_No3; query2.Element("EnemySkill_StringValue2_No3").Value = item.EnemySkill_StringValue2_No3; query2.Element("EnemySkill_StringValue3_No3").Value = item.EnemySkill_StringValue3_No3; query2.Element("EnemySkill_IntValue1_No3").Value = item.EnemySkill_IntValue1_No3; query2.Element("EnemySkill_IntValue2_No3").Value = item.EnemySkill_IntValue2_No3; query2.Element("EnemySkill_IntValue3_No3").Value = item.EnemySkill_IntValue3_No3; query2.Element("EnemyResistance_Name_No1").Value = item.EnemyResistance_Name_No1; query2.Element("EnemyResistance_StringValue1_No1").Value = item.EnemyResistance_StringValue1_No1; query2.Element("EnemyResistance_StringValue2_No1").Value = item.EnemyResistance_StringValue2_No1; query2.Element("EnemyResistance_StringValue3_No1").Value = item.EnemyResistance_StringValue3_No1; query2.Element("EnemyResistance_IntValue1_No1").Value = item.EnemyResistance_IntValue1_No1; query2.Element("EnemyResistance_IntValue2_No1").Value = item.EnemyResistance_IntValue2_No1; query2.Element("EnemyResistance_IntValue3_No1").Value = item.EnemyResistance_IntValue3_No1; query2.Element("DropItem").Value = item.DropItem; query2.Element("DropItemID").Value = item.DropItem; query2.Element("DropPercent").Value = item.DropPercent; xmlDoc2.Save(GetXmlPath.BattleEnemyDataSheetPath()); } } }
/// <summary> /// 所持アイテムをチェックしメンテナンスする。 /// </summary> private void CheckItemManagerXML() { //何を持っているかをチェック var query = (from x in xdoc.Descendants("HaveManage") select x).Single(); if (int.Parse(query.Attribute("Have").Value) == 0) { //何も持っていないなら終了 ResetXML.ResetItemManage(); return; } //持ってるもののIDを取得 var query2 = from y in xdoc.Descendants("HaveID") select y; //配列をつくる //ItemDicには(持っているアイテムID(key),個数(Value))を入れる Dictionary <int, int> ItemDic = new Dictionary <int, int>(); int RoopCount = 0; string CheckValue = ""; foreach (var item in query2) { if ((int)item.Attribute("No") >= 1) { //重複チェックして、重複があれば個数を合算 bool NextRoopFlg = false; CheckValue = item.Value; if (RoopCount >= 1) { foreach (var item2 in ItemDic) { if (item2.Key == int.Parse(CheckValue)) { ItemDic[item2.Key] = ItemDic[item2.Key] + int.Parse(item.Attribute("Have").Value); NextRoopFlg = true; break; } } } RoopCount++; if (NextRoopFlg == true) { continue; } //個数が0になったらDictionaryに登録しない if (int.Parse(item.Attribute("Have").Value) == 0) { continue; } ItemDic.Add(int.Parse(item.Value), //アイテムID int.Parse(item.Attribute("Have").Value)); //個数 } } //Key(アイテムIDでソート) var ItemDicSorted = ItemDic.OrderBy(x => x.Key); //Keyだけを抜き出したリストを作る List <int> IntList = new List <int>(); foreach (var item in ItemDicSorted) { IntList.Add(item.Key); } //ItemManageを初期化する ResetXML.ResetItemManage(); //ソートした配列をもとに再書き込みする int i = 1; int j = 0; while (true) { XDocument xdoc3 = XDocument.Load(GetXmlPath.ItemManagerPath()); var WriteXml = new XElement("HaveID", "", new XAttribute("No", Convert.ToString(i)), new XAttribute("Have", "")); xdoc3.Root.Element("HaveManage").Add(WriteXml); xdoc3.Save(GetXmlPath.ItemManagerPath()); var query3 = from x in xdoc3.Descendants("HaveID") where x.Attribute("No").Value == Convert.ToString(i) select x; foreach (var item in query3) { if (ItemDic[IntList[j]] >= 99) { item.Attribute("Have").Value = Convert.ToString(99); } else { item.Attribute("Have").Value = Convert.ToString(ItemDic[IntList[j]]); } item.Value = Convert.ToString(IntList[j]); xdoc3.Save(GetXmlPath.ItemManagerPath()); } var queryHaveManage = (from x in xdoc3.Descendants("HaveManage") select x).Single(); queryHaveManage.Attribute("Have").Value = Convert.ToString(i); xdoc3.Save(GetXmlPath.ItemManagerPath()); if (j == IntList.Count - 1) { break; } i++; j++; } //書き込んだ内容をもとにインベントリを生成する int k = 1; int l = 0; while (true) { XDocument xdoc4 = XDocument.Load(GetXmlPath.ItemManagerPath()); var WriteXml = new XElement("Inventory", new XAttribute("ID", Convert.ToString(k)), new XElement("Name", ""), new XElement("Message", ""), new XElement("RecoveryPoint", ""), new XElement("PowerUPPercent", ""), new XElement("EXInt", ""), new XElement("UseInField", ""), new XElement("UseInBattle", ""), new XElement("CanTrush", "")); xdoc4.Root.Add(WriteXml); xdoc4.Save(GetXmlPath.ItemManagerPath()); var query4 = (from x in xdoc4.Descendants("Inventory") where x.Attribute("ID").Value == Convert.ToString(k) select x).Single(); query4.Element("Name").Value = OperateItemData.GetItemData("Name", IntList[l]); query4.Element("Message").Value = OperateItemData.GetItemData("Message", IntList[l]); query4.Element("RecoveryPoint").Value = OperateItemData.GetItemData("RecoveryPoint", IntList[l]); query4.Element("PowerUPPercent").Value = OperateItemData.GetItemData("PowerUPPercent", IntList[l]); query4.Element("EXInt").Value = OperateItemData.GetItemData("EXInt", IntList[l]); query4.Element("UseInField").Value = OperateItemData.GetItemData("UseInField", IntList[l]); query4.Element("UseInBattle").Value = OperateItemData.GetItemData("UseInBattle", IntList[l]); query4.Element("CanTrush").Value = OperateItemData.GetItemData("CanTrush", IntList[l]); xdoc4.Save(GetXmlPath.ItemManagerPath()); if (l == IntList.Count - 1) { break; } k++; l++; } }