private static void ReadConfigFile() { // Password intentionally not checked for length, empty password is allowed if (Host.Length == 0 || User.Length == 0 || Port.Length == 0 || Database.Length == 0) { NeedInitMysql = true; } if (SQLiteFilename.Length == 0) { SQLiteFilename = "SpellEditor"; } if (Language.Length == 0) { Language = "enUS"; } if (BindingsDirectory.Length == 0 || DbcDirectory.Length == 0) { BindingsDirectory = Environment.CurrentDirectory + "\\Bindings_335_wotlk"; DbcDirectory = Environment.CurrentDirectory + "\\DBC_335_wotlk"; } if (WoWVersion.Length == 0) { WoWVersion = WoWVersionManager.GetInstance().LookupVersion(WoWVersionManager.DefaultVersionString).Version; } }
protected string GetAllLocaleStringsForField(string fieldName, Dictionary <string, object> record) { uint numLocales = WoWVersionManager.GetInstance().SelectedVersion().NumLocales; string name = ""; bool notFirstItem = false; for (int i = 1; i <= numLocales; ++i) { if (!record.ContainsKey(fieldName + i)) { continue; } uint strOffset = (uint)record[fieldName + i]; if (strOffset > 0) { string areaName = Reader.LookupStringOffset(strOffset); if (areaName.Length > 0) { name += areaName; if (notFirstItem && i != numLocales) { name += ", "; } else { notFirstItem = true; } } } } return(name); }
public List <string> GetAvailableFields(IVisualListEntry item) { List <string> availableKeys; List <string> usedKeys; var keyResource = WoWVersionManager.GetInstance().LookupKeyResource(); if (item is VisualKitListEntry) { availableKeys = keyResource.KitColumnKeys.ToList(); usedKeys = VisualKits.Select(kitEntry => kitEntry as VisualKitListEntry) .Select(kitEntry => kitEntry?.KitName) .ToList(); } else if (item is VisualEffectListEntry effectEntry) { availableKeys = keyResource.EffectColumnKeys.ToList(); usedKeys = VisualKits.Select(kitEntry => kitEntry as VisualKitListEntry) .Where(kitEntry => uint.Parse(kitEntry.KitRecord[0].ToString()) == effectEntry.ParentKitId) .Select(kitEntry => kitEntry?.GetAllEffectsAndAttachmentsEntries()) .SelectMany(list => list.Select(listEntry => listEntry as VisualEffectListEntry) .Select(listEntry => listEntry.EffectName)) .ToList(); } else { throw new Exception($"Unknown IVisualListEntry type: { item.GetType() }\n{ item }"); } availableKeys.RemoveAll(key => usedKeys.Contains(key)); return(availableKeys); }
private List <IVisualListEntry> GetAllKitEntries(IDatabaseAdapter adapter) { var kitList = new List <IVisualListEntry>(); var visualResults = adapter.Query("SELECT * FROM spellvisual WHERE ID = " + VisualId); if (visualResults == null || visualResults.Rows.Count == 0) { return(kitList); } var visualRecord = visualResults.Rows[0]; foreach (var key in WoWVersionManager.GetInstance().LookupKeyResource().KitColumnKeys) { var kitIdStr = visualRecord[key].ToString(); var success = uint.TryParse(kitIdStr, out var kitId); if (!success || kitId == 0) { continue; } var kitResults = adapter.Query("SELECT * FROM spellvisualkit WHERE ID = " + kitId); if (kitResults == null || kitResults.Rows.Count == 0) { continue; } var kitRecord = kitResults.Rows[0]; var visualId = uint.Parse(visualRecord["ID"].ToString()); kitList.Add(new VisualKitListEntry(key, visualId, kitRecord, adapter)); } return(kitList); }
public SpellRange() { ReadDBCFile(Config.Config.DbcDirectory + "\\SpellRange.dbc"); int boxIndex = 0; for (uint i = 0; i < Header.RecordCount; ++i) { var record = Body.RecordMaps[i]; var versionId = WoWVersionManager.GetInstance().SelectedVersion().Identity; // Ugly hardcode string name = ""; string rangeString = ""; // 335 handling if (versionId == 335) { float MinimumRangeHostile = (float)record["MinimumRangeHostile"]; float MaximumRangeHostile = (float)record["MaximumRangeHostile"]; float MinimumRangeFriend = (float)record["MinimumRangeFriend"]; float MaximumRangeFriend = (float)record["MaximumRangeFriend"]; name = GetAllLocaleStringsForField("Name", record); name += $"\nHostile: { MinimumRangeHostile } - { MaximumRangeHostile }\t Friend: { MinimumRangeFriend } - { MaximumRangeFriend }"; rangeString = MaximumRangeHostile > MaximumRangeFriend?MaximumRangeHostile.ToString() : MaximumRangeFriend.ToString(); } else { // 112 versionId fields name = GetAllLocaleStringsForField("Name", record); float minRange = (float)record["MinimumRange"]; float maxRange = (float)record["MaximumRange"]; name += $"\n{minRange} - {maxRange}"; rangeString = maxRange.ToString(); } var id = (uint)record["ID"]; var entry = new SpellRangeBoxContainer(id, name, boxIndex); entry.RangeString = rangeString; Lookups.Add(entry); boxIndex++; } Reader.CleanStringsMap(); // In this DBC we don't actually need to keep the DBC data now that // we have extracted the lookup tables. Nulling it out may help with // memory consumption. Reader = null; Body = null; }
private List <VisualEffectListEntry> findAllEffects(IDatabaseAdapter adapter) { var effectList = new List <VisualEffectListEntry>(); foreach (var key in WoWVersionManager.GetInstance().LookupKeyResource().EffectColumnKeys) { var effectIdStr = KitRecord[key].ToString(); var success = uint.TryParse(effectIdStr, out var effectId); if (!success || effectId == 0) { continue; } var effectResults = adapter.Query("SELECT * FROM spellvisualeffectname WHERE ID = " + effectId); if (effectResults == null || effectResults.Rows.Count == 0) { continue; } var effectRecord = effectResults.Rows[0]; var parentId = uint.Parse(KitRecord[0].ToString()); effectList.Add(new VisualEffectListEntry(key, parentId, ParentVisualId, effectRecord, adapter)); } return(effectList); }
private string GetAllEffects() { var effectsFound = new List <string>(); foreach (var kitKey in WoWVersionManager.GetInstance().LookupKeyResource().EffectColumnKeys) { var effectIdStr = KitRecord[kitKey].ToString(); var success = uint.TryParse(effectIdStr, out var effectId); if (!success || effectId == 0) { continue; } var effectResults = _Adapter.Query("SELECT * FROM spellvisualeffectname WHERE ID = " + effectId); if (effectResults == null || effectResults.Rows.Count == 0) { continue; } var effectRecord = effectResults.Rows[0]; var effectPath = effectRecord["FilePath"].ToString(); effectPath = effectPath.Length > 70 ? effectPath.Substring(0, 67) + "..." : effectPath; effectsFound.Add(" " + effectPath); } return(string.Join("\n", effectsFound)); }
private void BuildConfigWindow() { ConfigGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); ConfigGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); ConfigGrid.ColumnDefinitions.Add(new ColumnDefinition { Width = GridLength.Auto }); // WoW Version row ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); // Database type row ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); // Bindings and directory settings, 2 rows ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); // Database type specific grid ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = new GridLength(1, GridUnitType.Star) }); var databaseLabel = new Label { Content = "Database type:" }; var databaseButton = new SplitButton(); var versionLabel = new Label { Content = "WoW version: " }; var versionButton = new SplitButton(); var sqlite = new DatabaseType { Index = 0, Name = "SQLite", Identity = DatabaseIdentifier.SQLite }; var mysql = new DatabaseType { Index = 1, Name = "MySQL", Identity = DatabaseIdentifier.MySQL }; TypeContainer.AddDatabaseType(sqlite); TypeContainer.AddDatabaseType(mysql); databaseButton.Items.Add(sqlite.Name); databaseButton.Items.Add(mysql.Name); var index = 0; var i = 0; foreach (var version in WoWVersionManager.GetInstance().AllVersions()) { versionButton.Items.Add(version.Version); if (version.Version.Equals(Config.WoWVersion, StringComparison.CurrentCultureIgnoreCase)) { index = i; } ++i; } versionButton.SelectedIndex = index; databaseButton.SelectedIndex = TypeContainer.GetDatabaseTypeForId(defaultConfigType).Index; databaseButton.MinWidth = 150; versionButton.MinWidth = 150; databaseButton.SelectionChanged += DatabaseButton_SelectionChanged; versionButton.SelectionChanged += VersionButton_SelectionChanged; databaseLabel.Margin = new Thickness(10); databaseButton.Margin = new Thickness(10); versionLabel.Margin = new Thickness(10); versionButton.Margin = new Thickness(10); int currentRow = 0; Grid.SetRow(databaseLabel, currentRow); Grid.SetColumn(databaseLabel, 0); Grid.SetRow(databaseButton, currentRow++); Grid.SetColumn(databaseButton, 1); Grid.SetColumnSpan(databaseButton, 2); Grid.SetRow(versionLabel, 1); Grid.SetColumn(versionLabel, 0); Grid.SetRow(versionButton, currentRow++); Grid.SetColumn(versionButton, 1); Grid.SetColumnSpan(versionButton, 2); ConfigGrid.Children.Add(databaseLabel); ConfigGrid.Children.Add(databaseButton); ConfigGrid.Children.Add(versionLabel); ConfigGrid.Children.Add(versionButton); currentRow = BuildBindingsAndDbcUI(ConfigGrid, currentRow); ++currentRow; BuildSQLiteConfigUI(currentRow); BuildMySQLConfigUI(currentRow); var selectedConfigType = TypeContainer.LookupDatabaseTypeName(databaseButton.SelectedItem.ToString()); ToggleGridVisibility(selectedConfigType.Identity); }