/// <summary>
            /// Constructs the actual query
            /// </summary>
            /// <returns>Full insert AND delete queries</returns>
            public string Build()
            {
                // If we only have rows with comment, do not print any query
                if (Rows.All(row => row.NoData)) // still true if row count = 0
                {
                    return("-- " + SQLUtil.AddBackQuotes(Table) + " has empty data." + Environment.NewLine);
                }

                var query = new StringBuilder();

                query.Append(Delete); // Can be empty
                query.Append(InsertHeader);

                var count = 0;

                foreach (var row in Rows)
                {
                    if (count >= MaxRowsPerInsert)
                    {
                        query.ReplaceLast(',', ';');
                        query.Append(InsertHeader);
                        count = 0;
                    }
                    query.Append(row.Build());
                    count++;
                }

                query.Append(Environment.NewLine);

                return(query.ReplaceLast(',', ';').ToString());
            }
示例#2
0
        /// <summary>
        /// Constructs the actual query
        /// </summary>
        /// <returns>Full insert AND delete queries</returns>
        public string Build()
        {
            if (_rows.Count == 0)
            {
                return(string.Empty);
            }

            StringBuilder query = new StringBuilder();

            if (_withDelete)
            {
                query.Append(new SQLDelete <T>(_rows).Build()); // Can be empty
            }
            query.Append(_insertHeader);

            int count = 0;

            foreach (var row in _rows)
            {
                if (count >= MaxRowsPerInsert)
                {
                    query.ReplaceLast(',', ';');
                    query.Append(Environment.NewLine);
                    query.Append(_insertHeader);
                    count = 0;
                }
                query.Append(new SQLInsertRow <T>(row).Build());
                query.Append(Environment.NewLine);
                count++;
            }
            query.ReplaceLast(',', ';');

            return(query.ToString());
        }
示例#3
0
        private void ParseInsideQuotes(char currentChar)
        {
            switch (currentChar)
            {
            case Characters.QuoteEncoded:
                if (PrevChar == Characters.EscapePrefix)
                {
                    Fragment.ReplaceLast(currentChar);
                }
                else
                {
                    // WIP here
                    // Working on later auto-detecting if we add quotes around the decrypted values
                    var val = DecodeValue(Fragment.ToString());
                    Builder.Append($"{Characters.QuoteOriginal}{val}{Characters.QuoteOriginal}");
                    Fragment.Clear();
                    OutsideOfQuotes = true;
                }
                break;

            default:
                Fragment.Append(currentChar);
                break;
            }
        }
