Ejemplo n.º 1
0
        public static string SniffData()
        {
            if (Storage.SniffData.IsEmpty())
            {
                return(String.Empty);
            }

            const string tableName = "SniffData";

            if (Settings.DumpFormat != DumpFormatType.SniffDataOnly)
            {
                if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.SniffData) && !Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.SniffDataOpcodes))
                {
                    return(string.Empty);
                }
            }

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var data in Storage.SniffData)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("Build", ClientVersion.Build);
                row.AddValue("SniffName", data.Item1.FileName);
                row.AddValue("ObjectType", data.Item1.ObjectType.ToString());
                row.AddValue("Id", data.Item1.Id);
                row.AddValue("Data", data.Item1.Data);

                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, ignore: true, withDelete: false).Build());
        }
Ejemplo n.º 2
0
        public static string QuestPOI()
        {
            if (Storage.QuestPOIs.IsEmpty())
            {
                return(String.Empty);
            }

            var sql = string.Empty;

            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.quest_poi))
            {
                var entries = Storage.QuestPOIs.Keys();
                var poiDb   = SQLDatabase.GetDict <uint, uint, QuestPOI>(entries, "questid", "id");

                sql = SQLUtil.CompareDicts(Storage.QuestPOIs, poiDb, StoreNameType.Quest, "questid", "id");
            }

            // TODO: fix this piece of code so it compares with db
            //var points = new StoreMulti<Tuple<uint, uint>, QuestPOIPoint>();
            //
            //foreach (KeyValuePair<Tuple<uint, uint>, Tuple<QuestPOI, TimeSpan?>> pair in Storage.QuestPOIs)
            //    foreach (var point in pair.Value.Item1.Points)
            //        points.Add(pair.Key, point, pair.Value.Item2);
            //
            //var entries2 = points.Keys();
            //var poiPointsDb = SQLDatabase.GetDictMulti<uint, uint, QuestPOIPoint>(entries2, "questid", "id");

            const string tableName2 = "quest_poi_points";

            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.quest_poi_points))
            {
                var rows = new List <QueryBuilder.SQLInsertRow>();
                foreach (var quest in Storage.QuestPOIs)
                {
                    var questPOI = quest.Value.Item1;

                    if (questPOI.Points != null) // Needed?
                    {
                        foreach (var point in questPOI.Points)
                        {
                            var row = new QueryBuilder.SQLInsertRow();

                            row.AddValue("questId", quest.Key.Item1);
                            row.AddValue("id", quest.Key.Item2);
                            row.AddValue("idx", point.Index); // Not on sniffs
                            row.AddValue("x", point.X);
                            row.AddValue("y", point.Y);
                            row.AddValue("VerifiedBuild", point.VerifiedBuild);
                            row.Comment = StoreGetters.GetName(StoreNameType.Quest, (int)quest.Key.Item1, false);

                            rows.Add(row);
                        }
                    }
                }

                sql += new QueryBuilder.SQLInsert(tableName2, rows, 2).Build();
            }

            return(sql);
        }
Ejemplo n.º 3
0
        public static string Loot()
        {
            if (Storage.Loots.IsEmpty())
            {
                return(String.Empty);
            }

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

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var loot in Storage.Loots)
            {
                var comment = new QueryBuilder.SQLInsertRow();
                comment.HeaderComment =
                    StoreGetters.GetName(Utilities.ObjectTypeToStore(Storage.Loots.Keys().First().Item2), (int)loot.Key.Item1, false) +
                    " (" + loot.Value.Item1.Gold + " gold)";
                rows.Add(comment);
                foreach (var lootItem in loot.Value.Item1.LootItems)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("Id", loot.Key.Item1);
                    row.AddValue("Type", loot.Key.Item2);
                    row.AddValue("ItemId", lootItem.ItemId);
                    row.AddValue("Count", lootItem.Count);
                    row.Comment = StoreGetters.GetName(StoreNameType.Item, (int)lootItem.ItemId, false);

                    rows.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 2).Build());
        }
Ejemplo n.º 4
0
        public static string NpcText()
        {
            if (Storage.NpcTexts.IsEmpty())
            {
                return(String.Empty);
            }

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

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var npcTextPair in Storage.NpcTexts)
            {
                var row     = new QueryBuilder.SQLInsertRow();
                var npcText = npcTextPair.Value.Item1;

                row.AddValue("Id", npcTextPair.Key);

                for (var i = 0; i < npcText.Probabilities.Length; i++)
                {
                    row.AddValue("Probability" + (i + 1), npcText.Probabilities[i]);
                }

                for (var i = 0; i < npcText.Texts1.Length; i++)
                {
                    row.AddValue("Text1_" + (i + 1), npcText.Texts1[i]);
                }

                for (var i = 0; i < npcText.Texts2.Length; i++)
                {
                    row.AddValue("Text2_" + (i + 1), npcText.Texts2[i]);
                }

                for (var i = 0; i < npcText.Languages.Length; i++)
                {
                    row.AddValue("Language" + (i + 1), npcText.Languages[i]);
                }

                for (var i = 0; i < npcText.EmoteDelays[0].Length; i++)
                {
                    for (var j = 0; j < npcText.EmoteDelays[1].Length; j++)
                    {
                        row.AddValue("EmoteDelay" + (i + 1) + "_" + (j + 1), npcText.EmoteDelays[i][j]);
                    }
                }

                for (var i = 0; i < npcText.EmoteIds[0].Length; i++)
                {
                    for (var j = 0; j < npcText.EmoteIds[1].Length; j++)
                    {
                        row.AddValue("EmoteId" + (i + 1) + "_" + (j + 1), npcText.EmoteDelays[i][j]);
                    }
                }

                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows).Build());
        }
Ejemplo n.º 5
0
        public static string NpcVendor()
        {
            if (Storage.NpcVendors.IsEmpty())
            {
                return(String.Empty);
            }

            const string tableName = "npc_vendor";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var npcVendor in Storage.NpcVendors)
            {
                var comment = new QueryBuilder.SQLInsertRow();
                comment.HeaderComment = StoreGetters.GetName(StoreNameType.Unit, (int)npcVendor.Key);
                rows.Add(comment);
                foreach (var vendorItem in npcVendor.Value.Item1.VendorItems)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("entry", npcVendor.Key);
                    row.AddValue("item", vendorItem.ItemId);
                    row.AddValue("slot", vendorItem.Slot);
                    row.AddValue("maxcount", vendorItem.MaxCount);
                    row.AddValue("ExtendedCost", vendorItem.ExtendedCostId);
                    row.Comment = StoreGetters.GetName(StoreNameType.Item, (int)vendorItem.ItemId, false);
                    rows.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 2).Build());
        }
Ejemplo n.º 6
0
        public static string CreatureEquip(Dictionary <Guid, Unit> units)
        {
            if (units.Count == 0)
            {
                return(string.Empty);
            }

            const string tableName = "creature_equip_template";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var unit in units)
            {
                var row       = new QueryBuilder.SQLInsertRow();
                var creature  = unit.Value;
                var equipData = creature.Equipment;

                // check if fields are empty
                if (equipData == null || equipData.All(value => value == 0))
                {
                    continue;
                }

                row.AddValue("entry", unit.Key.GetEntry());
                row.AddValue("itemEntry1", equipData[0]);
                row.AddValue("itemEntry2", equipData[1]);
                row.AddValue("itemEntry3", equipData[2]);
                row.Comment = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows).Build());
        }
Ejemplo n.º 7
0
        public static string NpcTrainer()
        {
            if (Storage.NpcTrainers.IsEmpty())
            {
                return(String.Empty);
            }

            const string tableName = "npc_trainer";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var npcTrainer in Storage.NpcTrainers)
            {
                var comment = new QueryBuilder.SQLInsertRow();
                comment.HeaderComment = StoreGetters.GetName(StoreNameType.Unit, (int)npcTrainer.Key, false);
                rows.Add(comment);
                foreach (var trainerSpell in npcTrainer.Value.Item1.TrainerSpells)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("entry", npcTrainer.Key);
                    row.AddValue("spell", trainerSpell.Spell);
                    row.AddValue("spellcost", trainerSpell.Cost);
                    row.AddValue("reqskill", trainerSpell.RequiredSkill);
                    row.AddValue("reqskillvalue", trainerSpell.RequiredSkillLevel);
                    row.AddValue("reqlevel", trainerSpell.RequiredLevel);
                    row.Comment = StoreGetters.GetName(StoreNameType.Spell, (int)trainerSpell.Spell, false);
                    rows.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows).Build());
        }
Ejemplo n.º 8
0
        public static string SniffData()
        {
            if (Storage.SniffData.IsEmpty())
            {
                return(String.Empty);
            }

            const string tableName = "SniffData";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var data in Storage.SniffData)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("Build", ClientVersion.Build);
                row.AddValue("SniffName", data.Item1.FileName);
                row.AddValue("TimeStamp", data.Item1.TimeStamp);
                row.AddValue("ObjectType", data.Item1.ObjectType.ToString());
                row.AddValue("Id", data.Item1.Id);
                row.AddValue("Data", data.Item1.Data);
                row.AddValue("Number", data.Item1.Number);

                if (data.Item1.ObjectType == StoreNameType.Opcode)
                {
                    row.Comment = Opcodes.GetOpcodeName(data.Item1.Id);
                }

                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, ignore: true, withDelete: false).Build());
        }
Ejemplo n.º 9
0
        public static string CreatureEquip(Dictionary<Guid, Unit> units)
        {
            if (units.Count == 0)
                return string.Empty;

            const string tableName = "creature_equip_template";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var unit in units)
            {
                var row = new QueryBuilder.SQLInsertRow();
                var creature = unit.Value;
                var equipData = creature.Equipment;

                // check if fields are empty
                if (equipData == null || equipData.All(value => value == 0))
                    continue;

                row.AddValue("entry", unit.Key.GetEntry());
                row.AddValue("itemEntry1", equipData[0]);
                row.AddValue("itemEntry2", equipData[1]);
                row.AddValue("itemEntry3", equipData[2]);
                row.Comment = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 10
0
        public static string ObjectNames()
        {
            if (Storage.ObjectNames.IsEmpty())
            {
                return(string.Empty);
            }

            const string tableName = "ObjectNames";

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.ObjectNames))
            {
                return(string.Empty);
            }

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var data in Storage.ObjectNames)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("ObjectType", data.Value.Item1.ObjectType.ToString());
                row.AddValue("Id", data.Key);
                row.AddValue("Name", data.Value.Item1.Name);

                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 2, ignore: true, withDelete: false).Build());
        }
Ejemplo n.º 11
0
        public static string SniffData()
        {
            if (Storage.SniffData.IsEmpty)
                return String.Empty;

            const string tableName = "SniffData";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var data in Storage.SniffData)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("Build", ClientVersion.Build);
                row.AddValue("SniffName", data.FileName);
                row.AddValue("TimeStamp", data.TimeStamp);
                row.AddValue("ObjectType", data.ObjectType.ToString());
                row.AddValue("Id", data.Id);
                row.AddValue("Data", data.Data);
                row.AddValue("Number", data.Number);

                if (data.ObjectType == StoreNameType.Opcode)
                    row.Comment = Opcodes.GetOpcodeName(data.Id);

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows, ignore: true, withDelete: false).Build();
        }
Ejemplo n.º 12
0
        public static string Addon(Dictionary<WowGuid, Unit> units)
        {
            if (units.Count == 0)
                return string.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_template_addon))
                return string.Empty;

            const string tableName = "creature_template_addon";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var unit in units)
            {
                var npc = unit.Value;

                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;

                var row = new QueryBuilder.SQLInsertRow();
                row.AddValue("entry", unit.Key.GetEntry());
                row.AddValue("mount", npc.Mount);
                row.AddValue("bytes1", npc.Bytes1, true);
                row.AddValue("bytes2", npc.Bytes2, true);

                var auras = string.Empty;
                var commentAuras = string.Empty;
                if (npc.Auras != null && npc.Auras.Count() != 0)
                {
                    foreach (var aura in npc.Auras)
                    {
                        if (aura == null)
                            continue;

                        // usually "template auras" do not have caster
                        if (ClientVersion.AddedInVersion(ClientType.MistsOfPandaria) ? !aura.AuraFlags.HasAnyFlag(AuraFlagMoP.NoCaster) : !aura.AuraFlags.HasAnyFlag(AuraFlag.NotCaster))
                            continue;

                        auras += aura.SpellId + " ";
                        commentAuras += StoreGetters.GetName(StoreNameType.Spell, (int) aura.SpellId, false) + ", ";
                    }
                    auras = auras.TrimEnd(' ');
                    commentAuras = commentAuras.TrimEnd(',', ' ');
                }
                row.AddValue("auras", auras);

                row.Comment += StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                if (!String.IsNullOrWhiteSpace(auras))
                    row.Comment += " - " + commentAuras;

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 13
0
        public static string Creature(Dictionary<Guid, Unit> units)
        {
            if (units.Count == 0)
                return string.Empty;

            const string tableName = "creature";

            uint count = 0;
            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var unit in units)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var creature = unit.Value;

                if (Settings.AreaFilters.Length > 0)
                    if (!(creature.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters)))
                        continue;

                var spawnTimeSecs = creature.GetDefaultSpawnTime();
                var movementType = 0; // TODO: Find a way to check if our unit got random movement
                var spawnDist = (movementType == 1) ? 5 : 0;

                row.AddValue("id", unit.Key.GetEntry());
                row.AddValue("map", creature.Map);
                row.AddValue("spawnMask", 1);
                row.AddValue("phaseMask", creature.PhaseMask);
                row.AddValue("modelid", creature.Model);
                row.AddValue("position_x", creature.Movement.Position.X);
                row.AddValue("position_y", creature.Movement.Position.Y);
                row.AddValue("position_z", creature.Movement.Position.Z);
                row.AddValue("orientation", creature.Movement.Orientation);
                row.AddValue("curhealth", creature.MaxHealth);
                row.AddValue("spawntimesecs", spawnTimeSecs);
                row.AddValue("spawndist", spawnDist);
                row.AddValue("MovementType", movementType);
                row.Comment = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                row.Comment += " (Area: " + StoreGetters.GetName(StoreNameType.Area, creature.Area, false) + ")";

                if (creature.IsTemporarySpawn())
                {
                    row.CommentOut = true;
                    row.Comment += " - !!! might be temporary spawn !!!";
                }
                else
                    ++count;

                rows.Add(row);
            }

            var result = new StringBuilder();
            // delete query for GUIDs
            //var delete = new QueryBuilder.SQLDelete(Tuple.Create("@CGUID+0", "@CGUID+" + --count), "guid", tableName);
            //result.Append(delete.Build());

            var sql = new QueryBuilder.SQLInsert(tableName, rows, withDelete: false);
            result.Append(sql.Build());
            return result.ToString();
        }
Ejemplo n.º 14
0
        public static string QuestPOI()
        {
            if (Storage.QuestPOIs.IsEmpty)
            {
                return(String.Empty);
            }

            const string tableName1 = "quest_poi";
            const string tableName2 = "quest_poi_points";

            // `quest_poi`
            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var quest in Storage.QuestPOIs)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("questId", quest.Key.Item1);
                row.AddValue("id", quest.Key.Item2);
                row.AddValue("objIndex", quest.Value.ObjectiveIndex);
                row.AddValue("mapid", quest.Value.Map);
                row.AddValue("WorldMapAreaId", quest.Value.WorldMapAreaId);
                row.AddValue("FloorId", quest.Value.FloorId);
                row.AddValue("unk3", quest.Value.UnkInt1);
                row.AddValue("unk4", quest.Value.UnkInt2);
                row.Comment = StoreGetters.GetName(StoreNameType.Quest, (int)quest.Key.Item1, false);

                rows.Add(row);
            }

            var result = new QueryBuilder.SQLInsert(tableName1, rows, 2).Build();

            // `quest_poi_points`
            rows = new List <QueryBuilder.SQLInsertRow>();
            foreach (var quest in Storage.QuestPOIs)
            {
                if (quest.Value.Points != null) // Needed?
                {
                    foreach (var point in quest.Value.Points)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("questId", quest.Key.Item1);
                        row.AddValue("id", quest.Key.Item2);
                        row.AddValue("idx", point.Index); // Not on sniffs
                        row.AddValue("x", point.X);
                        row.AddValue("y", point.Y);
                        row.Comment = StoreGetters.GetName(StoreNameType.Quest, (int)quest.Key.Item1, false);

                        rows.Add(row);
                    }
                }
            }

            result += new QueryBuilder.SQLInsert(tableName2, rows, 2).Build();

            return(result);
        }
