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 CreatureEquipment GetDuplicateEquipFromList(CreatureEquipment newEquip, List <CreatureEquipment> equipList) { for (int i = 0; i < equipList.Count; i++) { if (equipList[i].EquipEqual(newEquip)) { return(equipList[i]); } } return(null); }
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 equips = new DataBag <CreatureEquipment>(); foreach (var npc in units) { if (Settings.AreaFilters.Length > 0) { if (!(npc.Value.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters))) { continue; } } if (Settings.MapFilters.Length > 0) { if (!(npc.Value.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters))) { continue; } } var equipment = npc.Value.UnitData.VirtualItems; if (equipment.Length != 3) { continue; } if (equipment[0].ItemID == 0 && equipment[1].ItemID == 0 && equipment[2].ItemID == 0) { continue; } var equip = new CreatureEquipment { CreatureID = npc.Key.GetEntry(), ItemID1 = (uint)equipment[0].ItemID, ItemID2 = (uint)equipment[1].ItemID, ItemID3 = (uint)equipment[2].ItemID, AppearanceModID1 = equipment[0].ItemAppearanceModID, AppearanceModID2 = equipment[1].ItemAppearanceModID, AppearanceModID3 = equipment[2].ItemAppearanceModID, ItemVisual1 = equipment[0].ItemVisual, ItemVisual2 = equipment[1].ItemVisual, ItemVisual3 = equipment[2].ItemVisual }; if (equips.Contains(equip)) { continue; } for (uint i = 1;; i++) { equip.ID = i; if (!equips.ContainsKey(equip)) { break; } } equips.Add(equip); } var equipsDb = SQLDatabase.Get(equips); return(SQLUtil.Compare(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 equips = new DataBag <CreatureEquipment>(); foreach (KeyValuePair <WowGuid, Unit> npc in units) { if (Settings.AreaFilters.Length > 0) { if (!(npc.Value.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters))) { continue; } } if (Settings.MapFilters.Length > 0) { if (!(npc.Value.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters))) { continue; } } if (npc.Value.Equipment == null || npc.Value.Equipment.Length != 3) { continue; } if (npc.Value.Equipment[0] == 0 && npc.Value.Equipment[1] == 0 && npc.Value.Equipment[2] == 0) { continue; } CreatureEquipment equip = new CreatureEquipment { CreatureID = npc.Key.GetEntry(), ItemID1 = npc.Value.Equipment[0], ItemID2 = npc.Value.Equipment[1], ItemID3 = npc.Value.Equipment[2] }; if (equips.Contains(equip)) { continue; } for (uint i = 1;; i++) { equip.ID = i; if (!equips.ContainsKey(equip)) { break; } } equips.Add(equip); } var equipsDb = SQLDatabase.Get(equips); return(SQLUtil.Compare(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 equips = new DataBag <CreatureEquipment>(); var equipsDb = new RowList <CreatureEquipment>(); var newEntriesDict = new Dictionary <uint? /*CreatureID*/, List <CreatureEquipment> >(); foreach (var npc in units) { if (Settings.AreaFilters.Length > 0) { if (!(npc.Value.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters))) { continue; } } if (Settings.MapFilters.Length > 0) { if (!(npc.Value.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters))) { continue; } } var equipment = npc.Value.UnitData.VirtualItems; if (equipment.Length != 3) { continue; } if (equipment[0].ItemID == 0 && equipment[1].ItemID == 0 && equipment[2].ItemID == 0) { continue; } var equip = new CreatureEquipment { CreatureID = npc.Key.GetEntry(), ItemID1 = (uint)equipment[0].ItemID, ItemID2 = (uint)equipment[1].ItemID, ItemID3 = (uint)equipment[2].ItemID, AppearanceModID1 = equipment[0].ItemAppearanceModID, AppearanceModID2 = equipment[1].ItemAppearanceModID, AppearanceModID3 = equipment[2].ItemAppearanceModID, ItemVisual1 = equipment[0].ItemVisual, ItemVisual2 = equipment[1].ItemVisual, ItemVisual3 = equipment[2].ItemVisual }; if (SQLDatabase.CreatureEquipments.TryGetValue(npc.Key.GetEntry(), out var equipListDB)) { var equipDB = GetDuplicateEquipFromList(equip, equipListDB); if (equipDB != null) { if (equipDB.VerifiedBuild >= equip.VerifiedBuild) { continue; } equip.ID = equipDB.ID; equipsDb.Add(equipDB); // add to entries to compare to } else { equip.ID = (uint)equipListDB.Count + 1; equipListDB.Add(equip); } } else { if (newEntriesDict.TryGetValue(equip.CreatureID, out var equipList)) { if (GetDuplicateEquipFromList(equip, equipList) != null) { continue; } equip.ID = (uint)equipList.Count + 1; equipList.Add(equip); } else { equip.ID = 1; newEntriesDict.Add(equip.CreatureID, new List <CreatureEquipment>() { equip }); } } equips.Add(equip); } return(SQLUtil.Compare(Settings.SQLOrderByKey ? equips.OrderBy(x => x.Item1.CreatureID).ThenBy(y => y.Item1.ID) : equips, equipsDb, StoreNameType.Unit)); }