public override void Run()
        {
            // get data
            ItemType typeUC = GetItemType("Upgrade Component");
            IList<ItemData> upgrade_components = new FullItemListRequest(typeUC)
                    .Execute()
                    .Results
                    .ToList();
            IList<ItemData> major_sigils = upgrade_components
                    .Where(i => i.Name.StartsWith("Major Sigil of"))
                    .ToList();
            IList<ItemData> superior_sigils = upgrade_components
                    .Where(i => i.Name.StartsWith("Superior Sigil of"))
                    .ToList();

            Console.WriteLine("Gathering Data:");
            Console.Write("  Capital [10 00 00]: ");
            string sCapital = Console.ReadLine();

            int capital;
            if (!int.TryParse(sCapital.Replace(" ", string.Empty).Trim(), out capital))
                capital = 100000;

            Console.WriteLine("Calculating using the following:");
            Console.WriteLine("  Capital: {0}", capital.ToString("#### ## #0").Trim());

            int buy_price = major_sigils.Select<ItemData, int>(i => i.MaxOfferUnitPrice).Min();
            int sell_price = (int)Math.Floor(superior_sigils.Select<ItemData, int>(i => i.MinSaleUnitPrice).Average());
            int total_available = (int)Math.Floor((double)capital / (double)buy_price);
            int total_cost = buy_price * total_available;

            Console.WriteLine("Rare sigil buy price (based on cheapest rare sigils): {0}", buy_price.ToString("#### ## #0").Trim());
            Console.WriteLine("Exotic sigil sell price (based on average exotic sigils): {0}", sell_price.ToString("#### ## #0").Trim());
            Console.WriteLine("Total sigils purchased: {0}", total_available);
            Console.WriteLine("Total cost: {0}", total_cost.ToString("#### ## #0").Trim());

            double drop_rate = 0.2;

            // mystic forge loop
            int total_sellables = 0;
            int total_forges = 0;
            while (total_available >= 4)
            {
                // how many sigils we get back
                int returns = total_available / 4;

                // remainder
                total_available %= 4;

                // how many sellables we should get
                int sellables = (int)Math.Floor((double)returns * drop_rate);

                total_available += (returns - sellables);

                total_sellables += sellables;
                total_forges += returns;
            }

            Console.WriteLine("Estimated forges: {0}", total_forges);
            Console.WriteLine("Estimated sellables: {0}", total_sellables);

            int total_revenue = (int)Math.Floor(total_sellables * sell_price * 0.85);
            int total_profit = total_revenue - total_cost;

            Console.WriteLine("Estimates:");
            Console.WriteLine("  Revenue: {0}", total_revenue.ToString("#### ## #0").Trim());
            Console.WriteLine("  Profit: {0}", total_profit.ToString("#### ## #0").Trim());
        }