Ejemplo n.º 15
0
        public static string QuestPOI()
        {
            if (Storage.QuestPOIs.IsEmpty())
                return String.Empty;

            const string tableName1 = "quest_poi";
            const string tableName2 = "quest_poi_points";

            // `quest_poi`
            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var quest in Storage.QuestPOIs)
            {
                var questPOI = quest.Value.Item1;

                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("questId", quest.Key.Item1);
                row.AddValue("id", quest.Key.Item2);
                row.AddValue("objIndex", questPOI.ObjectiveIndex);
                row.AddValue("mapid", questPOI.Map);
                row.AddValue("WorldMapAreaId", questPOI.WorldMapAreaId);
                row.AddValue("FloorId", questPOI.FloorId);
                row.AddValue("unk3", questPOI.UnkInt1);
                row.AddValue("unk4", questPOI.UnkInt2);
                row.Comment = StoreGetters.GetName(StoreNameType.Quest, (int)quest.Key.Item1, false);

                rows.Add(row);
            }

            var result = new QueryBuilder.SQLInsert(tableName1, rows, 2).Build();

            // `quest_poi_points`
            rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var quest in Storage.QuestPOIs)
            {
                var questPOI = quest.Value.Item1;

                if (questPOI.Points != null) // Needed?
                    foreach (var point in questPOI.Points)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("questId", quest.Key.Item1);
                        row.AddValue("id", quest.Key.Item2);
                        row.AddValue("idx", point.Index); // Not on sniffs
                        row.AddValue("x", point.X);
                        row.AddValue("y", point.Y);
                        row.Comment = StoreGetters.GetName(StoreNameType.Quest, (int)quest.Key.Item1, false);

                        rows.Add(row);
                    }
            }

            result += new QueryBuilder.SQLInsert(tableName2, rows, 2).Build();

            return result;
        }
Ejemplo n.º 16
0
        public static string BroadcastTextLocale()
        {
            if (Storage.BroadcastTextLocales.IsEmpty())
                return String.Empty;

            if (!Settings.HotfixSQLOutputFlag.HasAnyFlagBit(HotfixSQLOutput.broadcast_text_locale))
                return String.Empty;

            const string tableName = "broadcast_text_locale";

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

            foreach (var broadcastTextLocale in Settings.SQLOrderByKey ? Storage.BroadcastTextLocales.OrderBy(blub => blub.Key).ToList() : Storage.BroadcastTextLocales.ToList())
            {
                if (SQLDatabase.BroadcastTextLocaleStores != null && SQLDatabase.BroadcastTextLocaleStores.ContainsKey(Tuple.Create(broadcastTextLocale.Key.Item1, broadcastTextLocale.Key.Item2)))
                {
                    var row = new QueryBuilder.SQLUpdateRow();
                    var broadcastTextLocaleDB = SQLDatabase.BroadcastTextLocaleStores[Tuple.Create(broadcastTextLocale.Key.Item1, broadcastTextLocale.Key.Item2)];

                    if (!Utilities.EqualValues(broadcastTextLocaleDB.MaleText_lang, broadcastTextLocale.Value.Item1.MaleText_lang))
                        row.AddValue("MaleText_lang", broadcastTextLocale.Value.Item1.MaleText_lang);

                    if (!Utilities.EqualValues(broadcastTextLocaleDB.FemaleText_lang, broadcastTextLocale.Value.Item1.FemaleText_lang))
                        row.AddValue("FemaleText_lang", broadcastTextLocale.Value.Item1.FemaleText_lang);

                    if (!Utilities.EqualValues(broadcastTextLocaleDB.VerifiedBuild, broadcastTextLocale.Value.Item1.VerifiedBuild))
                        row.AddValue("VerifiedBuild", broadcastTextLocale.Value.Item1.VerifiedBuild);

                    row.AddWhere("ID", broadcastTextLocale.Key.Item1);
                    row.AddWhere("locale", broadcastTextLocale.Key.Item2);

                    row.Table = tableName;

                    rowsUpd.Add(row);
                }
                else // insert new
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("ID", broadcastTextLocale.Key.Item1);
                    row.AddValue("locale", broadcastTextLocale.Key.Item2);

                    row.AddValue("MaleText_lang", broadcastTextLocale.Value.Item1.MaleText_lang);
                    row.AddValue("FemaleText_lang", broadcastTextLocale.Value.Item1.FemaleText_lang);

                    row.AddValue("VerifiedBuild", broadcastTextLocale.Value.Item1.VerifiedBuild);

                    rowsIns.Add(row);
                }
            }

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

            return "SET NAMES 'utf8';" + Environment.NewLine + result + Environment.NewLine + "SET NAMES 'latin1';";
        }
Ejemplo n.º 17
0
        public static string Addon(Dictionary <Guid, Unit> units)
        {
            if (units.Count == 0)
            {
                return(string.Empty);
            }

            const string tableName = "creature_template_addon";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var unit in units)
            {
                var npc = unit.Value;

                var row = new QueryBuilder.SQLInsertRow();
                row.AddValue("entry", unit.Key.GetEntry());
                row.AddValue("mount", npc.Mount);
                row.AddValue("bytes1", npc.Bytes1, true);
                row.AddValue("b2_0_sheath", npc.Bytes2, true);
                row.AddValue("MovementFlags", npc.Movement.Flags, true);

                var auras        = string.Empty;
                var commentAuras = string.Empty;
                if (npc.Auras != null && npc.Auras.Count() != 0)
                {
                    foreach (var aura in npc.Auras)
                    {
                        if (aura == null)
                        {
                            continue;
                        }
                        if (!aura.AuraFlags.HasAnyFlag(AuraFlag.NotCaster))
                        {
                            continue;                                                 // usually "template auras" do not have caster
                        }
                        auras        += aura.SpellId + " ";
                        commentAuras += StoreGetters.GetName(StoreNameType.Spell, (int)aura.SpellId, false) + ", ";
                    }
                    auras        = auras.TrimEnd(' ');
                    commentAuras = commentAuras.TrimEnd(',', ' ');
                }
                row.AddValue("auras", auras);

                row.Comment += StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                if (!String.IsNullOrWhiteSpace(auras))
                {
                    row.Comment += " - " + commentAuras;
                }

                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows).Build());
        }
Ejemplo n.º 18
0
        public static string QuestPOI()
        {
            if (Storage.QuestPOIs.IsEmpty())
                return String.Empty;

            var sql = string.Empty;

            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.quest_poi))
            {
                var entries = Storage.QuestPOIs.Keys();
                var poiDb = SQLDatabase.GetDict<uint, uint, QuestPOI>(entries, "questid", "id");

                sql = SQLUtil.CompareDicts(Storage.QuestPOIs, poiDb, StoreNameType.Quest, "questid", "id");
            }

            //var points = new StoreMulti<Tuple<uint, uint>, QuestPOIPoint>();
            //
            //foreach (KeyValuePair<Tuple<uint, uint>, Tuple<QuestPOI, TimeSpan?>> pair in Storage.QuestPOIs)
            //    foreach (var point in pair.Value.Item1.Points)
            //        points.Add(pair.Key, point, pair.Value.Item2);
            //
            //var entries2 = points.Keys();
            //var poiPointsDb = SQLDatabase.GetDictMulti<uint, uint, QuestPOIPoint>(entries2, "questid", "id");

            const string tableName2 = "quest_poi_points";

            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.quest_poi_points))
            {
                var rows = new List<QueryBuilder.SQLInsertRow>();
                foreach (var quest in Storage.QuestPOIs)
                {
                    var questPOI = quest.Value.Item1;

                    if (questPOI.Points != null) // Needed?
                        foreach (var point in questPOI.Points)
                        {
                            var row = new QueryBuilder.SQLInsertRow();

                            row.AddValue("questId", quest.Key.Item1);
                            row.AddValue("id", quest.Key.Item2);
                            row.AddValue("idx", point.Index); // Not on sniffs
                            row.AddValue("x", point.X);
                            row.AddValue("y", point.Y);
                            row.Comment = StoreGetters.GetName(StoreNameType.Quest, (int) quest.Key.Item1, false);

                            rows.Add(row);
                        }
                }

                sql += new QueryBuilder.SQLInsert(tableName2, rows, 2).Build();

            }

            return sql;
        }
Ejemplo n.º 19
0
        public static string DefenseMessage()
        {
            if (Storage.DefenseMessages.IsEmpty())
                return String.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.defense_message))
                return string.Empty;

            const string tableName = "defense_message";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var message in Storage.DefenseMessages)
            {
                foreach (var messageValue in message.Value)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    var query = new StringBuilder(string.Format("SELECT Id FROM {1}.broadcast_text WHERE MaleText='{0}' OR FemaleText='{0}';", MySqlHelper.DoubleQuoteString(messageValue.Item1.text), Settings.TDBDatabase));

                    string broadcastTextId = "";

                    if (Settings.DevMode)
                    {
                        using (var reader = SQLConnector.ExecuteQuery(query.ToString()))
                        {
                            if (reader != null)
                                while (reader.Read())
                                {
                                    var values = new object[1];
                                    var count = reader.GetValues(values);
                                    if (count != 1)
                                        break; // error in query

                                    if (!String.IsNullOrWhiteSpace(broadcastTextId))
                                        broadcastTextId += " - " + Convert.ToInt32(values[0]);
                                    else
                                        broadcastTextId += Convert.ToInt32(values[0]);
                                }
                        }

                    }

                    row.AddValue("ZoneId", message.Key);
                    row.AddValue("Id", "x", false, true);
                    row.AddValue("Text", messageValue.Item1.text);
                    if (Settings.DevMode)
                        row.AddValue("BroadcastTextId", broadcastTextId);

                    rows.Add(row);
                }
            }

            return new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build();
        }
Ejemplo n.º 20
0
        public static string NpcSpellClick()
        {
            if (Storage.NpcSpellClicks.IsEmpty())
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.npc_spellclick_spells))
            {
                return(string.Empty);
            }

            const string tableName = "npc_spellclick_spells";
            var          rows      = new List <QueryBuilder.SQLInsertRow>();

            foreach (var npcSpellClick in Storage.NpcSpellClicks)
            {
                foreach (var spellClick in Storage.SpellClicks)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    if (spellClick.Item1.CasterGUID.GetObjectType() == ObjectType.Unit && spellClick.Item1.TargetGUID.GetObjectType() == ObjectType.Unit)
                    {
                        spellClick.Item1.CastFlags = 0x0;
                    }
                    if (spellClick.Item1.CasterGUID.GetObjectType() == ObjectType.Player && spellClick.Item1.TargetGUID.GetObjectType() == ObjectType.Unit)
                    {
                        spellClick.Item1.CastFlags = 0x1;
                    }
                    if (spellClick.Item1.CasterGUID.GetObjectType() == ObjectType.Unit && spellClick.Item1.TargetGUID.GetObjectType() == ObjectType.Player)
                    {
                        spellClick.Item1.CastFlags = 0x2;
                    }
                    if (spellClick.Item1.CasterGUID.GetObjectType() == ObjectType.Player && spellClick.Item1.TargetGUID.GetObjectType() == ObjectType.Player)
                    {
                        spellClick.Item1.CastFlags = 0x3;
                    }

                    row.AddValue("npc_entry", npcSpellClick.Item1.GetEntry());
                    row.AddValue("spell_id", spellClick.Item1.SpellId);
                    row.AddValue("cast_flags", spellClick.Item1.CastFlags);
                    row.AddValue("user_type", "x", false, true);

                    var timeSpan = spellClick.Item2 - npcSpellClick.Item2;
                    if (timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1))
                    {
                        rows.Add(row);
                    }
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build());
        }
Ejemplo n.º 21
0
        public static string NpcSpellClickMop(Dictionary <WowGuid, Unit> units)
        {
            if (units.Count == 0)
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.npc_spellclick_spells))
            {
                return(string.Empty);
            }

            const string tableName = "npc_spellclick_spells";
            var          rows      = new List <QueryBuilder.SQLInsertRow>();

            foreach (var unit in units)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var npc = unit.Value;
                if (npc.InteractSpellID == null)
                {
                    continue;
                }

                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;
                    }
                }

                row.AddValue("npc_entry", unit.Key.GetEntry());
                row.AddValue("spell_id", npc.InteractSpellID);
                row.AddValue("cast_flags", "x", false, true);
                row.AddValue("user_type", "x", false, true);

                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build());
        }
Ejemplo n.º 22
0
        public static string Npc()
        {
            if (Storage.UnitTemplates.IsEmpty)
                return String.Empty;

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

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var unitTemplate in Storage.UnitTemplates)
            {
                var row = new QueryBuilder.SQLInsertRow();
                var template = unitTemplate.Value;

                row.AddValue("Id", unitTemplate.Key);
                row.AddValue("Name", template.Name);
                row.AddValue("SubName", template.SubName);
                row.AddValue("IconName", template.IconName);
                row.AddValue("TypeFlags", template.TypeFlags);
                row.AddValue("TypeFlags2", template.TypeFlags2);
                row.AddValue("Type", template.Type);
                row.AddValue("Family", template.Family);
                row.AddValue("Rank", template.Rank);
                row.AddValue("KillCredit1", template.KillCredit1);
                row.AddValue("KillCredit2", template.KillCredit2);
                row.AddValue("UnkInt", template.UnkInt);
                row.AddValue("PetSpellData", template.PetSpellData);

                for (var i = 0; i < template.DisplayIds.Length; i++)
                    row.AddValue("DisplayId" + (i + 1), template.DisplayIds[i]);

                row.AddValue("Modifier1", template.Modifier1);
                row.AddValue("Modifier2", template.Modifier2);
                row.AddValue("RacialLeader", template.RacialLeader);

                for (var i = 0; i < template.QuestItems.Length; i++)
                    row.AddValue("QuestItem" + (i + 1), template.QuestItems[i]);

                row.AddValue("MovementId", template.MovementId);
                row.AddValue("Expansion", template.Expansion);

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 23
0
        public static string Addon(Dictionary<Guid, Unit> units)
        {
            if (units.Count == 0)
                return string.Empty;

            const string tableName = "creature_template_addon";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var unit in units)
            {
                var npc = unit.Value;
                npc.LoadValuesFromUpdateFields();

                var row = new QueryBuilder.SQLInsertRow();
                row.AddValue("entry", unit.Key.GetEntry());
                row.AddValue("mount", npc.Mount);
                row.AddValue("bytes1", npc.Bytes1, true);
                row.AddValue("bytes2", npc.Bytes2, true);

                var auras = string.Empty;
                var commentAuras = string.Empty;
                if (npc.Auras != null && npc.Auras.Count() != 0)
                {
                    foreach (var aura in npc.Auras)
                    {
                        if (aura.CasterGuid.Full == 0) // usually "template auras" do not have caster
                        {
                            auras += aura.SpellId + " ";
                            commentAuras += StoreGetters.GetName(StoreNameType.Spell, (int) aura.SpellId, false) + ", ";
                        }
                    }
                    auras = auras.TrimEnd(' ');
                    commentAuras = commentAuras.TrimEnd(',', ' ');
                }
                row.AddValue("auras", auras);

                row.Comment += StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                if (!String.IsNullOrWhiteSpace(auras))
                    row.Comment += " - " + commentAuras;

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 24
0
        public static string VehicleAccessory()
        {
            if (Storage.VehicleTemplateAccessorys.IsEmpty())
            {
                return(String.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.vehicle_template_accessory))
            {
                return(string.Empty);
            }

            const string tableName = "vehicle_template_accessory";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var accessorys in Storage.VehicleTemplateAccessorys)
            {
                foreach (var accessorysValue in accessorys.Value)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    if (accessorysValue.Item1.SeatId < 0 || accessorysValue.Item1.SeatId > 7)
                    {
                        continue;
                    }

                    row.Comment  = StoreGetters.GetName(StoreNameType.Unit, (int)accessorys.Key, false) + " - ";
                    row.Comment += StoreGetters.GetName(StoreNameType.Unit, (int)accessorysValue.Item1.AccessoryEntry, false);

                    row.AddValue("entry", accessorys.Key);
                    row.AddValue("accessory_entry", accessorysValue.Item1.AccessoryEntry);
                    row.AddValue("seat_id", accessorysValue.Item1.SeatId);
                    row.AddValue("minion", "x", false, true);
                    row.AddValue("description", row.Comment);
                    row.AddValue("summontype", "x", false, true);
                    row.AddValue("summontimer", "x", false, true);

                    rows.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build());
        }
Ejemplo n.º 25
0
        public static string NpcVendor()
        {
            if (Storage.NpcVendors.IsEmpty())
            {
                return(String.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.npc_vendor))
            {
                return(string.Empty);
            }

            const string tableName = "npc_vendor";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var npcVendor in Storage.NpcVendors)
            {
                var comment = new QueryBuilder.SQLInsertRow();
                comment.HeaderComment = StoreGetters.GetName(StoreNameType.Unit, (int)npcVendor.Key);
                rows.Add(comment);
                foreach (var vendorItem in npcVendor.Value.Item1.VendorItems)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("entry", npcVendor.Key);
                    row.AddValue("item", vendorItem.ItemId);
                    row.AddValue("slot", vendorItem.Slot);
                    row.AddValue("maxcount", vendorItem.MaxCount);
                    row.AddValue("ExtendedCost", vendorItem.ExtendedCostId);

                    if (ClientVersion.AddedInVersion(ClientType.Cataclysm))
                    {
                        row.AddValue("Type", vendorItem.Type);
                    }

                    row.Comment = StoreGetters.GetName(vendorItem.Type <= 1 ? StoreNameType.Item : StoreNameType.Currency, (int)vendorItem.ItemId, false);
                    rows.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows).Build());
        }
