static void ChainClash() { bool defending = false; bool success = false; for (int i = 0; i < monsters.Length; i++) { for (int j = 0; j < ActionChain.Length; j++) { // 0 - W, 1 - A, 2 - S, 3 - D switch (ActionChain[j].num) { case 1: Crit = RPG.rnd.Next(1, 10); double atksuc = RPG.rnd.NextDouble(); if (monsters[i].ActionChain[j].num == 3) { atksuc -= 0.1f; } if (!monsters[0].isInvincible && atksuc <= strikeChance) { success = true; Inventory[0].OnUse(monsters, 0); if (Crit >= 8) { monsters[0].HP -= Inventory[0].Damage * critCoeff * strikeMultiplier; RPG.Dialogue($"Критический урон! Вы нанесли {Inventory[0].Damage * critCoeff * strikeMultiplier} урона.", true, ConsoleColor.Yellow); } else { monsters[0].HP -= Inventory[0].Damage * strikeMultiplier; RPG.Dialogue($"Вы нанесли {Inventory[0].Damage * strikeMultiplier} урона.", true, ConsoleColor.Green); } if (monsters[0].HP < 0) { monsters[0].HP = 0; } Console.WriteLine("У монстра осталось " + monsters[0].HP + " HP"); } else { Console.WriteLine("Монстр не получил урона!"); } break; case 2: Inventory[2].OnUse(monsters); break; case 3: defenceMultiplier += 0.25f; defending = true; break; default: break; } switch (monsters[i].ActionChain[j].num) { case 1: if (monsters[i].HP > 0) { Inventory[1].OnUse(monsters, i); if (monsters[i].Damage - Inventory[1].Defence * defenceMultiplier > 0) { HP -= monsters[i].Damage - Inventory[1].Defence * defenceMultiplier; RPG.Dialogue($"{monsters[i].Name} {i + 1} нанёс {monsters[i].Damage} ед. урона ({Inventory[1].Defence * defenceMultiplier} ед. урона заблокировано)", true, ConsoleColor.Red); } else { RPG.Dialogue($"{monsters[i].Name} {i + 1} не нанёс урона.", true, ConsoleColor.Red); } if (HP <= 0) { PStatus = Status.None; Console.WriteLine("Вы умерли." + "\nЗагрузить файл сохранения? 1 - Да; Любая клавиша - Выход"); var C = Console.ReadLine(); switch (C) { case "1": LoadProgress(false); RPG.GetRandomEvent(); break; default: Environment.Exit(0); break; } } } break; case 2: GetTypeEffect(monsters[i]); GetTypeSpecAtk(monsters[i]); break; case 3: if (!success) { RPG.Dialogue($"Противник увернулся от атаки.", true); } else { RPG.Dialogue($"Противник попытался увернуться от атаки.", true); } break; default: break; } // Switch } // for ActionChain if (effectCount != 0) { effectCount--; switch (PStatus) { case Status.Poisoned: HP -= 2 * (LVL + 1); RPG.Dialogue($"Было снято {2 * (LVL + 1)} ХП от яда.", true, ConsoleColor.DarkGreen); break; case Status.OnFire: HP -= 3 * (LVL + 1); RPG.Dialogue($"Было снято {3 * (LVL + 1)} ХП от огня.", true, ConsoleColor.DarkRed); break; default: break; } } if (monsters[i].Type == Monster.MType.Luminous || Inventory[1].GetType().Equals(new Yang_W())) { monsters[i].ResetDamage(); } else if (monsters[i].Type == Monster.MType.Thorned) { defenceMultiplier = 1f; } else if (monsters[i].Type == Monster.MType.Ice && monsters[i].isInvincible) { monsters[i].isInvincible = false; monsters[i].ResetDamage(); } if (defending) { defenceMultiplier = 1f; defending = false; } } // for monsters count++; Console.ReadKey(); MonsterFight(); } // ChainClash