Exemplo n.º 1
0
        public static string GetName(StoreNameType type, int entry, bool withEntry = true)
        {
            if (!SQLConnector.Enabled)
                return entry.ToString(CultureInfo.InvariantCulture);

            if (type != StoreNameType.Map && entry == 0)
                return "0"; // map can be 0

            if (!SQLDatabase.NameStores.ContainsKey(type))
                return entry.ToString(CultureInfo.InvariantCulture);

            string name;
            if (!SQLDatabase.NameStores[type].TryGetValue(entry, out name))
                if (!withEntry)
                    return "-Unknown-";

            if (!String.IsNullOrEmpty(name))
            {
                if (withEntry)
                    return entry + " (" + name + ")";
                return name;
            }

            return entry.ToString(CultureInfo.InvariantCulture);
        }
Exemplo n.º 2
0
        public static string GetName(StoreNameType type, int entry, bool withEntry = true)
        {
            if (type != StoreNameType.Map && entry <= 0)
            {
                return("0"); // map can be 0
            }
            var name = (type == StoreNameType.Unit || type == StoreNameType.GameObject ||
                        type == StoreNameType.Item || type == StoreNameType.Quest)
                              ? GetExistingDatabaseString(type, entry)
                              : GetExistingDBCString(type, entry);

            if (!String.IsNullOrEmpty(name))
            {
                if (withEntry)
                {
                    return(entry + " (" + name + ")");
                }
                return(name);
            }

            if (!withEntry)
            {
                return("-Unknown-");
            }

            return(entry.ToString());
        }
Exemplo n.º 3
0
        public int ReadEntryWithName <T>(StoreNameType type, string name, params int[] values)
        {
            var val = (int)ReadValue(Type.GetTypeCode(typeof(T)));

            Writer.WriteLine("{0}{1}: {2}{3}", GetIndexString(values), name, StoreGetters.GetName(type, val), (debug ? " (0x" + val.ToString("X4") + ")" : ""));
            return(val);
        }
Exemplo n.º 4
0
        private T ReadEntry <T>(StoreNameType type, string name, params object[] indexes) where T : struct
        {
            var val = ReadValue <T>();
            int val32;

            if (val > Int32.MaxValue)
            {
                val32 = unchecked ((int)Convert.ToUInt32(val));
            }
            else
            {
                val32 = Convert.ToInt32(val);
            }

            if (type == StoreNameType.Spell && Settings.ParseSpellInfos)
            {
                ReadSpellEntry((uint)val32, name, indexes);
            }
            else
            {
                AddValue(name, FormatInteger(val32, StoreGetters.GetName(type, val32, false)), indexes);
            }

            return((T)Convert.ChangeType(val, typeof(T)));
        }
Exemplo n.º 5
0
        public void AddSniffData(StoreNameType type, int id, string data)
        {
            if (type == StoreNameType.None)
            {
                return;
            }

            if (id == 0 && type != StoreNameType.Map)
            {
                return; // Only maps can have id 0
            }
            if (type == StoreNameType.Opcode && !SniffDataOpcodes)
            {
                return; // Don't add opcodes if its config is not enabled
            }
            if (type != StoreNameType.Opcode && !SniffData)
            {
                return;
            }

            var item = new SniffData
            {
                FileName   = FileName,
                TimeStamp  = Utilities.GetUnixTimeFromDateTime(Time),
                ObjectType = type,
                Id         = id,
                Data       = data,
                Number     = Number,
            };

            Storage.SniffData.Add(item);
        }
Exemplo n.º 6
0
        private uint ReadEntry(StoreNameType type, string name, int bits, params object[] indexes)
        {
            var val = ReadBits(bits);

            AddValue(name, FormatInteger(val, StoreGetters.GetName(type, (int)val, false)), indexes);
            return(val);
        }
Exemplo n.º 7
0
        public void AddSniffData(StoreNameType type, int id, string data)
        {
            if (type == StoreNameType.None)
            {
                return;
            }

            if (id == 0 && type != StoreNameType.Map)
            {
                return; // Only maps can have id 0
            }
            if (type == StoreNameType.Opcode && !SniffDataOpcodes)
            {
                return; // Don't add opcodes if its config is not enabled
            }
            if (type != StoreNameType.Opcode && !SniffData)
            {
                return;
            }

            var item = new SniffData
            {
                FileName   = FileName,
                ObjectType = type,
                Id         = id,
                Data       = data,
            };

            Storage.SniffData.Add(item, TimeSpan);
        }