Ejemplo n.º 26
0
        public static string CreatureMovement(Dictionary <Guid, Unit> units)
        {
            if (units.Count == 0)
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_movement))
            {
                return(string.Empty);
            }

            const string tableName = "creature_movement";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var unit in units)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var npc = unit.Value;

                row.AddValue("Id", unit.Key.GetEntry());
                row.AddValue("MovementFlags", npc.Movement.Flags, true);
                row.AddValue("MovementFlagsExtra", npc.Movement.FlagsExtra, true);
                row.AddValue("ufBytes1", npc.Bytes1, true);
                row.AddValue("ufBytes2", npc.Bytes2, true);
                row.AddValue("ufFlags", npc.UnitFlags, true);
                row.AddValue("ufFlags2", npc.UnitFlags2, true);

                row.Comment = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);

                /*
                 * row.Comment += " - MoveFlags: " + npc.Movement.Flags + " - MoveFlags2: " + npc.Movement.FlagsExtra;
                 * row.Comment += " - Bytes1: " + npc.Bytes1 + " - Bytes2: " + npc.Bytes2 + " - UnitFlags: " + npc.UnitFlags;
                 * row.Comment += " - UnitFlags2: " + npc.UnitFlags2;
                 */
                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, ignore: true, withDelete: false).Build());
        }
Ejemplo n.º 27
0
        public static string NpcText()
        {
            if (Storage.NpcTexts.IsEmpty())
                return String.Empty;

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

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var npcTextPair in Storage.NpcTexts)
            {
                var row = new QueryBuilder.SQLInsertRow();
                var npcText = npcTextPair.Value.Item1;

                row.AddValue("Id", npcTextPair.Key);

                for (var i = 0; i < npcText.Probabilities.Length; i++)
                    row.AddValue("Probability" + (i + 1), npcText.Probabilities[i]);

                for (var i = 0; i < npcText.Texts1.Length; i++)
                    row.AddValue("Text1_" + (i + 1), npcText.Texts1[i]);

                for (var i = 0; i < npcText.Texts2.Length; i++)
                    row.AddValue("Text2_" + (i + 1), npcText.Texts2[i]);

                for (var i = 0; i < npcText.Languages.Length; i++)
                    row.AddValue("Language" + (i + 1), npcText.Languages[i]);

                for (var i = 0; i < npcText.EmoteDelays[0].Length; i++)
                    for (var j = 0; j < npcText.EmoteDelays[1].Length; j++)
                        row.AddValue("EmoteDelay" + (i + 1) + "_" + (j + 1), npcText.EmoteDelays[i][j]);

                for (var i = 0; i < npcText.EmoteIds[0].Length; i++)
                    for (var j = 0; j < npcText.EmoteIds[1].Length; j++)
                        row.AddValue("EmoteId" + (i + 1) + "_" + (j + 1), npcText.EmoteDelays[i][j]);

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 28
0
        public static string ObjectNames()
        {
            if (Storage.ObjectNames.IsEmpty)
                return String.Empty;

            const string tableName = "ObjectNames";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var data in Storage.ObjectNames)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("ObjectType", data.Value.ObjectType.ToString());
                row.AddValue("Id", data.Key);
                row.AddValue("Name", data.Value.Name);

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows, 2, ignore: true, withDelete: false).Build();
        }
Ejemplo n.º 29
0
        public static string SniffData()
        {
            if (Storage.SniffData.IsEmpty())
                return String.Empty;

            const string tableName = "SniffData";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var data in Storage.SniffData)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("Build", ClientVersion.Build);
                row.AddValue("SniffName", data.Item1.FileName);
                row.AddValue("ObjectType", data.Item1.ObjectType.ToString());
                row.AddValue("Id", data.Item1.Id);
                row.AddValue("Data", data.Item1.Data);

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows, ignore: true, withDelete: false, deleteDuplicates: true).Build();
        }
Ejemplo n.º 30
0
        public static string GameObject()
        {
            if (Storage.GameObjectTemplates.IsEmpty)
                return String.Empty;

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

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var goTemplate in Storage.GameObjectTemplates)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("Id", goTemplate.Key);
                row.AddValue("Type", goTemplate.Value.Type);
                row.AddValue("DisplayId", goTemplate.Value.DisplayId);
                row.AddValue("Name", goTemplate.Value.Name);
                row.AddValue("IconName", goTemplate.Value.IconName);
                row.AddValue("CastCaption", goTemplate.Value.CastCaption);
                row.AddValue("UnkString", goTemplate.Value.UnkString);

                for (var i = 0; i < goTemplate.Value.Data.Length; i++)
                    row.AddValue("Data" + (i + 1), goTemplate.Value.Data[i]);

                row.AddValue("Size", goTemplate.Value.Size);

                for (var i = 0; i < goTemplate.Value.QuestItems.Length; i++)
                    row.AddValue("QuestItem" + (i + 1), goTemplate.Value.QuestItems[i]);

                row.AddValue("UnknownUInt", goTemplate.Value.UnknownUInt);

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 31
0
        public static string WeatherUpdates()
        {
            if (Storage.WeatherUpdates.IsEmpty())
            {
                return(String.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.weather_updates))
            {
                return(string.Empty);
            }

            const string tableName = "weather_updates";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var weatherUpdate in Storage.WeatherUpdates)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var weather = weatherUpdate.Item1;

                row.AddValue("map_id", weather.MapId);
                row.AddValue("zone_id", weather.ZoneId);
                row.AddValue("weather_state", (int)weather.State);
                row.AddValue("timestamp", weatherUpdate.Item2.HasValue ? weatherUpdate.Item2.Value.ToFormattedString() : "null");
                row.AddValue("grade", weather.Grade);
                row.AddValue("unk", weather.Unk);

                row.Comment = StoreGetters.GetName(StoreNameType.Map, (int)weather.MapId, false) +
                              " - " + weather.State + " - " + weather.Grade;
                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, ignore: true, withDelete: false).Build());
        }
Ejemplo n.º 32
0
        public static string Creature(Dictionary <WowGuid, Unit> units)
        {
            if (units.Count == 0)
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature))
            {
                return(string.Empty);
            }

            const string tableName      = "creature";
            const string addonTableName = "creature_addon";

            uint count     = 0;
            var  rows      = new List <QueryBuilder.SQLInsertRow>();
            var  addonRows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var unit in units)
            {
                var row          = new QueryBuilder.SQLInsertRow();
                var badTransport = false;

                var creature = unit.Value;

                if (Settings.AreaFilters.Length > 0)
                {
                    if (!(creature.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters)))
                    {
                        continue;
                    }
                }

                if (Settings.MapFilters.Length > 0)
                {
                    if (!(creature.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters)))
                    {
                        continue;
                    }
                }

                UpdateField uf;
                if (!creature.UpdateFields.TryGetValue(UpdateFields.GetUpdateField(ObjectField.OBJECT_FIELD_ENTRY), out uf))
                {
                    continue;   // broken entry, nothing to spawn
                }
                var entry = uf.UInt32Value;

                var movementType = 0;
                var spawnDist    = 0;

                if (creature.Movement.HasWpsOrRandMov)
                {
                    movementType = 1;
                    spawnDist    = 5;
                }


                row.AddValue("guid", "@CGUID+" + count, noQuotes: true);
                row.AddValue("id", entry);
                if (!creature.IsOnTransport())
                {
                    row.AddValue("map", creature.Map);
                }
                else
                {
                    int mapId;
                    badTransport = !GetTransportMap(creature, out mapId);
                    row.AddValue("map", mapId);
                }

                row.AddValue("spawnMask", creature.GetDefaultSpawnMask());
                row.AddValue("phaseMask", creature.PhaseMask);

                if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_3_4_15595) && creature.Phases != null)
                {
                    row.AddValue("phaseId", string.Join(" - ", creature.Phases));
                }

                if (!creature.IsOnTransport())
                {
                    row.AddValue("position_x", creature.Movement.Position.X);
                    row.AddValue("position_y", creature.Movement.Position.Y);
                    row.AddValue("position_z", creature.Movement.Position.Z);
                    row.AddValue("orientation", creature.Movement.Orientation);
                }
                else
                {
                    row.AddValue("position_x", creature.Movement.TransportOffset.X);
                    row.AddValue("position_y", creature.Movement.TransportOffset.Y);
                    row.AddValue("position_z", creature.Movement.TransportOffset.Z);
                    row.AddValue("orientation", creature.Movement.TransportOffset.O);
                }

                row.AddValue("spawntimesecs", creature.GetDefaultSpawnTime());
                row.AddValue("spawndist", spawnDist);
                row.AddValue("MovementType", movementType);

                row.Comment  = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                row.Comment += " (Area: " + StoreGetters.GetName(StoreNameType.Area, creature.Area, false) + ")";


                var auras        = string.Empty;
                var commentAuras = string.Empty;
                if (creature.Auras != null && creature.Auras.Count() != 0)
                {
                    foreach (var aura in creature.Auras)
                    {
                        if (aura == null)
                        {
                            continue;
                        }

                        // usually "template auras" do not have caster
                        if (ClientVersion.AddedInVersion(ClientType.MistsOfPandaria) ? !aura.AuraFlags.HasAnyFlag(AuraFlagMoP.NoCaster) : !aura.AuraFlags.HasAnyFlag(AuraFlag.NotCaster))
                        {
                            continue;
                        }

                        auras        += aura.SpellId + " ";
                        commentAuras += aura.SpellId.ToString() + " - " + StoreGetters.GetName(StoreNameType.Spell, (int)aura.SpellId, false) + ", ";
                    }

                    auras        = auras.TrimEnd(' ');
                    commentAuras = commentAuras.TrimEnd(',', ' ');

                    row.Comment += " (Auras: " + commentAuras + ")";
                }

                var addonRow = new QueryBuilder.SQLInsertRow();
                if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_addon))
                {
                    addonRow.AddValue("guid", "@CGUID+" + count, noQuotes: true);
                    addonRow.AddValue("mount", creature.Mount);
                    addonRow.AddValue("bytes1", creature.Bytes1, true);
                    addonRow.AddValue("bytes2", creature.Bytes2, true);
                    addonRow.AddValue("auras", auras);
                    addonRow.Comment += StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                    if (!String.IsNullOrWhiteSpace(auras))
                    {
                        addonRow.Comment += " - " + commentAuras;
                    }
                    addonRows.Add(addonRow);
                }

                if (creature.IsTemporarySpawn())
                {
                    row.CommentOut = true;
                    row.Comment   += " - !!! might be temporary spawn !!!";
                }
                else if (creature.IsOnTransport() && badTransport)
                {
                    row.CommentOut = true;
                    row.Comment   += " - !!! on transport - transport template not found !!!";
                }
                else
                {
                    ++count;
                }

                if (creature.Movement.HasWpsOrRandMov)
                {
                    row.Comment += " (possible waypoints or random movement)";
                }

                rows.Add(row);
            }

            var result = new StringBuilder();

            if (count > 0)
            {
                // delete query for GUIDs
                var delete = new QueryBuilder.SQLDelete(Tuple.Create("@CGUID+0", "@CGUID+" + --count), "guid", tableName);
                result.Append(delete.Build());
                var sql = new QueryBuilder.SQLInsert(tableName, rows, withDelete: false);
                result.Append(sql.Build());

                if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_addon))
                {
                    var addonDelete = new QueryBuilder.SQLDelete(Tuple.Create("@CGUID+0", "@CGUID+" + count), "guid", addonTableName);
                    result.Append(addonDelete.Build());
                    var addonSql = new QueryBuilder.SQLInsert(addonTableName, addonRows, withDelete: false);
                    result.Append(addonSql.Build());
                }
            }

            return(result.ToString());
        }
Ejemplo n.º 33
0
        public static string CreatureText()
        {
            if (Storage.CreatureTexts.IsEmpty())
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_text))
            {
                return(string.Empty);
            }

            // For each sound and emote, if the time they were send is in the +1/-1 seconds range of
            // our texts, add that sound and emote to our Storage.CreatureTexts

            foreach (var text in Storage.CreatureTexts)
            {
                // For each text
                foreach (var textValue in text.Value)
                {
                    // For each emote
                    foreach (var emote in Storage.Emotes)
                    {
                        // Emote packets always have a sender (guid);
                        // skip this one if it was sent by a different creature
                        if (emote.Key.GetEntry() != text.Key)
                        {
                            continue;
                        }

                        foreach (var emoteValue in emote.Value)
                        {
                            var timeSpan = textValue.Item2 - emoteValue.Item2;
                            if (timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1))
                            {
                                textValue.Item1.Emote = emoteValue.Item1;
                            }
                        }
                    }

                    // For each sound
                    foreach (var sound in Storage.Sounds)
                    {
                        var timeSpan = textValue.Item2 - sound.Item2;
                        if (timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1))
                        {
                            textValue.Item1.Sound = sound.Item1;
                        }
                    }
                }
            }

            /* can't use compare DB without knowing values of groupid or id
             * var entries = Storage.CreatureTexts.Keys.ToList();
             * var creatureTextDb = SQLDatabase.GetDict<uint, CreatureText>(entries);
             */

            const string tableName = "creature_text";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var text in Storage.CreatureTexts)
            {
                foreach (var textValue in text.Value)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("entry", text.Key);
                    row.AddValue("groupid", "x", false, true);
                    row.AddValue("id", "x", false, true);
                    row.AddValue("text", textValue.Item1.Text);
                    row.AddValue("type", textValue.Item1.Type);
                    row.AddValue("language", textValue.Item1.Language);
                    row.AddValue("probability", 100.0);
                    row.AddValue("emote", textValue.Item1.Emote);
                    row.AddValue("duration", 0);
                    row.AddValue("sound", textValue.Item1.Sound);
                    row.AddValue("comment", textValue.Item1.Comment);

                    rows.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build());
        }
