private List <Store> RemoveInferiorShops(List <Store> storeList, List <Item> itemList) { // ToDo: switch to new BitArrays in Store class List <BitArray> storeBitArrayList = new List <BitArray>(storeList.Count); foreach (Store store in storeList) { BitArray itemBitArray = new BitArray(itemList.Count); foreach (Item item in itemList) { if (store.getQty(item.extid) > item.qty) { // write into bitArray itemBitArray.Set(itemList.IndexOf(item), true); } } storeBitArrayList.Add(itemBitArray); } //2. find stores providing at least the same products int i = storeBitArrayList.Count - 1; int j = 0; while (i >= 0) { while (j < i) { if (storeBitArrayList[j] != storeBitArrayList[i] && storeBitArrayList[j].Or(storeBitArrayList[i]) == storeBitArrayList[j]) // there is another store providing everything this one provides { // now compare prices Boolean isShopInferior = true; foreach (Item item in itemList) { // if price is at least once lower //if (item.price < storeList[j].getPrice(item.extid) && item.price > 0) if (storeList[i].getPrice(item.extid) < storeList[j].getPrice(item.extid) && storeList[i].getPrice(item.extid) > 0) { isShopInferior = false; break; } } if (isShopInferior) { storeBitArrayList.RemoveAt(i); StoreDictionary.Remove(storeList[i].getName()); //wie bekomme ich den shop zu fassen?? storeList.RemoveAt(i); break; } } j++; } i--; } return(storeList); }
private void RemoveStoresWitoutAnyWantedItems() { var keysToRemove = StoreDictionary.Keys.Except(storesWithItemsList).ToList(); foreach (var key in keysToRemove) { StoreDictionary.Remove(key); } AddStatus(Environment.NewLine + " Number of stores with at least one item: " + StoreDictionary.Count + Environment.NewLine); }
public static string CreatureEquip(Dictionary <Guid, Unit> units) { if (units.Count == 0) { return(string.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_equip_template)) { return(string.Empty); } var equips = new StoreDictionary <ushort, CreatureEquipment>(); foreach (var unit in units) { var equip = new CreatureEquipment(); var npc = unit.Value; var entry = (ushort)unit.Key.GetEntry(); if (npc.Equipment == null || npc.Equipment.Length != 3) { continue; } if (npc.Equipment[0] == 0 && npc.Equipment[1] == 0 && npc.Equipment[2] == 0) { continue; } if (equips.ContainsKey(entry)) { var existingEquip = equips[entry].Item1; if (existingEquip.ItemEntry1 != npc.Equipment[0] || existingEquip.ItemEntry2 != npc.Equipment[1] || existingEquip.ItemEntry3 != npc.Equipment[2]) { equips.Remove(entry); // no conflicts } continue; } equip.ItemEntry1 = npc.Equipment[0]; equip.ItemEntry2 = npc.Equipment[1]; equip.ItemEntry3 = npc.Equipment[2]; equips.Add(entry, equip); } var entries = equips.Keys(); var equipsDb = SQLDatabase.GetDict <ushort, CreatureEquipment>(entries); return(SQLUtil.CompareDicts(equips, equipsDb, StoreNameType.Unit)); }
public static string CreatureEquip(Dictionary<WowGuid, Unit> units) { if (units.Count == 0) return string.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_equip_template)) return string.Empty; var rows = new List<QueryBuilder.SQLInsertRow>(); var equips = new StoreDictionary<uint, CreatureEquipment>(); foreach (var unit in units) { var equip = new CreatureEquipment(); var npc = unit.Value; var CreatureID = unit.Key.GetEntry(); var row = new QueryBuilder.SQLInsertRow(); if (Settings.AreaFilters.Length > 0) if (!(npc.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters))) continue; if (Settings.MapFilters.Length > 0) if (!(npc.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters))) continue; if (npc.Equipment == null || npc.Equipment.Length != 3) continue; if (npc.Equipment[0] == 0 && npc.Equipment[1] == 0 && npc.Equipment[2] == 0) continue; if (equips.ContainsKey(CreatureID)) { var existingEquip = equips[CreatureID].Item1; if (existingEquip.ItemEntry1 != npc.Equipment[0] || existingEquip.ItemEntry2 != npc.Equipment[1] || existingEquip.ItemEntry3 != npc.Equipment[2]) equips.Remove(CreatureID); // no conflicts continue; } /*equip.ID = 1; equip.ItemEntry1 = npc.Equipment[0]; equip.ItemEntry2 = npc.Equipment[1]; equip.ItemEntry3 = npc.Equipment[2];*/ row.AddValue("CreatureID", CreatureID); row.AddValue("ID", 1); row.AddValue("ItemID1", npc.Equipment[0]); row.AddValue("ItemID2", npc.Equipment[1]); row.AddValue("ItemID3", npc.Equipment[2]); equips.Add(CreatureID, equip); rows.Add(row); } var entries = equips.Keys(); //var equipsDb = SQLDatabase.GetDict<uint, CreatureEquipment>(entries); //return SQLUtil.CompareDicts(equips, equipsDb, StoreNameType.Unit); return new QueryBuilder.SQLInsert("creature_equip_template", rows, withDelete: true).Build(); }
public static string CreatureEquip(Dictionary<Guid, Unit> units) { if (units.Count == 0) return string.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_equip_template)) return string.Empty; var equips = new StoreDictionary<ushort, CreatureEquipment>(); foreach (var unit in units) { var equip = new CreatureEquipment(); var npc = unit.Value; var entry = (ushort)unit.Key.GetEntry(); if (npc.Equipment == null || npc.Equipment.Length != 3) continue; if (npc.Equipment[0] == 0 && npc.Equipment[1] == 0 && npc.Equipment[2] == 0) continue; if (equips.ContainsKey(entry)) { var existingEquip = equips[entry].Item1; if (existingEquip.ItemEntry1 != npc.Equipment[0] || existingEquip.ItemEntry2 != npc.Equipment[1] || existingEquip.ItemEntry3 != npc.Equipment[2]) equips.Remove(entry); // no conflicts continue; } equip.ItemEntry1 = npc.Equipment[0]; equip.ItemEntry2 = npc.Equipment[1]; equip.ItemEntry3 = npc.Equipment[2]; equips.Add(entry, equip); } var entries = equips.Keys(); var equipsDb = SQLDatabase.GetDict<ushort, CreatureEquipment>(entries); return SQLUtil.CompareDicts(equips, equipsDb, StoreNameType.Unit); }