Exemplo n.º 8
0
        public override string ToString()
        {
            if (Low == 0 && High == 0)
            {
                return("Full: 0x0");
            }

            if (HasEntry())
            {
                StoreNameType type = Utilities.ObjectTypeToStore(GetObjectType());

                // ReSharper disable once UseStringInterpolation
                return(string.Format("Full: 0x{0}{1} {2}/{3} R{4}/S{5} Map: {6} Entry: {7} Low: {8}", High.ToString("X16"), Low.ToString("X16"),
                                     GetHighType(), GetSubType(), GetRealmId(), GetServerId(), StoreGetters.GetName(StoreNameType.Map, GetMapId()),
                                     StoreGetters.GetName(type, (int)GetEntry()), GetLow()));
            }

            // TODO: Implement extra format for battleground, see WowGuid64.ToString()

            string name = StoreGetters.GetName(this);

            // ReSharper disable once UseStringInterpolation
            return(string.Format("Full: 0x{0}{1} {2}/{3} R{4}/S{5} Map: {6} Low: {7}", High.ToString("X16"), Low.ToString("X16"),
                                 GetHighType(), GetSubType(), GetRealmId(), GetServerId(), StoreGetters.GetName(StoreNameType.Map, GetMapId()),
                                 GetLow() + (String.IsNullOrEmpty(name) ? String.Empty : (" Name: " + name))));
        }
Exemplo n.º 9
0
        private T ReadEntry <T>(StoreNameType type, string name, params object[] indexes) where T : struct
        {
            var val   = ReadValue <T>();
            var val32 = Convert.ToInt32(val);

            AddValue(name, FormatInteger(val32, StoreGetters.GetName(type, val32, false)), indexes);
            return((T)Convert.ChangeType(val, typeof(T)));
        }
Exemplo n.º 10
0
        public T ReadEntry <T>(StoreNameType type, string name, params object[] indexes) where T : struct
        {
            var val   = ReadStruct <T>();
            var val32 = Convert.ToInt32(val);

            AddValue(name, StoreGetters.GetName(type, val32) + (Settings.DebugReads ? " (0x" + val32.ToString("X4") + ")" : String.Empty), indexes);
            return(val);
        }
Exemplo n.º 11
0
        public static bool CheckFilter(StoreNameType type, int entry)
        {
            var result = true;
            List<int> filters;

            if (NameStores.TryGetValue(type, out filters))
                result = !filters.Contains(entry);

            return result;
        }
Exemplo n.º 12
0
        public int ReadEntryWithName <T>(StoreNameType type, string name, params int[] values)
        {
            var val = (int)ReadValue(Type.GetTypeCode(typeof(T)));

            WriteLine("{0}{1}: {2}{3}", GetIndexString(values), name, StoreGetters.GetName(type, val), (Settings.DebugReads ? " (0x" + val.ToString("X4") + ")" : String.Empty));
            if (WriteToFile)
            {
                WriteToFile = Filters.CheckFilter(type, val);
            }
            return(val);
        }
Exemplo n.º 13
0
        public static string GetExistingDBCString(StoreNameType type, int entry)
        {
            if (entry <= 0 || !DBC.DBCStore.DBC.Enabled)
            {
                return(string.Empty);
            }

            switch (type)
            {
            case StoreNameType.Spell:
            {
                SpellEntry spell;
                if (DBC.DBCStore.DBC.Spell.TryGetValue((uint)entry, out spell))
                {
                    return(spell.GetSpellName());
                }
                break;
            }

            case StoreNameType.Map:
            {
                MapEntry map;
                if (DBC.DBCStore.DBC.Map.TryGetValue((uint)entry, out map))
                {
                    return(map.GetMapName());
                }
                break;
            }

            case StoreNameType.LFGDungeon:
            {
                LFGDungeonsEntry dungeon;
                if (DBC.DBCStore.DBC.LFGDungeons.TryGetValue((uint)entry, out dungeon))
                {
                    return(dungeon.GetName());
                }
                break;
            }

            case StoreNameType.Battleground:
            {
                BattlemasterListEntry data;
                if (DBC.DBCStore.DBC.BattlemasterList.TryGetValue((uint)entry, out data))
                {
                    return(data.GetName());
                }
                break;
            }

            default:
                return(string.Empty);
            }
            return("-Unknown-");
        }
Exemplo n.º 14
0
        public static bool CheckFilter(StoreNameType type, int entry)
        {
            var        result = true;
            List <int> filters;

            if (NameStores.TryGetValue(type, out filters))
            {
                result = !filters.Contains(entry);
            }

            return(result);
        }
Exemplo n.º 15
0
        public static string GetExistingDatabaseString(StoreNameType type, int entry)
        {
            if (entry <= 0 || !SQLConnector.Enabled)
            {
                return(string.Empty);
            }

            string name = "-Unknown-";

            switch (type)
            {
            case StoreNameType.Unit:
            {
                if (SQLDatabase.UnitNames.TryGetValue((uint)entry, out name))
                {
                    return(name);
                }
                break;
            }

            case StoreNameType.GameObject:
            {
                if (SQLDatabase.GameObjectNames.TryGetValue((uint)entry, out name))
                {
                    return(name);
                }
                break;
            }

            case StoreNameType.Item:
            {
                if (SQLDatabase.ItemNames.TryGetValue((uint)entry, out name))
                {
                    return(name);
                }
                break;
            }

            case StoreNameType.Quest:
            {
                if (SQLDatabase.QuestNames.TryGetValue((uint)entry, out name))
                {
                    return(name);
                }
                break;
            }

            default:
                return(string.Empty);
            }
            return(name);
        }
