Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 6
0
 public override OutputCommand GetOutputCommand(ExitUsageRequirements requirements)
 {
     return(new BarrierMovementOutputCommand(this, requirements));
 }
Exemplo n.º 7
0
 public virtual OutputCommand GetOutputCommand(ExitUsageRequirements requirements)
 {
     return(new MovementOutputCommand(this));
 }