示例#2
0
        public override void Run()
        {
            string sMinLevel, sMaxLevel;
            int    minLevel, maxLevel;
            Rarity rarity;

            Console.WriteLine("Gathering search data:");
            Console.Write("  Rarity [Exotic]: ");
            rarity = GetRarity(Console.ReadLine());
            Console.Write("  Minimum Level [80]: ");
            sMinLevel = Console.ReadLine();
            Console.Write("  Maximum Level [80]: ");
            sMaxLevel = Console.ReadLine();

            if (rarity.Id < 0)
            {
                rarity = GetRarity("Exotic");
            }
            if (!int.TryParse(sMinLevel, out minLevel))
            {
                minLevel = 80;
            }
            if (!int.TryParse(sMaxLevel, out maxLevel))
            {
                maxLevel = 80;
            }

            Console.WriteLine("Pulling averages for the following data:");
            Console.WriteLine("  Rarity: {0}", rarity.Name);
            Console.WriteLine("  Minimum Level: {0}", minLevel);
            Console.WriteLine("  Maximum Level: {0}", maxLevel);

            IList <ItemData> all_items = new FullItemListRequest().Execute().Results
                                         .Where(i => i.RestrictionLevel <= maxLevel && i.RestrictionLevel >= minLevel)
                                         .Where(i => i.Rarity == rarity.Id)
                                         .Where(i => i.OfferAvailability > 0 && i.SaleAvailability > 0)
                                         .ToList();

            Console.WriteLine("Averages:");
            Console.WriteLine("{0,-10} | {1,-10} | {2}", "Avg Buy", "Avg Sell", "Type");
            Console.WriteLine("-----------+------------+-----------------------------");

            foreach (ItemType type in Types)
            {
                IList <ItemData> items = all_items.Where(a => a.TypeId == type.Id).ToList();

                if (items.Count == 0)
                {
                    continue;
                }

                int avg_buy  = (int)Math.Floor(items.Select <ItemData, int>(i => i.MaxOfferUnitPrice).InterquartileMean());
                int avg_sell = (int)Math.Floor(items.Select <ItemData, int>(i => i.MinSaleUnitPrice).InterquartileMean());
                Console.WriteLine("{0,10} | {1,10} | {2}",
                                  avg_buy.ToString("#### ## #0").Trim(),
                                  avg_sell.ToString("#### ## #0").Trim(),
                                  type.Name);

                foreach (ItemSubType sub_type in type.SubTypes)
                {
                    IList <ItemData> sub_items = items.Where(a => a.SubTypeId == sub_type.Id).ToList();

                    if (sub_items.Count == 0)
                    {
                        continue;
                    }

                    int sub_avg_buy  = (int)Math.Floor(sub_items.Select <ItemData, int>(i => i.MaxOfferUnitPrice).InterquartileMean());
                    int sub_avg_sell = (int)Math.Floor(sub_items.Select <ItemData, int>(i => i.MinSaleUnitPrice).InterquartileMean());
                    Console.WriteLine("{0,10} | {1,10} | {2}",
                                      sub_avg_buy.ToString("#### ## #0").Trim(),
                                      sub_avg_sell.ToString("#### ## #0").Trim(),
                                      sub_type.Name);
                }

                Console.WriteLine("-----------+------------+-----------------------------");
            }
        }
        public override void Run()
        {
            string sMinLevel, sMaxLevel;
            int minLevel, maxLevel;
            Rarity rarity;

            Console.WriteLine("Gathering search data:");
            Console.Write("  Rarity [Exotic]: ");
            rarity = GetRarity(Console.ReadLine());
            Console.Write("  Minimum Level [80]: ");
            sMinLevel = Console.ReadLine();
            Console.Write("  Maximum Level [80]: ");
            sMaxLevel = Console.ReadLine();

            if (rarity.Id < 0)
                rarity = GetRarity("Exotic");
            if (!int.TryParse(sMinLevel, out minLevel))
                minLevel = 80;
            if (!int.TryParse(sMaxLevel, out maxLevel))
                maxLevel = 80;

            Console.WriteLine("Pulling averages for the following data:");
            Console.WriteLine("  Rarity: {0}", rarity.Name);
            Console.WriteLine("  Minimum Level: {0}", minLevel);
            Console.WriteLine("  Maximum Level: {0}", maxLevel);

            IList<ItemData> all_items = new FullItemListRequest().Execute().Results
                    .Where(i => i.RestrictionLevel <= maxLevel && i.RestrictionLevel >= minLevel)
                    .Where(i => i.Rarity == rarity.Id)
                    .Where(i => i.OfferAvailability > 0 && i.SaleAvailability > 0)
                    .ToList();

            Console.WriteLine("Averages:");
            Console.WriteLine("{0,-10} | {1,-10} | {2}", "Avg Buy", "Avg Sell", "Type");
            Console.WriteLine("-----------+------------+-----------------------------");

            foreach (ItemType type in Types)
            {
                IList<ItemData> items = all_items.Where(a => a.TypeId == type.Id).ToList();

                if (items.Count == 0)
                    continue;

                int avg_buy = (int)Math.Floor(items.Select<ItemData, int>(i => i.MaxOfferUnitPrice).InterquartileMean());
                int avg_sell = (int)Math.Floor(items.Select<ItemData, int>(i => i.MinSaleUnitPrice).InterquartileMean());
                Console.WriteLine("{0,10} | {1,10} | {2}",
                        avg_buy.ToString("#### ## #0").Trim(),
                        avg_sell.ToString("#### ## #0").Trim(),
                        type.Name);

                foreach (ItemSubType sub_type in type.SubTypes)
                {
                    IList<ItemData> sub_items = items.Where(a => a.SubTypeId == sub_type.Id).ToList();

                    if (sub_items.Count == 0)
                        continue;

                    int sub_avg_buy = (int)Math.Floor(sub_items.Select<ItemData, int>(i => i.MaxOfferUnitPrice).InterquartileMean());
                    int sub_avg_sell = (int)Math.Floor(sub_items.Select<ItemData, int>(i => i.MinSaleUnitPrice).InterquartileMean());
                    Console.WriteLine("{0,10} | {1,10} | {2}",
                            sub_avg_buy.ToString("#### ## #0").Trim(),
                            sub_avg_sell.ToString("#### ## #0").Trim(),
                            sub_type.Name);
                }

                Console.WriteLine("-----------+------------+-----------------------------");
            }
        }
        public override void Run()
        {
            // get data
            ItemType typeA = GetItemType("Armor");
            ItemType typeW = GetItemType("Weapon");
            IList<ItemData> armor = new FullItemListRequest(typeA).Execute().Results;
            IList<ItemData> weapons = new FullItemListRequest(typeW).Execute().Results;

            Console.WriteLine("Gathering Data:");
            Console.Write("  Capital [10 00 00]: ");
            string sCapital = Console.ReadLine();
            Console.Write("  Maximum buy price [2 00]: ");
            string sMaxBuyPrice = Console.ReadLine();
            Console.Write("  Buy rarity [Masterwork]: ");
            Rarity rarityB = GetRarity(Console.ReadLine());

            int capital, max_buy_price;
            if (!int.TryParse(sCapital.Replace(" ", string.Empty).Trim(), out capital))
                capital = 100000;
            if (!int.TryParse(sMaxBuyPrice.Replace(" ", string.Empty).Trim(), out max_buy_price))
                max_buy_price = 200;
            if (rarityB.Id < 0)
                rarityB = GetRarity("Masterwork");
            Rarity rarityS = GetPromotedRarity(rarityB);

            Console.WriteLine("Calculating using the following:");
            Console.WriteLine("  Capital: {0}", capital.ToString("#### ## #0").Trim());
            Console.WriteLine("  Maximum buy price: {0}", max_buy_price.ToString("#### ## #0").Trim());
            Console.WriteLine("  Buy rarity: {0}", rarityB.Name);
            Console.WriteLine("  Sell rarity: {0}", rarityS.Name);

            IDictionary<int, int> buy_level_profits = new Dictionary<int, int>();

            for (int min_buy_level = (68 - 5); min_buy_level <= 68; min_buy_level++)
            {
                Console.WriteLine("Performing speculation on minimum buy level: {0}", min_buy_level);

                int min_forge_level = min_buy_level + 5;
                int max_forge_level = min_buy_level + 12;

                Console.WriteLine("  Forged item range: {0} - {1}", min_forge_level, max_forge_level);

                IList<ItemData> buy_weapons = weapons
                        .Where(i => i.Rarity == rarityB.Id && i.MinSaleUnitPrice > 0 && i.RestrictionLevel >= min_buy_level)
                        .ToList();
                IList<ItemData> sell_weapons = weapons
                        .Where(i => i.Rarity == rarityS.Id && i.MinSaleUnitPrice > 0 && i.RestrictionLevel >= min_forge_level && i.RestrictionLevel <= max_forge_level)
                        .ToList();

                int buy_price = (int)Math.Floor((double)(buy_weapons.Select<ItemData, int>(i => i.MinSaleUnitPrice).Min() + max_buy_price)/2.0);
                int sell_price = (int)Math.Floor(sell_weapons.Select<ItemData, int>(i => i.MinSaleUnitPrice).InterquartileMean());

                int total_available = (int)Math.Floor((double)capital / (double)buy_price);
                int total_cost = buy_price * total_available;

                Console.WriteLine("  {0} Weapon buy price (based on average of cheapest and maximum buy price): {1}", rarityB.Name, buy_price.ToString("#### ## #0").Trim());
                Console.WriteLine("  {0} Weapon sell price (based on IQM of current sale prices): {1}", rarityS.Name, sell_price.ToString("#### ## #0").Trim());

                Console.WriteLine("  Total weapons purchased: {0}", total_available);
                Console.WriteLine("  Total cost: {0}", total_cost.ToString("#### ## #0").Trim());

                // mystic forge loop
                int total_rares = 0;
                int total_forges = 0;
                while (total_available >= 4)
                {
                    // how many weapons we get back
                    int returns = total_available / 4;

                    // remainder
                    total_available %= 4;

                    // how many sellables we should get
                    int upgrades = (int)Math.Floor((double)returns * PromotionRate);

                    total_available += (returns - upgrades);

                    total_rares += upgrades;
                    total_forges += returns;
                }

                Console.WriteLine("  Estimated forges: {0}", total_forges);
                Console.WriteLine("  Estimated rares: {0}", total_rares);

                int total_rare_revenue = (int)Math.Floor(total_rares * sell_price * 0.85);
                int total_profit = total_rare_revenue - total_cost;

                Console.WriteLine("  Estimated Revenue: {0}", total_rare_revenue.ToString("#### ## #0").Trim());
                Console.WriteLine("  Estimated Profit: {0}", total_profit.ToString("#### ## #0").Trim());

                buy_level_profits[total_profit] = min_buy_level;
            }

            int suggested_min_buy_level = buy_level_profits[buy_level_profits.Keys.Max()];

            Console.WriteLine("Suggested minimum buy level: {0}", suggested_min_buy_level);
        }
        public override void Run()
        {
            // get data
            ItemType         typeUC             = GetItemType("Upgrade Component");
            IList <ItemData> upgrade_components = new FullItemListRequest(typeUC)
                                                  .Execute()
                                                  .Results
                                                  .ToList();
            IList <ItemData> major_runes = upgrade_components
                                           .Where(i => i.Name.StartsWith("Major Rune of"))
                                           .ToList();
            IList <ItemData> superior_runes = upgrade_components
                                              .Where(i => i.Name.StartsWith("Superior Rune of"))
                                              .ToList();

            Console.WriteLine("Gathering Data:");
            Console.Write("  Capital [10 00 00]: ");
            string sCapital = Console.ReadLine();

            int capital;

            if (!int.TryParse(sCapital.Replace(" ", string.Empty).Trim(), out capital))
            {
                capital = 100000;
            }

            Console.WriteLine("Calculating using the following:");
            Console.WriteLine("  Capital: {0}", capital.ToString("#### ## #0").Trim());

            int buy_price       = major_runes.Select <ItemData, int>(i => i.MaxOfferUnitPrice).Min();
            int sell_price      = (int)Math.Floor(superior_runes.Select <ItemData, int>(i => i.MinSaleUnitPrice).Average());
            int total_available = (int)Math.Floor((double)capital / (double)buy_price);
            int total_cost      = buy_price * total_available;

            Console.WriteLine("Rare rune buy price (based on cheapest rare rune): {0}", buy_price.ToString("#### ## #0").Trim());
            Console.WriteLine("Exotic rune sell price (based on average exotic rune): {0}", sell_price.ToString("#### ## #0").Trim());
            Console.WriteLine("Total rune purchased: {0}", total_available);
            Console.WriteLine("Total cost: {0}", total_cost.ToString("#### ## #0").Trim());

            double drop_rate = 0.2;

            // mystic forge loop
            int total_sellables = 0;
            int total_forges    = 0;

            while (total_available >= 4)
            {
                // how many sigils we get back
                int returns = total_available / 4;

                // remainder
                total_available %= 4;

                // how many sellables we should get
                int sellables = (int)Math.Floor((double)returns * drop_rate);

                total_available += (returns - sellables);

                total_sellables += sellables;
                total_forges    += returns;
            }

            Console.WriteLine("Estimated forges: {0}", total_forges);
            Console.WriteLine("Estimated sellables: {0}", total_sellables);

            int total_revenue = (int)Math.Floor(total_sellables * sell_price * 0.85);
            int total_profit  = total_revenue - total_cost;

            Console.WriteLine("Estimates:");
            Console.WriteLine("  Revenue: {0}", total_revenue.ToString("#### ## #0").Trim());
            Console.WriteLine("  Profit: {0}", total_profit.ToString("#### ## #0").Trim());
        }