Ejemplo n.º 34
0
        public static string Gossip()
        {
            // TODO: This should be rewritten

            if (Storage.Gossips.IsEmpty())
            {
                return(string.Empty);
            }

            var result = "";

            // `gossip`
            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gossip_menu))
            {
                if (SQLConnector.Enabled)
                {
                    var query =
                        new StringBuilder(string.Format("SELECT `entry`,`text_id` FROM {0}.`gossip_menu` WHERE ",
                                                        Settings.TDBDatabase));
                    foreach (Tuple <uint, uint> gossip in Storage.Gossips.Keys())
                    {
                        query.Append("(`entry`=").Append(gossip.Item1).Append(" AND ");
                        query.Append("`text_id`=").Append(gossip.Item2).Append(") OR ");
                    }
                    query.Remove(query.Length - 4, 4).Append(";");

                    var rows = new List <QueryBuilder.SQLInsertRow>();
                    using (var reader = SQLConnector.ExecuteQuery(query.ToString()))
                    {
                        if (reader != null)
                        {
                            while (reader.Read())
                            {
                                var values = new object[2];
                                var count  = reader.GetValues(values);
                                if (count != 2)
                                {
                                    break; // error in query
                                }
                                var entry  = Convert.ToUInt32(values[0]);
                                var textId = Convert.ToUInt32(values[1]);

                                // our table is small, 2 fields and both are PKs; no need for updates
                                if (!Storage.Gossips.ContainsKey(Tuple.Create(entry, textId)))
                                {
                                    var row = new QueryBuilder.SQLInsertRow();
                                    row.AddValue("entry", entry);
                                    row.AddValue("text_id", textId);
                                    row.Comment = StoreGetters.GetName(StoreNameType.Unit,
                                                                       // BUG: GOs can send gossips too
                                                                       (int)entry, false);
                                    rows.Add(row);
                                }
                            }
                        }
                    }
                    result += new QueryBuilder.SQLInsert("gossip_menu", rows, 2).Build();
                }
                else
                {
                    var rows = new List <QueryBuilder.SQLInsertRow>();
                    foreach (var gossip in Storage.Gossips)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("entry", gossip.Key.Item1);
                        row.AddValue("text_id", gossip.Key.Item2);
                        row.Comment = StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.Item1.ObjectType),
                                                           (int)gossip.Value.Item1.ObjectEntry, false);

                        rows.Add(row);
                    }

                    result += new QueryBuilder.SQLInsert("gossip_menu", rows, 2).Build();
                }
            }

            // `gossip_menu_option`
            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gossip_menu_option))
            {
                if (SQLConnector.Enabled)
                {
                    var rowsIns = new List <QueryBuilder.SQLInsertRow>();
                    var rowsUpd = new List <QueryBuilder.SQLUpdateRow>();

                    foreach (var gossip in Storage.Gossips)
                    {
                        if (gossip.Value.Item1.GossipOptions == null)
                        {
                            continue;
                        }
                        foreach (var gossipOption in gossip.Value.Item1.GossipOptions)
                        {
                            var query = //         0     1       2         3         4        5         6
                                        string.Format(
                                "SELECT menu_id,id,option_icon,box_coded,box_money,box_text,option_text " +
                                "FROM {2}.gossip_menu_option WHERE menu_id={0} AND id={1};", gossip.Key.Item1,
                                gossipOption.Index, Settings.TDBDatabase);
                            using (var reader = SQLConnector.ExecuteQuery(query))
                            {
                                if (reader.HasRows) // possible update
                                {
                                    while (reader.Read())
                                    {
                                        var row = new QueryBuilder.SQLUpdateRow();

                                        if (!Utilities.EqualValues(reader.GetValue(2), gossipOption.OptionIcon))
                                        {
                                            row.AddValue("option_icon", gossipOption.OptionIcon);
                                        }

                                        if (!Utilities.EqualValues(reader.GetValue(3), gossipOption.Box))
                                        {
                                            row.AddValue("box_coded", gossipOption.Box);
                                        }

                                        if (!Utilities.EqualValues(reader.GetValue(4), gossipOption.RequiredMoney))
                                        {
                                            row.AddValue("box_money", gossipOption.RequiredMoney);
                                        }

                                        if (!Utilities.EqualValues(reader.GetValue(5), gossipOption.BoxText))
                                        {
                                            row.AddValue("box_text", gossipOption.BoxText);
                                        }

                                        if (!Utilities.EqualValues(reader.GetValue(6), gossipOption.OptionText))
                                        {
                                            row.AddValue("option_text", gossipOption.OptionText);
                                        }

                                        row.AddWhere("menu_id", gossip.Key.Item1);
                                        row.AddWhere("id", gossipOption.Index);

                                        row.Comment =
                                            StoreGetters.GetName(
                                                Utilities.ObjectTypeToStore(gossip.Value.Item1.ObjectType),
                                                (int)gossip.Value.Item1.ObjectEntry, false);

                                        row.Table = "gossip_menu_option";

                                        if (row.ValueCount != 0)
                                        {
                                            rowsUpd.Add(row);
                                        }
                                    }
                                }
                                else // insert
                                {
                                    var row = new QueryBuilder.SQLInsertRow();

                                    row.AddValue("menu_id", gossip.Key.Item1);
                                    row.AddValue("id", gossipOption.Index);
                                    row.AddValue("option_icon", gossipOption.OptionIcon);
                                    row.AddValue("option_text", gossipOption.OptionText);
                                    row.AddValue("box_coded", gossipOption.Box);
                                    row.AddValue("box_money", gossipOption.RequiredMoney);
                                    row.AddValue("box_text", gossipOption.BoxText);

                                    row.Comment =
                                        StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.Item1.ObjectType),
                                                             (int)gossip.Value.Item1.ObjectEntry, false);

                                    rowsIns.Add(row);
                                }
                            }
                        }
                    }
                    result += new QueryBuilder.SQLInsert("gossip_menu_option", rowsIns, 2).Build() +
                              new QueryBuilder.SQLUpdate(rowsUpd).Build();
                }
                else
                {
                    var rows = new List <QueryBuilder.SQLInsertRow>();
                    foreach (var gossip in Storage.Gossips)
                    {
                        if (gossip.Value.Item1.GossipOptions != null)
                        {
                            foreach (var gossipOption in gossip.Value.Item1.GossipOptions)
                            {
                                var row = new QueryBuilder.SQLInsertRow();

                                row.AddValue("menu_id", gossip.Key.Item1);
                                row.AddValue("id", gossipOption.Index);
                                row.AddValue("option_icon", gossipOption.OptionIcon);
                                row.AddValue("option_text", gossipOption.OptionText);
                                row.AddValue("box_coded", gossipOption.Box);
                                row.AddValue("box_money", gossipOption.RequiredMoney);
                                row.AddValue("box_text", gossipOption.BoxText);

                                row.Comment =
                                    StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.Item1.ObjectType),
                                                         (int)gossip.Value.Item1.ObjectEntry, false);

                                rows.Add(row);
                            }
                        }
                    }

                    result += new QueryBuilder.SQLInsert("gossip_menu_option", rows, 2).Build();
                }
            }

            return(result);
        }
Ejemplo n.º 35
0
        public static string Quest()
        {
            if (Storage.QuestTemplates.IsEmpty)
            {
                return(String.Empty);
            }

            const string tableName = "quest_template";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var quest in Storage.QuestTemplates)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("entry", quest.Key);
                row.AddValue("Method", quest.Value.Method);
                row.AddValue("QuestLevel", quest.Value.Level);
                row.AddValue("MinLevel", quest.Value.MinLevel);
                row.AddValue("ZoneOrSort", quest.Value.ZoneOrSort);
                row.AddValue("Type", quest.Value.Type);
                row.AddValue("SuggestedPlayers", quest.Value.SuggestedPlayers);

                for (var i = 0; i < quest.Value.RequiredFactionId.Length; i++)
                {
                    row.AddValue("RequiredFactionId" + (i + 1), quest.Value.RequiredFactionId[i]);
                }

                for (var i = 0; i < quest.Value.RequiredFactionId.Length; i++)
                {
                    row.AddValue("RequiredFactionValue" + (i + 1), quest.Value.RequiredFactionValue[i]);
                }

                row.AddValue("NextQuestIdChain", quest.Value.NextQuestIdChain);
                row.AddValue("RewardXPId", quest.Value.RewardXPId);
                row.AddValue("RewardOrRequiredMoney", quest.Value.RewardOrRequiredMoney);
                row.AddValue("RewardMoneyMaxLevel", quest.Value.RewardMoneyMaxLevel);
                row.AddValue("RewardSpell", quest.Value.RewardSpell);
                row.AddValue("RewardSpellCast", quest.Value.RewardSpellCast);
                row.AddValue("RewardHonor", quest.Value.RewardHonor);
                row.AddValue("RewardHonorMultiplier", quest.Value.RewardHonorMultiplier);
                row.AddValue("SourceItemId", quest.Value.SourceItemId);
                row.AddValue("Flags", quest.Value.Flags, true);
                row.AddValue("MinimapTargetMark", quest.Value.MinimapTargetMark);
                row.AddValue("RewardTitleId", quest.Value.RewardTitleId);
                row.AddValue("RequiredPlayerKills", quest.Value.RequiredPlayerKills);
                row.AddValue("RewardTalents", quest.Value.RewardTalents);
                row.AddValue("RewardArenaPoints", quest.Value.RewardArenaPoints);
                row.AddValue("RewardSkillId", quest.Value.RewardSkillId);
                row.AddValue("RewardSkillPoints", quest.Value.RewardSkillPoints);
                row.AddValue("RewardReputationMask", quest.Value.RewardReputationMask);
                row.AddValue("QuestGiverPortrait", quest.Value.QuestGiverPortrait);
                row.AddValue("QuestTurnInPortrait", quest.Value.QuestTurnInPortrait);

                for (var i = 0; i < quest.Value.RewardItemId.Length; i++)
                {
                    row.AddValue("RewardItemId" + (i + 1), quest.Value.RewardItemId[i]);
                }

                for (var i = 0; i < quest.Value.RewardItemCount.Length; i++)
                {
                    row.AddValue("RewardItemCount" + (i + 1), quest.Value.RewardItemCount[i]);
                }

                for (var i = 0; i < quest.Value.RewardChoiceItemId.Length; i++)
                {
                    row.AddValue("RewardChoiceItemId" + (i + 1), quest.Value.RewardChoiceItemId[i]);
                }

                for (var i = 0; i < quest.Value.RewardChoiceItemCount.Length; i++)
                {
                    row.AddValue("RewardChoiceItemCount" + (i + 1), quest.Value.RewardChoiceItemCount[i]);
                }

                for (var i = 0; i < quest.Value.RewardFactionId.Length; i++)
                {
                    row.AddValue("RewardFactionId" + (i + 1), quest.Value.RewardFactionId[i]);
                }

                for (var i = 0; i < quest.Value.RewardFactionValueId.Length; i++)
                {
                    row.AddValue("RewardFactionValueId" + (i + 1), quest.Value.RewardFactionValueId[i]);
                }

                for (var i = 0; i < quest.Value.RewardFactionValueIdOverride.Length; i++)
                {
                    row.AddValue("RewardFactionValueIdOverride" + (i + 1), quest.Value.RewardFactionValueIdOverride[i]);
                }

                row.AddValue("PointMapId", quest.Value.PointMapId);
                row.AddValue("PointX", quest.Value.PointX);
                row.AddValue("PointY", quest.Value.PointY);
                row.AddValue("PointOption", quest.Value.PointOption);
                row.AddValue("Title", quest.Value.Title);
                row.AddValue("Objectives", quest.Value.Objectives);
                row.AddValue("Details", quest.Value.Details);
                row.AddValue("EndText", quest.Value.EndText);
                row.AddValue("CompletedText", quest.Value.CompletedText);

                for (var i = 0; i < quest.Value.RequiredNpcOrGo.Length; i++)
                {
                    row.AddValue("RequiredNpcOrGo" + (i + 1), quest.Value.RequiredNpcOrGo[i]);
                }

                for (var i = 0; i < quest.Value.RequiredNpcOrGoCount.Length; i++)
                {
                    row.AddValue("RequiredNpcOrGoCount" + (i + 1), quest.Value.RequiredNpcOrGoCount[i]);
                }

                for (var i = 0; i < quest.Value.RequiredSourceItemId.Length; i++)
                {
                    row.AddValue("RequiredSourceItemId" + (i + 1), quest.Value.RequiredSourceItemId[i]);
                }

                for (var i = 0; i < quest.Value.RequiredSourceItemCount.Length; i++)
                {
                    row.AddValue("RequiredSourceItemCount" + (i + 1), quest.Value.RequiredSourceItemCount[i]);
                }

                for (var i = 0; i < quest.Value.RequiredItemId.Length; i++)
                {
                    row.AddValue("RequiredItemId" + (i + 1), quest.Value.RequiredItemId[i]);
                }

                for (var i = 0; i < quest.Value.RequiredItemCount.Length; i++)
                {
                    row.AddValue("RequiredItemCount" + (i + 1), quest.Value.RequiredItemCount[i]);
                }

                row.AddValue("RequiredSpell", quest.Value.RequiredSpell);

                for (var i = 0; i < quest.Value.ObjectiveText.Length; i++)
                {
                    row.AddValue("ObjectiveText" + (i + 1), quest.Value.ObjectiveText[i]);
                }

                for (var i = 0; i < quest.Value.RewardCurrencyId.Length; i++)
                {
                    row.AddValue("RewardCurrencyId" + (i + 1), quest.Value.RewardCurrencyId[i]);
                }

                for (var i = 0; i < quest.Value.RewardCurrencyCount.Length; i++)
                {
                    row.AddValue("RewardCurrencyCount" + (i + 1), quest.Value.RewardCurrencyCount[i]);
                }

                for (var i = 0; i < quest.Value.RequiredCurrencyId.Length; i++)
                {
                    row.AddValue("RequiredCurrencyId" + (i + 1), quest.Value.RequiredCurrencyId[i]);
                }

                for (var i = 0; i < quest.Value.RequiredCurrencyCount.Length; i++)
                {
                    row.AddValue("RequiredCurrencyCount" + (i + 1), quest.Value.RequiredCurrencyCount[i]);
                }

                row.AddValue("QuestGiverTextWindow", quest.Value.QuestGiverTextWindow);
                row.AddValue("QuestGiverTargetName", quest.Value.QuestGiverTargetName);
                row.AddValue("QuestTurnTextWindow", quest.Value.QuestTurnTextWindow);
                row.AddValue("QuestTurnTargetName", quest.Value.QuestTurnTargetName);
                row.AddValue("SoundAccept", quest.Value.SoundAccept);
                row.AddValue("SoundTurnIn", quest.Value.SoundTurnIn);

                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows).Build());
        }
Ejemplo n.º 36
0
        public static string CreatureMovement(Dictionary<Guid, Unit> units)
        {
            if (units.Count == 0)
                return string.Empty;

            const string tableName = "creature_movement";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var unit in units)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var npc = unit.Value;
                npc.LoadValuesFromUpdateFields();

                row.AddValue("Id", unit.Key.GetEntry());
                row.AddValue("MovementFlags", npc.Movement.Flags, true);
                row.AddValue("MovementFlagsExtra", npc.Movement.FlagsExtra, true);
                row.AddValue("ufBytes1", npc.Bytes1, true);
                row.AddValue("ufBytes2", npc.Bytes2, true);
                row.AddValue("ufFlags", npc.UnitFlags, true);
                row.AddValue("ufFlags2", npc.UnitFlags2, true);

                row.Comment = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                /*
                row.Comment += " - MoveFlags: " + npc.Movement.Flags + " - MoveFlags2: " + npc.Movement.FlagsExtra;
                row.Comment += " - Bytes1: " + npc.Bytes1 + " - Bytes2: " + npc.Bytes2 + " - UnitFlags: " + npc.UnitFlags;
                row.Comment += " - UnitFlags2: " + npc.UnitFlags2;
                 */
                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows, ignore: true, withDelete: false).Build();
        }
