Exemplo n.º 1
0
        private async Task SpeakToMonster()
        {
            await TextArea.PrintLine();

            if (!Encounters.IsMonsterFriendly)
            {
                await TextArea.PrintLine();

                await TextArea.PrintLine("The " + Encounters.MonsterName + " does not reply.");

                await GameControl.WaitAsync(250);

                return;
            }

            const int    talkTypes = 5;
            int          type;
            int          qual = Random.Next(5);
            int          cost = 0;
            int          item = 0;
            MenuItemList menu = new MenuItemList("Yes", "No");

            Color qcolor = XleColor.White;

            string[] quality = new string[5] {
                "a Well Crafted", "a Slightly Used", "a Sparkling New", "a Wonderful", "an Awesome"
            };

            do
            {
                type = Random.Next(talkTypes) + 1;
            } while (Player.MaxHP == Player.HP && type == 4);

            string name = "";

            switch (type)
            {
            case 1:             // buy armor
            case 2:             // buy weapon

                await TextArea.Print("Do you want to buy ", XleColor.Cyan);

                await TextArea.Print(quality[qual], XleColor.White);

                await TextArea.PrintLine();

                if (type == 1)
                {
                    item = Random.Next(4) + 1;
                    cost = (int)(Data.ArmorCost(item, qual) * (Random.NextDouble() * 0.6 + 0.6));
                    name = Data.ArmorList[item].Name;
                }
                else if (type == 2)
                {
                    item = Random.Next(7) + 1;
                    cost = (int)(Data.WeaponCost(item, qual) * (Random.NextDouble() * 0.6 + 0.6));
                    name = Data.WeaponList[item].Name;
                }

                await TextArea.Print(name, XleColor.White);

                await TextArea.Print(" for ", XleColor.Cyan);

                await TextArea.Print(cost.ToString(), XleColor.White);

                await TextArea.Print(" Gold?", XleColor.Cyan);

                await TextArea.PrintLine();

                qcolor = XleColor.Cyan;

                break;

            case 3:                     // buy food

                item = Random.Next(21) + 20;
                cost = (int)(item * (Random.NextDouble() * 0.4 + 0.8));

                await TextArea.Print("Do you want to buy ", XleColor.Green);

                await TextArea.Print(item.ToString(), XleColor.Yellow);

                await TextArea.PrintLine();

                // line 2
                await TextArea.Print("Days of food for ", XleColor.Green);

                await TextArea.Print(cost.ToString(), XleColor.Yellow);

                await TextArea.Print(" gold?", XleColor.Green);

                await TextArea.PrintLine();

                qcolor = XleColor.Green;

                break;

            case 4:                     // buy hp

                item = Random.Next(Player.MaxHP / 4) + 20;

                if (item > (Player.MaxHP - Player.HP))
                {
                    item = (Player.MaxHP - Player.HP);
                }

                cost = (int)(item * (Random.NextDouble() * 0.15 + 0.75));

                await TextArea.Print("Do you want to buy a potion worth ", XleColor.Green);

                await TextArea.PrintLine();

                // line 2
                await TextArea.Print(item.ToString(), XleColor.Yellow);

                await TextArea.Print(" Hit Points for ", XleColor.Green);

                await TextArea.Print(cost.ToString(), XleColor.Yellow);

                await TextArea.Print(" gold?", XleColor.Green);

                await TextArea.PrintLine();

                qcolor = XleColor.Green;

                break;

            default:
            case 5:                     // buy museum coin
                MuseumCoinSale.ResetCoinOffers();
                await MuseumCoinSale.OfferMuseumCoin();

                break;
            }

            if (type != 5)
            {
                await TextArea.PrintLine();

                int choice = await QuickMenu.QuickMenu(menu, 3, 0, qcolor);

                if (choice == 0)
                {
                    if (Player.Spend(cost))
                    {
                        SoundMan.PlaySound(LotaSound.Sale);

                        await TextArea.PrintLine();

                        await TextArea.PrintLine("Purchase Completed.");

                        Color clr2 = XleColor.White;

                        switch (type)
                        {
                        case 1:
                            Player.AddArmor(item, qual);

                            break;

                        case 2:
                            Player.AddWeapon(item, qual);

                            break;

                        case 3:
                            Player.Food += item;
                            clr2         = XleColor.Green;

                            break;

                        case 4:
                            Player.HP += item;
                            clr2       = XleColor.Green;

                            break;

                        case 5:
                            break;
                        }

                        await GameControl.FlashHPWhileSound(clr2);
                    }
                    else
                    {
                        GameControl.PlaySound(LotaSound.Medium);

                        await TextArea.PrintLine();

                        await TextArea.PrintLine("You don't have enough gold...");
                    }
                }
                else
                {
                    GameControl.PlaySound(LotaSound.Medium);

                    await TextArea.PrintLine();

                    if (1 + Random.Next(2) == 1)
                    {
                        await TextArea.PrintLine("Maybe Later...");
                    }
                    else
                    {
                        await TextArea.PrintLine("You passed up a good deal!");
                    }
                }
            }

            Encounters.CancelEncounter();
        }