Exemplo n.º 1
0
        private RefineResults BuildRefineResults(IRefinableItem item, RefineCounts counts, RefineCosts costs)
        {
            var results = new RefineResults();

            results.Successes     = counts.Successes;
            results.Attempts      = counts.Attempts;
            results.RepairedItems = counts.RepairedItems;
            results.BrokenItems   = counts.BrokenItems;

            results.RefinedItemCost = costs.ItemCost;

            foreach (var prop in counts.GetType().GetProperties().Where(x => x.Name.Contains("Consumed")))
            {
                results.ConsumableCounts.Add(prop.Name.Replace("Consumed", ""), (long)prop.GetValue(counts));
            }

            foreach (var prop in counts.GetType().GetProperties().Where(x => x.Name.Contains("Services")))
            {
                results.NpcRefineCounts.Add(prop.Name.Replace("Services", ""), (long)prop.GetValue(counts));
            }

            foreach (var kvp in results.ConsumableCounts.Where(x => x.Value > 0))
            {
                results.ConsumableCosts.Add(kvp.Key, kvp.Value * costs.ConsumableCosts[kvp.Key]);
            }

            foreach (var kvp in results.NpcRefineCounts.Where(x => x.Value > 0))
            {
                results.NpcRefineCosts.Add(kvp.Key, kvp.Value * costs.NpcRefineCosts[kvp.Key]);
            }

            switch (item)
            {
            case LevelOneWeapon _:
                results.NpcRepairCost = results.RepairedItems * (500000 + 2 * costs.ConsumableCosts["Bradium"] + 10 * costs.ConsumableCosts["Oridecon"] + 5 * costs.ConsumableCosts["GoldCoin"]);
                break;

            case LevelTwoWeapon _:
                results.NpcRepairCost = results.RepairedItems * (5000000 + 5 * costs.ConsumableCosts["Bradium"] + 25 * costs.ConsumableCosts["Oridecon"] + 10 * costs.ConsumableCosts["GoldCoin"]);
                break;

            case LevelThreeWeapon _:
                results.NpcRepairCost = results.RepairedItems * (40000000 + 40 * costs.ConsumableCosts["Bradium"] + 80 * costs.ConsumableCosts["Oridecon"] + 50 * costs.ConsumableCosts["GoldCoin"]);
                break;

            case LevelFourWeapon _:
                results.NpcRepairCost = results.RepairedItems * (50000000 + 50 * costs.ConsumableCosts["Bradium"] + 100 * costs.ConsumableCosts["Oridecon"] + 75 * costs.ConsumableCosts["GoldCoin"]);
                break;

            case Armor _:
                results.NpcRepairCost = results.RepairedItems * (5000000 + 5 * costs.ConsumableCosts["Carnium"] + 50 * costs.ConsumableCosts["Elunium"] + 10 * costs.ConsumableCosts["GoldCoin"]);
                break;
            }

            return(results);
        }
Exemplo n.º 2
0
        public Refiner(IRefinableItem item, int startingRefine, IEnumerable <RefineMethod> refineSteps)
        {
            Item = item;
            StartingRefineLevel = startingRefine;
            RefineSteps         = refineSteps.ToArray();
            RefineRates         = new double[RefineSteps.Length];

            for (int i = 0; i < RefineSteps.Length; i++)
            {
                Item.RefineLevel = i;
                if (!IsValidRefineMethod(Item, RefineSteps[i]))
                {
                    throw new InvalidOperationException($"Item of type {item.GetType().ToString()} at refine +{item.RefineLevel} " +
                                                        $"cannot be refined with method {RefineSteps[i].ToString()}");
                }
                RefineRates[i] = Item.GetRefineRate(RefineSteps[i]);
            }
            Item.RefineLevel = StartingRefineLevel;
        }
Exemplo n.º 3
0
 public CheapestSafeToTenExperiment(int attempts, IRefinableItem item, int itemCost)
 {
     Attempts = attempts;
     Item     = item;
     ItemCost = itemCost;
 }