示例#4
0
        public static string PageText()
        {
            if (Stuffing.PageTexts.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

            const string tableName  = "page_Text";
            const string primaryKey = "entry";

            string[] tableStructure = { "entry", "text", "next_page" };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.PageTexts.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var pageText in Stuffing.PageTexts)
            {
                sqlQuery.Append(
                    "(" +
                    pageText.Key + cs +
                    SQLUtil.Stringify(pageText.Value.Text) + cs +
                    pageText.Value.NextPageId + ")," + Environment.NewLine);
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
            /// <summary>
            /// Constructs the actual query
            /// </summary>
            /// <returns>Full insert AND delete queries</returns>
            public string Build()
            {
                // If we only have rows with comment, do not print any query
                if (Rows.All(row => row.NoData)) // still true if row count = 0
                {
                    return("-- " + SQLUtil.AddBackQuotes(Table) + " has empty data." + Environment.NewLine);
                }

                var query = new StringBuilder();

                query.Append(Delete); // Can be empty
                query.Append(InsertHeader);

                var count = 0;

                foreach (var row in Rows)
                {
                    if (count >= MaxRowsPerInsert && !_deleteDuplicates)
                    {
                        query.ReplaceLast(',', ';');
                        query.Append(InsertHeader);
                        count = 0;
                    }
                    query.Append(row.Build());
                    count++;
                }

                query.Append(Environment.NewLine);

                // This is easier to implement that comparing raw objects in each row
                // and certainly faster. Imagine comparing 1k rows of <string, int, int, emote, YouGotIt>
                if (_deleteDuplicates)
                {
                    var str = String.Join("\n", query.ToString().Split('\n').Distinct()); // Do not use Enviroment.NewLine
                    query.Clear();
                    query.Append(str);
                }

                query.ReplaceLast(',', ';');

                return(query.ToString());
            }
示例#6
0
        public static string GameObjectTemplate()
        {
            if (Stuffing.GameObjectTemplates.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure (data got 32 fields, not 24)
            const string tableName = "gameobject_template";
            const string primaryKey = "Id";
            string[] tableStructure = {
                                          "Id", "Type", "DisplayId", "Name", "IconName", "CastCaption", "UnkString",
                                          "Data1", "Data2", "Data3", "Data4", "Data5", "Data6", "Data7", "Data8",
                                          "Data9", "Data10", "Data11", "Data12", "Data13", "Data14", "Data15", "Data16",
                                          "Data17", "Data18", "Data19", "Data20", "Data21", "Data22", "Data23", "Data24",
                                          "Data25", "Data26", "Data27", "Data28", "Data29", "Data30", "Data31",
                                          "Data32", "Size", "QuestItem1", "QuestItem2", "QuestItem3", "QuestItem4",
                                          "QuestItem5", "QuestItem6", "UnknownUInt"
                                      };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.GameObjectTemplates.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var goTemplate in Stuffing.GameObjectTemplates)
            {
                sqlQuery.Append(
                    "(" +
                    goTemplate.Key + cs +
                    (int) goTemplate.Value.Type + cs +
                    goTemplate.Value.DisplayId + cs +
                    SQLUtil.Stringify(goTemplate.Value.Name) + cs +
                    SQLUtil.Stringify(goTemplate.Value.IconName) + cs +
                    SQLUtil.Stringify(goTemplate.Value.CastCaption) + cs +
                    SQLUtil.Stringify(goTemplate.Value.UnkString) + cs);

                foreach (var n in goTemplate.Value.Data)
                    sqlQuery.Append(n + cs);

                sqlQuery.Append(
                    goTemplate.Value.Size + cs);

                foreach (var n in goTemplate.Value.QuestItems)
                    sqlQuery.Append(n + cs);

                sqlQuery.Append(
                    goTemplate.Value.UnknownUInt + ")," + Environment.NewLine);
            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }
示例#7
0
        public static void WriteAPIQuestSQL()
        {
            StreamWriter sql       = File.CreateText("quest_api.sql");
            string       tableName = "quest_api";

            string[] fieldsName = { "id", "title", "reqLevel", "suggestedPartyMembers", "category", "level" };

            sql.WriteLine(InsertBuild(tableName, fieldsName));

            var           count = 0;
            StringBuilder query = new StringBuilder();

            foreach (Quest questInfo in Quests)
            {
                if (questInfo == null)
                {
                    continue;
                }

                query.Append($"({ questInfo.id }, '{ EscapeString(questInfo.title) }', { questInfo.reqLevel }, { questInfo.suggestedPartyMembers }, ");
                query.Append($"'{ EscapeString(questInfo.category) }', { questInfo.level })");

                if (count < 500)
                {
                    query.Append(",");
                }
                else
                {
                    query.Append(";");
                    query.Append(Environment.NewLine);
                    query.Append(InsertBuild(tableName, fieldsName));
                    count = 0;
                }

                ++count;
                query.Append(Environment.NewLine);
            }

            query.ReplaceLast(',', ';');

            sql.WriteLine(query.ToString());
            sql.Close();
        }
示例#8
0
        public static void WriteAPISpellSQL()
        {
            StreamWriter sql       = File.CreateText("spell_api.sql");
            string       tableName = "spell_api";

            string[] fieldsName = { "id", "name", "icon", "description", "powerCost", "castTime", "cooldown" };

            sql.WriteLine(InsertBuild(tableName, fieldsName));

            var           count = 0;
            StringBuilder query = new StringBuilder();

            foreach (Spell spellInfo in Spells)
            {
                if (spellInfo == null)
                {
                    continue;
                }

                query.Append($"({ spellInfo.id }, '{ EscapeString(spellInfo.name) }', '{ EscapeString(spellInfo.icon) }', '{ EscapeString(spellInfo.description) }', ");
                query.Append($"'{ EscapeString(spellInfo.powerCost) }', '{ EscapeString(spellInfo.castTime) }', '{ EscapeString(spellInfo.cooldown) }')");

                if (count < 500)
                {
                    query.Append(",");
                }
                else
                {
                    query.Append(";");
                    query.Append(Environment.NewLine);
                    query.Append(InsertBuild(tableName, fieldsName));
                    count = 0;
                }

                ++count;
                query.Append(Environment.NewLine);
            }

            query.ReplaceLast(',', ';');

            sql.WriteLine(query.ToString());
            sql.Close();
        }
示例#9
0
        public static string NpcTrainer()
        {
            if (Stuffing.NpcTrainers.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

            const string tableName  = "npc_trainer";
            const string primaryKey = "entry";

            string[] tableStructure = { "entry", "spell", "spellcost", "reqskill", "reqskillvalue", "reqlevel" };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.NpcTrainers.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var npcTrainer in Stuffing.NpcTrainers)
            {
                sqlQuery.Append("-- " + StoreGetters.GetName(StoreNameType.Unit, (int)npcTrainer.Key) +
                                Environment.NewLine);
                foreach (var trainerSpell in npcTrainer.Value.TrainerSpells)
                {
                    sqlQuery.Append("(" +
                                    npcTrainer.Key + ", " +
                                    trainerSpell.Spell + ", " +
                                    trainerSpell.Cost + ", " +
                                    trainerSpell.RequiredSkill + ", " +
                                    trainerSpell.RequiredSkillLevel + ", " +
                                    trainerSpell.RequiredLevel + ")," + " -- " +
                                    StoreGetters.GetName(StoreNameType.Spell, (int)trainerSpell.Spell, false) +
                                    Environment.NewLine);
                }
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
示例#10
0
        public static string NpcVendor()
        {
            if (Stuffing.NpcVendors.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

            const string tableName  = "npc_vendor";
            const string primaryKey = "entry";

            string[] tableStructure = { "entry", "slot", "item", "maxcount", "ExtendedCost" };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.NpcVendors.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var npcVendor in Stuffing.NpcVendors)
            {
                sqlQuery.Append("-- " + StoreGetters.GetName(StoreNameType.Unit, (int)npcVendor.Key) +
                                Environment.NewLine);
                foreach (var vendorItem in npcVendor.Value.VendorItems)
                {
                    sqlQuery.Append("(" +
                                    npcVendor.Key + ", " +
                                    vendorItem.Slot + ", " +
                                    vendorItem.ItemId + ", " +
                                    vendorItem.MaxCount + ", " +
                                    vendorItem.ExtendedCostId + ")," + " -- " +
                                    StoreGetters.GetName(StoreNameType.Item, (int)vendorItem.ItemId, false) +
                                    Environment.NewLine);
                }
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
示例#11
0
        public static string Loot()
        {
            if (Stuffing.Loots.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

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

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

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

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

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

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

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

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

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

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
示例#12
0
        public static string NpcText()
        {
            if (Stuffing.NpcTexts.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure (data got 32 fields, not 24)
            const string tableName = "npc_text";
            const string primaryKey = "Id";
            string[] tableStructure = {
                                          "Id", "Probability1", "Probability2", "Probability3", "Probability4",
                                          "Probability5", "Probability6", "Probability7", "Probability8", "Text1_1",
                                          "Text1_2", "Text1_3", "Text1_4", "Text1_5", "Text1_6", "Text1_7", "Text1_8",
                                          "Text2_1", "Text2_2", "Text2_3", "Text2_4", "Text2_5", "Text2_6", "Text2_7",
                                          "Text2_8", "Language1", "Language2", "Language3", "Language4", "Language5",
                                          "Language6", "Language7", "Language8", "EmoteId1_1", "EmoteId1_2",
                                          "EmoteId1_3", "EmoteId2_1", "EmoteId2_2", "EmoteId2_3", "EmoteId3_1",
                                          "EmoteId3_2", "EmoteId3_3", "EmoteId4_1", "EmoteId4_2", "EmoteId4_3",
                                          "EmoteId5_1", "EmoteId5_2", "EmoteId5_3", "EmoteId6_1", "EmoteId6_2",
                                          "EmoteId6_3", "EmoteId7_1", "EmoteId7_2", "EmoteId7_3", "EmoteId8_1",
                                          "EmoteId8_2", "EmoteId8_3", "EmoteId1_1", "EmoteId1_2", "EmoteId1_3",
                                          "EmoteId2_1", "EmoteId2_2", "EmoteId2_3", "EmoteId3_1", "EmoteId3_2",
                                          "EmoteId3_3", "EmoteId4_1", "EmoteId4_2", "EmoteId4_3", "EmoteId5_1",
                                          "EmoteId5_2", "EmoteId5_3", "EmoteId6_1", "EmoteId6_2", "EmoteId6_3",
                                          "EmoteId7_1", "EmoteId7_2", "EmoteId7_3", "EmoteId8_1", "EmoteId8_2",
                                          "EmoteId8_3"
                                      };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.NpcTexts.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var npcText in Stuffing.NpcTexts)
            {
                sqlQuery.Append("(" + npcText.Key + cs);

                foreach (var n in npcText.Value.Probabilities)
                    sqlQuery.Append(n + cs);

                foreach (var s in npcText.Value.Texts1)
                    sqlQuery.Append(SQLUtil.Stringify(s) + cs);

                foreach (var s in npcText.Value.Texts2)
                    sqlQuery.Append(SQLUtil.Stringify(s) + cs);

                foreach (int n in npcText.Value.Languages)
                    sqlQuery.Append(n + cs);

                foreach (var a in npcText.Value.EmoteDelays)
                    foreach (var n in a)
                        sqlQuery.Append(n + cs);

                var itr = 0;
                foreach (var a in npcText.Value.EmoteIds)
                    foreach (int n in a)
                    {
                        itr++;
                        sqlQuery.Append(n);
                        if (itr != npcText.Value.EmoteIds.Length * a.Length)
                            sqlQuery.Append(cs);
                    }

                sqlQuery.Append(")," + Environment.NewLine);
            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }
示例#13
0
        public static string NpcText()
        {
            if (Stuffing.NpcTexts.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure (data got 32 fields, not 24)
            const string tableName  = "npc_text";
            const string primaryKey = "Id";

            string[] tableStructure =
            {
                "Id",           "Probability1", "Probability2", "Probability3", "Probability4",
                "Probability5", "Probability6", "Probability7", "Probability8", "Text1_1",
                "Text1_2",      "Text1_3",      "Text1_4",      "Text1_5",      "Text1_6",     "Text1_7",    "Text1_8",
                "Text2_1",      "Text2_2",      "Text2_3",      "Text2_4",      "Text2_5",     "Text2_6",    "Text2_7",
                "Text2_8",      "Language1",    "Language2",    "Language3",    "Language4",   "Language5",
                "Language6",    "Language7",    "Language8",    "EmoteId1_1",   "EmoteId1_2",
                "EmoteId1_3",   "EmoteId2_1",   "EmoteId2_2",   "EmoteId2_3",   "EmoteId3_1",
                "EmoteId3_2",   "EmoteId3_3",   "EmoteId4_1",   "EmoteId4_2",   "EmoteId4_3",
                "EmoteId5_1",   "EmoteId5_2",   "EmoteId5_3",   "EmoteId6_1",   "EmoteId6_2",
                "EmoteId6_3",   "EmoteId7_1",   "EmoteId7_2",   "EmoteId7_3",   "EmoteId8_1",
                "EmoteId8_2",   "EmoteId8_3",   "EmoteId1_1",   "EmoteId1_2",   "EmoteId1_3",
                "EmoteId2_1",   "EmoteId2_2",   "EmoteId2_3",   "EmoteId3_1",   "EmoteId3_2",
                "EmoteId3_3",   "EmoteId4_1",   "EmoteId4_2",   "EmoteId4_3",   "EmoteId5_1",
                "EmoteId5_2",   "EmoteId5_3",   "EmoteId6_1",   "EmoteId6_2",   "EmoteId6_3",
                "EmoteId7_1",   "EmoteId7_2",   "EmoteId7_3",   "EmoteId8_1",   "EmoteId8_2",
                "EmoteId8_3"
            };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.NpcTexts.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var npcText in Stuffing.NpcTexts)
            {
                sqlQuery.Append("(" + npcText.Key + cs);

                foreach (var n in npcText.Value.Probabilities)
                {
                    sqlQuery.Append(n + cs);
                }

                foreach (var s in npcText.Value.Texts1)
                {
                    sqlQuery.Append(SQLUtil.Stringify(s) + cs);
                }

                foreach (var s in npcText.Value.Texts2)
                {
                    sqlQuery.Append(SQLUtil.Stringify(s) + cs);
                }

                foreach (int n in npcText.Value.Languages)
                {
                    sqlQuery.Append(n + cs);
                }

                foreach (var a in npcText.Value.EmoteDelays)
                {
                    foreach (var n in a)
                    {
                        sqlQuery.Append(n + cs);
                    }
                }

                var itr = 0;
                foreach (var a in npcText.Value.EmoteIds)
                {
                    foreach (int n in a)
                    {
                        itr++;
                        sqlQuery.Append(n);
                        if (itr != npcText.Value.EmoteIds.Length * a.Length)
                        {
                            sqlQuery.Append(cs);
                        }
                    }
                }

                sqlQuery.Append(")," + Environment.NewLine);
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
示例#14
0
        public static string Gossip()
        {
            if (Stuffing.Gossips.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure (data got 32 fields, not 24)
            const string tableName1 = "gossip_menu";

            string[] primaryKey1     = { "entry", "text_id" };
            string[] tableStructure1 = { "entry", "text_id" };

            const string tableName2  = "gossip_menu_option";
            const string primaryKey2 = "menu_id";

            string[] tableStructure2 =
            {
                "menu_id",   "id", "option_icon", "option_text", "box_coded",
                "box_money", "box_text"
            };

            // Delete1
            sqlQuery.Append(SQLUtil.DeleteQueryDouble(Stuffing.Gossips.Keys, primaryKey1, tableName1));

            // Insert1
            sqlQuery.Append(SQLUtil.InsertQueryHeader(tableStructure1, tableName1));

            // Insert1 rows
            foreach (var pair in Stuffing.Gossips.Keys)
            {
                sqlQuery.Append("(" + pair.Item1 + cs + pair.Item2 + ")," + Environment.NewLine);
            }

            sqlQuery = sqlQuery.ReplaceLast(',', ';');

            // We need a collection of the first items of a tuple
            var keyCollection = new Collection <uint>();

            foreach (var key in Stuffing.Gossips.Keys)
            {
                keyCollection.Add(key.Item1);
            }

            // Delete2
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(keyCollection, primaryKey2, tableName2));

            // If no gossip options exists, return what we got so far
            if (!Stuffing.Gossips.Values.Any(gossip => gossip.GossipOptions != null))
            {
                return(sqlQuery.ToString());
            }

            // Insert2
            sqlQuery.Append(SQLUtil.InsertQueryHeader(tableStructure2, tableName2));

            // Insert2 rows
            foreach (var gossip in Stuffing.Gossips)
            {
                if (gossip.Value.GossipOptions != null)
                {
                    foreach (var gossipOption in gossip.Value.GossipOptions)
                    {
                        sqlQuery.Append(
                            "(" +
                            gossip.Key.Item1 + cs +
                            gossipOption.Index + cs +
                            gossipOption.OptionIcon + cs +
                            SQLUtil.Stringify(gossipOption.OptionText) + cs +
                            (gossipOption.Box ? "1" : "0") + cs +
                            gossipOption.RequiredMoney + cs +
                            SQLUtil.Stringify(gossipOption.BoxText) + ")," + Environment.NewLine);
                    }
                }
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
示例#15
0
        public static string GameObjectTemplate()
        {
            if (Stuffing.GameObjectTemplates.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure (data got 32 fields, not 24)
            const string tableName  = "gameobject_template";
            const string primaryKey = "Id";

            string[] tableStructure =
            {
                "Id",         "Type",       "DisplayId",  "Name",       "IconName",   "CastCaption", "UnkString",
                "Data1",      "Data2",      "Data3",      "Data4",      "Data5",      "Data6",       "Data7",    "Data8",
                "Data9",      "Data10",     "Data11",     "Data12",     "Data13",     "Data14",      "Data15",   "Data16",
                "Data17",     "Data18",     "Data19",     "Data20",     "Data21",     "Data22",      "Data23",   "Data24",
                "Data25",     "Data26",     "Data27",     "Data28",     "Data29",     "Data30",      "Data31",
                "Data32",     "Size",       "QuestItem1", "QuestItem2", "QuestItem3", "QuestItem4",
                "QuestItem5", "QuestItem6", "UnknownUInt"
            };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.GameObjectTemplates.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var goTemplate in Stuffing.GameObjectTemplates)
            {
                sqlQuery.Append(
                    "(" +
                    goTemplate.Key + cs +
                    (int)goTemplate.Value.Type + cs +
                    goTemplate.Value.DisplayId + cs +
                    SQLUtil.Stringify(goTemplate.Value.Name) + cs +
                    SQLUtil.Stringify(goTemplate.Value.IconName) + cs +
                    SQLUtil.Stringify(goTemplate.Value.CastCaption) + cs +
                    SQLUtil.Stringify(goTemplate.Value.UnkString) + cs);

                foreach (var n in goTemplate.Value.Data)
                {
                    sqlQuery.Append(n + cs);
                }

                sqlQuery.Append(
                    goTemplate.Value.Size + cs);

                foreach (var n in goTemplate.Value.QuestItems)
                {
                    sqlQuery.Append(n + cs);
                }

                sqlQuery.Append(
                    goTemplate.Value.UnknownUInt + ")," + Environment.NewLine);
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
示例#16
0
        public static string NpcTrainer()
        {
            if (Stuffing.NpcTrainers.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            const string tableName = "npc_trainer";
            const string primaryKey = "entry";
            string[] tableStructure = { "entry", "spell", "spellcost", "reqskill", "reqskillvalue", "reqlevel" };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.NpcTrainers.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var npcTrainer in Stuffing.NpcTrainers)
            {
                sqlQuery.Append("-- " + StoreGetters.GetName(StoreNameType.Unit, (int)npcTrainer.Key) +
                                Environment.NewLine);
                foreach (var trainerSpell in npcTrainer.Value.TrainerSpells)
                {
                    sqlQuery.Append("(" +
                                    npcTrainer.Key + ", " +
                                    trainerSpell.Spell + ", " +
                                    trainerSpell.Cost + ", " +
                                    trainerSpell.RequiredSkill + ", " +
                                    trainerSpell.RequiredSkillLevel + ", " +
                                    trainerSpell.RequiredLevel + ")," + " -- " +
                                    StoreGetters.GetName(StoreNameType.Spell, (int)trainerSpell.Spell, false) +
                                    Environment.NewLine);
                }
            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }
示例#17
0
        public static string NpcTemplate()
        {
            if (Stuffing.UnitTemplates.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure
            const string tableName = "creature_template";
            const string primaryKey = "Id";
            string[] tableStructure = {
                                          "Id", "Name", "SubName", "IconName", "TypeFlags", "TypeFlags2", "Type ",
                                          "Family ", "Rank ", "KillCredit1 ", "KillCredit2 ", "UnkInt ", "PetSpellData",
                                          "DisplayId1", "DisplayId2", "DisplayId3", "DisplayId4", "Modifier1 ",
                                          "Modifier2 ", "RacialLeader", "QuestItem1", "QuestItem2", "QuestItem3",
                                          "QuestItem4", "QuestItem5", "QuestItem6", "MovementId ", "Expansion"
                                      };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.UnitTemplates.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var unitTemplate in Stuffing.UnitTemplates)
            {
                sqlQuery.Append(
                    "(" +
                    unitTemplate.Key + cs +
                    SQLUtil.Stringify(unitTemplate.Value.Name) + cs +
                    SQLUtil.Stringify(unitTemplate.Value.SubName) + cs +
                    SQLUtil.Stringify(unitTemplate.Value.IconName) + cs +
                    SQLUtil.Hexify((int) unitTemplate.Value.TypeFlags) + cs +
                    SQLUtil.Hexify((int) unitTemplate.Value.TypeFlags2) + cs +
                    (int) unitTemplate.Value.Type + cs +
                    (int) unitTemplate.Value.Family + cs +
                    (int) unitTemplate.Value.Rank + cs +
                    unitTemplate.Value.KillCredit1 + cs +
                    unitTemplate.Value.KillCredit2 + cs +
                    unitTemplate.Value.UnkInt + cs +
                    unitTemplate.Value.PetSpellData + cs);

                foreach (var n in unitTemplate.Value.DisplayIds)
                    sqlQuery.Append(n + cs);

                sqlQuery.Append(
                    unitTemplate.Value.Modifier1 + cs +
                    unitTemplate.Value.Modifier2 + cs +
                    (unitTemplate.Value.RacialLeader ? 1 : 0) + cs);

                foreach (var n in unitTemplate.Value.QuestItems)
                    sqlQuery.Append(n + cs);

                sqlQuery.Append(
                    unitTemplate.Value.MovementId + cs +
                    (int) unitTemplate.Value.Expansion + ")," + Environment.NewLine);

            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }
示例#18
0
        public static string NpcTemplate()
        {
            if (Stuffing.UnitTemplates.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

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

            string[] tableStructure =
            {
                "Id",         "Name",         "SubName",      "IconName",     "TypeFlags",  "TypeFlags2",   "Type ",
                "Family ",    "Rank ",        "KillCredit1 ", "KillCredit2 ", "UnkInt ",    "PetSpellData",
                "DisplayId1", "DisplayId2",   "DisplayId3",   "DisplayId4",   "Modifier1 ",
                "Modifier2 ", "RacialLeader", "QuestItem1",   "QuestItem2",   "QuestItem3",
                "QuestItem4", "QuestItem5",   "QuestItem6",   "MovementId ",  "Expansion"
            };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.UnitTemplates.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var unitTemplate in Stuffing.UnitTemplates)
            {
                sqlQuery.Append(
                    "(" +
                    unitTemplate.Key + cs +
                    SQLUtil.Stringify(unitTemplate.Value.Name) + cs +
                    SQLUtil.Stringify(unitTemplate.Value.SubName) + cs +
                    SQLUtil.Stringify(unitTemplate.Value.IconName) + cs +
                    SQLUtil.Hexify((int)unitTemplate.Value.TypeFlags) + cs +
                    SQLUtil.Hexify((int)unitTemplate.Value.TypeFlags2) + cs +
                    (int)unitTemplate.Value.Type + cs +
                    (int)unitTemplate.Value.Family + cs +
                    (int)unitTemplate.Value.Rank + cs +
                    unitTemplate.Value.KillCredit1 + cs +
                    unitTemplate.Value.KillCredit2 + cs +
                    unitTemplate.Value.UnkInt + cs +
                    unitTemplate.Value.PetSpellData + cs);

                foreach (var n in unitTemplate.Value.DisplayIds)
                {
                    sqlQuery.Append(n + cs);
                }

                sqlQuery.Append(
                    unitTemplate.Value.Modifier1 + cs +
                    unitTemplate.Value.Modifier2 + cs +
                    (unitTemplate.Value.RacialLeader ? 1 : 0) + cs);

                foreach (var n in unitTemplate.Value.QuestItems)
                {
                    sqlQuery.Append(n + cs);
                }

                sqlQuery.Append(
                    unitTemplate.Value.MovementId + cs +
                    (int)unitTemplate.Value.Expansion + ")," + Environment.NewLine);
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
示例#19
0
        public static string NpcVendor()
        {
            if (Stuffing.NpcVendors.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            const string tableName = "npc_vendor";
            const string primaryKey = "entry";
            string[] tableStructure = { "entry", "slot", "item", "maxcount", "ExtendedCost" };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.NpcVendors.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var npcVendor in Stuffing.NpcVendors)
            {
                sqlQuery.Append("-- " + StoreGetters.GetName(StoreNameType.Unit, (int)npcVendor.Key) +
                                Environment.NewLine);
                foreach (var vendorItem in npcVendor.Value.VendorItems)
                {
                    sqlQuery.Append("(" +
                                    npcVendor.Key + ", " +
                                    vendorItem.Slot + ", " +
                                    vendorItem.ItemId + ", " +
                                    vendorItem.MaxCount + ", " +
                                    vendorItem.ExtendedCostId + ")," + " -- " +
                                    StoreGetters.GetName(StoreNameType.Item, (int)vendorItem.ItemId, false) +
                                    Environment.NewLine);
                }
            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }
示例#20
0
            public string Build()
            {
                // If we only have rows with comment, do not print any query
                if (Rows.All(row => !String.IsNullOrWhiteSpace(row.HeaderComment)))
                    return "-- " + SQLUtil.AddBackQuotes(Table) + " has empty data." + Environment.NewLine;

                var result = new StringBuilder();

                if (Delete != null)
                    result.Append(Delete.Build());
                result.Append(InsertHeader.Build());

                var rowsStrings = Rows.Select(row => row.Build()).ToList();

                rowsStrings.Sort();
                foreach (var rowString in rowsStrings)
                    result.Append(rowString);

                result.Append(Environment.NewLine);

                return result.ReplaceLast(',', ';').ToString();
            }
示例#21
0
        public static string Gossip()
        {
            if (Stuffing.Gossips.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure (data got 32 fields, not 24)
            const string tableName1 = "gossip_menu";
            string[] primaryKey1 = {"entry", "text_id"};
            string[] tableStructure1 = {"entry", "text_id"};

            const string tableName2 = "gossip_menu_option";
            const string primaryKey2 = "menu_id";
            string[] tableStructure2 = {
                                           "menu_id", "id", "option_icon", "option_text", "box_coded",
                                           "box_money", "box_text"
                                       };

            // Delete1
            sqlQuery.Append(SQLUtil.DeleteQueryDouble(Stuffing.Gossips.Keys, primaryKey1, tableName1));

            // Insert1
            sqlQuery.Append(SQLUtil.InsertQueryHeader(tableStructure1, tableName1));

            // Insert1 rows
            foreach (var pair in Stuffing.Gossips.Keys)
                sqlQuery.Append("(" + pair.Item1 + cs + pair.Item2 + ")," + Environment.NewLine);

            sqlQuery = sqlQuery.ReplaceLast(',', ';');

            // We need a collection of the first items of a tuple
            var keyCollection = new Collection<uint>();
            foreach (var key in Stuffing.Gossips.Keys)
                keyCollection.Add(key.Item1);

            // Delete2
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(keyCollection, primaryKey2, tableName2));

            // If no gossip options exists, return what we got so far
            if (!Stuffing.Gossips.Values.Any(gossip => gossip.GossipOptions != null))
                return sqlQuery.ToString();

            // Insert2
            sqlQuery.Append(SQLUtil.InsertQueryHeader(tableStructure2, tableName2));

            // Insert2 rows
            foreach (var gossip in Stuffing.Gossips)
            {
                if (gossip.Value.GossipOptions != null)
                    foreach (var gossipOption in gossip.Value.GossipOptions)
                    {
                        sqlQuery.Append(
                            "(" +
                            gossip.Key.Item1 + cs +
                            gossipOption.Index + cs +
                            gossipOption.OptionIcon + cs +
                            SQLUtil.Stringify(gossipOption.OptionText) + cs +
                            (gossipOption.Box ? "1" : "0") + cs +
                            gossipOption.RequiredMoney + cs +
                            SQLUtil.Stringify(gossipOption.BoxText) + ")," + Environment.NewLine);
                    }
            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }
示例#22
0
        public static string QuestTemplate()
        {
            if (Stuffing.QuestTemplates.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure
            const string tableName = "quest_template";
            const string primaryKey = "Id";
            string[] tableStructure = {
                                          "Id", "Method", "Level", "MinLevel", "ZoneOrSort", "Type", "SuggestedPlayers",
                                          "RequiredFactionId1", "RequiredFactionId2", "RequiredFactionValue1",
                                          "RequiredFactionValue2", "NextQuestId", "RewardXPId", "RewardOrRequiredMoney",
                                          "RewardMoneyMaxLevel", "RewardSpell", "RewardSpellCast", "RewardHonor",
                                          "RewardHonorMultiplier", "SourceItemId", "Flags", "RewardTitleId",
                                          "RequiredPlayerKills", "RewardTalents", "RewardArenaPoints", "RewardSkillId",
                                          "RewardSkillPoints", "RewardReputationMask", "QuestGiverPortrait",
                                          "QuestTurnInPortrait", "RewardItemId1", "RewardItemId2",
                                          "RewardItemId3", "RewardItemId4", "RewardItemCount1", "RewardItemCount2",
                                          "RewardItemCount3", "RewardItemCount4", "RewardChoiceItemId1",
                                          "RewardChoiceItemId2", "RewardChoiceItemId3", "RewardChoiceItemId4",
                                          "RewardChoiceItemId5", "RewardChoiceItemId6", "RewardChoiceItemCount1",
                                          "RewardChoiceItemCount2", "RewardChoiceItemCount3", "RewardChoiceItemCount4",
                                          "RewardChoiceItemCount5", "RewardChoiceItemCount6", "RewardFactionId1",
                                          "RewardFactionId2", "RewardFactionId3", "RewardFactionId4", "RewardFactionId5",
                                          "RewardReputationId1", "RewardReputationId2", "RewardReputationId3",
                                          "RewardReputationId4", "RewardReputationId5", "RewardReputationIdOverride1",
                                          "RewardReputationIdOverride2", "RewardReputationIdOverride3",
                                          "RewardReputationIdOverride4", "RewardReputationIdOverride5", "PointMapId",
                                          "PointX", "PointY", "PointOption", "Title", "Objectives", "Details", "EndText",
                                          "ReturnText", "RequiredNpcOrGo1", "RequiredNpcOrGo2", "RequiredNpcOrGo3",
                                          "RequiredNpcOrGo4", "RequiredNpcOrGoCount1", "RequiredNpcOrGoCount2",
                                          "RequiredNpcOrGoCount3", "RequiredNpcOrGoCount4", "RequiredSourceItemId1",
                                          "RequiredSourceItemId2", "RequiredSourceItemId3", "RequiredSourceItemId4",
                                          "RequiredSourceItemCount1", "RequiredSourceItemCount2",
                                          "RequiredSourceItemCount3", "RequiredSourceItemCount4", "RequiredItemId1",
                                          "RequiredItemId2", "RequiredItemId3", "RequiredItemId4", "RequiredItemId5",
                                          "RequiredItemId6", "RequiredItemCount1", "RequiredItemCount2",
                                          "RequiredItemCount3", "RequiredItemCount4", "RequiredItemCount5",
                                          "RequiredItemCount6", "RequiredSpell", "ObjectiveText1", "ObjectiveText2",
                                          "ObjectiveText3", "ObjectiveText4", "RewardCurrencyId1", "RewardCurrencyId2",
                                          "RewardCurrencyId3", "RewardCurrencyId4", "RewardCurrencyCount1",
                                          "RewardCurrencyCount2", "RewardCurrencyCount3", "RewardCurrencyCount4",
                                          "RequiredCurrencyId1", "RequiredCurrencyId2", "RequiredCurrencyId3",
                                          "RequiredCurrencyId4", "RequiredCurrencyCount1", "RequiredCurrencyCount2",
                                          "RequiredCurrencyCount3", "RequiredCurrencyCount4", "QuestGiverTextWindow",
                                          "QuestGiverTextName", "QuestTurnTextWindow", "QuestTurnTargetName",
                                          "SoundAccept", "SoundTurnIn"
                                      };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.QuestTemplates.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var quest in Stuffing.QuestTemplates)
            {
                sqlQuery.Append(
                    "(" +
                    quest.Key + cs +
                    (int)quest.Value.Method + cs +
                    quest.Value.Level + cs +
                    quest.Value.MinLevel + cs +
                    (int)quest.Value.ZoneOrSort + cs +
                    (int)quest.Value.Type + cs +
                    quest.Value.SuggestedPlayers + cs);

                foreach (var n in quest.Value.RequiredFactionId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RequiredFactionValue)
                    sqlQuery.Append(n + cs);

                sqlQuery.Append(
                    quest.Value.NextQuestId + cs +
                    quest.Value.RewardXPId + cs +
                    quest.Value.RewardOrRequiredMoney + cs +
                    quest.Value.RewardMoneyMaxLevel + cs +
                    quest.Value.RewardSpell + cs +
                    quest.Value.RewardSpellCast + cs +
                    quest.Value.RewardHonor + cs +
                    quest.Value.RewardHonorMultiplier + cs +
                    quest.Value.SourceItemId + cs +
                    SQLUtil.Hexify((int)quest.Value.Flags) + cs +
                    quest.Value.RewardTitleId + cs +
                    quest.Value.RequiredPlayerKills + cs +
                    quest.Value.RewardTalents + cs +
                    quest.Value.RewardArenaPoints + cs +
                    // quest.Value.RewardUnknown + cs + // Always 0
                    quest.Value.RewardSkillId + cs +
                    quest.Value.RewardSkillPoints + cs +
                    quest.Value.RewardReputationMask + cs +
                    quest.Value.QuestGiverPortrait + cs +
                    quest.Value.QuestTurnInPortrait + cs);

                foreach (var n in quest.Value.RewardItemId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RewardItemCount)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RewardChoiceItemId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RewardChoiceItemCount)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RewardFactionId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RewardReputationId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RewardReputationIdOverride)
                    sqlQuery.Append(n + cs);

                sqlQuery.Append(
                    quest.Value.PointMapId + cs +
                    quest.Value.PointX + cs +
                    quest.Value.PointY + cs +
                    quest.Value.PointOption + cs +
                    SQLUtil.Stringify(quest.Value.Title) + cs +
                    SQLUtil.Stringify(quest.Value.Objectives) + cs +
                    SQLUtil.Stringify(quest.Value.Details) + cs +
                    SQLUtil.Stringify(quest.Value.EndText) + cs +
                    SQLUtil.Stringify(quest.Value.ReturnText) + cs);

                foreach (var n in quest.Value.RequiredNpcOrGo)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RequiredNpcOrGoCount)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RequiredSourceItemId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RequiredSourceItemCount)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RequiredItemId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RequiredItemCount)
                    sqlQuery.Append(n + cs);

                sqlQuery.Append(quest.Value.RequiredSpell + cs);

                foreach (var s in quest.Value.ObjectiveTexts)
                    sqlQuery.Append(SQLUtil.Stringify(s) + cs);
                foreach (var n in quest.Value.RewardCurrencyId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RewardCurrencyCount)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RequiredCurrencyId)
                    sqlQuery.Append(n + cs);
                foreach (var n in quest.Value.RequiredCurrencyCount)
                    sqlQuery.Append(n + cs);

                sqlQuery.Append(
                    SQLUtil.Stringify(quest.Value.QuestGiverTextWindow) + cs +
                    SQLUtil.Stringify(quest.Value.QuestGiverTextName) + cs +
                    SQLUtil.Stringify(quest.Value.QuestTurnTextWindow) + cs +
                    SQLUtil.Stringify(quest.Value.QuestTurnTargetName) + cs +
                    quest.Value.SoundAccept + cs +
                    quest.Value.SoundTurnIn + ")," + " -- " + quest.Value.Title + Environment.NewLine);
            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }
示例#23
0
        public static string PageText()
        {
            if (Stuffing.PageTexts.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            const string tableName = "page_Text";
            const string primaryKey = "entry";
            string[] tableStructure = {"entry", "text", "next_page"};

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.PageTexts.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var pageText in Stuffing.PageTexts)
            {
                sqlQuery.Append(
                    "(" +
                    pageText.Key + cs +
                    SQLUtil.Stringify(pageText.Value.Text) + cs +
                    pageText.Value.NextPageId + ")," + Environment.NewLine);
            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }
示例#24
0
        public static string QuestTemplate()
        {
            if (Stuffing.QuestTemplates.IsEmpty)
            {
                return(string.Empty);
            }

            var sqlQuery = new StringBuilder(String.Empty);

            const string tableName  = "quest_template";
            const string primaryKey = "Id";

            string[] tableStructure =
            {
                "Id",                            "Method",                        "Level",                         "MinLevel",                      "ZoneOrSort",               "Type",                   "SuggestedPlayers",
                "RequiredFactionId1",            "RequiredFactionId2",            "RequiredFactionValue1",         "RequiredFactionValue2",
                "NextQuestIdChain",              "RewardXPId",                    "RewardOrRequiredMoney",         "RewardMoneyMaxLevel",           "RewardSpell",
                "RewardSpellCast",               "RewardHonor",                   "RewardHonorMultiplier",         "SourceItemId",                  "Flags",                    "MinimapTargetMark",
                "RewardTitleId",                 "RequiredPlayerKills",           "RewardTalents",                 "RewardArenaPoints",             "RewardSkillId",            "RewardSkillPoints",
                "RewardReputationMask",          "QuestGiverPortrait",            "QuestTurnInPortrait",           "RewardItemId1",                 "RewardItemId2",            "RewardItemId3",
                "RewardItemId4",                 "RewardItemCount1",              "RewardItemCount2",              "RewardItemCount3",              "RewardItemCount4",         "RewardChoiceItemId1",
                "RewardChoiceItemId2",           "RewardChoiceItemId3",           "RewardChoiceItemId4",           "RewardChoiceItemId5",           "RewardChoiceItemId6",
                "RewardChoiceItemCount1",        "RewardChoiceItemCount2",        "RewardChoiceItemCount3",        "RewardChoiceItemCount4",        "RewardChoiceItemCount5",
                "RewardChoiceItemCount6",        "RewardFactionId1",              "RewardFactionId2",              "RewardFactionId3",              "RewardFactionId4",         "RewardFactionId5",
                "RewardFactionValueId1",         "RewardFactionValueId2",         "RewardFactionValueId3",         "RewardFactionValueId4",         "RewardFactionValueId5",
                "RewardFactionValueIdOverride1", "RewardFactionValueIdOverride2", "RewardFactionValueIdOverride3", "RewardFactionValueIdOverride4",
                "RewardFactionValueIdOverride5", "PointMapId",                    "PointX",                        "PointY",                        "PointOption",              "Title",                  "Objectives",           "Details","EndText",
                "CompletedText",                 "RequiredNpcOrGo1",              "RequiredNpcOrGo2",              "RequiredNpcOrGo3",              "RequiredNpcOrGo4",         "RequiredNpcOrGoCount1",  "RequiredNpcOrGoCount2",
                "RequiredNpcOrGoCount3",         "RequiredNpcOrGoCount4",         "RequiredSourceItemId1",         "RequiredSourceItemId2",         "RequiredSourceItemId3",
                "RequiredSourceItemId4",         "RequiredSourceItemCount1",      "RequiredSourceItemCount2",      "RequiredSourceItemCount3",      "RequiredSourceItemCount4",
                "RequiredItemId1",               "RequiredItemId2",               "RequiredItemId3",               "RequiredItemId4",               "RequiredItemId5",          "RequiredItemId6",        "RequiredItemCount1",
                "RequiredItemCount2",            "RequiredItemCount3",            "RequiredItemCount4",            "RequiredItemCount5",            "RequiredItemCount6",       "RequiredSpell",          "ObjectiveText1",
                "ObjectiveText2",                "ObjectiveText3",                "ObjectiveText4",                "RewardCurrencyId1",             "RewardCurrencyId2",        "RewardCurrencyId3",      "RewardCurrencyId4",
                "RewardCurrencyCount1",          "RewardCurrencyCount2",          "RewardCurrencyCount3",          "RewardCurrencyCount4",          "RequiredCurrencyId1",      "RequiredCurrencyId2",
                "RequiredCurrencyId3",           "RequiredCurrencyId4",           "RequiredCurrencyCount1",        "RequiredCurrencyCount2",        "RequiredCurrencyCount3",   "RequiredCurrencyCount4",
                "QuestGiverTextWindow",          "QuestGiverTargetName",          "QuestTurnTextWindow",           "QuestTurnTargetName",           "SoundAccept",              "SoundTurnIn"
            };

            // Delete
            sqlQuery.Append(SQLUtil.DeleteQuerySingle(Stuffing.QuestTemplates.Keys, primaryKey, tableName));

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

            // Insert rows
            foreach (var quest in Stuffing.QuestTemplates)
            {
                sqlQuery.Append(
                    "(" +
                    quest.Key + cs +
                    (int)quest.Value.Method + cs +
                    quest.Value.Level + cs +
                    quest.Value.MinLevel + cs +
                    (int)quest.Value.ZoneOrSort + cs +
                    (int)quest.Value.Type + cs +
                    quest.Value.SuggestedPlayers + cs);

                foreach (var n in quest.Value.RequiredFactionId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RequiredFactionValue)
                {
                    sqlQuery.Append(n + cs);
                }

                sqlQuery.Append(
                    quest.Value.NextQuestIdChain + cs +
                    quest.Value.RewardXPId + cs +
                    quest.Value.RewardOrRequiredMoney + cs +
                    quest.Value.RewardMoneyMaxLevel + cs +
                    quest.Value.RewardSpell + cs +
                    quest.Value.RewardSpellCast + cs +
                    quest.Value.RewardHonor + cs +
                    quest.Value.RewardHonorMultiplier + cs +
                    quest.Value.SourceItemId + cs +
                    SQLUtil.Hexify((int)quest.Value.Flags) + cs +
                    quest.Value.MinimapTargetMark + cs +
                    quest.Value.RewardTitleId + cs +
                    quest.Value.RequiredPlayerKills + cs +
                    quest.Value.RewardTalents + cs +
                    quest.Value.RewardArenaPoints + cs +
                    quest.Value.RewardSkillId + cs +
                    quest.Value.RewardSkillPoints + cs +
                    quest.Value.RewardReputationMask + cs +
                    quest.Value.QuestGiverPortrait + cs +
                    quest.Value.QuestTurnInPortrait + cs);

                foreach (var n in quest.Value.RewardItemId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RewardItemCount)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RewardChoiceItemId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RewardChoiceItemCount)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RewardFactionId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RewardFactionValueId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RewardFactionValueIdOverride)
                {
                    sqlQuery.Append(n + cs);
                }

                sqlQuery.Append(
                    quest.Value.PointMapId + cs +
                    quest.Value.PointX + cs +
                    quest.Value.PointY + cs +
                    quest.Value.PointOption + cs +
                    SQLUtil.Stringify(quest.Value.Title) + cs +
                    SQLUtil.Stringify(quest.Value.Objectives) + cs +
                    SQLUtil.Stringify(quest.Value.Details) + cs +
                    SQLUtil.Stringify(quest.Value.EndText) + cs +
                    SQLUtil.Stringify(quest.Value.CompletedText) + cs);

                foreach (var n in quest.Value.RequiredNpcOrGo)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RequiredNpcOrGoCount)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RequiredSourceItemId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RequiredSourceItemCount)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RequiredItemId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RequiredItemCount)
                {
                    sqlQuery.Append(n + cs);
                }

                sqlQuery.Append(quest.Value.RequiredSpell + cs);

                foreach (var s in quest.Value.ObjectiveTexts)
                {
                    sqlQuery.Append(SQLUtil.Stringify(s) + cs);
                }
                foreach (var n in quest.Value.RewardCurrencyId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RewardCurrencyCount)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RequiredCurrencyId)
                {
                    sqlQuery.Append(n + cs);
                }
                foreach (var n in quest.Value.RequiredCurrencyCount)
                {
                    sqlQuery.Append(n + cs);
                }

                sqlQuery.Append(
                    SQLUtil.Stringify(quest.Value.QuestGiverTextWindow) + cs +
                    SQLUtil.Stringify(quest.Value.QuestGiverTargetName) + cs +
                    SQLUtil.Stringify(quest.Value.QuestTurnTextWindow) + cs +
                    SQLUtil.Stringify(quest.Value.QuestTurnTargetName) + cs +
                    quest.Value.SoundAccept + cs +
                    quest.Value.SoundTurnIn + ")," + " -- " + quest.Value.Title + Environment.NewLine);
            }

            return(sqlQuery.ReplaceLast(',', ';').ToString());
        }
示例#25
0
        public static string Loot()
        {
            if (Stuffing.Loots.IsEmpty)
                return string.Empty;

            var sqlQuery = new StringBuilder(String.Empty);

            // Not TDB structure
            const string tableName = "LootTemplate";
            string[] primaryKey = { "Id", "Type" };
            string[] tableStructure = {"Id", "Type", "ItemId", "Count"};

            // Can't cast the collection directly
            ICollection<Tuple<uint, uint>> lootKeys = new Collection<Tuple<uint, uint>>();
            foreach (var tuple in Stuffing.Loots.Keys)
            {
                lootKeys.Add(new Tuple<uint, uint>(tuple.Item1, (uint)tuple.Item2));
            }

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

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

            // Insert rows
            foreach (var loot in Stuffing.Loots)
            {
                StoreNameType storeType = StoreNameType.None;
                switch (Stuffing.Loots.Keys.First().Item2)
                {
                    case ObjectType.Item:
                        storeType = StoreNameType.Item;
                        break;
                    case ObjectType.Corpse:
                    case ObjectType.Unit:
                        storeType = StoreNameType.Unit;
                        break;
                    case ObjectType.Container:
                    case ObjectType.GameObject:
                        storeType = StoreNameType.GameObject;
                        break;
                }
                sqlQuery.Append("-- " + StoreGetters.GetName(storeType, (int) loot.Key.Item1) +
                                "(" + loot.Value.Gold + " gold)" + Environment.NewLine);
                foreach (var lootItem in loot.Value.LootItems)
                {
                    sqlQuery.Append(
                        "(" +
                        loot.Key.Item1 + cs +
                        (int) loot.Key.Item2 + cs +
                        lootItem.ItemId + cs +
                        lootItem.Count + ")," + " -- " +
                        StoreGetters.GetName(StoreNameType.Item, (int)lootItem.ItemId, false) +
                        Environment.NewLine);

                }
            }

            return sqlQuery.ReplaceLast(',', ';').ToString();
        }