Example #1
0
        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;
            }
        }
Example #2
0
        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);
        }
Example #5
0
        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;
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }