示例#1
0
        private void CreateItemTypes()
        {
            if (_itemTypes == null)
            {
                _itemTypes = new FullyObservableCollection <LItem>();
            }

            var itemTypes = new List <TrinityItemType>((TrinityItemType[])Enum.GetValues(typeof(TrinityItemType)));

            var itemTypeImages = itemTypes.ToDictionary(k => k, v => string.Empty);

            foreach (var item in _TrinityItems)
            {
                itemTypeImages[item.TrinityItemType] = item.IconUrl;
            }

            var existingItemTypes = ItemTypes.ToDictionary(k => k.Id, v => v);

            foreach (var itemType in AllowedTrinityItemTypes)
            {
                LItem item;

                if (!existingItemTypes.TryGetValue((int)itemType, out item))
                {
                    item = new LItem
                    {
                        Name              = itemType.ToString(),
                        Id                = (int)itemType,
                        Type              = LItem.ILType.Slot,
                        TrinityItemType   = itemType,
                        ItemSelectionType = itemType.ToItemSelectionType(),
                        IconUrl           = itemTypeImages[itemType]
                    };
                    item.LoadCommands();
                    ItemTypes.Add(item);
                    continue;
                }

                item.Name              = itemType.ToString();
                item.Type              = LItem.ILType.Slot;
                item.TrinityItemType   = itemType;
                item.ItemSelectionType = itemType.ToItemSelectionType();
                item.IconUrl           = itemTypeImages[itemType];
                item.LoadCommands();
            }

            ItemTypes.Sort(itr => itr.Name);
        }
示例#2
0
        private static bool EvaluateRules(ACDItem cItem, LItem itemSetting, bool isTest)
        {
            if (itemSetting == null)
            {
                Core.Logger.Error("Null ItemSetting");
                return(false);
            }

            if (cItem == null)
            {
                Core.Logger.Error("Null TrinityItem");
                return(false);
            }

            var typeName = itemSetting.Type == LItem.ILType.Slot ? $"({itemSetting.Name}) " : string.Empty;

            Core.Logger.Verbose($"  >>  {cItem.Name} ({itemSetting.Id}) is a selected {itemSetting.Type} {typeName}with {itemSetting.Rules.Count} rules.");

            if (itemSetting.RequiredRules.Any())
            {
                Core.Logger.Verbose("  >>  {0} required rules:", itemSetting.RequiredRules.Count);
            }

            var   ruleUpgrades = new Dictionary <LRule, float>();
            float newValue;

            // If any of the required rules are false, trash.
            foreach (var itemRule in itemSetting.RequiredRules)
            {
                if (!EvaluateProperty(itemRule, cItem, out newValue))
                {
                    Core.Logger.Verbose($"  >>  Not stashing because of required rule failure: {itemRule.Name}");
                    return(false);
                }

                if (itemSetting.Type != LItem.ILType.Slot)
                {
                    ruleUpgrades.Add(itemRule, newValue);
                }
            }

            if (!itemSetting.OptionalRules.Any())
            {
                UpgradeRules(ruleUpgrades);
                return(true);
            }

            Core.Logger.Verbose($"  >>  item must have {itemSetting.Ops} of {itemSetting.OptionalRules.Count} optional rules:");

            // X optional rules must be true.
            var trueOptionals = 0;

            foreach (var itemRule in itemSetting.OptionalRules)
            {
                if (EvaluateProperty(itemRule, cItem, out newValue))
                {
                    trueOptionals++;

                    if (itemSetting.Type != LItem.ILType.Slot)
                    {
                        ruleUpgrades.Add(itemRule, newValue);
                    }
                }
            }

            if (trueOptionals >= itemSetting.Ops)
            {
                UpgradeRules(ruleUpgrades);
                return(true);
            }

            return(false);
        }