Example #1
0
 // 外した装備の数の調整
 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;
    }