//回復時の後処理 private void HealResult() { if (deltaTime <= wait) { return; } deltaTime = 0; //210216回復時の後処理 経験値計算の違いや撃破、アイテムドロップが無い為作成 buttonWait = true; //スキルレベルの計算 string skillLevelResult = SkillLevelUtil.CalculateHealSkillLevel(unit); //スキルレベルアップの文章が返って来ればメッセージウィンドウで最後に表示する if (skillLevelResult != null) { messageList.Add(skillLevelResult); } int exp; //経験値の計算 20固定 exp = 20; if (unit.job.skills.Contains(Skill.努力家)) { exp = Mathf.RoundToInt(exp * 1.2f); Debug.Log($"スキル{Skill.努力家} 経験値1.2倍 : {exp}"); } string messageText = string.Format("{0}の経験値を獲得した。", exp); if (battleTextVisible) { battleMessageWindow.GetComponent <BattleMessageWindow>().UpdateText(messageText); } //経験値ゲージ初期化 第一引数は現在 第二は獲得経験値 isExpGaugeUpdateEnd = false; expWindow.InitExpGauge(unit.exp, exp); expWindow.gameObject.SetActive(true); //ユニットに経験値を与える unit.exp += exp; //通常のレベルアップと回復のレベルアップでは後処理が違うのでここで設定する endDestination = BattleState.HEAL_END; SetBattleState(BattleState.EXPGAUGE); }
//回復の場合はequipWeaponを参照しないので個別で public static string CalculateHealSkillLevel(Unit unit) { //既にSなら上がらない if (unit.healLevel == SkillLevel.NONE || unit.healLevel == SkillLevel.S) { return(null); } //経験値増加 if (unit.job.skills.Contains(Skill.天才肌)) { unit.strikeExp += 2; Debug.Log($"{unit.name}の{Skill.天才肌}効果で回復技能経験値+2"); } else { unit.healExp += 1; Debug.Log($"{unit.name}の回復技能経験値+1"); } //SkillLevelクラスのIntValueは要求経験値なので、それ以上になればスキルレベルアップ if (unit.healExp >= unit.healLevel.GetIntValue()) { //経験値をリセット unit.healExp = 0; //レベルアップ unit.healLevel = SkillLevelUtil.SkillLvUp(unit.healLevel); Debug.Log($"{unit.name}の回復の熟練度が{unit.healLevel}に上がりました。"); return($"回復の熟練度が{unit.shotLevel}に上がりました。"); } else { //特にレベルが上がらなかった時は何も返さない return(null); } }
/// <summary> /// 210218 スキルレベルの計算を行う /// </summary> /// <param name="unit"></param> public static string CalculateSkillLevel(Unit unit) { //武器を装備していない場合は経験値を得られない if (unit.equipWeapon == null) { Debug.Log($"武器を装備していないので技能経験値を得られません"); return(null); } if (unit.equipWeapon.type == WeaponType.SHOT) { //スキルレベルがSの場合は経験値も増えない NONEは一応 if (unit.shotLevel == SkillLevel.NONE || unit.shotLevel == SkillLevel.S) { return(null); } //経験値増加 if (unit.job.skills.Contains(Skill.天才肌)) { //210226 天才肌を実装 unit.shotExp += 2; Debug.Log($"{unit.name}の{Skill.天才肌}効果でショット技能経験値+2"); } else { unit.shotExp += 1; Debug.Log($"{unit.name}のショット技能経験値+1"); } //SkillLevelクラスのIntValueは要求経験値なので、それ以上になればスキルレベルアップ if (unit.shotExp >= unit.shotLevel.GetIntValue()) { //経験値をリセット unit.shotExp = 0; //レベルアップ unit.shotLevel = SkillLevelUtil.SkillLvUp(unit.shotLevel); Debug.Log($"{unit.name}のショットの熟練度が{unit.shotLevel}に上がりました。"); return($"ショットの熟練度が{unit.shotLevel}に上がりました。"); } else { //特にレベルが上がらなかった時は何も返さない return(null); } } else if (unit.equipWeapon.type == WeaponType.LASER) { if (unit.job.skills.Contains(Skill.天才肌)) { unit.laserExp += 2; Debug.Log($"{unit.name}の{Skill.天才肌}効果でレーザー技能経験値+2"); } else { unit.laserExp += 1; Debug.Log($"{unit.name}のレーザー技能経験値+1"); } if (unit.laserExp >= unit.laserLevel.GetIntValue()) { unit.laserExp = 0; unit.laserLevel = SkillLevelUtil.SkillLvUp(unit.laserLevel); Debug.Log($"{unit.name}のレーザーの熟練度が{unit.laserLevel}に上がりました。"); return($"レーザーの熟練度が{unit.laserLevel}に上がりました。"); } else { //特にレベルが上がらなかった時は何も返さない return(null); } } else if (unit.equipWeapon.type == WeaponType.STRIKE) { if (unit.job.skills.Contains(Skill.天才肌)) { unit.strikeExp += 2; Debug.Log($"{unit.name}の{Skill.天才肌}効果で物理技能経験値+2"); } else { unit.strikeExp += 1; Debug.Log($"{unit.name}の物理技能経験値+1"); } if (unit.strikeExp >= unit.strikeLevel.GetIntValue()) { unit.strikeExp = 0; unit.strikeLevel = SkillLevelUtil.SkillLvUp(unit.strikeLevel); Debug.Log($"{unit.name}の物理の熟練度が{unit.strikeLevel}に上がりました。"); return($"物理の熟練度が{unit.strikeLevel}に上がりました。"); } else { //特にレベルが上がらなかった時は何も返さない return(null); } } else if (unit.equipWeapon.type == WeaponType.HEAL) { if (unit.job.skills.Contains(Skill.天才肌)) { unit.healExp += 2; Debug.Log($"{unit.name}の{Skill.天才肌}効果で癒符技能経験値+2"); } else { unit.healExp += 1; Debug.Log($"{unit.name}の癒符技能経験値+1"); } if (unit.healExp >= unit.laserLevel.GetIntValue()) { unit.healExp = 0; unit.healLevel = SkillLevelUtil.SkillLvUp(unit.healLevel); Debug.Log($"{unit.name}の癒符の熟練度が{unit.healLevel}に上がりました。"); return($"癒符の熟練度が{unit.healLevel}に上がりました。"); } else { //特にレベルが上がらなかった時は何も返さない return(null); } } else { //通常有り得ない 実装ミス return(null); } }
/// <summary> /// プレイヤーの攻撃、敵の攻撃関連のメソッド ここまで /// </summary> /// <summary> /// 210228 戦闘後の後処理 /// </summary> private void Result() { if (deltaTime <= wait) { return; } deltaTime = 0; buttonWait = true; //敵の消滅処理 if (mainMap.ActiveEnemy.enemy != null) { if (mainMap.ActiveEnemy.enemy.IsDead()) { //210521 ボス撃破時の会話を表示 if (enemy.isBoss) { //会話が存在すれば会話処理へ if (battleTalkManager.IsBossDestroyTalkExist(StageSelectManager.selectedChapter)) { battleMapManager.SetMapMode(MapMode.BATTLE_AFTER_TALK); return; } } //210228 敵のドロップアイテム追加 if (enemy.hasDromItem) { //メッセージ追加 messageList.Add($"{enemy.dropItem.ItemName}を手に入れた!"); Debug.Log($"{unit.name}はドロップアイテム{enemy.dropItem.ItemName} を手に入れた!"); //6個以上の時はスキマに送る //TODO 今後スキマに送るアイテムを選択出来るようにしたい if (unit.carryItem.Count >= 6) { ItemInventory.itemList.Add(enemy.dropItem); messageList.Add($"{enemy.dropItem.ItemName}は\n手持ちが一杯なのでスキマに送りました。"); Debug.Log($"{enemy.dropItem.ItemName} は手持ちが一杯なのでスキマに入れた。"); } else { //手持ちに空きが有る場合は普通に入手する unit.carryItem.Add(enemy.dropItem); } } //210221 敵を倒した時の攻撃可能範囲処理削除 mainMap.RemoveWarningCells(mainMap.ActiveEnemy.enemyId); //210303 消滅エフェクトを追加 Vector3 effectPos = new Vector3(mainMap.ActiveEnemy.transform.position.x, mainMap.ActiveEnemy.transform.position.y + 0.2f, mainMap.ActiveEnemy.transform.position.z); GameObject portal = Instantiate(effectManager.portalEffectList[0], effectPos, Quaternion.identity) as GameObject; //敵の削除処理を実行 Destroy(mainMap.ActiveEnemy.gameObject); } } //スキルレベルの計算 string skillLevelResult = SkillLevelUtil.CalculateSkillLevel(unit); //技能レベルアップの文章が返って来ればメッセージウィンドウで最後に表示する if (skillLevelResult != null) { messageList.Add(skillLevelResult); } //TODO 武器の故障を反映する int exp; //基礎経験値の計算 exp = battleCalculator.getBaseExp(unit.lv, enemy.lv); //敵が死んでいたら撃破経験値の計算 その内ボス補正入れる if (enemy.IsDead()) { exp += battleCalculator.getKnockDownExp(unit.lv, enemy.lv); } //ユニットに経験値を与える //210226 スキル反映 if (unit.job.skills.Contains(Skill.努力家)) { exp = Mathf.RoundToInt(exp * 1.2f); Debug.Log($"スキル{Skill.努力家} 経験値1.2倍 : {exp}"); } string messageText = string.Format("{0}の経験値を獲得した。", exp); if (battleTextVisible) { battleMessageWindow.GetComponent <BattleMessageWindow>().UpdateText(messageText); } //経験値ゲージ初期化 第一引数は現在 第二は獲得経験値 isExpGaugeUpdateEnd = false; expWindow.InitExpGauge(unit.exp, exp); expWindow.gameObject.SetActive(true); //ユニットの経験値加算 unit.exp += exp; //通常のレベルアップと回復のレベルアップでは後処理が違うのでここで設定する endDestination = BattleState.END; SetBattleState(BattleState.EXPGAUGE); }