Ejemplo n.º 37
0
        public static string Addon(Dictionary <WowGuid, Unit> units)
        {
            if (units.Count == 0)
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_template_addon))
            {
                return(string.Empty);
            }

            const string tableName = "creature_template_addon";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var unit in units)
            {
                var npc = unit.Value;

                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;
                    }
                }

                var row = new QueryBuilder.SQLInsertRow();
                row.AddValue("entry", unit.Key.GetEntry());
                row.AddValue("mount", npc.Mount);
                row.AddValue("bytes1", npc.Bytes1, true);
                row.AddValue("bytes2", npc.Bytes2, true);

                var auras        = string.Empty;
                var commentAuras = string.Empty;
                if (npc.Auras != null && npc.Auras.Count() != 0)
                {
                    foreach (var aura in npc.Auras)
                    {
                        if (aura == null)
                        {
                            continue;
                        }

                        // usually "template auras" do not have caster
                        if (ClientVersion.AddedInVersion(ClientType.MistsOfPandaria) ? !aura.AuraFlags.HasAnyFlag(AuraFlagMoP.NoCaster) : !aura.AuraFlags.HasAnyFlag(AuraFlag.NotCaster))
                        {
                            continue;
                        }

                        auras        += aura.SpellId + " ";
                        commentAuras += StoreGetters.GetName(StoreNameType.Spell, (int)aura.SpellId, false) + ", ";
                    }
                    auras        = auras.TrimEnd(' ');
                    commentAuras = commentAuras.TrimEnd(',', ' ');
                }
                row.AddValue("auras", auras);

                row.Comment += StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                if (!String.IsNullOrWhiteSpace(auras))
                {
                    row.Comment += " - " + commentAuras;
                }

                rows.Add(row);
            }

            return(new QueryBuilder.SQLInsert(tableName, rows).Build());
        }
Ejemplo n.º 38
0
        public static string Gossip()
        {
            // TODO: This should be rewritten

            if (Storage.Gossips.IsEmpty())
                return string.Empty;

            var result = "";

            // `gossip`
            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gossip_menu))
            {
                if (SQLConnector.Enabled)
                {
                    var query =
                        new StringBuilder(string.Format("SELECT `entry`,`text_id` FROM {0}.`gossip_menu` WHERE ",
                                                        Settings.TDBDatabase));
                    foreach (Tuple<uint, uint> gossip in Storage.Gossips.Keys())
                    {
                        query.Append("(`entry`=").Append(gossip.Item1).Append(" AND ");
                        query.Append("`text_id`=").Append(gossip.Item2).Append(") OR ");
                    }
                    query.Remove(query.Length - 4, 4).Append(";");

                    var rows = new List<QueryBuilder.SQLInsertRow>();
                    using (var reader = SQLConnector.ExecuteQuery(query.ToString()))
                    {
                        if (reader != null)
                            while (reader.Read())
                            {
                                var values = new object[2];
                                var count = reader.GetValues(values);
                                if (count != 2)
                                    break; // error in query

                                var entry = Convert.ToUInt32(values[0]);
                                var textId = Convert.ToUInt32(values[1]);

                                // our table is small, 2 fields and both are PKs; no need for updates
                                if (!Storage.Gossips.ContainsKey(Tuple.Create(entry, textId)))
                                {
                                    var row = new QueryBuilder.SQLInsertRow();
                                    row.AddValue("entry", entry);
                                    row.AddValue("text_id", textId);
                                    row.Comment = StoreGetters.GetName(StoreNameType.Unit,
                                                                       // BUG: GOs can send gossips too
                                                                       (int) entry, false);
                                    rows.Add(row);
                                }
                            }
                    }
                    result += new QueryBuilder.SQLInsert("gossip_menu", rows, 2).Build();
                }
                else
                {
                    var rows = new List<QueryBuilder.SQLInsertRow>();
                    foreach (var gossip in Storage.Gossips)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("entry", gossip.Key.Item1);
                        row.AddValue("text_id", gossip.Key.Item2);
                        row.Comment = StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.Item1.ObjectType),
                                                           (int) gossip.Value.Item1.ObjectEntry, false);

                        rows.Add(row);
                    }

                    result += new QueryBuilder.SQLInsert("gossip_menu", rows, 2).Build();
                }
            }

            // `gossip_menu_option`
            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gossip_menu_option))
            {
                if (SQLConnector.Enabled)
                {
                    var rowsIns = new List<QueryBuilder.SQLInsertRow>();
                    var rowsUpd = new List<QueryBuilder.SQLUpdateRow>();

                    foreach (var gossip in Storage.Gossips)
                    {
                        if (gossip.Value.Item1.GossipOptions == null)
                            continue;

                        foreach (var gossipOption in gossip.Value.Item1.GossipOptions)
                        {
                            var query = //         0     1       2         3         4        5         6
                                string.Format(
                                    "SELECT menu_id,id,option_icon,box_coded,box_money,box_text,option_text " +
                                    "FROM {2}.gossip_menu_option WHERE menu_id={0} AND id={1};", gossip.Key.Item1,
                                    gossipOption.Index, Settings.TDBDatabase);

                            using (var reader = SQLConnector.ExecuteQuery(query))
                            {
                                if (reader.HasRows) // possible update
                                {
                                    while (reader.Read())
                                    {
                                        var row = new QueryBuilder.SQLUpdateRow();

                                        if (!Utilities.EqualValues(reader.GetValue(2), gossipOption.OptionIcon))
                                            row.AddValue("option_icon", gossipOption.OptionIcon);

                                        if (!Utilities.EqualValues(reader.GetValue(3), gossipOption.Box))
                                            row.AddValue("box_coded", gossipOption.Box);

                                        if (!Utilities.EqualValues(reader.GetValue(4), gossipOption.RequiredMoney))
                                            row.AddValue("box_money", gossipOption.RequiredMoney);

                                        if (!Utilities.EqualValues(reader.GetValue(5), gossipOption.BoxText))
                                            row.AddValue("box_text", gossipOption.BoxText);

                                        if (!Utilities.EqualValues(reader.GetValue(6), gossipOption.OptionText))
                                            row.AddValue("option_text", gossipOption.OptionText);

                                        row.AddWhere("menu_id", gossip.Key.Item1);
                                        row.AddWhere("id", gossipOption.Index);

                                        row.Comment =
                                            StoreGetters.GetName(
                                                Utilities.ObjectTypeToStore(gossip.Value.Item1.ObjectType),
                                                (int) gossip.Value.Item1.ObjectEntry, false);

                                        row.Table = "gossip_menu_option";

                                        if (row.ValueCount != 0)
                                            rowsUpd.Add(row);
                                    }
                                }
                                else // insert
                                {
                                    var row = new QueryBuilder.SQLInsertRow();

                                    row.AddValue("menu_id", gossip.Key.Item1);
                                    row.AddValue("id", gossipOption.Index);
                                    row.AddValue("option_icon", gossipOption.OptionIcon);
                                    row.AddValue("option_text", gossipOption.OptionText);
                                    row.AddValue("box_coded", gossipOption.Box);
                                    row.AddValue("box_money", gossipOption.RequiredMoney);
                                    row.AddValue("box_text", gossipOption.BoxText);

                                    row.Comment =
                                        StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.Item1.ObjectType),
                                                             (int) gossip.Value.Item1.ObjectEntry, false);

                                    rowsIns.Add(row);
                                }
                            }
                        }
                    }
                    result += new QueryBuilder.SQLInsert("gossip_menu_option", rowsIns, 2).Build() +
                              new QueryBuilder.SQLUpdate(rowsUpd).Build();
                }
                else
                {
                    var rows = new List<QueryBuilder.SQLInsertRow>();
                    foreach (var gossip in Storage.Gossips)
                    {
                        if (gossip.Value.Item1.GossipOptions != null)
                            foreach (var gossipOption in gossip.Value.Item1.GossipOptions)
                            {
                                var row = new QueryBuilder.SQLInsertRow();

                                row.AddValue("menu_id", gossip.Key.Item1);
                                row.AddValue("id", gossipOption.Index);
                                row.AddValue("option_icon", gossipOption.OptionIcon);
                                row.AddValue("option_text", gossipOption.OptionText);
                                row.AddValue("box_coded", gossipOption.Box);
                                row.AddValue("box_money", gossipOption.RequiredMoney);
                                row.AddValue("box_text", gossipOption.BoxText);

                                row.Comment =
                                    StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.Item1.ObjectType),
                                                         (int) gossip.Value.Item1.ObjectEntry, false);

                                rows.Add(row);
                            }
                    }

                    result += new QueryBuilder.SQLInsert("gossip_menu_option", rows, 2).Build();
                }
            }

            return result;
        }
Ejemplo n.º 39
0
        public static string NpcSpellClick()
        {
            if (Storage.NpcSpellClicks.IsEmpty())
                return string.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.npc_spellclick_spells))
                return string.Empty;

            const string tableName = "npc_spellclick_spells";
            var rows = new List<QueryBuilder.SQLInsertRow>();

            foreach (var npcSpellClick in Storage.NpcSpellClicks)
            {
                foreach (var spellClick in Storage.SpellClicks)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    if (spellClick.Item1.CasterGUID.GetObjectType() == ObjectType.Unit && spellClick.Item1.TargetGUID.GetObjectType() == ObjectType.Unit)
                        spellClick.Item1.CastFlags = 0x0;
                    if (spellClick.Item1.CasterGUID.GetObjectType() == ObjectType.Player && spellClick.Item1.TargetGUID.GetObjectType() == ObjectType.Unit)
                        spellClick.Item1.CastFlags = 0x1;
                    if (spellClick.Item1.CasterGUID.GetObjectType() == ObjectType.Unit && spellClick.Item1.TargetGUID.GetObjectType() == ObjectType.Player)
                        spellClick.Item1.CastFlags = 0x2;
                    if (spellClick.Item1.CasterGUID.GetObjectType() == ObjectType.Player && spellClick.Item1.TargetGUID.GetObjectType() == ObjectType.Player)
                        spellClick.Item1.CastFlags = 0x3;

                    row.AddValue("npc_entry", npcSpellClick.Item1.GetEntry());
                    row.AddValue("spell_id", spellClick.Item1.SpellId);
                    row.AddValue("cast_flags", spellClick.Item1.CastFlags);
                    row.AddValue("user_type", "x", false, true);

                    var timeSpan = spellClick.Item2 - npcSpellClick.Item2;
                    if (timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1))
                        rows.Add(row);
                }
            }

            return new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build();
        }
Ejemplo n.º 40
0
        public static string NpcSpellClickMop(Dictionary<WowGuid, Unit> units)
        {
            if (units.Count == 0)
                return string.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.npc_spellclick_spells))
                return string.Empty;

            const string tableName = "npc_spellclick_spells";
            var rows = new List<QueryBuilder.SQLInsertRow>();

            foreach (var unit in units)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var npc = unit.Value;
                if (npc.InteractSpellID == null)
                    continue;

                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;

                row.AddValue("npc_entry", unit.Key.GetEntry());
                row.AddValue("spell_id", npc.InteractSpellID);
                row.AddValue("cast_flags", "x", false, true);
                row.AddValue("user_type", "x", false, true);

                rows.Add(row);
            }

            return new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build();
        }
Ejemplo n.º 41
0
        public static string StartInformation()
        {
            var result = String.Empty;

            if (!Storage.StartActions.IsEmpty)
            {
                var rows = new List<QueryBuilder.SQLInsertRow>();
                foreach (var startActions in Storage.StartActions)
                {
                    var comment = new QueryBuilder.SQLInsertRow();
                    comment.HeaderComment = startActions.Key.Item1 + " - " + startActions.Key.Item2;
                    rows.Add(comment);

                    foreach (var action in startActions.Value.Actions)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("race", startActions.Key.Item1);
                        row.AddValue("class", startActions.Key.Item2);
                        row.AddValue("button", action.Button);
                        row.AddValue("action", action.Id);
                        row.AddValue("type", action.Type);
                        if (action.Type == ActionButtonType.Spell)
                            row.Comment = StoreGetters.GetName(StoreNameType.Spell, (int)action.Id, false);
                        if (action.Type == ActionButtonType.Item)
                            row.Comment = StoreGetters.GetName(StoreNameType.Item, (int)action.Id, false);

                        rows.Add(row);
                    }
                }

                result = new QueryBuilder.SQLInsert("playercreateinfo_action", rows, 2).Build();
            }

            if (!Storage.StartPositions.IsEmpty)
            {
                var rows = new List<QueryBuilder.SQLInsertRow>();
                foreach (var startPosition in Storage.StartPositions)
                {
                    var comment = new QueryBuilder.SQLInsertRow();
                    comment.HeaderComment = startPosition.Key.Item1 + " - " + startPosition.Key.Item2;
                    rows.Add(comment);

                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("race", startPosition.Key.Item1);
                    row.AddValue("class", startPosition.Key.Item2);
                    row.AddValue("map", startPosition.Value.Map);
                    row.AddValue("zone", startPosition.Value.Zone);
                    row.AddValue("position_x", startPosition.Value.Position.X);
                    row.AddValue("position_y", startPosition.Value.Position.Y);
                    row.AddValue("position_z", startPosition.Value.Position.Z);

                    row.Comment = StoreGetters.GetName(StoreNameType.Map, startPosition.Value.Map, false) + " - " +
                                  StoreGetters.GetName(StoreNameType.Zone, startPosition.Value.Zone, false);

                    rows.Add(row);
                }

                result += new QueryBuilder.SQLInsert("playercreateinfo", rows, 2).Build();
            }

            if (!Storage.StartSpells.IsEmpty)
            {
                var rows = new List<QueryBuilder.SQLInsertRow>();
                foreach (var startSpells in Storage.StartSpells)
                {
                    var comment = new QueryBuilder.SQLInsertRow();
                    comment.HeaderComment = startSpells.Key.Item1 + " - " + startSpells.Key.Item2;
                    rows.Add(comment);

                    foreach (var spell in startSpells.Value.Spells)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("race", startSpells.Key.Item1);
                        row.AddValue("class", startSpells.Key.Item2);
                        row.AddValue("Spell", spell);
                        row.AddValue("Note", StoreGetters.GetName(StoreNameType.Spell, (int)spell, false));

                        rows.Add(row);
                    }
                }

                result = new QueryBuilder.SQLInsert("playercreateinfo_spell", rows, 2).Build();
            }

            return result;
        }
