Ejemplo n.º 1
0
    /// <summary>
    /// StageDatabaseで呼んで、ステージごとのユニット設定を行う
    /// </summary>
    /// <param name="Lv"></param>
    /// <param name="coordinate">ステージで初期配置されている座標</param>
    /// <param name="weapon">装備武器</param>
    /// <param name="carryItem">持ち物</param>
    /// <param name="enemyAIPattern">行動パターン</param>
    public void StageInit(int lv, Coordinate coordinate, List <Item> carryItem,
                          EnemyAIPattern enemyAIPattern)
    {
        this.lv             = lv;
        this.coordinate     = coordinate;
        this.carryItem      = carryItem;
        this.enemyAIPattern = enemyAIPattern;

        //装備フラグがtrueの武器、アクセサリを装備
        foreach (Item item in carryItem)
        {
            if (item.ItemType == ItemType.WEAPON && item.isEquip == true)
            {
                this.equipWeapon = item.weapon;
            }
            else if (item.ItemType == ItemType.ACCESSORY && item.isEquip == true)
            {
                this.equipAccessory = item.accessory;
            }
        }

        //敵キャラはレベルを渡すとレベルアップ分のステータスを反映してくれる
        GrowthDatabase growthDatabase = Resources.Load <GrowthDatabase>("growthDatabase");

        //成長率取得
        GrowthRate growthRate = growthDatabase.FindByName(name);
        int        lvUp       = lv - 1;

        //小数点以下切り捨て 成長率は整数で入っているので10で割ってやる
        this.maxhp += Mathf.FloorToInt(lvUp * growthRate.hpRate / 100);
        this.hp     = maxhp;

        this.latk += Mathf.FloorToInt(lvUp * growthRate.latkRate / 100);

        this.catk += Mathf.FloorToInt(lvUp * growthRate.catkRate / 100);

        this.dex += Mathf.FloorToInt(lvUp * growthRate.dexRate / 100);

        this.agi += Mathf.FloorToInt(lvUp * growthRate.agiRate / 100);

        this.luk += Mathf.FloorToInt(lvUp * growthRate.lukRate / 100);

        this.ldef += Mathf.FloorToInt(lvUp * growthRate.ldefRate / 100);

        this.cdef += Mathf.FloorToInt(lvUp * growthRate.cdefRate / 100);
    }