Exemplo n.º 16
0
        public static string GetExistingDBCString(StoreNameType type, int entry)
        {
            if (entry <= 0 || !DBC.DBCStore.DBC.Enabled)
                return string.Empty;

            switch (type)
            {
                case StoreNameType.Spell:
                {
                    SpellEntry spell;
                    if (DBC.DBCStore.DBC.Spell.TryGetValue((uint)entry, out spell))
                        return spell.GetSpellName();
                    break;
                }
                case StoreNameType.Map:
                {
                    MapEntry map;
                    if (DBC.DBCStore.DBC.Map.TryGetValue((uint)entry, out map))
                        return map.GetMapName();
                    break;
                }
                case StoreNameType.LFGDungeon:
                {
                    LFGDungeonsEntry dungeon;
                    if (DBC.DBCStore.DBC.LFGDungeons.TryGetValue((uint)entry, out dungeon))
                        return dungeon.GetName();
                    break;
                }
                case StoreNameType.Battleground:
                {
                    BattlemasterListEntry data;
                    if (DBC.DBCStore.DBC.BattlemasterList.TryGetValue((uint)entry, out data))
                        return data.GetName();
                    break;
                }
                default:
                    return string.Empty;
            }
            return "-Unknown-";
        }
Exemplo n.º 17
0
        public static string GetName(StoreNameType type, int entry, bool withEntry = true)
        {
            var entryStr = entry.ToString(CultureInfo.InvariantCulture);

            if (!SQLConnector.Enabled)
            {
                return(entryStr);
            }

            if (type != StoreNameType.Map && entry == 0)
            {
                return("0"); // map can be 0
            }
            if (!SQLDatabase.NameStores.ContainsKey(type))
            {
                return(entryStr);
            }

            string name;

            if (!SQLDatabase.NameStores[type].TryGetValue(entry, out name))
            {
                if (!withEntry)
                {
                    return("-Unknown-");
                }
            }

            if (!String.IsNullOrEmpty(name))
            {
                if (withEntry)
                {
                    return(entry + " (" + name + ")");
                }
                return(name);
            }

            return(entryStr);
        }
Exemplo n.º 18
0
        public static string GetExistingDatabaseString(StoreNameType type, int entry)
        {
            if (entry <= 0 || !SQLConnector.Enabled)
                return string.Empty;

            string name = "-Unknown-";

            switch (type)
            {
                case StoreNameType.Unit:
                {
                    if (SQLDatabase.UnitNames.TryGetValue((uint)entry, out name))
                        return name;
                    break;
                }
                case StoreNameType.GameObject:
                {
                    if (SQLDatabase.GameObjectNames.TryGetValue((uint)entry, out name))
                        return name;
                    break;
                }
                case StoreNameType.Item:
                {
                    if (SQLDatabase.ItemNames.TryGetValue((uint)entry, out name))
                        return name;
                    break;
                }
                case StoreNameType.Quest:
                {
                    if (SQLDatabase.QuestNames.TryGetValue((uint)entry, out name))
                        return name;
                    break;
                }
                default:
                    return string.Empty;
            }
            return name;
        }
Exemplo n.º 19
0
        public override string ToString()
        {
            if (Full == 0)
            {
                return("0x0");
            }

            // If our guid has an entry and it is an unit or a GO, print its
            // name next to the entry (from a database, if enabled)
            if (HasEntry())
            {
                StoreNameType type = StoreNameType.None;
                if (GetObjectType() == ObjectType.Unit)
                {
                    type = StoreNameType.Unit;
                }
                if (GetObjectType() == ObjectType.GameObject)
                {
                    type = StoreNameType.GameObject;
                }

                return("Full: 0x" + Full.ToString("X8") + " Type: " + GetHighType()
                       + " Entry: " + StoreGetters.GetName(type, (int)GetEntry()) + " Low: " + GetLow());
            }

            if (GetHighType() == HighGuidType.BattleGround)
            {
                var bgType    = (Full & 0x00FF0000) >> 16;
                var UnkId     = (Full & 0x0000FF00) >> 8;
                var arenaType = (Full & 0x000000FF) >> 0;
                return("Full: 0x" + Full.ToString("X8") + " Type: " + GetHighType()
                       + " BgType: " + StoreGetters.GetName(StoreNameType.Battleground, (int)bgType)
                       + " Unk: " + UnkId + (arenaType > 0 ? (" ArenaType: " + arenaType) : ""));
            }

            return("Full: 0x" + Full.ToString("X8") + " Type: " + GetHighType()
                   + " Low: " + GetLow());
        }