Exemplo n.º 4
0
        private void TickRefineCounts(RefineCounts counts, RefineMethod method, IRefinableItem item)
        {
            switch (method)
            {
            case RefineMethod.Phracon:
                counts.PhraconConsumed++;
                counts.PhraconServices++;
                break;

            case RefineMethod.WhitesmithPhracon:
                counts.PhraconConsumed++;
                break;

            case RefineMethod.Emveretarcon:
                counts.EmveretarconConsumed++;
                counts.EmveretarconServices++;
                break;

            case RefineMethod.WhitesmithEmveretarcon:
                counts.EmveretarconConsumed++;
                break;

            case RefineMethod.Oridecon:
                counts.OrideconConsumed++;
                if (item is LevelThreeWeapon)
                {
                    counts.Oridecon3Services++;
                }
                else if (item is LevelFourWeapon)
                {
                    counts.Oridecon4Services++;
                }
                break;

            case RefineMethod.WhitesmithOridecon:
                counts.OrideconConsumed++;
                break;

            case RefineMethod.Elunium:
                counts.EluniumConsumed++;
                counts.EluniumServices++;
                break;

            case RefineMethod.EnrichedOridecon:
                counts.EnrichedOrideconConsumed++;
                if (item is LevelThreeWeapon)
                {
                    counts.EnrichedOridecon3Services++;
                }
                else if (item is LevelFourWeapon)
                {
                    counts.EnrichedOridecon4Services++;
                }
                break;

            case RefineMethod.EnrichedElunium:
                counts.EnrichedEluniumConsumed++;
                counts.EnrichedEluniumServices++;
                break;

            case RefineMethod.Carnium:
                counts.CarniumConsumed++;
                counts.CarniumServices++;
                break;

            case RefineMethod.Bradium:
                counts.BradiumConsumed++;
                counts.BradiumServices++;
                break;

            case RefineMethod.HDCarnium:
                counts.HDCarniumConsumed++;
                counts.HDCarniumServices++;
                break;

            case RefineMethod.HDBradium:
                counts.HDBradiumConsumed++;
                counts.HDBradiumServices++;
                break;
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Ensures the given item can be refined with the specified method
        /// </summary>
        /// <returns>True if a valid refine interaction</returns>
        private bool IsValidRefineMethod(IRefinableItem item, RefineMethod method)
        {
            if (item.RefineLevel < 0 || item.RefineLevel >= 20)
            {
                return(false);
            }

            switch (item)
            {
            case LevelOneWeapon _:
                if (item.RefineLevel < 10 && method.EqualsAny(RefineMethod.Phracon, RefineMethod.WhitesmithPhracon))
                {
                    return(true);
                }
                else if (item.RefineLevel >= 10 && method.EqualsAny(RefineMethod.Bradium, RefineMethod.HDBradium))
                {
                    return(true);
                }
                return(false);

            case LevelTwoWeapon _:
                if (item.RefineLevel < 10 && method.EqualsAny(RefineMethod.Emveretarcon, RefineMethod.WhitesmithEmveretarcon))
                {
                    return(true);
                }
                else if (item.RefineLevel >= 10 && method.EqualsAny(RefineMethod.Bradium, RefineMethod.HDBradium))
                {
                    return(true);
                }
                return(false);

            case LevelThreeWeapon _:
                if (item.RefineLevel < 10 && method.EqualsAny(RefineMethod.Oridecon, RefineMethod.EnrichedOridecon, RefineMethod.WhitesmithOridecon))
                {
                    return(true);
                }
                else if (item.RefineLevel >= 10 && method.EqualsAny(RefineMethod.Bradium, RefineMethod.HDBradium))
                {
                    return(true);
                }
                return(false);

            case LevelFourWeapon _:
                if (item.RefineLevel < 10 && method.EqualsAny(RefineMethod.Oridecon, RefineMethod.EnrichedOridecon, RefineMethod.WhitesmithOridecon))
                {
                    return(true);
                }
                else if (item.RefineLevel >= 10 && method.EqualsAny(RefineMethod.Bradium, RefineMethod.HDBradium))
                {
                    return(true);
                }
                return(false);

            case Armor _:
                if (item.RefineLevel < 10 && method.EqualsAny(RefineMethod.Elunium, RefineMethod.EnrichedElunium))
                {
                    return(true);
                }
                else if (item.RefineLevel >= 10 && method.EqualsAny(RefineMethod.Carnium, RefineMethod.HDCarnium))
                {
                    return(true);
                }
                return(false);

            default:
                return(false);
            }
        }