コード例 #1
0
ファイル: UnitMisc.cs プロジェクト: wayt/WowPacketParser
        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));
        }
コード例 #2
0
ファイル: UnitMisc.cs プロジェクト: ratkosrb/WowPacketParser
 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);
 }
コード例 #3
0
ファイル: UnitMisc.cs プロジェクト: Naylu/WowPacketParser
        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));
        }
コード例 #4
0
ファイル: UnitMisc.cs プロジェクト: concept45/WowPacketParser
        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));
        }
コード例 #5
0
        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));
        }