Exemplo n.º 20
0
        public static string GetName(StoreNameType type, int entry, bool withEntry = true)
        {
            var entryStr = entry.ToString(CultureInfo.InvariantCulture);

            string name = string.Empty;

            if (Settings.UseDBC)
            {
                switch (type)
                {
                case StoreNameType.Achievement:
                    if (DBC.DBC.Achievement.ContainsKey(entry))
                    {
                        name = DBC.DBC.Achievement[entry].Title;
                    }
                    break;

                case StoreNameType.Area:
                    if (DBC.DBC.AreaTable.ContainsKey(entry))
                    {
                        name = DBC.DBC.AreaTable[entry].AreaName;
                    }
                    break;

                case StoreNameType.Unit:
                    if (DBC.DBC.Creature.ContainsKey(entry))
                    {
                        name = DBC.DBC.Creature[entry].Name;
                    }
                    break;

                case StoreNameType.CreatureFamily:
                    if (DBC.DBC.CreatureFamily.ContainsKey(entry))
                    {
                        name = DBC.DBC.CreatureFamily[entry].Name;
                    }
                    break;

                case StoreNameType.Criteria:
                    if (DBC.DBC.CriteriaStores.ContainsKey((ushort)entry))
                    {
                        name = DBC.DBC.CriteriaStores[(ushort)entry];
                    }
                    break;

                case StoreNameType.Difficulty:
                    if (DBC.DBC.Difficulty.ContainsKey(entry))
                    {
                        name = DBC.DBC.Difficulty[entry].Name;
                    }
                    break;

                case StoreNameType.Faction:
                    if (DBC.DBC.FactionStores.ContainsKey((uint)entry))
                    {
                        name = DBC.DBC.FactionStores[(uint)entry].Name;
                    }
                    break;

                case StoreNameType.Item:
                    if (DBC.DBC.ItemSparse.ContainsKey(entry))
                    {
                        name = DBC.DBC.ItemSparse[entry].Display;
                    }
                    break;

                case StoreNameType.Map:
                    if (DBC.DBC.Map.ContainsKey(entry))
                    {
                        name = DBC.DBC.Map[entry].MapName;
                    }
                    break;

                case StoreNameType.Spell:
                    if (DBC.DBC.SpellName.ContainsKey(entry))
                    {
                        name = DBC.DBC.SpellName[entry].Name;
                    }
                    break;

                case StoreNameType.Zone:
                    if (DBC.DBC.Zones.ContainsKey((uint)entry))
                    {
                        name = DBC.DBC.Zones[(uint)entry];
                    }
                    break;
                }
                if (name != string.Empty)
                {
                    if (withEntry)
                    {
                        return(entry + " (" + name + ")");
                    }
                    return(name);
                }
            }

            if (!SQLConnector.Enabled)
            {
                return(entryStr);
            }

            if (type != StoreNameType.Map && entry == 0)
            {
                return("0"); // map can be 0
            }
            if (!SQLDatabase.NameStores.ContainsKey(type))
            {
                return(entryStr);
            }

            if (!SQLDatabase.NameStores[type].TryGetValue(entry, out name))
            {
                if (!withEntry)
                {
                    return("-Unknown-");
                }
            }

            if (!String.IsNullOrEmpty(name))
            {
                if (withEntry)
                {
                    return(entry + " (" + name + ")");
                }
                return(name);
            }

            return(entryStr);
        }
Exemplo n.º 21
0
        public void AddSniffData(StoreNameType type, int id, string data)
        {
            if (type == StoreNameType.None)
                return;

            if (id == 0 && type != StoreNameType.Map)
                return; // Only maps can have id 0

            if (type == StoreNameType.Opcode && !SniffDataOpcodes)
                return; // Don't add opcodes if its config is not enabled

            if (type != StoreNameType.Opcode && !SniffData)
                return;

            var item = new SniffData
            {
                FileName = FileName,
                ObjectType = type,
                Id = id,
                Data = data,
            };

            Storage.SniffData.Add(item, TimeSpan);
        }
