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); }
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(); }
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); }
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; }
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';"; }
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; }
public static string LocalesQuest() { if (Storage.LocalesQuests.IsEmpty()) { return(String.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.locales_quest)) { return(String.Empty); } const string tableName = "quest_template_locale"; var rowsIns = new List <QueryBuilder.SQLInsertRow>(); var rowsUpd = new List <QueryBuilder.SQLUpdateRow>(); foreach (var localesQuest in Settings.SQLOrderByKey ? Storage.LocalesQuests.OrderBy(blub => blub.Key).ToList() : Storage.LocalesQuests.ToList()) { if (SQLDatabase.LocalesQuestStores != null && SQLDatabase.LocalesQuestStores.ContainsKey(Tuple.Create(localesQuest.Key.Item1, localesQuest.Key.Item2))) { var row = new QueryBuilder.SQLUpdateRow(); var localesQuestDB = SQLDatabase.LocalesQuestStores[Tuple.Create(localesQuest.Key.Item1, localesQuest.Key.Item2)]; if (!Utilities.EqualValues(localesQuestDB.LogTitle, localesQuest.Value.Item1.LogTitle)) { row.AddValue("LogTitle", localesQuest.Value.Item1.LogTitle); } if (!Utilities.EqualValues(localesQuestDB.LogDescription, localesQuest.Value.Item1.LogDescription)) { row.AddValue("LogDescription", localesQuest.Value.Item1.LogDescription); } if (!Utilities.EqualValues(localesQuestDB.QuestDescription, localesQuest.Value.Item1.QuestDescription)) { row.AddValue("QuestDescription", localesQuest.Value.Item1.QuestDescription); } if (!Utilities.EqualValues(localesQuestDB.AreaDescription, localesQuest.Value.Item1.AreaDescription)) { row.AddValue("AreaDescription", localesQuest.Value.Item1.AreaDescription); } if (!Utilities.EqualValues(localesQuestDB.QuestCompletionLog, localesQuest.Value.Item1.QuestCompletionLog)) { row.AddValue("QuestCompletionLog", localesQuest.Value.Item1.QuestCompletionLog); } if (!Utilities.EqualValues(localesQuestDB.PortraitGiverText, localesQuest.Value.Item1.PortraitGiverText)) { row.AddValue("PortraitGiverText", localesQuest.Value.Item1.PortraitGiverText); } if (!Utilities.EqualValues(localesQuestDB.PortraitGiverName, localesQuest.Value.Item1.PortraitGiverName)) { row.AddValue("PortraitGiverName", localesQuest.Value.Item1.PortraitGiverName); } if (!Utilities.EqualValues(localesQuestDB.PortraitTurnInText, localesQuest.Value.Item1.PortraitTurnInText)) { row.AddValue("PortraitTurnInText", localesQuest.Value.Item1.PortraitTurnInText); } if (!Utilities.EqualValues(localesQuestDB.PortraitTurnInName, localesQuest.Value.Item1.PortraitTurnInName)) { row.AddValue("PortraitTurnInName", localesQuest.Value.Item1.PortraitTurnInName); } if (!Utilities.EqualValues(localesQuestDB.VerifiedBuild, localesQuest.Value.Item1.VerifiedBuild)) { row.AddValue("VerifiedBuild", localesQuest.Value.Item1.VerifiedBuild); } row.AddWhere("ID", localesQuest.Key.Item1); row.AddWhere("locale", localesQuest.Key.Item2); row.Table = tableName; rowsUpd.Add(row); } else // insert new { var row = new QueryBuilder.SQLInsertRow(); row.AddValue("ID", localesQuest.Key.Item1); row.AddValue("locale", localesQuest.Key.Item2); row.AddValue("LogTitle", localesQuest.Value.Item1.LogTitle); row.AddValue("LogDescription", localesQuest.Value.Item1.LogDescription); row.AddValue("QuestDescription", localesQuest.Value.Item1.QuestDescription); row.AddValue("AreaDescription", localesQuest.Value.Item1.AreaDescription); row.AddValue("PortraitGiverText", localesQuest.Value.Item1.AreaDescription); row.AddValue("PortraitGiverName", localesQuest.Value.Item1.PortraitGiverName); row.AddValue("PortraitTurnInText", localesQuest.Value.Item1.PortraitTurnInText); row.AddValue("PortraitTurnInName", localesQuest.Value.Item1.PortraitTurnInName); row.AddValue("QuestCompletionLog", localesQuest.Value.Item1.QuestCompletionLog); row.AddValue("VerifiedBuild", localesQuest.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';"); }
public static string Gossip() { if (Storage.Gossips.IsEmpty) { return(String.Empty); } // `creature_template` var gossipIds = new Dictionary <uint, UnitGossip>(); foreach (var gossip in Storage.Gossips) { if (gossip.Value.ObjectType != ObjectType.Unit) { continue; } // no support for entries with multiple gossips (i.e changed by script) if (gossipIds.ContainsKey(gossip.Value.ObjectEntry)) { continue; } UnitGossip a; a.GossipId = gossip.Key.Item1; gossipIds.Add(gossip.Value.ObjectEntry, a); } var entries = gossipIds.Keys.ToList(); var gossipIdsDb = SQLDatabase.GetDict <uint, UnitGossip>(entries); var result = SQLUtil.CompareDicts(gossipIds, gossipIdsDb, StoreNameType.Unit); // `gossip` if (SQLConnector.Enabled) { var query = new StringBuilder("SELECT `entry`,`text_id` FROM `world`.`gossip_menu` WHERE "); 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.ObjectType), (int)gossip.Value.ObjectEntry, false); rows.Add(row); } result += new QueryBuilder.SQLInsert("gossip_menu", rows, 2).Build(); } // `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.GossipOptions == null) { continue; } foreach (var gossipOption in gossip.Value.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 world.gossip_menu_option WHERE menu_id={0} AND id={1};", gossip.Key.Item1, gossipOption.Index); 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.ObjectType), (int)gossip.Value.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.ObjectType), (int)gossip.Value.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.GossipOptions != null) { 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); row.Comment = StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.ObjectType), (int)gossip.Value.ObjectEntry, false); rows.Add(row); } } } result += new QueryBuilder.SQLInsert("gossip_menu_option", rows, 2).Build(); } return(result); }
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()); }
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; }
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); }
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; }
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(); }
public static string QuestObjective() { var result = ""; if (Storage.QuestObjectives.IsEmpty()) { return(String.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.quest_template)) { return(String.Empty); } var entries = Storage.QuestObjectives.Keys(); var templatesDb = SQLDatabase.GetDict <uint, QuestInfoObjective>(entries, "Id"); result += SQLUtil.CompareDicts(Storage.QuestObjectives, templatesDb, StoreNameType.QuestObjective, "Id"); var rowsIns = new List <QueryBuilder.SQLInsertRow>(); var rowsUpd = new List <QueryBuilder.SQLUpdateRow>(); foreach (var questObjectives in Storage.QuestObjectives) { foreach (var visualEffectIds in questObjectives.Value.Item1.VisualEffectIds) { if (SQLConnector.Enabled) { var query = string.Format("SELECT `VisualEffect`, `VerifiedBuild` FROM {0}.quest_visual_effect WHERE `Id`={1} AND `Index`={2};", Settings.TDBDatabase, questObjectives.Key, visualEffectIds.Index); using (var reader = SQLConnector.ExecuteQuery(query)) { if (reader.HasRows) // possible update { while (reader.Read()) { var row = new QueryBuilder.SQLUpdateRow(); if (!Utilities.EqualValues(reader.GetValue(0), visualEffectIds.VisualEffect)) { row.AddValue("VisualEffect", visualEffectIds.VisualEffect); } if (!Utilities.EqualValues(reader.GetValue(1), questObjectives.Value.Item1.VerifiedBuild)) { row.AddValue("VerifiedBuild", questObjectives.Value.Item1.VerifiedBuild); } row.AddWhere("Id", questObjectives.Key); row.AddWhere("Index", visualEffectIds.Index); row.Table = "quest_visual_effect"; if (row.ValueCount != 0) { rowsUpd.Add(row); } } } else // insert { var row = new QueryBuilder.SQLInsertRow(); row.AddValue("Id", questObjectives.Key); row.AddValue("Index", visualEffectIds.Index); row.AddValue("VisualEffect", visualEffectIds.VisualEffect); row.AddValue("VerifiedBuild", questObjectives.Value.Item1.VerifiedBuild); rowsIns.Add(row); } } } else // insert { var row = new QueryBuilder.SQLInsertRow(); row.AddValue("Id", questObjectives.Key); row.AddValue("Index", visualEffectIds.Index); row.AddValue("VisualEffect", visualEffectIds.VisualEffect); row.AddValue("VerifiedBuild", questObjectives.Value.Item1.VerifiedBuild); rowsIns.Add(row); } } } result += new QueryBuilder.SQLInsert("quest_visual_effect", rowsIns, 2).Build() + new QueryBuilder.SQLUpdate(rowsUpd).Build(); return(result); }
public static string Gossip() { if (Storage.Gossips.IsEmpty) return String.Empty; // `creature_template` var gossipIds = new Dictionary<uint, UnitGossip>(); foreach (var gossip in Storage.Gossips) { if (gossip.Value.ObjectType != ObjectType.Unit) continue; // no support for entries with multiple gossips (i.e changed by script) if (gossipIds.ContainsKey(gossip.Value.ObjectEntry)) continue; UnitGossip a; a.GossipId = gossip.Key.Item1; gossipIds.Add(gossip.Value.ObjectEntry, a); } var entries = gossipIds.Keys.ToList(); var gossipIdsDb = SQLDatabase.GetDict<uint, UnitGossip>(entries); var result = SQLUtil.CompareDicts(gossipIds, gossipIdsDb, StoreNameType.Unit); // `gossip` if (SQLConnector.Enabled) { var query = new StringBuilder("SELECT `entry`,`text_id` FROM `world`.`gossip_menu` WHERE "); 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.ObjectType), (int) gossip.Value.ObjectEntry, false); rows.Add(row); } result += new QueryBuilder.SQLInsert("gossip_menu", rows, 2).Build(); } // `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.GossipOptions == null) continue; foreach (var gossipOption in gossip.Value.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 world.gossip_menu_option WHERE menu_id={0} AND id={1};", gossip.Key.Item1, gossipOption.Index); 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.ObjectType), (int) gossip.Value.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.ObjectType), (int)gossip.Value.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.GossipOptions != null) 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); row.Comment = StoreGetters.GetName(Utilities.ObjectTypeToStore(gossip.Value.ObjectType), (int) gossip.Value.ObjectEntry, false); rows.Add(row); } } result += new QueryBuilder.SQLInsert("gossip_menu_option", rows, 2).Build(); } return result; }
public static string LocalesQuestObjectives() { if (Storage.LocalesQuestObjectives.IsEmpty()) { return(String.Empty); } if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.locales_quest_objectives)) { return(String.Empty); } const string tableName = "quest_objectives_locale"; var rowsIns = new List <QueryBuilder.SQLInsertRow>(); var rowsUpd = new List <QueryBuilder.SQLUpdateRow>(); foreach (var localesQuestObjective in Settings.SQLOrderByKey ? Storage.LocalesQuestObjectives.OrderBy(blub => blub.Key).ToList() : Storage.LocalesQuestObjectives.ToList()) { if (SQLDatabase.LocalesQuestObjectiveStores != null && SQLDatabase.LocalesQuestObjectiveStores.ContainsKey(Tuple.Create(localesQuestObjective.Key.Item1, localesQuestObjective.Key.Item2))) { var row = new QueryBuilder.SQLUpdateRow(); var localesQuestObjectiveDB = SQLDatabase.LocalesQuestObjectiveStores[Tuple.Create(localesQuestObjective.Key.Item1, localesQuestObjective.Key.Item2)]; if (!Utilities.EqualValues(localesQuestObjectiveDB.QuestId, localesQuestObjective.Value.Item1.QuestId)) { row.AddValue("QuestId", localesQuestObjective.Value.Item1.QuestId); } if (!Utilities.EqualValues(localesQuestObjectiveDB.StorageIndex, localesQuestObjective.Value.Item1.StorageIndex)) { row.AddValue("StorageIndex", localesQuestObjective.Value.Item1.StorageIndex); } if (!Utilities.EqualValues(localesQuestObjectiveDB.Description, localesQuestObjective.Value.Item1.Description)) { row.AddValue("Description", localesQuestObjective.Value.Item1.Description); } if (!Utilities.EqualValues(localesQuestObjectiveDB.VerifiedBuild, localesQuestObjective.Value.Item1.VerifiedBuild)) { row.AddValue("VerifiedBuild", localesQuestObjective.Value.Item1.VerifiedBuild); } row.AddWhere("ID", localesQuestObjective.Key.Item1); row.AddWhere("locale", localesQuestObjective.Key.Item2); row.Table = tableName; rowsUpd.Add(row); } else // insert new { var row = new QueryBuilder.SQLInsertRow(); row.AddValue("ID", localesQuestObjective.Key.Item1); row.AddValue("locale", localesQuestObjective.Key.Item2); row.AddValue("QuestId", localesQuestObjective.Value.Item1.QuestId); row.AddValue("StorageIndex", localesQuestObjective.Value.Item1.StorageIndex); row.AddValue("Description", localesQuestObjective.Value.Item1.Description); row.AddValue("VerifiedBuild", localesQuestObjective.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';"); }
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';"); }
public static string GameObject(Dictionary<Guid, GameObject> gameObjects) { if (gameObjects.Count == 0) 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(GameObjectField.GAMEOBJECT_BYTES_1), out uf)) { var bytes = uf.UInt32Value; state = (bytes & 0x000000FF); animprogress = Convert.ToUInt32((bytes & 0xFF000000) >> 24); } var spawnTimeSecs = go.GetDefaultSpawnTime(); row.AddValue("guid", "@GUID+" + count, noQuotes: true); row.AddValue("id", gameobject.Key.GetEntry()); row.AddValue("map", go.Map); row.AddValue("spawnMask", 1); row.AddValue("phaseMask", go.PhaseMask); 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); row.AddValue("rotation0", go.Movement.Rotation.X); row.AddValue("rotation1", go.Movement.Rotation.Y); row.AddValue("rotation2", go.Movement.Rotation.Z); row.AddValue("rotation3", go.Movement.Rotation.W); row.AddValue("spawntimesecs", spawnTimeSecs); 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 ++count; rows.Add(row); } var result = new StringBuilder(); // delete query for GUIDs var delete = new QueryBuilder.SQLDelete(Tuple.Create("@GUID+0", "@GUID+" + count), "guid", tableName); result.Append(delete.Build()); var sql = new QueryBuilder.SQLInsert(tableName, rows, withDelete: false); result.Append(sql.Build()); return result.ToString(); }
public static string LocalesQuest() { if (Storage.LocalesQuests.IsEmpty()) return String.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.locales_quest)) return String.Empty; const string tableName = "quest_template_locale"; var rowsIns = new List<QueryBuilder.SQLInsertRow>(); var rowsUpd = new List<QueryBuilder.SQLUpdateRow>(); foreach (var localesQuest in Settings.SQLOrderByKey ? Storage.LocalesQuests.OrderBy(blub => blub.Key).ToList() : Storage.LocalesQuests.ToList()) { if (SQLDatabase.LocalesQuestStores != null && SQLDatabase.LocalesQuestStores.ContainsKey(Tuple.Create(localesQuest.Key.Item1, localesQuest.Key.Item2))) { var row = new QueryBuilder.SQLUpdateRow(); var localesQuestDB = SQLDatabase.LocalesQuestStores[Tuple.Create(localesQuest.Key.Item1, localesQuest.Key.Item2)]; if (!Utilities.EqualValues(localesQuestDB.LogTitle, localesQuest.Value.Item1.LogTitle)) row.AddValue("LogTitle", localesQuest.Value.Item1.LogTitle); if (!Utilities.EqualValues(localesQuestDB.LogDescription, localesQuest.Value.Item1.LogDescription)) row.AddValue("LogDescription", localesQuest.Value.Item1.LogDescription); if (!Utilities.EqualValues(localesQuestDB.QuestDescription, localesQuest.Value.Item1.QuestDescription)) row.AddValue("QuestDescription", localesQuest.Value.Item1.QuestDescription); if (!Utilities.EqualValues(localesQuestDB.AreaDescription, localesQuest.Value.Item1.AreaDescription)) row.AddValue("AreaDescription", localesQuest.Value.Item1.AreaDescription); if (!Utilities.EqualValues(localesQuestDB.QuestCompletionLog, localesQuest.Value.Item1.QuestCompletionLog)) row.AddValue("QuestCompletionLog", localesQuest.Value.Item1.QuestCompletionLog); if (!Utilities.EqualValues(localesQuestDB.PortraitGiverText, localesQuest.Value.Item1.PortraitGiverText)) row.AddValue("PortraitGiverText", localesQuest.Value.Item1.PortraitGiverText); if (!Utilities.EqualValues(localesQuestDB.PortraitGiverName, localesQuest.Value.Item1.PortraitGiverName)) row.AddValue("PortraitGiverName", localesQuest.Value.Item1.PortraitGiverName); if (!Utilities.EqualValues(localesQuestDB.PortraitTurnInText, localesQuest.Value.Item1.PortraitTurnInText)) row.AddValue("PortraitTurnInText", localesQuest.Value.Item1.PortraitTurnInText); if (!Utilities.EqualValues(localesQuestDB.PortraitTurnInName, localesQuest.Value.Item1.PortraitTurnInName)) row.AddValue("PortraitTurnInName", localesQuest.Value.Item1.PortraitTurnInName); if (!Utilities.EqualValues(localesQuestDB.VerifiedBuild, localesQuest.Value.Item1.VerifiedBuild)) row.AddValue("VerifiedBuild", localesQuest.Value.Item1.VerifiedBuild); row.AddWhere("ID", localesQuest.Key.Item1); row.AddWhere("locale", localesQuest.Key.Item2); row.Table = tableName; rowsUpd.Add(row); } else // insert new { var row = new QueryBuilder.SQLInsertRow(); row.AddValue("ID", localesQuest.Key.Item1); row.AddValue("locale", localesQuest.Key.Item2); row.AddValue("LogTitle", localesQuest.Value.Item1.LogTitle); row.AddValue("LogDescription", localesQuest.Value.Item1.LogDescription); row.AddValue("QuestDescription", localesQuest.Value.Item1.QuestDescription); row.AddValue("AreaDescription", localesQuest.Value.Item1.AreaDescription); row.AddValue("PortraitGiverText", localesQuest.Value.Item1.AreaDescription); row.AddValue("PortraitGiverName", localesQuest.Value.Item1.PortraitGiverName); row.AddValue("PortraitTurnInText", localesQuest.Value.Item1.PortraitTurnInText); row.AddValue("PortraitTurnInName", localesQuest.Value.Item1.PortraitTurnInName); row.AddValue("QuestCompletionLog", localesQuest.Value.Item1.QuestCompletionLog); row.AddValue("VerifiedBuild", localesQuest.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';"; }
public static string QuestObjective() { var result = ""; if (Storage.QuestObjectives.IsEmpty()) return String.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.quest_template)) return String.Empty; var entries = Storage.QuestObjectives.Keys(); var templatesDb = SQLDatabase.GetDict<uint, QuestInfoObjective>(entries, "Id"); result += SQLUtil.CompareDicts(Storage.QuestObjectives, templatesDb, StoreNameType.QuestObjective, "Id"); var rowsIns = new List<QueryBuilder.SQLInsertRow>(); var rowsUpd = new List<QueryBuilder.SQLUpdateRow>(); foreach (var questObjectives in Storage.QuestObjectives) { foreach (var visualEffectIds in questObjectives.Value.Item1.VisualEffectIds) { if (SQLConnector.Enabled) { var query = string.Format("SELECT `VisualEffect`, `VerifiedBuild` FROM {0}.quest_visual_effect WHERE `Id`={1} AND `Index`={2};", Settings.TDBDatabase, questObjectives.Key, visualEffectIds.Index); using (var reader = SQLConnector.ExecuteQuery(query)) { if (reader.HasRows) // possible update { while (reader.Read()) { var row = new QueryBuilder.SQLUpdateRow(); if (!Utilities.EqualValues(reader.GetValue(0), visualEffectIds.VisualEffect)) row.AddValue("VisualEffect", visualEffectIds.VisualEffect); if (!Utilities.EqualValues(reader.GetValue(1), questObjectives.Value.Item1.VerifiedBuild)) row.AddValue("VerifiedBuild", questObjectives.Value.Item1.VerifiedBuild); row.AddWhere("Id", questObjectives.Key); row.AddWhere("Index", visualEffectIds.Index); row.Table = "quest_visual_effect"; if (row.ValueCount != 0) rowsUpd.Add(row); } } else // insert { var row = new QueryBuilder.SQLInsertRow(); row.AddValue("Id", questObjectives.Key); row.AddValue("Index", visualEffectIds.Index); row.AddValue("VisualEffect", visualEffectIds.VisualEffect); row.AddValue("VerifiedBuild", questObjectives.Value.Item1.VerifiedBuild); rowsIns.Add(row); } } } else // insert { var row = new QueryBuilder.SQLInsertRow(); row.AddValue("Id", questObjectives.Key); row.AddValue("Index", visualEffectIds.Index); row.AddValue("VisualEffect", visualEffectIds.VisualEffect); row.AddValue("VerifiedBuild", questObjectives.Value.Item1.VerifiedBuild); rowsIns.Add(row); } } } result += new QueryBuilder.SQLInsert("quest_visual_effect", rowsIns, 2).Build() + new QueryBuilder.SQLUpdate(rowsUpd).Build(); return result; }
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; }
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()); }
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; }
public static string GameObject(Dictionary <Guid, GameObject> gameObjects) { if (gameObjects.Count == 0) { 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(GameObjectField.GAMEOBJECT_BYTES_1), out uf)) { var bytes = uf.UInt32Value; state = (bytes & 0x000000FF); animprogress = Convert.ToUInt32((bytes & 0xFF000000) >> 24); } var spawnTimeSecs = go.GetDefaultSpawnTime(); if (gameobject.Key.GetEntry() != 0) { row.AddValue("id", gameobject.Key.GetEntry()); row.AddValue("map", go.Map); row.AddValue("spawnMask", 1); row.AddValue("phaseMask", go.PhaseMask); 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); row.AddValue("rotation0", go.Movement.Rotation.X); row.AddValue("rotation1", go.Movement.Rotation.Y); row.AddValue("rotation2", go.Movement.Rotation.Z); row.AddValue("rotation3", go.Movement.Rotation.W); row.AddValue("spawntimesecs", spawnTimeSecs); 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 { ++count; } rows.Add(row); } } var result = new StringBuilder(); var sql = new QueryBuilder.SQLInsert(tableName, rows, withDelete: false); result.Append(sql.Build()); return(result.ToString()); }
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(); }
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 + " - " + 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(); }
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()); }
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; }
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); }
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); }
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); }
public static string LocalesQuestObjectives() { if (Storage.LocalesQuestObjectives.IsEmpty()) return String.Empty; if (!Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.locales_quest_objectives)) return String.Empty; const string tableName = "quest_objectives_locale"; var rowsIns = new List<QueryBuilder.SQLInsertRow>(); var rowsUpd = new List<QueryBuilder.SQLUpdateRow>(); foreach (var localesQuestObjective in Settings.SQLOrderByKey ? Storage.LocalesQuestObjectives.OrderBy(blub => blub.Key).ToList() : Storage.LocalesQuestObjectives.ToList()) { if (SQLDatabase.LocalesQuestObjectiveStores != null && SQLDatabase.LocalesQuestObjectiveStores.ContainsKey(Tuple.Create(localesQuestObjective.Key.Item1, localesQuestObjective.Key.Item2))) { var row = new QueryBuilder.SQLUpdateRow(); var localesQuestObjectiveDB = SQLDatabase.LocalesQuestObjectiveStores[Tuple.Create(localesQuestObjective.Key.Item1, localesQuestObjective.Key.Item2)]; if (!Utilities.EqualValues(localesQuestObjectiveDB.QuestId, localesQuestObjective.Value.Item1.QuestId)) row.AddValue("QuestId", localesQuestObjective.Value.Item1.QuestId); if (!Utilities.EqualValues(localesQuestObjectiveDB.StorageIndex, localesQuestObjective.Value.Item1.StorageIndex)) row.AddValue("StorageIndex", localesQuestObjective.Value.Item1.StorageIndex); if (!Utilities.EqualValues(localesQuestObjectiveDB.Description, localesQuestObjective.Value.Item1.Description)) row.AddValue("Description", localesQuestObjective.Value.Item1.Description); if (!Utilities.EqualValues(localesQuestObjectiveDB.VerifiedBuild, localesQuestObjective.Value.Item1.VerifiedBuild)) row.AddValue("VerifiedBuild", localesQuestObjective.Value.Item1.VerifiedBuild); row.AddWhere("ID", localesQuestObjective.Key.Item1); row.AddWhere("locale", localesQuestObjective.Key.Item2); row.Table = tableName; rowsUpd.Add(row); } else // insert new { var row = new QueryBuilder.SQLInsertRow(); row.AddValue("ID", localesQuestObjective.Key.Item1); row.AddValue("locale", localesQuestObjective.Key.Item2); row.AddValue("QuestId", localesQuestObjective.Value.Item1.QuestId); row.AddValue("StorageIndex", localesQuestObjective.Value.Item1.StorageIndex); row.AddValue("Description", localesQuestObjective.Value.Item1.Description); row.AddValue("VerifiedBuild", localesQuestObjective.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';"; }
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()); }
public static string QuestPOIWoD() { if (Storage.QuestPOIWoDs.IsEmpty()) return String.Empty; var sql = string.Empty; if (Settings.SQLOutputFlag.HasAnyFlagBit(SQLOutput.quest_poi)) { var entries = Storage.QuestPOIWoDs.Keys(); var poiDb = SQLDatabase.GetDict<uint, uint, QuestPOIWoD>(entries, "QuestID", "Idx1"); sql = SQLUtil.CompareDicts(Storage.QuestPOIWoDs, poiDb, StoreNameType.Quest, StoreNameType.None, "QuestID", "Idx1"); } // 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.QuestPOIWoDs.OrderBy(blub => blub.Key.Item1)) { 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("BlobIndex", quest.Value.Item1.BlobIndex); row.AddValue("Idx1", point.Value); // Not on sniffs row.AddValue("Idx2", point.Key.Index); // Not on sniffs row.AddValue("X", point.Key.X); row.AddValue("Y", point.Key.Y); row.AddValue("VerifiedBuild", point.Key.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; }