Ejemplo n.º 2
0
    //レベルアップするメソッド 直接Static型のUnitController.unitListを変更
    public List <StatusType> lvup(string lvUpUnitName, int resultExp)
    {
        //上がった要素をstring型リストに詰めて返す
        var lvUpList = new List <StatusType>();

        List <Unit> unitList    = UnitController.unitList;
        List <Unit> newUnitList = new List <Unit>();

        foreach (var unit in unitList)
        {
            //リストの中でレベルアップしたユニットが居れば
            if (unit.name == lvUpUnitName)
            {
                //データベースを名前で検索して成長率を取得
                GrowthRate growthRate = growthDatabase.FindByName(lvUpUnitName);

                //職業成長率
                GrowthRateDto growthRateDto = unit.job.growthRateDto;

                //ユニット成長率と職業成長率を合算
                int hpRate   = growthRate.hpRate + growthRateDto.jobHpRate;
                int latkRate = growthRate.latkRate + growthRateDto.jobLatkRate;
                int catkRate = growthRate.catkRate + growthRateDto.jobCatkRate;
                int agiRate  = growthRate.agiRate + growthRateDto.jobAgiRate;
                int dexRate  = growthRate.dexRate + growthRateDto.jobDexRate;
                int lukRate  = growthRate.lukRate + growthRateDto.jobLukRate;
                int ldefRate = growthRate.ldefRate + growthRateDto.jobLdefRate;
                int cdefRate = growthRate.cdefRate + growthRateDto.jobCdefRate;

                //200719 同じステが2回上がるのを防止
                bool hpUpped   = false;
                bool latkUpped = false;
                bool catkUpped = false;
                bool agiUpped  = false;
                bool dexUpped  = false;
                bool lukUpped  = false;
                bool ldefUpped = false;
                bool cdefUpped = false;

                //Lv
                unit.lv++;
                unit.exp = resultExp;

                //210225 LVのピンピン処理に追加
                lvUpList.Add(StatusType.LV);

                //2ピン補正したか否か
                //2ピン補正:上がったステが2個以下ならHPからループしなおし
                bool isRetry = false;

                //レベルアップループ 2つ以上パラメータが成長した時点でbreak
                while (true)
                {
                    //各成長判定 成長率以下の乱数なら+1
                    //HP
                    //1~100の値を作成
                    float ran = Random.Range(1.0f, 100.0f);

                    if (ran <= hpRate && !hpUpped)
                    {
                        unit.maxhp += 1;
                        lvUpList.Add(StatusType.HP);

                        hpUpped = true;
                        //2ピン補正時の時は2つパラメータが成長した時点でループ終了
                        if (lvUpList.Count > 2 && isRetry)
                        {
                            break;
                        }
                    }

                    ran = Random.Range(1.0f, 100.0f);

                    //遠距離攻撃
                    if (ran <= latkRate && !latkUpped)
                    {
                        unit.latk += 1;
                        lvUpList.Add(StatusType.LATK);
                        latkUpped = true;
                        if (lvUpList.Count > 2 && isRetry)
                        {
                            break;
                        }
                    }

                    ran = Random.Range(1.0f, 100.0f);

                    //近距離攻撃
                    if (ran <= catkRate && !catkUpped)
                    {
                        unit.catk += 1;
                        lvUpList.Add(StatusType.CATK);
                        catkUpped = true;
                        if (lvUpList.Count > 2 && isRetry)
                        {
                            break;
                        }
                    }

                    ran = Random.Range(1.0f, 100.0f);

                    //速さ
                    if (ran <= agiRate && !agiUpped)
                    {
                        unit.agi += 1;
                        lvUpList.Add(StatusType.AGI);
                        agiUpped = true;
                        if (lvUpList.Count > 2 && isRetry)
                        {
                            break;
                        }
                    }

                    ran = Random.Range(1.0f, 100.0f);

                    //技
                    if (ran <= dexRate && !dexUpped)
                    {
                        unit.dex += 1;
                        lvUpList.Add(StatusType.DEX);
                        dexUpped = true;
                        if (lvUpList.Count > 2 && isRetry)
                        {
                            break;
                        }
                    }

                    ran = Random.Range(1.0f, 100.0f);

                    //運
                    if (ran <= lukRate && !lukUpped)
                    {
                        unit.luk += 1;
                        lvUpList.Add(StatusType.LUK);
                        lukUpped = true;
                        if (lvUpList.Count > 2 && isRetry)
                        {
                            break;
                        }
                    }

                    ran = Random.Range(1.0f, 100.0f);

                    //遠距離防御
                    if (ran <= ldefRate && !ldefUpped)
                    {
                        unit.ldef += 1;
                        lvUpList.Add(StatusType.LDEF);
                        ldefUpped = true;
                        if (lvUpList.Count > 2 && isRetry)
                        {
                            break;
                        }
                    }

                    ran = Random.Range(1.0f, 100.0f);

                    //近距離防御
                    if (ran <= cdefRate && !cdefUpped)
                    {
                        unit.cdef += 1;
                        lvUpList.Add(StatusType.CDEF);
                        cdefUpped = true;
                        if (lvUpList.Count > 2 && isRetry)
                        {
                            break;
                        }
                    }

                    //2つ以上パラメータが成長していたらループ終了
                    if (lvUpList.Count > 2)
                    {
                        break;
                    }

                    //下まで来たら2ピン補正に入る
                    isRetry = true;
                }
                newUnitList.Add(unit);
            }
            else
            {
                //レベルアップしたユニット以外はそのまま
                newUnitList.Add(unit);
            }
        }

        return(lvUpList);
    }