Exemplo n.º 22
0
 /// <summary>
 /// <para>Compare two dictionaries (of the same types) and creates SQL inserts
 ///  or updates accordingly.</para>
 /// <remarks>Second dictionary can be null (only inserts queries will be produced)</remarks>
 /// <remarks>Use DBTableName and DBFieldName attributes to specify table and field names, in TK</remarks>
 /// </summary>
 /// <typeparam name="T">Type of the first primary key</typeparam>
 /// /// <typeparam name="TG">Type of the second primary key</typeparam>
 /// <typeparam name="TK">Type of the WDB struct (field names and types must match DB field name and types)</typeparam>
 /// <typeparam name="TH"></typeparam>
 /// <param name="dict1">Dictionary retrieved from  parser</param>
 /// <param name="dict2">Dictionary retrieved from  DB</param>
 /// <param name="storeType1">(T) Are we dealing with Spells, Quests, Units, ...?</param>
 /// <param name="storeType2">(TG) Are we dealing with Spells, Quests, Units, ...?</param>
 /// <param name="storeType3">(TH) Are we dealing with Spells, Quests, Units, ...?</param>
 /// <param name="primaryKeyName1">The name of the first primary key</param>
 /// <param name="primaryKeyName2">The name of the second primary key</param>
 /// <param name="primaryKeyName3">The name of the third primary key</param>
 /// <returns>A string containing full SQL queries</returns>
 public static string CompareDicts <T, TG, TH, TK>(StoreDictionary <Tuple <T, TG, TH>, TK> dict1, StoreDictionary <Tuple <T, TG, TH>, TK> dict2, StoreNameType storeType1, StoreNameType storeType2, StoreNameType storeType3, string primaryKeyName1, string primaryKeyName2, string primaryKeyName3)
 {
     /*var tableAttrs = (DBTableNameAttribute[])typeof(TK).GetCustomAttributes(typeof(DBTableNameAttribute), false);
      * if (tableAttrs.Length <= 0)
      *  return string.Empty;
      * var tableName = tableAttrs[0].Name;
      *
      * var fields = Utilities.GetFieldsAndAttributes<TK, DBFieldNameAttribute>();
      * if (fields == null)
      *  return string.Empty;
      *
      * fields.RemoveAll(field => field.Item2.Name == null);
      *
      * var rowsIns = new List<SQLInsertRow>();
      * var rowsUpd = new List<SQLUpdateRow>();
      *
      * foreach (var elem1 in Settings.SQLOrderByKey ? dict1.OrderBy(blub => blub.Key).ToList() : dict1.ToList())
      * {
      *  if (dict2 != null && dict2.ContainsKey(elem1.Key)) // update
      *  {
      *      var row = new SQLUpdateRow();
      *
      *      foreach (var field in fields)
      *      {
      *          var elem2 = dict2[elem1.Key];
      *
      *          var val1 = field.Item1.GetValue(elem1.Value.Item1);
      *          var val2 = field.Item1.GetValue(elem2.Item1);
      *
      *          var arr1 = val1 as Array;
      *          if (arr1 != null)
      *          {
      *              var arr2 = (Array)val2;
      *
      *              var isString = arr1.GetType().GetElementType() == typeof(string);
      *
      *              for (var i = 0; i < field.Item2.Count; i++)
      *              {
      *                  var value1 = i >= arr1.Length ? (isString ? (object)string.Empty : 0) : arr1.GetValue(i);
      *                  var value2 = i >= arr2.Length ? (isString ? (object)string.Empty : 0) : arr2.GetValue(i);
      *
      *                  if (!Utilities.EqualValues(value1, value2))
      *                      row.AddValue(field.Item2.Name + (field.Item2.StartAtZero ? i : i + 1), value1);
      *              }
      *
      *              continue;
      *          }
      *
      *          if (!Utilities.EqualValues(val1, val2))
      *              row.AddValue(field.Item2.Name, val1);
      *      }
      *
      *      var key1 = Convert.ToUInt32(elem1.Key.Item1);
      *      var key2 = Convert.ToUInt32(elem1.Key.Item2);
      *      var key3 = Convert.ToUInt32(elem1.Key.Item3);
      *
      *      row.AddWhere(primaryKeyName1, key1);
      *      row.AddWhere(primaryKeyName2, key2);
      *      row.AddWhere(primaryKeyName3, key3);
      *
      *      var key1Name = storeType1 != StoreNameType.None ?
      *          StoreGetters.GetName(storeType1, (int)key1, false) :
      *          elem1.Key.Item1.ToString();
      *      var key2Name = storeType2 != StoreNameType.None ?
      *          StoreGetters.GetName(storeType2, (int)key2, false) :
      *          elem1.Key.Item2.ToString();
      *      var key3Name = storeType3 != StoreNameType.None ?
      *          StoreGetters.GetName(storeType3, (int)key3, false) :
      *          elem1.Key.Item2.ToString();
      *
      *      row.Comment = key1Name + " - " + key2Name + " - " + key3Name;
      *      row.Table = tableName;
      *
      *      if (row.ValueCount == 0)
      *          continue;
      *
      *      var lastField = fields[fields.Count - 1];
      *      if (lastField.Item2.Name == "VerifiedBuild")
      *      {
      *          var buildvSniff = (int)lastField.Item1.GetValue(elem1.Value.Item1);
      *          var buildvDB = (int)lastField.Item1.GetValue(dict2[elem1.Key].Item1);
      *
      *          if (buildvDB > buildvSniff) // skip update if DB already has a VerifiedBuild higher than this one
      *              continue;
      *      }
      *
      *      rowsUpd.Add(row);
      *  }
      *  else // insert new
      *  {
      *      var row = new SQLInsertRow();
      *      row.AddValue(primaryKeyName1, elem1.Key.Item1);
      *      row.AddValue(primaryKeyName2, elem1.Key.Item2);
      *      row.AddValue(primaryKeyName3, elem1.Key.Item3);
      *
      *      var key1 = Convert.ToUInt32(elem1.Key.Item1);
      *      var key2 = Convert.ToUInt32(elem1.Key.Item2);
      *      var key3 = Convert.ToUInt32(elem1.Key.Item3);
      *
      *      var key1Name = storeType1 != StoreNameType.None ?
      *          StoreGetters.GetName(storeType1, (int)key1, false) :
      *          elem1.Key.Item1.ToString();
      *      var key2Name = storeType2 != StoreNameType.None ?
      *          StoreGetters.GetName(storeType2, (int)key2, false) :
      *          elem1.Key.Item2.ToString();
      *      var key3Name = storeType3 != StoreNameType.None ?
      *          StoreGetters.GetName(storeType3, (int)key3, false) :
      *          elem1.Key.Item2.ToString();
      *
      *      row.Comment = key1Name + " - " + key2Name + " - " + key3Name;
      *
      *      foreach (var field in fields)
      *      {
      *          if (field.Item1.FieldType.BaseType == typeof(Array))
      *          {
      *              var arr = (Array)field.Item1.GetValue(elem1.Value.Item1);
      *              if (arr == null)
      *                  continue;
      *
      *              for (var i = 0; i < arr.Length; i++)
      *                  row.AddValue(field.Item2.Name + (field.Item2.StartAtZero ? i : i + 1), arr.GetValue(i));
      *
      *              continue;
      *          }
      *
      *          var val = field.Item1.GetValue(elem1.Value.Item1);
      *          if (val == null && field.Item1.FieldType == typeof(string))
      *              val = string.Empty;
      *
      *          row.AddValue(field.Item2.Name, val);
      *      }
      *      rowsIns.Add(row);
      *  }
      * }
      *
      * var result = new SQLInsert(tableName, rowsIns, deleteDuplicates: false, primaryKeyNumber: 3).Build() +
      *           new SQLUpdate(rowsUpd).Build();
      *
      * return result;*/
     return(string.Empty);
 }