Ejemplo n.º 42
0
        public static string NpcTrainer()
        {
            if (Storage.NpcTrainers.IsEmpty())
                return String.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.npc_trainer))
                return string.Empty;

            const string tableName = "npc_trainer";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var npcTrainer in Storage.NpcTrainers)
            {
                var comment = new QueryBuilder.SQLInsertRow
                {
                    HeaderComment = StoreGetters.GetName(StoreNameType.Unit, (int) npcTrainer.Key, false)
                };
                rows.Add(comment);
                foreach (var trainerSpell in npcTrainer.Value.Item1.TrainerSpells)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("ID", npcTrainer.Key);
                    row.AddValue("SpellID", trainerSpell.Spell);
                    row.AddValue("MoneyCost", trainerSpell.Cost);
                    row.AddValue("ReqSkillLine", trainerSpell.RequiredSkill);
                    row.AddValue("ReqSkillRank", trainerSpell.RequiredSkillLevel);
                    row.AddValue("ReqLevel", trainerSpell.RequiredLevel);
                    row.Comment = StoreGetters.GetName(StoreNameType.Spell, (int)trainerSpell.Spell, false);
                    rows.Add(row);
                }
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 43
0
        public static string NpcVendor()
        {
            if (Storage.NpcVendors.IsEmpty())
                return String.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.npc_vendor))
                return string.Empty;

            const string tableName = "npc_vendor";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var npcVendor in Storage.NpcVendors)
            {
                var comment = new QueryBuilder.SQLInsertRow
                {
                    HeaderComment = StoreGetters.GetName(StoreNameType.Unit, (int) npcVendor.Key)
                };
                rows.Add(comment);
                foreach (var vendorItem in npcVendor.Value.Item1.VendorItems)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("entry", npcVendor.Key);
                    row.AddValue("slot", vendorItem.Slot);
                    row.AddValue("item", vendorItem.ItemId);
                    row.AddValue("maxcount", vendorItem.MaxCount);
                    row.AddValue("ExtendedCost", vendorItem.ExtendedCostId);

                    /*if (ClientVersion.AddedInVersion(ClientType.Cataclysm))
                        row.AddValue("Type", vendorItem.Type);

                    if (ClientVersion.AddedInVersion(ClientType.MistsOfPandaria))
                    {
                        row.AddValue("PlayerConditionID", vendorItem.PlayerConditionID);
                        row.AddValue("IgnoreFiltering", vendorItem.IgnoreFiltering);
                    }*/

                    row.AddValue("VerifiedBuild", vendorItem.VerifiedBuild);

                    row.Comment = StoreGetters.GetName(vendorItem.Type <= 1 ? StoreNameType.Item : StoreNameType.Currency, (int)vendorItem.ItemId, false);
                    rows.Add(row);
                }
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 44
0
        public static string DefenseMessage()
        {
            if (Storage.DefenseMessages.IsEmpty())
            {
                return(String.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.defense_message))
            {
                return(string.Empty);
            }

            const string tableName = "defense_message";

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var message in Storage.DefenseMessages)
            {
                foreach (var messageValue in message.Value)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    var query = new StringBuilder(string.Format("SELECT Id FROM {1}.broadcast_text WHERE MaleText='{0}' OR FemaleText='{0}';", MySqlHelper.DoubleQuoteString(messageValue.Item1.text), Settings.TDBDatabase));

                    string broadcastTextId = "";

                    if (Settings.DevMode)
                    {
                        using (var reader = SQLConnector.ExecuteQuery(query.ToString()))
                        {
                            if (reader != null)
                            {
                                while (reader.Read())
                                {
                                    var values = new object[1];
                                    var count  = reader.GetValues(values);
                                    if (count != 1)
                                    {
                                        break; // error in query
                                    }
                                    if (!String.IsNullOrWhiteSpace(broadcastTextId))
                                    {
                                        broadcastTextId += " - " + Convert.ToInt32(values[0]);
                                    }
                                    else
                                    {
                                        broadcastTextId += Convert.ToInt32(values[0]);
                                    }
                                }
                            }
                        }
                    }

                    row.AddValue("ZoneId", message.Key);
                    row.AddValue("Id", "x", false, true);
                    row.AddValue("Text", messageValue.Item1.text);
                    if (Settings.DevMode)
                    {
                        row.AddValue("BroadcastTextId", broadcastTextId);
                    }

                    rows.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build());
        }
Ejemplo n.º 45
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 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();
        }
Ejemplo n.º 46
0
        public static string CreatureText()
        {
            if (Storage.CreatureTexts.IsEmpty())
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_text))
            {
                return(string.Empty);
            }

            // For each sound and emote, if the time they were send is in the +1/-1 seconds range of
            // our texts, add that sound and emote to our Storage.CreatureTexts

            foreach (var text in Storage.CreatureTexts)
            {
                // For each text
                foreach (var textValue in text.Value)
                {
                    // For each emote
                    foreach (var emote in Storage.Emotes)
                    {
                        // Emote packets always have a sender (guid);
                        // skip this one if it was sent by a different creature
                        if (emote.Key.GetEntry() != text.Key)
                        {
                            continue;
                        }

                        foreach (var emoteValue in emote.Value)
                        {
                            var timeSpan = textValue.Item2 - emoteValue.Item2;
                            if (timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1))
                            {
                                textValue.Item1.Emote = emoteValue.Item1;
                            }
                        }
                    }

                    // For each sound
                    foreach (var sound in Storage.Sounds)
                    {
                        var timeSpan = textValue.Item2 - sound.Item2;
                        if (timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1))
                        {
                            textValue.Item1.Sound = sound.Item1;
                        }
                    }

                    // Set comment

                    string from = null, to = null;
                    if (textValue.Item1.SenderGUID != 0)
                    {
                        if (textValue.Item1.SenderGUID.GetObjectType() == ObjectType.Player)
                        {
                            from = "Player";
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(textValue.Item1.SenderName))
                            {
                                from = textValue.Item1.SenderName;
                            }
                            else
                            {
                                from = StoreGetters.GetName(StoreNameType.Unit, (int)textValue.Item1.SenderGUID.GetEntry(), false);
                            }
                        }
                    }

                    if (textValue.Item1.ReceiverGUID != 0)
                    {
                        if (textValue.Item1.ReceiverGUID.GetObjectType() == ObjectType.Player)
                        {
                            to = "Player";
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(textValue.Item1.ReceiverName))
                            {
                                to = textValue.Item1.ReceiverName;
                            }
                            else
                            {
                                to = StoreGetters.GetName(StoreNameType.Unit, (int)textValue.Item1.ReceiverGUID.GetEntry(), false);
                            }
                        }
                    }

                    Trace.Assert(text.Key == textValue.Item1.SenderGUID.GetEntry() ||
                                 text.Key == textValue.Item1.ReceiverGUID.GetEntry());

                    if (from != null && to != null)
                    {
                        textValue.Item1.Comment = from + " to " + to;
                    }
                    else if (from != null)
                    {
                        textValue.Item1.Comment = from;
                    }
                    else
                    {
                        Trace.Assert(false);
                    }
                }
            }

            /* can't use compare DB without knowing values of groupid or id
             * var entries = Storage.CreatureTexts.Keys.ToList();
             * var creatureTextDb = SQLDatabase.GetDict<uint, CreatureText>(entries);
             */

            const string tableName = "creature_text";

            var broadcastTextStoresMale   = SQLDatabase.BroadcastTextStores.GroupBy(blub => blub.Item2.MaleText).ToDictionary(group => group.Key, group => group.ToList());
            var broadcastTextStoresFemale = SQLDatabase.BroadcastTextStores.GroupBy(blub => blub.Item2.FemaleText).ToDictionary(group => group.Key, group => group.ToList());

            var rows = new List <QueryBuilder.SQLInsertRow>();

            foreach (var text in Storage.CreatureTexts)
            {
                foreach (var textValue in text.Value)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("entry", text.Key);
                    row.AddValue("groupid", "x", false, true);
                    row.AddValue("id", "x", false, true);
                    row.AddValue("text", textValue.Item1.Text);
                    row.AddValue("type", textValue.Item1.Type);
                    row.AddValue("language", textValue.Item1.Language);
                    row.AddValue("probability", 100.0);
                    row.AddValue("emote", textValue.Item1.Emote);
                    row.AddValue("duration", 0);
                    row.AddValue("sound", textValue.Item1.Sound);

                    if (SQLDatabase.BroadcastTextStores != null)
                    {
                        List <Tuple <uint, BroadcastText> > textList;
                        if (broadcastTextStoresMale.TryGetValue(textValue.Item1.Text, out textList) ||
                            broadcastTextStoresFemale.TryGetValue(textValue.Item1.Text, out textList))
                        {
                            foreach (var broadcastTextId in textList)
                            {
                                if (!String.IsNullOrWhiteSpace(textValue.Item1.BroadcastTextID))
                                {
                                    textValue.Item1.BroadcastTextID += " - " + broadcastTextId.Item1.ToString();
                                }
                                else
                                {
                                    textValue.Item1.BroadcastTextID = broadcastTextId.Item1.ToString();
                                }
                            }
                        }

                        row.AddValue("BroadcastTextID", textValue.Item1.BroadcastTextID);
                    }

                    row.AddValue("comment", textValue.Item1.Comment);

                    rows.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build());
        }
Ejemplo n.º 47
0
        public static string Creature(Dictionary <Guid, Unit> units)
        {
            if (units.Count == 0)
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature))
            {
                return(string.Empty);
            }

            const string tableName = "creature";

            uint count = 0;
            var  rows  = new List <QueryBuilder.SQLInsertRow>();

            foreach (var unit in units)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var creature = unit.Value;

                if (Settings.AreaFilters.Length > 0)
                {
                    if (!(creature.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters)))
                    {
                        continue;
                    }
                }

                UpdateField uf;
                if (!creature.UpdateFields.TryGetValue(UpdateFields.GetUpdateField(ObjectField.OBJECT_FIELD_ENTRY), out uf))
                {
                    continue;   // broken entry, nothing to spawn
                }
                var entry = uf.UInt32Value;

                var spawnTimeSecs = creature.GetDefaultSpawnTime();
                var movementType  = 0; // TODO: Find a way to check if our unit got random movement
                var spawnDist     = (movementType == 1) ? 5 : 0;

                row.AddValue("guid", "@CGUID+" + count, noQuotes: true);
                row.AddValue("id", entry);
                row.AddValue("map", !creature.IsOnTransport() ? creature.Map : 0);  // TODO: query transport template for map
                row.AddValue("spawnMask", 1);
                row.AddValue("phaseMask", creature.PhaseMask);
                if (!creature.IsOnTransport())
                {
                    row.AddValue("position_x", creature.Movement.Position.X);
                    row.AddValue("position_y", creature.Movement.Position.Y);
                    row.AddValue("position_z", creature.Movement.Position.Z);
                    row.AddValue("orientation", creature.Movement.Orientation);
                }
                else
                {
                    row.AddValue("position_x", creature.Movement.TransportOffset.X);
                    row.AddValue("position_y", creature.Movement.TransportOffset.Y);
                    row.AddValue("position_z", creature.Movement.TransportOffset.Z);
                    row.AddValue("orientation", creature.Movement.TransportOffset.O);
                }

                row.AddValue("spawntimesecs", spawnTimeSecs);
                row.AddValue("spawndist", spawnDist);
                row.AddValue("MovementType", movementType);
                row.Comment  = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                row.Comment += " (Area: " + StoreGetters.GetName(StoreNameType.Area, creature.Area, false) + ")";

                if (creature.IsTemporarySpawn())
                {
                    row.CommentOut = true;
                    row.Comment   += " - !!! might be temporary spawn !!!";
                }
                else if (creature.IsOnTransport())
                {
                    row.CommentOut = true;
                    row.Comment   += " - !!! on transport (NYI) !!!";
                }
                else
                {
                    ++count;
                }

                if (creature.Movement.HasWpsOrRandMov)
                {
                    row.Comment += " (possible waypoints or random movement)";
                }

                rows.Add(row);
            }

            var result = new StringBuilder();
            // delete query for GUIDs
            var delete = new QueryBuilder.SQLDelete(Tuple.Create("@CGUID+0", "@CGUID+" + --count), "guid", tableName);

            result.Append(delete.Build());

            var sql = new QueryBuilder.SQLInsert(tableName, rows, withDelete: false);

            result.Append(sql.Build());
            return(result.ToString());
        }
Ejemplo n.º 48
0
        public static string GameObject(Dictionary<Guid, GameObject> gameObjects)
        {
            if (gameObjects.Count == 0)
                return string.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gameobject))
                return string.Empty;

            const string tableName = "gameobject";

            uint count = 0;
            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var gameobject in gameObjects)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var go = gameobject.Value;

                if (Settings.AreaFilters.Length > 0)
                    if (!(go.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters)))
                        continue;

                uint animprogress = 0;
                uint state = 0;
                UpdateField uf;
                if (!go.UpdateFields.TryGetValue(UpdateFields.GetUpdateField(ObjectField.OBJECT_FIELD_ENTRY), out uf))
                    continue;   // broken entry, nothing to spawn

                var entry = uf.UInt32Value;

                if (go.UpdateFields.TryGetValue(UpdateFields.GetUpdateField(GameObjectField.GAMEOBJECT_BYTES_1), out uf))
                {
                    var bytes = uf.UInt32Value;
                    state = (bytes & 0x000000FF);
                    animprogress = Convert.ToUInt32((bytes & 0xFF000000) >> 24);
                }

                row.AddValue("guid", "@OGUID+" + count, noQuotes: true);
                row.AddValue("id", entry);
                row.AddValue("map", !go.IsOnTransport() ? go.Map : 0);  // TODO: query transport template for map
                row.AddValue("spawnMask", 1);
                row.AddValue("phaseMask", go.PhaseMask);
                if (!go.IsOnTransport())
                {
                    row.AddValue("position_x", go.Movement.Position.X);
                    row.AddValue("position_y", go.Movement.Position.Y);
                    row.AddValue("position_z", go.Movement.Position.Z);
                    row.AddValue("orientation", go.Movement.Orientation);
                }
                else
                {
                    row.AddValue("position_x", go.Movement.TransportOffset.X);
                    row.AddValue("position_y", go.Movement.TransportOffset.Y);
                    row.AddValue("position_z", go.Movement.TransportOffset.Z);
                    row.AddValue("orientation", go.Movement.TransportOffset.O);
                }

                var rotation = go.GetRotation();
                if (rotation != null && rotation.Length == 4)
                {
                    row.AddValue("rotation0", rotation[0]);
                    row.AddValue("rotation1", rotation[1]);
                    row.AddValue("rotation2", rotation[2]);
                    row.AddValue("rotation3", rotation[3]);
                }
                else
                {
                    row.AddValue("rotation0", 0);
                    row.AddValue("rotation1", 0);
                    row.AddValue("rotation2", 0);
                    row.AddValue("rotation3", 0);
                }

                row.AddValue("spawntimesecs", go.GetDefaultSpawnTime());
                row.AddValue("animprogress", animprogress);
                row.AddValue("state", state);
                row.Comment = StoreGetters.GetName(StoreNameType.GameObject, (int)gameobject.Key.GetEntry(), false);
                row.Comment += " (Area: " + StoreGetters.GetName(StoreNameType.Area, go.Area, false) + ")";

                if (go.IsTemporarySpawn())
                {
                    row.CommentOut = true;
                    row.Comment += " - !!! might be temporary spawn !!!";
                }
                else if (go.IsTransport())
                {
                    row.CommentOut = true;
                    row.Comment += " - !!! transport !!!";
                }
                else if (go.IsOnTransport())
                {
                    row.CommentOut = true;
                    row.Comment += " - !!! on transport (NYI) !!!";
                }
                else
                    ++count;

                rows.Add(row);
            }

            var result = new StringBuilder();

            // delete query for GUIDs
            var delete = new QueryBuilder.SQLDelete(Tuple.Create("@OGUID+0", "@OGUID+" + --count), "guid", tableName);
            result.Append(delete.Build());

            var sql = new QueryBuilder.SQLInsert(tableName, rows, withDelete: false);
            result.Append(sql.Build());
            return result.ToString();
        }
