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); }
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); }