Exemplo n.º 23
0
        /// <param name="storeList"><see cref="DataBag{T}"/> with items form sniff.</param>
        /// <param name="dbList"><see cref="DataBag{T}"/> with items from database.</param>
        /// <param name="storeType">Are we dealing with Spells, Quests, Units, ...?</param>
        public static string Compare <T>(IEnumerable <Tuple <T, TimeSpan?> > storeList, RowList <T> dbList, StoreNameType storeType)
            where T : IDataModel, new()
        {
            var primaryKey = GetFirstPrimaryKey <T>();

            return(Compare(storeList, dbList, t => StoreGetters.GetName(storeType, Convert.ToInt32(primaryKey.GetValue(t)), false)));
        }
Exemplo n.º 24
0
        /// <summary>
        /// <para>Compare two dictionaries (of the same types) and creates SQL inserts
        ///  or updates accordingly.</para>
        /// <remarks>Second dictionary can be null (only inserts queries will be produced)</remarks>
        /// <remarks>Use DBTableName and DBFieldName attributes to specify table and field names, in TK</remarks>
        /// </summary>
        /// <typeparam name="T">Type of the primary key (uint)</typeparam>
        /// <typeparam name="TK">Type of the WDB struct (field types must match DB field)</typeparam>
        /// <param name="dict1">Dictionary retrieved from  parser</param>
        /// <param name="dict2">Dictionary retrieved from  DB</param>
        /// <param name="storeType">Are we dealing with Spells, Quests, Units, ...?</param>
        /// <param name="primaryKeyName">The name of the primary key, usually "entry"</param>
        /// <returns>A string containing full SQL queries</returns>
        public static string CompareDicts <T, TK>(StoreDictionary <T, TK> dict1, StoreDictionary <T, TK> dict2, StoreNameType storeType, string primaryKeyName = "entry")
        {
            var tableAttrs = (DBTableNameAttribute[])typeof(TK).GetCustomAttributes(typeof(DBTableNameAttribute), false);

            if (tableAttrs.Length <= 0)
            {
                return(string.Empty);
            }
            var tableName = tableAttrs[0].Name;

            var fields = Utilities.GetFieldsAndAttribute <TK, DBFieldNameAttribute>();

            if (fields == null)
            {
                return(string.Empty);
            }

            fields.RemoveAll(field => field.Item2.Name == null);

            var rowsIns = new List <QueryBuilder.SQLInsertRow>();
            var rowsUpd = new List <QueryBuilder.SQLUpdateRow>();

            foreach (var elem1 in Settings.SQLOrderByKey ? dict1.OrderBy(blub => blub.Key).ToList() : dict1.ToList())
            {
                if (dict2 != null && dict2.ContainsKey(elem1.Key)) // update
                {
                    var row = new QueryBuilder.SQLUpdateRow();

                    foreach (var field in fields)
                    {
                        var elem2 = dict2[elem1.Key];

                        var val1 = field.Item1.GetValue(elem1.Value.Item1);
                        var val2 = field.Item1.GetValue(elem2.Item1);

                        var arr1 = val1 as Array;
                        if (arr1 != null)
                        {
                            var arr2 = (Array)val2;

                            var isString = arr1.GetType().GetElementType() == typeof(string);

                            for (var i = 0; i < field.Item2.Count; i++)
                            {
                                var value1 = i >= arr1.Length ? (isString ? (object)string.Empty : 0) : arr1.GetValue(i);
                                var value2 = i >= arr2.Length ? (isString ? (object)string.Empty : 0) : arr2.GetValue(i);

                                if (!Utilities.EqualValues(value1, value2))
                                {
                                    row.AddValue(field.Item2.Name + (field.Item2.StartAtZero ? i : i + 1), value1);
                                }
                            }

                            continue;
                        }

                        if ((val2 is Array) && val1 == null)
                        {
                            continue;
                        }

                        if (!Utilities.EqualValues(val1, val2))
                        {
                            row.AddValue(field.Item2.Name, val1);
                        }
                    }

                    var key = Convert.ToUInt32(elem1.Key);

                    row.AddWhere(primaryKeyName, key);
                    row.Comment = StoreGetters.GetName(storeType, (int)key, false);
                    row.Table   = tableName;

                    if (row.ValueCount == 0)
                    {
                        continue;
                    }

                    var lastField = fields[fields.Count - 1];
                    if (lastField.Item2.Name == "VerifiedBuild")
                    {
                        var buildvSniff = (int)lastField.Item1.GetValue(elem1.Value.Item1);
                        var buildvDB    = (int)lastField.Item1.GetValue(dict2[elem1.Key].Item1);

                        if (buildvDB > buildvSniff) // skip update if DB already has a VerifiedBuild higher than this one
                        {
                            continue;
                        }
                    }

                    rowsUpd.Add(row);
                }
                else // insert new
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue(primaryKeyName, elem1.Key);
                    row.Comment = StoreGetters.GetName(storeType, Convert.ToInt32(elem1.Key), false);

                    foreach (var field in fields)
                    {
                        if (field.Item1.FieldType.BaseType == typeof(Array))
                        {
                            var arr = (Array)field.Item1.GetValue(elem1.Value.Item1);
                            if (arr == null)
                            {
                                continue;
                            }

                            for (var i = 0; i < arr.Length; i++)
                            {
                                row.AddValue(field.Item2.Name + (field.Item2.StartAtZero ? i : i + 1), arr.GetValue(i));
                            }

                            continue;
                        }

                        var val = field.Item1.GetValue(elem1.Value.Item1);
                        if (val == null && field.Item1.FieldType == typeof(string))
                        {
                            val = string.Empty;
                        }

                        row.AddValue(field.Item2.Name, val);
                    }
                    rowsIns.Add(row);
                }
            }

            var result = new QueryBuilder.SQLInsert(tableName, rowsIns, deleteDuplicates: false).Build() +
                         new QueryBuilder.SQLUpdate(rowsUpd).Build();

            return(result);
        }
