public void AddToPlan(object tp, int value, int cost) { PlanningEntry entry = null; for (var index = 0; index < Entries.Count; index++) { var e = Entries[index]; if (e.TrainPoint == tp) { entry = e; break; } } if (entry != null) { Entries.Remove(entry); } Entries.Add(new PlanningEntry(tp, value, cost)); if (tp is MagicalAbility ability && ability <= MagicalAbility.WrestlingMastery) { TrainingPoint trainingPoint = PetTrainingHelper.GetTrainingPoint(ability); for (var index = 0; index < Entries.Count; index++) { PlanningEntry en = Entries[index]; if (trainingPoint.Requirements != null && trainingPoint.Requirements.Length > 0) { for (var i = 0; i < trainingPoint.Requirements.Length; i++) { TrainingPointRequirement req = trainingPoint.Requirements[i]; if (req != null && (req.Requirement is WeaponAbility && en.TrainPoint is WeaponAbility || req.Requirement is SpecialAbility && en.TrainPoint is SpecialAbility || req.Requirement is AreaEffect && en.TrainPoint is AreaEffect)) { en.Value = 0; en.Cost = 0; } } } } } }
public void OnAddAbility(object newAbility, bool advancement) { if (advancement) { AddPetAdvancement(newAbility); } if (newAbility is MagicalAbility ability) { AddMagicalAbility(ability); } TrainingPoint trainPoint = PetTrainingHelper.GetTrainingPoint(newAbility); if (trainPoint != null && trainPoint.Requirements != null) { for (var index = 0; index < trainPoint.Requirements.Length; index++) { TrainingPointRequirement req = trainPoint.Requirements[index]; if (req != null) { if (req.Requirement is SkillName name) { double skill = Creature.Skills[name].Base; double toAdd = req.Cost == 100 ? 20 : 40; if (name == SkillName.Hiding) { toAdd = 100; } if (skill < toAdd) { Creature.Skills[name].Base = toAdd; } } else if (req.Requirement is WeaponAbility requirement) { AddAbility(requirement); } } } } }