// 外した装備の数の調整 private void UnequipItemNumSet(Item item) { // 装備していないなら何もしない if (item == null) { return; } if (partyStatus.GetItemDictionary().ContainsKey(item)) { partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) + 1); } else { partyStatus.SetItemDictionary(item, 1); } }
// 勝利時の結果 public IEnumerator DisplayVictoryResult(List <GameObject> allCharacterList, List <GameObject> allyCharacterInBattleList) { yield return(new WaitForSeconds(timeToDisplay)); won = true; resultPanel.SetActive(true); // 戦闘で獲得した経験値 var earnedExperience = 0; // 戦闘で獲得したお金 var earnedMoney = 0; // 戦闘で獲得したアイテムとその個数 Dictionary <Item, int> getItemDictionary = new Dictionary <Item, int>(); // Floatのランダム値 float randomFloat; // アイテム取得確率 float probability; // キャラクターステータス CharacterStatus characterStatus; // 敵のアイテムディクショナリー ItemDictionary enemyItemDictionary; // プレイヤーのレベル int playerLv = allyCharacterInBattleList[0].GetComponent <CharacterBattleScript>().GetCharacterStatus().GetLevel(); foreach (var character in allCharacterList) { characterStatus = character.GetComponent <CharacterBattleScript>().GetCharacterStatus(); if (characterStatus as EnemyStatus != null) { earnedExperience += LevelDifferenceCorrection(((EnemyStatus)characterStatus).GetLevel(), playerLv, ((EnemyStatus)characterStatus).GetGettingExperience()); earnedMoney += ((EnemyStatus)characterStatus).GetGettingMoney(); enemyItemDictionary = ((EnemyStatus)characterStatus).GetDropItemDictionary(); // 敵が持っているアイテムの種類の数だけ繰り返し foreach (var item in enemyItemDictionary.Keys) { // 0~100の間のランダム値を取得 randomFloat = Random.Range(0f, 100f); // アイテムの取得確率を取得 probability = enemyItemDictionary[item]; // ランダム値がアイテム取得確率以下の値であればアイテム取得 if (randomFloat <= probability) { if (getItemDictionary.ContainsKey(item)) { getItemDictionary[item]++; } else { getItemDictionary.Add(item, 1); } } } } } resultText.text = earnedExperience + "の経験値を獲得した。\n"; resultText.text += earnedMoney + "のお金を獲得した。\n"; // パーティーステータスにお金を反映する partyStatus.SetMoney(partyStatus.GetMoney() + earnedMoney); // 取得したアイテムを取得する foreach (var item in getItemDictionary.Keys) { // 既にアイテムを持っている時 if (partyStatus.GetItemDictionary().ContainsKey(item)) { partyStatus.SetItemNum(item, partyStatus.GetItemNum(item) + getItemDictionary[item]); } else { partyStatus.SetItemDictionary(item, getItemDictionary[item]); } resultText.text += item.GetKanjiName() + "を" + getItemDictionary[item] + "個手に入れた。\n"; resultText.text += "\n"; } // 上がったレベル var levelUpCount = 0; // 上がった素早さ var raisedAgility = 0; // 上がった力 var raisedPower = 0; // 上がった打たれ強さ var raisedStrikingStrength = 0; // 上がった魔法力 var raisedMagicPower = 0; // レベルアップ前のHP var nowMaxHP = 0; // レベルアップ前のMP var nowMaxMP = 0; // LevelUpData LevelUpData levelUpData; // レベルアップのテーブル List <int> agilityRisingTable; List <int> powerRisingTable; List <int> strikingStrengthRisingTable; List <int> magicPowerRisingTable; // レベルアップ等の計算 foreach (var characterObj in allyCharacterInBattleList) { var character = (AllyStatus)characterObj.GetComponent <CharacterBattleScript>().GetCharacterStatus(); // 変数を初期化 levelUpCount = 0; raisedAgility = 0; raisedPower = 0; raisedStrikingStrength = 0; raisedMagicPower = 0; nowMaxHP = character.GetMaxHp(); nowMaxMP = character.GetMaxMp(); levelUpData = character.GetLevelUpData(); agilityRisingTable = levelUpData.GetAgilityRisingTable(); powerRisingTable = levelUpData.GetPowerRisingTable(); strikingStrengthRisingTable = levelUpData.GetStrikingStrengthRisingTable(); magicPowerRisingTable = levelUpData.GetMagicPowerRisingTable(); // キャラクターに経験値を反映 character.SetEarnedExperience(character.GetEarnedExperience() + earnedExperience); // そのキャラクターの経験値で何レベルアップしたかどうか levelUpCount = character.GetEarnedExperience() / LEVEL_UP_POINT; character.SetEarnedExperience(character.GetEarnedExperience() % LEVEL_UP_POINT); // レベルアップ分のステータスアップを計算し反映する for (int i = 1; i <= levelUpCount; i++) { // レベルを反映 character.SetLevel(character.GetLevel() + 1); raisedAgility += agilityRisingTable[character.GetLevel() % agilityRisingTable.Count()]; raisedPower += powerRisingTable[character.GetLevel() % powerRisingTable.Count()]; raisedStrikingStrength += strikingStrengthRisingTable[character.GetLevel() % strikingStrengthRisingTable.Count()]; raisedMagicPower += magicPowerRisingTable[character.GetLevel() % strikingStrengthRisingTable.Count]; } if (levelUpCount > 0) { resultText.text += character.GetCharacterName() + "は" + levelUpCount + "レベル上がってLv" + character.GetLevel() + "になった。\n"; if (raisedAgility > 0) { resultText.text += "素早さが" + raisedAgility + "上がった。\n"; } if (raisedPower > 0) { resultText.text += "力が" + raisedPower + "上がった。\n"; } if (raisedStrikingStrength > 0) { resultText.text += "打たれ強さが" + raisedStrikingStrength + "上がった。\n"; } if (raisedMagicPower > 0) { resultText.text += "魔法力が" + raisedMagicPower + "上がった。\n"; } resultText.text += "\n"; } character.StatusUpdate(raisedPower, raisedAgility, raisedStrikingStrength, raisedMagicPower); //レベルの上がった分だけHP、MPを回復 character.SetHp(character.GetHp() + (character.GetMaxHp() - nowMaxHP)); character.SetMp(character.GetMp() + (character.GetMaxMp() - nowMaxMP)); } // 結果を計算し終わった isDisplayResult = true; // 戦闘終了のBGMに変更する //musicManager.ChangeBGM(); // 結果後に数秒待機 yield return(new WaitForSeconds(timeToDisplay)); // 戦闘から抜け出す //resultPanel.transform.Find("FinishText").gameObject.SetActive(true); isFinishResult = true; }