Exemplo n.º 25
0
        public static string GetName(StoreNameType type, int entry, bool withEntry = true)
        {
            if (type != StoreNameType.Map && entry <= 0)
                return "0"; // map can be 0

            var name = (type == StoreNameType.Unit || type == StoreNameType.GameObject
                 || type == StoreNameType.Item || type == StoreNameType.Quest)
                              ? GetExistingDatabaseString(type, entry)
                              : GetExistingDBCString(type, entry);

            if (!String.IsNullOrEmpty(name))
            {
                if (withEntry)
                    return entry + " (" + name + ")";
                return name;
            }

            if (!withEntry)
                return "-Unknown-";

            return entry.ToString();
        }
Exemplo n.º 26
0
        /// <summary>
        /// <para>Compare two dictionaries (of the same types) and creates SQL inserts
        ///  or updates accordingly.</para>
        /// <remarks>Second dictionary can be null (only inserts queries will be produced)</remarks>
        /// </summary>
        /// <typeparam name="T">Type of the primary key (uint)</typeparam>
        /// <typeparam name="TK">Type of the WDB struct (field names and types must match DB field name and types)</typeparam>
        /// <param name="dict1">Dictionary retrieved from  parser</param>
        /// <param name="dict2">Dictionary retrieved from  DB</param>
        /// <param name="storeType">Are we dealing with Spells, Quests, Units, ...?</param>
        /// <param name="primaryKeyName">The name of the primary key, usually "entry"</param>
        /// <returns>A string containing full SQL queries</returns>
        public static string CompareDicts <T, TK>(StoreDictionary <T, TK> dict1, StoreDictionary <T, TK> dict2, StoreNameType storeType, string primaryKeyName = "entry")
        {
            var tableAttrs = (DBTableNameAttribute[])typeof(TK).GetCustomAttributes(typeof(DBTableNameAttribute), false);

            if (tableAttrs.Length <= 0)
            {
                return(string.Empty);
            }
            var tableName = tableAttrs[0].Name;

            var fields = Utilities.GetFieldsAndAttribute <TK, DBFieldNameAttribute>();

            if (fields == null)
            {
                return(string.Empty);
            }

            var rowsIns = new List <QueryBuilder.SQLInsertRow>();
            var rowsUpd = new List <QueryBuilder.SQLUpdateRow>();

            foreach (var elem1 in dict1)
            {
                if (dict2 != null && dict2.ContainsKey(elem1.Key)) // update
                {
                    var row = new QueryBuilder.SQLUpdateRow();

                    foreach (var field in fields)
                    {
                        var elem2 = dict2[elem1.Key];

                        var val1 = field.Item1.GetValue(elem1.Value.Item1);
                        var val2 = field.Item1.GetValue(elem2.Item1);

                        var arr1 = val1 as Array;
                        if (arr1 != null)
                        {
                            var arr2 = (Array)val2;

                            var isString = arr1.GetType().GetElementType() == typeof(string);

                            for (var i = 0; i < field.Item2.Count; i++)
                            {
                                var value1 = i >= arr1.Length ? (isString ? (object)string.Empty : 0) : arr1.GetValue(i);
                                var value2 = i >= arr2.Length ? (isString ? (object)string.Empty : 0) : arr2.GetValue(i);

                                if (!Utilities.EqualValues(value1, value2))
                                {
                                    row.AddValue(field.Item2.Name + (field.Item2.StartAtZero ? i : i + 1), value1);
                                }
                            }

                            continue;
                        }

                        if (!Utilities.EqualValues(val1, val2))
                        {
                            row.AddValue(field.Item2.Name, val1);
                        }
                    }

                    var key = Convert.ToUInt32(elem1.Key);

                    row.AddWhere(primaryKeyName, key);
                    row.Comment = StoreGetters.GetName(storeType, (int)key, false);
                    row.Table   = tableName;

                    if (row.ValueCount != 0)
                    {
                        rowsUpd.Add(row);
                    }
                }
                else // insert new
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue(primaryKeyName, elem1.Key);
                    row.Comment = StoreGetters.GetName(storeType, Convert.ToInt32(elem1.Key), false);

                    foreach (var field in fields)
                    {
                        if (field.Item1.FieldType.BaseType == typeof(Array))
                        {
                            var arr = (Array)field.Item1.GetValue(elem1.Value.Item1);
                            for (var i = 0; i < arr.Length; i++)
                            {
                                row.AddValue(field.Item2.Name + (field.Item2.StartAtZero ? i : i + 1), arr.GetValue(i));
                            }

                            continue;
                        }

                        row.AddValue(field.Item2.Name, field.Item1.GetValue(elem1.Value.Item1));
                    }
                    rowsIns.Add(row);
                }
            }

            var result = new QueryBuilder.SQLInsert(tableName, rowsIns, deleteDuplicates: false).Build() +
                         new QueryBuilder.SQLUpdate(rowsUpd).Build();

            return(result);
        }
