static public void Init(Monster[] _monsters, bool _boss = false) { Reset(); boss = _boss; monsters = _monsters; amount = monsters.Length; if (amount == 1) { RPG.Dialogue($"{GetTypeName(monsters[0].Type)} {monsters[0].Name}!" + $"\nУ него: {monsters[0].HP} HP" + $"\nи {monsters[0].Damage} Урона.", false, ConsoleColor.Red); // Вывод строки красного цвета о начале схватки } else { RPG.Dialogue("Монстры!"); for (int i = 0; i < amount; i++) { RPG.Dialogue($"\n{i}: {GetTypeName(monsters[i].Type)} {monsters[i].Name}!" + $"\nУ него: {monsters[i].HP} HP" + $"\nи {monsters[i].Damage} Урона.", false, ConsoleColor.Red); } } MonsterFight(); }
public static void ShowList() { Console.Clear(); UpdateList(); int count = 0; foreach (Achievement ach in achList) { if (ach.Checker()) { count++; RPG.Dialogue("\n" + ach.Title, true, ach.Color); Console.WriteLine(ach.Description); } else { RPG.Dialogue("\n" + ach.Title, true, ConsoleColor.Red); } } Console.WriteLine("\n" + count + "/" + achList.Count + " достижений получено."); Console.ReadKey(); }
public static void ShowMenu() { Console.Clear(); Console.WriteLine($"Текущее оружие: {Player.Inventory[0].GetName()} ({Player.Inventory[0].LVL} УР)" + $"\n{Player.Inventory[0].Description}" + $"\nУрон: {Player.Inventory[0].baseDamage} АТК"); Console.WriteLine($"\nТекущая броня: {Player.Inventory[1].GetName()} ({Player.Inventory[1].LVL} УР)" + $"\n{Player.Inventory[1].Description}" + $"\nЗащита: {Player.Inventory[1].Defence} ЗАЩ"); Console.WriteLine($"\nТекущий предмет: {Player.Inventory[2].GetName()}" + $"\n{Player.Inventory[2].Description}"); Console.WriteLine("\n"); for (int i = 0; i < Player.Passive_Inventory.Length; i++) { if (i == index) { RPG.Dialogue($"[{Player.Passive_Inventory[i].GetName()}] - {Player.Passive_Inventory[i].Description} (УР: {Player.Passive_Inventory[i].LVL})", true, Player.Passive_Inventory[i].Colour); } else { RPG.Dialogue($" {Player.Passive_Inventory[i].GetName()} ", true, Player.Passive_Inventory[i].Colour); } } Console.WriteLine("W,S - Выбрать предмет, E - Экипировать предмет, Q - Выйти"); MenuControls(); }
public static void ShowMenu() { Console.Clear(); if (index == 0) { RPG.Dialogue($"[{newfile}]", true); } else { RPG.Dialogue($"{newfile}", true); } for (int i = 1; i < Player.subDirs.Length + 1; i++) { if (i == index) { RPG.Dialogue($"[{Player.subDirs[i - 1]}]", true); } else { RPG.Dialogue($" {Player.subDirs[i - 1]} ", true); } } Console.WriteLine("W,S - Переместить выделение, E - Выбрать пункт меню, Q - Выйти"); MenuControls(); }
static void MenuControls() { Item buffer; ConsoleKey key = Console.ReadKey().Key; switch (key) { case ConsoleKey.E: buffer = Player.Passive_Inventory[index]; switch (Player.Passive_Inventory[index].IType) { case Item.Type.Armour: Player.Passive_Inventory[index] = Player.Inventory[1]; Player.Inventory[1] = buffer; break; case Item.Type.Weapon: Player.Passive_Inventory[index] = Player.Inventory[0]; Player.Inventory[0] = buffer; break; case Item.Type.Item: Player.Passive_Inventory[index] = Player.Inventory[2]; Player.Inventory[2] = buffer; break; default: RPG.Dialogue("Нельзя экипировать."); break; } goto default; case ConsoleKey.Q: break; case ConsoleKey.S: if (index < Player.Passive_Inventory.Length - 1) { index++; } goto default; case ConsoleKey.W: if (index > 0) { index--; } goto default; default: ShowMenu(); break; } }
// Инициализация схватки static public void Init(int _amount = 1) { Reset(); amount = _amount; monsters = new Monster[amount]; for (int i = 0; i < amount; i++) { if (i == 0) { monsters[i] = new Monster { Type = (Monster.MType)RPG.rnd.Next(0, 7), } } ; else { monsters[i] = new Monster(LVL - 1) { Type = (Monster.MType)RPG.rnd.Next(0, 7), } }; } if (amount != 1) { RPG.Dialogue("Монстры!"); for (int i = 0; i < amount; i++) { monsters[i].HP *= (1 - 1 / (2 * amount)); monsters[i].Damage *= (1 - 1 / (2 * amount)); RPG.Dialogue($"\n{i}: {GetTypeName(monsters[i].Type)} {monsters[i].Name} (УР: {monsters[i].LVL})!" + "\nУ него: " + monsters[i].HP + " HP" + "\nи " + monsters[i].Damage + " Урона", false, ConsoleColor.Red); } } else { RPG.Dialogue(GetTypeName(monsters[0].Type) + $" {monsters[0].Name}!" + "\nУ него: " + monsters[0].HP + " HP" + "\nи " + monsters[0].Damage + " Урона", false, ConsoleColor.Red); // Вывод строки красного цвета о начале схватки } MonsterFight(); // Начать цикл схватки }
} // ChainClash #region Functions private static void GetTypeSpecAtk(Monster monster) // Получить специальную атаку типа монстра { double a = RPG.rnd.NextDouble(); switch (monster.Type) { case Monster.MType.Explosive: if (count == 4) { monster.Damage = (float)Math.Pow(2, LVL) / 1.5f; monster.HP = 0; RPG.Dialogue("Монстр подорвался.", true, ConsoleColor.DarkRed); } break; case Monster.MType.Thorned: if (a <= 1f / 4) { defenceMultiplier = 0f; RPG.Dialogue("Монстр выстрелил шип!", true, ConsoleColor.DarkRed); } break; case Monster.MType.Ice: if (a <= 1f / 20) { monster.isInvincible = true; monster.Damage = 0; RPG.Dialogue("Монстр поставил ледяной щит.", true, ConsoleColor.Cyan); } break; case Monster.MType.Luminous: if (a <= 3f / 10) { monster.Damage += monster.Damage / 5; RPG.Dialogue("Монстр использовал линзу!", true, ConsoleColor.White); } break; default: break; } }
public override void OnUse(Monster[] monsters, int index = 0) { Random rnd = new Random(); int potion = rnd.Next(1, 5); switch (potion) { // heal the player case 1: float recovHP = 10; if (Player.MaxHP - Player.HP > 10) { Player.HP += 10; } else { recovHP = Player.MaxHP - Player.HP; Player.HP = Player.MaxHP; } RPG.Dialogue($"Лечебное Зелье! (Восстановлено {recovHP})", true, ConsoleColor.Green); break; // damage all monsters case 2: foreach (Monster mnstr in monsters) { mnstr.HP -= 12; } RPG.Dialogue("Взрывное Зелье! (Всем монстрам было нанесено 12 урона)", true, ConsoleColor.Green); break; // damage a random monster case 3: int idx = rnd.Next(0, monsters.Length - 1); monsters[idx].HP -= 31 - 16 / (monsters[idx].LVL + 1); RPG.Dialogue($"Необычно Конкретное Зелье! (Монстру {idx+1} было нанесено {31 - 16 / (monsters[idx].LVL + 1)})", true, ConsoleColor.Green); break; // damage the player case 4: Player.HP -= 62 - 60 / (Player.LVL + 1); RPG.Dialogue($"Зелье Саботажа! (Вам было нанесено {62 - 60 / (Player.LVL + 1)} урона)", true, ConsoleColor.Red); break; } }
static public void GoToCity() { UpdateEconomy(); RPG.Fancies(); Console.Clear(); //RPG.Dialogue(" /o[+]o| _[T]_" + // "\n |T=n=T| |=n=|", ConsoleColor.White, true); if (!wasInCity) { wasInCity = true; RPG.Dialogue("В городе можно вылечиться или посетить таверну."); } Console.WriteLine("\nИгрок:" + "\nHP: " + HP + "/" + MaxHP + " [" + RPG.HPLine + "] " + "\nДеньги: " + Money); Console.WriteLine("\nЧто будешь делать? Вылечиться - 1, Таверна - 2, Вернуться в лес - 0"); switch (Console.ReadLine()) { case "1": GoHeal(); break; case "2": GoToTavern(); break; case "0": Console.Clear(); break; default: GoToCity(); break; } }
static void Texts(int num) { switch (num) { case 1: RPG.Dialogue("Следуя указаниям незнакомца, вы подходите к Заброшеной Башне."); RPG.Dialogue("Судя по внешнему виду, башне несколько сотен лет."); RPG.Dialogue("Вокруг только лес, нет никакого замка или другого сооружения, к которому могла быть пристроена башня"); RPG.Dialogue("Может крикнуть что-нибудь?"); RPG.Dialogue("\nНезнакомец", "Не стоит кричать, я ощущаю твоё присутствие и без этого.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("\nНезнакомец появился у вас за спиной. Как и все."); RPG.Dialogue("\nНезнакомец", "Я поведаю все тайны башни пока мы идём до нужного места. Следуй за мной, странник, отступать уже поздно.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("\nВы следуете за незнакомцем в башню."); break; case 2: RPG.Dialogue("\nНезнакомец", "Для начала хотелось бы представиться: Моё имя " + mageName, false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Эта башня была построена ещё 312 лет назад для особой касты людей.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Да, отдельно построенная башня, ничего в этом нет.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Как ты понимаешь, странник, теперь ты принадлежишь этой касте.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "А значит твоё место здесь.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Немногие могут достигнуть твоего уровня, на моей памяти есть только 10 человек, включая тебя.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Первые трое входили в круг Основателей.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Другие шестеро - их последователи и наследники Башни.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Последний наследник погиб ещё 180 лет назад, поэтому Башня находилась без присмотра.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Надеюсь, ты сможешь вернуть Её в былое величие.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "(тихий смех) Понимаю, ты впервые слышишь об этом месте, тебе Она ни к чему.", false, ConsoleColor.DarkMagenta); RPG.Dialogue(mageName, "Надеюсь ты передумаешь, когда мы придём в Алтарную Комнату.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("\nВо время рассказа вы поднимались по очень высокой круговой лестнице. Время пролетело незаметно, и вот вы стоите перед дверью."); RPG.Dialogue("Вы вошли в Алтарную Комнату."); AltarRoom(); break; default: RPG.Dialogue("Что-то пошло не так. Хм."); break; } }
static public void GoToTavern() { int dialRand = RPG.rnd.Next(1, 100); if (dialRand <= 50) { RPG.Dialogue("Вы входите в таверну, со всех сторон слышны крики, смех и в целом весёлая атмосфера"); } else if (dialRand > 50 && dialRand <= 75) { RPG.Dialogue("В таверне необычайно тихо. \nЛюдей почти нет. \nЛюбопытно."); } else if (dialRand > 75 && dialRand <= 90) { RPG.Dialogue("Когда вы вошли, несколько людей на вас обернулись, но затем вернулись ко своим делам."); } else if (dialRand > 90) { RPG.Dialogue("В таверне творится невероятная анархия. Бутылки летают из стороны в сторону, половина столов перевёрнута.", false, ConsoleColor.Yellow); RPG.Dialogue("В общем, всё как и полагается.", false, ConsoleColor.Yellow); gotAnarchy = true; } RPG.Dialogue("\nВы садитесь за стол."); RPG.Dialogue("Вы тихо сидите за столом."); switch (questNum) { case 0: //Первый вход в таверну RPG.Dialogue("\nК вам подходит владелец заведения."); RPG.Dialogue("Владелец: Стол свободен?", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nНе дожидаясь ответа, он сел напротив вас."); RPG.Dialogue("Владелец: По глазам вижу — Искатель приключений." + "\nМоё имя — Охра, приятно познакомиться.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nВы пожимаете руки."); RPG.Dialogue("\nОхра", "Я продаю здесь напитки, а ещё занимаюсь совершенствованием инструментов и оружия.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Так что если тебе хочется выдерживать больше ударов, или бить больнее, то тебе ко мне.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Раз уж ты здесь новенький, то вот, держи выпивку за счёт заведения.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nНа стол поставили кружку с практически чёрной жидкостью."); RPG.Dialogue("\nОхра", "Называется 'Чёрная Дыра'. Называется так из-за цвета, но говорят, что 'уносит' не хуже чёрной дыры.", false, ConsoleColor.DarkYellow); Console.WriteLine("\nВыпить 'Чёрную Дыру'? Да - 1, Нет - Любая другая клавиша"); if (Console.ReadKey().Key == ConsoleKey.D1 || Console.ReadKey().Key == ConsoleKey.NumPad1) { BHDweller = true; Monster mnstr = new Monster(true) { Damage = 20, HP = 120, LVL = 1, Name = "Обитатель чёрной дыры", Type = Monster.MType.Dark }; Fight.Init(new Monster[1] { mnstr }, false); } else { RPG.Dialogue("\nВы вежливо отказываетесь."); RPG.Dialogue("\nОхра", "Не из тех, кто любит выпить? Что же, тогда тебе здесь практически незачем быть!", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "У меня есть безалкогольные варианты, но бесплатно я их раздавать не собираюсь.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Ладно, мне надо руководить этим местом, чтобы снова не возникли анархия и хаос. Увидимся позже.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nСнова?"); } RPG.Dialogue("\nОхра уходит."); RPG.Dialogue("Немного посидев, вы решили вернуться в город."); questNum = 1; break; case 1: //Вход в таверну, получение первого квеста/награды за него. RPG.Dialogue("Из-за угла выходит Охра."); RPG.Dialogue("Охра садится за ваш стол."); switch (currentPlotState) { case QuestState.Unknown: RPG.Dialogue("Охра", "У меня есть одно дело.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра", "Недалеко от Синего Источника проживают Стражи.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Мне нужна голова одного из них.", false, ConsoleColor.DarkYellow); if (LVL < 4) { RPG.Dialogue("Охра", "Для тебя это может быть сложновато.", false, ConsoleColor.DarkYellow); } RPG.Dialogue("Охра", "Если принесёшь, то в награду я смогу тебе что-нибудь улучшить.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра", "Идёт?", false, ConsoleColor.DarkYellow); if (AcceptQuest()) { RPG.Dialogue("Охра", "Ну и отлично!" + "\nЖду тебя с головой Стража.", false, ConsoleColor.DarkYellow); } else { RPG.Dialogue("\nОхра", "Ну нет так нет, но ты заходи ещё, вдруг передумаешь или выпить захочешь.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра уходит."); RPG.Dialogue("Немного посидев, вы решили вернуться в город."); } break; case QuestState.Known: RPG.Dialogue("\nОхра", "Да, мне нечем заняться." + "\nИтак, ты согласен с условиями моего договора?", true, ConsoleColor.DarkYellow); if (AcceptQuest()) { RPG.Dialogue("Охра", "Ну и отлично!" + "\nЖду тебя с головой Стража.", false, ConsoleColor.DarkYellow); } else { RPG.Dialogue("\nОхра", "Ну нет так нет, но ты заходи ещё, вдруг передумаешь или выпить захочешь.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра уходит."); RPG.Dialogue("Немного посидев, вы решили вернуться в город."); } break; case QuestState.Accepted: RPG.Dialogue("Вы тихо сидите за столом, ощущая непрерывный взгляд себе в глаза."); RPG.Dialogue("\nВы говорите: Да принесу я тебе голову!"); RPG.Dialogue("\nОхра встал и ушёл."); RPG.Dialogue("Немного посидев, вы решили вернуться в город."); break; case QuestState.Completed: RPG.Dialogue("\nОхра", "Ну что, принёс? Можешь не отвечать, вижу, что принёс.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра забирает у вас голову Стража"); RPG.Dialogue("\nОхра", "Из их крови выходит замечательный напиток, King Crimson называется.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "А теперь к моей части уговора.", false, ConsoleColor.DarkYellow); questNum = 2; currentPlotState = QuestState.Unknown; GearUpgrade(true); break; } break; case 2: //Вход в таверну, получение Второго квеста/награды за него. RPG.Dialogue("\nЗа вами кто-то наблюдает.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("\nКто это?"); RPG.Dialogue("\nК вам подходит Охра."); RPG.Dialogue("\nОхра", "Рад тебя снова видеть.", false, ConsoleColor.DarkYellow); switch (currentPlotState) { case QuestState.Unknown: RPG.Dialogue("Охра", "У меня для тебя есть ещё одно дело.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Если ты не против, конечно.", false, ConsoleColor.DarkYellow); if (AcceptQuest()) { RPG.Dialogue("\nОхра", "Отлично, на тебя всегда можно положиться.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Хочу предупредить, это задание не из лёгких.", false, ConsoleColor.DarkYellow); if (LVL < 6) { RPG.Dialogue("Охра", "Тебе придётся нелегко, поэтому рекомендую поптренироваться побольше.", false, ConsoleColor.DarkYellow); } RPG.Dialogue("Охра", "Торговец, который продаёт мне довольно редкие товары, недавно пропал без вести.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Я хочу, чтобы ты его нашёл и разузнал в чём дело.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Его маршрут был доволньно опасен. Я удивлён, что он вообще прожил так долго.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Но думаю, что ты справишься.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Вот карта его маршрута, удачи.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nВы получили карту маршрута торговца."); } else { RPG.Dialogue("\nОхра", "Ладно, твой выбор.", false, ConsoleColor.DarkYellow); } break; case QuestState.Known: RPG.Dialogue("\nОхра", "Ну так что, ты согласен?", false, ConsoleColor.DarkYellow); if (AcceptQuest()) { RPG.Dialogue("\nОхра", "Отлично, на тебя всегда можно положиться.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Хочу предупредить, это задание не из лёгких.", false, ConsoleColor.DarkYellow); if (LVL < 6) { RPG.Dialogue("Охра", "Тебе придётся нелегко, поэтому рекомендую потренироваться побольше.", false, ConsoleColor.DarkYellow); } RPG.Dialogue("Охра", "Торговец, который продаёт мне довольно редкие товары, недавно пропал без вести.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Я хочу, чтобы ты его нашёл и разузнал в чём дело.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Его маршрут был доволньно опасен. Я удивлён, что он вообще прожил так долго.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Но думаю, что ты справишься.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Вот карта его маршрута, удачи.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nВы получили карту маршрута торговца."); } else { RPG.Dialogue("\nОхра", "Ладно, твой выбор.", false, ConsoleColor.DarkYellow); } break; case QuestState.Accepted: RPG.Dialogue("Охра", "Есть успехи?", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nВы отрицательно покачали головой."); RPG.Dialogue("\nОхра", "(вздох) Хорошо, не буду тебя напрягать. Но всё же поторопись с выполнением.", false, ConsoleColor.DarkYellow); break; case QuestState.Completed: RPG.Dialogue("Охра", "Как успехи с моим заданием?", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nВы даёте Охре Медальон Торговца."); RPG.Dialogue("\nОхра", "Вот значит как...", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Что же...", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "...", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Придётся искать нового торговца!", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nНа вашем лице выражено удивление."); RPG.Dialogue("\nОхра", "Да, этот торговец был хорош, но это не значит, что он единственный!", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Такие здесь порядки, искатель приключений:", true, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Торговля не стоит на месте!", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра", "Кстати о торговле...", false, ConsoleColor.DarkYellow); questNum = 3; currentPlotState = QuestState.Unknown; GearUpgrade(true); break; } break; case 3: RPG.Dialogue("Чувство наблюдаемости становится сильнее.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("\nДа кто же это?"); RPG.Dialogue("\nОборачиваясь по сторонам в поисках наблюдателя, вы видите, что к вашему столу подходит Охра."); if (RPG.rnd.NextDouble() <= 0.1f) { RPG.Dialogue("Ah shit, here we go again.", false, ConsoleColor.Yellow); ahShit = true; } RPG.Dialogue("\nОхра садится за ваш стол."); switch (currentPlotState) { case QuestState.Unknown: RPG.Dialogue("\nОхра", "Все люди здесь абсолютно бесполезны, надеюсь ты меня обрадуешь.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Нужно сходить в подвал Таверны и убить живущее там нечто.", false, ConsoleColor.DarkYellow); if (LVL <= 7) { RPG.Dialogue("Охра", "Хотя, тебе поможет разве что удача, чтобы справиться с ним.", false, ConsoleColor.DarkYellow); } RPG.Dialogue("Охра", "Согласен?", true, ConsoleColor.DarkYellow); if (AcceptQuest()) { RPG.Dialogue("\nОхра", "Замечательно! Приступай как можно скорее, а то мой бизнес накроется медным тазом!", false, ConsoleColor.DarkYellow); } else { RPG.Dialogue("\nОхра бьёт по столу."); RPG.Dialogue("\nОхра", "Да что же это такое!", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Ладно, я не могу тебя принудить. Найду кого-нибудь.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра ушёл."); RPG.Dialogue("Немного посидев, вы решили вернуться в город."); } break; case QuestState.Known: RPG.Dialogue("\nОхра", "Я ещё не нашёл замены.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Надеюсь, теперь ты согласен мне помочь.", false, ConsoleColor.DarkYellow); if (LVL <= 7) { RPG.Dialogue("Охра", "Хоть ты и не готов.", false, ConsoleColor.DarkYellow); } if (AcceptQuest()) { RPG.Dialogue("\nОхра", "Отлично! Приступай как можно скорее, а то мой бизнес накроется медным тазом!", false, ConsoleColor.DarkYellow); } else { RPG.Dialogue("\nОхра бьёт по столу."); RPG.Dialogue("\nОхра", "Да что же это такое!", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Ладно, я не могу тебя принудить. Поищу кого-нибудь ещё.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра ушёл."); RPG.Dialogue("Немного посидев, вы решили вернуться в город."); } break; case QuestState.Accepted: Console.WriteLine("Начать задание? 1- Да, 2 - Нет."); if (Console.ReadKey().Key == ConsoleKey.D1) { PlotQuests.Quest(); } else { RPG.Dialogue("\nОхра перебирает пальцами по столу пристально смотря вам в глаза."); RPG.Dialogue("\nЭто продолжается в течение минуты."); RPG.Dialogue("\nПосле такой долгой пытки вы сдаётесь, чувствуя нарастающую вину."); RPG.Dialogue("\nОхра встаёт и уходит."); RPG.Dialogue("Немного посидев, вы решили вернуться в город."); } break; case QuestState.Completed: if (brokeOut) { RPG.Dialogue("\nОхра", "Что ты наделал?", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Я тебя попросил разобраться только с монстром!", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Что тебе дверь-то сделала?", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Ладно, чёрт с этой дверью.", false, ConsoleColor.DarkYellow); } RPG.Dialogue("\nОхра", "Спасибо.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Теперь моя работа может продолжаться спокойно.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "От этих паразитов обычно легко избавиться.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Но с этим было что-то не то: слишком уж большой.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Что же, раз уж ты спас мой бизнес...", false, ConsoleColor.DarkYellow); questNum = 4; currentPlotState = QuestState.Unknown; GearUpgrade(true); break; } break; case 4: RPG.Dialogue("В этот раз никто за вами не наблюдает.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("По крайней мере, вы так считаете.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("\nНаконец-то."); RPG.Dialogue("\nЧерез некоторе время к вам подходит Охра."); switch (currentPlotState) { case QuestState.Unknown: RPG.Dialogue("\nОхра", "И снова здравствуй.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Как ты понимаешь, у меня снова есть для тебя дело.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Я недавно ходил в северные шахты.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Там есть ингредиенты для моего нового напитка, хотел набрать достаточно, пока ищу нового торговца.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Ингредиенты я набрал, но...", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра", "Я оставил там свою шляпу.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nВы посмотрели на Охру с немного грустным, разочарованным, но в то же время полным недовольства и умеренной злости взглядом."); RPG.Dialogue("\nОхра", "Не смотри на меня так, эта шляпа очень важна!", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "И вообще, тебе сложно, что ли? Заодно новые места увидишь!", false, ConsoleColor.DarkYellow); if (AcceptQuest()) { RPG.Dialogue("\nОхра", "Спасибо! Жду тебя с нетерпением!", false, ConsoleColor.DarkYellow); } else { RPG.Dialogue("\nОхра посмотрел на вас полным разочароания и печали взглядом."); RPG.Dialogue("\nОхра", "Ладно.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Но просто так я от тебя не отстану.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра ушёл."); RPG.Dialogue("\nПодавив чувство вины, к чему вы уже привыкли, и немного посидев, вы вернулись в город."); } break; case QuestState.Known: RPG.Dialogue("\nОхра", "Ну как там с твоим решением начёт возврата моей шляпы?", true, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Я даже скажу пожалуйста.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра", "Пожалуйста.", false, ConsoleColor.DarkYellow); if (AcceptQuest()) { RPG.Dialogue("\nОхра", "Спасибо!", false, ConsoleColor.DarkYellow); } else { RPG.Dialogue("\nОхра посмотрел на вас полным разочароания и печали взглядом."); RPG.Dialogue("\nОхра", "Ладно. Даже 'пожалуйста' не помогло.", false, ConsoleColor.DarkYellow); RPG.Dialogue("Охра", "Что же ты за жестокий человек?.", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра ушёл."); RPG.Dialogue("\nСнова подавив чувство вины, и немного посидев, вы вернулись в город."); } break; case QuestState.Accepted: RPG.Dialogue("\nОхра", "Где шляпа, Искатель Приключений?", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра", "А?", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра", "Я ведь жду!", false, ConsoleColor.DarkYellow); RPG.Dialogue("\nОхра ушёл, не дав вам шанса высказаться."); RPG.Dialogue("\nНемного посидев, вы вернулись в город."); break; case QuestState.Completed: RPG.Dialogue("\nОхра", "Наконец-то я дождался!", false, ConsoleColor.DarkYellow); questNum = 5; break; } break; case 15: //Вход в таверну, получение локации башни/ничего. if (!towerLoc && LVL == 15) { towerLoc = true; RPG.Dialogue("Внезапно из-за спины выходит..."); RPG.Dialogue("\nКто это?"); RPG.Dialogue("\nНезнакомец", "Аааа, странник, я слышал о тебе!", false, ConsoleColor.DarkMagenta); RPG.Dialogue("Незнакомец", "Более того, я следил за твоими успехами из теней.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("Незнакомец", "У меня для тебя есть дело, но я не могу его обсуждать здесь.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("Незнакомец", "Вот карта с местом нашей встречи. Увидимся там.", false, ConsoleColor.DarkMagenta); RPG.Dialogue("\nВы получили новую локацию: Заброшенная башня"); RPG.Dialogue("\nНезнакомец ушёл."); RPG.Dialogue("Немного посидев, вы решили вернуться в город."); } else { goto default; } break; default: RPG.Dialogue("Немного посидев, вы решили вернуться в город."); break; } GoToCity(); }
public static void Quest() { City.currentPlotState = City.QuestState.Completed; switch (questNum) { case 1: Console.Clear(); RPG.Dialogue("Вы дошли до синего источника"); RPG.Dialogue("Как и ожидалось, всё здесь синее."); RPG.Dialogue("Источник представлял из себя небольшую речку, начало которой виднелось на горизонте."); RPG.Dialogue("Вы проходите вглубь, ощущая свежесть окружающего воздуха."); RPG.Dialogue("Вы чувствуете расслабление и решаете присесть."); RPG.Dialogue("\n..."); RPG.Dialogue("\nИз-за деревьев выходит Страж."); RPG.Dialogue("\nЧёрт, подумали вы."); monster = new Monster[1] { new Monster { HP = 100 + 20 * LVL, Damage = 20 + 2 * LVL, Name = "Страж", Type = Monster.MType.Standart, } }; Fight.Init(monster, true); break; case 2: Console.Clear(); RPG.Dialogue("Вы следуете по маршруту торговца, уходя глубоко в лес."); RPG.Dialogue("С каждым шагом окружающая тишина становится всё подозрительнее."); RPG.Dialogue("Туман густеет."); RPG.Dialogue("Давление обстановки растёт."); RPG.Dialogue("Вы наткнулись на следы колёс."); RPG.Dialogue("Последовать по ним кажется хорошей идеей."); RPG.Dialogue("\n..."); RPG.Dialogue("\nЭто будет долгий поход."); Dungeons.Init(questNum); RPG.Dialogue("\nВы подошли к разрушенной повозке."); RPG.Dialogue("\nА рядом с ней..."); RPG.Dialogue("\nМёртвый торговец."); RPG.Dialogue("\nСледов нападения не видно."); RPG.Dialogue("Исследовав повозку, вы не нашли ни одного товара."); RPG.Dialogue("Только много гари."); RPG.Dialogue("Возможно, повозка загорелась, и торговец не смог спастись?"); RPG.Dialogue("Возможно, торговец вёз взрывчатку."); RPG.Dialogue("\nСтранное дело."); RPG.Dialogue("\n..."); RPG.Dialogue("\nВы заметили медальон на торговце."); RPG.Dialogue("Вы его взяли, без особой цели. Он не выглядит дорогостоящим."); RPG.Dialogue("Кроме красного камня посередине. Но его достать оттуда пркатически невозможно."); RPG.Dialogue("\nНа обратной стороне медальона написано '963'"); RPG.Dialogue("\nЧто бы это не значило."); RPG.Dialogue("\nВы начали возвращаться."); Dungeons.Init(questNum, 1); RPG.Dialogue("\nПеред вами стоит монстр."); RPG.Dialogue("Что не удивительно."); monster = new Monster[1] { new Monster { HP = 400 + 30 * LVL, Damage = 30 + 3 * LVL, Name = "Заградитель", Type = Monster.MType.Fire } }; Fight.Init(monster, true); break; case 3: Console.Clear(); RPG.Dialogue("Вход в подвал находится снаружи."); RPG.Dialogue("Видимо, так удобнее?"); RPG.Dialogue("Вы спустились в подвал таверны."); RPG.Dialogue("Здесь довольно темно."); RPG.Dialogue("Единственное освещение это свет из открытой двери."); RPG.Dialogue("В конце подвала видно только чёрный туман."); RPG.Dialogue("\nВы начинаете движение в его сторону."); Dungeons.Init(questNum); RPG.Dialogue("\nКак и ожидалось:"); RPG.Dialogue("Внутри тумана монстр."); monster = new Monster[1] { new Monster { HP = 600 + 40 * LVL, Damage = 40 + 8 * LVL, Name = "Туманный зверь", Type = Monster.MType.Dark } }; Fight.Init(monster, true); RPG.Dialogue("Тело монстра рассеялось в тумане."); RPG.Dialogue("Время возвращаться."); Dungeons.Init(questNum, 1); RPG.Dialogue("\nПохоже, что дверь заклинило."); RPG.Dialogue("Можно попробовать найти другой выход."); RPG.Dialogue("Можно выломать дверь."); Console.WriteLine("Что делать?" + "\n1 - Выломать" + "\n2 - Найти другой выход"); if (Console.ReadLine() == "1") { brokeOut = true; RPG.Dialogue("\nВы успешно выломали дверь."); RPG.Dialogue("Будет очень неприятно снова встретить Охру."); } else { RPG.Dialogue("\nНет, ломать дверь действительно не стоит."); RPG.Dialogue("Ведь из подвала есть ещё один выход в город."); Dungeons.Init(questNum, 2); RPG.Dialogue("\nНу вот."); RPG.Dialogue("И не нужно никакой излишней жестокости!"); } break; default: Console.WriteLine("Хз чёт"); break; } }
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
static void MonsterFight() { if (Remaining() == 0) { if (amount == 1 && monsters[0].Type == Monster.MType.Explosive && count == 4) { RewardXP = 0; RewardMoney = 0; } else { if (boss) { RewardXP = 100 + (float)Math.Pow(2, LVL) * 3; RewardMoney = 50 + (int)Math.Round(Math.Pow(2, LVL / 2)) * 5; } else { RewardXP = (RPG.rnd.Next(1, 25) + 5 * (float)Math.Pow(2, LVL / 2)) * amount; RewardMoney = (RPG.rnd.Next(1, 5) + 5 * (int)Math.Round(Math.Pow(2, LVL / 4))) * amount; } } RPG.Dialogue("Вы получили " + RewardXP + " ед. опыта и " + RewardMoney + " ед. монет.", false, ConsoleColor.Yellow); XP += RewardXP; Money += RewardMoney; if (LVL == 15) { RPG.Dialogue("Полученный опыт был превращён в " + (int)Math.Round((XP - MaxXP) / 10) + " очков мастерства", false, ConsoleColor.Yellow); } LvlUp(); SaveProgress(true); Console.ReadKey(); } else { // Снятие дебаффов с игрока foreach (Monster mnstr in monsters) { if (mnstr.effectCooldown != 0) { mnstr.effectCooldown--; } } if (effectCount == 0) { if (PStatus == Status.Frozen) { Inventory[0].Damage = Inventory[0].baseDamage; } else if (PStatus == Status.Blind) { strikeChance = 0.95f; } PStatus = Status.None; } for (int i = 0; i < amount; i++) { monsters[i].AI(); } Console.WriteLine("Going to a player's turn"); Console.ReadKey(); PlayerTurn(); } }
static public void GearUpgrade(bool free) { Console.Clear(); if (free) { RPG.Dialogue("Охра", "Что тебе нужно улучшить?", true, ConsoleColor.DarkYellow); } else { RPG.Dialogue("Охра", "Моя цена небольшая, " + ValueW + " монет за улучшение оружия, " + ValueA + " за улучшение брони." + "\nС каждым улучшением повышаю эффективность на 5%." + "\n\nУ вас " + Money + " монет.", true, ConsoleColor.DarkYellow); } Console.WriteLine($"Текущие характеристики: {Inventory[0].baseDamage} АТК ({Inventory[0].LVL}/{Inventory[0].MaxLVL} УР)" + $"\n {Inventory[1].Defence} ЗАЩ ({Inventory[1].LVL}/{Inventory[1].MaxLVL} УР)"); Console.WriteLine("Улучшить (+1 УР)"); if (Inventory[0].Upgradeable()) { Console.WriteLine("Оружие - 1"); } if (Inventory[1].Upgradeable()) { Console.WriteLine("Броню - 2"); } switch (Console.ReadLine()) { case "1": if (Inventory[0].Upgradeable()) { Inventory[0].LVL += 1; Inventory[0].Upgrade(); if (!free) { Money -= Convert.ToInt16(ValueW); cityBank += (float)ValueW * (TavernTax - 1); } break; } else { goto default; } case "2": if (Inventory[1].Upgradeable()) { Inventory[1].LVL += 1; Inventory[1].Upgrade(); if (!free) { Money -= Convert.ToInt16(ValueA); cityBank += (float)ValueA * (TavernTax - 1); } break; } else { goto default; } default: if (Inventory[0].Upgradeable() || Inventory[1].Upgradeable()) { GearUpgrade(free); } break; } UpdateEconomy(); RPG.Dialogue("Охра", "Ещё увидимся.", false, ConsoleColor.DarkYellow); }
static void GoHeal() { Console.WriteLine($"Лечение стоит {HealPrice} ({ChargePrice} за 1 заряд)." + $"\nУ вас {Money} ({healCount}/{maxHealCount} Зарядов)." + $"\nВылечиться? Да - 1, Нет - 2"); switch (Console.ReadLine()) { case "1": if (HP < MaxHP) { if (Money >= HealPrice) { HP = MaxHP; Money -= Convert.ToInt16(HealPrice); cityBank += Convert.ToInt16(HealPrice / 10); UpdateEconomy(); Console.WriteLine("Здоровье восстановлено."); } else { Console.WriteLine("Недостаточно денег для восстановления здоровья."); } } else { Console.WriteLine("Здоровье полное."); } if (healCount != maxHealCount) { if (Money >= ChargePrice * (maxHealCount - healCount)) { healCount = maxHealCount; Money -= Convert.ToInt16(ChargePrice * (maxHealCount - healCount)); cityBank += Convert.ToInt16(ChargePrice * (maxHealCount - healCount) / 10); UpdateEconomy(); RPG.Dialogue("Заряды восстановлены."); } else { RPG.Dialogue("Недостаточно денег для восстановления зарядов."); } } else { RPG.Dialogue("Заряды полные."); } goto case "2"; case "2": GoToCity(); break; default: Console.Clear(); Console.WriteLine("Нет команды.\n"); GoHeal(); break; } }
static void GetTypeEffect(Monster monster) // Получить эффект атаки типа монстра { double a = RPG.rnd.NextDouble(); switch (monster.Type) { case Monster.MType.Poisonous: if (a <= 1f / 4) { switch (PStatus) { case Status.OnFire: RPG.Dialogue("Монстр попытался вас отравить, но яд разложился от высокой температуры.", true, ConsoleColor.DarkGreen); break; case Status.Frozen: RPG.Dialogue("Монстр попытался вас отравить, но яд замёрз и стал неэффективен.", true, ConsoleColor.DarkGreen); break; default: effectCount = 2; monster.effectCooldown = 3; PStatus = Status.Poisoned; RPG.Dialogue($"Вы отравлены.", true, ConsoleColor.DarkGreen); break; } } else { RPG.Dialogue("Монстр попытался вас отравить.", true, ConsoleColor.DarkGreen); } break; case Monster.MType.Fire: if (a <= 1f / 3) { switch (PStatus) { case Status.Poisoned: effectCount = 2; monster.effectCooldown = 3; PStatus = Status.OnFire; RPG.Dialogue("Монстр вас поджог и разложил яд. Но теперь вы в огне.", true, ConsoleColor.DarkRed); break; case Status.Frozen: effectCount = 0; PStatus = 0; strikeMultiplier = 1f; Console.WriteLine("В попытке поджога, монстр вас разморозил.", true, ConsoleColor.DarkRed); break; default: effectCount = 2; monster.effectCooldown = 3; PStatus = Status.OnFire; RPG.Dialogue($"Вы в огне.", true, ConsoleColor.DarkRed); break; } } else { RPG.Dialogue($"Монстр попытался вас поджечь.", true, ConsoleColor.DarkRed); } break; case Monster.MType.Ice: if (a <= 3f / 20) { switch (PStatus) { case Status.Poisoned: PStatus = Status.Frozen; effectCount = 2; monster.effectCooldown = 4; strikeMultiplier -= 0.03f * LVL; RPG.Dialogue($"Монстр вас заморозил, сделав яд неэффективным. Но АТК снижена на {3 * LVL}%", true, ConsoleColor.Cyan); break; case Status.OnFire: effectCount = 0; PStatus = 0; RPG.Dialogue("В попытке вас заморозить, монстр вас потушил.", true, ConsoleColor.Cyan); break; default: PStatus = Status.Frozen; effectCount = 2; monster.effectCooldown = 4; strikeMultiplier -= 0.03f * LVL; RPG.Dialogue($"АТК снижена на {3 * LVL}%", true, ConsoleColor.Cyan); break; } } else { RPG.Dialogue($"Монстр попытался вас заморозить.", true, ConsoleColor.Cyan); } break; case Monster.MType.Dark: if (a <= 3f / 20) { effectCount = 1; monster.effectCooldown = 5; strikeChance = 1f / 3; PStatus = Status.Blind; RPG.Dialogue($"Монстр скрылся в тенях. Шанс попасть по монстру стал 33%"); } break; default: break; } }