public string ExecuteAction(ICraft craft, ICrafter crafter, List<IModifier> activeModifiers, Random rng, Conditions condition) { string result = String.Empty; if (condition == Conditions.Good || condition == Conditions.Excellent) { //Calculate success. if (Calc.ActionIsSuccessful(rng, SuccessChance)) { //Success! wasSuccessful = true; double quality = Calc.ApplyCondition(Calc.Quality(craft.RecipeLevel, craft.ItemLevel, crafter.CrafterLevel, crafter.Control) * qualityModifier, condition); result = ActionName + " successful! Quality increased by " + Math.Round(quality, 0, MidpointRounding.ToEven); //Update quality. craft.UpdateQuality(quality); } else { //Failure! wasSuccessful = false; result = ActionName + " failed!"; } craft.IncrementStep(); craft.UpdateDurability(DurabilityUsed); crafter.UpdateCP(CPCost); this.actionUsed = true; } else { result = "Condition must be good or excellent to use Precise Touch."; } return result; }
public string ExecuteAction(ICraft craft, ICrafter crafter, List<IModifier> activeModifiers, Random rng, Conditions condition) { string result = String.Empty; //If Inner Quiet active, set quality modifier. var innerQuiet = activeModifiers.Where(o => o.ModifierName == "Inner Quiet" && o.StepsRemaining > 0).FirstOrDefault() as InnerQuiet; if (innerQuiet != null && innerQuiet.StepsActive > 0) { //Calculate success. if (Calc.ActionIsSuccessful(rng, SuccessChance)) { //Success! wasSuccessful = true; qualityModifier = qualityModifier * (1 + (innerQuiet.StepsActive * .2)); double quality = Calc.ApplyCondition(Calc.Quality(craft.RecipeLevel, craft.ItemLevel, crafter.CrafterLevel, crafter.Control) * qualityModifier, condition); result = ActionName + " successful! Quality increased by " + Math.Round(quality, 0, MidpointRounding.ToEven); //Update quality. craft.UpdateQuality(quality); } else { //Failure! wasSuccessful = false; result = ActionName + " failed!"; } craft.IncrementStep(); craft.UpdateDurability(DurabilityUsed); crafter.UpdateCP(CPCost); innerQuiet.ConsumeStacks(); this.actionUsed = true; } else { result = "Inner Quiet stacks not available, cannot use " + ActionName + "."; } return result; }