Ejemplo n.º 49
0
        public static string Creature(Dictionary<Guid, Unit> units)
        {
            if (units.Count == 0)
                return string.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature))
                return string.Empty;

            const string tableName = "creature";

            uint count = 0;
            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var unit in units)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var creature = unit.Value;

                if (Settings.AreaFilters.Length > 0)
                    if (!(creature.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters)))
                        continue;

                UpdateField uf;
                if (!creature.UpdateFields.TryGetValue(UpdateFields.GetUpdateField(ObjectField.OBJECT_FIELD_ENTRY), out uf))
                    continue;   // broken entry, nothing to spawn

                var entry = uf.UInt32Value;

                var spawnTimeSecs = creature.GetDefaultSpawnTime();
                var movementType = 0; // TODO: Find a way to check if our unit got random movement
                var spawnDist = (movementType == 1) ? 5 : 0;

                row.AddValue("guid", "@CGUID+" + count, noQuotes: true);
                row.AddValue("id", entry);
                row.AddValue("map", !creature.IsOnTransport() ? creature.Map : 0);  // TODO: query transport template for map
                row.AddValue("spawnMask", 1);
                row.AddValue("phaseMask", creature.PhaseMask);
                if (!creature.IsOnTransport())
                {
                    row.AddValue("position_x", creature.Movement.Position.X);
                    row.AddValue("position_y", creature.Movement.Position.Y);
                    row.AddValue("position_z", creature.Movement.Position.Z);
                    row.AddValue("orientation", creature.Movement.Orientation);
                }
                else
                {
                    row.AddValue("position_x", creature.Movement.TransportOffset.X);
                    row.AddValue("position_y", creature.Movement.TransportOffset.Y);
                    row.AddValue("position_z", creature.Movement.TransportOffset.Z);
                    row.AddValue("orientation", creature.Movement.TransportOffset.O);
                }

                row.AddValue("spawntimesecs", spawnTimeSecs);
                row.AddValue("spawndist", spawnDist);
                row.AddValue("MovementType", movementType);
                row.Comment = StoreGetters.GetName(StoreNameType.Unit, (int)unit.Key.GetEntry(), false);
                row.Comment += " (Area: " + StoreGetters.GetName(StoreNameType.Area, creature.Area, false) + ")";

                if (creature.IsTemporarySpawn())
                {
                    row.CommentOut = true;
                    row.Comment += " - !!! might be temporary spawn !!!";
                }
                else if (creature.IsOnTransport())
                {
                    row.CommentOut = true;
                    row.Comment += " - !!! on transport (NYI) !!!";
                }
                else
                    ++count;

                if (creature.Movement.HasWpsOrRandMov)
                    row.Comment += " (possible waypoints or random movement)";

                rows.Add(row);
            }

            var result = new StringBuilder();
            // delete query for GUIDs
            var delete = new QueryBuilder.SQLDelete(Tuple.Create("@CGUID+0", "@CGUID+" + --count), "guid", tableName);
            result.Append(delete.Build());

            var sql = new QueryBuilder.SQLInsert(tableName, rows, withDelete: false);
            result.Append(sql.Build());
            return result.ToString();
        }
Ejemplo n.º 50
0
        public static string Gossip()
        {
            if (Storage.Gossips.IsEmpty)
                return String.Empty;

            const string tableName1 = "gossip_menu";
            const string tableName2 = "gossip_menu_option";

            // TODO: Add creature_template gossip_menu_id update query or similar

            // `gossip`
            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var gossip in Storage.Gossips)
            {
                var row = new QueryBuilder.SQLInsertRow();

                row.AddValue("entry", gossip.Key.Item1);
                row.AddValue("text_id", gossip.Key.Item2);
                row.Comment = StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.ObjectType),
                                                   (int)gossip.Value.ObjectEntry, false);

                rows.Add(row);
            }

            var result = new QueryBuilder.SQLInsert(tableName1, rows, 2).Build();

            // `gossip_menu_option`
            rows = new List<QueryBuilder.SQLInsertRow>();
            ICollection<Tuple<uint, uint>> keys = new Collection<Tuple<uint, uint>>();
            foreach (var gossip in Storage.Gossips)
            {
                if (gossip.Value.GossipOptions != null) // Needed?
                    foreach (var gossipOption in gossip.Value.GossipOptions)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("menu_id", gossip.Key.Item1);
                        row.AddValue("id", gossipOption.Index);
                        row.AddValue("option_icon", gossipOption.OptionIcon);
                        row.AddValue("option_text", gossipOption.OptionText);
                        row.AddValue("box_coded", gossipOption.Box);
                        row.AddValue("box_money", gossipOption.RequiredMoney);
                        row.AddValue("box_text", gossipOption.BoxText);

                        rows.Add(row);

                        keys.Add(Tuple.Create(gossip.Key.Item1, gossipOption.Index));
                    }
            }

            result += new QueryBuilder.SQLInsert(tableName2, rows, 2).Build();

            return result;
        }
Ejemplo n.º 51
0
        public static string PointsOfInterest()
        {
            if (Storage.GossipPOIs.IsEmpty())
            {
                return(string.Empty);
            }

            var result = string.Empty;

            if (!Storage.GossipSelects.IsEmpty() && Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gossip_menu_option))
            {
                var gossipPOIsTable = new Dictionary <Tuple <uint, uint>, uint>();

                foreach (var poi in Storage.GossipPOIs)
                {
                    foreach (var gossipSelect in Storage.GossipSelects)
                    {
                        var tuple = Tuple.Create(gossipSelect.Key.Item1, gossipSelect.Key.Item2);

                        if (gossipPOIsTable.ContainsKey(tuple))
                        {
                            continue;
                        }

                        var timeSpan = poi.Value.Item2 - gossipSelect.Value.Item2;
                        if (timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1))
                        {
                            gossipPOIsTable.Add(tuple, poi.Key);
                        }
                    }
                }

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

                foreach (var u in gossipPOIsTable)
                {
                    var row = new QueryBuilder.SQLUpdateRow();

                    row.AddValue("action_poi_id", u.Value);

                    row.AddWhere("menu_id", u.Key.Item1);
                    row.AddWhere("id", u.Key.Item2);

                    row.Table = "gossip_menu_option";

                    rowsUpd.Add(row);
                }

                result += new QueryBuilder.SQLUpdate(rowsUpd).Build();
            }

            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.points_of_interest))
            {
                const string tableName = "points_of_interest";
                var          rowsIns   = new List <QueryBuilder.SQLInsertRow>();

                uint count = 0;

                foreach (var poi in Storage.GossipPOIs)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("entry", "@ID+" + count, noQuotes: true);
                    row.AddValue("x", poi.Value.Item1.XPos);
                    row.AddValue("y", poi.Value.Item1.YPos);
                    row.AddValue("icon", poi.Value.Item1.Icon);
                    row.AddValue("flags", poi.Value.Item1.Flags);
                    row.AddValue("data", poi.Value.Item1.Data);
                    row.AddValue("icon_name", poi.Value.Item1.IconName);

                    rowsIns.Add(row);
                    count++;
                }

                result += new QueryBuilder.SQLDelete(Tuple.Create("@ID+0", "@ID+" + (count - 1)), "entry", tableName).Build();
                result += new QueryBuilder.SQLInsert(tableName, rowsIns, withDelete: false).Build();
            }

            return(result);
        }
Ejemplo n.º 52
0
        public static string CreatureText()
        {
            if (Storage.CreatureTexts.IsEmpty())
                return string.Empty;

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_text))
                return string.Empty;

            // For each sound and emote, if the time they were send is in the +1/-1 seconds range of
            // our texts, add that sound and emote to our Storage.CreatureTexts

            var broadcastTextStoresMale = SQLDatabase.BroadcastTextStores.GroupBy(blub => blub.Item2.MaleText).ToDictionary(group => group.Key, group => group.ToList());
            var broadcastTextStoresFemale = SQLDatabase.BroadcastTextStores.GroupBy(blub => blub.Item2.FemaleText).ToDictionary(group => group.Key, group => group.ToList());

            foreach (var text in Storage.CreatureTexts)
            {
                // For each text
                foreach (var textValue in text.Value)
                {
                    // For each emote
                    var text1 = text;
                    var value1 = textValue;
                    foreach (var emoteValue in from emote in Storage.Emotes where emote.Key.GetEntry() == text1.Key from emoteValue in emote.Value let timeSpan = value1.Item2 - emoteValue.Item2 where timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1) select emoteValue)
                        textValue.Item1.Emote = emoteValue.Item1;

                    // For each sound
                    var value = textValue;
                    foreach (var sound in from sound in Storage.Sounds let timeSpan = value.Item2 - sound.Item2 where timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1) select sound)
                        textValue.Item1.Sound = sound.Item1;

                    if (SQLDatabase.BroadcastTextStores != null)
                    {
                        List<Tuple<uint, BroadcastText>> textList;
                        if (broadcastTextStoresMale.TryGetValue(textValue.Item1.Text, out textList) ||
                            broadcastTextStoresFemale.TryGetValue(textValue.Item1.Text, out textList))
                            foreach (var broadcastTextId in textList)
                            {
                                if (!String.IsNullOrWhiteSpace(textValue.Item1.BroadcastTextID))
                                    textValue.Item1.BroadcastTextID += " - " + broadcastTextId.Item1;
                                else
                                    textValue.Item1.BroadcastTextID = broadcastTextId.Item1.ToString();
                            }
                    }

                    // Set comment
                    string from = null, to = null;
                    if (!textValue.Item1.SenderGUID.IsEmpty() || textValue.Item1.SenderGUID != null)
                    {
                        if (textValue.Item1.SenderGUID.GetObjectType() == ObjectType.Player)
                            from = "Player";
                        else
                            @from = !string.IsNullOrEmpty(textValue.Item1.SenderName) ? textValue.Item1.SenderName : StoreGetters.GetName(StoreNameType.Unit, (int)textValue.Item1.SenderGUID.GetEntry(), false);
                    }

                    if (!textValue.Item1.ReceiverGUID.IsEmpty() || textValue.Item1.ReceiverGUID != null)
                    {
                        if (textValue.Item1.ReceiverGUID.GetObjectType() == ObjectType.Player)
                            to = "Player";
                        else
                            to = !string.IsNullOrEmpty(textValue.Item1.ReceiverName) ? textValue.Item1.ReceiverName : StoreGetters.GetName(StoreNameType.Unit, (int)textValue.Item1.ReceiverGUID.GetEntry(), false);
                    }

                    Trace.Assert(text.Key == textValue.Item1.SenderGUID.GetEntry() ||
                        text.Key == textValue.Item1.ReceiverGUID.GetEntry());

                    if (from != null && to != null)
                        textValue.Item1.Comment = from + " to " + to;
                    else if (from != null)
                        textValue.Item1.Comment = from;
                    else
                        Trace.Assert(false);
                }
            }

            /* can't use compare DB without knowing values of groupid or id
            var entries = Storage.CreatureTexts.Keys.ToList();
            var creatureTextDb = SQLDatabase.GetDict<uint, CreatureText>(entries);
            */

            const string tableName = "creature_text";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var text in Storage.CreatureTexts)
            {
                foreach (var textValue in text.Value)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("entry", text.Key);
                    row.AddValue("groupid", "x", false, true);
                    row.AddValue("id", "x", false, true);
                    row.AddValue("text", textValue.Item1.Text);
                    row.AddValue("type", textValue.Item1.Type);
                    row.AddValue("language", textValue.Item1.Language);
                    row.AddValue("probability", 100.0);
                    row.AddValue("emote", textValue.Item1.Emote);
                    row.AddValue("duration", 0);
                    row.AddValue("sound", textValue.Item1.Sound);
                    row.AddValue("BroadcastTextID", textValue.Item1.BroadcastTextID);
                    row.AddValue("comment", textValue.Item1.Comment);

                    rows.Add(row);
                }
            }

            return new QueryBuilder.SQLInsert(tableName, rows, 1, false).Build();
        }
Ejemplo n.º 53
0
        public static string StartInformation()
        {
            var result = String.Empty;

            if (!Storage.StartActions.IsEmpty() && Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.playercreateinfo_action))
            {
                var rows = new List <QueryBuilder.SQLInsertRow>();
                foreach (var startActions in Storage.StartActions)
                {
                    var comment = new QueryBuilder.SQLInsertRow
                    {
                        HeaderComment = startActions.Key.Item1 + " - " + startActions.Key.Item2
                    };
                    rows.Add(comment);

                    foreach (var action in startActions.Value.Item1.Actions)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("race", startActions.Key.Item1);
                        row.AddValue("class", startActions.Key.Item2);
                        row.AddValue("button", action.Button);
                        row.AddValue("action", action.Id);
                        row.AddValue("type", action.Type);
                        if (action.Type == ActionButtonType.Spell)
                        {
                            row.Comment = StoreGetters.GetName(StoreNameType.Spell, (int)action.Id, false);
                        }
                        if (action.Type == ActionButtonType.Item)
                        {
                            row.Comment = StoreGetters.GetName(StoreNameType.Item, (int)action.Id, false);
                        }

                        rows.Add(row);
                    }
                }

                result += new QueryBuilder.SQLInsert("playercreateinfo_action", rows, 2).Build();
            }

            if (!Storage.StartPositions.IsEmpty() && Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.playercreateinfo))
            {
                var entries = Storage.StartPositions.Keys();
                var dataDb  = SQLDatabase.GetDict <Race, Class, StartPosition>(entries, "race", "class");

                result += SQLUtil.CompareDicts(Storage.StartPositions, dataDb, StoreNameType.None, StoreNameType.None, "race", "class");
            }

            if (!Storage.StartSpells.IsEmpty() && Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.playercreateinfo_spell))
            {
                var rows = new List <QueryBuilder.SQLInsertRow>();
                foreach (var startSpells in Storage.StartSpells)
                {
                    var comment = new QueryBuilder.SQLInsertRow
                    {
                        HeaderComment = startSpells.Key.Item1 + " - " + startSpells.Key.Item2
                    };
                    rows.Add(comment);

                    foreach (var spell in startSpells.Value.Item1.Spells)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("race", startSpells.Key.Item1);
                        row.AddValue("class", startSpells.Key.Item2);
                        row.AddValue("Spell", spell);
                        row.AddValue("Note", StoreGetters.GetName(StoreNameType.Spell, (int)spell, false));

                        rows.Add(row);
                    }
                }

                result += new QueryBuilder.SQLInsert("playercreateinfo_spell", rows, 2).Build();
            }

            return(result);
        }
Ejemplo n.º 54
0
        public static string Loot()
        {
            if (Storage.Loots.IsEmpty)
                return String.Empty;

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

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var loot in Storage.Loots)
            {
                var comment = new QueryBuilder.SQLInsertRow();
                comment.HeaderComment =
                    StoreGetters.GetName(Utilities.ObjectTypeToStore(Storage.Loots.Keys.First().Item2), (int)loot.Key.Item1, false) +
                    " (" + loot.Value.Gold + " gold)";
                rows.Add(comment);
                foreach (var lootItem in loot.Value.LootItems)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("Id", loot.Key.Item1);
                    row.AddValue("Type", loot.Key.Item2);
                    row.AddValue("ItemId", lootItem.ItemId);
                    row.AddValue("Count", lootItem.Count);
                    row.Comment = StoreGetters.GetName(StoreNameType.Item, (int)lootItem.ItemId, false);

                    rows.Add(row);
                }
            }

            return new QueryBuilder.SQLInsert(tableName, rows, 2).Build();
        }
