private static int DoLaserAttack(BasicUnitModel attacker, BasicUnitModel defender) { var attackBonus = RNG.GetDiceDiv2(); var defenseBonus = RNG.GetDiceDiv2(); var dmg = attacker.Attack + attackBonus; var def = defender.Defense + defenseBonus; var rawResultDamage = dmg - def; var resultDamage = rawResultDamage > 0 ? dmg - def : 0; EventLog.PrintPlain(string.Format(Lang["Battle_Laser_Attack"], attacker.IsPlayer ? Player.Name : attacker.Name, Enums.Get_Name((BattleActionSuccess)attackBonus), defender.IsPlayer ? Player.Name : defender.Name, attackBonus), false); EventLog.PrintPlain(string.Format(Lang["Battle_Laser_Defense"], defender.IsPlayer ? Player.Name : defender.Name, Enums.Get_Name((BattleActionSuccess)defenseBonus), defenseBonus), false); EventLog.PrintPlain(string.Format(Lang["Battle_Laser_Result"], attacker.Attack, attackBonus, defender.Defense, defenseBonus, resultDamage, rawResultDamage)); if (attackBonus == 3 && defenseBonus == 1 && RNG.GetDice() <= GameConfig.CriticalChanceLaser) { if (attacker.IsPlayer && !defender.IsImmuneToCrits) { EventLog.Print("Battle_Laser_CriticalPlayer"); defender.CurrentHP = 0; } else { EventLog.Print("Battle_Laser_CriticalEnemy", Enums.Get_Name(Get_EquipToDamage())); } } return resultDamage; }
private static int DoMissileAttack(BasicUnitModel attacker, BasicUnitModel defender) { EventLog.Print("Battle_Missile_Fired", attacker.IsPlayer ? Player.Name : attacker.Name, defender.IsPlayer ? Player.Name : defender.Name, false); attacker.CurrentMissiles--; var isHit = RNG.GetDice() <= GameConfig.MissileAccuracy; if (isHit) { if (!defender.IsPlayer) { ((NPC_Model) defender).IsRelevealedECM = true; } if (defender.ECM == EquipmentState.Yes) { EventLog.Print("Battle_Missile_UseECM", defender.IsPlayer ? Player.Name : defender.Name, false); if (RNG.GetDice() <= GameConfig.ECM_Effeciency) { EventLog.Print("Battle_Missile_Destroyed"); return 0; } EventLog.Print("Battle_Missile_ECM_Failed", GameConfig.MissileDamage); } else { EventLog.Print("Battle_Missile_DirectHit", GameConfig.MissileDamage); } if (RNG.GetDice() <= GameConfig.CriticalChanceMissile) { if (attacker.IsPlayer && !defender.IsImmuneToCrits) { EventLog.Print("Battle_Missile_CriticalPlayer"); defender.CurrentHP = 0; } else { EventLog.Print("Battle_Missile_CriticalEnemy", Enums.Get_Name(Get_EquipToDamage())); } } return GameConfig.MissileDamage; } EventLog.Print("Battle_Missile_Missed"); return 0; }
private static void DoAttack(BasicUnitModel attacker, BasicUnitModel defender, NPC_Model enemy, AttackType attackType) { var resultDamage = 0; switch (attackType) { case AttackType.Laser : resultDamage = DoLaserAttack(attacker, defender); break; case AttackType.Missile : resultDamage = DoMissileAttack(attacker, defender); if (attacker.IsPlayer) Player.Statistics.MissilesUsed++; break; } if (attacker.IsPlayer) Player.Statistics.DamageInflicted += resultDamage; else Player.Statistics.DamageTaken += resultDamage; defender.CurrentHP -= (resultDamage); if (defender.IsDead) { defender.CurrentHP = 0; EventLog.Print(defender.IsPlayer ? "Battle_YouAreDead" : "Battle_EnemyIsDead"); ZIOX.PressAnyKey(defender.IsPlayer); } PlayerStats.Draw_PlayerStats(); BattleStats.Draw_Player_Stats(Player); BattleStats.Draw_NPC_Stats(enemy, Player); }