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