private static SwitchArgument <RepairState> GetRepairStep(RepairContext context) { var closeAction = new Action(r => { Repair.Close(); context.State = BotManager.Current.Name != "Fate Bot" ? RepairState.MovingBack : RepairState.None; Logger.AgilMessage("Ended repair step, now on: {0}", context.State); }); var close = new Decorator(req => Equipment.GetCondition() >= context.MinimumDurability && Repair.IsOpen, closeAction); var dismount = new Decorator(req => Core.Me.IsMounted, new Action(r => Actionmanager.Dismount())); var selectYes = new Decorator(req => SelectYesno.IsOpen, new Action(r => SelectYesno.ClickYes())); var move = Movement.SprintMove(r => context.Location); var repairAll = new RepairAll(); var selectRepair = new SetIconString(2); var setTarget = new SetTarget(() => context.NpcId); var interact = new Decorator(req => !Repair.IsOpen && !SelectIconString.IsOpen && !SelectYesno.IsOpen, new Interact()); var repairStep = new PrioritySelector(move, dismount, close, selectYes, repairAll, selectRepair, setTarget, interact, new Action(r => RunStatus.Success)); return(new SwitchArgument <RepairState>(repairStep, RepairState.Repairing)); }
private static Composite RepairProcedure(RepairContext context) { var initialStep = GetInitialStep(context); var returnArg = GetReturnStep(context); var repairStep = GetRepairStep(context); return(new Switch <RepairState>(r => context.State, initialStep, repairStep, returnArg)); }
public static Composite CreateBehavior(RepairContext context) { var changeContext = new Decorator(req => WorldManager.ZoneId != context.Mender.ZoneId, new Action(r => ChangeContext(context))); var repair = new Decorator(req => ShouldRepair(context, context.MinimumDurability) && CanRepair(context), RepairProcedure(context)); return(new PrioritySelector(changeContext, repair)); }
private static SwitchArgument <RepairState> GetInitialStep(RepairContext context) { var initStep = new Action(r => { context.State = RepairState.Repairing; context.InitialLocation = Core.Me.Location; Logger.AgilMessage("Going to repair."); return(RunStatus.Success); }); return(new SwitchArgument <RepairState>(initStep, RepairState.None)); }
public static Composite CreateBehavior(EquipmentContext equipContext, RepairContext repairContext) { var repair = repairContext.RepairEnabled ? RepairBehavior.CreateBehavior(repairContext) : new Action(r => RunStatus.Failure); var optimize = equipContext.OptimizerEnabled ? GearOptimizer.GetBehavior(equipContext) : new Action(r => RunStatus.Failure); var behavior = new PrioritySelector(repair, optimize); return(new Decorator(req => CanAct, behavior)); }
private static SwitchArgument <RepairState> GetReturnStep(RepairContext context) { var finalize = new Action(r => { context.State = RepairState.None; Logger.AgilMessage("Finished moving back."); return(RunStatus.Success); }); var move = Movement.SprintMove(r => context.Location); var returnStep = new PrioritySelector(move, finalize, new Action(r => RunStatus.Success)); return(new SwitchArgument <RepairState>(returnStep, RepairState.MovingBack)); }
public static RunStatus ChangeContext(RepairContext context) { context.State = RepairState.None; ushort zoneId = WorldManager.ZoneId; var mender = Database.Menders .Where(m => m.ZoneId == zoneId) .OrderBy(m => m.Location.Distance(Core.Me.Location)) .FirstOrDefault(m => m.ZoneId == zoneId); if (mender == null) { return(RunStatus.Failure); } if (context.Mender != null && mender.NpcId == context.Mender.NpcId) { return(RunStatus.Failure); } context.Mender = mender; Logger.AgilMessage("Changed mender to: {0}", mender); return(RunStatus.Failure); }
private static bool ShouldRepair(RepairContext context, float condition) { return(context.State != RepairState.None || Equipment.GetCondition() < condition); }
private static bool CanRepair(RepairContext context) { return(!GatheringWindow.WindowOpen && (!IsDoingFate || (IsDoingFate && context.State != RepairState.None)) && WorldManager.ZoneId == context.Mender.ZoneId); }