Exemplo n.º 27
0
        public void AddSniffData(StoreNameType type, int id, string data)
        {
            if (type == StoreNameType.None)
                return;

            if (id == 0 && type != StoreNameType.Map)
                return; // Only maps can have id 0

            if (type == StoreNameType.Opcode && !SniffDataOpcodes)
                return; // Don't add opcodes if its config is not enabled

            if (type != StoreNameType.Opcode && !SniffData)
                return;

            var item = new SniffData
            {
                FileName = FileName,
                TimeStamp = Utilities.GetUnixTimeFromDateTime(Time),
                ObjectType = type,
                Id = id,
                Data = data,
                Number = Number,
            };

               Storage.SniffData.Add(item);
        }
Exemplo n.º 28
0
        public static string Loot()
        {
            if (Stuffing.Loots.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure
            const string tableName = "LootTemplate";

            string[] primaryKey     = { "Id", "Type" };
            string[] tableStructure = { "Id", "Type", "ItemId", "Count" };

            // Can't cast the collection directly
            ICollection <Tuple <uint, uint> > lootKeys = new Collection <Tuple <uint, uint> >();

            foreach (var tuple in Stuffing.Loots.Keys)
            {
                lootKeys.Add(new Tuple <uint, uint>(tuple.Item1, (uint)tuple.Item2));
            }

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQueryDouble(lootKeys, primaryKey, tableName));

            // Insert
            sqlQuery.Append(SQLUtil.InsertQueryHeader(tableStructure, tableName));

            // Insert rows
            foreach (var loot in Stuffing.Loots)
            {
                StoreNameType storeType = StoreNameType.None;
                switch (Stuffing.Loots.Keys.First().Item2)
                {
                case ObjectType.Item:
                    storeType = StoreNameType.Item;
                    break;

                case ObjectType.Corpse:
                case ObjectType.Unit:
                    storeType = StoreNameType.Unit;
                    break;

                case ObjectType.Container:
                case ObjectType.GameObject:
                    storeType = StoreNameType.GameObject;
                    break;
                }
                sqlQuery.Append("-- " + StoreGetters.GetName(storeType, (int)loot.Key.Item1) +
                                "(" + loot.Value.Gold + " gold)" + Environment.NewLine);
                foreach (var lootItem in loot.Value.LootItems)
                {
                    sqlQuery.Append(
                        "(" +
                        loot.Key.Item1 + cs +
                        (int)loot.Key.Item2 + cs +
                        lootItem.ItemId + cs +
                        lootItem.Count + ")," + " -- " +
                        StoreGetters.GetName(StoreNameType.Item, (int)lootItem.ItemId, false) +
                        Environment.NewLine);
                }
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
Exemplo n.º 29
0
 /// <param name="storeList"><see cref="DataBag{T}"/> with items form sniff.</param>
 /// <param name="dbList"><see cref="DataBag{T}"/> with items from database.</param>
 /// <param name="storeType">Are we dealing with Spells, Quests, Units, ...?</param>
 public static string Compare <T>(DataBag <T> storeList, RowList <T> dbList, StoreNameType storeType)
     where T : IDataModel, new()
 {
     return(Compare(storeList, dbList, t => StoreGetters.GetName(storeType, Convert.ToInt32(GetFirstPrimaryKey <T>().GetValue(t)), false)));
 }