示例#6
0
        public override void Run()
        {
            // get data
            ItemType         typeA   = GetItemType("Armor");
            ItemType         typeW   = GetItemType("Weapon");
            IList <ItemData> armor   = new FullItemListRequest(typeA).Execute().Results;
            IList <ItemData> weapons = new FullItemListRequest(typeW).Execute().Results;

            Console.WriteLine("Gathering Data:");
            Console.Write("  Capital [10 00 00]: ");
            string sCapital = Console.ReadLine();

            Console.Write("  Maximum buy price [2 00]: ");
            string sMaxBuyPrice = Console.ReadLine();

            Console.Write("  Buy rarity [Masterwork]: ");
            Rarity rarityB = GetRarity(Console.ReadLine());

            int capital, max_buy_price;

            if (!int.TryParse(sCapital.Replace(" ", string.Empty).Trim(), out capital))
            {
                capital = 100000;
            }
            if (!int.TryParse(sMaxBuyPrice.Replace(" ", string.Empty).Trim(), out max_buy_price))
            {
                max_buy_price = 200;
            }
            if (rarityB.Id < 0)
            {
                rarityB = GetRarity("Masterwork");
            }
            Rarity rarityS = GetPromotedRarity(rarityB);

            Console.WriteLine("Calculating using the following:");
            Console.WriteLine("  Capital: {0}", capital.ToString("#### ## #0").Trim());
            Console.WriteLine("  Maximum buy price: {0}", max_buy_price.ToString("#### ## #0").Trim());
            Console.WriteLine("  Buy rarity: {0}", rarityB.Name);
            Console.WriteLine("  Sell rarity: {0}", rarityS.Name);

            IDictionary <int, int> buy_level_profits = new Dictionary <int, int>();

            for (int min_buy_level = (68 - 5); min_buy_level <= 68; min_buy_level++)
            {
                Console.WriteLine("Performing speculation on minimum buy level: {0}", min_buy_level);

                int min_forge_level = min_buy_level + 5;
                int max_forge_level = min_buy_level + 12;

                Console.WriteLine("  Forged item range: {0} - {1}", min_forge_level, max_forge_level);

                IList <ItemData> buy_weapons = weapons
                                               .Where(i => i.Rarity == rarityB.Id && i.MinSaleUnitPrice > 0 && i.RestrictionLevel >= min_buy_level)
                                               .ToList();
                IList <ItemData> sell_weapons = weapons
                                                .Where(i => i.Rarity == rarityS.Id && i.MinSaleUnitPrice > 0 && i.RestrictionLevel >= min_forge_level && i.RestrictionLevel <= max_forge_level)
                                                .ToList();

                int buy_price  = (int)Math.Floor((double)(buy_weapons.Select <ItemData, int>(i => i.MinSaleUnitPrice).Min() + max_buy_price) / 2.0);
                int sell_price = (int)Math.Floor(sell_weapons.Select <ItemData, int>(i => i.MinSaleUnitPrice).InterquartileMean());

                int total_available = (int)Math.Floor((double)capital / (double)buy_price);
                int total_cost      = buy_price * total_available;

                Console.WriteLine("  {0} Weapon buy price (based on average of cheapest and maximum buy price): {1}", rarityB.Name, buy_price.ToString("#### ## #0").Trim());
                Console.WriteLine("  {0} Weapon sell price (based on IQM of current sale prices): {1}", rarityS.Name, sell_price.ToString("#### ## #0").Trim());

                Console.WriteLine("  Total weapons purchased: {0}", total_available);
                Console.WriteLine("  Total cost: {0}", total_cost.ToString("#### ## #0").Trim());

                // mystic forge loop
                int total_rares  = 0;
                int total_forges = 0;
                while (total_available >= 4)
                {
                    // how many weapons we get back
                    int returns = total_available / 4;

                    // remainder
                    total_available %= 4;

                    // how many sellables we should get
                    int upgrades = (int)Math.Floor((double)returns * PromotionRate);

                    total_available += (returns - upgrades);

                    total_rares  += upgrades;
                    total_forges += returns;
                }

                Console.WriteLine("  Estimated forges: {0}", total_forges);
                Console.WriteLine("  Estimated rares: {0}", total_rares);

                int total_rare_revenue = (int)Math.Floor(total_rares * sell_price * 0.85);
                int total_profit       = total_rare_revenue - total_cost;

                Console.WriteLine("  Estimated Revenue: {0}", total_rare_revenue.ToString("#### ## #0").Trim());
                Console.WriteLine("  Estimated Profit: {0}", total_profit.ToString("#### ## #0").Trim());

                buy_level_profits[total_profit] = min_buy_level;
            }

            int suggested_min_buy_level = buy_level_profits[buy_level_profits.Keys.Max()];

            Console.WriteLine("Suggested minimum buy level: {0}", suggested_min_buy_level);
        }