Ejemplo n.º 3
0
    public void UpdateText(Unit unit)
    {
        this.name.text = unit.name;
        this.race.text = unit.race.GetStringValue();

        this.image.sprite = Resources.Load <Sprite>("Image/Charactors/" + unit.pathName + "/status");

        //アセットから成長率を取得
        GrowthDatabase growthDatabase = Resources.Load <GrowthDatabase>("growthDatabase");
        GrowthRate     growthRate     = growthDatabase.FindByName(unit.name);

        //HP
        hp.text          = growthRate.hpRate.ToString();
        hpGauge.maxValue = StatusConst.GROWTH_MAX;
        hpGauge.value    = growthRate.hpRate;

        //遠距離攻撃
        latk.text          = growthRate.latkRate.ToString();
        latkGauge.maxValue = StatusConst.GROWTH_MAX;
        latkGauge.value    = growthRate.latkRate;

        //近距離攻撃
        catk.text          = growthRate.catkRate.ToString();
        catkGauge.maxValue = StatusConst.GROWTH_MAX;
        catkGauge.value    = growthRate.catkRate;

        //速さ
        agi.text          = growthRate.agiRate.ToString();
        agiGauge.maxValue = StatusConst.GROWTH_MAX;
        agiGauge.value    = growthRate.agiRate;

        //技
        dex.text          = growthRate.dexRate.ToString();
        dexGauge.maxValue = StatusConst.GROWTH_MAX;
        dexGauge.value    = growthRate.dexRate;

        //幸運
        luk.text          = growthRate.lukRate.ToString();
        lukGauge.maxValue = StatusConst.GROWTH_MAX;
        lukGauge.value    = growthRate.lukRate;

        //遠距離防御
        ldef.text          = growthRate.ldefRate.ToString();
        ldefGauge.maxValue = StatusConst.GROWTH_MAX;
        ldefGauge.value    = growthRate.ldefRate;

        //近距離防御
        cdef.text          = growthRate.cdefRate.ToString();
        cdefGauge.maxValue = StatusConst.GROWTH_MAX;
        cdefGauge.value    = growthRate.cdefRate;


        if (unit.name == "霊夢")
        {
            this.detailText.text = "博麗神社の巫女さん。\n\n" +
                                   "2種類の武器と遠距離近距離攻撃、仲間の回復が出来、\n" +
                                   "多くの状況で有利に戦う事が出来ます。\n\n" +

                                   "また、武器や癒符の熟練度が上がりやすくなる\n" +
                                   "スキルを持っているので、\n" +
                                   "序盤から強力な符を装備する事が出来ます。\n\n" +

                                   "中級職で敵の防御スキルを無効化するスキルを習得します。\n\n" +

                                   "上級職では遠距離攻撃特化型と、近距離攻撃が得意で移動力が高い\n" +
                                   "バランス型を選ぶ事が出来ます。";
        }
        else if (unit.name == "魔理沙")
        {
            this.detailText.text = "弾幕はパワー。\n\n" +

                                   "遠距離攻撃と素早さが上がりやすく、\n" +
                                   "経験値を多く獲得するスキルで成長も早いので、\n" +
                                   "攻撃の要となります。\n" +
                                   "また、鍵無しで宝箱を開ける事が出来ます。\n" +
                                   "防御力は高くないので、孤立させ過ぎないように注意しましょう。\n\n" +

                                   "中級職では武器の使用回数消費を抑えるスキルを習得します。\n\n" +

                                   "上級職では攻撃特化型と、回避率が高くアイテムの使用後に\n" +
                                   "行動が出来る防御型を選ぶ事が出来ます。";
        }
        else if (unit.name == "ルーミア")
        {
            this.detailText.text = "遠距離、近距離防御力共に高く、ダメージを受けにくいです。\n" +
                                   "反面、素早さは低いので、攻撃力の高い敵から\n" +
                                   "追撃を受けないように注意が必要です。\n" +

                                   "上級職にクラスチェンジすると・・・";
        }
        else if (unit.name == "大妖精")
        {
            this.detailText.text = "仲間の回復とステータスを上げる事が出来ます。\n" +
                                   "戦闘能力は低いので、攻撃を受けないように注意しましょう。\n\n" +

                                   "中級職になると、ターン開始時に\n" +
                                   "周囲の仲間の体力を少し回復する事が出来ます。\n\n" +

                                   "上級職になると仲間を再行動させる事が出来るようになり、\n" +
                                   "更に仲間のステータスを上げる事が出来るようになります。\n";
        }

        else if (unit.name == "チルノ")
        {
            this.detailText.text = "戦闘能力は突出した所が無いですが、\n" +
                                   "貴重な遠距離と近距離の両方に\n" +
                                   "攻撃出来る武器を使用する事が出来ます。\n\n" +

                                   "中級職で隣接する敵の回避率を下げるスキルを習得します。\n\n" +

                                   "上級職では仲間のステータスを上げるスキルを習得する職か、\n" +
                                   "敵を移動出来なくするスキルを習得する職を選ぶ事が出来るので、\n" +
                                   "上手に使う事で戦局を有利に進める事が出来ます。";
        }

        else if (unit.name == "文")
        {
            this.detailText.text = "序盤から加入して性能が高いですが、レベルが高い為、\n" +
                                   "文ばかり戦わせると他のキャラが成長しません。\n" +
                                   "序盤は戦闘させ過ぎないように注意が必要です。\n\n" +

                                   "鍵無しで宝箱を開ける事が出来るので宝箱の回収係や、\n" +
                                   "武器を外して壁として活躍させるのがお勧めです。\n\n" +

                                   "素早さが非常に高いですが、取材が目的で異変の解決には\n" +
                                   "関与する気が無い為、攻撃力は低いです。\n\n" +

                                   "所謂お助けキャラですが、成長率は高いので、\n" +
                                   "最後まで活躍する事が出来ます。\n" +

                                   "上級職では攻撃特化型と、回避率の高い\n" +
                                   "防御型を選ぶ事が出来ます。";
        }

        else if (unit.name == "美鈴")
        {
            this.detailText.text = "近距離攻撃と防御に特化した性能で、\n" +
                                   "HPが高く壁として活躍する事が出来ます。\n\n" +

                                   "近距離攻撃の手段を持たない敵に対しては\n" +
                                   "一方的に高いダメージを与える事が出来ます。\n\n" +

                                   "反面、遠距離攻撃への防御力は低く、\n" +
                                   "運も低い為必殺を受けやすいので、\n" +
                                   "過信していると想像以上にダメージを受ける事が有ります。\n\n" +

                                   "中級職から仲間の体力を回復させる事が出来ます。\n\n" +

                                   "上級職では高い必殺率を持つ職業と、\n" +
                                   "仲間の防御力を上げる事が出来る職業を選ぶ事が出来ます。\n";
        }
        else if (unit.name == "小悪魔")
        {
            this.detailText.text = "仲間の回復とステータスを上げる事が出来ます。\n" +
                                   "攻撃力もそこそこの性能で、敵にダメージを与えやすいです。\n" +
                                   "また、仲間を回復すると自分のHPも回復する事が出来ます。\n\n" +

                                   "運が低く、防御力も高くない為、\n" +
                                   "攻撃を受けないように注意しましょう。\n\n" +

                                   "中級職になると、周囲の仲間の攻撃力を上げる事が出来ます。\n" +

                                   "上級職になると仲間を再行動させる事が出来るようになり、\n" +
                                   "更に仲間のステータスを上げる事が出来るようになります。";
        }
        else if (unit.name == "鈴仙")
        {
            this.detailText.text = "攻撃の命中率が高く、射程距離の長い武器で\n" +
                                   "敵を狙撃する事が出来ます。\n\n" +

                                   "運が非常に低く必殺を受けやすいので、\n" +
                                   "攻撃を受けないように注意が必要です。\n\n" +

                                   "上級職では薬で仲間の体力を回復させる事が出来るバランス型と、\n" +
                                   "攻撃特化型の傾向が大きく異なる2種類の職業を選ぶ事が出来ます。\n\n" +

                                   "趣味で登場させたけど、運用に難が有って可愛い。";
        }
        else if (unit.name == "パチュリー")
        {
            this.detailText.text = "遠距離攻撃防御力、技が非常に高く、\n" +
                                   "最大8マス先の敵に遠距離攻撃出来る武器を使用する事が出来る為、\n" +
                                   "遠距離攻撃では圧倒的な性能を持っています。\n\n" +

                                   "反面、HP、近距離防御力は非常に低く、素早さも低めなので、\n" +
                                   "近距離攻撃を受けると一撃で倒されてしまう事も有ります。\n\n" +

                                   "専用武器は修理出来ますが非常に修理費が高額な為、\n" +
                                   "ここぞという時に使用しましょう。\n\n" +

                                   "中級職ではより攻撃力が上がり、\n" +
                                   "上級職では攻守共に強力なスキルを習得します。\n\n" +

                                   "装備出来る符の種類が多く、ショット、レーザーに加えて\n" +
                                   "上級職では物理、癒符のどちらかを装備する事が出来ます。\n";
        }
        else if (unit.name == "咲夜")
        {
            this.detailText.text = "技、速さ、幸運が上がりやすく、\n" +
                                   "また、遠近両方に対して攻撃出来る専用武器を持っている為、\n" +
                                   "隙の無い活躍が出来ます。\n\n" +

                                   "バランス型の成長をするキャラのお約束で\n" +
                                   "運が悪いと器用貧乏になる事も有りますが、\n" +
                                   "その場合も仲間のサポートと鍵開けによる宝箱の回収で\n" +
                                   "いぶし銀の活躍が出来る、まさにパーフェクトメイド。\n\n" +

                                   "中級職では行動せずに待機すると\n" +
                                   "回避率が上がるスキルを習得します。\n\n" +

                                   "上級職では攻撃特化型の職業と、\n" +
                                   "仲間のサポートが出来る職業を選ぶ事が出来ます。\n";
        }

        else if (unit.name == "レミリア")
        {
            this.detailText.text = "序盤から加入して性能が高いですが、レベルが高い為、\n" +
                                   "レミリアばかり戦わせると他のキャラが成長しません。\n" +
                                   "序盤は戦闘させ過ぎないように注意が必要です。\n\n" +

                                   "専用武器のグングニルは遠近両用で非常に高性能ですが、\n" +
                                   "修理費が高額な為、多用すると紅魔館の財政を圧迫してしまいます。\n\n" +

                                   "運命を操る程度の能力の為、非常に幸運の成長率が高く、\n" +
                                   "全体的なステータスの成長率も高い為、\n" +
                                   "終盤も活躍する事が出来ます。\n\n" +

                                   "上級職では戦闘後に敵の能力を下げるスキルを習得する職業と、\n" +
                                   "敵から受けるダメージを確率で半減させるスキルを習得する\n" +
                                   "職業を選ぶ事が出来ます。\n";
        }
        else if (unit.name == "フランドール")
        {
            this.detailText.text = "非常に攻撃寄りのステータスにクリティカル率が高い専用武器、\n" +
                                   "必殺率を上げる専用スキルを持っており、\n" +
                                   "攻撃が命中すれば多くの敵を一撃で倒す事が出来ます。\n\n" +

                                   "反面、技が低い為攻撃の命中が安定しないので、\n" +
                                   "運用に運の要素が強いです。\n\n" +
                                   "また防御力は低いので、シリーズ恒例の\n" +
                                   "「やっつけ負け」に注意する必要が有ります。\n\n" +

                                   "ゲーム終盤に上級職で加入する為、\n" +
                                   "クラスチェンジ可能な職業は有りません。";
        }
    }