예제 #1
0
        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