//コンストラクタ public Job(JobName jobname, JobLevel jobLevel, List <Skill> skills, List <JobName> classChangeDestination, List <WeaponType> weaponTypes, JobStatusDto statusDto, GrowthRateDto growthRateDto, int move) { this.jobName = jobname; this.jobLevel = jobLevel; this.skills = skills; this.classChangeDestination = classChangeDestination; this.weaponTypes = weaponTypes; //ステータス this.statusDto = statusDto; //成長率補正 this.growthRateDto = growthRateDto; this.move = move; }
//レベルアップするメソッド 直接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); }