public GameClient PayItemPrerequisites(LearningPredicate prerequisites)
        {
            if (prerequisites.Items_Required != null && prerequisites.Items_Required.Count > 0)
            {
                foreach (var retainer in prerequisites.Items_Required)
                {
                    var item = Aisling.Inventory.Get(i => i.Template.Name == retainer.Item);

                    foreach (var i in item)
                    {
                        if (!i.Template.Flags.HasFlag(ItemFlags.Stackable))
                        {
                            Aisling.EquipmentManager.RemoveFromInventory(i, i.Template.CarryWeight > 0);
                            break;
                        }
                        else
                        {
                            Aisling.Inventory.RemoveRange(Aisling.Client, i, retainer.AmountRequired);
                            break;
                        }
                    }
                }
            }

            return(this);
        }
        private void PayItemPrerequisites(LearningPredicate prerequisites)
        {
            if (prerequisites.Items_Required != null && prerequisites.Items_Required.Count > 0)
            {
                foreach (var retainer in prerequisites.Items_Required)
                {
                    var item = Aisling.Inventory.Get(i => i.Template.Name == retainer.Item);

                    if (item.FirstOrDefault().Stacks == retainer.AmountRequired ||
                        item.Length + 1 >= retainer.AmountRequired)
                    {
                        var taken       = 0;
                        var BatchToTake = new List <Item>();
                        foreach (var i in item)
                        {
                            if (taken <= retainer.AmountRequired)
                            {
                                if (i.Stacks >= retainer.AmountRequired)
                                {
                                    i.Stacks -= (byte)retainer.AmountRequired;
                                    {
                                        Send(new ServerFormat0F(i));
                                    }

                                    if (i.Stacks <= 0)
                                    {
                                        BatchToTake.Add(i);
                                    }

                                    taken = retainer.AmountRequired;
                                    break;
                                }
                                else
                                {
                                    taken++;
                                    BatchToTake.Add(i);
                                }
                            }
                        }
                        BatchToTake.ForEach(i =>
                        {
                            Aisling.EquipmentManager.RemoveFromInventory(i, i.Template.CarryWeight > 0);
                        });
                    }
                }
            }
        }
Esempio n. 3
0
        public bool PayPrerequisites(LearningPredicate prerequisites)
        {
            if (prerequisites == null)
            {
                return(false);
            }

            PayItemPrerequisites(prerequisites);
            {
                if (prerequisites.Gold_Required > 0)
                {
                    Aisling.GoldPoints -= prerequisites.Gold_Required;
                    if (Aisling.GoldPoints <= 0)
                    {
                        Aisling.GoldPoints = 0;
                    }
                }
                SendStats(StatusFlags.All);
                return(true);
            }
        }