public override ExitUsageRequirements CanUseExit(MajorModelEntities model, PathfindingSettings settings) { var reqs = new ExitUsageRequirements(); if (settings.PartyCharacters.Any(x => x.Class.Number == ClassNotAllowed) || settings.PartyCharacters.Any(x => x.Class.Number != ClassAllowed)) { // Detected a disallowed class. reqs.Method = ExitMethod.CannotPass; return(reqs); } // All party members can pass reqs.Method = ExitMethod.Normal; return(reqs); }
public override ExitUsageRequirements CanUseExit(MajorModelEntities model, PathfindingSettings settings) { var reqs = new ExitUsageRequirements(); if (settings.PartyCharacters.Any(x => x.Level < MinimumLevel) || settings.PartyCharacters.Any(x => x.Level > MaximumLevel)) { // Detected a disallowed level. reqs.Method = ExitMethod.CannotPass; return(reqs); } // All party members can pass reqs.Method = ExitMethod.Normal; return(reqs); }
public override ExitUsageRequirements CanUseExit(MajorModelEntities model, PathfindingSettings settings) { var reqs = new ExitUsageRequirements(); if (settings.PartyCharacters.Any(p => !p.Items.Any(i => i.Number == ItemRequired))) { // At least one member does not have the required item reqs.Method = ExitMethod.NeedItem; reqs.RequiredItemNumber = ItemRequired; return(reqs); } // All party members have the required item, we're good to go. reqs.Method = ExitMethod.Normal; return(reqs); }
public override ExitUsageRequirements CanUseExit(MajorModelEntities model, PathfindingSettings settings) { var reqs = new ExitUsageRequirements(); var moneyRequired = model.TollMultiplier * TollAmountRequired; if (settings.PartyCharacters.Any(x => x.GetTotalMoney(model) < moneyRequired)) { // someone doesn't have enough money, or hasn't disclosed that they have the money. // So, mark the exit as needing money. reqs.Method = ExitMethod.NeedMoney; reqs.RequiredMoneyAmount = moneyRequired; return(reqs); } // All party members have the required money, we're good to go. reqs.Method = ExitMethod.Normal; return(reqs); }
public static ExitUsageRequirements CanUseExit(MajorModelEntities model, PathfindingSettings settings, int chanceToPickOrBash, int keyRequired) { var reqs = new ExitUsageRequirements(); int chanceOfPicking = settings.PartyCharacters.Max(p => p.Picklocks) + chanceToPickOrBash; int chanceOfBashing = settings.PartyCharacters.Max(p => p.Strength) + chanceToPickOrBash; if (chanceOfPicking > settings.JustPickOrBashThreshold || chanceOfBashing > settings.JustPickOrBashThreshold) { // Good chance of picking or bashing this lock, pick/bash it even if the user has the item to save // the number of uses on it. reqs.Method = ExitMethod.PickOrBash; return(reqs); } if (keyRequired != 0 && settings.PartyCharacters.Any(p => p.Items.Any(x => x.Number == keyRequired))) { // Low or no chance of picking lock, but a party member has the item, so use it. reqs.Method = ExitMethod.UseItem; reqs.RequiredItemNumber = keyRequired; return(reqs); } if (chanceOfPicking > 0 || chanceOfBashing > 0) { // Low but some chance of picking the lock, user does not have the item reqs.Method = ExitMethod.PickOrBash; return(reqs); } if (keyRequired == 0) { // There is no way through this exit; you cannot pick it, and there is no key to obtain. reqs.Method = ExitMethod.CannotPass; return(reqs); } // User cannot pick, user has no item. Note the restriction so you can offer him a way around. reqs.Method = ExitMethod.NeedItem; reqs.RequiredItemNumber = keyRequired; return(reqs); }
public override OutputCommand GetOutputCommand(ExitUsageRequirements requirements) { return(new BarrierMovementOutputCommand(this, requirements)); }
public virtual OutputCommand GetOutputCommand(ExitUsageRequirements requirements) { return(new MovementOutputCommand(this)); }