Ejemplo n.º 55
0
        public static string StartInformation()
        {
            var result = String.Empty;

            if (!Storage.StartActions.IsEmpty() && Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.playercreateinfo_action))
            {
                var rows = new List <QueryBuilder.SQLInsertRow>();
                foreach (var startActions in Storage.StartActions)
                {
                    var comment = new QueryBuilder.SQLInsertRow();
                    comment.HeaderComment = startActions.Key.Item1 + " - " + startActions.Key.Item2;
                    rows.Add(comment);

                    foreach (var action in startActions.Value.Item1.Actions)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("race", startActions.Key.Item1);
                        row.AddValue("class", startActions.Key.Item2);
                        row.AddValue("button", action.Button);
                        row.AddValue("action", action.Id);
                        row.AddValue("type", action.Type);
                        if (action.Type == ActionButtonType.Spell)
                        {
                            row.Comment = StoreGetters.GetName(StoreNameType.Spell, (int)action.Id, false);
                        }
                        if (action.Type == ActionButtonType.Item)
                        {
                            row.Comment = StoreGetters.GetName(StoreNameType.Item, (int)action.Id, false);
                        }

                        rows.Add(row);
                    }
                }

                result = new QueryBuilder.SQLInsert("playercreateinfo_action", rows, 2).Build();
            }

            if (!Storage.StartPositions.IsEmpty() && Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.playercreateinfo))
            {
                var rows = new List <QueryBuilder.SQLInsertRow>();
                foreach (KeyValuePair <Tuple <Race, Class>, Tuple <StartPosition, TimeSpan?> > startPosition in Storage.StartPositions)
                {
                    var comment = new QueryBuilder.SQLInsertRow();
                    comment.HeaderComment = startPosition.Key.Item1 + " - " + startPosition.Key.Item2;
                    rows.Add(comment);

                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("race", startPosition.Key.Item1);
                    row.AddValue("class", startPosition.Key.Item2);
                    row.AddValue("map", startPosition.Value.Item1.Map);
                    row.AddValue("zone", startPosition.Value.Item1.Zone);
                    row.AddValue("position_x", startPosition.Value.Item1.Position.X);
                    row.AddValue("position_y", startPosition.Value.Item1.Position.Y);
                    row.AddValue("position_z", startPosition.Value.Item1.Position.Z);

                    row.Comment = StoreGetters.GetName(StoreNameType.Map, startPosition.Value.Item1.Map, false) + " - " +
                                  StoreGetters.GetName(StoreNameType.Zone, startPosition.Value.Item1.Zone, false);

                    rows.Add(row);
                }

                result += new QueryBuilder.SQLInsert("playercreateinfo", rows, 2).Build();
            }

            if (!Storage.StartSpells.IsEmpty() && Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.playercreateinfo_spell))
            {
                var rows = new List <QueryBuilder.SQLInsertRow>();
                foreach (var startSpells in Storage.StartSpells)
                {
                    var comment = new QueryBuilder.SQLInsertRow();
                    comment.HeaderComment = startSpells.Key.Item1 + " - " + startSpells.Key.Item2;
                    rows.Add(comment);

                    foreach (var spell in startSpells.Value.Item1.Spells)
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("race", startSpells.Key.Item1);
                        row.AddValue("class", startSpells.Key.Item2);
                        row.AddValue("Spell", spell);
                        row.AddValue("Note", StoreGetters.GetName(StoreNameType.Spell, (int)spell, false));

                        rows.Add(row);
                    }
                }

                result = new QueryBuilder.SQLInsert("playercreateinfo_spell", rows, 2).Build();
            }

            return(result);
        }
Ejemplo n.º 56
0
        public static string NpcTrainer()
        {
            if (Storage.NpcTrainers.IsEmpty)
                return String.Empty;

            const string tableName = "npc_trainer";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var npcTrainer in Storage.NpcTrainers)
            {
                var comment = new QueryBuilder.SQLInsertRow();
                comment.HeaderComment = StoreGetters.GetName(StoreNameType.Unit, (int)npcTrainer.Key, false);
                rows.Add(comment);
                foreach (var trainerSpell in npcTrainer.Value.TrainerSpells)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("entry", npcTrainer.Key);
                    row.AddValue("spell", trainerSpell.Spell);
                    row.AddValue("spellcost", trainerSpell.Cost);
                    row.AddValue("reqskill", trainerSpell.RequiredSkill);
                    row.AddValue("reqskillvalue", trainerSpell.RequiredSkillLevel);
                    row.AddValue("reqlevel", trainerSpell.RequiredLevel);
                    row.Comment = StoreGetters.GetName(StoreNameType.Spell, (int)trainerSpell.Spell, false);
                    rows.Add(row);
                }
            }

            return new QueryBuilder.SQLInsert(tableName, rows).Build();
        }
Ejemplo n.º 57
0
        public static string GameObject(Dictionary <WowGuid, GameObject> gameObjects)
        {
            if (gameObjects.Count == 0)
            {
                return(string.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gameobject))
            {
                return(string.Empty);
            }

            const string tableName = "gameobject";

            uint count = 0;
            var  rows  = new List <QueryBuilder.SQLInsertRow>();

            foreach (var gameobject in gameObjects)
            {
                var row = new QueryBuilder.SQLInsertRow();

                var go = gameobject.Value;

                if (Settings.AreaFilters.Length > 0)
                {
                    if (!(go.Area.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.AreaFilters)))
                    {
                        continue;
                    }
                }

                if (Settings.MapFilters.Length > 0)
                {
                    if (!(go.Map.ToString(CultureInfo.InvariantCulture).MatchesFilters(Settings.MapFilters)))
                    {
                        continue;
                    }
                }

                uint        animprogress = 0;
                uint        state        = 0;
                UpdateField uf;
                if (!go.UpdateFields.TryGetValue(UpdateFields.GetUpdateField(ObjectField.OBJECT_FIELD_ENTRY), out uf))
                {
                    continue;   // broken entry, nothing to spawn
                }
                var entry        = uf.UInt32Value;
                var badTransport = false;

                if (go.UpdateFields.TryGetValue(UpdateFields.GetUpdateField(GameObjectField.GAMEOBJECT_BYTES_1), out uf))
                {
                    var bytes = uf.UInt32Value;
                    state        = (bytes & 0x000000FF);
                    animprogress = Convert.ToUInt32((bytes & 0xFF000000) >> 24);
                }

                row.AddValue("guid", "@OGUID+" + count, noQuotes: true);
                row.AddValue("id", entry);
                if (!go.IsOnTransport())
                {
                    row.AddValue("map", go.Map);
                }
                else
                {
                    int mapId;
                    badTransport = !GetTransportMap(go, out mapId);
                    row.AddValue("map", mapId);
                }

                row.AddValue("spawnMask", go.GetDefaultSpawnMask());
                row.AddValue("phaseMask", go.PhaseMask);

                if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_3_4_15595) && go.Phases != null)
                {
                    row.AddValue("phaseId", string.Join(" - ", go.Phases));
                }

                if (!go.IsOnTransport())
                {
                    row.AddValue("position_x", go.Movement.Position.X);
                    row.AddValue("position_y", go.Movement.Position.Y);
                    row.AddValue("position_z", go.Movement.Position.Z);
                    row.AddValue("orientation", go.Movement.Orientation);
                }
                else
                {
                    row.AddValue("position_x", go.Movement.TransportOffset.X);
                    row.AddValue("position_y", go.Movement.TransportOffset.Y);
                    row.AddValue("position_z", go.Movement.TransportOffset.Z);
                    row.AddValue("orientation", go.Movement.TransportOffset.O);
                }

                var rotation = go.GetRotation();
                if (rotation != null && rotation.Length == 4)
                {
                    row.AddValue("rotation0", rotation[0]);
                    row.AddValue("rotation1", rotation[1]);
                    row.AddValue("rotation2", rotation[2]);
                    row.AddValue("rotation3", rotation[3]);
                }
                else
                {
                    row.AddValue("rotation0", 0);
                    row.AddValue("rotation1", 0);
                    row.AddValue("rotation2", 0);
                    row.AddValue("rotation3", 0);
                }

                row.AddValue("spawntimesecs", go.GetDefaultSpawnTime());
                row.AddValue("animprogress", animprogress);
                row.AddValue("state", state);
                row.Comment  = StoreGetters.GetName(StoreNameType.GameObject, (int)gameobject.Key.GetEntry(), false);
                row.Comment += " (Area: " + StoreGetters.GetName(StoreNameType.Area, go.Area, false) + ")";

                if (go.IsTemporarySpawn())
                {
                    row.CommentOut = true;
                    row.Comment   += " - !!! might be temporary spawn !!!";
                }
                else if (go.IsTransport())
                {
                    row.CommentOut = true;
                    row.Comment   += " - !!! transport !!!";
                }
                else if (go.IsOnTransport() && badTransport)
                {
                    row.CommentOut = true;
                    row.Comment   += " - !!! on transport - transport template not found !!!";
                }
                else
                {
                    ++count;
                }

                rows.Add(row);
            }

            var result = new StringBuilder();

            if (count > 0)
            {
                // delete query for GUIDs
                var delete = new QueryBuilder.SQLDelete(Tuple.Create("@OGUID+0", "@OGUID+" + --count), "guid", tableName);
                result.Append(delete.Build());
            }

            var sql = new QueryBuilder.SQLInsert(tableName, rows, withDelete: false);

            result.Append(sql.Build());
            return(result.ToString());
        }
Ejemplo n.º 58
0
        public static string NpcVendor()
        {
            if (Storage.NpcVendors.IsEmpty)
                return String.Empty;

            const string tableName = "npc_vendor";

            var rows = new List<QueryBuilder.SQLInsertRow>();
            foreach (var npcVendor in Storage.NpcVendors)
            {
                var comment = new QueryBuilder.SQLInsertRow();
                comment.HeaderComment = StoreGetters.GetName(StoreNameType.Unit, (int)npcVendor.Key);
                rows.Add(comment);
                foreach (var vendorItem in npcVendor.Value.VendorItems)
                {
                    var row = new QueryBuilder.SQLInsertRow();
                    row.AddValue("entry", npcVendor.Key);
                    row.AddValue("item", vendorItem.ItemId);
                    row.AddValue("slot", vendorItem.Slot);
                    row.AddValue("maxcount", vendorItem.MaxCount);
                    row.AddValue("ExtendedCost", vendorItem.ExtendedCostId);
                    row.Comment = StoreGetters.GetName(StoreNameType.Item, (int)vendorItem.ItemId, false);
                    rows.Add(row);
                }
            }

            return new QueryBuilder.SQLInsert(tableName, rows, 2).Build();
        }
Ejemplo n.º 59
0
        public static string CreatureDifficulty()
        {
            if (Storage.CreatureDifficultys.IsEmpty())
            {
                return(String.Empty);
            }

            if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.creature_template))
            {
                return(String.Empty);
            }

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

            foreach (var creature in Storage.CreatureDifficultys)
            {
                if (SQLDatabase.CreatureDifficultyStores != null)
                {
                    if (SQLDatabase.CreatureDifficultyStores.ContainsKey(creature.Key))
                    {
                        foreach (var creatureDiff in SQLDatabase.CreatureDifficultyStores)
                        {
                            var row = new QueryBuilder.SQLUpdateRow();

                            if (!Utilities.EqualValues(creature.Key, creatureDiff.Key))
                            {
                                continue;
                            }

                            if (!Utilities.EqualValues(creatureDiff.Value.CreatureID, creature.Value.Item1.CreatureID))
                            {
                                row.AddValue("CreatureID", creature.Value.Item1.CreatureID);
                            }

                            if (!Utilities.EqualValues(creatureDiff.Value.FactionID, creature.Value.Item1.FactionID))
                            {
                                row.AddValue("FactionID", creature.Value.Item1.FactionID);
                            }

                            if (!Utilities.EqualValues(creatureDiff.Value.Expansion, creature.Value.Item1.Expansion))
                            {
                                row.AddValue("Expansion", creature.Value.Item1.Expansion);
                            }

                            if (!Utilities.EqualValues(creatureDiff.Value.MinLevel, creature.Value.Item1.MinLevel))
                            {
                                row.AddValue("MinLevel", creature.Value.Item1.MinLevel);
                            }

                            if (!Utilities.EqualValues(creatureDiff.Value.MaxLevel, creature.Value.Item1.MaxLevel))
                            {
                                row.AddValue("MaxLevel", creature.Value.Item1.MaxLevel);
                            }

                            for (int i = 0; i < 5; i++)
                            {
                                if (!Utilities.EqualValues(creatureDiff.Value.Flags[i], creature.Value.Item1.Flags[i]))
                                {
                                    row.AddValue("Flags" + (i + 1), creature.Value.Item1.Flags[i]);
                                }
                            }

                            if (!Utilities.EqualValues(creatureDiff.Value.VerifiedBuild, creature.Value.Item1.VerifiedBuild))
                            {
                                row.AddValue("VerifiedBuild", creature.Value.Item1.VerifiedBuild);
                            }

                            row.AddWhere("Id", creature.Key);

                            row.Table = "creature_difficulty";

                            if (row.ValueCount != 0)
                            {
                                rowsUpd.Add(row);
                            }
                        }
                    }
                    else // insert
                    {
                        var row = new QueryBuilder.SQLInsertRow();

                        row.AddValue("ID", creature.Key);
                        row.AddValue("CreatureID", creature.Value.Item1.CreatureID);

                        row.AddValue("FactionID", creature.Value.Item1.FactionID);
                        row.AddValue("Expansion", creature.Value.Item1.Expansion);

                        row.AddValue("MinLevel", creature.Value.Item1.MinLevel);
                        row.AddValue("MaxLevel", creature.Value.Item1.MaxLevel);

                        for (int i = 0; i < 5; i++)
                        {
                            row.AddValue("Flags" + (i + 1), creature.Value.Item1.Flags[i]);
                        }

                        row.AddValue("VerifiedBuild", creature.Value.Item1.VerifiedBuild);

                        rowsIns.Add(row);
                    }
                }
                else // insert
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("ID", creature.Key);
                    row.AddValue("CreatureID", creature.Value.Item1.CreatureID);

                    row.AddValue("FactionID", creature.Value.Item1.FactionID);
                    row.AddValue("Expansion", creature.Value.Item1.Expansion);

                    row.AddValue("MinLevel", creature.Value.Item1.MinLevel);
                    row.AddValue("MaxLevel", creature.Value.Item1.MaxLevel);

                    for (int i = 0; i < 5; i++)
                    {
                        row.AddValue("Flags" + (i + 1), creature.Value.Item1.Flags[i]);
                    }

                    row.AddValue("VerifiedBuild", creature.Value.Item1.VerifiedBuild);

                    rowsIns.Add(row);
                }
            }

            return(new QueryBuilder.SQLInsert("creature_difficulty", rowsIns).Build() +
                   new QueryBuilder.SQLUpdate(rowsUpd).Build());
        }
Ejemplo n.º 60
0
        public static string PointsOfInterest()
        {
            if (Storage.GossipPOIs.IsEmpty())
                return string.Empty;

            var result = string.Empty;

            if (!Storage.GossipSelects.IsEmpty() && Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.gossip_menu_option))
            {
                var gossipPOIsTable = new Dictionary<Tuple<uint, uint>, uint>();

                foreach (var poi in Storage.GossipPOIs)
                {
                    foreach (var gossipSelect in Storage.GossipSelects)
                    {
                        var tuple = Tuple.Create(gossipSelect.Key.Item1, gossipSelect.Key.Item2);

                        if (gossipPOIsTable.ContainsKey(tuple))
                            continue;

                        var timeSpan = poi.Value.Item2 - gossipSelect.Value.Item2;
                        if (timeSpan != null && timeSpan.Value.Duration() <= TimeSpan.FromSeconds(1))
                            gossipPOIsTable.Add(tuple, poi.Key);
                    }
                }

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

                foreach (var u in gossipPOIsTable)
                {
                    var row = new QueryBuilder.SQLUpdateRow();

                    row.AddValue("action_poi_id", u.Value);

                    row.AddWhere("menu_id", u.Key.Item1);
                    row.AddWhere("id", u.Key.Item2);

                    row.Table = "gossip_menu_option";

                    rowsUpd.Add(row);
                }

                result += new QueryBuilder.SQLUpdate(rowsUpd).Build();
            }

            if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.points_of_interest))
            {
                const string tableName = "points_of_interest";
                var rowsIns = new List<QueryBuilder.SQLInsertRow>();

                uint count = 0;

                foreach (var poi in Storage.GossipPOIs)
                {
                    var row = new QueryBuilder.SQLInsertRow();

                    row.AddValue("ID", "@ID+" + count, noQuotes: true);
                    row.AddValue("PositionX", poi.Value.Item1.PositionX);
                    row.AddValue("PositionY", poi.Value.Item1.PositionY);
                    row.AddValue("Icon", poi.Value.Item1.Icon);
                    row.AddValue("Flags", poi.Value.Item1.Flags);
                    row.AddValue("Importance", poi.Value.Item1.Importance);
                    row.AddValue("Name", poi.Value.Item1.Name);

                    rowsIns.Add(row);
                    count++;
                }

                result += new QueryBuilder.SQLDelete(Tuple.Create("@ID+0", "@ID+" + (count - 1)), "entry", tableName).Build();
                result += new QueryBuilder.SQLInsert(tableName, rowsIns, withDelete: false).Build();
            }

            return result;
        }