diff --git a/.gitignore b/.gitignore index c0b2fb77..ef7d8e9d 100644 --- a/.gitignore +++ b/.gitignore @@ -179,3 +179,5 @@ FakesAssemblies/ #Ignore '.vs' directory .vs/ + +*.driveupload* diff --git a/Documentation/Languages/enUS.xaml b/Documentation/Languages/enUS.xaml index 25ba45d9..6af59e54 100644 --- a/Documentation/Languages/enUS.xaml +++ b/Documentation/Languages/enUS.xaml @@ -51,14 +51,18 @@ Cast Time: Duration: Range: - Caster Aura State: Spell Level: Base Level: Max Level: Spell Visual 1: Spell Visual 2: Speed: + + Caster Aura State: Target Aura State: + Caster Aura State Not: + Target Aura State Not: + Recovery Time: Category Recovery Time: Spell Missile ID: @@ -84,6 +88,15 @@ Prevention Type: Spell Damage Type: Requires Spell Focus: + + Caster Aura Spell: + Target Aura Spell: + Caster Aura Spell Not: + Target Aura Spell Not: + + Stance Bar Order: + Power Display Id: + Rune Cost: Spell Description Variables: Spell Priority: @@ -161,11 +174,19 @@ Attributes Ex6: Attributes Ex7: Creature Type: - Stances: + + Required Stances: + Not Castable In Stances: + Current Icon: + Active Icon: + New Icon: Filter icons: - Confirm + + Save Spell Icon + Save Active Icon + Controls icon width & height (pixels) Import/Export Drop Tables @@ -175,10 +196,19 @@ Import Export Import and Export - Log Book + Log Book Config Configuration Editor Multilingual + + Copy Effect + Paste Effect + Clear Effect + Reset Effect + Clone Effect 1 + Clone Effect 2 + Clone Effect 3 + @@ -205,14 +235,16 @@ Are you sure you want to exit? Make sure you have saved before doing this action or all progress will be lost! ARE YOU SURE? This will drop all SQL tables used by this program and create them again allowing you to start over. This feature should only be used when you want to reset the tables and import new DBC files. - Copy an existing record? - Input the spell ID to copy from. - ERROR: Input spell ID was not an integer. - Input the new spell ID. - ERROR: Input spell ID was not an integer. + Copy an existing record + Input the spell ID to copy from: + ERROR: The copied spell ID was not an integer or it doesn't exist. + Input the new spell ID: + ERROR: The new spell ID was not an integer. ERROR: That spell ID is already taken. - Creating a new spell from scratch is currently not implemented. Please copy an existing spell. - "Created new record with ID {0} sucessfully. + Use first available ID + Input how many copies: + ERROR: The amount of copies was not an integer or it was an invalid amount. + Created {0} new record(s) starting at ID {1} sucessfully. Input the spell ID to delete. ERROR: Input spell ID was not an integer. Deleted record successfully. @@ -663,7 +695,7 @@ None | Defense | - Healthless 20 Percent | + Healthless 20% | Berserking | Frozen | Judgement | @@ -674,7 +706,7 @@ Warrior Victory Rush | Unknown11 | Faerie Fire | - Healthless 35 Percent | + Healthless 35% | Conflagrate | Swiftmend | Deadly Poison | @@ -684,7 +716,7 @@ Unknown20 | Unknown21 | Unknown22 | - Health Above 75 Percent + Health Above 75% Non-Equip | diff --git a/Documentation/Languages/frFR.xaml b/Documentation/Languages/frFR.xaml index 503e5864..95b7301e 100644 --- a/Documentation/Languages/frFR.xaml +++ b/Documentation/Languages/frFR.xaml @@ -51,14 +51,18 @@ Temps d'incantation : Durée : Portée : - Statut du lanceur : Niveau du sort : Niveau de base du sort : Niveau Max : Visuel 1 : Visuel 2 : Vélocité : + Statut de la cible : + Statut du lanceur : + Statut du lanceur non : + Statut de la cible non : + Temps de recharge : Temps de recharge de la catégorie : ID du Missile: @@ -84,6 +88,15 @@ Type de prévention : Type de dégâts : Requiert le Focus : + + Sort d’aura du lanceur : + Sort d’aura de la cible : + Sort d’aura du lanceur Exclure: + Sort d’aura de la cible Exclure: + + Ordre de la barre de posture : + ID d’affichage de la ressource : + Coût runique: Variables de la description : Spell Priority: @@ -161,11 +174,19 @@ Attributs Ex6 : Attributs Ex7 : Type de créature : - Postures : + + Postures requises : + Incantation impossible dans ces postures : + Icône actuelle : + Icône d’action: + Nouvelle icône : Filtre d'icônes : - Confirmer + + Sauver icône sort + Sauver icône action + Contrôle la largeur & la hauteur de l'icône (en pixels) Importer/Exporter Table tronquée @@ -177,6 +198,16 @@ Importer et exporter Log Book Multilingue + + Copier l’effet + Coller l’effet + Effacer l’effet + Réinitialiser l’effet + Cloner l’effet 1 + Cloner l’effet 2 + Cloner l’effet 3 + + @@ -205,14 +236,17 @@ Êtes-vous sûr de vouloir quitter? Assurez-vous d’avoir enregistré avant d’effectuer cette action, sinon tout votre progrès sera perdu ! ÊTES-VOUS SÛR ? This will drop all SQL tables used by this program and create them again allowing you to start over. This feature should only be used when you want to reset the tables and import new DBC files. - Copier d'un sort existant ? - Entrez l'identifiant du sort pour copier. - ERREUR: L'identifiant du sort saisi n'était pas un entier. - Entrez le nouvel identifiant du sort. - ERREUR: L'identifiant du sort saisi n'était pas un entier. - ERREUR: cet identifiant est déjà pris. - La création d'un nouveau sort à partir de rien n'est actuellement pas implémentée. Veuillez copier un sort existant. - Nouveau sort créé avec succès sous l’ID {0}. + Copier un enregistrement existant + Entrez l’ID du sort à copier : + ERREUR: L’ID du sort copié n’était pas un entier ou n’existe pas. + Entrez le nouvel ID du sort : + ERREUR: Le nouvel ID du sort n’était pas un entier. + ERREUR: Cet ID de sort est déjà utilisé. + Utiliser le premier ID disponible + Entrez le nombre de copies : + ERREUR: Le nombre de copies n’était pas un entier ou était invalide. + Création de {0} nouvel(s) enregistrement(s) à partir de l’ID {1} réussie. + Entrez l'identifiant du sort à supprimer. ERREUR: L'identifiant du sort saisi n'était pas un entier. Sort supprimé avec succès. @@ -661,30 +695,30 @@ Nuage de gaz - None | - Defense | - Healthless 20 Percent | - Berserking | - Frozen | - Judgement | - Unknown6 | - Hunter Parry | - Unknown8 | - Unknown9 | - Warrior Victory Rush | - Unknown11 | - Faerie Fire | - Healthless 35 Percent | - Conflagrate | - Swiftmend | - Deadly Poison | - Enrage | - Bleeding | - Parry | - Unknown20 | - Unknown21 | - Unknown22 | - Health Above 75 Percent + Aucun | + Défense | + Vie inférieure à 20% | + Furie berserker | + Gelé | + Jugement | + Inconnu 6 | + Parade du chasseur | + Inconnu 8 | + Inconnu 9 | + Ruée victorieuse du guerrier | + Inconnu 11 | + Lucioles | + Vie inférieure à 35% | + Conflagration | + Rétablissement rapide | + Poison mortel | + Enrager | + Saignement | + Parade | + Inconnu 20 | + Inconnu 21 | + Inconnu 22 | + Vie supérieure à 75% Non-équipé | diff --git a/Documentation/Languages/zhCN.xaml b/Documentation/Languages/zhCN.xaml index 5b442d06..1f20ba52 100644 --- a/Documentation/Languages/zhCN.xaml +++ b/Documentation/Languages/zhCN.xaml @@ -50,15 +50,19 @@ 机制类型: 施法时间: 持续时间: - 施法距离: - 施法者光环状态: + 施法距离: 法术等级: 基础等级: 最大等级: 法术视觉效果A: 法术视觉效果B: 光效飞行速度(?): + + 施法者光环状态: 目标光环状态: + 施法者光环状态(非): + 目标光环状态(非): + 冷却时间: 类型冷却时间: 法术弹道ID(?): @@ -84,6 +88,15 @@ 沉默类型: 法术伤害类型: 施法需要对象(区域): + + 施法者光环法术: + 目标光环法术: + 排除施法者光环法术: + 排除目标光环法术: + + 姿态栏顺序: + 能量显示ID: + 符文消耗: 法术变量详细描述: Spell Priority: @@ -161,11 +174,19 @@ 属性 Ex6: 属性 Ex7: 生物类型: - 姿态: + + 需要的姿态: + 无法在这些姿态下施放: + 当前图标: + 动作图标: + 新图标: 过滤图标: - 确认 + + 保存法术图标 + 保存动作图标 + 控制图标的宽度和高度(像素) 导入/导出 清空表格 @@ -177,6 +198,16 @@ 导入和导出 Log Book 多语言 + + 复制效果 + 粘贴效果 + 清除效果 + 重置效果 + 克隆效果 1 + 克隆效果 2 + 克隆效果 3 + + @@ -205,14 +236,17 @@ 您确定要退出吗? 请确保在执行此操作之前已保存,否则将丢失所有进度! 您确定要清空表格吗? This will drop all SQL tables used by this program and create them again allowing you to start over. This feature should only be used when you want to reset the tables and import new DBC files. - 复制现有记录? - 输入要复制的法术ID。 - 错误:输入的法术ID不是整数。 - 输入新的法术ID。 - 错误:输入的法术ID不是整数。 - 错误:该法术ID已经存在。 - 从头开始创建一个新法术目前还没有实现。请复制现有的法术。 - "成功创建ID为{0}的新法术。 + 复制现有记录 + 请输入要复制的法术 ID: + 错误:被复制的法术 ID 不是整数或不存在。 + 请输入新的法术 ID: + 错误:新的法术 ID 不是整数。 + 错误:该法术 ID 已被占用。 + 使用第一个可用的 ID + 请输入复制数量: + 错误:复制数量不是整数或数量无效。 + 成功创建 {0} 条新记录,起始 ID 为 {1}。 + 输入要删除的法术ID。 错误:输入的法术ID不是整数。 成功删除法术。 @@ -661,30 +695,30 @@ Gas Cloud - None | - Defense | - Healthless 20 Percent | - Berserking | - Frozen | - Judgement | - Unknown6 | - Hunter Parry | - Unknown8 | - Unknown9 | - Warrior Victory Rush | - Unknown11 | - Faerie Fire | - Healthless 35 Percent | - Conflagrate | - Swiftmend | - Deadly Poison | - Enrage | - Bleeding | - Parry | - Unknown20 | - Unknown21 | - Unknown22 | - Health Above 75 Percent + 无 | + 防御 | + 生命值低于 20% | + 狂暴 | + 冻结 | + 审判 | + 未知 6 | + 猎人招架 | + 未知 8 | + 未知 9 | + 战士胜利冲击 | + 未知 11 | + 精灵之火 | + 生命值低于 35% | + 燃烧 | + 迅捷治愈 | + 致命毒药 | + 激怒 | + 流血 | + 招架 | + 未知 20 | + 未知 21 | + 未知 22 | + 生命值高于 75% 非装备 | diff --git a/HeadlessExport/App.config b/HeadlessExport/App.config index 5a1f3d40..3637be47 100644 --- a/HeadlessExport/App.config +++ b/HeadlessExport/App.config @@ -1,22 +1,22 @@ - + - + - - + + - - + + - - + + - \ No newline at end of file + diff --git a/HeadlessExport/HeadlessExport.csproj b/HeadlessExport/HeadlessExport.csproj index e4147401..6acac352 100644 --- a/HeadlessExport/HeadlessExport.csproj +++ b/HeadlessExport/HeadlessExport.csproj @@ -8,10 +8,11 @@ Exe HeadlessExport HeadlessExport - v4.6.1 + v4.8 512 true true + AnyCPU diff --git a/SpellGUIV2/App.config b/SpellGUIV2/App.config index d603b66e..ce689db8 100644 --- a/SpellGUIV2/App.config +++ b/SpellGUIV2/App.config @@ -1,45 +1,45 @@ - + -
+
- + - - - - + + + + - + - - + + - - + + - - + + - - + + - \ No newline at end of file + diff --git a/SpellGUIV2/ConfigWindow.xaml b/SpellGUIV2/ConfigWindow.xaml index 0a38bbb3..20f8719e 100644 --- a/SpellGUIV2/ConfigWindow.xaml +++ b/SpellGUIV2/ConfigWindow.xaml @@ -5,6 +5,8 @@ xmlns:controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" Title="{DynamicResource ConfigWindowTitle}" WindowStartupLocation="CenterScreen" + Height="925" + Width="1825" Icon="icon.ico" Loaded="_Loaded" BorderBrush="#1585B5" diff --git a/SpellGUIV2/ConfigWindow.xaml.cs b/SpellGUIV2/ConfigWindow.xaml.cs index 3922e389..38c0e751 100644 --- a/SpellGUIV2/ConfigWindow.xaml.cs +++ b/SpellGUIV2/ConfigWindow.xaml.cs @@ -1,4 +1,8 @@ -using System; +using MahApps.Metro.Controls; +using NLog; +using SpellEditor.Sources.Config; +using SpellEditor.Sources.VersionControl; +using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; @@ -8,11 +12,8 @@ using System.Windows.Forms; using System.Windows.Media; using System.Windows.Threading; -using MahApps.Metro.Controls; -using NLog; -using SpellEditor.Sources.Config; -using SpellEditor.Sources.VersionControl; using static System.Environment; +using static System.Windows.Forms.VisualStyles.VisualStyleElement.Window; using Application = System.Windows.Application; using Button = System.Windows.Controls.Button; using Label = System.Windows.Controls.Label; @@ -61,9 +62,12 @@ private void BuildConfigWindow() ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); // Icon config row ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); + // Caching config row + ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); // MPQ name config row ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); - // Bindings and directory settings, 2 rows + // Bindings and directory settings, 3 rows + ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); ConfigGrid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto }); // Database type specific grid @@ -127,6 +131,8 @@ private void BuildConfigWindow() currentRow = BuildIconConfig(ConfigGrid, currentRow); + currentRow = BuildCachingConfig(ConfigGrid, currentRow); + currentRow = BuildMpqConfig(ConfigGrid, currentRow); currentRow = BuildBindingsAndDbcUI(ConfigGrid, currentRow); @@ -344,6 +350,30 @@ private int BuildIconConfig(Grid grid, int currentRow) return currentRow; } + private int BuildCachingConfig(Grid grid, int currentRow) + { + var label = new Label { Content = "Cache spells:" }; + label.Margin = new Thickness(10); + + var checkbox = new System.Windows.Controls.CheckBox { }; + checkbox.Margin = new Thickness(10); + + checkbox.IsChecked = Config.CacheSpellBody; + checkbox.Checked += CacheSpellBody_Checked; + checkbox.Unchecked += CacheSpellBody_Checked; + checkbox.ToolTip = "When this is turned on, spells will be cached in memory making exporting take 1-3 seconds."; + + Grid.SetRow(label, currentRow); + Grid.SetRow(checkbox, currentRow++); + Grid.SetColumn(label, 0); + Grid.SetColumn(checkbox, 1); + + grid.Children.Add(label); + grid.Children.Add(checkbox); + + return currentRow; + } + private int BuildMpqConfig(Grid grid, int currentRow) { var label = new Label @@ -375,12 +405,19 @@ private void RenderIconsInView_Checked(object sender, RoutedEventArgs e) Config.RenderImagesInView = (sender as System.Windows.Controls.CheckBox).IsChecked.Value; } + private void CacheSpellBody_Checked(object sender, RoutedEventArgs e) + { + Config.CacheSpellBody = (sender as System.Windows.Controls.CheckBox).IsChecked.Value; + } + private int BuildBindingsAndDbcUI(Grid grid, int currentRow) { var bindingsLabel = new Label { Content = "Bindings Directory:" }; var dbcLabel = new Label { Content = "DBC Directory:" }; - var bindingsDirLabel = new Label { Content = Config.BindingsDirectory }; - var dbcDirLabel = new Label { Content = Config.DbcDirectory }; + var exportLabel = new Label { Content = "Export Directory:" }; + var bindingsDirLabel = new TextBox { Text = Config.BindingsDirectory }; + var dbcDirLabel = new TextBox { Text = Config.DbcDirectory }; + var exportDirLabel = new TextBox { Text = Config.ExportDirectory }; var changeBindingsButton = new ButtonWithLabelRef(bindingsDirLabel, ButtonWithLabelRef.DirButtonType.Bindings) { Content = "Change Directory", @@ -391,18 +428,28 @@ private int BuildBindingsAndDbcUI(Grid grid, int currentRow) Content = "Change Directory", Foreground = Brushes.Black }; + var changeExportButton = new ButtonWithLabelRef(exportDirLabel, ButtonWithLabelRef.DirButtonType.Export) + { + Content = "Change Directory", + Foreground = Brushes.Black + }; bindingsLabel.Margin = new Thickness(10); dbcLabel.Margin = new Thickness(10); + exportLabel.Margin = new Thickness(10); bindingsDirLabel.Margin = new Thickness(10); dbcDirLabel.Margin = new Thickness(10); + exportDirLabel.Margin = new Thickness(10); changeBindingsButton.Margin = new Thickness(10); changeDbcButton.Margin = new Thickness(10); + changeExportButton.Margin = new Thickness(10); changeBindingsButton.MinWidth = 100; changeDbcButton.MinWidth = 100; + changeExportButton.MinWidth = 100; changeBindingsButton.Click += OpenDirButton_Click; changeDbcButton.Click += OpenDirButton_Click; + changeExportButton.Click += OpenDirButton_Click; Grid.SetRow(bindingsLabel, currentRow); Grid.SetColumn(bindingsLabel, 0); @@ -416,6 +463,12 @@ private int BuildBindingsAndDbcUI(Grid grid, int currentRow) Grid.SetColumn(dbcDirLabel, 1); Grid.SetRow(changeDbcButton, currentRow); Grid.SetColumn(changeDbcButton, 2); + Grid.SetRow(exportLabel, ++currentRow); + Grid.SetColumn(exportLabel, 0); + Grid.SetRow(exportDirLabel, currentRow); + Grid.SetColumn(exportDirLabel, 1); + Grid.SetRow(changeExportButton, currentRow); + Grid.SetColumn(changeExportButton, 2); grid.Children.Add(bindingsLabel); grid.Children.Add(bindingsDirLabel); @@ -423,6 +476,9 @@ private int BuildBindingsAndDbcUI(Grid grid, int currentRow) grid.Children.Add(dbcLabel); grid.Children.Add(dbcDirLabel); grid.Children.Add(changeDbcButton); + grid.Children.Add(exportLabel); + grid.Children.Add(exportDirLabel); + grid.Children.Add(changeExportButton); return currentRow; } @@ -444,14 +500,6 @@ private void OpenDirButton_Click(object sender, RoutedEventArgs e) { var path = dialog.SelectedPath; button.UpdateLabelText(path); - if (button.DbType == ButtonWithLabelRef.DirButtonType.Bindings) - { - Config.BindingsDirectory = path; - } - else if (button.DbType == ButtonWithLabelRef.DirButtonType.Dbc) - { - Config.DbcDirectory = path; - } } } } @@ -488,26 +536,44 @@ public enum DatabaseIdentifier private class ButtonWithLabelRef : Button { - private readonly Label _LabelReference; + private readonly TextBox _LabelReference; public readonly DirButtonType DbType; - public ButtonWithLabelRef(Label labelRef, DirButtonType type) + public ButtonWithLabelRef(TextBox labelRef, DirButtonType type) { _LabelReference = labelRef; DbType = type; + + _LabelReference.TextChanged += (s, e) => + { + var path = labelRef.Text; + if (type == DirButtonType.Bindings) + { + Config.BindingsDirectory = path; + } + else if (type == DirButtonType.Dbc) + { + Config.DbcDirectory = path; + } + else if (type == DirButtonType.Export) + { + Config.ExportDirectory = path; + } + }; } public void UpdateLabelText(string text) { - _LabelReference.Content = text; + _LabelReference.Text = text; } - public string GetLabelText() => _LabelReference.Content.ToString(); + public string GetLabelText() => _LabelReference.Text.ToString(); public enum DirButtonType { Bindings, - Dbc + Dbc, + Export } } diff --git a/SpellGUIV2/CopySpellDialog.xaml b/SpellGUIV2/CopySpellDialog.xaml new file mode 100644 index 00000000..9def3e60 --- /dev/null +++ b/SpellGUIV2/CopySpellDialog.xaml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + +