/// <summary> /// 戦闘準備 /// お互いの与ダメージと /// オブジェクト、Characterスクリプト、命中率のセット /// </summary> /// <param name="_attack">攻撃側のオブジェクト</param> /// <param name="_interceptor">迎撃側のオブジェクト</param> public void BattleSetup(GameObject _attack, GameObject _interceptor) { Attack_manager _attacker = new Attack_manager(); Attack_manager _def = new Attack_manager(); _battleend = false; //初期化 _attacker.Initialize(); _def.Initialize(); //クラスセット _attacker.set_chara(_attack); _def.set_chara(_interceptor); //与ダメセット _attacker.set_atk(_def._chara._totaldef, 1); _def.set_atk(_attacker._chara._totaldef, 1); //命中率セット _attacker.set_hit(_def._chara._avoidance); _def.set_hit(_attacker._chara._avoidance); //必殺率セット _attacker.set_critical(_def._chara._totalluk); _def.set_critical(_attacker._chara._totalluk); //スキルチェック //_attacker.Skill_Check(); //_def.Skill_Check(); //戦闘処理開始 Battle(_attacker, _def); }
/// <summary> /// 与ダメージ /// </summary> /// <param name="_attack">攻撃側のオブジェクト</param> /// <param name="_interceptor">攻撃される側のオブジェクト</param> public int GetDamage(GameObject _attack, GameObject _interceptor) { Attack_manager _attacker = new Attack_manager(); Attack_manager _def = new Attack_manager(); //与ダメセット _attacker.set_atk(_def._chara._totaldef, 1); return(_attacker._atk); }
/// <summary> /// 戦闘詳細表示用 /// 戻り値[A:HP,A:威力,A:命中,A:必殺率,D:HP,D:威力,D:命中,D:必殺率] /// </summary> /// <param name="_attack">攻撃側のオブジェクト</param> /// <param name="_interceptor">迎撃側のオブジェクト</param> /// <returns>表示用配列</returns> public int[] GetBattleState(GameObject _attack, GameObject _interceptor) { int[] i = { 0, 0, 0, 0, 0, 0, 0, 0 }; Attack_manager _attacker = new Attack_manager(); Attack_manager _def = new Attack_manager(); _battleend = false; //初期化 _attacker.Initialize(); _def.Initialize(); //クラスセット _attacker.set_chara(_attack); _def.set_chara(_interceptor); //与ダメセット _attacker.set_atk(_def._chara._totaldef, 1); _def.set_atk(_attacker._chara._totaldef, 1); //命中率セット _attacker.set_hit(_def._chara._avoidance); _def.set_hit(_attacker._chara._avoidance); //必殺率セット _attacker.set_critical(_def._chara._totalluk); _def.set_critical(_attacker._chara._totalluk); i[0] = _attacker._chara._totalhp; i[1] = _attacker._atk; i[2] = (int)_attacker._Totalhit; i[3] = (int)_attacker._critical; i[4] = _def._chara._totalhp; i[5] = _def._atk; i[6] = (int)_def._Totalhit; i[7] = (int)_def._critical; return(i); }
/// <summary> /// 戦闘実行 /// </summary> /// <param name="_attacker">攻撃側の構造体</param> /// <param name="_def">防御側の構造体</param> void Battle(Attack_manager _attacker, Attack_manager _def) { //それぞれの武器の耐久減少量 var atk_stock = 0; var def_stock = 0; //それぞれの取得経験値 var atk_exp = 0; var def_exp = 0; //カウンター時 if (_def._counter) { for (var i = 0; i < _def._chara._attack_count; i++) { //迎撃側の攻撃 def_exp += BattleSystem(_def, _attacker, _def._revenge, def_stock); def_stock++; if (_battleend) { break; } } for (var i = 0; i < _attacker._chara._attack_count; i++) { //攻撃側の攻撃 atk_exp += BattleSystem(_attacker, _def, 0, atk_stock); atk_stock++; if (_battleend) { break; } } } else { for (var i = 0; i < _attacker._chara._attack_count; i++) { //攻撃側の攻撃 atk_exp += BattleSystem(_attacker, _def, 0, atk_stock); atk_stock++; if (_battleend) { break; } } for (var i = 0; i < _def._chara._attack_count; i++) { //迎撃側の攻撃 def_exp += BattleSystem(_def, _attacker, _def._revenge, def_stock); def_stock++; if (_battleend) { break; } } } //追撃判定 if ((_attacker._chara._attack_speed > _def._chara._attack_speed + 3) && (_attacker._chara._totalskl > _def._chara._totalskl + 3) && _battleend == false) { for (var i = 0; i < _attacker._chara._attack_count; i++) { //攻撃側の追撃 atk_exp += BattleSystem(_attacker, _def, 0, atk_stock); atk_stock++; if (_battleend) { break; } } } else if ((_attacker._chara._attack_speed + 3 < _def._chara._attack_speed) && (_attacker._chara._totalskl + 3 < _def._chara._totalskl) && _battleend == false) { for (var i = 0; i < _def._chara._attack_count; i++) { //迎撃側の追撃 def_exp += BattleSystem(_def, _attacker, _def._revenge, def_stock); def_stock++; if (_battleend) { break; } } } //経験値加算 _attacker.addexp(atk_exp); _def.addexp(def_exp); //装備の耐久を使った分だけ減らす _attacker._chara.UseEquipment(atk_stock); _def._chara.UseEquipment(def_stock); _attacker._chara.BattleEnd(); _def._chara.BattleEnd(); }
/// <summary> /// 戦闘処理 /// </summary> /// <param name="_atkside">攻撃側</param> /// <param name="_defside">迎撃側</param> /// <param name="_addcri">必殺補正</param> /// <param name="weapon_stock">今の戦闘での武器の消耗</param> /// <returns>経験値</returns> int BattleSystem(Attack_manager _atkside, Attack_manager _defside, int _addcri, int weapon_stock) { if (!_battleend && _atkside._stock - weapon_stock >= 1) { //攻撃側の攻撃 //命中判定 if (Random.Range(0, 100) <= _atkside._Totalhit) { //命中 //無敵判定 if (_defside._fortress == true && Random.Range(0, 101) < _defside._chara._level) { Debug.Log(_defside._chara._name + ":無敵!"); } else { //必殺判定 if (Random.Range(0, 100) <= _atkside._critical + _addcri) { //必殺発動 //力を2倍にして攻撃力を再計算 _defside.set_atk(_atkside._chara._totaldef, 2); _defside._chara._totalhp -= _atkside._atk; Debug.Log(_atkside._chara._name + ":必殺!" + _atkside._atk); //吸収判定 if (_atkside._drain && Random.Range(0, 101) < _atkside._chara._totalskl) { _atkside._chara._totalhp += (_atkside._atk) / 2; } _defside.set_atk(_atkside._chara._totaldef, 1); } else { //通常 _defside._chara._totalhp -= _atkside._atk; Debug.Log(_atkside._chara._name + ":命中!" + _atkside._atk); //吸収判定 if (_atkside._drain && Random.Range(0, 101) < _atkside._chara._totalskl) { _atkside._chara._totalhp += _atkside._atk / 2; } } if (_defside._chara._totalhp <= 0) { //根性判定 if (_defside._fightingspirit && Random.Range(0, 101) < _defside._chara._totalluk) { _defside._chara._totalhp = 1; } else { _battleend = true; //戦闘終了処理 return(_atkside.addexpwin(_defside._chara._totalLevel)); } } else { return(_atkside.addexpdraw(_defside._chara._totalLevel, _atkside._atk)); } } } else { //外れ Debug.Log(_atkside._chara._name + ":ミス"); return(0); } } return(0); }