From f80b0ab08f5802086319c7e2a25e4527843785b1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 28 Mar 2011 08:43:29 -0700 Subject: [PATCH 01/58] Updated README --- README | 1 + 1 file changed, 1 insertion(+) diff --git a/README b/README index ce6076b0..6d183ab6 100644 --- a/README +++ b/README @@ -5,3 +5,4 @@ This project is a try to rebuild the application using C#. Thanks goes to: Chestr - for the idea and released source of original spell_work TOM_RUS - for code samples + Shauren - updating for TrinityCore \ No newline at end of file From af8b58e4d3da6f670a3f7832f2e92becd561e8e0 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 28 Mar 2011 17:48:21 +0200 Subject: [PATCH 02/58] gitignore cleanup --- SpellWork/.gitignore | 3 +++ SpellWork/bin/.gitignore | 2 -- SpellWork/bin/Release/.gitignore | 11 ----------- SpellWork/bin/Release/MySql.Data.dll | Bin 327680 -> 0 bytes SpellWork/bin/Release/SpellWork.exe | Bin 283648 -> 0 bytes 5 files changed, 3 insertions(+), 13 deletions(-) create mode 100644 SpellWork/.gitignore delete mode 100644 SpellWork/bin/.gitignore delete mode 100644 SpellWork/bin/Release/.gitignore delete mode 100644 SpellWork/bin/Release/MySql.Data.dll delete mode 100644 SpellWork/bin/Release/SpellWork.exe diff --git a/SpellWork/.gitignore b/SpellWork/.gitignore new file mode 100644 index 00000000..8650b356 --- /dev/null +++ b/SpellWork/.gitignore @@ -0,0 +1,3 @@ + +bin/* +obj/* diff --git a/SpellWork/bin/.gitignore b/SpellWork/bin/.gitignore deleted file mode 100644 index 4b7942ca..00000000 --- a/SpellWork/bin/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ - -Debug/* \ No newline at end of file diff --git a/SpellWork/bin/Release/.gitignore b/SpellWork/bin/Release/.gitignore deleted file mode 100644 index 33a5f356..00000000 --- a/SpellWork/bin/Release/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ - -Debug/* -dbc/* -*.config -*.pdb -*.vshost.exe -*.vshost.exe.config -*.vshost.exe.manifest -*.rar -*.7z -*.zip \ No newline at end of file diff --git a/SpellWork/bin/Release/MySql.Data.dll b/SpellWork/bin/Release/MySql.Data.dll deleted file mode 100644 index 9fbc8ef28e97a8ef36540dc1de02395348a901a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 327680 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 z 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 Date: Mon, 28 Mar 2011 17:51:13 +0200 Subject: [PATCH 03/58] Whitespace cleanup Renamed AttributesExG to AttributesEx7 Reverted "new proc system", its not correct --- SpellWork/DBC/DBC.cs | 2 +- SpellWork/DBC/DBCReader.cs | 4 +- SpellWork/DBC/Structure.cs | 46 +- SpellWork/DataBase/MySQLConnect.cs | 102 ++- SpellWork/Extensions/Extensions.cs | 10 +- SpellWork/Extensions/LinqExtensions.cs | 2 +- SpellWork/Extensions/RichTextBoxExtensions.cs | 4 +- SpellWork/Extensions/TreeViewExtensions.cs | 24 +- .../Forms/FormCalculateFlags.Designer.cs | 20 +- SpellWork/Forms/FormCalculateFlags.cs | 4 +- SpellWork/Forms/FormMain.Designer.cs | 680 ++++++++---------- SpellWork/Forms/FormMain.cs | 31 +- SpellWork/Forms/FormMain.resx | 2 +- SpellWork/Forms/FormSearch.Designer.cs | 92 +-- SpellWork/Forms/FormSearch.cs | 6 +- SpellWork/Forms/FormSettings.Designer.cs | 60 +- SpellWork/Forms/FormSettings.cs | 2 +- SpellWork/Loader.cs | 1 - SpellWork/Properties/AssemblyInfo.cs | 12 +- SpellWork/Properties/Resources.Designer.cs | 14 +- SpellWork/Properties/Settings.Designer.cs | 20 +- SpellWork/Spell/ProcInfo.cs | 4 +- SpellWork/Spell/SpellCompare.cs | 2 +- SpellWork/Spell/SpellInfo.cs | 52 +- 24 files changed, 553 insertions(+), 643 deletions(-) diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index 5f22400a..e27ab890 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -26,7 +26,7 @@ public static class DBC public static Dictionary SpellRangeStrings = new Dictionary(); public static Dictionary ScreenEffectStrings = new Dictionary(); - // DB + // DB public static List ItemTemplate = new List(); // Locale diff --git a/SpellWork/DBC/DBCReader.cs b/SpellWork/DBC/DBCReader.cs index 11a1c568..86fdbad3 100644 --- a/SpellWork/DBC/DBCReader.cs +++ b/SpellWork/DBC/DBCReader.cs @@ -12,7 +12,7 @@ public static unsafe Dictionary ReadDBC(Dictionary str { Dictionary dict = new Dictionary(); String fileName = Path.Combine(DBC.DBC_PATH, typeof(T).Name + ".dbc").Replace("Entry", String.Empty); - + using (BinaryReader reader = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), Encoding.UTF8)) { if (!File.Exists(fileName)) @@ -23,7 +23,7 @@ public static unsafe Dictionary ReadDBC(Dictionary str if (!header.IsDBC) throw new Exception(fileName + " is not DBC files!"); - + if (header.RecordSize != size) throw new Exception(string.Format("Size of row in DBC file ({0}) != size of DBC struct ({1}) in DBC: {2}", header.RecordSize, size, fileName)); diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs index 040e6d27..c89254ca 100644 --- a/SpellWork/DBC/Structure.cs +++ b/SpellWork/DBC/Structure.cs @@ -12,12 +12,12 @@ public struct DbcHeader public int FieldsCount; public int RecordSize; public int StringTableSize; - + public bool IsDBC { get { return Signature == 0x43424457; } } - + public long DataSize { get { return (long)(RecordsCount * RecordSize); } @@ -43,7 +43,7 @@ public struct SpellEntry public uint AttributesEx4; // 8 m_attributesExD public uint AttributesEx5; // 9 m_attributesExE public uint AttributesEx6; // 10 m_attributesExF - public uint AttributesExG; // 11 3.2.0 (0x20 - totems, 0x4 - paladin auras, etc...) + public uint AttributesEx7; // 11 3.2.0 (0x20 - totems, 0x4 - paladin auras, etc...) public ulong Stances; // 12-13 m_shapeshiftMask public ulong StancesNot; // 14-15 m_shapeshiftExclude public uint Targets; // 16 m_targets @@ -90,7 +90,7 @@ public struct SpellEntry public int EquippedItemSubClassMask; // 69 m_equippedItemSubclass (mask) public int EquippedItemInventoryTypeMask; // 70 m_equippedItemInvTypes (mask) [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] - public uint[] Effect; // 71-73 m_effect + public uint[] Effect; // 71-73 m_effect [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] public int[] EffectDieSides; // 74-76 m_effectDieSides [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] @@ -158,7 +158,7 @@ public struct SpellEntry public uint PreventionType; // 214 m_preventionType public uint StanceBarOrder; // 215 m_stanceBarOrder not used [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public float[] DmgMultiplier; // 216-218 m_effectChainAmplitude + public float[] DmgMultiplier; // 216-218 m_effectChainAmplitude public uint MinFactionId; // 219 m_minFactionID not used public uint MinReputation; // 220 m_minReputation not used public uint RequiredAuraVision; // 221 m_requiredAuraVision not used @@ -279,7 +279,7 @@ public string CastTime if (!DBC.SpellCastTimes.ContainsKey(CastingTimeIndex)) return String.Format("CastingTime (Id {0}) = ????", CastingTimeIndex); else - return String.Format("CastingTime (Id {0}) = {1:F}", + return String.Format("CastingTime (Id {0}) = {1:F}", CastingTimeIndex, DBC.SpellCastTimes[CastingTimeIndex].CastTime / 1000.0f); } } @@ -393,7 +393,7 @@ public override string ToString() public struct SpellCastTimesEntry { public uint ID; - public int CastTime; + public int CastTime; public float CastTimePerLevel; public int MinCastTime; }; @@ -434,7 +434,7 @@ public struct SpellProcEventEntry public string SpellName; public uint SchoolMask; public uint SpellFamilyName; - public uint[,] SpellFamilyMask; + public uint[] SpellFamilyMask; public uint ProcFlags; public uint ProcEx; public float PpmRate; @@ -442,26 +442,20 @@ public struct SpellProcEventEntry public uint Cooldown; public string[] ToArray() - { + { return new[] { - ID.ToString(), - SpellName, - SchoolMask.ToString(), - SpellFamilyName.ToString(), - SpellFamilyMask[0,0].ToString(), - SpellFamilyMask[0,1].ToString(), - SpellFamilyMask[0,2].ToString(), - SpellFamilyMask[1,0].ToString(), - SpellFamilyMask[1,1].ToString(), - SpellFamilyMask[1,2].ToString(), - SpellFamilyMask[2,0].ToString(), - SpellFamilyMask[2,1].ToString(), - SpellFamilyMask[2,2].ToString(), - ProcFlags.ToString(), - ProcEx.ToString(), - PpmRate.ToString(), - CustomChance.ToString(), + ID.ToString(), + SpellName, + SchoolMask.ToString(), + SpellFamilyName.ToString(), + SpellFamilyMask[0].ToString(), + SpellFamilyMask[1].ToString(), + SpellFamilyMask[2].ToString(), + ProcFlags.ToString(), + ProcEx.ToString(), + PpmRate.ToString(), + CustomChance.ToString(), Cooldown.ToString() }; } diff --git a/SpellWork/DataBase/MySQLConnect.cs b/SpellWork/DataBase/MySQLConnect.cs index b008a7f7..e5543046 100644 --- a/SpellWork/DataBase/MySQLConnect.cs +++ b/SpellWork/DataBase/MySQLConnect.cs @@ -17,13 +17,13 @@ public static class MySQLConnect private static String ConnectionString { - get + get { - return String.Format("Server={0};Port={1};Uid={2};Pwd={3};Database={4};character set=utf8;Connection Timeout=10", - Settings.Default.Host, - Settings.Default.Port, - Settings.Default.User, - Settings.Default.Pass, + return String.Format("Server={0};Port={1};Uid={2};Pwd={3};Database={4};character set=utf8;Connection Timeout=10", + Settings.Default.Host, + Settings.Default.Port, + Settings.Default.User, + Settings.Default.Pass, Settings.Default.Db_mangos); } } @@ -59,30 +59,18 @@ public static void SelectProc(string query) str.SpellName = GetSpellName(str.ID); str.SchoolMask = reader[1].ToUInt32(); str.SpellFamilyName = reader[2].ToUInt32(); - str.SpellFamilyMask = new[,] - { - { - (uint)reader[3 ], - (uint)reader[4 ], - (uint)reader[5 ], - }, - { - (uint)reader[6 ], - (uint)reader[7 ], - (uint)reader[8 ], - }, - { - (uint)reader[9 ], - (uint)reader[10], - (uint)reader[11], - } + str.SpellFamilyMask = new[] + { + (uint)reader[3], + (uint)reader[4], + (uint)reader[5] }; - str.ProcFlags = reader[12].ToUInt32(); - str.ProcEx = reader[13].ToUInt32(); - str.PpmRate = reader[14].ToUInt32(); - str.CustomChance = reader[15].ToUInt32(); - str.Cooldown = reader[16].ToUInt32(); - + str.ProcFlags = reader[6].ToUInt32(); + str.ProcEx = reader[7].ToUInt32(); + str.PpmRate = reader[8].ToUInt32(); + str.CustomChance = reader[9].ToUInt32(); + str.Cooldown = reader[10].ToUInt32(); + SpellProcEvent.Add(str); } } @@ -103,27 +91,27 @@ public static List SelectItems() List items = DBC.ItemTemplate; // In order to reduce the search time, we make the first selection of all items that have spellid string query = String.Format( - @"SELECT t.entry, - t.name, - t.description, - l.name_loc{0}, - l.description_loc{0}, - t.spellid_1, - t.spellid_2, - t.spellid_3, - t.spellid_4, - t.spellid_5 - FROM - `item_template` t - LEFT JOIN - `locales_item` l - ON - t.entry = l.entry - WHERE - t.spellid_1 <> 0 || - t.spellid_2 <> 0 || - t.spellid_3 <> 0 || - t.spellid_4 <> 0 || + @"SELECT t.entry, + t.name, + t.description, + l.name_loc{0}, + l.description_loc{0}, + t.spellid_1, + t.spellid_2, + t.spellid_3, + t.spellid_4, + t.spellid_5 + FROM + `item_template` t + LEFT JOIN + `locales_item` l + ON + t.entry = l.entry + WHERE + t.spellid_1 <> 0 || + t.spellid_2 <> 0 || + t.spellid_3 <> 0 || + t.spellid_4 <> 0 || t.spellid_5 <> 0;", (int)DBC.Locale == 0 ? 1 : (int)DBC.Locale /* it's huck TODO: replase code*/); @@ -143,13 +131,13 @@ LEFT JOIN Description = reader[2].ToString(), LocalesName = reader[3].ToString(), LocalesDescription = reader[4].ToString(), - SpellID = new uint[] - { - (uint)reader[5], - (uint)reader[6], - (uint)reader[7], - (uint)reader[8], - (uint)reader[9] + SpellID = new uint[] + { + (uint)reader[5], + (uint)reader[6], + (uint)reader[7], + (uint)reader[8], + (uint)reader[9] } }); } diff --git a/SpellWork/Extensions/Extensions.cs b/SpellWork/Extensions/Extensions.cs index 3543bcaf..7bf7c8b8 100644 --- a/SpellWork/Extensions/Extensions.cs +++ b/SpellWork/Extensions/Extensions.cs @@ -38,12 +38,12 @@ public static string ReadCString(this BinaryReader reader) public static unsafe T ReadStruct(this BinaryReader reader) where T : struct { byte[] rawData = reader.ReadBytes(Marshal.SizeOf(typeof(T))); - + GCHandle handle = GCHandle.Alloc(rawData, GCHandleType.Pinned); T returnObject = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T)); - + handle.Free(); - + return returnObject; } @@ -95,7 +95,7 @@ public static uint ToUInt32(this Object val) public static int ToInt32(this Object val) { - if (val == null) + if (val == null) return 0; int num; @@ -283,7 +283,7 @@ public static bool ContainsText(this string text, string[] compareText) public static bool ContainsElement(this uint[] array, uint[] value) { if (array.Length != value.Length) - return false; + return false; for(int i = 0; i < array.Length; i++) { diff --git a/SpellWork/Extensions/LinqExtensions.cs b/SpellWork/Extensions/LinqExtensions.cs index d790bb8d..d1ff4006 100644 --- a/SpellWork/Extensions/LinqExtensions.cs +++ b/SpellWork/Extensions/LinqExtensions.cs @@ -27,7 +27,7 @@ public static class LinqExtensions public static bool CreateFilter(this T T_entry, object field, object val, CompareType compareType) { object basicValue = GetValue(T_entry, (MemberInfo)field); - + switch (basicValue.GetType().Name) { case "UInt32": diff --git a/SpellWork/Extensions/RichTextBoxExtensions.cs b/SpellWork/Extensions/RichTextBoxExtensions.cs index d56cd1ae..0b314593 100644 --- a/SpellWork/Extensions/RichTextBoxExtensions.cs +++ b/SpellWork/Extensions/RichTextBoxExtensions.cs @@ -79,7 +79,7 @@ public static void SetStyle(this RichTextBox textbox, Color color, FontStyle sty textbox.SelectionColor = color; textbox.SelectionFont = new Font(DEFAULT_FAMILY, DEFAULT_SIZE, style); } - + public static void SetBold(this RichTextBox textbox) { textbox.SelectionFont = new Font(DEFAULT_FAMILY, DEFAULT_SIZE, FontStyle.Bold); @@ -102,7 +102,7 @@ public static void ColorizeCode(this RichTextBox rtb) foreach (String keyword in keywords) { int keywordPos = rtb.Find(keyword, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord); - + while (keywordPos != -1) { int commentPos = text.LastIndexOf("-- ", keywordPos, StringComparison.OrdinalIgnoreCase); diff --git a/SpellWork/Extensions/TreeViewExtensions.cs b/SpellWork/Extensions/TreeViewExtensions.cs index 7643067f..8802150e 100644 --- a/SpellWork/Extensions/TreeViewExtensions.cs +++ b/SpellWork/Extensions/TreeViewExtensions.cs @@ -35,7 +35,7 @@ public static uint[] GetMask(this TreeView tv) public static void SetMask(this TreeView tv, uint[] mask) { ProcInfo.Update = false; - + for (int i = 0; i < tv.Nodes.Count; ++i) { if (i < 32) @@ -48,27 +48,5 @@ public static void SetMask(this TreeView tv, uint[] mask) ProcInfo.Update = true; } - - ///

- /// Check items of the collection... - /// - /// - /// - public static void SetMask(this TreeView tv, uint[,] mask) - { - ProcInfo.Update = false; - - for (int i = 0; i < tv.Nodes.Count; ++i) - { - if (i < 32) - tv.Nodes[i].Checked = ((mask[0, 0] / (1 << i)) % 2) != 0; - else if (i < 64) - tv.Nodes[i].Checked = ((mask[0, 1] / (1 << (i - 32))) % 2) != 0; - else - tv.Nodes[i].Checked = ((mask[0, 2] / (1 << (i - 64))) % 2) != 0; - } - - ProcInfo.Update = true; - } } } diff --git a/SpellWork/Forms/FormCalculateFlags.Designer.cs b/SpellWork/Forms/FormCalculateFlags.Designer.cs index 541e7248..d7b7b28a 100644 --- a/SpellWork/Forms/FormCalculateFlags.Designer.cs +++ b/SpellWork/Forms/FormCalculateFlags.Designer.cs @@ -34,9 +34,9 @@ private void InitializeComponent() this._clbCalcFlags = new System.Windows.Forms.CheckedListBox(); this._lFlagValue = new System.Windows.Forms.Label(); this.SuspendLayout(); - // + // // _bNo - // + // this._bNo.DialogResult = System.Windows.Forms.DialogResult.Cancel; this._bNo.Location = new System.Drawing.Point(12, 270); this._bNo.Name = "_bNo"; @@ -45,9 +45,9 @@ private void InitializeComponent() this._bNo.Text = "Cancel"; this._bNo.UseVisualStyleBackColor = true; this._bNo.Click += new System.EventHandler(this._bNo_Click); - // + // // _bOk - // + // this._bOk.Location = new System.Drawing.Point(201, 270); this._bOk.Name = "_bOk"; this._bOk.Size = new System.Drawing.Size(75, 23); @@ -55,9 +55,9 @@ private void InitializeComponent() this._bOk.Text = "OK"; this._bOk.UseVisualStyleBackColor = true; this._bOk.Click += new System.EventHandler(this._bOk_Click); - // + // // _clbCalcFlags - // + // this._clbCalcFlags.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); @@ -68,9 +68,9 @@ private void InitializeComponent() this._clbCalcFlags.Size = new System.Drawing.Size(291, 259); this._clbCalcFlags.TabIndex = 0; this._clbCalcFlags.SelectedValueChanged += new System.EventHandler(this._clbCalcFlags_SelectedValueChanged); - // + // // _lFlagValue - // + // this._lFlagValue.AutoSize = true; this._lFlagValue.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this._lFlagValue.ForeColor = System.Drawing.Color.Blue; @@ -79,9 +79,9 @@ private void InitializeComponent() this._lFlagValue.Size = new System.Drawing.Size(54, 13); this._lFlagValue.TabIndex = 3; this._lFlagValue.Text = "Value: 0"; - // + // // FormCalculateFlags - // + // this.AcceptButton = this._bOk; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; diff --git a/SpellWork/Forms/FormCalculateFlags.cs b/SpellWork/Forms/FormCalculateFlags.cs index 94cf2f51..4e1c67d1 100644 --- a/SpellWork/Forms/FormCalculateFlags.cs +++ b/SpellWork/Forms/FormCalculateFlags.cs @@ -6,11 +6,11 @@ namespace SpellWork public partial class FormCalculateFlags : Form { public uint Flags { get; private set; } - + public FormCalculateFlags(Type data, uint value, String remove) { InitializeComponent(); - + this._clbCalcFlags.SetFlags(data, remove); this._clbCalcFlags.SetCheckedItemFromFlag(value); diff --git a/SpellWork/Forms/FormMain.Designer.cs b/SpellWork/Forms/FormMain.Designer.cs index 0cb80d21..3ebc52c5 100644 --- a/SpellWork/Forms/FormMain.Designer.cs +++ b/SpellWork/Forms/FormMain.Designer.cs @@ -141,15 +141,9 @@ private void InitializeComponent() this.spellname = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.schoolmask = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.spellfamilyname = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskA0 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskA1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskA2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskB0 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskB1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskB2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskC0 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskC1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.spellfamilymaskC2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.spellfamilymask0 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.spellfamilymask1 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.spellfamilymask2 = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.procflag = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.procEx = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.ppmRate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -208,9 +202,9 @@ private void InitializeComponent() this.splitContainer8.Panel1.SuspendLayout(); this.splitContainer8.SuspendLayout(); this.SuspendLayout(); - // + // // statusStrip1 - // + // this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this._dbConnect, this._status, @@ -220,24 +214,24 @@ private void InitializeComponent() this.statusStrip1.Size = new System.Drawing.Size(872, 22); this.statusStrip1.TabIndex = 0; this.statusStrip1.Text = "statusStrip1"; - // + // // _dbConnect - // + // this._dbConnect.Name = "_dbConnect"; this._dbConnect.Size = new System.Drawing.Size(0, 17); - // + // // _status - // + // this._status.Name = "_status"; this._status.Size = new System.Drawing.Size(0, 17); - // + // // _ProcStatus - // + // this._ProcStatus.Name = "_ProcStatus"; this._ProcStatus.Size = new System.Drawing.Size(0, 17); - // + // // menuStrip1 - // + // this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this._tsmFile, this._tsmHelp}); @@ -246,9 +240,9 @@ private void InitializeComponent() this.menuStrip1.Size = new System.Drawing.Size(872, 24); this.menuStrip1.TabIndex = 1; this.menuStrip1.Text = "menuStrip1"; - // + // // _tsmFile - // + // this._tsmFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this._Connected, this._tsmSettings, @@ -256,45 +250,45 @@ private void InitializeComponent() this._tsmFile.Name = "_tsmFile"; this._tsmFile.Size = new System.Drawing.Size(35, 20); this._tsmFile.Text = "File"; - // + // // _Connected - // + // this._Connected.Name = "_Connected"; this._Connected.Size = new System.Drawing.Size(126, 22); this._Connected.Text = "Connected"; this._Connected.Click += new System.EventHandler(this._Connected_Click); - // + // // _tsmSettings - // + // this._tsmSettings.Name = "_tsmSettings"; this._tsmSettings.Size = new System.Drawing.Size(126, 22); this._tsmSettings.Text = "Setting"; this._tsmSettings.Click += new System.EventHandler(this.Settings_Click); - // + // // _tsmExit - // + // this._tsmExit.Name = "_tsmExit"; this._tsmExit.Size = new System.Drawing.Size(126, 22); this._tsmExit.Text = "Exit"; this._tsmExit.Click += new System.EventHandler(this.Exit_Click); - // + // // _tsmHelp - // + // this._tsmHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this._tsmAbout}); this._tsmHelp.Name = "_tsmHelp"; this._tsmHelp.Size = new System.Drawing.Size(40, 20); this._tsmHelp.Text = "Help"; - // + // // _tsmAbout - // + // this._tsmAbout.Name = "_tsmAbout"; this._tsmAbout.Size = new System.Drawing.Size(111, 22); this._tsmAbout.Text = "About.."; this._tsmAbout.Click += new System.EventHandler(this.About_Click); - // + // // tabControl1 - // + // this.tabControl1.Controls.Add(this._tpSpellInfo); this.tabControl1.Controls.Add(this._tpSpellProcInfo); this.tabControl1.Controls.Add(this._tpCompare); @@ -306,9 +300,9 @@ private void InitializeComponent() this.tabControl1.Size = new System.Drawing.Size(872, 583); this.tabControl1.TabIndex = 2; this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged); - // + // // _tpSpellInfo - // + // this._tpSpellInfo.Controls.Add(this.splitContainer1); this._tpSpellInfo.Location = new System.Drawing.Point(4, 22); this._tpSpellInfo.Name = "_tpSpellInfo"; @@ -317,42 +311,42 @@ private void InitializeComponent() this._tpSpellInfo.TabIndex = 0; this._tpSpellInfo.Text = "Spell Info"; this._tpSpellInfo.UseVisualStyleBackColor = true; - // + // // splitContainer1 - // + // this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; this.splitContainer1.Location = new System.Drawing.Point(3, 3); this.splitContainer1.Name = "splitContainer1"; - // + // // splitContainer1.Panel1 - // + // this.splitContainer1.Panel1.Controls.Add(this._rtSpellInfo); - // + // // splitContainer1.Panel2 - // + // this.splitContainer1.Panel2.BackColor = System.Drawing.Color.Gainsboro; this.splitContainer1.Panel2.Controls.Add(this.groupBox1); this.splitContainer1.Size = new System.Drawing.Size(858, 551); this.splitContainer1.SplitterDistance = 543; this.splitContainer1.TabIndex = 0; - // + // // _rtSpellInfo - // + // this._rtSpellInfo.BackColor = System.Drawing.Color.Gainsboro; this._rtSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this._rtSpellInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this._rtSpellInfo.Font = new System.Drawing.Font("Arial Unicode MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); this._rtSpellInfo.Location = new System.Drawing.Point(0, 0); this._rtSpellInfo.Name = "_rtSpellInfo"; this._rtSpellInfo.ReadOnly = true; this._rtSpellInfo.Size = new System.Drawing.Size(543, 551); this._rtSpellInfo.TabIndex = 0; this._rtSpellInfo.Text = ""; - // + // // groupBox1 - // + // this.groupBox1.Controls.Add(this._lvSpellList); this.groupBox1.Controls.Add(this._gSpellFilter); this.groupBox1.Controls.Add(this.groupBox7); @@ -362,9 +356,9 @@ private void InitializeComponent() this.groupBox1.Size = new System.Drawing.Size(311, 551); this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; - // + // // _lvSpellList - // + // this._lvSpellList.AllowColumnReorder = true; this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) @@ -385,19 +379,19 @@ private void InitializeComponent() this._lvSpellList.VirtualMode = true; this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this._lvSpellList_RetrieveVirtualItem); this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this._lvSpellList_SelectedIndexChanged); - // + // // chSpellID - // + // this.chSpellID.Text = "ID"; this.chSpellID.Width = 48; - // + // // chSpellName - // + // this.chSpellName.Text = "Name"; this.chSpellName.Width = 250; - // + // // _gSpellFilter - // + // this._gSpellFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gSpellFilter.BackColor = System.Drawing.Color.LightGray; @@ -413,9 +407,9 @@ private void InitializeComponent() this._gSpellFilter.TabIndex = 8; this._gSpellFilter.TabStop = false; this._gSpellFilter.Text = "Spell Filter"; - // + // // _gbAdvansedSearch - // + // this._gbAdvansedSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter2CompareType); @@ -430,45 +424,45 @@ private void InitializeComponent() this._gbAdvansedSearch.TabIndex = 6; this._gbAdvansedSearch.TabStop = false; this._gbAdvansedSearch.Text = "Advanced Filter"; - // + // // _cbAdvancedFilter2CompareType - // + // this._cbAdvancedFilter2CompareType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this._cbAdvancedFilter2CompareType.FormattingEnabled = true; this._cbAdvancedFilter2CompareType.Location = new System.Drawing.Point(127, 41); this._cbAdvancedFilter2CompareType.Name = "_cbAdvancedFilter2CompareType"; this._cbAdvancedFilter2CompareType.Size = new System.Drawing.Size(76, 21); this._cbAdvancedFilter2CompareType.TabIndex = 3; - // + // // _cbAdvancedFilter1CompareType - // + // this._cbAdvancedFilter1CompareType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this._cbAdvancedFilter1CompareType.FormattingEnabled = true; this._cbAdvancedFilter1CompareType.Location = new System.Drawing.Point(127, 15); this._cbAdvancedFilter1CompareType.Name = "_cbAdvancedFilter1CompareType"; this._cbAdvancedFilter1CompareType.Size = new System.Drawing.Size(76, 21); this._cbAdvancedFilter1CompareType.TabIndex = 2; - // + // // _tbAdvancedFilter2Val - // + // this._tbAdvancedFilter2Val.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._tbAdvancedFilter2Val.Location = new System.Drawing.Point(210, 42); this._tbAdvancedFilter2Val.Name = "_tbAdvancedFilter2Val"; this._tbAdvancedFilter2Val.Size = new System.Drawing.Size(85, 20); this._tbAdvancedFilter2Val.TabIndex = 1; this._tbAdvancedFilter2Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbAdvansedFilterVal_KeyDown); - // + // // _tbAdvancedFilter1Val - // + // this._tbAdvancedFilter1Val.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._tbAdvancedFilter1Val.Location = new System.Drawing.Point(209, 15); this._tbAdvancedFilter1Val.Name = "_tbAdvancedFilter1Val"; this._tbAdvancedFilter1Val.Size = new System.Drawing.Size(85, 20); this._tbAdvancedFilter1Val.TabIndex = 1; this._tbAdvancedFilter1Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbAdvansedFilterVal_KeyDown); - // + // // _cbAdvancedFilter2 - // + // this._cbAdvancedFilter2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbAdvancedFilter2.DropDownHeight = 500; @@ -479,9 +473,9 @@ private void InitializeComponent() this._cbAdvancedFilter2.Name = "_cbAdvancedFilter2"; this._cbAdvancedFilter2.Size = new System.Drawing.Size(120, 21); this._cbAdvancedFilter2.TabIndex = 0; - // + // // _cbAdvancedFilter1 - // + // this._cbAdvancedFilter1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbAdvancedFilter1.DropDownHeight = 500; @@ -492,9 +486,9 @@ private void InitializeComponent() this._cbAdvancedFilter1.Name = "_cbAdvancedFilter1"; this._cbAdvancedFilter1.Size = new System.Drawing.Size(120, 21); this._cbAdvancedFilter1.TabIndex = 0; - // + // // _cbTarget2 - // + // this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget2.DropDownHeight = 500; @@ -507,9 +501,9 @@ private void InitializeComponent() this._cbTarget2.Size = new System.Drawing.Size(302, 21); this._cbTarget2.TabIndex = 5; this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); - // + // // _cbTarget1 - // + // this._cbTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget1.DropDownHeight = 500; @@ -522,9 +516,9 @@ private void InitializeComponent() this._cbTarget1.Size = new System.Drawing.Size(302, 21); this._cbTarget1.TabIndex = 5; this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); - // + // // _cbSpellEffect - // + // this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellEffect.DropDownHeight = 500; @@ -537,9 +531,9 @@ private void InitializeComponent() this._cbSpellEffect.Size = new System.Drawing.Size(302, 21); this._cbSpellEffect.TabIndex = 4; this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); - // + // // _cbSpellAura - // + // this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellAura.DropDownHeight = 500; @@ -552,9 +546,9 @@ private void InitializeComponent() this._cbSpellAura.Size = new System.Drawing.Size(302, 21); this._cbSpellAura.TabIndex = 3; this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); - // + // // _cbSpellFamilyName - // + // this._cbSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellFamilyName.DropDownHeight = 500; @@ -568,9 +562,9 @@ private void InitializeComponent() this._cbSpellFamilyName.Size = new System.Drawing.Size(302, 21); this._cbSpellFamilyName.TabIndex = 2; this._cbSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); - // + // // groupBox7 - // + // this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox7.BackColor = System.Drawing.Color.LightGray; @@ -587,36 +581,36 @@ private void InitializeComponent() this.groupBox7.TabIndex = 9; this.groupBox7.TabStop = false; this.groupBox7.Text = "Spell Search"; - // + // // label6 - // + // this.label6.AutoSize = true; this.label6.Location = new System.Drawing.Point(6, 60); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(67, 13); this.label6.TabIndex = 2; this.label6.Text = "Attributes&&X:"; - // + // // label5 - // + // this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(6, 38); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(45, 13); this.label5.TabIndex = 2; this.label5.Text = "Icon ID:"; - // + // // label4 - // + // this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(6, 16); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(64, 13); this.label4.TabIndex = 2; this.label4.Text = "ID or Name:"; - // + // // _bSearch - // + // this._bSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._bSearch.Location = new System.Drawing.Point(258, 11); this._bSearch.Name = "_bSearch"; @@ -625,9 +619,9 @@ private void InitializeComponent() this._bSearch.Text = "Search"; this._bSearch.UseVisualStyleBackColor = true; this._bSearch.Click += new System.EventHandler(this._bSearch_Click); - // + // // _tbSearchAttributes - // + // this._tbSearchAttributes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchAttributes.Location = new System.Drawing.Point(73, 57); @@ -635,9 +629,9 @@ private void InitializeComponent() this._tbSearchAttributes.Size = new System.Drawing.Size(180, 20); this._tbSearchAttributes.TabIndex = 0; this._tbSearchAttributes.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbSearchId_KeyDown); - // + // // _tbSearchIcon - // + // this._tbSearchIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchIcon.Location = new System.Drawing.Point(73, 35); @@ -645,9 +639,9 @@ private void InitializeComponent() this._tbSearchIcon.Size = new System.Drawing.Size(180, 20); this._tbSearchIcon.TabIndex = 0; this._tbSearchIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbSearchId_KeyDown); - // + // // _tbSearchId - // + // this._tbSearchId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchId.Location = new System.Drawing.Point(73, 13); @@ -655,9 +649,9 @@ private void InitializeComponent() this._tbSearchId.Size = new System.Drawing.Size(180, 20); this._tbSearchId.TabIndex = 0; this._tbSearchId.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbSearchId_KeyDown); - // + // // _tpSpellProcInfo - // + // this._tpSpellProcInfo.Controls.Add(this.splitContainer2); this._tpSpellProcInfo.Location = new System.Drawing.Point(4, 22); this._tpSpellProcInfo.Name = "_tpSpellProcInfo"; @@ -665,51 +659,51 @@ private void InitializeComponent() this._tpSpellProcInfo.TabIndex = 2; this._tpSpellProcInfo.Text = "Spell Proc Event"; this._tpSpellProcInfo.UseVisualStyleBackColor = true; - // + // // splitContainer2 - // + // this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer2.Location = new System.Drawing.Point(0, 0); this.splitContainer2.Name = "splitContainer2"; this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; - // + // // splitContainer2.Panel1 - // + // this.splitContainer2.Panel1.Controls.Add(this.splitContainer3); - // + // // splitContainer2.Panel2 - // + // this.splitContainer2.Panel2.BackColor = System.Drawing.Color.Gainsboro; this.splitContainer2.Panel2.Controls.Add(this._lvProcAdditionalInfo); this.splitContainer2.Size = new System.Drawing.Size(864, 557); this.splitContainer2.SplitterDistance = 489; this.splitContainer2.TabIndex = 0; - // + // // splitContainer3 - // + // this.splitContainer3.BackColor = System.Drawing.Color.White; this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; this.splitContainer3.Location = new System.Drawing.Point(0, 0); this.splitContainer3.Name = "splitContainer3"; this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; - // + // // splitContainer3.Panel1 - // + // this.splitContainer3.Panel1.BackColor = System.Drawing.Color.White; this.splitContainer3.Panel1.Controls.Add(this.groupBox5); this.splitContainer3.Panel1.Controls.Add(this.groupBox4); this.splitContainer3.Panel1.Controls.Add(this._gSpellProcEvent); - // + // // splitContainer3.Panel2 - // + // this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); this.splitContainer3.Size = new System.Drawing.Size(864, 489); this.splitContainer3.SplitterDistance = 241; this.splitContainer3.TabIndex = 0; - // + // // groupBox5 - // + // this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox5.BackColor = System.Drawing.Color.WhiteSmoke; @@ -720,9 +714,9 @@ private void InitializeComponent() this.groupBox5.TabIndex = 10; this.groupBox5.TabStop = false; this.groupBox5.Text = "Spell Proc Flags"; - // + // // _clbProcFlags - // + // this._clbProcFlags.CheckOnClick = true; this._clbProcFlags.ColumnWidth = 170; this._clbProcFlags.Dock = System.Windows.Forms.DockStyle.Fill; @@ -733,9 +727,9 @@ private void InitializeComponent() this._clbProcFlags.Size = new System.Drawing.Size(852, 96); this._clbProcFlags.TabIndex = 0; this._clbProcFlags.SelectedIndexChanged += new System.EventHandler(this._clbSchools_SelectedIndexChanged); - // + // // groupBox4 - // + // this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox4.BackColor = System.Drawing.Color.WhiteSmoke; @@ -746,9 +740,9 @@ private void InitializeComponent() this.groupBox4.TabIndex = 9; this.groupBox4.TabStop = false; this.groupBox4.Text = "Spell Proc Ex"; - // + // // _clbProcFlagEx - // + // this._clbProcFlagEx.CheckOnClick = true; this._clbProcFlagEx.ColumnWidth = 120; this._clbProcFlagEx.Dock = System.Windows.Forms.DockStyle.Fill; @@ -759,9 +753,9 @@ private void InitializeComponent() this._clbProcFlagEx.Size = new System.Drawing.Size(852, 56); this._clbProcFlagEx.TabIndex = 3; this._clbProcFlagEx.SelectedIndexChanged += new System.EventHandler(this._clbSchools_SelectedIndexChanged); - // + // // _gSpellProcEvent - // + // this._gSpellProcEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gSpellProcEvent.BackColor = System.Drawing.Color.WhiteSmoke; @@ -780,9 +774,9 @@ private void InitializeComponent() this._gSpellProcEvent.TabIndex = 8; this._gSpellProcEvent.TabStop = false; this._gSpellProcEvent.Text = "Spell Proc Event"; - // + // // _clbSchools - // + // this._clbSchools.CheckOnClick = true; this._clbSchools.ColumnWidth = 100; this._clbSchools.Dock = System.Windows.Forms.DockStyle.Right; @@ -793,9 +787,9 @@ private void InitializeComponent() this._clbSchools.Size = new System.Drawing.Size(463, 44); this._clbSchools.TabIndex = 5; this._clbSchools.SelectedIndexChanged += new System.EventHandler(this._clbSchools_SelectedIndexChanged); - // + // // _cbProcFitstSpellFamily - // + // this._cbProcFitstSpellFamily.DropDownHeight = 500; this._cbProcFitstSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this._cbProcFitstSpellFamily.FormattingEnabled = true; @@ -805,18 +799,18 @@ private void InitializeComponent() this._cbProcFitstSpellFamily.Size = new System.Drawing.Size(342, 21); this._cbProcFitstSpellFamily.TabIndex = 4; this._cbProcFitstSpellFamily.SelectedIndexChanged += new System.EventHandler(this._clbSchools_SelectedIndexChanged); - // + // // label1 - // + // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(3, 41); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(30, 13); this.label1.TabIndex = 6; this.label1.Text = "PPM"; - // + // // _tbPPM - // + // this._tbPPM.Location = new System.Drawing.Point(39, 38); this._tbPPM.MaxLength = 10; this._tbPPM.Name = "_tbPPM"; @@ -824,18 +818,18 @@ private void InitializeComponent() this._tbPPM.TabIndex = 7; this._tbPPM.TextChanged += new System.EventHandler(this._tbCooldown_TextChanged); this._tbPPM.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBox_KeyPress); - // + // // label2 - // + // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(105, 41); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(44, 13); this.label2.TabIndex = 6; this.label2.Text = "Chance"; - // + // // _tbChance - // + // this._tbChance.Location = new System.Drawing.Point(155, 38); this._tbChance.MaxLength = 10; this._tbChance.Name = "_tbChance"; @@ -843,18 +837,18 @@ private void InitializeComponent() this._tbChance.TabIndex = 7; this._tbChance.TextChanged += new System.EventHandler(this._tbCooldown_TextChanged); this._tbChance.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBox_KeyPress); - // + // // label3 - // + // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(225, 41); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(54, 13); this.label3.TabIndex = 6; this.label3.Text = "Cooldown"; - // + // // _tbCooldown - // + // this._tbCooldown.Location = new System.Drawing.Point(285, 38); this._tbCooldown.MaxLength = 10; this._tbCooldown.Name = "_tbCooldown"; @@ -862,30 +856,30 @@ private void InitializeComponent() this._tbCooldown.TabIndex = 7; this._tbCooldown.TextChanged += new System.EventHandler(this._tbCooldown_TextChanged); this._tbCooldown.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBox_KeyPress); - // + // // splitContainer4 - // + // this.splitContainer4.BackColor = System.Drawing.Color.White; this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; this.splitContainer4.Location = new System.Drawing.Point(0, 0); this.splitContainer4.Name = "splitContainer4"; - // + // // splitContainer4.Panel1 - // + // this.splitContainer4.Panel1.BackColor = System.Drawing.Color.Gainsboro; this.splitContainer4.Panel1.Controls.Add(this._cbProcSpellFamilyTree); this.splitContainer4.Panel1.Controls.Add(this._tvFamilyTree); - // + // // splitContainer4.Panel2 - // + // this.splitContainer4.Panel2.Controls.Add(this.splitContainer5); this.splitContainer4.Size = new System.Drawing.Size(864, 244); this.splitContainer4.SplitterDistance = 260; this.splitContainer4.TabIndex = 0; - // + // // _cbProcSpellFamilyTree - // + // this._cbProcSpellFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellFamilyTree.DropDownHeight = 500; @@ -897,9 +891,9 @@ private void InitializeComponent() this._cbProcSpellFamilyTree.Size = new System.Drawing.Size(258, 21); this._cbProcSpellFamilyTree.TabIndex = 1; this._cbProcSpellFamilyTree.SelectedIndexChanged += new System.EventHandler(this._tvFamilyTree_SelectedIndexChanged); - // + // // _tvFamilyTree - // + // this._tvFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); @@ -914,9 +908,9 @@ private void InitializeComponent() this._tvFamilyTree.TabIndex = 0; this._tvFamilyTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FamilyTree_AfterCheck); this._tvFamilyTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this._tvFamilyTree_AfterSelect); - // + // // _ilPro - // + // this._ilPro.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("_ilPro.ImageStream"))); this._ilPro.TransparentColor = System.Drawing.Color.Transparent; this._ilPro.Images.SetKeyName(0, "info.ico"); @@ -925,20 +919,20 @@ private void InitializeComponent() this._ilPro.Images.SetKeyName(3, "plus.ico"); this._ilPro.Images.SetKeyName(4, "family.ico"); this._ilPro.Images.SetKeyName(5, "munus.ico"); - // + // // splitContainer5 - // + // this.splitContainer5.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer5.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; this.splitContainer5.Location = new System.Drawing.Point(0, 0); this.splitContainer5.Name = "splitContainer5"; - // + // // splitContainer5.Panel1 - // + // this.splitContainer5.Panel1.Controls.Add(this._rtbProcSpellInfo); - // + // // splitContainer5.Panel2 - // + // this.splitContainer5.Panel2.BackColor = System.Drawing.Color.Gainsboro; this.splitContainer5.Panel2.Controls.Add(this._lvProcSpellList); this.splitContainer5.Panel2.Controls.Add(this._bProcSearch); @@ -951,20 +945,20 @@ private void InitializeComponent() this.splitContainer5.Size = new System.Drawing.Size(600, 244); this.splitContainer5.SplitterDistance = 330; this.splitContainer5.TabIndex = 0; - // + // // _rtbProcSpellInfo - // + // this._rtbProcSpellInfo.BackColor = System.Drawing.SystemColors.MenuBar; this._rtbProcSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this._rtbProcSpellInfo.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this._rtbProcSpellInfo.Font = new System.Drawing.Font("Arial Unicode MS", 9F); this._rtbProcSpellInfo.Location = new System.Drawing.Point(0, 0); this._rtbProcSpellInfo.Name = "_rtbProcSpellInfo"; this._rtbProcSpellInfo.Size = new System.Drawing.Size(330, 244); this._rtbProcSpellInfo.TabIndex = 0; this._rtbProcSpellInfo.Text = ""; - // + // // _lvProcSpellList - // + // this._lvProcSpellList.AllowColumnReorder = true; this._lvProcSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) @@ -986,19 +980,19 @@ private void InitializeComponent() this._lvProcSpellList.VirtualMode = true; this._lvProcSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this._lvProcSpellList_RetrieveVirtualItem); this._lvProcSpellList.SelectedIndexChanged += new System.EventHandler(this._lvProcSpellList_SelectedIndexChanged); - // + // // _chProcID - // + // this._chProcID.Text = "ID"; this._chProcID.Width = 45; - // + // // _chProcName - // + // this._chProcName.Text = "Name"; this._chProcName.Width = 210; - // + // // _bProcSearch - // + // this._bProcSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._bProcSearch.Location = new System.Drawing.Point(215, 3); this._bProcSearch.Name = "_bProcSearch"; @@ -1007,9 +1001,9 @@ private void InitializeComponent() this._bProcSearch.Text = "Search"; this._bProcSearch.UseVisualStyleBackColor = true; this._bProcSearch.Click += new System.EventHandler(this._bProcSearch_Click); - // + // // _tbProcSeach - // + // this._tbProcSeach.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbProcSeach.Location = new System.Drawing.Point(3, 3); @@ -1017,9 +1011,9 @@ private void InitializeComponent() this._tbProcSeach.Size = new System.Drawing.Size(207, 20); this._tbProcSeach.TabIndex = 4; this._tbProcSeach.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbSearch_KeyDown); - // + // // _cbProcTarget2 - // + // this._cbProcTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._cbProcTarget2.DropDownHeight = 500; this._cbProcTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1030,9 +1024,9 @@ private void InitializeComponent() this._cbProcTarget2.Size = new System.Drawing.Size(119, 21); this._cbProcTarget2.TabIndex = 3; this._cbProcTarget2.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); - // + // // _cbProcTarget1 - // + // this._cbProcTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcTarget1.DropDownHeight = 500; @@ -1044,9 +1038,9 @@ private void InitializeComponent() this._cbProcTarget1.Size = new System.Drawing.Size(122, 21); this._cbProcTarget1.TabIndex = 3; this._cbProcTarget1.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); - // + // // _cbProcSpellEffect - // + // this._cbProcSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellEffect.DropDownHeight = 500; @@ -1058,9 +1052,9 @@ private void InitializeComponent() this._cbProcSpellEffect.Size = new System.Drawing.Size(260, 21); this._cbProcSpellEffect.TabIndex = 3; this._cbProcSpellEffect.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); - // + // // _cbProcSpellAura - // + // this._cbProcSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellAura.DropDownHeight = 500; @@ -1072,9 +1066,9 @@ private void InitializeComponent() this._cbProcSpellAura.Size = new System.Drawing.Size(260, 21); this._cbProcSpellAura.TabIndex = 2; this._cbProcSpellAura.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); - // + // // _cbProcSpellFamilyName - // + // this._cbProcSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellFamilyName.DropDownHeight = 500; @@ -1086,9 +1080,9 @@ private void InitializeComponent() this._cbProcSpellFamilyName.Size = new System.Drawing.Size(260, 21); this._cbProcSpellFamilyName.TabIndex = 1; this._cbProcSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); - // + // // _lvProcAdditionalInfo - // + // this._lvProcAdditionalInfo.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this._chID, this._chName}); @@ -1103,19 +1097,19 @@ private void InitializeComponent() this._lvProcAdditionalInfo.UseCompatibleStateImageBehavior = false; this._lvProcAdditionalInfo.View = System.Windows.Forms.View.Details; this._lvProcAdditionalInfo.SelectedIndexChanged += new System.EventHandler(this._lvProcAdditionalInfo_SelectedIndexChanged); - // + // // _chID - // + // this._chID.Text = "Entry"; this._chID.Width = 100; - // + // // _chName - // + // this._chName.Text = "Name"; this._chName.Width = 685; - // + // // _tpCompare - // + // this._tpCompare.Controls.Add(this._scCompareRoot); this._tpCompare.Location = new System.Drawing.Point(4, 22); this._tpCompare.Name = "_tpCompare"; @@ -1124,24 +1118,24 @@ private void InitializeComponent() this._tpCompare.TabIndex = 4; this._tpCompare.Text = "Compare Spells"; this._tpCompare.UseVisualStyleBackColor = true; - // + // // _scCompareRoot - // + // this._scCompareRoot.Dock = System.Windows.Forms.DockStyle.Fill; this._scCompareRoot.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; this._scCompareRoot.Location = new System.Drawing.Point(3, 3); this._scCompareRoot.Name = "_scCompareRoot"; - // + // // _scCompareRoot.Panel1 - // + // this._scCompareRoot.Panel1.BackColor = System.Drawing.Color.WhiteSmoke; this._scCompareRoot.Panel1.Controls.Add(this._bCompareSearch1); this._scCompareRoot.Panel1.Controls.Add(this.label13); this._scCompareRoot.Panel1.Controls.Add(this._tbCompareFilterSpell1); this._scCompareRoot.Panel1.Controls.Add(this._rtbCompareSpell1); - // + // // _scCompareRoot.Panel2 - // + // this._scCompareRoot.Panel2.BackColor = System.Drawing.Color.WhiteSmoke; this._scCompareRoot.Panel2.Controls.Add(this._bCompareSearch2); this._scCompareRoot.Panel2.Controls.Add(this.label14); @@ -1150,9 +1144,9 @@ private void InitializeComponent() this._scCompareRoot.Size = new System.Drawing.Size(858, 551); this._scCompareRoot.SplitterDistance = 426; this._scCompareRoot.TabIndex = 0; - // + // // _bCompareSearch1 - // + // this._bCompareSearch1.Location = new System.Drawing.Point(238, 1); this._bCompareSearch1.Name = "_bCompareSearch1"; this._bCompareSearch1.Size = new System.Drawing.Size(51, 23); @@ -1160,39 +1154,39 @@ private void InitializeComponent() this._bCompareSearch1.Text = "Search"; this._bCompareSearch1.UseVisualStyleBackColor = true; this._bCompareSearch1.Click += new System.EventHandler(this.CompareSearch1_Click); - // + // // label13 - // + // this.label13.AutoSize = true; this.label13.Location = new System.Drawing.Point(5, 6); this.label13.Name = "label13"; this.label13.Size = new System.Drawing.Size(61, 13); this.label13.TabIndex = 2; this.label13.Text = "ID or Name"; - // + // // _tbCompareFilterSpell1 - // + // this._tbCompareFilterSpell1.Location = new System.Drawing.Point(86, 3); this._tbCompareFilterSpell1.Name = "_tbCompareFilterSpell1"; this._tbCompareFilterSpell1.Size = new System.Drawing.Size(146, 20); this._tbCompareFilterSpell1.TabIndex = 1; this._tbCompareFilterSpell1.TextChanged += new System.EventHandler(this.CompareFilterSpell_TextChanged); - // + // // _rtbCompareSpell1 - // + // this._rtbCompareSpell1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._rtbCompareSpell1.BackColor = System.Drawing.Color.Gainsboro; - this._rtbCompareSpell1.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this._rtbCompareSpell1.Font = new System.Drawing.Font("Arial Unicode MS", 9F); this._rtbCompareSpell1.Location = new System.Drawing.Point(0, 29); this._rtbCompareSpell1.Name = "_rtbCompareSpell1"; this._rtbCompareSpell1.Size = new System.Drawing.Size(423, 522); this._rtbCompareSpell1.TabIndex = 0; this._rtbCompareSpell1.Text = ""; - // + // // _bCompareSearch2 - // + // this._bCompareSearch2.Location = new System.Drawing.Point(243, 1); this._bCompareSearch2.Name = "_bCompareSearch2"; this._bCompareSearch2.Size = new System.Drawing.Size(51, 23); @@ -1200,39 +1194,39 @@ private void InitializeComponent() this._bCompareSearch2.Text = "Search"; this._bCompareSearch2.UseVisualStyleBackColor = true; this._bCompareSearch2.Click += new System.EventHandler(this.CompareSearch2_Click); - // + // // label14 - // + // this.label14.AutoSize = true; this.label14.Location = new System.Drawing.Point(10, 6); this.label14.Name = "label14"; this.label14.Size = new System.Drawing.Size(61, 13); this.label14.TabIndex = 2; this.label14.Text = "ID or Name"; - // + // // _rtbCompareSpell2 - // + // this._rtbCompareSpell2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._rtbCompareSpell2.BackColor = System.Drawing.Color.Gainsboro; - this._rtbCompareSpell2.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F); + this._rtbCompareSpell2.Font = new System.Drawing.Font("Arial Unicode MS", 9F); this._rtbCompareSpell2.Location = new System.Drawing.Point(3, 29); this._rtbCompareSpell2.Name = "_rtbCompareSpell2"; this._rtbCompareSpell2.Size = new System.Drawing.Size(425, 522); this._rtbCompareSpell2.TabIndex = 0; this._rtbCompareSpell2.Text = ""; - // + // // _tbCompareFilterSpell2 - // + // this._tbCompareFilterSpell2.Location = new System.Drawing.Point(91, 3); this._tbCompareFilterSpell2.Name = "_tbCompareFilterSpell2"; this._tbCompareFilterSpell2.Size = new System.Drawing.Size(146, 20); this._tbCompareFilterSpell2.TabIndex = 1; this._tbCompareFilterSpell2.TextChanged += new System.EventHandler(this.CompareFilterSpell_TextChanged); - // + // // _tpSqlData - // + // this._tpSqlData.Controls.Add(this.groupBox3); this._tpSqlData.Controls.Add(this.groupBox2); this._tpSqlData.Location = new System.Drawing.Point(4, 22); @@ -1241,9 +1235,9 @@ private void InitializeComponent() this._tpSqlData.TabIndex = 3; this._tpSqlData.Text = "Sql Data"; this._tpSqlData.UseVisualStyleBackColor = true; - // + // // groupBox3 - // + // this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox3.BackColor = System.Drawing.Color.WhiteSmoke; @@ -1270,9 +1264,9 @@ private void InitializeComponent() this.groupBox3.TabIndex = 1; this.groupBox3.TabStop = false; this.groupBox3.Text = "Filter"; - // + // // _cbBinaryCompare - // + // this._cbBinaryCompare.AutoSize = true; this._cbBinaryCompare.Location = new System.Drawing.Point(752, 55); this._cbBinaryCompare.Name = "_cbBinaryCompare"; @@ -1280,70 +1274,70 @@ private void InitializeComponent() this._cbBinaryCompare.TabIndex = 8; this._cbBinaryCompare.Text = "Binary Compare"; this._cbBinaryCompare.UseVisualStyleBackColor = true; - // + // // label9 - // + // this.label9.AutoSize = true; this.label9.Location = new System.Drawing.Point(6, 56); this.label9.Name = "label9"; this.label9.Size = new System.Drawing.Size(45, 13); this.label9.TabIndex = 7; this.label9.Text = "Manual:"; - // + // // _tbSqlManual - // + // this._tbSqlManual.Location = new System.Drawing.Point(81, 53); this._tbSqlManual.Name = "_tbSqlManual"; this._tbSqlManual.Size = new System.Drawing.Size(272, 20); this._tbSqlManual.TabIndex = 6; - // + // // label8 - // + // this.label8.AutoSize = true; this.label8.Location = new System.Drawing.Point(6, 20); this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(70, 13); this.label8.TabIndex = 5; this.label8.Text = "Family Name:"; - // + // // label12 - // + // this.label12.AutoSize = true; this.label12.Location = new System.Drawing.Point(571, 56); this.label12.Name = "label12"; this.label12.Size = new System.Drawing.Size(47, 13); this.label12.TabIndex = 5; this.label12.Text = "Proc Ex:"; - // + // // label11 - // + // this.label11.AutoSize = true; this.label11.Location = new System.Drawing.Point(376, 56); this.label11.Name = "label11"; this.label11.Size = new System.Drawing.Size(32, 13); this.label11.TabIndex = 5; this.label11.Text = "Proc:"; - // + // // label10 - // + // this.label10.AutoSize = true; this.label10.Location = new System.Drawing.Point(571, 20); this.label10.Name = "label10"; this.label10.Size = new System.Drawing.Size(43, 13); this.label10.TabIndex = 5; this.label10.Text = "School:"; - // + // // label7 - // + // this.label7.AutoSize = true; this.label7.Location = new System.Drawing.Point(376, 20); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(47, 13); this.label7.TabIndex = 5; this.label7.Text = "Spell ID:"; - // + // // _bSqlProcEx - // + // this._bSqlProcEx.Location = new System.Drawing.Point(718, 51); this._bSqlProcEx.Name = "_bSqlProcEx"; this._bSqlProcEx.Size = new System.Drawing.Size(28, 23); @@ -1351,9 +1345,9 @@ private void InitializeComponent() this._bSqlProcEx.Text = "..."; this._bSqlProcEx.UseVisualStyleBackColor = true; this._bSqlProcEx.Click += new System.EventHandler(this.CalcProcFlags_Click); - // + // // _bSqlProc - // + // this._bSqlProc.Location = new System.Drawing.Point(535, 51); this._bSqlProc.Name = "_bSqlProc"; this._bSqlProc.Size = new System.Drawing.Size(28, 23); @@ -1361,9 +1355,9 @@ private void InitializeComponent() this._bSqlProc.Text = "..."; this._bSqlProc.UseVisualStyleBackColor = true; this._bSqlProc.Click += new System.EventHandler(this.CalcProcFlags_Click); - // + // // _bSqlSchool - // + // this._bSqlSchool.Location = new System.Drawing.Point(718, 15); this._bSqlSchool.Name = "_bSqlSchool"; this._bSqlSchool.Size = new System.Drawing.Size(28, 23); @@ -1371,37 +1365,37 @@ private void InitializeComponent() this._bSqlSchool.Text = "..."; this._bSqlSchool.UseVisualStyleBackColor = true; this._bSqlSchool.Click += new System.EventHandler(this.CalcProcFlags_Click); - // + // // _tbSqlProcEx - // + // this._tbSqlProcEx.Location = new System.Drawing.Point(620, 53); this._tbSqlProcEx.Name = "_tbSqlProcEx"; this._tbSqlProcEx.Size = new System.Drawing.Size(92, 20); this._tbSqlProcEx.TabIndex = 3; - // + // // _tbSqlProc - // + // this._tbSqlProc.Location = new System.Drawing.Point(429, 53); this._tbSqlProc.Name = "_tbSqlProc"; this._tbSqlProc.Size = new System.Drawing.Size(100, 20); this._tbSqlProc.TabIndex = 3; - // + // // _tbSqlSchool - // + // this._tbSqlSchool.Location = new System.Drawing.Point(620, 17); this._tbSqlSchool.Name = "_tbSqlSchool"; this._tbSqlSchool.Size = new System.Drawing.Size(92, 20); this._tbSqlSchool.TabIndex = 3; - // + // // textBox1 - // + // this.textBox1.Location = new System.Drawing.Point(429, 17); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(100, 20); this.textBox1.TabIndex = 2; - // + // // _cbSqlSpellFamily - // + // this._cbSqlSpellFamily.DropDownHeight = 500; this._cbSqlSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this._cbSqlSpellFamily.FormattingEnabled = true; @@ -1410,9 +1404,9 @@ private void InitializeComponent() this._cbSqlSpellFamily.Name = "_cbSqlSpellFamily"; this._cbSqlSpellFamily.Size = new System.Drawing.Size(272, 21); this._cbSqlSpellFamily.TabIndex = 1; - // + // // _bSelect - // + // this._bSelect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._bSelect.Location = new System.Drawing.Point(775, 10); this._bSelect.Name = "_bSelect"; @@ -1421,9 +1415,9 @@ private void InitializeComponent() this._bSelect.Text = "Select"; this._bSelect.UseVisualStyleBackColor = true; this._bSelect.Click += new System.EventHandler(this.Select_Click); - // + // // groupBox2 - // + // this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); @@ -1434,20 +1428,20 @@ private void InitializeComponent() this.groupBox2.TabIndex = 0; this.groupBox2.TabStop = false; this.groupBox2.Text = "Spell Proc Event (Select item and press Enter or Mouse double click)"; - // + // // splitContainer6 - // + // this.splitContainer6.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer6.Location = new System.Drawing.Point(3, 16); this.splitContainer6.Name = "splitContainer6"; this.splitContainer6.Orientation = System.Windows.Forms.Orientation.Horizontal; - // + // // splitContainer6.Panel1 - // + // this.splitContainer6.Panel1.Controls.Add(this._lvDataList); - // + // // splitContainer6.Panel2 - // + // this.splitContainer6.Panel2.BackColor = System.Drawing.Color.WhiteSmoke; this.splitContainer6.Panel2.Controls.Add(this._rtbSqlLog); this.splitContainer6.Panel2.Controls.Add(this._bSqlToBase); @@ -1455,23 +1449,17 @@ private void InitializeComponent() this.splitContainer6.Size = new System.Drawing.Size(858, 444); this.splitContainer6.SplitterDistance = 229; this.splitContainer6.TabIndex = 0; - // + // // _lvDataList - // + // this._lvDataList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.entry, this.spellname, this.schoolmask, this.spellfamilyname, - this.spellfamilymaskA0, - this.spellfamilymaskA1, - this.spellfamilymaskA2, - this.spellfamilymaskB0, - this.spellfamilymaskB1, - this.spellfamilymaskB2, - this.spellfamilymaskC0, - this.spellfamilymaskC1, - this.spellfamilymaskC2, + this.spellfamilymask0, + this.spellfamilymask1, + this.spellfamilymask2, this.procflag, this.procEx, this.ppmRate, @@ -1492,98 +1480,68 @@ private void InitializeComponent() this._lvDataList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this._lvSqlData_RetrieveVirtualItem); this._lvDataList.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Sql_DataList_KeyDown); this._lvDataList.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.Sql_DataList_MouseDoubleClick); - // + // // entry - // + // this.entry.Text = "Entry"; this.entry.Width = 56; - // + // // spellname - // + // this.spellname.Text = "Spell Name"; this.spellname.Width = 300; - // + // // schoolmask - // + // this.schoolmask.Text = "School Mask"; this.schoolmask.Width = 78; - // + // // spellfamilyname - // + // this.spellfamilyname.Text = "Spell Family Name"; this.spellfamilyname.Width = 103; - // - // spellfamilymaskA0 - // - this.spellfamilymaskA0.Text = "Spell Family Mask A 0"; - this.spellfamilymaskA0.Width = 120; - // - // spellfamilymaskA1 - // - this.spellfamilymaskA1.Text = "Spell Family Mask A 1"; - this.spellfamilymaskA1.Width = 120; - // - // spellfamilymaskA2 - // - this.spellfamilymaskA2.Text = "Spell Family Mask A 2"; - this.spellfamilymaskA2.Width = 120; - // - // spellfamilymaskB0 - // - this.spellfamilymaskB0.Text = "Spell Family Mask B 0"; - this.spellfamilymaskB0.Width = 120; - // - // spellfamilymaskB1 - // - this.spellfamilymaskB1.Text = "Spell Family Mask B 1"; - this.spellfamilymaskB1.Width = 120; - // - // spellfamilymaskB2 - // - this.spellfamilymaskB2.Text = "Spell Family Mask B 2"; - this.spellfamilymaskB2.Width = 120; - // - // spellfamilymaskC0 - // - this.spellfamilymaskC0.Text = "Spell Family Mask C 0"; - this.spellfamilymaskC0.Width = 120; - // - // spellfamilymaskC1 - // - this.spellfamilymaskC1.Text = "Spell Family Mask C 1"; - this.spellfamilymaskC1.Width = 120; - // - // spellfamilymaskC2 - // - this.spellfamilymaskC2.Text = "Spell Family Mask C 2"; - this.spellfamilymaskC2.Width = 120; - // + // + // spellfamilymask0 + // + this.spellfamilymask0.Text = "Spell Family Mask 0"; + this.spellfamilymask0.Width = 110; + // + // spellfamilymask1 + // + this.spellfamilymask1.Text = "Spell Family Mask 1"; + this.spellfamilymask1.Width = 110; + // + // spellfamilymask2 + // + this.spellfamilymask2.Text = "Spell Family Mask 2"; + this.spellfamilymask2.Width = 110; + // // procflag - // + // this.procflag.Text = "Proc Flags"; this.procflag.Width = 80; - // + // // procEx - // + // this.procEx.Text = "Proc Ex"; this.procEx.Width = 80; - // + // // ppmRate - // + // this.ppmRate.Text = "PPM Rate"; this.ppmRate.Width = 67; - // + // // customchance - // + // this.customchance.Text = "Custom Chance"; this.customchance.Width = 93; - // + // // cooldown - // + // this.cooldown.Text = "Colldown"; - // + // // _rtbSqlLog - // + // this._rtbSqlLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); @@ -1592,9 +1550,9 @@ private void InitializeComponent() this._rtbSqlLog.Size = new System.Drawing.Size(858, 182); this._rtbSqlLog.TabIndex = 3; this._rtbSqlLog.Text = ""; - // + // // _bSqlToBase - // + // this._bSqlToBase.Location = new System.Drawing.Point(84, 3); this._bSqlToBase.Name = "_bSqlToBase"; this._bSqlToBase.Size = new System.Drawing.Size(75, 23); @@ -1602,9 +1560,9 @@ private void InitializeComponent() this._bSqlToBase.Text = "To DB"; this._bSqlToBase.UseVisualStyleBackColor = true; this._bSqlToBase.Click += new System.EventHandler(this.SqlToBase_Click); - // + // // _bSqlSave - // + // this._bSqlSave.Location = new System.Drawing.Point(3, 3); this._bSqlSave.Name = "_bSqlSave"; this._bSqlSave.Size = new System.Drawing.Size(75, 23); @@ -1612,9 +1570,9 @@ private void InitializeComponent() this._bSqlSave.Text = "Save"; this._bSqlSave.UseVisualStyleBackColor = true; this._bSqlSave.Click += new System.EventHandler(this.SqlSave_Click); - // + // // _cbProcFlag - // + // this._cbProcFlag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._cbProcFlag.Appearance = System.Windows.Forms.Appearance.Button; this._cbProcFlag.AutoSize = true; @@ -1626,9 +1584,9 @@ private void InitializeComponent() this._cbProcFlag.UseVisualStyleBackColor = true; this._cbProcFlag.Visible = false; this._cbProcFlag.CheckedChanged += new System.EventHandler(this._cbProcFlag_CheckedChanged); - // + // // _bWrite - // + // this._bWrite.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._bWrite.Enabled = false; this._bWrite.Location = new System.Drawing.Point(728, 1); @@ -1639,65 +1597,65 @@ private void InitializeComponent() this._bWrite.UseVisualStyleBackColor = true; this._bWrite.Visible = false; this._bWrite.Click += new System.EventHandler(this.Write_Click); - // + // // splitContainer7 - // + // this.splitContainer7.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer7.Location = new System.Drawing.Point(0, 0); this.splitContainer7.Name = "splitContainer7"; - // + // // splitContainer7.Panel1 - // + // this.splitContainer7.Panel1.Controls.Add(this.splitContainer8); this.splitContainer7.Panel1.Controls.Add(this.richTextBox1); - // + // // splitContainer7.Panel2 - // + // this.splitContainer7.Panel2.Controls.Add(this.richTextBox2); this.splitContainer7.Size = new System.Drawing.Size(858, 429); this.splitContainer7.SplitterDistance = 424; this.splitContainer7.TabIndex = 0; - // + // // splitContainer8 - // + // this.splitContainer8.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer8.Location = new System.Drawing.Point(0, 0); this.splitContainer8.Name = "splitContainer8"; - // + // // splitContainer8.Panel1 - // + // this.splitContainer8.Panel1.Controls.Add(this.textBox2); this.splitContainer8.Size = new System.Drawing.Size(424, 429); this.splitContainer8.SplitterDistance = 209; this.splitContainer8.TabIndex = 0; - // + // // textBox2 - // + // this.textBox2.Location = new System.Drawing.Point(19, 12); this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(100, 20); this.textBox2.TabIndex = 0; - // + // // richTextBox1 - // + // this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; this.richTextBox1.Location = new System.Drawing.Point(0, 0); this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.Size = new System.Drawing.Size(424, 429); this.richTextBox1.TabIndex = 0; this.richTextBox1.Text = ""; - // + // // richTextBox2 - // + // this.richTextBox2.Dock = System.Windows.Forms.DockStyle.Fill; this.richTextBox2.Location = new System.Drawing.Point(0, 0); this.richTextBox2.Name = "richTextBox2"; this.richTextBox2.Size = new System.Drawing.Size(430, 429); this.richTextBox2.TabIndex = 0; this.richTextBox2.Text = ""; - // + // // FormMain - // + // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(872, 629); @@ -1846,9 +1804,9 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader entry; private System.Windows.Forms.ColumnHeader schoolmask; private System.Windows.Forms.ColumnHeader spellfamilyname; - private System.Windows.Forms.ColumnHeader spellfamilymaskA0; - private System.Windows.Forms.ColumnHeader spellfamilymaskA1; - private System.Windows.Forms.ColumnHeader spellfamilymaskA2; + private System.Windows.Forms.ColumnHeader spellfamilymask0; + private System.Windows.Forms.ColumnHeader spellfamilymask1; + private System.Windows.Forms.ColumnHeader spellfamilymask2; private System.Windows.Forms.ColumnHeader procflag; private System.Windows.Forms.ColumnHeader procEx; private System.Windows.Forms.ColumnHeader ppmRate; @@ -1899,12 +1857,6 @@ private void InitializeComponent() private System.Windows.Forms.ComboBox _cbAdvancedFilter1; private System.Windows.Forms.RichTextBox _rtbSqlLog; private System.Windows.Forms.ImageList _ilPro; - private System.Windows.Forms.ColumnHeader spellfamilymaskB0; - private System.Windows.Forms.ColumnHeader spellfamilymaskB1; - private System.Windows.Forms.ColumnHeader spellfamilymaskB2; - private System.Windows.Forms.ColumnHeader spellfamilymaskC0; - private System.Windows.Forms.ColumnHeader spellfamilymaskC1; - private System.Windows.Forms.ColumnHeader spellfamilymaskC2; private System.Windows.Forms.ComboBox _cbAdvancedFilter2CompareType; private System.Windows.Forms.ComboBox _cbAdvancedFilter1CompareType; } diff --git a/SpellWork/Forms/FormMain.cs b/SpellWork/Forms/FormMain.cs index 59b5687c..58b64858 100644 --- a/SpellWork/Forms/FormMain.cs +++ b/SpellWork/Forms/FormMain.cs @@ -16,7 +16,7 @@ public FormMain() { InitializeComponent(); splitContainer3.SplitterDistance = 128; - + Text = DBC.VERSION; _cbSpellFamilyName.SetEnumValues("SpellFamilyName"); @@ -165,7 +165,7 @@ private void AdvancedSearch() uint at = _tbSearchAttributes.Text.ToUInt32(); _spellList = (from spell in DBC.Spell.Values - + where ((id == 0 || spell.ID == id) && (ic == 0 || spell.SpellIconID == ic) @@ -177,10 +177,10 @@ private void AdvancedSearch() || (spell.AttributesEx4 & at) != 0 || (spell.AttributesEx5 & at) != 0 || (spell.AttributesEx6 & at) != 0 - || (spell.AttributesExG & at) != 0)) + || (spell.AttributesEx7 & at) != 0)) && ((id != 0 || ic != 0 && at != 0) || spell.SpellName.ContainsText(name)) - + select spell).ToList(); _lvSpellList.VirtualListSize = _spellList.Count(); @@ -219,7 +219,7 @@ private void AdvansedFilter() CompareType field2ct = (CompareType)_cbAdvancedFilter2CompareType.SelectedItem; _spellList = (from spell in DBC.Spell.Values - + where ( !bFamilyNames || spell.SpellFamilyName == fFamilyNames) && (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) && (!bSpellAura || spell.EffectApplyAuraName.ContainsElement((uint)fSpellAura)) @@ -227,7 +227,7 @@ private void AdvansedFilter() && (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) && (!use1val || spell.CreateFilter(field1, advVal1, field1ct)) && (!use2val || spell.CreateFilter(field2, advVal2, field2ct)) - + select spell).ToList(); _lvSpellList.VirtualListSize = _spellList.Count(); @@ -277,7 +277,7 @@ private void _lvProcAdditionalInfo_SelectedIndexChanged(object sender, EventArgs if (_lvProcAdditionalInfo.SelectedIndices.Count > 0) SetProcAtribute(DBC.Spell[_lvProcAdditionalInfo.SelectedItems[0].SubItems[0].Text.ToUInt32()]); } - + private void _clbSchools_SelectedIndexChanged(object sender, EventArgs e) { if (ProcInfo.SpellProc.ID != 0) @@ -351,12 +351,12 @@ private void GetProcAttribute(SpellEntry spell) private void Search() { uint id = _tbProcSeach.Text.ToUInt32(); - + _spellProcList = (from spell in DBC.Spell.Values where (id == 0 || spell.ID == id) && (id != 0 || spell.SpellName.ContainsText(_tbProcSeach.Text)) select spell).ToList(); - + _lvProcSpellList.VirtualListSize = _spellProcList.Count; if (_lvProcSpellList.SelectedIndices.Count > 0) _lvProcSpellList.Items[_lvProcSpellList.SelectedIndices[0]].Selected = false; @@ -386,14 +386,14 @@ private void ProcFilter() && (!bSpellAura || spell.EffectApplyAuraName.Contains((uint)fSpellAura)) && (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) && (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) - + select spell).ToList(); _lvProcSpellList.VirtualListSize = _spellProcList.Count(); if (_lvProcSpellList.SelectedIndices.Count > 0) _lvProcSpellList.Items[_lvProcSpellList.SelectedIndices[0]].Selected = false; } - + private void FamilyTree_AfterCheck(object sender, TreeViewEventArgs e) { if (!ProcInfo.Update) return; @@ -570,14 +570,13 @@ private void Write_Click(object sender, EventArgs e) // drop query var drop = String.Format("DELETE FROM `spell_proc_event` WHERE `entry` IN ({0});", ProcInfo.SpellProc.ID); // insert query - var insert = String.Format("INSERT INTO `spell_proc_event` VALUES ({0}, 0x{1:X2}, 0x{2:X2}, 0x{3:X8}, 0x{4:X8}, 0x{5:X8}, 0x{6:X8}, 0x{7:X8}, 0x{8:X8}, 0x{9:X8}, 0x{10:X8}, 0x{11:X8}, 0x{12:X8}, 0x{13:X8}, {14}, {15}, {16});", + var insert = String.Format("INSERT INTO `spell_proc_event` VALUES ({0}, 0x{1:X2}, 0x{2:X2}, 0x{3:X8}, 0x{4:X8}, 0x{5:X8}, 0x{6:X8}, 0x{7:X8}, {8}, {9}, {10});", ProcInfo.SpellProc.ID, _clbSchools.GetFlagsValue(), _cbProcFitstSpellFamily.SelectedValue.ToUInt32(), SpellFamilyFlags[0], SpellFamilyFlags[1], SpellFamilyFlags[2], - 0,0,0,0,0,0,// пока что так, пока не пойму как... _clbProcFlags.GetFlagsValue(), _clbProcFlagEx.GetFlagsValue(), _tbPPM.Text.Replace(',', '.'), @@ -591,7 +590,7 @@ private void Write_Click(object sender, EventArgs e) ((Button)sender).Enabled = false; } - + private void ProcParse(object sender) { SpellProcEventEntry proc = MySQLConnect.SpellProcEvent[((ListView)sender).SelectedIndices[0]]; @@ -612,7 +611,7 @@ private void ProcParse(object sender) _tbCooldown.Text = proc.Cooldown.ToString(); _tvFamilyTree.SetMask(proc.SpellFamilyMask); - + tabControl1.SelectedIndex = 1; } @@ -621,7 +620,7 @@ private void ProcParse(object sender) #region VIRTUAL MODE private List _spellList = new List(); - + private void _lvSpellList_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { e.Item = new ListViewItem(new[] { _spellList[e.ItemIndex].ID.ToString(), _spellList[e.ItemIndex].SpellNameRank }); diff --git a/SpellWork/Forms/FormMain.resx b/SpellWork/Forms/FormMain.resx index ae0abf8c..b63a8124 100644 --- a/SpellWork/Forms/FormMain.resx +++ b/SpellWork/Forms/FormMain.resx @@ -131,7 +131,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAY - DQAAAk1TRnQBSQFMAgEBBgEAAQwBAAEMAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + DQAAAk1TRnQBSQFMAgEBBgEAARQBAAEUAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/SpellWork/Forms/FormSearch.Designer.cs b/SpellWork/Forms/FormSearch.Designer.cs index 1fd79cb1..2a9712ec 100644 --- a/SpellWork/Forms/FormSearch.Designer.cs +++ b/SpellWork/Forms/FormSearch.Designer.cs @@ -55,38 +55,38 @@ private void InitializeComponent() this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.SuspendLayout(); - // + // // splitContainer1 - // + // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; this.splitContainer1.Location = new System.Drawing.Point(0, 0); this.splitContainer1.Name = "splitContainer1"; - // + // // splitContainer1.Panel1 - // + // this.splitContainer1.Panel1.Controls.Add(this._rtbSpellInfo); - // + // // splitContainer1.Panel2 - // + // this.splitContainer1.Panel2.Controls.Add(this._bOk); this.splitContainer1.Panel2.Controls.Add(this._bCencel); this.splitContainer1.Panel2.Controls.Add(this.groupBox1); this.splitContainer1.Size = new System.Drawing.Size(672, 455); this.splitContainer1.SplitterDistance = 381; this.splitContainer1.TabIndex = 0; - // + // // _rtbSpellInfo - // + // this._rtbSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; this._rtbSpellInfo.Location = new System.Drawing.Point(0, 0); this._rtbSpellInfo.Name = "_rtbSpellInfo"; this._rtbSpellInfo.Size = new System.Drawing.Size(381, 455); this._rtbSpellInfo.TabIndex = 11; this._rtbSpellInfo.Text = ""; - // + // // _bOk - // + // this._bOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this._bOk.Location = new System.Drawing.Point(209, 425); this._bOk.Name = "_bOk"; @@ -95,9 +95,9 @@ private void InitializeComponent() this._bOk.Text = "OK"; this._bOk.UseVisualStyleBackColor = true; this._bOk.Click += new System.EventHandler(this.Ok_Click); - // + // // _bCencel - // + // this._bCencel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this._bCencel.Location = new System.Drawing.Point(128, 425); this._bCencel.Name = "_bCencel"; @@ -106,9 +106,9 @@ private void InitializeComponent() this._bCencel.Text = "Cencel"; this._bCencel.UseVisualStyleBackColor = true; this._bCencel.Click += new System.EventHandler(this.Cencel_Click); - // + // // groupBox1 - // + // this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); @@ -126,36 +126,36 @@ private void InitializeComponent() this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; this.groupBox1.Text = "Spell Search"; - // + // // label3 - // + // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(6, 69); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(49, 13); this.label3.TabIndex = 3; this.label3.Text = "Attribute:"; - // + // // label2 - // + // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(6, 43); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(45, 13); this.label2.TabIndex = 3; this.label2.Text = "Icon ID:"; - // + // // _lIDName - // + // this._lIDName.AutoSize = true; this._lIDName.Location = new System.Drawing.Point(6, 17); this._lIDName.Name = "_lIDName"; this._lIDName.Size = new System.Drawing.Size(64, 13); this._lIDName.TabIndex = 3; this._lIDName.Text = "ID or Name:"; - // + // // _tbAttribute - // + // this._tbAttribute.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbAttribute.Location = new System.Drawing.Point(74, 66); @@ -163,9 +163,9 @@ private void InitializeComponent() this._tbAttribute.Size = new System.Drawing.Size(198, 20); this._tbAttribute.TabIndex = 2; this._tbAttribute.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); - // + // // _tbIcon - // + // this._tbIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbIcon.Location = new System.Drawing.Point(74, 40); @@ -173,9 +173,9 @@ private void InitializeComponent() this._tbIcon.Size = new System.Drawing.Size(198, 20); this._tbIcon.TabIndex = 1; this._tbIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); - // + // // _tbIdName - // + // this._tbIdName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbIdName.Location = new System.Drawing.Point(74, 14); @@ -183,9 +183,9 @@ private void InitializeComponent() this._tbIdName.Size = new System.Drawing.Size(198, 20); this._tbIdName.TabIndex = 0; this._tbIdName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); - // + // // _lvSpellList - // + // this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); @@ -205,18 +205,18 @@ private void InitializeComponent() this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.SpellList_SelectedIndexChanged); this._lvSpellList.DoubleClick += new System.EventHandler(this.Ok_Click); this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.SpellList_RetrieveVirtualItem); - // + // // _chID - // + // this._chID.Text = "ID"; - // + // // _chName - // + // this._chName.Text = "Name"; this._chName.Width = 213; - // + // // groupBox2 - // + // this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox2.Controls.Add(this._cbTarget2); @@ -230,9 +230,9 @@ private void InitializeComponent() this.groupBox2.TabIndex = 0; this.groupBox2.TabStop = false; this.groupBox2.Text = "Spell Filter"; - // + // // _cbTarget2 - // + // this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget2.DropDownHeight = 500; this._cbTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -243,9 +243,9 @@ private void InitializeComponent() this._cbTarget2.Size = new System.Drawing.Size(263, 21); this._cbTarget2.TabIndex = 7; this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); - // + // // _cbTarget1 - // + // this._cbTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget1.DropDownHeight = 500; this._cbTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -256,9 +256,9 @@ private void InitializeComponent() this._cbTarget1.Size = new System.Drawing.Size(263, 21); this._cbTarget1.TabIndex = 6; this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); - // + // // _cbSpellEffect - // + // this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellEffect.DropDownHeight = 500; this._cbSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -269,9 +269,9 @@ private void InitializeComponent() this._cbSpellEffect.Size = new System.Drawing.Size(263, 21); this._cbSpellEffect.TabIndex = 5; this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); - // + // // _cbSpellAura - // + // this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellAura.DropDownHeight = 500; this._cbSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -282,9 +282,9 @@ private void InitializeComponent() this._cbSpellAura.Size = new System.Drawing.Size(263, 21); this._cbSpellAura.TabIndex = 4; this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); - // + // // _cbSpellFamily - // + // this._cbSpellFamily.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellFamily.DropDownHeight = 500; this._cbSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -295,9 +295,9 @@ private void InitializeComponent() this._cbSpellFamily.Size = new System.Drawing.Size(263, 21); this._cbSpellFamily.TabIndex = 3; this._cbSpellFamily.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); - // + // // FormSearch - // + // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(672, 455); diff --git a/SpellWork/Forms/FormSearch.cs b/SpellWork/Forms/FormSearch.cs index 2e49a31e..ccdd2de7 100644 --- a/SpellWork/Forms/FormSearch.cs +++ b/SpellWork/Forms/FormSearch.cs @@ -44,7 +44,7 @@ private void IdName_KeyDown(object sender, KeyEventArgs e) || (spell.AttributesEx4 & at) != 0 || (spell.AttributesEx5 & at) != 0 || (spell.AttributesEx6 & at) != 0 - || (spell.AttributesExG & at) != 0)) + || (spell.AttributesEx7 & at) != 0)) && (id != 0 || ic != 0 && at != 0) || spell.SpellName.ContainsText(name) @@ -52,7 +52,7 @@ private void IdName_KeyDown(object sender, KeyEventArgs e) _lvSpellList.VirtualListSize = _spellList.Count(); groupBox1.Text = "Spell Search count: " + _spellList.Count(); - + if (_lvSpellList.SelectedIndices.Count > 0) _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; } @@ -89,7 +89,7 @@ private void SpellFamily_SelectedIndexChanged(object sender, EventArgs e) _lvSpellList.VirtualListSize = _spellList.Count(); groupBox2.Text = "Spell Filter " + "count: " + _spellList.Count(); - + if (_lvSpellList.SelectedIndices.Count > 0) _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; } diff --git a/SpellWork/Forms/FormSettings.Designer.cs b/SpellWork/Forms/FormSettings.Designer.cs index 4c8f6328..6f954f00 100644 --- a/SpellWork/Forms/FormSettings.Designer.cs +++ b/SpellWork/Forms/FormSettings.Designer.cs @@ -45,9 +45,9 @@ private void InitializeComponent() this._bSaveSettings = new System.Windows.Forms.Button(); this._gbDbSetting.SuspendLayout(); this.SuspendLayout(); - // + // // _gbDbSetting - // + // this._gbDbSetting.Controls.Add(this._tbBase); this._gbDbSetting.Controls.Add(this.label5); this._gbDbSetting.Controls.Add(this._tbPass); @@ -64,90 +64,90 @@ private void InitializeComponent() this._gbDbSetting.TabIndex = 0; this._gbDbSetting.TabStop = false; this._gbDbSetting.Text = "Date Base Connect Settings"; - // + // // _tbBase - // + // this._tbBase.Location = new System.Drawing.Point(54, 126); this._tbBase.Name = "_tbBase"; this._tbBase.Size = new System.Drawing.Size(152, 20); this._tbBase.TabIndex = 4; - // + // // label5 - // + // this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(6, 129); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(31, 13); this.label5.TabIndex = 0; this.label5.Text = "Base"; - // + // // _tbPass - // + // this._tbPass.Location = new System.Drawing.Point(54, 100); this._tbPass.Name = "_tbPass"; this._tbPass.Size = new System.Drawing.Size(152, 20); this._tbPass.TabIndex = 3; this._tbPass.UseSystemPasswordChar = true; - // + // // label4 - // + // this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(6, 103); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(30, 13); this.label4.TabIndex = 0; this.label4.Text = "Pass"; - // + // // _tbUser - // + // this._tbUser.Location = new System.Drawing.Point(54, 74); this._tbUser.Name = "_tbUser"; this._tbUser.Size = new System.Drawing.Size(152, 20); this._tbUser.TabIndex = 2; - // + // // label3 - // + // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(6, 77); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(29, 13); this.label3.TabIndex = 0; this.label3.Text = "User"; - // + // // _tbPort - // + // this._tbPort.Location = new System.Drawing.Point(54, 48); this._tbPort.Name = "_tbPort"; this._tbPort.Size = new System.Drawing.Size(152, 20); this._tbPort.TabIndex = 1; - // + // // label2 - // + // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(6, 51); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(26, 13); this.label2.TabIndex = 0; this.label2.Text = "Port"; - // + // // _tbHost - // + // this._tbHost.Location = new System.Drawing.Point(54, 22); this._tbHost.Name = "_tbHost"; this._tbHost.Size = new System.Drawing.Size(152, 20); this._tbHost.TabIndex = 0; - // + // // label1 - // + // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(6, 25); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(29, 13); this.label1.TabIndex = 0; this.label1.Text = "Host"; - // + // // _cbUseDBConnect - // + // this._cbUseDBConnect.AutoSize = true; this._cbUseDBConnect.Location = new System.Drawing.Point(21, 176); this._cbUseDBConnect.Name = "_cbUseDBConnect"; @@ -156,9 +156,9 @@ private void InitializeComponent() this._cbUseDBConnect.Text = "Use DB Connect"; this._cbUseDBConnect.UseVisualStyleBackColor = true; this._cbUseDBConnect.CheckedChanged += new System.EventHandler(this._cbUseDBConnect_CheckedChanged); - // + // // _bTestConnect - // + // this._bTestConnect.Location = new System.Drawing.Point(12, 199); this._bTestConnect.Name = "_bTestConnect"; this._bTestConnect.Size = new System.Drawing.Size(95, 23); @@ -166,9 +166,9 @@ private void InitializeComponent() this._bTestConnect.Text = "Test connect"; this._bTestConnect.UseVisualStyleBackColor = true; this._bTestConnect.Click += new System.EventHandler(this._bSaveSettings_Click); - // + // // _bSaveSettings - // + // this._bSaveSettings.Location = new System.Drawing.Point(134, 199); this._bSaveSettings.Name = "_bSaveSettings"; this._bSaveSettings.Size = new System.Drawing.Size(95, 23); @@ -176,9 +176,9 @@ private void InitializeComponent() this._bSaveSettings.Text = "Save"; this._bSaveSettings.UseVisualStyleBackColor = true; this._bSaveSettings.Click += new System.EventHandler(this._bSaveSettings_Click); - // + // // FormSettings - // + // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(242, 234); diff --git a/SpellWork/Forms/FormSettings.cs b/SpellWork/Forms/FormSettings.cs index c4121824..1c6806bd 100644 --- a/SpellWork/Forms/FormSettings.cs +++ b/SpellWork/Forms/FormSettings.cs @@ -32,7 +32,7 @@ private void _bSaveSettings_Click(object sender, EventArgs e) Settings.Default.UseDbConnect = _cbUseDBConnect.Checked; MySQLConnect.TestConnect(); - + if (((Button)sender).Text != "Save") { if (MySQLConnect.Connected) diff --git a/SpellWork/Loader.cs b/SpellWork/Loader.cs index 57539fa0..8c5c80f3 100644 --- a/SpellWork/Loader.cs +++ b/SpellWork/Loader.cs @@ -22,7 +22,6 @@ public Loader() DBC.OverrideSpellData = DBCReader.ReadDBC(null); - DBC.Locale = DetectedLocale; } diff --git a/SpellWork/Properties/AssemblyInfo.cs b/SpellWork/Properties/AssemblyInfo.cs index efd6526e..c17c397e 100644 --- a/SpellWork/Properties/AssemblyInfo.cs +++ b/SpellWork/Properties/AssemblyInfo.cs @@ -2,20 +2,20 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; -// General Information about an assembly is controlled through the following +// General Information about an assembly is controlled through the following // set of attributes. Change these attribute values to modify the information // associated with an assembly. [assembly: AssemblyTitle("SpellWork")] [assembly: AssemblyDescription("SpellWork")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("MaNGOS")] +[assembly: AssemblyCompany("TrinityCore")] [assembly: AssemblyProduct("SpellWork")] [assembly: AssemblyCopyright("Copyright © LordJZ and Konctantin 2010")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from // COM, set the ComVisible attribute to true on that type. [assembly: ComVisible(false)] @@ -25,11 +25,11 @@ // Version information for an assembly consists of the following four values: // // Major Version -// Minor Version +// Minor Version // Build Number // Revision // -// You can specify all the values or you can default the Build and Revision Numbers +// You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: // [assembly: AssemblyVersion("1.0.*")] [assembly: AssemblyVersion("1.0.0.0")] diff --git a/SpellWork/Properties/Resources.Designer.cs b/SpellWork/Properties/Resources.Designer.cs index 2d83977d..4b66567f 100644 --- a/SpellWork/Properties/Resources.Designer.cs +++ b/SpellWork/Properties/Resources.Designer.cs @@ -10,8 +10,8 @@ namespace SpellWork.Properties { using System; - - + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -23,15 +23,15 @@ namespace SpellWork.Properties { [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { - + private static global::System.Resources.ResourceManager resourceMan; - + private static global::System.Globalization.CultureInfo resourceCulture; - + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } - + /// /// Returns the cached ResourceManager instance used by this class. /// @@ -45,7 +45,7 @@ internal Resources() { return resourceMan; } } - + /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. diff --git a/SpellWork/Properties/Settings.Designer.cs b/SpellWork/Properties/Settings.Designer.cs index 83e2be7c..71cf2dc7 100644 --- a/SpellWork/Properties/Settings.Designer.cs +++ b/SpellWork/Properties/Settings.Designer.cs @@ -9,20 +9,20 @@ //------------------------------------------------------------------------------ namespace SpellWork.Properties { - - + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - + public static Settings Default { get { return defaultInstance; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("localhost")] @@ -34,7 +34,7 @@ public string Host { this["Host"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("3306")] @@ -46,7 +46,7 @@ public string Port { this["Port"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("root")] @@ -58,7 +58,7 @@ public string User { this["User"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("")] @@ -70,7 +70,7 @@ public string Pass { this["Pass"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("mangos")] @@ -82,7 +82,7 @@ public string Db_mangos { this["Db_mangos"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] diff --git a/SpellWork/Spell/ProcInfo.cs b/SpellWork/Spell/ProcInfo.cs index abaa43e1..3171975f 100644 --- a/SpellWork/Spell/ProcInfo.cs +++ b/SpellWork/Spell/ProcInfo.cs @@ -54,7 +54,7 @@ from SkillLine in temp2.DefaultIfEmpty() StringBuilder toolTip = new StringBuilder(); name.AppendFormat("{0} - {1} ", spell.ID, spell.SpellNameRank); - + toolTip.AppendFormatLine("Spell Name: {0}", spell.SpellNameRank); toolTip.AppendFormatLine("Description: {0}", spell.Description); toolTip.AppendFormatLine("ToolTip: {0}", spell.ToolTip); @@ -69,7 +69,7 @@ from SkillLine in temp2.DefaultIfEmpty() } name.AppendFormat("({0})", spell.School.ToString().NormaliseString("MASK_")); - + foreach (TreeNode node in familyTree.Nodes) { uint[] mask = new uint[3]; diff --git a/SpellWork/Spell/SpellCompare.cs b/SpellWork/Spell/SpellCompare.cs index fd0793cd..77a04adc 100644 --- a/SpellWork/Spell/SpellCompare.cs +++ b/SpellWork/Spell/SpellCompare.cs @@ -27,7 +27,7 @@ public SpellCompare(RichTextBox rtb1, RichTextBox rtb2, SpellEntry spell1, Spell string[] strsl = rtb1.Text.Split('\n'); string[] strsr = rtb2.Text.Split('\n'); - + int pos = 0; foreach (string str in strsl) { diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 19590215..17d5a5a6 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -17,7 +17,7 @@ public SpellInfo(RichTextBox rtb, SpellEntry spell) { this.rtb = rtb; this.spell = spell; - + ProcInfo.SpellProc = spell; ViewSpellInfo(); @@ -49,8 +49,8 @@ private void ViewSpellInfo() rtb.AppendFormatLine("DamageClass = {0} ({1})", spell.DmgClass, (SpellDmgClass)spell.DmgClass); rtb.AppendFormatLine("PreventionType = {0} ({1})", spell.PreventionType, (SpellPreventionType)spell.PreventionType); - if (spell.Attributes != 0 || spell.AttributesEx != 0 || spell.AttributesEx2 != 0 || spell.AttributesEx3 != 0 - || spell.AttributesEx4 != 0 || spell.AttributesEx5 != 0 || spell.AttributesEx6 != 0 || spell.AttributesExG != 0) + if (spell.Attributes != 0 || spell.AttributesEx != 0 || spell.AttributesEx2 != 0 || spell.AttributesEx3 != 0 + || spell.AttributesEx4 != 0 || spell.AttributesEx5 != 0 || spell.AttributesEx6 != 0 || spell.AttributesEx7 != 0) rtb.AppendLine(_line); if (spell.Attributes != 0) @@ -67,16 +67,16 @@ private void ViewSpellInfo() rtb.AppendFormatLine("AttributesEx5: 0x{0:X8} ({1})", spell.AttributesEx5, (SpellAtributeEx5)spell.AttributesEx5); if (spell.AttributesEx6 != 0) rtb.AppendFormatLine("AttributesEx6: 0x{0:X8} ({1})", spell.AttributesEx6, (SpellAtributeEx6)spell.AttributesEx6); - if (spell.AttributesExG != 0) - rtb.AppendFormatLine("AttributesExG: 0x{0:X8} ({1})", spell.AttributesExG, (SpellAtributeExG)spell.AttributesExG); + if (spell.AttributesEx7 != 0) + rtb.AppendFormatLine("AttributesEx7: 0x{0:X8} ({1})", spell.AttributesEx7, (SpellAtributeEx7)spell.AttributesEx7); rtb.AppendLine(_line); - + if (spell.Targets != 0) rtb.AppendFormatLine("Targets Mask = 0x{0:X8} ({1})", spell.Targets, (SpellCastTargetFlags)spell.Targets); if (spell.TargetCreatureType != 0) - rtb.AppendFormatLine("Creature Type Mask = 0x{0:X8} ({1})", + rtb.AppendFormatLine("Creature Type Mask = 0x{0:X8} ({1})", spell.TargetCreatureType, (CreatureTypeMask)spell.TargetCreatureType); if (spell.Stances != 0) @@ -87,7 +87,7 @@ private void ViewSpellInfo() AppendSkillLine(); - rtb.AppendFormatLine("Spell Level = {0}, base {1}, max {2}, maxTarget {3}", + rtb.AppendFormatLine("Spell Level = {0}, base {1}, max {2}, maxTarget {3}", spell.SpellLevel, spell.BaseLevel, spell.MaxLevel, spell.MaxTargetLevel); if (spell.EquippedItemClass != -1) @@ -99,22 +99,22 @@ private void ViewSpellInfo() switch ((ItemClass)spell.EquippedItemClass) { case ItemClass.WEAPON: - rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", + rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", spell.EquippedItemSubClassMask, (ItemSubClassWeaponMask)spell.EquippedItemSubClassMask); break; case ItemClass.ARMOR: - rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", + rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", spell.EquippedItemSubClassMask, (ItemSubClassArmorMask)spell.EquippedItemSubClassMask); break; case ItemClass.MISC: - rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", + rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", spell.EquippedItemSubClassMask, (ItemSubClassMiscMask)spell.EquippedItemSubClassMask); break; } } if (spell.EquippedItemInventoryTypeMask != 0) - rtb.AppendFormatLine(" InventoryType mask = 0x{0:X8} ({1})", + rtb.AppendFormatLine(" InventoryType mask = 0x{0:X8} ({1})", spell.EquippedItemInventoryTypeMask, (InventoryTypeMask)spell.EquippedItemInventoryTypeMask); } @@ -122,12 +122,12 @@ private void ViewSpellInfo() rtb.AppendFormatLine("Category = {0}", spell.Category); rtb.AppendFormatLine("DispelType = {0} ({1})", spell.Dispel, (DispelType)spell.Dispel); rtb.AppendFormatLine("Mechanic = {0} ({1})", spell.Mechanic, (Mechanics)spell.Mechanic); - + rtb.AppendLine(spell.Range); rtb.AppendFormatLineIfNotNull("Speed {0:F}", spell.Speed); rtb.AppendFormatLineIfNotNull("Stackable up to {0}", spell.StackAmount); - + rtb.AppendLine(spell.CastTime); if (spell.RecoveryTime != 0 || spell.CategoryRecoveryTime != 0 || spell.StartRecoveryCategory != 0) @@ -140,7 +140,7 @@ private void ViewSpellInfo() if (spell.ManaCost != 0 || spell.ManaCostPercentage != 0) { - rtb.AppendFormat("Power {0}, Cost {1}", + rtb.AppendFormat("Power {0}, Cost {1}", (Powers)spell.PowerType, spell.ManaCost == 0 ? spell.ManaCostPercentage.ToString() + " %" : spell.ManaCost.ToString()); rtb.AppendFormatIfNotNull(" + lvl * {0}", spell.ManaCostPerlevel); rtb.AppendFormatIfNotNull(" + {0} Per Second", spell.ManaPerSecond); @@ -191,10 +191,10 @@ private void AppendSkillLine() join skillLine in DBC.SkillLine on skillLineAbility.Value.SkillId equals skillLine.Key where skillLineAbility.Value.SpellId == spell.ID - select new - { - skillLineAbility, - skillLine + select new + { + skillLineAbility, + skillLine }; if (query.Count() == 0) @@ -227,7 +227,7 @@ private void AppendSpellEffectInfo() rtb.AppendFormatLine("Effect {0}: Id {1} ({2})", EFFECT_INDEX, spell.Effect[EFFECT_INDEX], (SpellEffects)spell.Effect[EFFECT_INDEX]); rtb.SetDefaultStyle(); rtb.AppendFormat("BasePoints = {0}", spell.EffectBasePoints[EFFECT_INDEX] + 1); - + if (spell.EffectRealPointsPerLevel[EFFECT_INDEX] != 0) rtb.AppendFormat(" + Level * {0:F}", spell.EffectRealPointsPerLevel[EFFECT_INDEX]); @@ -256,7 +256,7 @@ private void AppendSpellEffectInfo() AuraModTypeName(EFFECT_INDEX); uint[] ClassMask = new uint[3]; - + switch (EFFECT_INDEX) { case 0: ClassMask = spell.EffectSpellClassMaskA; break; @@ -296,7 +296,7 @@ from Skill in temp.DefaultIfEmpty() } rtb.AppendFormatLineIfNotNull("{0}", spell.GetRadius(EFFECT_INDEX)); - + // append trigger spell uint trigger = spell.EffectTriggerSpell[EFFECT_INDEX]; if (trigger != 0) @@ -378,14 +378,14 @@ private void AuraModTypeName(int index) rtb.AppendFormatLineIfNotNull("EffectMiscValueA = {0}", spell.EffectMiscValue[index]); rtb.AppendFormatLineIfNotNull("EffectMiscValueB = {0}", spell.EffectMiscValueB[index]); rtb.AppendFormatLineIfNotNull("EffectAmplitude = {0}", spell.EffectAmplitude[index]); - + return; } rtb.AppendFormat("Aura Id {0:D} ({0})", aura); rtb.AppendFormat(", value = {0}", spell.EffectBasePoints[index] + 1); rtb.AppendFormat(", misc = {0} (", misc); - + switch (aura) { case AuraType.SPELL_AURA_MOD_STAT: @@ -447,7 +447,7 @@ private void AppendItemInfo() { if (!MySQLConnect.Connected) return; - + var items = from item in DBC.ItemTemplate where item.SpellID.ContainsElement(spell.ID) select item; @@ -464,7 +464,7 @@ where item.SpellID.ContainsElement(spell.ID) { string name = item.LocalesName == string.Empty ? item.Name : item.LocalesName; string desc = item.LocalesDescription == string.Empty ? item.Description : item.LocalesDescription; - + desc = desc == string.Empty ? string.Empty : string.Format("({0})", desc); rtb.AppendFormatLine(@" {0} - {1} {2} ", item.Entry, name, desc); From 402be9879a9f5f5d740fb07194f8f01663d5c91d Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 28 Mar 2011 17:51:33 +0200 Subject: [PATCH 04/58] Implemented SpellDifficulty.dbc --- SpellWork/DBC/DBC.cs | 13 +- SpellWork/DBC/Structure.cs | 7 + SpellWork/Loader.cs | 14 +- SpellWork/Spell/SpellEnums.cs | 1193 +++++++++++++++++---------------- SpellWork/Spell/SpellInfo.cs | 34 + 5 files changed, 652 insertions(+), 609 deletions(-) diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index e27ab890..66ddbf2b 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -11,15 +11,16 @@ public static class DBC public const int MAX_EFFECT_INDEX = 3; public const int SPELL_ENTRY_FOR_DETECT_LOCALE = 1; + public static Dictionary OverrideSpellData; + public static Dictionary ScreenEffect; + public static Dictionary SkillLineAbility; + public static Dictionary SkillLine; public static Dictionary Spell; - public static Dictionary SpellRadius; public static Dictionary SpellCastTimes; - public static Dictionary SpellRange; + public static Dictionary SpellDifficulty; public static Dictionary SpellDuration; - public static Dictionary SkillLineAbility; - public static Dictionary SkillLine; - public static Dictionary ScreenEffect; - public static Dictionary OverrideSpellData; + public static Dictionary SpellRadius; + public static Dictionary SpellRange; public static Dictionary SpellStrings = new Dictionary(); public static Dictionary SkillLineStrings = new Dictionary(); diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs index c89254ca..fd7865f2 100644 --- a/SpellWork/DBC/Structure.cs +++ b/SpellWork/DBC/Structure.cs @@ -479,4 +479,11 @@ public struct Item public string LocalesDescription; public uint[] SpellID; }; + + public struct SpellDifficultyEntry + { + public uint Id; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] + public int[] SpellId; + }; } diff --git a/SpellWork/Loader.cs b/SpellWork/Loader.cs index 8c5c80f3..bd599bf9 100644 --- a/SpellWork/Loader.cs +++ b/SpellWork/Loader.cs @@ -10,17 +10,17 @@ class Loader { public Loader() { - DBC.Spell = DBCReader.ReadDBC(DBC.SpellStrings); - DBC.SkillLine = DBCReader.ReadDBC(DBC.SkillLineStrings); - DBC.SpellRange = DBCReader.ReadDBC(DBC.SpellRangeStrings); + DBC.OverrideSpellData = DBCReader.ReadDBC(null); DBC.ScreenEffect = DBCReader.ReadDBC(DBC.ScreenEffectStrings); - - DBC.SpellDuration = DBCReader.ReadDBC(null); + DBC.SkillLine = DBCReader.ReadDBC(DBC.SkillLineStrings); DBC.SkillLineAbility = DBCReader.ReadDBC(null); - DBC.SpellRadius = DBCReader.ReadDBC(null); + DBC.Spell = DBCReader.ReadDBC(DBC.SpellStrings); DBC.SpellCastTimes = DBCReader.ReadDBC(null); + DBC.SpellDifficulty = DBCReader.ReadDBC(null); + DBC.SpellDuration = DBCReader.ReadDBC(null); + DBC.SpellRadius = DBCReader.ReadDBC(null); + DBC.SpellRange = DBCReader.ReadDBC(DBC.SpellRangeStrings); - DBC.OverrideSpellData = DBCReader.ReadDBC(null); DBC.Locale = DetectedLocale; } diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index e185ea0c..c5dd7a2d 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -45,29 +45,30 @@ public enum SpellFamilyNames /// public enum SpellSpecific { - SPELL_NORMAL = 0, - SPELL_SEAL = 1, - SPELL_BLESSING = 2, - SPELL_AURA = 3, - SPELL_STING = 4, - SPELL_CURSE = 5, - SPELL_ASPECT = 6, - SPELL_TRACKER = 7, - SPELL_WARLOCK_ARMOR = 8, - SPELL_MAGE_ARMOR = 9, - SPELL_ELEMENTAL_SHIELD = 10, - SPELL_MAGE_POLYMORPH = 11, - SPELL_POSITIVE_SHOUT = 12, - SPELL_JUDGEMENT = 13, - SPELL_BATTLE_ELIXIR = 14, - SPELL_GUARDIAN_ELIXIR = 15, - SPELL_FLASK_ELIXIR = 16, - SPELL_PRESENCE = 17, - SPELL_HAND = 18, - SPELL_WELL_FED = 19, - SPELL_FOOD = 20, - SPELL_DRINK = 21, - SPELL_FOOD_AND_DRINK = 22, + SPELL_SPECIFIC_NORMAL = 0, + SPELL_SPECIFIC_SEAL = 1, + SPELL_SPECIFIC_AURA = 3, + SPELL_SPECIFIC_STING = 4, + SPELL_SPECIFIC_CURSE = 5, + SPELL_SPECIFIC_ASPECT = 6, + SPELL_SPECIFIC_TRACKER = 7, + SPELL_SPECIFIC_WARLOCK_ARMOR = 8, + SPELL_SPECIFIC_MAGE_ARMOR = 9, + SPELL_SPECIFIC_ELEMENTAL_SHIELD = 10, + SPELL_SPECIFIC_MAGE_POLYMORPH = 11, + SPELL_SPECIFIC_JUDGEMENT = 13, + SPELL_SPECIFIC_WARLOCK_CORRUPTION = 17, + SPELL_SPECIFIC_FOOD = 19, + SPELL_SPECIFIC_DRINK = 20, + SPELL_SPECIFIC_FOOD_AND_DRINK = 21, + SPELL_SPECIFIC_PRESENCE = 22, + SPELL_SPECIFIC_CHARM = 23, + SPELL_SPECIFIC_SCROLL = 24, + SPELL_SPECIFIC_MAGE_ARCANE_BRILLANCE = 25, + SPELL_SPECIFIC_WARRIOR_ENRAGE = 26, + SPELL_SPECIFIC_PRIEST_DIVINE_SPIRIT = 27, + SPELL_SPECIFIC_HAND = 28, + SPELL_SPECIFIC_PHASE = 29, }; /// @@ -117,7 +118,7 @@ public enum SpellEffects SPELL_EFFECT_LANGUAGE = 39, SPELL_EFFECT_DUAL_WIELD = 40, SPELL_EFFECT_JUMP = 41, - SPELL_EFFECT_JUMP2 = 42, + SPELL_EFFECT_JUMP_DEST = 42, SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER = 43, SPELL_EFFECT_SKILL_STEP = 44, SPELL_EFFECT_ADD_HONOR = 45, @@ -168,11 +169,11 @@ public enum SpellEffects SPELL_EFFECT_KILL_CREDIT = 90, SPELL_EFFECT_THREAT_ALL = 91, SPELL_EFFECT_ENCHANT_HELD_ITEM = 92, - SPELL_EFFECT_BREAK_PLAYER_TARGETING = 93, + SPELL_EFFECT_FORCE_DESELECT = 93, SPELL_EFFECT_SELF_RESURRECT = 94, SPELL_EFFECT_SKINNING = 95, SPELL_EFFECT_CHARGE = 96, - SPELL_EFFECT_SUMMON_ALL_TOTEMS = 97, + SPELL_EFFECT_CAST_BUTTON = 97, SPELL_EFFECT_KNOCK_BACK = 98, SPELL_EFFECT_DISENCHANT = 99, SPELL_EFFECT_INEBRIATE = 100, @@ -199,7 +200,7 @@ public enum SpellEffects SPELL_EFFECT_NORMALIZED_WEAPON_DMG = 121, SPELL_EFFECT_122 = 122, SPELL_EFFECT_SEND_TAXI = 123, - SPELL_EFFECT_PLAYER_PULL = 124, + SPELL_EFFECT_PULL_TOWARDS = 124, SPELL_EFFECT_MODIFY_THREAT_PERCENT = 125, SPELL_EFFECT_STEAL_BENEFICIAL_BUFF = 126, SPELL_EFFECT_PROSPECTING = 127, @@ -216,20 +217,20 @@ public enum SpellEffects SPELL_EFFECT_LEAP_BACK = 138, SPELL_EFFECT_CLEAR_QUEST = 139, SPELL_EFFECT_FORCE_CAST = 140, - SPELL_EFFECT_141 = 141, + SPELL_EFFECT_FORCE_CAST_WITH_VALUE = 141, SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE = 142, SPELL_EFFECT_APPLY_AREA_AURA_OWNER = 143, - SPELL_EFFECT_144 = 144, - SPELL_EFFECT_145 = 145, + SPELL_EFFECT_KNOCK_BACK_DEST = 144, + SPELL_EFFECT_PULL_TOWARDS_DEST = 145, SPELL_EFFECT_ACTIVATE_RUNE = 146, SPELL_EFFECT_QUEST_FAIL = 147, SPELL_EFFECT_148 = 148, - SPELL_EFFECT_149 = 149, - SPELL_EFFECT_150 = 150, + SPELL_EFFECT_CHARGE_DEST = 149, + SPELL_EFFECT_QUEST_START = 150, SPELL_EFFECT_TRIGGER_SPELL_2 = 151, SPELL_EFFECT_152 = 152, - SPELL_EFFECT_153 = 153, - SPELL_EFFECT_154 = 154, + SPELL_EFFECT_CREATE_TAMED_PET = 153, + SPELL_EFFECT_DISCOVER_TAXI = 154, SPELL_EFFECT_TITAN_GRIP = 155, SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC = 156, SPELL_EFFECT_CREATE_ITEM_2 = 157, @@ -239,7 +240,7 @@ public enum SpellEffects SPELL_EFFECT_TALENT_SPEC_COUNT = 161, SPELL_EFFECT_TALENT_SPEC_SELECT = 162, SPELL_EFFECT_163 = 163, - SPELL_EFFECT_164 = 164, + SPELL_EFFECT_REMOVE_AURA = 164, TOTAL_SPELL_EFFECTS = 165 }; @@ -267,9 +268,9 @@ public enum AuraType SPELL_AURA_MOD_STEALTH = 16, SPELL_AURA_MOD_STEALTH_DETECT = 17, SPELL_AURA_MOD_INVISIBILITY = 18, - SPELL_AURA_MOD_INVISIBILITY_DETECTION = 19, + SPELL_AURA_MOD_INVISIBILITY_DETECT = 19, SPELL_AURA_OBS_MOD_HEALTH = 20, //20,21 unofficial - SPELL_AURA_OBS_MOD_MANA = 21, + SPELL_AURA_OBS_MOD_POWER = 21, SPELL_AURA_MOD_RESISTANCE = 22, SPELL_AURA_PERIODIC_TRIGGER_SPELL = 23, SPELL_AURA_PERIODIC_ENERGIZE = 24, @@ -300,7 +301,7 @@ public enum AuraType SPELL_AURA_MOD_DODGE_PERCENT = 49, SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT = 50, SPELL_AURA_MOD_BLOCK_PERCENT = 51, - SPELL_AURA_MOD_CRIT_PERCENT = 52, + SPELL_AURA_MOD_WEAPON_CRIT_PERCENT = 52, SPELL_AURA_PERIODIC_LEECH = 53, SPELL_AURA_MOD_HIT_CHANCE = 54, SPELL_AURA_MOD_SPELL_HIT_CHANCE = 55, @@ -386,7 +387,7 @@ public enum AuraType SPELL_AURA_MOD_HEALING_DONE = 135, SPELL_AURA_MOD_HEALING_DONE_PERCENT = 136, SPELL_AURA_MOD_TOTAL_STAT_PERCENTAGE = 137, - SPELL_AURA_MOD_HASTE = 138, + SPELL_AURA_MOD_MELEE_HASTE = 138, SPELL_AURA_FORCE_REACTION = 139, SPELL_AURA_MOD_RANGED_HASTE = 140, SPELL_AURA_MOD_RANGED_AMMO_HASTE = 141, @@ -411,7 +412,7 @@ public enum AuraType SPELL_AURA_MOD_AOE_AVOIDANCE = 160, SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT = 161, SPELL_AURA_POWER_BURN_MANA = 162, - SPELL_AURA_MOD_CRIT_DAMAGE_BONUS = 163, + SPELL_AURA_MOD_CRIT_DAMAGE_BONUS_MELEE = 163, SPELL_AURA_164 = 164, SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS = 165, SPELL_AURA_MOD_ATTACK_POWER_PCT = 166, @@ -440,25 +441,25 @@ public enum AuraType SPELL_AURA_MOD_RATING = 189, SPELL_AURA_MOD_FACTION_REPUTATION_GAIN = 190, SPELL_AURA_USE_NORMAL_MOVEMENT_SPEED = 191, - SPELL_AURA_HASTE_MELEE = 192, + SPELL_AURA_MOD_MELEE_RANGED_HASTE = 192, SPELL_AURA_MELEE_SLOW = 193, - SPELL_AURA_MOD_IGNORE_ABSORB_SCHOOL = 194, - SPELL_AURA_MOD_IGNORE_ABSORB_FOR_SPELL = 195, + SPELL_AURA_MOD_TARGET_ABSORB_SCHOOL = 194, + SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL = 195, SPELL_AURA_MOD_COOLDOWN = 196, // only 24818 Noxious Breath SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE= 197, SPELL_AURA_198 = 198, // old SPELL_AURA_MOD_ALL_WEAPON_SKILLS SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT = 199, - SPELL_AURA_MOD_KILL_XP_PCT = 200, + SPELL_AURA_MOD_XP_PCT = 200, SPELL_AURA_FLY = 201, SPELL_AURA_IGNORE_COMBAT_RESULT = 202, SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE = 203, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE = 204, - SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_DAMAGE = 205, - SPELL_AURA_MOD_SPEED_MOUNTED = 206, // ? used in strange spells - SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 207, - SPELL_AURA_MOD_SPEED_FLIGHT = 208, - SPELL_AURA_MOD_FLIGHT_SPEED_ALWAYS = 209, - SPELL_AURA_210 = 210, // unused + SPELL_AURA_MOD_SCHOOL_CRIT_DMG_TAKEN = 205, + SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED = 206, // ? used in strange spells + SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED = 207, + SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 208, + SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS = 209, + SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS = 210, // unused SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK = 211, SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT = 212, SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT = 213, @@ -469,11 +470,11 @@ public enum AuraType SPELL_AURA_HASTE_RANGED = 218, SPELL_AURA_MOD_MANA_REGEN_FROM_STAT = 219, SPELL_AURA_MOD_RATING_FROM_STAT = 220, - SPELL_AURA_221 = 221, + SPELL_AURA_MOD_DETAUNT = 221, SPELL_AURA_222 = 222, - SPELL_AURA_223 = 223, + SPELL_AURA_RAID_PROC_FROM_CHARGE = 223, SPELL_AURA_224 = 224, - SPELL_AURA_PRAYER_OF_MENDING = 225, + SPELL_AURA_RAID_PROC_FROM_CHARGE_WITH_VALUE = 225, SPELL_AURA_PERIODIC_DUMMY = 226, SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE = 227, SPELL_AURA_DETECT_STEALTH = 228, @@ -491,80 +492,80 @@ public enum AuraType SPELL_AURA_MOD_EXPERTISE = 240, SPELL_AURA_FORCE_MOVE_FORWARD = 241, SPELL_AURA_MOD_SPELL_DAMAGE_FROM_HEALING = 242, - SPELL_AURA_243 = 243, + SPELL_AURA_MOD_FACTION = 243, SPELL_AURA_COMPREHEND_LANGUAGE = 244, - SPELL_AURA_MOD_DURATION_OF_MAGIC_EFFECTS = 245, - SPELL_AURA_MOD_DURATION_OF_EFFECTS_BY_DISPEL = 246, - SPELL_AURA_247 = 247, + SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL = 245, + SPELL_AURA_MOD_AURA_DURATION_BY_DISPEL_NOT_STACK = 246, + SPELL_AURA_CLONE_CASTER = 247, SPELL_AURA_MOD_COMBAT_RESULT_CHANCE = 248, SPELL_AURA_CONVERT_RUNE = 249, SPELL_AURA_MOD_INCREASE_HEALTH_2 = 250, SPELL_AURA_MOD_ENEMY_DODGE = 251, - SPELL_AURA_252 = 252, + SPELL_AURA_MOD_SPEED_SLOW_ALL = 252, SPELL_AURA_MOD_BLOCK_CRIT_CHANCE = 253, - SPELL_AURA_MOD_DISARM_SHIELD = 254, + SPELL_AURA_MOD_DISARM_OFFHAND = 254, SPELL_AURA_MOD_MECHANIC_DAMAGE_TAKEN_PERCENT = 255, SPELL_AURA_NO_REAGENT_USE = 256, SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS = 257, SPELL_AURA_258 = 258, - SPELL_AURA_259 = 259, + SPELL_AURA_MOD_HOT_PCT = 259, SPELL_AURA_SCREEN_EFFECT = 260, SPELL_AURA_PHASE = 261, - SPELL_AURA_262 = 262, + SPELL_AURA_ABILITY_IGNORE_AURASTATE = 262, SPELL_AURA_ALLOW_ONLY_ABILITY = 263, SPELL_AURA_264 = 264, SPELL_AURA_265 = 265, SPELL_AURA_266 = 266, SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL = 267, SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT = 268, - SPELL_AURA_MOD_IGNORE_DAMAGE_REDUCTION_SCHOOL = 269, - SPELL_AURA_MOD_IGNORE_TARGET_RESIST = 270, // Possibly need swap vs 195 aura used only in 1 spell Chaos Bolt Passive + SPELL_AURA_MOD_IGNORE_TARGET_RESIST = 269, + SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST = 270, // Possibly need swap vs 195 aura used only in 1 spell Chaos Bolt Passive SPELL_AURA_MOD_DAMAGE_FROM_CASTER = 271, - SPELL_AURA_MAELSTROM_WEAPON = 272, + SPELL_AURA_IGNORE_MELEE_RESET = 272, SPELL_AURA_X_RAY = 273, - SPELL_AURA_274 = 274, + SPELL_AURA_ABILITY_CONSUME_NO_AMMO = 274, SPELL_AURA_MOD_IGNORE_SHAPESHIFT = 275, SPELL_AURA_276 = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done SPELL_AURA_MOD_MAX_AFFECTED_TARGETS = 277, SPELL_AURA_MOD_DISARM_RANGED = 278, - SPELL_AURA_279 = 279, - SPELL_AURA_MOD_TARGET_ARMOR_PCT = 280, - SPELL_AURA_MOD_HONOR_GAIN = 281, + SPELL_AURA_INITIALIZE_IMAGES = 279, + SPELL_AURA_MOD_ARMOR_PENETRATION_PCT = 280, + SPELL_AURA_MOD_HONOR_GAIN_PCT = 281, SPELL_AURA_MOD_BASE_HEALTH_PCT = 282, SPELL_AURA_MOD_HEALING_RECEIVED = 283, // Possibly only for some spell family class spells - SPELL_AURA_LINKED_AURA = 284, + SPELL_AURA_LINKED = 284, SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR = 285, SPELL_AURA_ABILITY_PERIODIC_CRIT = 286, SPELL_AURA_DEFLECT_SPELLS = 287, - SPELL_AURA_288 = 288, // Deterrence - SPELL_AURA_289 = 289, // unused - SPELL_AURA_MOD_ALL_CRIT_CHANCE = 290, - SPELL_AURA_MOD_QUEST_XP_PCT = 291, + SPELL_AURA_IGNORE_HIT_DIRECTION = 288, + SPELL_AURA_289 = 289, + SPELL_AURA_MOD_CRIT_PCT = 290, + SPELL_AURA_MOD_XP_QUEST_PCT = 291, SPELL_AURA_OPEN_STABLE = 292, SPELL_AURA_OVERRIDE_SPELLS = 293, - SPELL_AURA_STOP_MANA_REGEN = 294, - SPELL_AURA_295 = 295, // unused - SPELL_AURA_296 = 296, // Emulates vehicle? - SPELL_AURA_ROOT_NO_FALL = 297, - SPELL_AURA_STUN_NO_FALL = 298, - SPELL_AURA_299 = 299, // unused + SPELL_AURA_PREVENT_REGENERATE_POWER = 294, + SPELL_AURA_295 = 295, + SPELL_AURA_SET_VEHICLE_ID = 296, + SPELL_AURA_BLOCK_SPELL_FAMILY = 297, + SPELL_AURA_STRANGULATE = 298, + SPELL_AURA_299 = 299, SPELL_AURA_SHARE_DAMAGE_PCT = 300, - SPELL_AURA_HEAL_ABSORB = 301, - SPELL_AURA_302 = 302, // unused - SPELL_AURA_MOD_DAMAGE_DONE_TO_AURA_STATE_PCT = 303, - SPELL_AURA_304 = 304, + SPELL_AURA_SCHOOL_HEAL_ABSORB = 301, + SPELL_AURA_302 = 302, + SPELL_AURA_MOD_DAMAGE_DONE_VERSUS_AURASTATE = 303, + SPELL_AURA_MOD_FAKE_INEBRIATE = 304, SPELL_AURA_MOD_MINIMUM_SPEED = 305, SPELL_AURA_306 = 306, - SPELL_AURA_HEAL_ABSORB_2 = 307, + SPELL_AURA_HEAL_ABSORB_TEST = 307, SPELL_AURA_308 = 308, SPELL_AURA_309 = 309, - SPELL_AURA_MOD_AOE_DAMAGE = 310, - SPELL_AURA_311 = 311, // unused - SPELL_AURA_312 = 312, // unused - SPELL_AURA_313 = 313, // unused - SPELL_AURA_314 = 314, // Confused + SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE = 310, + SPELL_AURA_311 = 311, + SPELL_AURA_312 = 312, + SPELL_AURA_313 = 313, + SPELL_AURA_PREVENT_RESSURECTION = 314, SPELL_AURA_UNDERWATER_WALKING = 315, - SPELL_AURA_HASTE_AFFECT_DOT_TICK = 316, + SPELL_AURA_PERIODIC_HASTE = 316, TOTAL_AURAS = 317 } @@ -574,116 +575,117 @@ public enum AuraType public enum Targets { NO_TARGET = 0, - TARGET_SELF = 1, - TARGET_RANDOM_ENEMY_CHAIN_IN_AREA = 2, // only one spell has that, but regardless, it's a target type after all - TARGET_RANDOM_FRIEND_CHAIN_IN_AREA = 3, - TARGET_4 = 4, - TARGET_PET = 5, - TARGET_CHAIN_DAMAGE = 6, - TARGET_AREAEFFECT_INSTANT = 7, // targets around provided destination point - TARGET_AREAEFFECT_CUSTOM = 8, - TARGET_INNKEEPER_COORDINATES = 9, // uses in teleport to innkeeper spells + TARGET_UNIT_CASTER = 1, + TARGET_UNIT_NEARBY_ENEMY = 2, + TARGET_UNIT_NEARBY_ALLY = 3, + TARGET_UNIT_NEARBY_ALLY_UNK = 4, + TARGET_UNIT_PET = 5, + TARGET_UNIT_TARGET_ENEMY = 6, + TARGET_UNIT_AREA_ENTRY_SRC = 7, + TARGET_UNIT_AREA_ENTRY_DST = 8, + TARGET_DST_HOME = 9, // uses in teleport to innkeeper spells TARGET_10 = 10, - TARGET_11 = 11, + TARGET_UNIT_TARGET_DEST_CASTER = 11, // teleport target to caster TARGET_12 = 12, TARGET_13 = 13, TARGET_14 = 14, - TARGET_ALL_ENEMY_IN_AREA = 15, - TARGET_ALL_ENEMY_IN_AREA_INSTANT = 16, - TARGET_TABLE_X_Y_Z_COORDINATES = 17, // uses in teleport spells and some other - TARGET_EFFECT_SELECT = 18, // highly depends on the spell effect - TARGET_19 = 19, - TARGET_ALL_PARTY_AROUND_CASTER = 20, - TARGET_SINGLE_FRIEND = 21, - TARGET_CASTER_COORDINATES = 22, // used only in TargetA, target selection dependent from TargetB + TARGET_UNIT_AREA_ENEMY_SRC = 15, + TARGET_UNIT_AREA_ENEMY_DST = 16, + TARGET_DST_DB = 17, // uses in teleport spells and some other + TARGET_DST_CASTER = 18, + TARGET_UNIT_PARTY_CASTER = 20, + TARGET_UNIT_TARGET_ALLY = 21, + TARGET_SRC_CASTER = 22, TARGET_GAMEOBJECT = 23, - TARGET_IN_FRONT_OF_CASTER = 24, - TARGET_DUELVSPLAYER = 25, + //TARGET_OBJECT_OPEN + TARGET_UNIT_CONE_ENEMY = 24, + TARGET_UNIT_TARGET_ANY = 25, TARGET_GAMEOBJECT_ITEM = 26, - TARGET_MASTER = 27, - TARGET_ALL_ENEMY_IN_AREA_CHANNELED = 28, - TARGET_29 = 29, - TARGET_ALL_FRIENDLY_UNITS_AROUND_CASTER = 30, // in TargetB used only with TARGET_ALL_AROUND_CASTER and in self casting range in TargetA - TARGET_ALL_FRIENDLY_UNITS_IN_AREA = 31, + //TARGET_OBJECT_ITEM_PICKLOCK + TARGET_UNIT_MASTER = 27, + TARGET_DEST_DYNOBJ_ENEMY = 28, + TARGET_DEST_DYNOBJ_ALLY = 29, // only for effect 27 + TARGET_UNIT_AREA_ALLY_SRC = 30, // in TargetB used only with TARGET_SRC_CASTER and in self casting range in TargetA + TARGET_UNIT_AREA_ALLY_DST = 31, TARGET_MINION = 32, - TARGET_ALL_PARTY = 33, - TARGET_ALL_PARTY_AROUND_CASTER_2 = 34, // used in Tranquility - TARGET_SINGLE_PARTY = 35, - TARGET_ALL_HOSTILE_UNITS_AROUND_CASTER = 36, - TARGET_AREAEFFECT_PARTY = 37, - TARGET_SCRIPT = 38, - TARGET_SELF_FISHING = 39, - TARGET_FOCUS_OR_SCRIPTED_GAMEOBJECT = 40, - TARGET_TOTEM_EARTH = 41, - TARGET_TOTEM_WATER = 42, - TARGET_TOTEM_AIR = 43, - TARGET_TOTEM_FIRE = 44, - TARGET_CHAIN_HEAL = 45, - TARGET_SCRIPT_COORDINATES = 46, - TARGET_DYNAMIC_OBJECT_FRONT = 47, - TARGET_DYNAMIC_OBJECT_BEHIND = 48, - TARGET_DYNAMIC_OBJECT_LEFT_SIDE = 49, - TARGET_DYNAMIC_OBJECT_RIGHT_SIDE = 50, - TARGET_51 = 51, - TARGET_AREAEFFECT_CUSTOM_2 = 52, - TARGET_CURRENT_ENEMY_COORDINATES = 53, // set unit coordinates as dest, only 16 target B imlemented - TARGET_LARGE_FRONTAL_CONE = 54, - TARGET_55 = 55, - TARGET_ALL_RAID_AROUND_CASTER = 56, - TARGET_SINGLE_FRIEND_2 = 57, - TARGET_58 = 58, - TARGET_59 = 59, - TARGET_NARROW_FRONTAL_CONE = 60, - TARGET_AREAEFFECT_PARTY_AND_CLASS = 61, - TARGET_62 = 62, - TARGET_DUELVSPLAYER_COORDINATES = 63, - TARGET_INFRONT_OF_VICTIM = 64, - TARGET_BEHIND_VICTIM = 65, // used in teleport behind spells, caster/target dependent from spell effect - TARGET_RIGHT_FROM_VICTIM = 66, - TARGET_LEFT_FROM_VICTIM = 67, - TARGET_68 = 68, - TARGET_69 = 69, - TARGET_70 = 70, - TARGET_71 = 71, - TARGET_RANDOM_NEARBY_LOC = 72, // used in teleport onto nearby locations - TARGET_RANDOM_CIRCUMFERENCE_POINT = 73, - TARGET_74 = 74, - TARGET_75 = 75, - TARGET_DYNAMIC_OBJECT_COORDINATES = 76, - TARGET_SINGLE_ENEMY = 77, - TARGET_POINT_AT_NORTH = 78, // 78-85 possible _COORDINATES at radius with pi/4 step around target in unknown order, N? - TARGET_POINT_AT_SOUTH = 79, // S? - TARGET_POINT_AT_EAST = 80, // 80/81 must be symmetric from line caster->target, E (base at 82/83, 84/85 order) ? - TARGET_POINT_AT_WEST = 81, // 80/81 must be symmetric from line caster->target, W (base at 82/83, 84/85 order) ? - TARGET_POINT_AT_NE = 82, // from spell desc: "(NE)" - TARGET_POINT_AT_NW = 83, // from spell desc: "(NW)" - TARGET_POINT_AT_SE = 84, // from spell desc: "(SE)" - TARGET_POINT_AT_SW = 85, // from spell desc: "(SW)" - TARGET_RANDOM_NEARBY_DEST = 86, // "Test Nearby Dest Random" - random around selected destination - TARGET_SELF2 = 87, - TARGET_88 = 88, - TARGET_DIRECTLY_FORWARD = 89, - TARGET_NONCOMBAT_PET = 90, - TARGET_91 = 91, - TARGET_92 = 92, - TARGET_93 = 93, - TARGET_94 = 94, - TARGET_95 = 95, - TARGET_96 = 96, - TARGET_97 = 97, - TARGET_98 = 98, - TARGET_99 = 99, - TARGET_100 = 100, - TARGET_101 = 101, - TARGET_102 = 102, - TARGET_103 = 103, - TARGET_IN_FRONT_OF_CASTER_30 = 104, - TARGET_105 = 105, - TARGET_106 = 106, - TARGET_107 = 107, - TARGET_108 = 108, - TARGET_109 = 109, - TARGET_110 = 110, + //TARGET_DEST_SUMMON + TARGET_UNIT_AREA_PARTY_SRC = 33, + TARGET_UNIT_AREA_PARTY_DST = 34, // used in Tranquility + TARGET_UNIT_TARGET_PARTY = 35, + TARGET_DEST_CASTER_RANDOM_UNKNOWN = 36, //unknown + TARGET_UNIT_PARTY_TARGET = 37, + TARGET_UNIT_NEARBY_ENTRY = 38, + TARGET_UNIT_CASTER_FISHING = 39, + TARGET_GAMEOBJECT_NEARBY_ENTRY = 40, + TARGET_DEST_CASTER_FRONT_LEFT = 41, //earth totem + TARGET_DEST_CASTER_BACK_LEFT = 42, //water totem + TARGET_DEST_CASTER_BACK_RIGHT = 43, //air totem + TARGET_DEST_CASTER_FRONT_RIGHT = 44, //fire totem + TARGET_UNIT_CHAINHEAL = 45, + TARGET_DST_NEARBY_ENTRY = 46, + TARGET_DEST_CASTER_FRONT = 47, + TARGET_DEST_CASTER_BACK = 48, + TARGET_DEST_CASTER_RIGHT = 49, + TARGET_DEST_CASTER_LEFT = 50, + TARGET_GAMEOBJECT_AREA_SRC = 51, // If used with SPELL_EFFECT_ACTIVATE_OBJECT, appliccable GO entries should be specified in conditions table + TARGET_GAMEOBJECT_AREA_DST = 52, // If used with SPELL_EFFECT_ACTIVATE_OBJECT, appliccable GO entries should be specified in conditions table + TARGET_DST_TARGET_ENEMY = 53, // set unit coordinates as dest, only 16 target B imlemented + TARGET_UNIT_CONE_ENEMY_UNKNOWN = 54, // 180 degree, or different angle + TARGET_DEST_CASTER_FRONT_LEAP = 55, // for a leap spell + TARGET_UNIT_RAID_CASTER = 56, + TARGET_UNIT_TARGET_RAID = 57, + TARGET_UNIT_NEARBY_RAID = 58, + TARGET_UNIT_CONE_ALLY = 59, + TARGET_UNIT_CONE_ENTRY = 60, + TARGET_UNIT_CLASS_TARGET = 61, + TARGET_TEST = 62, // for a test spell + TARGET_DEST_TARGET_ANY = 63, + TARGET_DEST_TARGET_FRONT = 64, + TARGET_DEST_TARGET_BACK = 65, // uses in teleport behind spells + TARGET_DEST_TARGET_RIGHT = 66, + TARGET_DEST_TARGET_LEFT = 67, + TARGET_DEST_TARGET_FRONT_LEFT = 68, + TARGET_DEST_TARGET_BACK_LEFT = 69, + TARGET_DEST_TARGET_BACK_RIGHT = 70, + TARGET_DEST_TARGET_FRONT_RIGHT = 71, + TARGET_DEST_CASTER_RANDOM = 72, + TARGET_DEST_CASTER_RADIUS = 73, + TARGET_DEST_TARGET_RANDOM = 74, + TARGET_DEST_TARGET_RADIUS = 75, + TARGET_DEST_CHANNEL_TARGET = 76, + TARGET_UNIT_CHANNEL_TARGET = 77, + TARGET_DEST_DEST_FRONT = 78, + TARGET_DEST_DEST_BACK = 79, + TARGET_DEST_DEST_RIGHT = 80, + TARGET_DEST_DEST_LEFT = 81, + TARGET_DEST_DEST_FRONT_LEFT = 82, + TARGET_DEST_DEST_BACK_LEFT = 83, + TARGET_DEST_DEST_BACK_RIGHT = 84, + TARGET_DEST_DEST_FRONT_RIGHT = 85, + TARGET_DEST_DEST_RANDOM = 86, + TARGET_DEST_DEST = 87, + TARGET_DEST_DYNOBJ_NONE = 88, + TARGET_DEST_TRAJ = 89, + TARGET_UNIT_TARGET_PUPPET = 90, + TARGET_DEST_DEST_RANDOM_DIR_DIST = 91, + TARGET_UNIT_SUMMONER = 92, + TARGET_CORPSE_AREA_ENEMY_PLAYER_SRC = 93, // TODO + TARGET_UNIT_VEHICLE = 94, + TARGET_UNIT_DRIVER = 95, + TARGET_UNIT_PASSENGER_0 = 96, + TARGET_UNIT_PASSENGER_1 = 97, + TARGET_UNIT_PASSENGER_2 = 98, + TARGET_UNIT_PASSENGER_3 = 99, + TARGET_UNIT_PASSENGER_4 = 100, + TARGET_UNIT_PASSENGER_5 = 101, + TARGET_UNIT_PASSENGER_6 = 102, + TARGET_UNIT_PASSENGER_7 = 103, + TARGET_UNIT_AREA_PATH = 104, + TARGET_UNIT_UNK_105 = 105, // 1 spell + TARGET_DEST_CHANNEL_CASTER = 106, + TARGET_UNK_AREA_UNK_DST_107 = 107, // not enough info - only generic spells avalible + TARGET_GAMEOBJECT_AREA_PATH = 108, + TARGET_DEST_UNK_110 = 110, // some kind of traj? }; /// @@ -694,107 +696,103 @@ public enum ProcFlags { PROC_FLAG_NONE = 0x00000000, - PROC_FLAG_KILLED = 0x00000001, // 00 Killed by aggressor + PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor - not sure about this flag PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward) - PROC_FLAG_SUCCESSFUL_MELEE_HIT = 0x00000004, // 02 Successful melee auto attack - PROC_FLAG_TAKEN_MELEE_HIT = 0x00000008, // 03 Taken damage from melee auto attack hit + PROC_FLAG_DONE_MELEE_AUTO_ATTACK = 0x00000004, // 02 Done melee auto attack + PROC_FLAG_TAKEN_MELEE_AUTO_ATTACK = 0x00000008, // 03 Taken melee auto attack - PROC_FLAG_SUCCESSFUL_MELEE_SPELL_HIT = 0x00000010, // 04 Successful attack by Spell that use melee weapon - PROC_FLAG_TAKEN_MELEE_SPELL_HIT = 0x00000020, // 05 Taken damage by Spell that use melee weapon + PROC_FLAG_DONE_SPELL_MELEE_DMG_CLASS = 0x00000010, // 04 Done attack by Spell that has dmg class melee + PROC_FLAG_TAKEN_SPELL_MELEE_DMG_CLASS = 0x00000020, // 05 Taken attack by Spell that has dmg class melee - PROC_FLAG_SUCCESSFUL_RANGED_HIT = 0x00000040, // 06 Successful Ranged auto attack - PROC_FLAG_TAKEN_RANGED_HIT = 0x00000080, // 07 Taken damage from ranged auto attack + PROC_FLAG_DONE_RANGED_AUTO_ATTACK = 0x00000040, // 06 Done ranged auto attack + PROC_FLAG_TAKEN_RANGED_AUTO_ATTACK = 0x00000080, // 07 Taken ranged auto attack - PROC_FLAG_SUCCESSFUL_RANGED_SPELL_HIT = 0x00000100, // 08 Successful Ranged attack by Spell that use ranged weapon - PROC_FLAG_TAKEN_RANGED_SPELL_HIT = 0x00000200, // 09 Taken damage by Spell that use ranged weapon + PROC_FLAG_DONE_SPELL_RANGED_DMG_CLASS = 0x00000100, // 08 Done attack by Spell that has dmg class ranged + PROC_FLAG_TAKEN_SPELL_RANGED_DMG_CLASS = 0x00000200, // 09 Taken attack by Spell that has dmg class ranged - PROC_FLAG_SUCCESSFUL_POSITIVE_AOE_HIT = 0x00000400, // 10 Successful AoE (not 100% sure unused) - PROC_FLAG_TAKEN_POSITIVE_AOE = 0x00000800, // 11 Taken AoE (not 100% sure unused) + PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_POS = 0x00000400, // 10 Done positive spell that has dmg class none + PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_POS = 0x00000800, // 11 Taken positive spell that has dmg class none - PROC_FLAG_SUCCESSFUL_AOE_SPELL_HIT = 0x00001000, // 12 Successful AoE damage spell hit (not 100% sure unused) - PROC_FLAG_TAKEN_AOE_SPELL_HIT = 0x00002000, // 13 Taken AoE damage spell hit (not 100% sure unused) + PROC_FLAG_DONE_SPELL_NONE_DMG_CLASS_NEG = 0x00001000, // 12 Done negative spell that has dmg class none + PROC_FLAG_TAKEN_SPELL_NONE_DMG_CLASS_NEG = 0x00002000, // 13 Taken negative spell that has dmg class none - PROC_FLAG_SUCCESSFUL_POSITIVE_SPELL = 0x00004000, // 14 Successful cast positive spell (by default only on healing) - PROC_FLAG_TAKEN_POSITIVE_SPELL = 0x00008000, // 15 Taken positive spell hit (by default only on healing) + PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_POS = 0x00004000, // 14 Done positive spell that has dmg class magic + PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_POS = 0x00008000, // 15 Taken positive spell that has dmg class magic - PROC_FLAG_SUCCESSFUL_NEGATIVE_SPELL_HIT = 0x00010000, // 16 Successful negative spell cast (by default only on damage) - PROC_FLAG_TAKEN_NEGATIVE_SPELL_HIT = 0x00020000, // 17 Taken negative spell (by default only on damage) + PROC_FLAG_DONE_SPELL_MAGIC_DMG_CLASS_NEG = 0x00010000, // 16 Done negative spell that has dmg class magic + PROC_FLAG_TAKEN_SPELL_MAGIC_DMG_CLASS_NEG = 0x00020000, // 17 Taken negative spell that has dmg class magic - PROC_FLAG_ON_DO_PERIODIC = 0x00040000, // 18 Successful do periodic (damage / healing, determined from 14-17 flags) - PROC_FLAG_ON_TAKE_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage / healing, determined from 14-17 flags) + PROC_FLAG_DONE_PERIODIC = 0x00040000, // 18 Successful do periodic (damage / healing) + PROC_FLAG_TAKEN_PERIODIC = 0x00080000, // 19 Taken spell periodic (damage / healing) - PROC_FLAG_TAKEN_ANY_DAMAGE = 0x00100000, // 20 Taken any damage - PROC_FLAG_ON_TRAP_ACTIVATION = 0x00200000, // 21 On trap activation + PROC_FLAG_TAKEN_DAMAGE = 0x00100000, // 20 Taken any damage + PROC_FLAG_DONE_TRAP_ACTIVATION = 0x00200000, // 21 On trap activation (possibly needs name change to ON_GAMEOBJECT_CAST or USE) - PROC_FLAG_TAKEN_OFFHAND_HIT = 0x00400000, // 22 Taken off-hand melee attacks(not used) - PROC_FLAG_SUCCESSFUL_OFFHAND_HIT = 0x00800000 // 23 Successful off-hand melee attacks + PROC_FLAG_DONE_MAINHAND_ATTACK = 0x00400000, // 22 Done main-hand melee attacks (spell and autoattack) + PROC_FLAG_DONE_OFFHAND_ATTACK = 0x00800000, // 23 Done off-hand melee attacks (spell and autoattack) + + PROC_FLAG_DEATH = 0x01000000 // 24 Died in any way }; [Flags] public enum ProcFlagsEx { - PROC_EX_NONE = 0x0000000, // If none can trigger on Hit/Crit only (passive spells MUST defined by SpellFamily flag) - + PROC_EX_NONE = 0x0000000, // If none can tigger on Hit/Crit only (passive spells MUST defined by SpellFamily flag) PROC_EX_NORMAL_HIT = 0x0000001, // If set only from normal hit (only damage spells) PROC_EX_CRITICAL_HIT = 0x0000002, - PROC_EX_MISS = 0x0000004, PROC_EX_RESIST = 0x0000008, - PROC_EX_DODGE = 0x0000010, PROC_EX_PARRY = 0x0000020, - PROC_EX_BLOCK = 0x0000040, PROC_EX_EVADE = 0x0000080, - PROC_EX_IMMUNE = 0x0000100, PROC_EX_DEFLECT = 0x0000200, - PROC_EX_ABSORB = 0x0000400, PROC_EX_REFLECT = 0x0000800, - PROC_EX_INTERRUPT = 0x0001000, // Melee hit result can be Interrupt (not used) PROC_EX_FULL_BLOCK = 0x0002000, // block al attack damage - PROC_EX_RESERVED2 = 0x0004000, - PROC_EX_RESERVED3 = 0x0008000, - - PROC_EX_EX_TRIGGER_ALWAYS = 0x0010000, // If set trigger always ( no matter another flags) used for drop charges - PROC_EX_EX_ONE_TIME_TRIGGER = 0x0020000 // If set trigger always but only one time (not used) + PROC_EX_NOT_ACTIVE_SPELL = 0x0008000, // Spell mustn't do damage/heal to proc + PROC_EX_EX_TRIGGER_ALWAYS = 0x0010000, // If set trigger always no matter of hit result + PROC_EX_EX_ONE_TIME_TRIGGER = 0x0020000, // If set trigger always but only one time (not implemented yet) + PROC_EX_ONLY_ACTIVE_SPELL = 0x0040000, // Spell has to do damage/heal to proc }; public enum SpellSchools { - PHYSICAL = 0, - HOLY = 1, - FIRE = 2, - NATURE = 3, - FROST = 4, - SHADOW = 5, - ARCANE = 6 + SPELL_SCHOOL_NORMAL = 0, + SPELL_SCHOOL_HOLY = 1, + SPELL_SCHOOL_FIRE = 2, + SPELL_SCHOOL_NATURE = 3, + SPELL_SCHOOL_FROST = 4, + SPELL_SCHOOL_SHADOW = 5, + SPELL_SCHOOL_ARCANE = 6 }; [Flags] public enum SpellSchoolMask { - MASK_NONE = 0x00, // not exist - MASK_PHYSICAL = (1 << SpellSchools.PHYSICAL), // PHYSICAL (Armor) - MASK_HOLY = (1 << SpellSchools.HOLY), - MASK_FIRE = (1 << SpellSchools.FIRE), - MASK_NATURE = (1 << SpellSchools.NATURE), - MASK_FROST = (1 << SpellSchools.FROST), - MASK_SHADOW = (1 << SpellSchools.SHADOW), - MASK_ARCANE = (1 << SpellSchools.ARCANE), + SPELL_SCHOOL_MASK_NONE = 0x00, // not exist + SPELL_SCHOOL_MASK_NORMAL = (1 << SpellSchools.SPELL_SCHOOL_NORMAL), // PHYSICAL (Armor) + SPELL_SCHOOL_MASK_HOLY = (1 << SpellSchools.SPELL_SCHOOL_HOLY), + SPELL_SCHOOL_MASK_FIRE = (1 << SpellSchools.SPELL_SCHOOL_FIRE), + SPELL_SCHOOL_MASK_NATURE = (1 << SpellSchools.SPELL_SCHOOL_NATURE), + SPELL_SCHOOL_MASK_FROST = (1 << SpellSchools.SPELL_SCHOOL_FROST), + SPELL_SCHOOL_MASK_SHADOW = (1 << SpellSchools.SPELL_SCHOOL_SHADOW), + SPELL_SCHOOL_MASK_ARCANE = (1 << SpellSchools.SPELL_SCHOOL_ARCANE), // unions // 124, not include normal and holy damage - MASK_SPELL = (MASK_FIRE | MASK_NATURE | MASK_FROST | MASK_SHADOW | MASK_ARCANE), + SPELL_SCHOOL_MASK_SPELL = (SPELL_SCHOOL_MASK_FIRE | + SPELL_SCHOOL_MASK_NATURE | SPELL_SCHOOL_MASK_FROST | + SPELL_SCHOOL_MASK_SHADOW | SPELL_SCHOOL_MASK_ARCANE), // 126 - MASK_MAGIC = (MASK_HOLY | MASK_SPELL), + SPELL_SCHOOL_MASK_MAGIC = (SPELL_SCHOOL_MASK_HOLY | SPELL_SCHOOL_MASK_SPELL), // 127 - MASK_ALL = (MASK_PHYSICAL | MASK_MAGIC) + SPELL_SCHOOL_MASK_ALL = (SPELL_SCHOOL_MASK_NORMAL | SPELL_SCHOOL_MASK_MAGIC) }; public enum Mechanics @@ -876,42 +874,42 @@ public enum SpellPreventionType }; [Flags] - public enum ShapeshiftFormMask + public enum ShapeshiftFormMask : uint { - FORM_ALL = -1, - FORM_NONE = 0, - FORM_CAT = 1 << 0x00, // 1 - FORM_TREE = 1 << 0x01, // 2 - FORM_TRAVEL = 1 << 0x02, // 3 - FORM_AQUA = 1 << 0x03, // 4 - FORM_BEAR = 1 << 0x04, // 5 - FORM_AMBIENT = 1 << 0x05, // 6 - FORM_GHOUL = 1 << 0x06, // 7 - FORM_DIREBEAR = 1 << 0x07, // 8 - FORM_STEVES_GHOUL = 1 << 0x08, // 9 - FORM_THARONJA_SKELETON = 1 << 0x09, // 10 - FORM_TEST_OF_STRENGTH = 1 << 0x0A, // 11 - FORM_BLB_PLAYER = 1 << 0x0B, // 12 - FORM_SHADOW_DANCE = 1 << 0x0C, // 13 - FORM_CREATUREBEAR = 1 << 0x0D, // 14 - FORM_CREATURECAT = 1 << 0x0E, // 15 - FORM_GHOSTWOLF = 1 << 0x0F, // 16 - FORM_BATTLESTANCE = 1 << 0x10, // 17 - FORM_DEFENSIVESTANCE = 1 << 0x11, // 18 - FORM_BERSERKERSTANCE = 1 << 0x12, // 19 - FORM_TEST = 1 << 0x13, // 20 - FORM_ZOMBIE = 1 << 0x14, // 21 - FORM_METAMORPHOSIS = 1 << 0x15, // 22 - FORM_UNK1 = 1 << 0x16, // 23 - FORM_UNK2 = 1 << 0x17, // 24 - FORM_UNDEAD = 1 << 0x18, // 25 - FORM_FRENZY = 1 << 0x19, // 26 - FORM_FLIGHT_EPIC = 1 << 0x1A, // 27 - FORM_SHADOW = 1 << 0x1B, // 28 - FORM_FLIGHT = 1 << 0x1C, // 29 - FORM_STEALTH = 1 << 0x1D, // 30 - FORM_MOONKIN = 1 << 0x1E, // 31 - FORM_SPIRITOFREDEMPTION = 1 << 0x1F, // 32 + FORM_ALL = 0xFFFFFFFF, + FORM_NONE = 0x00000000, + FORM_CAT = 0x00000001, // 1 + FORM_TREE = 0x00000002, // 2 + FORM_TRAVEL = 0x00000004, // 3 + FORM_AQUA = 0x00000008, // 4 + FORM_BEAR = 0x00000010, // 5 + FORM_AMBIENT = 0x00000020, // 6 + FORM_GHOUL = 0x00000040, // 7 + FORM_DIREBEAR = 0x00000080, // 8 + FORM_STEVES_GHOUL = 0x00000100, // 9 + FORM_THARONJA_SKELETON = 0x00000200, // 10 + FORM_TEST_OF_STRENGTH = 0x00000400, // 11 + FORM_BLB_PLAYER = 0x00000800, // 12 + FORM_SHADOW_DANCE = 0x00001000, // 13 + FORM_CREATUREBEAR = 0x00002000, // 14 + FORM_CREATURECAT = 0x00004000, // 15 + FORM_GHOSTWOLF = 0x00008000, // 16 + FORM_BATTLESTANCE = 0x00010000, // 17 + FORM_DEFENSIVESTANCE = 0x00020000, // 18 + FORM_BERSERKERSTANCE = 0x00040000, // 19 + FORM_TEST = 0x00080000, // 20 + FORM_ZOMBIE = 0x00100000, // 21 + FORM_METAMORPHOSIS = 0x00200000, // 22 + FORM_UNK1 = 0x00400000, // 23 + FORM_UNK2 = 0x00800000, // 24 + FORM_UNDEAD = 0x01000000, // 25 + FORM_MASTER_ANGLER = 0x02000000, // 26 + FORM_FLIGHT_EPIC = 0x04000000, // 27 + FORM_SHADOW = 0x08000000, // 28 + FORM_FLIGHT = 0x10000000, // 29 + FORM_STEALTH = 0x20000000, // 30 + FORM_MOONKIN = 0x40000000, // 31 + FORM_SPIRITOFREDEMPTION = 0x80000000, // 32 }; public enum DispelType @@ -945,48 +943,50 @@ public enum SpellModOp SPELLMOD_CASTING_TIME = 10, SPELLMOD_COOLDOWN = 11, SPELLMOD_EFFECT2 = 12, - // spellmod 13 unused + SPELLMOD_IGNORE_ARMOR = 13, SPELLMOD_COST = 14, SPELLMOD_CRIT_DAMAGE_BONUS = 15, SPELLMOD_RESIST_MISS_CHANCE = 16, SPELLMOD_JUMP_TARGETS = 17, - SPELLMOD_CHANCE_OF_SUCCESS = 18, // Only used with SPELL_AURA_ADD_FLAT_MODIFIER and affects proc spells + SPELLMOD_CHANCE_OF_SUCCESS = 18, SPELLMOD_ACTIVATION_TIME = 19, - SPELLMOD_EFFECT_PAST_FIRST = 20, - SPELLMOD_CASTING_TIME_OLD = 21, + SPELLMOD_DAMAGE_MULTIPLIER = 20, + SPELLMOD_GLOBAL_COOLDOWN = 21, SPELLMOD_DOT = 22, SPELLMOD_EFFECT3 = 23, - SPELLMOD_SPELL_BONUS_DAMAGE = 24, - // spellmod 25 unused - SPELLMOD_FREQUENCY_OF_SUCCESS = 26, // Only used with SPELL_AURA_ADD_PCT_MODIFIER and affects used on proc spells - SPELLMOD_MULTIPLE_VALUE = 27, - SPELLMOD_RESIST_DISPEL_CHANCE = 28 + SPELLMOD_BONUS_MULTIPLIER = 24, + // spellmod 25 + SPELLMOD_PROC_PER_MINUTE = 26, + SPELLMOD_VALUE_MULTIPLIER = 27, + SPELLMOD_RESIST_DISPEL_CHANCE = 28, + SPELLMOD_CRIT_DAMAGE_BONUS_2 = 29, //one not used spell + SPELLMOD_SPELL_COST_REFUND_ON_FAIL = 30 }; [Flags] public enum SpellCastTargetFlags { TARGET_FLAG_SELF = 0x00000000, - TARGET_FLAG_UNUSED1 = 0x00000001, // not used in any spells as of 3.0.3 (can be set dynamically) + TARGET_FLAG_UNUSED1 = 0x00000001, // not used in any spells as of 3.2.2a (can be set dynamically) TARGET_FLAG_UNIT = 0x00000002, // pguid - TARGET_FLAG_UNUSED2 = 0x00000004, // not used in any spells as of 3.0.3 (can be set dynamically) - TARGET_FLAG_UNUSED3 = 0x00000008, // not used in any spells as of 3.0.3 (can be set dynamically) + TARGET_FLAG_UNUSED2 = 0x00000004, // not used in any spells as of 3.2.2a (can be set dynamically) + TARGET_FLAG_UNUSED3 = 0x00000008, // not used in any spells as of 3.2.2a (can be set dynamically) TARGET_FLAG_ITEM = 0x00000010, // pguid TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // 3 float TARGET_FLAG_DEST_LOCATION = 0x00000040, // 3 float - TARGET_FLAG_OBJECT_UNK = 0x00000080, // used in 7 spells only - TARGET_FLAG_UNIT_UNK = 0x00000100, // looks like self target (480 spells) + TARGET_FLAG_OBJECT_CASTER = 0x00000080, // used in 7 spells only + TARGET_FLAG_UNIT_CASTER = 0x00000100, // looks like self target (480 spells) TARGET_FLAG_PVP_CORPSE = 0x00000200, // pguid TARGET_FLAG_UNIT_CORPSE = 0x00000400, // 10 spells (gathering professions) TARGET_FLAG_OBJECT = 0x00000800, // pguid, 2 spells TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid, 0 spells TARGET_FLAG_STRING = 0x00002000, // string, 0 spells - TARGET_FLAG_UNK1 = 0x00004000, // 199 spells, opening object/lock + TARGET_FLAG_OPEN_LOCK = 0x00004000, // 199 spells, opening object/lock TARGET_FLAG_CORPSE = 0x00008000, // pguid, resurrection spells - TARGET_FLAG_UNK2 = 0x00010000, // pguid, not used in any spells as of 3.0.3 (can be set dynamically) + TARGET_FLAG_UNK17 = 0x00010000, // pguid, not used in any spells as of 3.2.2a (can be set dynamically) TARGET_FLAG_GLYPH = 0x00020000, // used in glyph spells - TARGET_FLAG_UNK3 = 0x00040000, // - TARGET_FLAG_UNK4 = 0x00080000 // uint32, loop { vec3, guid -> if guid == 0 break } + TARGET_FLAG_UNK19 = 0x00040000, // + TARGET_FLAG_UNUSED20 = 0x00080000 // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far }; public enum Powers : uint @@ -1024,7 +1024,7 @@ public enum AuraState AURA_STATE_SWIFTMEND = 15, // T | AURA_STATE_DEADLY_POISON = 16, // T | AURA_STATE_ENRAGE = 17, // C | - AURA_STATE_UNKNOWN18 = 18, // C t| + AURA_STATE_BLEEDING = 18, // C t| AURA_STATE_UNKNOWN19 = 19, // | not used AURA_STATE_UNKNOWN20 = 20, // c | only (45317 Suicide) AURA_STATE_UNKNOWN21 = 21, // | not used @@ -1102,7 +1102,7 @@ public enum ItemSubClassWeaponMask POLEARM = 1 << 6, SWORD = 1 << 7, SWORD2 = 1 << 8, - obsolete = 1 << 9, + OBSOLETE = 1 << 9, STAFF = 1 << 10, EXOTIC = 1 << 11, EXOTIC2 = 1 << 12, @@ -1164,317 +1164,317 @@ public enum CreatureTypeMask NON_COMBAT_PET = 1 << 11, GAS_CLOUD = 1 << 12 }; - + [Flags] - public enum SpellAtribute + public enum SpellAtribute : uint { - SPELL_ATTR_ALL = -1, - SPELL_ATTR_NONE = 0x00, - SPELL_ATTR_UNK0 = 1 << 0x00, // 0 - SPELL_ATTR_RANGED = 1 << 0x01, // 1 All ranged abilites have this flag - SPELL_ATTR_ON_NEXT_SWING_1 = 1 << 0x02, // 2 on next swing - SPELL_ATTR_UNK3 = 1 << 0x03, // 3 not set in 3.0.3 - SPELL_ATTR_UNK4 = 1 << 0x04, // 4 isAbility - SPELL_ATTR_TRADESPELL = 1 << 0x05, // 5 trade spells, will be added by client to a sublist of profession spell - SPELL_ATTR_PASSIVE = 1 << 0x06, // 6 Passive spell - SPELL_ATTR_UNK7 = 1 << 0x07, // 7 can't be linked in chat? - SPELL_ATTR_UNK8 = 1 << 0x08, // 8 hide created item in tooltip (for effect=24) - SPELL_ATTR_UNK9 = 1 << 0x09, // 9 - SPELL_ATTR_ON_NEXT_SWING_2 = 1 << 0x0A, // 10 on next swing 2 - SPELL_ATTR_UNK11 = 1 << 0x0B, // 11 - SPELL_ATTR_DAYTIME_ONLY = 1 << 0x0C, // 12 only useable at daytime, not set in 2.4.2 - SPELL_ATTR_NIGHT_ONLY = 1 << 0x0D, // 13 only useable at night, not set in 2.4.2 - SPELL_ATTR_INDOORS_ONLY = 1 << 0x0E, // 14 only useable indoors, not set in 2.4.2 - SPELL_ATTR_OUTDOORS_ONLY = 1 << 0x0F, // 15 Only useable outdoors. - SPELL_ATTR_NOT_SHAPESHIFT = 1 << 0x10, // 16 Not while shapeshifted - SPELL_ATTR_ONLY_STEALTHED = 1 << 0x11, // 17 Must be in stealth - SPELL_ATTR_UNK18 = 1 << 0x12, // 18 - SPELL_ATTR_LEVEL_DAMAGE_CALCULATION = 1 << 0x13, // 19 spelldamage depends on caster level - SPELL_ATTR_STOP_ATTACK_TARGET = 1 << 0x14, // 20 Stop attack after use this spell (and not begin attack if use) - SPELL_ATTR_IMPOSSIBLE_DODGE_PARRY_BLOCK = 1 << 0x15, // 21 Cannot be dodged/parried/blocked - SPELL_ATTR_UNK22 = 1 << 0x16, // 22 - SPELL_ATTR_UNK23 = 1 << 0x17, // 23 castable while dead? - SPELL_ATTR_CASTABLE_WHILE_MOUNTED = 1 << 0x18, // 24 castable while mounted - SPELL_ATTR_DISABLED_WHILE_ACTIVE = 1 << 0x19, // 25 Activate and start cooldown after aura fade or remove summoned creature or go - SPELL_ATTR_UNK26 = 1 << 0x1A, // 26 - SPELL_ATTR_CASTABLE_WHILE_SITTING = 1 << 0x1B, // 27 castable while sitting - SPELL_ATTR_CANT_USED_IN_COMBAT = 1 << 0x1C, // 28 Cannot be used in combat - SPELL_ATTR_UNAFFECTED_BY_INVULNERABILITY = 1 << 0x1D, // 29 unaffected by invulnerability (hmm possible not...) - SPELL_ATTR_UNK30 = 1 << 0x1E, // 30 breakable by damage? - SPELL_ATTR_CANT_CANCEL = 1 << 0x1F, // 31 positive aura can't be canceled + SPELL_ATTR_ALL = 0xFFFFFFFF, + SPELL_ATTR_NONE = 0x00000000, + SPELL_ATTR0_UNK0 = 0x00000001, // 0 + SPELL_ATTR0_REQ_AMMO = 0x00000002, // 1 + SPELL_ATTR0_ON_NEXT_SWING = 0x00000004, // 2 on next swing + SPELL_ATTR0_UNK3 = 0x00000008, // 3 not set in 3.0.3 + SPELL_ATTR0_UNK4 = 0x00000010, // 4 + SPELL_ATTR0_TRADESPELL = 0x00000020, // 5 trade spells, will be added by client to a sublist of profession spell + SPELL_ATTR0_PASSIVE = 0x00000040, // 6 Passive spell + SPELL_ATTR0_UNK7 = 0x00000080, // 7 visible? + SPELL_ATTR0_UNK8 = 0x00000100, // 8 + SPELL_ATTR0_UNK9 = 0x00000200, // 9 + SPELL_ATTR0_UNK10 = 0x00000400, // 10 on next swing 2 + SPELL_ATTR0_UNK11 = 0x00000800, // 11 + SPELL_ATTR0_DAYTIME_ONLY = 0x00001000, // 12 only useable at daytime, not set in 2.4.2 + SPELL_ATTR0_NIGHT_ONLY = 0x00002000, // 13 only useable at night, not set in 2.4.2 + SPELL_ATTR0_INDOORS_ONLY = 0x00004000, // 14 only useable indoors, not set in 2.4.2 + SPELL_ATTR0_OUTDOORS_ONLY = 0x00008000, // 15 Only useable outdoors. + SPELL_ATTR0_NOT_SHAPESHIFT = 0x00010000, // 16 Not while shapeshifted + SPELL_ATTR0_ONLY_STEALTHED = 0x00020000, // 17 Must be in stealth + SPELL_ATTR0_UNK18 = 0x00040000, // 18 + SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION = 0x00080000, // 19 spelldamage depends on caster level + SPELL_ATTR0_STOP_ATTACK_TARGET = 0x00100000, // 20 Stop attack after use this spell (and not begin attack if use) + SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK = 0x00200000, // 21 Cannot be dodged/parried/blocked + SPELL_ATTR0_UNK22 = 0x00400000, // 22 shoot spells + SPELL_ATTR0_CASTABLE_WHILE_DEAD = 0x00800000, // 23 castable while dead? + SPELL_ATTR0_CASTABLE_WHILE_MOUNTED = 0x01000000, // 24 castable while mounted + SPELL_ATTR0_DISABLED_WHILE_ACTIVE = 0x02000000, // 25 Activate and start cooldown after aura fade or remove summoned creature or go + SPELL_ATTR0_NEGATIVE_1 = 0x04000000, // 26 Many negative spells have this attr + SPELL_ATTR0_CASTABLE_WHILE_SITTING = 0x08000000, // 27 castable while sitting + SPELL_ATTR0_CANT_USED_IN_COMBAT = 0x10000000, // 28 Cannot be used in combat + SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY = 0x20000000, // 29 unaffected by invulnerability (hmm possible not...) + SPELL_ATTR0_BREAKABLE_BY_DAMAGE = 0x40000000, // 30 + SPELL_ATTR0_CANT_CANCEL = 0x80000000 // 31 positive aura can't be canceled }; [Flags] - public enum SpellAtributeEx + public enum SpellAtributeEx : uint { - SPELL_ATTR_EX_ALL = -1, - SPELL_ATTR_EX_NONE = 0x00, - SPELL_ATTR_EX_UNK0 = 1 << 0x00, // 0 - SPELL_ATTR_EX_DRAIN_ALL_POWER = 1 << 0x01, // 1 use all power (Only paladin Lay of Hands and Bunyanize) - SPELL_ATTR_EX_CHANNELED_1 = 1 << 0x02, // 2 channeled 1 - SPELL_ATTR_EX_UNK3 = 1 << 0x03, // 3 - SPELL_ATTR_EX_UNK4 = 1 << 0x04, // 4 - SPELL_ATTR_EX_NOT_BREAK_STEALTH = 1 << 0x05, // 5 Not break stealth - SPELL_ATTR_EX_CHANNELED_2 = 1 << 0x06, // 6 channeled 2 - SPELL_ATTR_EX_NEGATIVE = 1 << 0x07, // 7 - SPELL_ATTR_EX_NOT_IN_COMBAT_TARGET = 1 << 0x08, // 8 Spell req target not to be in combat state - SPELL_ATTR_EX_UNK9 = 1 << 0x09, // 9 - SPELL_ATTR_EX_NO_INITIAL_AGGRO = 1 << 0x0A, // 10 no generates threat on cast 100% - SPELL_ATTR_EX_UNK11 = 1 << 0x0B, // 11 - SPELL_ATTR_EX_UNK12 = 1 << 0x0C, // 12 - SPELL_ATTR_EX_UNK13 = 1 << 0x0D, // 13 - SPELL_ATTR_EX_UNK14 = 1 << 0x0E, // 14 - SPELL_ATTR_EX_DISPEL_AURAS_ON_IMMUNITY = 1 << 0x0F, // 15 remove auras on immunity - SPELL_ATTR_EX_UNAFFECTED_BY_SCHOOL_IMMUNE = 1 << 0x10, // 16 unaffected by school immunity - SPELL_ATTR_EX_UNK17 = 1 << 0x11, // 17 - SPELL_ATTR_EX_UNK18 = 1 << 0x12, // 18 - SPELL_ATTR_EX_UNK19 = 1 << 0x13, // 19 - SPELL_ATTR_EX_REQ_COMBO_POINTS1 = 1 << 0x14, // 20 Req combo points on target - SPELL_ATTR_EX_UNK21 = 1 << 0x15, // 21 - SPELL_ATTR_EX_REQ_COMBO_POINTS2 = 1 << 0x16, // 22 Req combo points on target - SPELL_ATTR_EX_UNK23 = 1 << 0x17, // 23 - SPELL_ATTR_EX_UNK24 = 1 << 0x18, // 24 Req fishing pole?? - SPELL_ATTR_EX_UNK25 = 1 << 0x19, // 25 - SPELL_ATTR_EX_UNK26 = 1 << 0x1A, // 26 - SPELL_ATTR_EX_UNK27 = 1 << 0x1B, // 27 - SPELL_ATTR_EX_UNK28 = 1 << 0x1C, // 28 - SPELL_ATTR_EX_UNK29 = 1 << 0x1D, // 29 - SPELL_ATTR_EX_UNK30 = 1 << 0x1E, // 30 overpower - SPELL_ATTR_EX_UNK31 = 1 << 0x1F, // 31 + SPELL_ATTR1_ALL = 0xFFFFFFFF, + SPELL_ATTR1_NONE = 0x00000000, + SPELL_ATTR1_DISMISS_PET = 0x00000001, // 0 dismiss pet and not allow to summon new one? + SPELL_ATTR1_DRAIN_ALL_POWER = 0x00000002, // 1 use all power (Only paladin Lay of Hands and Bunyanize) + SPELL_ATTR1_CHANNELED_1 = 0x00000004, // 2 channeled target + SPELL_ATTR1_PUT_CASTER_IN_COMBAT = 0x00000008, // 3 spells that cause a caster to enter a combat + SPELL_ATTR1_UNK4 = 0x00000010, // 4 stealth and whirlwind + SPELL_ATTR1_NOT_BREAK_STEALTH = 0x00000020, // 5 Not break stealth + SPELL_ATTR1_CHANNELED_2 = 0x00000040, // 6 channeled self + SPELL_ATTR1_NEGATIVE = 0x00000080, // 7 + SPELL_ATTR1_NOT_IN_COMBAT_TARGET = 0x00000100, // 8 Spell req target not to be in combat state + SPELL_ATTR1_UNK9 = 0x00000200, // 9 melee spells + SPELL_ATTR1_NO_THREAT = 0x00000400, // 10 no generates threat on cast 100% (old NO_INITIAL_AGGRO) + SPELL_ATTR1_UNK11 = 0x00000800, // 11 aura + SPELL_ATTR1_UNK12 = 0x00001000, // 12 + SPELL_ATTR1_USE_RADIUS_AS_MAX_DISTANCE = 0x00002000, // 13 + SPELL_ATTR1_STACK_FOR_DIFF_CASTERS = 0x00004000, // 14 + SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // 15 remove auras on immunity + SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // 16 on immuniy + SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // 17 + SPELL_ATTR1_UNK18 = 0x00040000, // 18 + SPELL_ATTR1_CANT_TARGET_SELF = 0x00080000, // 19 Applies only to unit target - for example Divine Intervention (19752) + SPELL_ATTR1_REQ_COMBO_POINTS1 = 0x00100000, // 20 Req combo points on target + SPELL_ATTR1_UNK21 = 0x00200000, // 21 + SPELL_ATTR1_REQ_COMBO_POINTS2 = 0x00400000, // 22 Req combo points on target + SPELL_ATTR1_UNK23 = 0x00800000, // 23 + SPELL_ATTR1_UNK24 = 0x01000000, // 24 Req fishing pole?? + SPELL_ATTR1_UNK25 = 0x02000000, // 25 + SPELL_ATTR1_UNK26 = 0x04000000, // 26 works correctly with [target=focus] and [target=mouseover] macros? + SPELL_ATTR1_UNK27 = 0x08000000, // 27 + SPELL_ATTR1_IGNORE_IMMUNITY = 0x10000000, // 28 removed from Chains of Ice 3.3.0 + SPELL_ATTR1_UNK29 = 0x20000000, // 29 + SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite + SPELL_ATTR1_UNK31 = 0x80000000 // 31 }; [Flags] - public enum SpellAtributeEx2 + public enum SpellAtributeEx2 : uint { - SPELL_ATTR_EX2_ALL = -1, - SPELL_ATTR_EX2_NONE = 0x00, - SPELL_ATTR_EX2_UNK0 = 1 << 0x00, // 0 - SPELL_ATTR_EX2_UNK1 = 1 << 0x01, // 1 - SPELL_ATTR_EX2_CANT_REFLECTED = 1 << 0x02, // 2 ? used for detect can or not spell reflected // do not need LOS (e.g. 18220 since 3.3.3) - SPELL_ATTR_EX2_UNK3 = 1 << 0x03, // 3 auto targeting? (e.g. fishing skill enhancement items since 3.3.3) - SPELL_ATTR_EX2_UNK4 = 1 << 0x04, // 4 - SPELL_ATTR_EX2_AUTOREPEAT_FLAG = 1 << 0x05, // 5 - SPELL_ATTR_EX2_UNK6 = 1 << 0x06, // 6 only usable on tabbed by yourself - SPELL_ATTR_EX2_UNK7 = 1 << 0x07, // 7 - SPELL_ATTR_EX2_UNK8 = 1 << 0x08, // 8 not set in 3.0.3 - SPELL_ATTR_EX2_UNK9 = 1 << 0x09, // 9 - SPELL_ATTR_EX2_UNK10 = 1 << 0x0A, // 10 - SPELL_ATTR_EX2_HEALTH_FUNNEL = 1 << 0x0B, // 11 - SPELL_ATTR_EX2_UNK12 = 1 << 0x0C, // 12 - SPELL_ATTR_EX2_UNK13 = 1 << 0x0D, // 13 - SPELL_ATTR_EX2_UNK14 = 1 << 0x0E, // 14 - SPELL_ATTR_EX2_UNK15 = 1 << 0x0F, // 15 not set in 3.0.3 - SPELL_ATTR_EX2_UNK16 = 1 << 0x10, // 16 - SPELL_ATTR_EX2_UNK17 = 1 << 0x11, // 17 suspend weapon timer instead of resetting it, (?Hunters Shot and Stings only have this flag?) - SPELL_ATTR_EX2_UNK18 = 1 << 0x12, // 18 Only Revive pet - possible req dead pet - SPELL_ATTR_EX2_NOT_NEED_SHAPESHIFT = 1 << 0x13, // 19 does not necessarly need shapeshift - SPELL_ATTR_EX2_UNK20 = 1 << 0x14, // 20 - SPELL_ATTR_EX2_DAMAGE_REDUCED_SHIELD = 1 << 0x15, // 21 for ice blocks, pala immunity buffs, priest absorb shields, but used also for other spells -> not sure! - SPELL_ATTR_EX2_UNK22 = 1 << 0x16, // 22 - SPELL_ATTR_EX2_UNK23 = 1 << 0x17, // 23 Only mage Arcane Concentration have this flag - SPELL_ATTR_EX2_UNK24 = 1 << 0x18, // 24 - SPELL_ATTR_EX2_UNK25 = 1 << 0x19, // 25 - SPELL_ATTR_EX2_UNK26 = 1 << 0x1A, // 26 unaffected by school immunity - SPELL_ATTR_EX2_UNK27 = 1 << 0x1B, // 27 - SPELL_ATTR_EX2_UNK28 = 1 << 0x1C, // 28 no breaks stealth if it fails?? - SPELL_ATTR_EX2_CANT_CRIT = 1 << 0x1D, // 29 Spell can't crit - SPELL_ATTR_EX2_UNK30 = 1 << 0x1E, // 30 - SPELL_ATTR_EX2_FOOD_BUFF = 1 << 0x1F, // 31 Food or Drink Buff (like Well Fed) + SPELL_ATTR2_ALL = 0xFFFFFFFF, + SPELL_ATTR2_NONE = 0x00000000, + SPELL_ATTR2_ALLOW_DEAD_TARGET = 0x00000001, // 0 + SPELL_ATTR2_UNK1 = 0x00000002, // 1 ? many triggered spells have this flag + SPELL_ATTR2_CANT_REFLECTED = 0x00000004, // 2 ? used for detect can or not spell reflected + SPELL_ATTR2_UNK3 = 0x00000008, // 3 + SPELL_ATTR2_ALWAYS_APPLY_MODIFIERS = 0x00000010, // 4 ? spell modifiers are applied dynamically (even if aura is not passive) + SPELL_ATTR2_AUTOREPEAT_FLAG = 0x00000020, // 5 + SPELL_ATTR2_UNK6 = 0x00000040, // 6 + SPELL_ATTR2_UNK7 = 0x00000080, // 7 + SPELL_ATTR2_UNK8 = 0x00000100, // 8 not set in 3.0.3 + SPELL_ATTR2_UNK9 = 0x00000200, // 9 + SPELL_ATTR2_UNK10 = 0x00000400, // 10 + SPELL_ATTR2_HEALTH_FUNNEL = 0x00000800, // 11 + SPELL_ATTR2_UNK12 = 0x00001000, // 12 + SPELL_ATTR2_UNK13 = 0x00002000, // 13 Items enchanted by spells with this flag preserve the enchant to arenas + SPELL_ATTR2_UNK14 = 0x00004000, // 14 + SPELL_ATTR2_UNK15 = 0x00008000, // 15 not set in 3.0.3 + SPELL_ATTR2_TAME_BEAST = 0x00010000, // 16 + SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS = 0x00020000, // 17 don't reset timers for melee autoattacks (swings) or ranged autoattacks (autoshoots) + SPELL_ATTR2_UNK18 = 0x00040000, // 18 Only Revive pet - possible req dead pet + SPELL_ATTR2_NOT_NEED_SHAPESHIFT = 0x00080000, // 19 does not necessarly need shapeshift + SPELL_ATTR2_UNK20 = 0x00100000, // 20 + SPELL_ATTR2_DAMAGE_REDUCED_SHIELD = 0x00200000, // 21 for ice blocks, pala immunity buffs, priest absorb shields, but used also for other spells -> not sure! + SPELL_ATTR2_UNK22 = 0x00400000, // 22 + SPELL_ATTR2_UNK23 = 0x00800000, // 23 Only mage Arcane Concentration have this flag + SPELL_ATTR2_UNK24 = 0x01000000, // 24 + SPELL_ATTR2_UNK25 = 0x02000000, // 25 + SPELL_ATTR2_UNK26 = 0x04000000, // 26 unaffected by school immunity + SPELL_ATTR2_UNK27 = 0x08000000, // 27 + SPELL_ATTR2_UNK28 = 0x10000000, // 28 no breaks stealth if it fails?? + SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit + SPELL_ATTR2_TRIGGERED_CAN_TRIGGER = 0x40000000, // 30 spell can trigger even if triggered + SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed) }; [Flags] - public enum SpellAtributeEx3 + public enum SpellAtributeEx3 : uint { - SPELL_ATTR_EX3_ALL = -1, - SPELL_ATTR_EX3_NONE = 0x00, - SPELL_ATTR_EX3_UNK0 = 1 << 0x00, // 0 - SPELL_ATTR_EX3_UNK1 = 1 << 0x01, // 1 - SPELL_ATTR_EX3_UNK2 = 1 << 0x02, // 2 - SPELL_ATTR_EX3_UNK3 = 1 << 0x03, // 3 - SPELL_ATTR_EX3_UNK4 = 1 << 0x04, // 4 Druid Rebirth only this spell have this flag - SPELL_ATTR_EX3_UNK5 = 1 << 0x05, // 5 - SPELL_ATTR_EX3_UNK6 = 1 << 0x06, // 6 - SPELL_ATTR_EX3_UNK7 = 1 << 0x07, // 7 create a separate (de)buff stack for each caster - SPELL_ATTR_EX3_UNK8 = 1 << 0x08, // 8 - SPELL_ATTR_EX3_UNK9 = 1 << 0x09, // 9 - SPELL_ATTR_EX3_MAIN_HAND = 1 << 0x0A, // 10 Main hand weapon required - SPELL_ATTR_EX3_BATTLEGROUND = 1 << 0x0B, // 11 Can casted only on battleground - SPELL_ATTR_EX3_CAST_ON_DEAD = 1 << 0x0C, // 12 target is a dead player (not every spell has this flag) - SPELL_ATTR_EX3_UNK13 = 1 << 0x0D, // 13 - SPELL_ATTR_EX3_UNK14 = 1 << 0x0E, // 14 "Honorless Target" only this spells have this flag - SPELL_ATTR_EX3_UNK15 = 1 << 0x0F, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag - SPELL_ATTR_EX3_UNK16 = 1 << 0x10, // 16 no triggers effects that trigger on casting a spell?? - SPELL_ATTR_EX3_UNK17 = 1 << 0x11, // 17 no triggers effects that trigger on casting a spell?? - SPELL_ATTR_EX3_UNK18 = 1 << 0x12, // 18 - SPELL_ATTR_EX3_UNK19 = 1 << 0x13, // 19 - SPELL_ATTR_EX3_DEATH_PERSISTENT = 1 << 0x14, // 20 Death persistent spells - SPELL_ATTR_EX3_UNK21 = 1 << 0x15, // 21 - SPELL_ATTR_EX3_REQ_WAND = 1 << 0x16, // 22 Req wand - SPELL_ATTR_EX3_UNK23 = 1 << 0x17, // 23 - SPELL_ATTR_EX3_REQ_OFFHAND = 1 << 0x18, // 24 Req offhand weapon - SPELL_ATTR_EX3_UNK25 = 1 << 0x19, // 25 no cause spell pushback ? - SPELL_ATTR_EX3_UNK26 = 1 << 0x1A, // 26 - SPELL_ATTR_EX3_UNK27 = 1 << 0x1B, // 27 - SPELL_ATTR_EX3_UNK28 = 1 << 0x1C, // 28 - SPELL_ATTR_EX3_UNK29 = 1 << 0x1D, // 29 - SPELL_ATTR_EX3_UNK30 = 1 << 0x1E, // 30 - SPELL_ATTR_EX3_UNK31 = 1 << 0x1F, // 31 + SPELL_ATTR3_ALL = 0xFFFFFFFF, + SPELL_ATTR3_NONE = 0x00000000, + SPELL_ATTR3_UNK0 = 0x00000001, // 0 + SPELL_ATTR3_UNK1 = 0x00000002, // 1 + SPELL_ATTR3_UNK2 = 0x00000004, // 2 + SPELL_ATTR3_BLOCKABLE_SPELL = 0x00000008, // 3 Only dmg class melee in 3.1.3 + SPELL_ATTR3_UNK4 = 0x00000010, // 4 Druid Rebirth only this spell have this flag + SPELL_ATTR3_UNK5 = 0x00000020, // 5 + SPELL_ATTR3_UNK6 = 0x00000040, // 6 + SPELL_ATTR3_STACK_FOR_DIFF_CASTERS = 0x00000080, // 7 separate stack for every caster + SPELL_ATTR3_PLAYERS_ONLY = 0x00000100, // 8 Player only? + SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_2 = 0x00000200, // 9 triggered from effect? + SPELL_ATTR3_MAIN_HAND = 0x00000400, // 10 Main hand weapon required + SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can casted only on battleground + SPELL_ATTR3_REQUIRE_DEAD_TARGET = 0x00001000, // 12 + SPELL_ATTR3_UNK13 = 0x00002000, // 13 + SPELL_ATTR3_UNK14 = 0x00004000, // 14 "Honorless Target" only this spells have this flag + SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag + SPELL_ATTR3_UNK16 = 0x00010000, // 16 no triggers effects that trigger on casting a spell?? (15290 - 2.2ptr change) + SPELL_ATTR3_NO_INITIAL_AGGRO = 0x00020000, // 17 Soothe Animal, 39758, Mind Soothe + SPELL_ATTR3_UNK18 = 0x00040000, // 18 added to Explosive Trap Effect 3.3.0, removed from Mutilate 3.3.0 + SPELL_ATTR3_DISABLE_PROC = 0x00080000, // 19 during aura proc no spells can trigger (20178, 20375) + SPELL_ATTR3_DEATH_PERSISTENT = 0x00100000, // 20 Death persistent spells + SPELL_ATTR3_UNK21 = 0x00200000, // 21 + SPELL_ATTR3_REQ_WAND = 0x00400000, // 22 Req wand + SPELL_ATTR3_UNK23 = 0x00800000, // 23 + SPELL_ATTR3_REQ_OFFHAND = 0x01000000, // 24 Req offhand weapon + SPELL_ATTR3_UNK25 = 0x02000000, // 25 no cause spell pushback ? + SPELL_ATTR3_CAN_PROC_TRIGGERED = 0x04000000, // 26 + SPELL_ATTR3_DRAIN_SOUL = 0x08000000, // 27 only drain soul has this flag + SPELL_ATTR3_UNK28 = 0x10000000, // 28 + SPELL_ATTR3_NO_DONE_BONUS = 0x20000000, // 29 Ignore caster spellpower and done damage mods? + SPELL_ATTR3_UNK30 = 0x40000000, // 30 Shaman's Fire Nova 3.3.0, Sweeping Strikes 3.3.0 + SPELL_ATTR3_UNK31 = 0x80000000 // 31 }; [Flags] - public enum SpellAtributeEx4 + public enum SpellAtributeEx4 : uint { - SPELL_ATTR_EX4_ALL = -1, - SPELL_ATTR_EX4_NONE = 0x00, - SPELL_ATTR_EX4_UNK0 = 1 << 0x00, // 0 - SPELL_ATTR_EX4_UNK1 = 1 << 0x01, // 1 proc on finishing move? - SPELL_ATTR_EX4_UNK2 = 1 << 0x02, // 2 - SPELL_ATTR_EX4_UNK3 = 1 << 0x03, // 3 - SPELL_ATTR_EX4_UNK4 = 1 << 0x04, // 4 This will no longer cause guards to attack on use?? - SPELL_ATTR_EX4_UNK5 = 1 << 0x05, // 5 - SPELL_ATTR_EX4_NOT_STEALABLE = 1 << 0x06, // 6 although such auras might be dispellable, they cannot be stolen - SPELL_ATTR_EX4_UNK7 = 1 << 0x07, // 7 - SPELL_ATTR_EX4_STACK_DOT_MODIFIER = 1 << 0x08, // 8 no effect on non DoTs? - SPELL_ATTR_EX4_UNK9 = 1 << 0x09, // 9 - SPELL_ATTR_EX4_SPELL_VS_EXTEND_COST = 1 << 0x0A, // 10 Rogue Shiv have this flag - SPELL_ATTR_EX4_UNK11 = 1 << 0x0B, // 11 - SPELL_ATTR_EX4_UNK12 = 1 << 0x0C, // 12 - SPELL_ATTR_EX4_UNK13 = 1 << 0x0D, // 13 - SPELL_ATTR_EX4_UNK14 = 1 << 0x0E, // 14 - SPELL_ATTR_EX4_UNK15 = 1 << 0x0F, // 15 - SPELL_ATTR_EX4_NOT_USABLE_IN_ARENA = 1 << 0x10, // 16 not usable in arena - SPELL_ATTR_EX4_USABLE_IN_ARENA = 1 << 0x11, // 17 usable in arena - SPELL_ATTR_EX4_UNK18 = 1 << 0x12, // 18 - SPELL_ATTR_EX4_UNK19 = 1 << 0x13, // 19 - SPELL_ATTR_EX4_UNK20 = 1 << 0x14, // 20 do not give "more powerful spell" error message - SPELL_ATTR_EX4_UNK21 = 1 << 0x15, // 21 - SPELL_ATTR_EX4_UNK22 = 1 << 0x16, // 22 - SPELL_ATTR_EX4_UNK23 = 1 << 0x17, // 23 - SPELL_ATTR_EX4_UNK24 = 1 << 0x18, // 24 - SPELL_ATTR_EX4_UNK25 = 1 << 0x19, // 25 pet scaling auras - SPELL_ATTR_EX4_CAST_ONLY_IN_OUTLAND = 1 << 0x1A, // 26 Can only be used in Outland. - SPELL_ATTR_EX4_UNK27 = 1 << 0x1B, // 27 - SPELL_ATTR_EX4_UNK28 = 1 << 0x1C, // 28 - SPELL_ATTR_EX4_UNK29 = 1 << 0x1D, // 29 - SPELL_ATTR_EX4_UNK30 = 1 << 0x1E, // 30 - SPELL_ATTR_EX4_UNK31 = 1 << 0x1F, // 31 + SPELL_ATTR4_ALL = 0xFFFFFFFF, + SPELL_ATTR4_NONE = 0x00000000, + SPELL_ATTR4_UNK0 = 0x00000001, // 0 + SPELL_ATTR4_UNK1 = 0x00000002, // 1 proc on finishing move? + SPELL_ATTR4_UNK2 = 0x00000004, // 2 + SPELL_ATTR4_CANT_PROC_FROM_SELFCAST = 0x00000008, // 3 + SPELL_ATTR4_UNK4 = 0x00000010, // 4 This will no longer cause guards to attack on use?? + SPELL_ATTR4_UNK5 = 0x00000020, // 5 + SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen + SPELL_ATTR4_TRIGGERED = 0x00000080, // 7 spells forced to be triggered + SPELL_ATTR4_FIXED_DAMAGE = 0x00000100, // 8 decimate, share damage? + SPELL_ATTR4_UNK9 = 0x00000200, // 9 + SPELL_ATTR4_SPELL_VS_EXTEND_COST = 0x00000400, // 10 Rogue Shiv have this flag + SPELL_ATTR4_UNK11 = 0x00000800, // 11 + SPELL_ATTR4_UNK12 = 0x00001000, // 12 + SPELL_ATTR4_UNK13 = 0x00002000, // 13 + SPELL_ATTR4_UNK14 = 0x00004000, // 14 + SPELL_ATTR4_UNK15 = 0x00008000, // 15 + SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16 not usable in arena + SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 usable in arena + SPELL_ATTR4_UNK18 = 0x00040000, // 18 + SPELL_ATTR4_UNK19 = 0x00080000, // 19 + SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER = 0x00100000, // 20 supersedes message "More powerful spell applied" for self casts. + SPELL_ATTR4_UNK21 = 0x00200000, // 21 + SPELL_ATTR4_UNK22 = 0x00400000, // 22 + SPELL_ATTR4_UNK23 = 0x00800000, // 23 + SPELL_ATTR4_UNK24 = 0x01000000, // 24 + SPELL_ATTR4_UNK25 = 0x02000000, // 25 pet scaling auras + SPELL_ATTR4_CAST_ONLY_IN_OUTLAND = 0x04000000, // 26 Can only be used in Outland. + SPELL_ATTR4_UNK27 = 0x08000000, // 27 + SPELL_ATTR4_UNK28 = 0x10000000, // 28 + SPELL_ATTR4_UNK29 = 0x20000000, // 29 + SPELL_ATTR4_UNK30 = 0x40000000, // 30 + SPELL_ATTR4_UNK31 = 0x80000000 // 31 }; [Flags] - public enum SpellAtributeEx5 + public enum SpellAtributeEx5 : uint { - SPELL_ATTR_EX5_ALL = -1, - SPELL_ATTR_EX5_NONE = 0x00, - SPELL_ATTR_EX5_UNK0 = 1 << 0x00, // 0 - SPELL_ATTR_EX5_NO_REAGENT_WHILE_PREP = 1 << 0x01, // 1 not need reagents if UNIT_FLAG_PREPARATION - SPELL_ATTR_EX5_UNK2 = 1 << 0x02, // 2 removed at enter arena (e.g. 31850 since 3.3.3) - SPELL_ATTR_EX5_USABLE_WHILE_STUNNED = 1 << 0x03, // 3 usable while stunned - SPELL_ATTR_EX5_UNK4 = 1 << 0x04, // 4 - SPELL_ATTR_EX5_SINGLE_TARGET_SPELL = 1 << 0x05, // 5 Only one target can be apply at a time - SPELL_ATTR_EX5_UNK6 = 1 << 0x06, // 6 - SPELL_ATTR_EX5_UNK7 = 1 << 0x07, // 7 - SPELL_ATTR_EX5_UNK8 = 1 << 0x08, // 8 - SPELL_ATTR_EX5_START_PERIODIC_AT_APPLY = 1 << 0x09, // 9 begin periodic tick at aura apply - SPELL_ATTR_EX5_UNK10 = 1 << 0x0A, // 10 - SPELL_ATTR_EX5_UNK11 = 1 << 0x0B, // 11 - SPELL_ATTR_EX5_UNK12 = 1 << 0x0C, // 12 - SPELL_ATTR_EX5_UNK13 = 1 << 0x0D, // 13 haste affects duration (e.g. 8050 since 3.3.3) - SPELL_ATTR_EX5_UNK14 = 1 << 0x0E, // 14 - SPELL_ATTR_EX5_UNK15 = 1 << 0x0F, // 15 - SPELL_ATTR_EX5_UNK16 = 1 << 0x10, // 16 - SPELL_ATTR_EX5_USABLE_WHILE_FEARED = 1 << 0x11, // 17 usable while feared - SPELL_ATTR_EX5_USABLE_WHILE_CONFUSED = 1 << 0x12, // 18 usable while confused - SPELL_ATTR_EX5_UNK19 = 1 << 0x13, // 19 - SPELL_ATTR_EX5_UNK20 = 1 << 0x14, // 20 - SPELL_ATTR_EX5_UNK21 = 1 << 0x15, // 21 - SPELL_ATTR_EX5_UNK22 = 1 << 0x16, // 22 - SPELL_ATTR_EX5_UNK23 = 1 << 0x17, // 23 - SPELL_ATTR_EX5_UNK24 = 1 << 0x18, // 24 - SPELL_ATTR_EX5_UNK25 = 1 << 0x19, // 25 - SPELL_ATTR_EX5_UNK26 = 1 << 0x1A, // 26 - SPELL_ATTR_EX5_UNK27 = 1 << 0x1B, // 27 - SPELL_ATTR_EX5_UNK28 = 1 << 0x1C, // 28 - SPELL_ATTR_EX5_UNK29 = 1 << 0x1D, // 29 - SPELL_ATTR_EX5_UNK30 = 1 << 0x1E, // 30 - SPELL_ATTR_EX5_UNK31 = 1 << 0x1F, // 31 Forces all nearby enemies to focus attacks caster + SPELL_ATTR5_ALL = 0xFFFFFFFF, + SPELL_ATTR5_NONE = 0x00000000, + SPELL_ATTR5_UNK0 = 0x00000001, // 0 + SPELL_ATTR5_NO_REAGENT_WHILE_PREP = 0x00000002, // 1 not need reagents if UNIT_FLAG_PREPARATION + SPELL_ATTR5_UNK2 = 0x00000004, // 2 + SPELL_ATTR5_USABLE_WHILE_STUNNED = 0x00000008, // 3 usable while stunned + SPELL_ATTR5_UNK4 = 0x00000010, // 4 + SPELL_ATTR5_SINGLE_TARGET_SPELL = 0x00000020, // 5 Only one target can be apply at a time + SPELL_ATTR5_UNK6 = 0x00000040, // 6 + SPELL_ATTR5_UNK7 = 0x00000080, // 7 + SPELL_ATTR5_UNK8 = 0x00000100, // 8 + SPELL_ATTR5_START_PERIODIC_AT_APPLY = 0x00000200, // 9 begin periodic tick at aura apply + SPELL_ATTR5_UNK10 = 0x00000400, // 10 + SPELL_ATTR5_UNK11 = 0x00000800, // 11 + SPELL_ATTR5_UNK12 = 0x00001000, // 12 + SPELL_ATTR5_UNK13 = 0x00002000, // 13 + SPELL_ATTR5_UNK14 = 0x00004000, // 14 + SPELL_ATTR5_UNK15 = 0x00008000, // 15 + SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK = 0x00010000, // 16 this allows spells with EquippedItemClass to affect spells from other items if the required item is equipped + SPELL_ATTR5_USABLE_WHILE_FEARED = 0x00020000, // 17 usable while feared + SPELL_ATTR5_USABLE_WHILE_CONFUSED = 0x00040000, // 18 usable while confused + SPELL_ATTR5_UNK19 = 0x00080000, // 19 + SPELL_ATTR5_UNK20 = 0x00100000, // 20 + SPELL_ATTR5_UNK21 = 0x00200000, // 21 + SPELL_ATTR5_UNK22 = 0x00400000, // 22 + SPELL_ATTR5_UNK23 = 0x00800000, // 23 + SPELL_ATTR5_UNK24 = 0x01000000, // 24 + SPELL_ATTR5_UNK25 = 0x02000000, // 25 + SPELL_ATTR5_UNK26 = 0x04000000, // 26 + SPELL_ATTR5_UNK27 = 0x08000000, // 27 + SPELL_ATTR5_UNK28 = 0x10000000, // 28 + SPELL_ATTR5_UNK29 = 0x20000000, // 29 + SPELL_ATTR5_UNK30 = 0x40000000, // 30 + SPELL_ATTR5_UNK31 = 0x80000000 // 31 Forces all nearby enemies to focus attacks caster }; [Flags] - public enum SpellAtributeEx6 + public enum SpellAtributeEx6 : uint { - SPELL_ATTR_EX6_ALL = -1, - SPELL_ATTR_EX6_NONE = 0x00, - SPELL_ATTR_EX6_UNK0 = 1 << 0x00, // 0 Only Move spell have this flag - SPELL_ATTR_EX6_ONLY_IN_ARENA = 1 << 0x01, // 1 only usable in arena, not used in 3.2.0a and early - SPELL_ATTR_EX6_UNK2 = 1 << 0x02, // 2 - SPELL_ATTR_EX6_UNK3 = 1 << 0x03, // 3 - SPELL_ATTR_EX6_UNK4 = 1 << 0x04, // 4 - SPELL_ATTR_EX6_UNK5 = 1 << 0x05, // 5 - SPELL_ATTR_EX6_UNK6 = 1 << 0x06, // 6 - SPELL_ATTR_EX6_UNK7 = 1 << 0x07, // 7 - SPELL_ATTR_EX6_UNK8 = 1 << 0x08, // 8 - SPELL_ATTR_EX6_UNK9 = 1 << 0x09, // 9 - SPELL_ATTR_EX6_UNK10 = 1 << 0x0A, // 10 - SPELL_ATTR_EX6_NOT_IN_RAID_INSTANCE = 1 << 0x0B, // 11 not usable in raid instance - SPELL_ATTR_EX6_UNK12 = 1 << 0x0C, // 12 - SPELL_ATTR_EX6_UNK13 = 1 << 0x0D, // 13 - SPELL_ATTR_EX6_UNK14 = 1 << 0x0E, // 14 - SPELL_ATTR_EX6_UNK15 = 1 << 0x0F, // 15 not set in 3.0.3 - SPELL_ATTR_EX6_UNK16 = 1 << 0x10, // 16 - SPELL_ATTR_EX6_UNK17 = 1 << 0x11, // 17 - SPELL_ATTR_EX6_UNK18 = 1 << 0x12, // 18 - SPELL_ATTR_EX6_UNK19 = 1 << 0x13, // 19 - SPELL_ATTR_EX6_UNK20 = 1 << 0x14, // 20 - SPELL_ATTR_EX6_UNK21 = 1 << 0x15, // 21 - SPELL_ATTR_EX6_UNK22 = 1 << 0x16, // 22 - SPELL_ATTR_EX6_UNK23 = 1 << 0x17, // 23 not set in 3.0.3 - SPELL_ATTR_EX6_UNK24 = 1 << 0x18, // 24 not set in 3.0.3 - SPELL_ATTR_EX6_UNK25 = 1 << 0x19, // 25 not set in 3.0.3 - SPELL_ATTR_EX6_UNK26 = 1 << 0x1A, // 26 not set in 3.0.3 - SPELL_ATTR_EX6_UNK27 = 1 << 0x1B, // 27 not set in 3.0.3 - SPELL_ATTR_EX6_UNK28 = 1 << 0x1C, // 28 not set in 3.0.3 - SPELL_ATTR_EX6_NO_DMG_PERCENT_MODS = 1 << 0x1D, // 29 do not apply damage percent mods (usually in cases where it has already been applied) - SPELL_ATTR_EX6_UNK30 = 1 << 0x1E, // 30 not set in 3.0.3 - SPELL_ATTR_EX6_UNK31 = 1 << 0x1F, // 31 not set in 3.0.3 + SPELL_ATTR6_ALL = 0xFFFFFFFF, + SPELL_ATTR6_NONE = 0x00000000, + SPELL_ATTR6_UNK0 = 0x00000001, // 0 Only Move spell have this flag + SPELL_ATTR6_ONLY_IN_ARENA = 0x00000002, // 1 only usable in arena + SPELL_ATTR6_IGNORE_CASTER_AURAS = 0x00000004, // 2 + SPELL_ATTR6_UNK3 = 0x00000008, // 3 + SPELL_ATTR6_UNK4 = 0x00000010, // 4 + SPELL_ATTR6_UNK5 = 0x00000020, // 5 + SPELL_ATTR6_UNK6 = 0x00000040, // 6 + SPELL_ATTR6_UNK7 = 0x00000080, // 7 + SPELL_ATTR6_IGNORE_CROWD_CONTROL_TARGETS = 0x00000100, // 8 + SPELL_ATTR6_UNK9 = 0x00000200, // 9 + SPELL_ATTR6_UNK10 = 0x00000400, // 10 + SPELL_ATTR6_NOT_IN_RAID_INSTANCE = 0x00000800, // 11 not usable in raid instance + SPELL_ATTR6_UNK12 = 0x00001000, // 12 + SPELL_ATTR6_UNK13 = 0x00002000, // 13 + SPELL_ATTR6_UNK14 = 0x00004000, // 14 + SPELL_ATTR6_UNK15 = 0x00008000, // 15 not set in 3.0.3 + SPELL_ATTR6_UNK16 = 0x00010000, // 16 + SPELL_ATTR6_UNK17 = 0x00020000, // 17 + SPELL_ATTR6_UNK18 = 0x00040000, // 18 + SPELL_ATTR6_UNK19 = 0x00080000, // 19 + SPELL_ATTR6_UNK20 = 0x00100000, // 20 + SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute + SPELL_ATTR6_UNK22 = 0x00400000, // 22 + SPELL_ATTR6_UNK23 = 0x00800000, // 23 not set in 3.0.3 + SPELL_ATTR6_UNK24 = 0x01000000, // 24 not set in 3.0.3 + SPELL_ATTR6_UNK25 = 0x02000000, // 25 not set in 3.0.3 + SPELL_ATTR6_UNK26 = 0x04000000, // 26 not set in 3.0.3 + SPELL_ATTR6_UNK27 = 0x08000000, // 27 not set in 3.0.3 + SPELL_ATTR6_UNK28 = 0x10000000, // 28 not set in 3.0.3 + SPELL_ATTR6_NO_DMG_PERCENT_MODS = 0x20000000, // 29 not set in 3.0.3 + SPELL_ATTR6_UNK30 = 0x40000000, // 30 not set in 3.0.3 + SPELL_ATTR6_UNK31 = 0x80000000 // 31 not set in 3.0.3 }; - + [Flags] - public enum SpellAtributeExG + public enum SpellAtributeEx7 : uint { - SPELL_ATTR_EXG_ALL = -1, - SPELL_ATTR_EXG_NONE = 0x00, - SPELL_ATTR_EXG_UNK0 = 1 << 0x00, // 0 - SPELL_ATTR_EXG_UNK1 = 1 << 0x01, // 1 - SPELL_ATTR_EXG_UNK2 = 1 << 0x02, // 2 - SPELL_ATTR_EXG_UNK3 = 1 << 0x03, // 3 - SPELL_ATTR_EXG_UNK4 = 1 << 0x04, // 4 - SPELL_ATTR_EXG_UNK5 = 1 << 0x05, // 5 - SPELL_ATTR_EXG_UNK6 = 1 << 0x06, // 6 - SPELL_ATTR_EXG_UNK7 = 1 << 0x07, // 7 - SPELL_ATTR_EXG_UNK8 = 1 << 0x08, // 8 - SPELL_ATTR_EXG_UNK9 = 1 << 0x09, // 9 - SPELL_ATTR_EXG_UNK10 = 1 << 0x0A, // 10 - SPELL_ATTR_EXG_UNK11 = 1 << 0x0B, // 11 - SPELL_ATTR_EXG_UNK12 = 1 << 0x0C, // 12 - SPELL_ATTR_EXG_UNK13 = 1 << 0x0D, // 13 - SPELL_ATTR_EXG_UNK14 = 1 << 0x0E, // 14 - SPELL_ATTR_EXG_UNK15 = 1 << 0x0F, // 15 - SPELL_ATTR_EXG_UNK16 = 1 << 0x10, // 16 - SPELL_ATTR_EXG_UNK17 = 1 << 0x11, // 17 - SPELL_ATTR_EXG_UNK18 = 1 << 0x12, // 18 - SPELL_ATTR_EXG_UNK19 = 1 << 0x13, // 19 - SPELL_ATTR_EXG_UNK20 = 1 << 0x14, // 20 - SPELL_ATTR_EXG_UNK21 = 1 << 0x15, // 21 - SPELL_ATTR_EXG_UNK22 = 1 << 0x16, // 22 - SPELL_ATTR_EXG_UNK23 = 1 << 0x17, // 23 - SPELL_ATTR_EXG_UNK24 = 1 << 0x18, // 24 - SPELL_ATTR_EXG_UNK25 = 1 << 0x19, // 25 - SPELL_ATTR_EXG_UNK26 = 1 << 0x1A, // 26 - SPELL_ATTR_EXG_UNK27 = 1 << 0x1B, // 27 - SPELL_ATTR_EXG_UNK28 = 1 << 0x1C, // 28 - SPELL_ATTR_EXG_UNK29 = 1 << 0x1D, // 29 - SPELL_ATTR_EXG_UNK30 = 1 << 0x1E, // 30 - SPELL_ATTR_EXG_UNK31 = 1 << 0x1F, // 31 + SPELL_ATTR7_ALL = 0xFFFFFFFF, + SPELL_ATTR7_NONE = 0x00000000, + SPELL_ATTR7_UNK0 = 0x00000001, // 0 Shaman's new spells (Call of the ...), Feign Death. + SPELL_ATTR7_UNK1 = 0x00000002, // 1 Not set in 3.2.2a. + SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // 2 Paladin's auras and 65607 only. + SPELL_ATTR7_DISABLED_CLIENT_SIDE = 0x00000008, // 3 used only by client to disable spells client-side. some sort of special player flag (0x40000) bypasses that restriction + SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 66109 test spell. + SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. + SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). + SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell. + SPELL_ATTR7_UNK8 = 0x00000100, // 8 Teleports, mounts and other spells. + SPELL_ATTR7_UNK9 = 0x00000200, // 9 Teleports, mounts and other spells. + SPELL_ATTR7_DISPEL_CHARGES = 0x00000400, // 10 Dispel and Spellsteal individual charges instead of whole aura. + SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER = 0x00000800, // 11 Only non-player casts interrupt, though Feral Charge - Bear has it. + SPELL_ATTR7_UNK12 = 0x00001000, // 12 Not set in 3.2.2a. + SPELL_ATTR7_UNK13 = 0x00002000, // 13 Not set in 3.2.2a. + SPELL_ATTR7_UNK14 = 0x00004000, // 14 Only 52150 (Raise Dead - Pet) spell. + SPELL_ATTR7_UNK15 = 0x00008000, // 15 Exorcism. Usable on players? 100% crit chance on undead and demons? + SPELL_ATTR7_UNK16 = 0x00010000, // 16 Druid spells (29166, 54833, 64372, 68285). + SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell. + SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects. + SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones. + SPELL_ATTR7_UNK20 = 0x00100000, // 20 + SPELL_ATTR7_UNK21 = 0x00200000, // 21 + SPELL_ATTR7_UNK22 = 0x00400000, // 22 + SPELL_ATTR7_UNK23 = 0x00800000, // 23 + SPELL_ATTR7_UNK24 = 0x01000000, // 24 + SPELL_ATTR7_UNK25 = 0x02000000, // 25 + SPELL_ATTR7_UNK26 = 0x04000000, // 26 + SPELL_ATTR7_UNK27 = 0x08000000, // 27 + SPELL_ATTR7_UNK28 = 0x10000000, // 28 + SPELL_ATTR7_UNK29 = 0x20000000, // 29 + SPELL_ATTR7_UNK30 = 0x40000000, // 30 + SPELL_ATTR7_UNK31 = 0x80000000, // 31 }; [Flags] @@ -1548,7 +1548,7 @@ public class SpellEnums { #region ProcFlagDesc - public static readonly string[] ProcFlagDesc = + public static readonly string[] ProcFlagDesc = { //00 0x00000001 000000000000000000000001 - "00 Killed by aggressor that receive experience or honor", @@ -1576,24 +1576,24 @@ public class SpellEnums "09 Taken damage by Spell that use ranged weapon", //10 0x00000400 000000000000010000000000 - - "10 Successful ??? spell hit", + "10 Successful positive spell hit", //11 0x00000800 000000000000100000000000 - - "11 Taken ??? spell hit", + "11 Taken positive spell hit", //12 0x00001000 000000000001000000000000 - - "12 Successful ??? spell cast", + "12 Successful negative spell cast", //13 0x00002000 000000000010000000000000 - - "13 Taken ??? spell hit", + "13 Taken negative spell hit", //14 0x00004000 000000000100000000000000 - - "14 Successful cast positive spell", + "14 Successful cast positive magic spell", //15 0x00008000 000000001000000000000000 - - "15 Taken positive spell hit", + "15 Taken positive magic spell hit", //16 0x00010000 000000010000000000000000 - - "16 Successful damage from harmful spell cast (каст дамажащего спелла)", + "16 Successful damage from harmful magic spell cast", //17 0x00020000 000000100000000000000000 - - "17 Taken spell damage", + "17 Taken magic spell damage", //18 0x00040000 000001000000000000000000 - "18 Deal periodic damage", @@ -1603,14 +1603,15 @@ public class SpellEnums //20 0x00100000 000100000000000000000000 - "20 Taken any damage", //21 0x00200000 001000000000000000000000 - - "21 On trap activation (При срабатывании ловушки)", + "21 On trap activation", //22 0x00800000 010000000000000000000000 - - "22 Taken off-hand melee attacks", + "22 Successful main-hand melee attacks", //23 0x00800000 100000000000000000000000 - "23 Successful off-hand melee attacks", - "24", + //24 0x01000000 + "24 On death", "25", "26", "27", diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 17d5a5a6..83c083af 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -183,6 +183,7 @@ private void ViewSpellInfo() AppendSpellEffectInfo(); AppendItemInfo(); + AppendDifficultyInfo(); } private void AppendSkillLine() @@ -443,6 +444,39 @@ private void AuraModTypeName(int index) } } + private void AppendDifficultyInfo() + { + uint difficultyId = spell.SpellDifficultyId; + if (difficultyId == 0) + return; + + if (!DBC.SpellDifficulty.ContainsKey(difficultyId)) + { + rtb.AppendFormatLine("Cannot find difficulty overrides for id {0} in SpellDifficulty.dbc!", difficultyId); + return; + } + + string[] modeNames = new string[] + { + "Normal 10", + "Normal 25", + "Heroic 10", + "Heroic 25", + }; + + rtb.SetBold(); + rtb.AppendLine("Spell difficulty Ids:"); + + SpellDifficultyEntry difficulty = DBC.SpellDifficulty[difficultyId]; + for (int i = 0; i < 4; ++i) + { + if (difficulty.SpellId[i] <= 0) + continue; + + rtb.AppendFormatLine("{0}: {1}", modeNames[i], difficulty.SpellId[i]); + } + } + private void AppendItemInfo() { if (!MySQLConnect.Connected) From bf3bec5dd369435267705488c932981150c98033 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 31 Mar 2011 22:01:13 +0200 Subject: [PATCH 05/58] Reversed displayed order of EffectSpellClassMask and SpellFamilyFlags to reflect the ordering in DBC files (and core usage) --- SpellWork/DBC/DBC.cs | 1 + SpellWork/DBC/Structure.cs | 12 ++++++------ SpellWork/Spell/SpellInfo.cs | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index 66ddbf2b..a0ecf265 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -8,6 +8,7 @@ public static class DBC public const string DBC_PATH = @"dbc"; public const int MAX_DBC_LOCALE = 16; + public const int MAX_REAGENT_COUNT = 8; public const int MAX_EFFECT_INDEX = 3; public const int SPELL_ENTRY_FOR_DETECT_LOCALE = 1; diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs index fd7865f2..eb528e25 100644 --- a/SpellWork/DBC/Structure.cs +++ b/SpellWork/DBC/Structure.cs @@ -82,9 +82,9 @@ public struct SpellEntry public uint StackAmount; // 49 m_cumulativeAura [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] Totem; // 50-51 m_totem - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_REAGENT_COUNT)] public int[] Reagent; // 52-59 m_reagent - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_REAGENT_COUNT)] public uint[] ReagentCount; // 60-67 m_reagentCount public int EquippedItemClass; // 68 m_equippedItemClass (value) public int EquippedItemSubClassMask; // 69 m_equippedItemSubclass (mask) @@ -157,8 +157,8 @@ public struct SpellEntry public uint DmgClass; // 213 m_defenseType public uint PreventionType; // 214 m_preventionType public uint StanceBarOrder; // 215 m_stanceBarOrder not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public float[] DmgMultiplier; // 216-218 m_effectChainAmplitude + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + public float[] DmgMultiplier; // 216-218 m_effectChainAmplitude public uint MinFactionId; // 219 m_minFactionID not used public uint MinReputation; // 220 m_minReputation not used public uint RequiredAuraVision; // 221 m_requiredAuraVision not used @@ -169,8 +169,8 @@ public struct SpellEntry public uint RuneCostID; // 226 m_runeCostID public uint SpellMissileID; // 227 m_spellMissileID not used public uint PowerDisplayId; // 228 PowerDisplay.dbc, new in 3.1 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public float[] Unk_320_4; // 229-231 3.2.0 + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + public float[] DamageCoeficient; // 229-231 3.2.0 public uint SpellDescriptionVariableID; // 232 3.2.0 public uint SpellDifficultyId; // 233 3.3.0 // 239 3.3.0 diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 83c083af..25c6d9f5 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -41,7 +41,7 @@ private void ViewSpellInfo() spell.Category, spell.SpellIconID, spell.ActiveIconID, spell.SpellVisual[0], spell.SpellVisual[1]); rtb.AppendFormatLine("Family {0}, flag 0x{1:X8} {2:X8} {3:X8}", - (SpellFamilyNames)spell.SpellFamilyName, spell.SpellFamilyFlags[2], spell.SpellFamilyFlags[1], spell.SpellFamilyFlags[0]); + (SpellFamilyNames)spell.SpellFamilyName, spell.SpellFamilyFlags[0], spell.SpellFamilyFlags[1], spell.SpellFamilyFlags[2]); rtb.AppendLine(); @@ -267,7 +267,7 @@ private void AppendSpellEffectInfo() if (ClassMask[0] != 0 || ClassMask[1] != 0 || ClassMask[2] != 0) { - rtb.AppendFormatLine("SpellClassMask = {0:X8} {1:X8} {2:X8}", ClassMask[2], ClassMask[1], ClassMask[0]); + rtb.AppendFormatLine("SpellClassMask = {0:X8} {1:X8} {2:X8}", ClassMask[0], ClassMask[1], ClassMask[2]); var query = from Spell in DBC.Spell.Values where Spell.SpellFamilyName == spell.SpellFamilyName && Spell.SpellFamilyFlags.ContainsElement(ClassMask) From 544c4300ef709a4746dfe1760189bc6f0b176ec2 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 19 Apr 2011 08:26:51 +0200 Subject: [PATCH 06/58] Added TrinityCore defaults, removed some engrish and updated mysql dep --- SpellWork/DataBase/MySQLConnect.cs | 2 +- SpellWork/Forms/FormMain.cs | 8 +- SpellWork/Forms/FormSettings.cs | 8 +- SpellWork/Properties/Settings.Designer.cs | 89 +++++++++++++--------- SpellWork/Properties/Settings.settings | 8 +- SpellWork/app.config | 8 +- SpellWork/libs/MySql.Data.dll | Bin 327680 -> 353792 bytes 7 files changed, 70 insertions(+), 53 deletions(-) diff --git a/SpellWork/DataBase/MySQLConnect.cs b/SpellWork/DataBase/MySQLConnect.cs index e5543046..d80be6ac 100644 --- a/SpellWork/DataBase/MySQLConnect.cs +++ b/SpellWork/DataBase/MySQLConnect.cs @@ -24,7 +24,7 @@ private static String ConnectionString Settings.Default.Port, Settings.Default.User, Settings.Default.Pass, - Settings.Default.Db_mangos); + Settings.Default.WorldDbName); } } diff --git a/SpellWork/Forms/FormMain.cs b/SpellWork/Forms/FormMain.cs index 8775bd5b..9f7d2933 100644 --- a/SpellWork/Forms/FormMain.cs +++ b/SpellWork/Forms/FormMain.cs @@ -80,8 +80,6 @@ private void FormMain_Resize(object sender, EventArgs e) { try { - // Чтобы панели в сплит контейнере были одинаковы при изменении размера формы, сделаем так. - // Может можно как-то можно через привязки, но я пока незнаю как _scCompareRoot.SplitterDistance = (((Form)sender).Size.Width / 2) - 25; _chName.Width = (((Form)sender).Size.Width - 140); } @@ -94,7 +92,7 @@ private void ConnStatus() if (MySQLConnect.Connected) { - _dbConnect.Text = "Connection is successfully"; + _dbConnect.Text = "Connection is successful."; _dbConnect.ForeColor = Color.Green; // read db data DBC.ItemTemplate = MySQLConnect.SelectItems(); @@ -111,9 +109,9 @@ private void _Connected_Click(object sender, EventArgs e) MySQLConnect.TestConnect(); if (MySQLConnect.Connected) - MessageBox.Show("Connection is successfully!", "MySQL Connections!", MessageBoxButtons.OK, MessageBoxIcon.Information); + MessageBox.Show("Connection is successful!", "MySQL Connections!", MessageBoxButtons.OK, MessageBoxIcon.Information); else - MessageBox.Show("Connection is failed!", "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show("Connection failed!", "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); ConnStatus(); } diff --git a/SpellWork/Forms/FormSettings.cs b/SpellWork/Forms/FormSettings.cs index 1c6806bd..08dee074 100644 --- a/SpellWork/Forms/FormSettings.cs +++ b/SpellWork/Forms/FormSettings.cs @@ -28,7 +28,7 @@ private void _bSaveSettings_Click(object sender, EventArgs e) Settings.Default.Port = _tbPort.Text; Settings.Default.User = _tbUser.Text; Settings.Default.Pass = _tbPass.Text; - Settings.Default.Db_mangos = _tbBase.Text; + Settings.Default.WorldDbName = _tbBase.Text; Settings.Default.UseDbConnect = _cbUseDBConnect.Checked; MySQLConnect.TestConnect(); @@ -37,12 +37,12 @@ private void _bSaveSettings_Click(object sender, EventArgs e) { if (MySQLConnect.Connected) { - MessageBox.Show("Connection is successfully!", "MySQL Connections!", + MessageBox.Show("Connection is successful!", "MySQL Connections!", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { - MessageBox.Show("Connection is failed!", "ERROR!", + MessageBox.Show("Connection failed!", "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } @@ -60,7 +60,7 @@ private void SettingsForm_Load(object sender, EventArgs e) _tbPort.Text = Settings.Default.Port; _tbUser.Text = Settings.Default.User; _tbPass.Text = Settings.Default.Pass; - _tbBase.Text = Settings.Default.Db_mangos; + _tbBase.Text = Settings.Default.WorldDbName; _gbDbSetting.Enabled = _cbUseDBConnect.Checked = Settings.Default.UseDbConnect; } } diff --git a/SpellWork/Properties/Settings.Designer.cs b/SpellWork/Properties/Settings.Designer.cs index 71cf2dc7..0bd0f47a 100644 --- a/SpellWork/Properties/Settings.Designer.cs +++ b/SpellWork/Properties/Settings.Designer.cs @@ -1,24 +1,25 @@ //------------------------------------------------------------------------------ // -// Этот код создан программой. -// Исполняемая версия:2.0.50727.3603 +// This code was generated by a tool. +// Runtime Version:4.0.30319.225 // -// Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае -// повторной генерации кода. +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. // //------------------------------------------------------------------------------ -namespace SpellWork.Properties { - - +namespace SpellWork.Properties +{ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")] - public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] + public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - public static Settings Default { - get { + public static Settings Default + { + get + { return defaultInstance; } } @@ -26,11 +27,14 @@ public static Settings Default { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("localhost")] - public string Host { - get { + public string Host + { + get + { return ((string)(this["Host"])); } - set { + set + { this["Host"] = value; } } @@ -38,59 +42,74 @@ public string Host { [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("3306")] - public string Port { - get { + public string Port + { + get + { return ((string)(this["Port"])); } - set { + set + { this["Port"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("root")] - public string User { - get { + [global::System.Configuration.DefaultSettingValueAttribute("trinity")] + public string User + { + get + { return ((string)(this["User"])); } - set { + set + { this["User"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("")] - public string Pass { - get { + [global::System.Configuration.DefaultSettingValueAttribute("trinity")] + public string Pass + { + get + { return ((string)(this["Pass"])); } - set { + set + { this["Pass"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("mangos")] - public string Db_mangos { - get { - return ((string)(this["Db_mangos"])); + [global::System.Configuration.DefaultSettingValueAttribute("world")] + public string WorldDbName + { + get + { + return ((string)(this["WorldDbName"])); } - set { - this["Db_mangos"] = value; + set + { + this["WorldDbName"] = value; } } [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool UseDbConnect { - get { + public bool UseDbConnect + { + get + { return ((bool)(this["UseDbConnect"])); } - set { + set + { this["UseDbConnect"] = value; } } diff --git a/SpellWork/Properties/Settings.settings b/SpellWork/Properties/Settings.settings index 1554f570..1ea1e001 100644 --- a/SpellWork/Properties/Settings.settings +++ b/SpellWork/Properties/Settings.settings @@ -9,13 +9,13 @@ 3306 - root + trinity - + trinity - - mangos + + world False diff --git a/SpellWork/app.config b/SpellWork/app.config index 15ce7af9..c1831876 100644 --- a/SpellWork/app.config +++ b/SpellWork/app.config @@ -14,13 +14,13 @@ 3306 - root + trinity - + trinity - - mangos + + world False diff --git a/SpellWork/libs/MySql.Data.dll b/SpellWork/libs/MySql.Data.dll index 9fbc8ef28e97a8ef36540dc1de02395348a901a8..992aa5621cc13880d2c16d9527816c58193d3a26 100644 GIT binary patch literal 353792 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Ξ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 ey literal 327680 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 z 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 Date: Tue, 19 Apr 2011 08:27:24 +0200 Subject: [PATCH 07/58] missed --- SpellWork/Properties/AssemblyInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SpellWork/Properties/AssemblyInfo.cs b/SpellWork/Properties/AssemblyInfo.cs index c17c397e..556f6b68 100644 --- a/SpellWork/Properties/AssemblyInfo.cs +++ b/SpellWork/Properties/AssemblyInfo.cs @@ -8,7 +8,7 @@ [assembly: AssemblyTitle("SpellWork")] [assembly: AssemblyDescription("SpellWork")] [assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("TrinityCore")] +[assembly: AssemblyCompany("Trinity")] [assembly: AssemblyProduct("SpellWork")] [assembly: AssemblyCopyright("Copyright © LordJZ and Konctantin 2010")] [assembly: AssemblyTrademark("")] From 3b89022af16968de6d8aef890a1d2dbfaf7755f9 Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 25 Apr 2011 12:35:36 +0200 Subject: [PATCH 08/58] Added space between reagent id and count, small change but readability improves much :D --- SpellWork/Spell/SpellInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 22fe972f..966b752f 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -102,7 +102,7 @@ private void ViewSpellInfo() printedHeader = true; } - rtb.AppendFormat(" {0}x{1}", spell.Reagent[i], spell.ReagentCount[i]); + rtb.AppendFormat(" {0} x{1}", spell.Reagent[i], spell.ReagentCount[i]); } if (printedHeader) From 35fa47cd4288f036a9e1df05639c99ea86518b18 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 11 May 2011 17:38:50 +0200 Subject: [PATCH 09/58] Cleaned all R# warnings --- SpellWork/DBC/DBC.cs | 15 +- SpellWork/DBC/DBCReader.cs | 25 +- SpellWork/DBC/Structure.cs | 166 +++--- SpellWork/DataBase/MySQLConnect.cs | 45 +- SpellWork/Extensions/Extensions.cs | 142 ++--- SpellWork/Extensions/LinqExtensions.cs | 62 +- SpellWork/Extensions/RichTextBoxExtensions.cs | 28 +- SpellWork/Extensions/TreeViewExtensions.cs | 27 +- SpellWork/Forms/FormAboutBox.Designer.cs | 4 +- SpellWork/Forms/FormAboutBox.cs | 63 +-- .../Forms/FormCalculateFlags.Designer.cs | 10 +- SpellWork/Forms/FormCalculateFlags.cs | 29 +- SpellWork/Forms/FormMain.Designer.cs | 200 ++++--- SpellWork/Forms/FormMain.cs | 462 ++++++++------- SpellWork/Forms/FormSearch.Designer.cs | 28 +- SpellWork/Forms/FormSearch.cs | 144 +++-- SpellWork/Forms/FormSettings.Designer.cs | 10 +- SpellWork/Forms/FormSettings.cs | 35 +- SpellWork/Loader.cs | 35 +- SpellWork/Program.cs | 8 +- SpellWork/Properties/AssemblyInfo.cs | 1 - SpellWork/Spell/ProcInfo.cs | 65 ++- SpellWork/Spell/SpellCompare.cs | 42 +- SpellWork/Spell/SpellEnums.cs | 7 +- SpellWork/Spell/SpellInfo.cs | 530 +++++++++--------- SpellWork/SpellWork.csproj | 2 +- 26 files changed, 1016 insertions(+), 1169 deletions(-) diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index a0ecf265..d5405284 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -1,16 +1,17 @@ using System.Collections.Generic; +using SpellWork.Spell; -namespace SpellWork +namespace SpellWork.DBC { public static class DBC { - public const string VERSION = "SpellWork 3.3.5a (12340)"; - public const string DBC_PATH = @"dbc"; + public const string Version = "SpellWork 3.3.5a (12340)"; + public const string DbcPath = @"dbc"; - public const int MAX_DBC_LOCALE = 16; - public const int MAX_REAGENT_COUNT = 8; - public const int MAX_EFFECT_INDEX = 3; - public const int SPELL_ENTRY_FOR_DETECT_LOCALE = 1; + public const int MaxDbcLocale = 16; + public const int MaxReagentCount = 8; + public const int MaxEffectIndex = 3; + public const int SpellEntryForDetectLocale = 1; public static Dictionary OverrideSpellData; public static Dictionary ScreenEffect; diff --git a/SpellWork/DBC/DBCReader.cs b/SpellWork/DBC/DBCReader.cs index 86fdbad3..c2efe481 100644 --- a/SpellWork/DBC/DBCReader.cs +++ b/SpellWork/DBC/DBCReader.cs @@ -3,23 +3,26 @@ using System.IO; using System.Collections.Generic; using System.Runtime.InteropServices; +using SpellWork.Extensions; -namespace SpellWork +namespace SpellWork.DBC { static class DBCReader { - public static unsafe Dictionary ReadDBC(Dictionary strDict) where T : struct + /// Exception. + /// FileNotFoundException. + public static Dictionary ReadDBC(Dictionary strDict) where T : struct { - Dictionary dict = new Dictionary(); - String fileName = Path.Combine(DBC.DBC_PATH, typeof(T).Name + ".dbc").Replace("Entry", String.Empty); + var dict = new Dictionary(); + var fileName = Path.Combine(DBC.DbcPath, typeof(T).Name + ".dbc").Replace("Entry", String.Empty); - using (BinaryReader reader = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), Encoding.UTF8)) + using (var reader = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), Encoding.UTF8)) { if (!File.Exists(fileName)) throw new FileNotFoundException(); // read dbc header - DbcHeader header = reader.ReadStruct(); - int size = Marshal.SizeOf(typeof(T)); + var header = reader.ReadStruct(); + var size = Marshal.SizeOf(typeof(T)); if (!header.IsDBC) throw new Exception(fileName + " is not DBC files!"); @@ -28,14 +31,14 @@ public static unsafe Dictionary ReadDBC(Dictionary str throw new Exception(string.Format("Size of row in DBC file ({0}) != size of DBC struct ({1}) in DBC: {2}", header.RecordSize, size, fileName)); // read dbc data - for (int r = 0; r < header.RecordsCount; ++r) + for (var r = 0; r < header.RecordsCount; ++r) { - uint key = reader.ReadUInt32(); + var key = reader.ReadUInt32(); reader.BaseStream.Position -= 4; - T T_entry = reader.ReadStruct(); + var entry = reader.ReadStruct(); - dict.Add(key, T_entry); + dict.Add(key, entry); } // read dbc strings diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs index 6df03611..05237b5a 100644 --- a/SpellWork/DBC/Structure.cs +++ b/SpellWork/DBC/Structure.cs @@ -1,9 +1,10 @@ using System; -using System.Linq; using System.Text; using System.Runtime.InteropServices; +using SpellWork.Extensions; +using SpellWork.Spell; -namespace SpellWork +namespace SpellWork.DBC { public struct DbcHeader { @@ -20,12 +21,12 @@ public bool IsDBC public long DataSize { - get { return (long)(RecordsCount * RecordSize); } + get { return RecordsCount * RecordSize; } } public long StartStringPosition { - get { return DataSize + (long)Marshal.SizeOf(typeof(DbcHeader)); } + get { return DataSize + Marshal.SizeOf(typeof(DbcHeader)); } } }; @@ -82,69 +83,69 @@ public struct SpellEntry public uint StackAmount; // 49 m_cumulativeAura [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] Totem; // 50-51 m_totem - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_REAGENT_COUNT)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxReagentCount)] public int[] Reagent; // 52-59 m_reagent - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_REAGENT_COUNT)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxReagentCount)] public uint[] ReagentCount; // 60-67 m_reagentCount public int EquippedItemClass; // 68 m_equippedItemClass (value) public int EquippedItemSubClassMask; // 69 m_equippedItemSubclass (mask) public int EquippedItemInventoryTypeMask; // 70 m_equippedItemInvTypes (mask) - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] Effect; // 71-73 m_effect - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public int[] EffectDieSides; // 74-76 m_effectDieSides - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public float[] EffectRealPointsPerLevel; // 77-79 m_effectRealPointsPerLevel - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public int[] EffectBasePoints; // 80-82 m_effectBasePoints (don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints) - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectMechanic; // 83-85 m_effectMechanic - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectImplicitTargetA; // 86-88 m_implicitTargetA - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectImplicitTargetB; // 89-91 m_implicitTargetB - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectRadiusIndex; // 92-94 m_effectRadiusIndex - spellradius.dbc - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectApplyAuraName; // 95-97 m_effectAura - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectAmplitude; // 98-100 m_effectAuraPeriod - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public float[] EffectMultipleValue; // 101-103 m_effectAmplitude - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectChainTarget; // 104-106 m_effectChainTargets - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectItemType; // 107-109 m_effectItemType - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public int[] EffectMiscValue; // 110-112 m_effectMiscValue - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public int[] EffectMiscValueB; // 113-115 m_effectMiscValueB - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectTriggerSpell; // 116-118 m_effectTriggerSpell - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public float[] EffectPointsPerComboPoint; // 119-121 m_effectPointsPerCombo - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectSpellClassMaskA; // 122-124 m_effectSpellClassMaskA, effect 0 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectSpellClassMaskB; // 125-127 m_effectSpellClassMaskB, effect 1 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public uint[] EffectSpellClassMaskC; // 128-130 m_effectSpellClassMaskC, effect 2 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] SpellVisual; // 131-132 m_spellVisualID public uint SpellIconID; // 133 m_spellIconID public uint ActiveIconID; // 134 m_activeIconID public uint SpellPriority; // 135 m_spellPriority not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_DBC_LOCALE)] - private uint[] _SpellName; // 136-151 m_name_lang + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] + private readonly uint[] _SpellName; // 136-151 m_name_lang public uint SpellNameFlag; // 152 not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_DBC_LOCALE)] - private uint[] _Rank; // 153-168 m_nameSubtext_lang + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] + private readonly uint[] _Rank; // 153-168 m_nameSubtext_lang public uint RankFlags; // 169 not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_DBC_LOCALE)] - private uint[] _Description; // 170-185 m_description_lang not used + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] + private readonly uint[] _Description; // 170-185 m_description_lang not used public uint DescriptionFlags; // 186 not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_DBC_LOCALE)] - private uint[] _ToolTip; // 187-202 m_auraDescription_lang not used + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] + private readonly uint[] _ToolTip; // 187-202 m_auraDescription_lang not used public uint ToolTipFlags; // 203 not used public uint ManaCostPercentage; // 204 m_manaCostPct public uint StartRecoveryCategory; // 205 m_startRecoveryCategory @@ -152,12 +153,12 @@ public struct SpellEntry public uint MaxTargetLevel; // 207 m_maxTargetLevel public uint SpellFamilyName; // 208 m_spellClassSet [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public uint[] SpellFamilyFlags; // 209-211 m_spellClassMask NOTE: size is 12 bytes!!! + public uint[] SpellFamilyFlags; // 209-211 m_spellClassMask public uint MaxAffectedTargets; // 212 m_maxTargets public uint DmgClass; // 213 m_defenseType public uint PreventionType; // 214 m_preventionType public uint StanceBarOrder; // 215 m_stanceBarOrder not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public float[] DmgMultiplier; // 216-218 m_effectChainAmplitude public uint MinFactionId; // 219 m_minFactionID not used public uint MinReputation; // 220 m_minReputation not used @@ -169,7 +170,7 @@ public struct SpellEntry public uint RuneCostID; // 226 m_runeCostID public uint SpellMissileID; // 227 m_spellMissileID not used public uint PowerDisplayId; // 228 PowerDisplay.dbc, new in 3.1 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MAX_EFFECT_INDEX)] + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] public float[] DamageCoeficient; // 229-231 3.2.0 public uint SpellDescriptionVariableID; // 232 3.2.0 public uint SpellDifficultyId; // 233 3.3.0 // 239 3.3.0 @@ -187,7 +188,7 @@ public string SpellName ///

public string Rank { - get { return _Rank[(uint)DBC.Locale] != 0 ? DBC.SpellStrings[_Rank[(uint)DBC.Locale]] : ""; } + get { return _Rank[(uint)DBC.Locale] != 0 ? DBC.SpellStrings[_Rank[(uint)DBC.Locale]] : string.Empty; } } public string SpellNameRank @@ -220,9 +221,9 @@ public string ProcInfo { get { - int i = 0; - StringBuilder sb = new StringBuilder(); - uint proc = ProcFlags; + var i = 0; + var sb = new StringBuilder(); + var proc = ProcFlags; while (proc != 0) { if ((proc & 1) != 0) @@ -246,9 +247,9 @@ public string Range if (RangeIndex == 0 || !DBC.SpellRange.ContainsKey(RangeIndex)) return String.Empty; - SpellRangeEntry range = DBC.SpellRange[RangeIndex]; - StringBuilder sb = new StringBuilder(); - sb.AppendFormatLine("SpellRange: (Id {0}) \"{1}\":", range.ID, range.Description1); + var range = DBC.SpellRange[RangeIndex]; + var sb = new StringBuilder(); + sb.AppendFormatLine("SpellRange: (Id {0}) \"{1}\":", range.Id, range.Description1); sb.AppendFormatLine(" MinRange = {0}, MinRangeFriendly = {1}", range.MinRange, range.MinRangeFriendly); sb.AppendFormatLine(" MaxRange = {0}, MaxRangeFriendly = {1}", range.MaxRange, range.MaxRangeFriendly); @@ -258,14 +259,10 @@ public string Range public string GetRadius(int index) { - uint rIndex = EffectRadiusIndex[index]; + var rIndex = EffectRadiusIndex[index]; if (rIndex != 0) - { - if (DBC.SpellRadius.ContainsKey(rIndex)) - return String.Format("Radius (Id {0}) {1:F}", rIndex, DBC.SpellRadius[rIndex].Radius); - else - return String.Format("Radius (Id {0}) Not found", rIndex); - } + return DBC.SpellRadius.ContainsKey(rIndex) ? String.Format("Radius (Id {0}) {1:F}", rIndex, DBC.SpellRadius[rIndex].Radius) : String.Format("Radius (Id {0}) Not found", rIndex); + return String.Empty; } @@ -276,11 +273,10 @@ public string CastTime if (CastingTimeIndex == 0) return String.Empty; - if (!DBC.SpellCastTimes.ContainsKey(CastingTimeIndex)) - return String.Format("CastingTime (Id {0}) = ????", CastingTimeIndex); - else - return String.Format("CastingTime (Id {0}) = {1:F}", - CastingTimeIndex, DBC.SpellCastTimes[CastingTimeIndex].CastTime / 1000.0f); + return !DBC.SpellCastTimes.ContainsKey(CastingTimeIndex) + ? String.Format("CastingTime (Id {0}) = ????", CastingTimeIndex) + : String.Format("CastingTime (Id {0}) = {1:F}", CastingTimeIndex, + DBC.SpellCastTimes[CastingTimeIndex].CastTime / 1000.0f); } } @@ -295,58 +291,58 @@ public SpellSchoolMask School public struct SkillLineEntry { - public uint ID; // 0 m_ID + public uint Id; // 0 m_ID public int CategoryId; // 1 m_categoryID - public uint SkillCostID; // 2 m_skillCostsID + public uint SkillCostId; // 2 m_skillCostsID [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] _Name; // 3-18 m_displayName_lang + public uint[] InternalName; // 3-18 m_displayName_lang public uint NameFlags; // 19 [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] _Description; // 20-35 m_description_lang + public uint[] InternalDescription; // 20-35 m_description_lang public uint DescriptionFlags; // 36 public uint SpellIcon; // 37 m_spellIconID [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] _AlternateVerb; // 38-53 m_alternateVerb_lang + public uint[] InternalAlternateVerb; // 38-53 m_alternateVerb_lang public uint AlternateVerbFlags; // 54 public uint CanLink; // 55 m_canLink (prof. with recipes public string Name { - get { return DBC.SkillLineStrings.GetValue(_Name[(uint)DBC.Locale]); } + get { return DBC.SkillLineStrings.GetValue(InternalName[(uint)DBC.Locale]); } } public string Description { - get { return DBC.SkillLineStrings.GetValue(_Description[(uint)DBC.Locale]); } + get { return DBC.SkillLineStrings.GetValue(InternalDescription[(uint)DBC.Locale]); } } public string AlternateVerb { - get { return DBC.SkillLineStrings.GetValue(_AlternateVerb[(uint)DBC.Locale]); } + get { return DBC.SkillLineStrings.GetValue(InternalAlternateVerb[(uint)DBC.Locale]); } } }; public struct SkillLineAbilityEntry { - public uint ID; // 0 m_ID + public uint Id; // 0 m_ID public uint SkillId; // 1 m_skillLine public uint SpellId; // 2 m_spell public uint Racemask; // 3 m_raceMask public uint Classmask; // 4 m_classMask public uint RacemaskNot; // 5 m_excludeRace public uint ClassmaskNot; // 6 m_excludeClass - public uint Req_skill_value; // 7 m_minSkillLineRank - public uint Forward_spellid; // 8 m_supercededBySpell + public uint ReqSkillValue; // 7 m_minSkillLineRank + public uint ForwardSpellid; // 8 m_supercededBySpell public uint LearnOnGetSkill; // 9 m_acquireMethod - public uint Max_value; // 10 m_trivialSkillLineRankHigh - public uint Min_value; // 11 m_trivialSkillLineRankLow + public uint MaxValue; // 10 m_trivialSkillLineRankHigh + public uint MinValue; // 11 m_trivialSkillLineRankLow [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public uint[] CharacterPoints; // 12-13 m_characterPoints[2] }; public struct SpellRadiusEntry { - public uint ID; + public uint Id; public float Radius; public int Zero; public float Radius2; @@ -354,45 +350,45 @@ public struct SpellRadiusEntry public struct SpellRangeEntry { - public uint ID; + public uint Id; public float MinRange; public float MinRangeFriendly; public float MaxRange; public float MaxRangeFriendly; public uint Field5; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] _Desc1; + public uint[] Desc1; public uint Desc1Flags; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] _Desc2; + public uint[] Desc2; public uint Desc2Flags; public string Description1 { - get { return DBC.SpellRangeStrings.GetValue(_Desc1[(uint)DBC.Locale]); } + get { return DBC.SpellRangeStrings.GetValue(Desc1[(uint)DBC.Locale]); } } public string Description2 { - get { return DBC.SpellRangeStrings.GetValue(_Desc2[(uint)DBC.Locale]); } + get { return DBC.SpellRangeStrings.GetValue(Desc2[(uint)DBC.Locale]); } } }; public struct SpellDurationEntry { - public uint ID; + public uint Id; [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] public int[] Duration; public override string ToString() { - return String.Format("Duration: ID ({0}) {1}, {2}, {3}", ID, Duration[0], Duration[1], Duration[2]); + return String.Format("Duration: ID ({0}) {1}, {2}, {3}", Id, Duration[0], Duration[1], Duration[2]); } }; public struct SpellCastTimesEntry { - public uint ID; + public uint Id; public int CastTime; public float CastTimePerLevel; public int MinCastTime; @@ -408,7 +404,7 @@ public struct SpellDifficultyEntry public struct ScreenEffectEntry { public uint Id; - public uint _Name; + public uint InternalName; public uint Unk0; public float Unk1; public uint Unk2; @@ -420,7 +416,7 @@ public struct ScreenEffectEntry public string Name { - get { return DBC.ScreenEffectStrings.GetValue(_Name); } + get { return DBC.ScreenEffectStrings.GetValue(InternalName); } } }; @@ -430,14 +426,14 @@ public struct OverrideSpellDataEntry // Value 10 also used in SpellInfo.AuraModTypeName [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] public uint[] Spells; - public uint unk; + public uint Unk; }; //=============== DateBase =================\\ public struct SpellProcEventEntry { - public uint ID; + public uint Id; public string SpellName; public uint SchoolMask; public uint SpellFamilyName; @@ -452,7 +448,7 @@ public string[] ToArray() { return new[] { - ID.ToString(), + Id.ToString(), SpellName, SchoolMask.ToString(), SpellFamilyName.ToString(), @@ -470,7 +466,7 @@ public string[] ToArray() public struct SpellChain { - public int ID; + public int Id; public int PrevSpell; public int FirstSpell; public int Rank; @@ -484,6 +480,6 @@ public struct Item public string Description; public string LocalesName; public string LocalesDescription; - public uint[] SpellID; + public uint[] SpellId; }; } diff --git a/SpellWork/DataBase/MySQLConnect.cs b/SpellWork/DataBase/MySQLConnect.cs index d80be6ac..89d05286 100644 --- a/SpellWork/DataBase/MySQLConnect.cs +++ b/SpellWork/DataBase/MySQLConnect.cs @@ -1,14 +1,15 @@ using System; +using SpellWork.DBC; +using SpellWork.Extensions; using SpellWork.Properties; using System.Collections.Generic; using MySql.Data.MySqlClient; -using System.Windows.Forms; -namespace SpellWork +namespace SpellWork.Database { - public static class MySQLConnect + public static class MySqlConnection { - private static MySqlConnection _conn; + private static MySql.Data.MySqlClient.MySqlConnection _conn; private static MySqlCommand _command; public static bool Connected { get; private set; } @@ -30,20 +31,16 @@ private static String ConnectionString private static String GetSpellName(uint id) { - if (DBC.Spell.ContainsKey(id)) - { - return DBC.Spell[id].SpellNameRank; - } - else - { - Dropped.Add(String.Format("DELETE FROM `spell_proc_event` WHERE `entry` IN ({0});\r\n", id.ToUInt32())); - return String.Empty; - } + if (DBC.DBC.Spell.ContainsKey(id)) + return DBC.DBC.Spell[id].SpellNameRank; + + Dropped.Add(String.Format("DELETE FROM `spell_proc_event` WHERE `entry` IN ({0});\r\n", id.ToUInt32())); + return String.Empty; } public static void SelectProc(string query) { - using (_conn = new MySqlConnection(ConnectionString)) + using (_conn = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString)) { _command = new MySqlCommand(query, _conn); _conn.Open(); @@ -55,8 +52,8 @@ public static void SelectProc(string query) { SpellProcEventEntry str; - str.ID = reader[0].ToUInt32(); - str.SpellName = GetSpellName(str.ID); + str.Id = reader[0].ToUInt32(); + str.SpellName = GetSpellName(str.Id); str.SchoolMask = reader[1].ToUInt32(); str.SpellFamilyName = reader[2].ToUInt32(); str.SpellFamilyMask = new[] @@ -79,7 +76,7 @@ public static void SelectProc(string query) public static void Insert(string query) { - _conn = new MySqlConnection(ConnectionString); + _conn = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString); _command = new MySqlCommand(query, _conn); _conn.Open(); _command.ExecuteNonQuery(); @@ -88,9 +85,9 @@ public static void Insert(string query) public static List SelectItems() { - List items = DBC.ItemTemplate; + var items = DBC.DBC.ItemTemplate; // In order to reduce the search time, we make the first selection of all items that have spellid - string query = String.Format( + var query = String.Format( @"SELECT t.entry, t.name, t.description, @@ -113,14 +110,14 @@ LEFT JOIN t.spellid_3 <> 0 || t.spellid_4 <> 0 || t.spellid_5 <> 0;", - (int)DBC.Locale == 0 ? 1 : (int)DBC.Locale /* it's huck TODO: replase code*/); + (int)DBC.DBC.Locale == 0 ? 1 : (int)DBC.DBC.Locale /* it's hack TODO: replace code*/); - using (_conn = new MySqlConnection(ConnectionString)) + using (_conn = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString)) { _command = new MySqlCommand(query, _conn); _conn.Open(); - using (MySqlDataReader reader = _command.ExecuteReader()) + using (var reader = _command.ExecuteReader()) { while (reader.Read()) { @@ -131,7 +128,7 @@ LEFT JOIN Description = reader[2].ToString(), LocalesName = reader[3].ToString(), LocalesDescription = reader[4].ToString(), - SpellID = new uint[] + SpellId = new[] { (uint)reader[5], (uint)reader[6], @@ -156,7 +153,7 @@ public static void TestConnect() try { - _conn = new MySqlConnection(ConnectionString); + _conn = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString); _conn.Open(); _conn.Close(); Connected = true; diff --git a/SpellWork/Extensions/Extensions.cs b/SpellWork/Extensions/Extensions.cs index 839c367e..8cd68895 100644 --- a/SpellWork/Extensions/Extensions.cs +++ b/SpellWork/Extensions/Extensions.cs @@ -1,13 +1,14 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; using System.Data; using System.Reflection; -namespace SpellWork +namespace SpellWork.Extensions { public static class Extensions { @@ -19,7 +20,7 @@ public static class Extensions public static string ReadCString(this BinaryReader reader) { byte num; - List temp = new List(); + var temp = new List(); while ((num = reader.ReadByte()) != 0) { @@ -35,12 +36,12 @@ public static string ReadCString(this BinaryReader reader) /// Struct type. /// Stream to read from. /// Resulting struct. - public static unsafe T ReadStruct(this BinaryReader reader) where T : struct + public static T ReadStruct(this BinaryReader reader) where T : struct { - byte[] rawData = reader.ReadBytes(Marshal.SizeOf(typeof(T))); + var rawData = reader.ReadBytes(Marshal.SizeOf(typeof(T))); - GCHandle handle = GCHandle.Alloc(rawData, GCHandleType.Pinned); - T returnObject = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T)); + var handle = GCHandle.Alloc(rawData, GCHandleType.Pinned); + var returnObject = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T)); handle.Free(); @@ -49,12 +50,7 @@ public static unsafe T ReadStruct(this BinaryReader reader) where T : struct public static StringBuilder AppendFormatIfNotNull(this StringBuilder builder, string format, params object[] arg) { - if (arg[0].ToUInt32() != 0) - { - return builder.AppendFormat(format, arg); - } - - return builder; + return arg[0].ToUInt32() != 0 ? builder.AppendFormat(format, arg) : builder; } // Append Format Line @@ -65,22 +61,12 @@ public static StringBuilder AppendFormatLine(this StringBuilder builder, string public static StringBuilder AppendFormatLineIfNotNull(this StringBuilder builder, string format, int arg) { - if (arg != 0) - { - return builder.AppendFormat(format, arg).AppendLine(); - } - - return builder; + return arg != 0 ? builder.AppendFormat(format, arg).AppendLine() : builder; } public static StringBuilder AppendFormatLineIfNotNull(this StringBuilder builder, string format, uint arg) { - if (arg != 0) - { - return builder.AppendFormat(format, arg).AppendLine(); - } - - return builder; + return arg != 0 ? builder.AppendFormat(format, arg).AppendLine() : builder; } public static uint ToUInt32(this Object val) @@ -123,7 +109,7 @@ public static ulong ToUlong(this Object val) return num; } - public static String NormaliseString(this String text, String remove) + public static String NormalizeString(this String text, String remove) { var str = String.Empty; if (remove != String.Empty) @@ -133,7 +119,7 @@ public static String NormaliseString(this String text, String remove) foreach (var s in text.Split('_')) { - int i = 0; + var i = 0; foreach (var c in s.ToCharArray()) { str += i == 0 ? c.ToString().ToUpper() : c.ToString().ToLower(); @@ -145,67 +131,55 @@ public static String NormaliseString(this String text, String remove) return str.Remove(str.Length - 1); } - public static void SetCheckedItemFromFlag(this CheckedListBox _name, uint _value) + public static void SetCheckedItemFromFlag(this CheckedListBox name, uint value) { - for (int i = 0; i < _name.Items.Count; ++i) - { - _name.SetItemChecked(i, ((_value / (1U << (i - 1))) % 2) != 0); - } + for (var i = 0; i < name.Items.Count; ++i) + name.SetItemChecked(i, ((value / (1U << (i - 1))) % 2) != 0); } - public static uint GetFlagsValue(this CheckedListBox _name) + public static uint GetFlagsValue(this CheckedListBox name) { uint val = 0; - for (int i = 0; i < _name.CheckedIndices.Count; i++) - { - val += 1U << (_name.CheckedIndices[i] - 1); - } + for (var i = 0; i < name.CheckedIndices.Count; ++i) + val += 1U << (name.CheckedIndices[i] - 1); return val; } - public static void SetFlags(this CheckedListBox _clb) + public static void SetFlags(this CheckedListBox clb) { - _clb.Items.Clear(); + clb.Items.Clear(); foreach (var elem in Enum.GetValues(typeof(T))) - { - _clb.Items.Add(elem.ToString().NormaliseString(String.Empty)); - } + clb.Items.Add(elem.ToString().NormalizeString(String.Empty)); } - public static void SetFlags(this CheckedListBox _clb, String remove) + public static void SetFlags(this CheckedListBox clb, String remove) { - _clb.Items.Clear(); + clb.Items.Clear(); foreach (var elem in Enum.GetValues(typeof(T))) - { - _clb.Items.Add(elem.ToString().NormaliseString(remove)); - } + clb.Items.Add(elem.ToString().NormalizeString(remove)); } - public static void SetFlags(this CheckedListBox _clb, Type type, String remove) + public static void SetFlags(this CheckedListBox clb, Type type, String remove) { - _clb.Items.Clear(); + clb.Items.Clear(); foreach (var elem in Enum.GetValues(type)) - { - _clb.Items.Add(elem.ToString().NormaliseString(remove)); - } + clb.Items.Add(elem.ToString().NormalizeString(remove)); } - public static void SetEnumValues(this ComboBox cb, string NoValue) + public static void SetEnumValues(this ComboBox cb, string noValue) { - DataTable dt = new DataTable(); + var dt = new DataTable(); dt.Columns.Add("ID"); dt.Columns.Add("NAME"); - dt.Rows.Add(new Object[] { -1, NoValue }); + dt.Rows.Add(new Object[] { -1, noValue }); foreach (var str in Enum.GetValues(typeof(T))) - { dt.Rows.Add(new Object[] { (int)str, "(" + ((int)str).ToString("000") + ") " + str }); - } cb.DataSource = dt; cb.DisplayMember = "NAME"; @@ -217,7 +191,7 @@ public static void SetEnumValuesDirect(this ComboBox cb, Boolean setFirstValu cb.BeginUpdate(); cb.Items.Clear(); - foreach (object value in Enum.GetValues(typeof(T))) + foreach (var value in Enum.GetValues(typeof(T))) cb.Items.Add(((Enum)value).GetFullName()); if (setFirstValue && cb.Items.Count > 0) @@ -230,22 +204,22 @@ public static void SetStructFields(this ComboBox cb) { cb.Items.Clear(); - DataTable dt = new DataTable(); + var dt = new DataTable(); dt.Columns.Add("ID", typeof(MemberInfo)); dt.Columns.Add("NAME", typeof(String)); var type = typeof(T).GetMembers(); - int i = 0; - foreach (MemberInfo str in type) + var i = 0; + foreach (var str in type) { - if (str is FieldInfo || str is PropertyInfo) - { - DataRow dr = dt.NewRow(); - dr["ID"] = str; - dr["NAME"] = String.Format("({0:000}) {1}", i, str.Name); - dt.Rows.Add(dr); - i++; - } + if (!(str is FieldInfo) && !(str is PropertyInfo)) + continue; + + var dr = dt.NewRow(); + dr["ID"] = str; + dr["NAME"] = String.Format("({0:000}) {1}", i, str.Name); + dt.Rows.Add(dr); + ++i; } cb.DataSource = dt; @@ -272,26 +246,12 @@ public static bool ContainsText(this string text, string compareText) /// Boolean(true or false) public static bool ContainsText(this string text, string[] compareText) { - foreach (string str in compareText) - { - if ((text.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1)) - return true; - } - return false; + return compareText.Any(str => (text.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1)); } public static bool ContainsElement(this uint[] array, uint[] value) { - if (array.Length != value.Length) - return false; - - for(int i = 0; i < array.Length; i++) - { - if ((array[i] & value[i]) != 0) - return true; - } - - return false; + return array.Length == value.Length && array.Where((t, i) => (t & value[i]) != 0).Any(); } /// @@ -302,9 +262,7 @@ public static bool ContainsElement(this uint[] array, uint[] value) /// true or false public static bool ContainsElement(this uint[] array, uint value) { - foreach (uint i in array) - if (i == value) return true; - return false; + return array.Any(i => i == value); } public static T GetValue(this Dictionary dictionary, uint key) @@ -319,18 +277,18 @@ public static bool IsEmpty(this String str) return str == String.Empty; } - public static string GetFullName(this Enum _enum) + public static string GetFullName(this Enum @enum) { - var field = _enum.GetType().GetField(_enum.ToString()); + var field = @enum.GetType().GetField(@enum.ToString()); if (field != null) { - FullNameAttribute[] attrs = (FullNameAttribute[])field.GetCustomAttributes(typeof(FullNameAttribute), false); + var attrs = (FullNameAttribute[])field.GetCustomAttributes(typeof(FullNameAttribute), false); if (attrs.Length > 0) return attrs[0].FullName; } - return _enum.ToString(); + return @enum.ToString(); } } @@ -341,7 +299,7 @@ public class FullNameAttribute : Attribute public FullNameAttribute(string fullName) { - this.FullName = fullName; + FullName = fullName; } } } diff --git a/SpellWork/Extensions/LinqExtensions.cs b/SpellWork/Extensions/LinqExtensions.cs index 7cf4ad9e..b4b4a4f3 100644 --- a/SpellWork/Extensions/LinqExtensions.cs +++ b/SpellWork/Extensions/LinqExtensions.cs @@ -1,7 +1,8 @@ using System; +using System.Linq; using System.Reflection; -namespace SpellWork +namespace SpellWork.Extensions { public enum CompareType { @@ -40,13 +41,14 @@ public static class LinqExtensions /// Compares two values object /// /// - /// + /// /// Value Type is MemberInfo /// + /// /// - public static bool CreateFilter(this T T_entry, object field, object val, CompareType compareType) + public static bool CreateFilter(this T entry, object field, object val, CompareType compareType) { - object basicValue = GetValue(T_entry, (MemberInfo)field); + var basicValue = GetValue(entry, (MemberInfo)field); switch (basicValue.GetType().Name) { @@ -62,43 +64,23 @@ public static bool CreateFilter(this T T_entry, object field, object val, Com return Compare(basicValue.ToString(), val.ToString(), compareType); case @"UInt32[]": { - uint val_uint = val.ToUInt32(); - foreach (uint el in (uint[])basicValue) - { - if (Compare(el, val_uint, compareType)) - return true; - } - return false; + var valUint = val.ToUInt32(); + return ((uint[])basicValue).Any(el => Compare(el, valUint, compareType)); } case @"Int32[]": { - int val_int = val.ToInt32(); - foreach (int el in (int[])basicValue) - { - if (Compare(el, val_int, compareType)) - return true; - } - return false; + var valInt = val.ToInt32(); + return ((int[])basicValue).Any(el => Compare(el, valInt, compareType)); } case @"Single[]": { - float val_float = val.ToFloat(); - foreach (float el in (float[])basicValue) - { - if (Compare(el, val_float, compareType)) - return true; - } - return false; + var valFloat = val.ToFloat(); + return ((float[])basicValue).Any(el => Compare(el, valFloat, compareType)); } case @"UInt64[]": { - ulong val_ulong = val.ToUlong(); - foreach (ulong el in (ulong[])basicValue) - { - if (Compare(el, val_ulong, compareType)) - return true; - } - return false; + var valUlong = val.ToUlong(); + return ((ulong[])basicValue).Any(el => Compare(el, valUlong, compareType)); } default: return false; @@ -121,7 +103,6 @@ private static Boolean Compare(String baseValue, String value, CompareType compa case CompareType.NotEqual: return !baseValue.Equals(value, StringComparison.CurrentCultureIgnoreCase); - case CompareType.Equal: default: return baseValue.Equals(value, StringComparison.CurrentCultureIgnoreCase); } @@ -142,7 +123,6 @@ private static Boolean Compare(float baseValue, float value, CompareType compare case CompareType.NotEqual: return baseValue != value; - case CompareType.Equal: default: return baseValue == value; } @@ -170,7 +150,6 @@ private static Boolean Compare(UInt64 baseValue, UInt64 value, CompareType compa case CompareType.NotEqual: return baseValue != value; - case CompareType.Equal: default: return baseValue == value; } @@ -198,7 +177,6 @@ private static Boolean Compare(Int32 baseValue, Int32 value, CompareType compare case CompareType.NotEqual: return baseValue != value; - case CompareType.Equal: default: return baseValue == value; } @@ -226,7 +204,6 @@ private static Boolean Compare(UInt32 baseValue, UInt32 value, CompareType compa case CompareType.NotEqual: return baseValue != value; - case CompareType.Equal: default: return baseValue == value; } @@ -234,14 +211,13 @@ private static Boolean Compare(UInt32 baseValue, UInt32 value, CompareType compa #endregion - private static Object GetValue(T T_entry, MemberInfo field) + private static Object GetValue(T entry, MemberInfo field) { if (field is FieldInfo) - return typeof(T).GetField(field.Name).GetValue(T_entry); - else if (field is PropertyInfo) - return typeof(T).GetProperty(field.Name).GetValue(T_entry, null); - else - return null; + return typeof(T).GetField(field.Name).GetValue(entry); + if (field is PropertyInfo) + return typeof(T).GetProperty(field.Name).GetValue(entry, null); + return null; } } } diff --git a/SpellWork/Extensions/RichTextBoxExtensions.cs b/SpellWork/Extensions/RichTextBoxExtensions.cs index 0b314593..4a3aac78 100644 --- a/SpellWork/Extensions/RichTextBoxExtensions.cs +++ b/SpellWork/Extensions/RichTextBoxExtensions.cs @@ -2,12 +2,12 @@ using System.Drawing; using System.Windows.Forms; -namespace SpellWork +namespace SpellWork.Extensions { public static class RichTextBoxExtensions { - public const String DEFAULT_FAMILY = "Arial Unicode MS"; - public const float DEFAULT_SIZE = 9f; + public const String DefaultFamily = "Arial Unicode MS"; + public const float DefaultSize = 9f; public static void AppendFormatLine(this RichTextBox textbox, string format, params object[] arg0) { @@ -77,44 +77,42 @@ public static void AppendFormatIfNotNull(this RichTextBox builder, string format public static void SetStyle(this RichTextBox textbox, Color color, FontStyle style) { textbox.SelectionColor = color; - textbox.SelectionFont = new Font(DEFAULT_FAMILY, DEFAULT_SIZE, style); + textbox.SelectionFont = new Font(DefaultFamily, DefaultSize, style); } public static void SetBold(this RichTextBox textbox) { - textbox.SelectionFont = new Font(DEFAULT_FAMILY, DEFAULT_SIZE, FontStyle.Bold); + textbox.SelectionFont = new Font(DefaultFamily, DefaultSize, FontStyle.Bold); } public static void SetDefaultStyle(this RichTextBox textbox) { - textbox.SelectionFont = new Font(DEFAULT_FAMILY, DEFAULT_SIZE, FontStyle.Regular); + textbox.SelectionFont = new Font(DefaultFamily, DefaultSize, FontStyle.Regular); textbox.SelectionColor = Color.Black; } public static void ColorizeCode(this RichTextBox rtb) { string[] keywords = { "INSERT", "INTO", "DELETE", "FROM", "IN", "VALUES", "WHERE" }; - string text = rtb.Text; + var text = rtb.Text; rtb.SelectAll(); rtb.SelectionColor = rtb.ForeColor; - foreach (String keyword in keywords) + foreach (var keyword in keywords) { - int keywordPos = rtb.Find(keyword, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord); + var keywordPos = rtb.Find(keyword, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord); while (keywordPos != -1) { - int commentPos = text.LastIndexOf("-- ", keywordPos, StringComparison.OrdinalIgnoreCase); - int newLinePos = text.LastIndexOf("\n", keywordPos, StringComparison.OrdinalIgnoreCase); + var commentPos = text.LastIndexOf("-- ", keywordPos, StringComparison.OrdinalIgnoreCase); + var newLinePos = text.LastIndexOf("\n", keywordPos, StringComparison.OrdinalIgnoreCase); - int quoteCount = 0; - int quotePos = text.IndexOf("\"", newLinePos + 1, keywordPos - newLinePos, StringComparison.OrdinalIgnoreCase); + var quoteCount = 0; + var quotePos = text.IndexOf("\"", newLinePos + 1, keywordPos - newLinePos, StringComparison.OrdinalIgnoreCase); for (; quotePos != -1; quoteCount++) - { quotePos = text.IndexOf("\"", quotePos + 1, keywordPos - (quotePos + 1), StringComparison.OrdinalIgnoreCase); - } if (newLinePos >= commentPos && quoteCount % 2 == 0) rtb.SelectionColor = Color.Blue; diff --git a/SpellWork/Extensions/TreeViewExtensions.cs b/SpellWork/Extensions/TreeViewExtensions.cs index 8802150e..e8bbf427 100644 --- a/SpellWork/Extensions/TreeViewExtensions.cs +++ b/SpellWork/Extensions/TreeViewExtensions.cs @@ -1,6 +1,8 @@ -using System.Windows.Forms; +using System.Linq; +using System.Windows.Forms; +using SpellWork.Spell; -namespace SpellWork +namespace SpellWork.Extensions { public static class TreeViewExtensions { @@ -11,18 +13,15 @@ public static class TreeViewExtensions /// public static uint[] GetMask(this TreeView tv) { - uint[] val = new uint[3]; - foreach (TreeNode node in tv.Nodes) + var val = new uint[3]; + foreach (var node in tv.Nodes.Cast().Where(node => node.Checked)) { - if (node.Checked) - { - if(node.Index < 32) - val[0] += 1U << node.Index; - else if(node.Index < 64) - val[1] += 1U << (node.Index - 32); - else - val[2] += 1U << (node.Index - 64); - } + if (node.Index < 32) + val[0] += 1U << node.Index; + else if(node.Index < 64) + val[1] += 1U << (node.Index - 32); + else + val[2] += 1U << (node.Index - 64); } return val; } @@ -36,7 +35,7 @@ public static void SetMask(this TreeView tv, uint[] mask) { ProcInfo.Update = false; - for (int i = 0; i < tv.Nodes.Count; ++i) + for (var i = 0; i < tv.Nodes.Count; ++i) { if (i < 32) tv.Nodes[i].Checked = ((mask[0] / (1 << i)) % 2) != 0; diff --git a/SpellWork/Forms/FormAboutBox.Designer.cs b/SpellWork/Forms/FormAboutBox.Designer.cs index b5d99a20..d69b107e 100644 --- a/SpellWork/Forms/FormAboutBox.Designer.cs +++ b/SpellWork/Forms/FormAboutBox.Designer.cs @@ -1,6 +1,6 @@ -namespace SpellWork +namespace SpellWork.Forms { - partial class FormAboutBox + sealed partial class FormAboutBox { /// /// Требуется переменная конструктора. diff --git a/SpellWork/Forms/FormAboutBox.cs b/SpellWork/Forms/FormAboutBox.cs index 8e29a93c..ec4d5363 100644 --- a/SpellWork/Forms/FormAboutBox.cs +++ b/SpellWork/Forms/FormAboutBox.cs @@ -1,40 +1,32 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Drawing; -using System.Linq; using System.Reflection; using System.Windows.Forms; -namespace SpellWork +namespace SpellWork.Forms { - partial class FormAboutBox : Form + sealed partial class FormAboutBox : Form { public FormAboutBox() { InitializeComponent(); - this.Text = String.Format("О {0} {0}", AssemblyTitle); - this.labelProductName.Text = AssemblyProduct; - this.labelVersion.Text = String.Format("Версия {0} {0}", AssemblyVersion); - this.labelCopyright.Text = AssemblyCopyright; - this.labelCompanyName.Text = AssemblyCompany; - this.textBoxDescription.Text = AssemblyDescription; + Text = String.Format("О {0} {0}", AssemblyTitle); + labelProductName.Text = AssemblyProduct; + labelVersion.Text = String.Format("Версия {0} {0}", AssemblyVersion); + labelCopyright.Text = AssemblyCopyright; + labelCompanyName.Text = AssemblyCompany; + textBoxDescription.Text = AssemblyDescription; } - #region Методы доступа к атрибутам сборки - public string AssemblyTitle { get { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); + var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); if (attributes.Length > 0) { - AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; - if (titleAttribute.Title != "") - { + var titleAttribute = (AssemblyTitleAttribute)attributes[0]; + if (!string.IsNullOrEmpty(titleAttribute.Title)) return titleAttribute.Title; - } } return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); } @@ -52,12 +44,8 @@ public string AssemblyDescription { get { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyDescriptionAttribute)attributes[0]).Description; + var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); + return attributes.Length == 0 ? string.Empty : ((AssemblyDescriptionAttribute)attributes[0]).Description; } } @@ -65,12 +53,8 @@ public string AssemblyProduct { get { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyProductAttribute)attributes[0]).Product; + var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + return attributes.Length == 0 ? string.Empty : ((AssemblyProductAttribute)attributes[0]).Product; } } @@ -78,12 +62,8 @@ public string AssemblyCopyright { get { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + return attributes.Length == 0 ? string.Empty : ((AssemblyCopyrightAttribute)attributes[0]).Copyright; } } @@ -91,14 +71,9 @@ public string AssemblyCompany { get { - object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); - if (attributes.Length == 0) - { - return ""; - } - return ((AssemblyCompanyAttribute)attributes[0]).Company; + var attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); + return attributes.Length == 0 ? string.Empty : ((AssemblyCompanyAttribute)attributes[0]).Company; } } - #endregion } } diff --git a/SpellWork/Forms/FormCalculateFlags.Designer.cs b/SpellWork/Forms/FormCalculateFlags.Designer.cs index d7b7b28a..fcdd9680 100644 --- a/SpellWork/Forms/FormCalculateFlags.Designer.cs +++ b/SpellWork/Forms/FormCalculateFlags.Designer.cs @@ -1,6 +1,6 @@ -namespace SpellWork +namespace SpellWork.Forms { - partial class FormCalculateFlags + sealed partial class FormCalculateFlags { /// /// Required designer variable. @@ -44,7 +44,7 @@ private void InitializeComponent() this._bNo.TabIndex = 1; this._bNo.Text = "Cancel"; this._bNo.UseVisualStyleBackColor = true; - this._bNo.Click += new System.EventHandler(this._bNo_Click); + this._bNo.Click += new System.EventHandler(this.BNoClick); // // _bOk // @@ -54,7 +54,7 @@ private void InitializeComponent() this._bOk.TabIndex = 2; this._bOk.Text = "OK"; this._bOk.UseVisualStyleBackColor = true; - this._bOk.Click += new System.EventHandler(this._bOk_Click); + this._bOk.Click += new System.EventHandler(this.BOkClick); // // _clbCalcFlags // @@ -67,7 +67,7 @@ private void InitializeComponent() this._clbCalcFlags.Name = "_clbCalcFlags"; this._clbCalcFlags.Size = new System.Drawing.Size(291, 259); this._clbCalcFlags.TabIndex = 0; - this._clbCalcFlags.SelectedValueChanged += new System.EventHandler(this._clbCalcFlags_SelectedValueChanged); + this._clbCalcFlags.SelectedValueChanged += new System.EventHandler(this.ClbCalcFlagsSelectedValueChanged); // // _lFlagValue // diff --git a/SpellWork/Forms/FormCalculateFlags.cs b/SpellWork/Forms/FormCalculateFlags.cs index 4e1c67d1..8c3d5b7e 100644 --- a/SpellWork/Forms/FormCalculateFlags.cs +++ b/SpellWork/Forms/FormCalculateFlags.cs @@ -1,9 +1,10 @@ using System; using System.Windows.Forms; +using SpellWork.Extensions; -namespace SpellWork +namespace SpellWork.Forms { - public partial class FormCalculateFlags : Form + public sealed partial class FormCalculateFlags : Form { public uint Flags { get; private set; } @@ -11,28 +12,28 @@ public FormCalculateFlags(Type data, uint value, String remove) { InitializeComponent(); - this._clbCalcFlags.SetFlags(data, remove); - this._clbCalcFlags.SetCheckedItemFromFlag(value); + _clbCalcFlags.SetFlags(data, remove); + _clbCalcFlags.SetCheckedItemFromFlag(value); - this.Text = "Calculate " + data.Name; + Text = @"Calculate " + data.Name; } - private void _bOk_Click(object sender, EventArgs e) + private void BOkClick(object sender, EventArgs e) { - this.Flags = this._clbCalcFlags.GetFlagsValue(); - this.DialogResult = DialogResult.OK; - this.Close(); + Flags = _clbCalcFlags.GetFlagsValue(); + DialogResult = DialogResult.OK; + Close(); } - private void _bNo_Click(object sender, EventArgs e) + private void BNoClick(object sender, EventArgs e) { - this.Close(); + Close(); } - private void _clbCalcFlags_SelectedValueChanged(object sender, EventArgs e) + private void ClbCalcFlagsSelectedValueChanged(object sender, EventArgs e) { - this.Flags = this._clbCalcFlags.GetFlagsValue(); - _lFlagValue.Text = "Value: " + this.Flags; + Flags = _clbCalcFlags.GetFlagsValue(); + _lFlagValue.Text = @"Value: " + Flags; } } } diff --git a/SpellWork/Forms/FormMain.Designer.cs b/SpellWork/Forms/FormMain.Designer.cs index 022bb2c2..1bed958c 100644 --- a/SpellWork/Forms/FormMain.Designer.cs +++ b/SpellWork/Forms/FormMain.Designer.cs @@ -1,6 +1,6 @@ -namespace SpellWork +namespace SpellWork.Forms { - partial class FormMain + sealed partial class FormMain { /// /// Требуется переменная конструктора. @@ -20,8 +20,6 @@ protected override void Dispose(bool disposing) base.Dispose(disposing); } - #region Код, автоматически созданный конструктором форм Windows - /// /// Обязательный метод для поддержки конструктора - не изменяйте /// содержимое данного метода при помощи редактора кода. @@ -256,21 +254,21 @@ private void InitializeComponent() this._Connected.Name = "_Connected"; this._Connected.Size = new System.Drawing.Size(132, 22); this._Connected.Text = "Connected"; - this._Connected.Click += new System.EventHandler(this._Connected_Click); + this._Connected.Click += new System.EventHandler(this.ConnectedClick); // // _tsmSettings // this._tsmSettings.Name = "_tsmSettings"; this._tsmSettings.Size = new System.Drawing.Size(132, 22); this._tsmSettings.Text = "Setting"; - this._tsmSettings.Click += new System.EventHandler(this.Settings_Click); + this._tsmSettings.Click += new System.EventHandler(this.SettingsClick); // // _tsmExit // this._tsmExit.Name = "_tsmExit"; this._tsmExit.Size = new System.Drawing.Size(132, 22); this._tsmExit.Text = "Exit"; - this._tsmExit.Click += new System.EventHandler(this.Exit_Click); + this._tsmExit.Click += new System.EventHandler(ExitClick); // // _tsmHelp // @@ -285,7 +283,7 @@ private void InitializeComponent() this._tsmAbout.Name = "_tsmAbout"; this._tsmAbout.Size = new System.Drawing.Size(113, 22); this._tsmAbout.Text = "About.."; - this._tsmAbout.Click += new System.EventHandler(this.About_Click); + this._tsmAbout.Click += new System.EventHandler(AboutClick); // // tabControl1 // @@ -299,7 +297,7 @@ private void InitializeComponent() this.tabControl1.SelectedIndex = 0; this.tabControl1.Size = new System.Drawing.Size(872, 583); this.tabControl1.TabIndex = 2; - this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged); + this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.TabControl1SelectedIndexChanged); // // _tpSpellInfo // @@ -314,8 +312,8 @@ private void InitializeComponent() // // splitContainer1 // - this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; this.splitContainer1.Location = new System.Drawing.Point(3, 3); @@ -360,8 +358,8 @@ private void InitializeComponent() // _lvSpellList // this._lvSpellList.AllowColumnReorder = true; - this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._lvSpellList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.chSpellID, @@ -377,8 +375,8 @@ private void InitializeComponent() this._lvSpellList.UseCompatibleStateImageBehavior = false; this._lvSpellList.View = System.Windows.Forms.View.Details; this._lvSpellList.VirtualMode = true; - this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this._lvSpellList_RetrieveVirtualItem); - this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this._lvSpellList_SelectedIndexChanged); + this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.LvSpellListRetrieveVirtualItem); + this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.LvSpellListSelectedIndexChanged); // // chSpellID // @@ -392,7 +390,7 @@ private void InitializeComponent() // // _gSpellFilter // - this._gSpellFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._gSpellFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gSpellFilter.BackColor = System.Drawing.Color.LightGray; this._gSpellFilter.Controls.Add(this._gbAdvansedSearch); @@ -410,7 +408,7 @@ private void InitializeComponent() // // _gbAdvansedSearch // - this._gbAdvansedSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._gbAdvansedSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter2CompareType); this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter1CompareType); @@ -455,7 +453,7 @@ private void InitializeComponent() this._tbAdvancedFilter2Val.Size = new System.Drawing.Size(85, 20); this._tbAdvancedFilter2Val.TabIndex = 1; this._tbAdvancedFilter2Val.Text = "0"; - this._tbAdvancedFilter2Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbAdvansedFilterVal_KeyDown); + this._tbAdvancedFilter2Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbAdvansedFilterValKeyDown); // // _tbAdvancedFilter1Val // @@ -465,11 +463,11 @@ private void InitializeComponent() this._tbAdvancedFilter1Val.Size = new System.Drawing.Size(85, 20); this._tbAdvancedFilter1Val.TabIndex = 1; this._tbAdvancedFilter1Val.Text = "0"; - this._tbAdvancedFilter1Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbAdvansedFilterVal_KeyDown); + this._tbAdvancedFilter1Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbAdvansedFilterValKeyDown); // // _cbAdvancedFilter2 // - this._cbAdvancedFilter2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbAdvancedFilter2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbAdvancedFilter2.DropDownHeight = 500; this._cbAdvancedFilter2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -482,7 +480,7 @@ private void InitializeComponent() // // _cbAdvancedFilter1 // - this._cbAdvancedFilter1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbAdvancedFilter1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbAdvancedFilter1.DropDownHeight = 500; this._cbAdvancedFilter1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -495,7 +493,7 @@ private void InitializeComponent() // // _cbTarget2 // - this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget2.DropDownHeight = 500; this._cbTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -506,11 +504,11 @@ private void InitializeComponent() this._cbTarget2.Name = "_cbTarget2"; this._cbTarget2.Size = new System.Drawing.Size(302, 21); this._cbTarget2.TabIndex = 5; - this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); + this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // // _cbTarget1 // - this._cbTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget1.DropDownHeight = 500; this._cbTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -521,11 +519,11 @@ private void InitializeComponent() this._cbTarget1.Name = "_cbTarget1"; this._cbTarget1.Size = new System.Drawing.Size(302, 21); this._cbTarget1.TabIndex = 5; - this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); + this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // // _cbSpellEffect // - this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellEffect.DropDownHeight = 500; this._cbSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -536,11 +534,11 @@ private void InitializeComponent() this._cbSpellEffect.Name = "_cbSpellEffect"; this._cbSpellEffect.Size = new System.Drawing.Size(302, 21); this._cbSpellEffect.TabIndex = 4; - this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); + this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // // _cbSpellAura // - this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellAura.DropDownHeight = 500; this._cbSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -551,11 +549,11 @@ private void InitializeComponent() this._cbSpellAura.Name = "_cbSpellAura"; this._cbSpellAura.Size = new System.Drawing.Size(302, 21); this._cbSpellAura.TabIndex = 3; - this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); + this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // // _cbSpellFamilyName // - this._cbSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellFamilyName.DropDownHeight = 500; this._cbSpellFamilyName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -567,11 +565,11 @@ private void InitializeComponent() this._cbSpellFamilyName.Name = "_cbSpellFamilyName"; this._cbSpellFamilyName.Size = new System.Drawing.Size(302, 21); this._cbSpellFamilyName.TabIndex = 2; - this._cbSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this._cbSpellFamilyNames_SelectedIndexChanged); + this._cbSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // // groupBox7 // - this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox7.BackColor = System.Drawing.Color.LightGray; this.groupBox7.Controls.Add(this.label6); @@ -624,37 +622,37 @@ private void InitializeComponent() this._bSearch.TabIndex = 1; this._bSearch.Text = "Search"; this._bSearch.UseVisualStyleBackColor = true; - this._bSearch.Click += new System.EventHandler(this._bSearch_Click); + this._bSearch.Click += new System.EventHandler(this.BSearchClick); // // _tbSearchAttributes // - this._tbSearchAttributes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._tbSearchAttributes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchAttributes.Location = new System.Drawing.Point(73, 57); this._tbSearchAttributes.Name = "_tbSearchAttributes"; this._tbSearchAttributes.Size = new System.Drawing.Size(180, 20); this._tbSearchAttributes.TabIndex = 0; - this._tbSearchAttributes.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbSearchId_KeyDown); + this._tbSearchAttributes.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); // // _tbSearchIcon // - this._tbSearchIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._tbSearchIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchIcon.Location = new System.Drawing.Point(73, 35); this._tbSearchIcon.Name = "_tbSearchIcon"; this._tbSearchIcon.Size = new System.Drawing.Size(180, 20); this._tbSearchIcon.TabIndex = 0; - this._tbSearchIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbSearchId_KeyDown); + this._tbSearchIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); // // _tbSearchId // - this._tbSearchId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._tbSearchId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchId.Location = new System.Drawing.Point(73, 13); this._tbSearchId.Name = "_tbSearchId"; this._tbSearchId.Size = new System.Drawing.Size(180, 20); this._tbSearchId.TabIndex = 0; - this._tbSearchId.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbSearchId_KeyDown); + this._tbSearchId.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); // // _tpSpellProcInfo // @@ -710,7 +708,7 @@ private void InitializeComponent() // // groupBox5 // - this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox5.BackColor = System.Drawing.Color.WhiteSmoke; this.groupBox5.Controls.Add(this._clbProcFlags); @@ -732,11 +730,11 @@ private void InitializeComponent() this._clbProcFlags.Name = "_clbProcFlags"; this._clbProcFlags.Size = new System.Drawing.Size(852, 96); this._clbProcFlags.TabIndex = 0; - this._clbProcFlags.SelectedIndexChanged += new System.EventHandler(this._clbSchools_SelectedIndexChanged); + this._clbProcFlags.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); // // groupBox4 // - this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox4.BackColor = System.Drawing.Color.WhiteSmoke; this.groupBox4.Controls.Add(this._clbProcFlagEx); @@ -758,11 +756,11 @@ private void InitializeComponent() this._clbProcFlagEx.Name = "_clbProcFlagEx"; this._clbProcFlagEx.Size = new System.Drawing.Size(852, 56); this._clbProcFlagEx.TabIndex = 3; - this._clbProcFlagEx.SelectedIndexChanged += new System.EventHandler(this._clbSchools_SelectedIndexChanged); + this._clbProcFlagEx.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); // // _gSpellProcEvent // - this._gSpellProcEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._gSpellProcEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gSpellProcEvent.BackColor = System.Drawing.Color.WhiteSmoke; this._gSpellProcEvent.Controls.Add(this._clbSchools); @@ -792,7 +790,7 @@ private void InitializeComponent() this._clbSchools.Name = "_clbSchools"; this._clbSchools.Size = new System.Drawing.Size(463, 44); this._clbSchools.TabIndex = 5; - this._clbSchools.SelectedIndexChanged += new System.EventHandler(this._clbSchools_SelectedIndexChanged); + this._clbSchools.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); // // _cbProcFitstSpellFamily // @@ -804,7 +802,7 @@ private void InitializeComponent() this._cbProcFitstSpellFamily.Name = "_cbProcFitstSpellFamily"; this._cbProcFitstSpellFamily.Size = new System.Drawing.Size(342, 21); this._cbProcFitstSpellFamily.TabIndex = 4; - this._cbProcFitstSpellFamily.SelectedIndexChanged += new System.EventHandler(this._clbSchools_SelectedIndexChanged); + this._cbProcFitstSpellFamily.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); // // label1 // @@ -822,8 +820,8 @@ private void InitializeComponent() this._tbPPM.Name = "_tbPPM"; this._tbPPM.Size = new System.Drawing.Size(60, 20); this._tbPPM.TabIndex = 7; - this._tbPPM.TextChanged += new System.EventHandler(this._tbCooldown_TextChanged); - this._tbPPM.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBox_KeyPress); + this._tbPPM.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); + this._tbPPM.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); // // label2 // @@ -841,8 +839,8 @@ private void InitializeComponent() this._tbChance.Name = "_tbChance"; this._tbChance.Size = new System.Drawing.Size(60, 20); this._tbChance.TabIndex = 7; - this._tbChance.TextChanged += new System.EventHandler(this._tbCooldown_TextChanged); - this._tbChance.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBox_KeyPress); + this._tbChance.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); + this._tbChance.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); // // label3 // @@ -860,8 +858,8 @@ private void InitializeComponent() this._tbCooldown.Name = "_tbCooldown"; this._tbCooldown.Size = new System.Drawing.Size(60, 20); this._tbCooldown.TabIndex = 7; - this._tbCooldown.TextChanged += new System.EventHandler(this._tbCooldown_TextChanged); - this._tbCooldown.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBox_KeyPress); + this._tbCooldown.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); + this._tbCooldown.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); // // splitContainer4 // @@ -886,7 +884,7 @@ private void InitializeComponent() // // _cbProcSpellFamilyTree // - this._cbProcSpellFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbProcSpellFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellFamilyTree.DropDownHeight = 500; this._cbProcSpellFamilyTree.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -896,12 +894,12 @@ private void InitializeComponent() this._cbProcSpellFamilyTree.Name = "_cbProcSpellFamilyTree"; this._cbProcSpellFamilyTree.Size = new System.Drawing.Size(258, 21); this._cbProcSpellFamilyTree.TabIndex = 1; - this._cbProcSpellFamilyTree.SelectedIndexChanged += new System.EventHandler(this._tvFamilyTree_SelectedIndexChanged); + this._cbProcSpellFamilyTree.SelectedIndexChanged += new System.EventHandler(this.TvFamilyTreeSelectedIndexChanged); // // _tvFamilyTree // - this._tvFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._tvFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tvFamilyTree.CheckBoxes = true; this._tvFamilyTree.ImageIndex = 0; @@ -912,8 +910,8 @@ private void InitializeComponent() this._tvFamilyTree.ShowNodeToolTips = true; this._tvFamilyTree.Size = new System.Drawing.Size(258, 219); this._tvFamilyTree.TabIndex = 0; - this._tvFamilyTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FamilyTree_AfterCheck); - this._tvFamilyTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this._tvFamilyTree_AfterSelect); + this._tvFamilyTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FamilyTreeAfterCheck); + this._tvFamilyTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TvFamilyTreeAfterSelect); // // _ilPro // @@ -966,8 +964,8 @@ private void InitializeComponent() // _lvProcSpellList // this._lvProcSpellList.AllowColumnReorder = true; - this._lvProcSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._lvProcSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._lvProcSpellList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this._chProcID, @@ -984,8 +982,8 @@ private void InitializeComponent() this._lvProcSpellList.UseCompatibleStateImageBehavior = false; this._lvProcSpellList.View = System.Windows.Forms.View.Details; this._lvProcSpellList.VirtualMode = true; - this._lvProcSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this._lvProcSpellList_RetrieveVirtualItem); - this._lvProcSpellList.SelectedIndexChanged += new System.EventHandler(this._lvProcSpellList_SelectedIndexChanged); + this._lvProcSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.LvProcSpellListRetrieveVirtualItem); + this._lvProcSpellList.SelectedIndexChanged += new System.EventHandler(this.LvProcSpellListSelectedIndexChanged); // // _chProcID // @@ -1006,17 +1004,17 @@ private void InitializeComponent() this._bProcSearch.TabIndex = 5; this._bProcSearch.Text = "Search"; this._bProcSearch.UseVisualStyleBackColor = true; - this._bProcSearch.Click += new System.EventHandler(this._bProcSearch_Click); + this._bProcSearch.Click += new System.EventHandler(this.BProcSearchClick); // // _tbProcSeach // - this._tbProcSeach.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._tbProcSeach.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbProcSeach.Location = new System.Drawing.Point(3, 3); this._tbProcSeach.Name = "_tbProcSeach"; this._tbProcSeach.Size = new System.Drawing.Size(207, 20); this._tbProcSeach.TabIndex = 4; - this._tbProcSeach.KeyDown += new System.Windows.Forms.KeyEventHandler(this._tbSearch_KeyDown); + this._tbProcSeach.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchKeyDown); // // _cbProcTarget2 // @@ -1029,11 +1027,11 @@ private void InitializeComponent() this._cbProcTarget2.Name = "_cbProcTarget2"; this._cbProcTarget2.Size = new System.Drawing.Size(119, 21); this._cbProcTarget2.TabIndex = 3; - this._cbProcTarget2.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); + this._cbProcTarget2.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // // _cbProcTarget1 // - this._cbProcTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbProcTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcTarget1.DropDownHeight = 500; this._cbProcTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1043,11 +1041,11 @@ private void InitializeComponent() this._cbProcTarget1.Name = "_cbProcTarget1"; this._cbProcTarget1.Size = new System.Drawing.Size(122, 21); this._cbProcTarget1.TabIndex = 3; - this._cbProcTarget1.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); + this._cbProcTarget1.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // // _cbProcSpellEffect // - this._cbProcSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbProcSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellEffect.DropDownHeight = 500; this._cbProcSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1057,11 +1055,11 @@ private void InitializeComponent() this._cbProcSpellEffect.Name = "_cbProcSpellEffect"; this._cbProcSpellEffect.Size = new System.Drawing.Size(260, 21); this._cbProcSpellEffect.TabIndex = 3; - this._cbProcSpellEffect.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); + this._cbProcSpellEffect.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // // _cbProcSpellAura // - this._cbProcSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbProcSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellAura.DropDownHeight = 500; this._cbProcSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1071,11 +1069,11 @@ private void InitializeComponent() this._cbProcSpellAura.Name = "_cbProcSpellAura"; this._cbProcSpellAura.Size = new System.Drawing.Size(260, 21); this._cbProcSpellAura.TabIndex = 2; - this._cbProcSpellAura.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); + this._cbProcSpellAura.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // // _cbProcSpellFamilyName // - this._cbProcSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbProcSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellFamilyName.DropDownHeight = 500; this._cbProcSpellFamilyName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1085,7 +1083,7 @@ private void InitializeComponent() this._cbProcSpellFamilyName.Name = "_cbProcSpellFamilyName"; this._cbProcSpellFamilyName.Size = new System.Drawing.Size(260, 21); this._cbProcSpellFamilyName.TabIndex = 1; - this._cbProcSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this._cbProcSpellFamilyName_SelectedIndexChanged); + this._cbProcSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // // _lvProcAdditionalInfo // @@ -1102,7 +1100,7 @@ private void InitializeComponent() this._lvProcAdditionalInfo.TabIndex = 0; this._lvProcAdditionalInfo.UseCompatibleStateImageBehavior = false; this._lvProcAdditionalInfo.View = System.Windows.Forms.View.Details; - this._lvProcAdditionalInfo.SelectedIndexChanged += new System.EventHandler(this._lvProcAdditionalInfo_SelectedIndexChanged); + this._lvProcAdditionalInfo.SelectedIndexChanged += new System.EventHandler(this.LvProcAdditionalInfoSelectedIndexChanged); // // _chID // @@ -1159,7 +1157,7 @@ private void InitializeComponent() this._bCompareSearch1.TabIndex = 3; this._bCompareSearch1.Text = "Search"; this._bCompareSearch1.UseVisualStyleBackColor = true; - this._bCompareSearch1.Click += new System.EventHandler(this.CompareSearch1_Click); + this._bCompareSearch1.Click += new System.EventHandler(this.CompareSearch1Click); // // label13 // @@ -1176,12 +1174,12 @@ private void InitializeComponent() this._tbCompareFilterSpell1.Name = "_tbCompareFilterSpell1"; this._tbCompareFilterSpell1.Size = new System.Drawing.Size(146, 20); this._tbCompareFilterSpell1.TabIndex = 1; - this._tbCompareFilterSpell1.TextChanged += new System.EventHandler(this.CompareFilterSpell_TextChanged); + this._tbCompareFilterSpell1.TextChanged += new System.EventHandler(this.CompareFilterSpellTextChanged); // // _rtbCompareSpell1 // - this._rtbCompareSpell1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._rtbCompareSpell1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._rtbCompareSpell1.BackColor = System.Drawing.Color.Gainsboro; this._rtbCompareSpell1.Font = new System.Drawing.Font("Arial Unicode MS", 9F); @@ -1199,7 +1197,7 @@ private void InitializeComponent() this._bCompareSearch2.TabIndex = 3; this._bCompareSearch2.Text = "Search"; this._bCompareSearch2.UseVisualStyleBackColor = true; - this._bCompareSearch2.Click += new System.EventHandler(this.CompareSearch2_Click); + this._bCompareSearch2.Click += new System.EventHandler(this.CompareSearch2Click); // // label14 // @@ -1212,8 +1210,8 @@ private void InitializeComponent() // // _rtbCompareSpell2 // - this._rtbCompareSpell2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._rtbCompareSpell2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._rtbCompareSpell2.BackColor = System.Drawing.Color.Gainsboro; this._rtbCompareSpell2.Font = new System.Drawing.Font("Arial Unicode MS", 9F); @@ -1229,7 +1227,7 @@ private void InitializeComponent() this._tbCompareFilterSpell2.Name = "_tbCompareFilterSpell2"; this._tbCompareFilterSpell2.Size = new System.Drawing.Size(146, 20); this._tbCompareFilterSpell2.TabIndex = 1; - this._tbCompareFilterSpell2.TextChanged += new System.EventHandler(this.CompareFilterSpell_TextChanged); + this._tbCompareFilterSpell2.TextChanged += new System.EventHandler(this.CompareFilterSpellTextChanged); // // _tpSqlData // @@ -1244,7 +1242,7 @@ private void InitializeComponent() // // groupBox3 // - this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox3.BackColor = System.Drawing.Color.WhiteSmoke; this.groupBox3.Controls.Add(this._cbBinaryCompare); @@ -1350,7 +1348,7 @@ private void InitializeComponent() this._bSqlProcEx.TabIndex = 4; this._bSqlProcEx.Text = "..."; this._bSqlProcEx.UseVisualStyleBackColor = true; - this._bSqlProcEx.Click += new System.EventHandler(this.CalcProcFlags_Click); + this._bSqlProcEx.Click += new System.EventHandler(this.CalcProcFlagsClick); // // _bSqlProc // @@ -1360,7 +1358,7 @@ private void InitializeComponent() this._bSqlProc.TabIndex = 4; this._bSqlProc.Text = "..."; this._bSqlProc.UseVisualStyleBackColor = true; - this._bSqlProc.Click += new System.EventHandler(this.CalcProcFlags_Click); + this._bSqlProc.Click += new System.EventHandler(this.CalcProcFlagsClick); // // _bSqlSchool // @@ -1370,7 +1368,7 @@ private void InitializeComponent() this._bSqlSchool.TabIndex = 4; this._bSqlSchool.Text = "..."; this._bSqlSchool.UseVisualStyleBackColor = true; - this._bSqlSchool.Click += new System.EventHandler(this.CalcProcFlags_Click); + this._bSqlSchool.Click += new System.EventHandler(this.CalcProcFlagsClick); // // _tbSqlProcEx // @@ -1420,12 +1418,12 @@ private void InitializeComponent() this._bSelect.TabIndex = 0; this._bSelect.Text = "Select"; this._bSelect.UseVisualStyleBackColor = true; - this._bSelect.Click += new System.EventHandler(this.Select_Click); + this._bSelect.Click += new System.EventHandler(this.SelectClick); // // groupBox2 // - this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox2.Controls.Add(this.splitContainer6); this.groupBox2.Location = new System.Drawing.Point(0, 94); @@ -1483,9 +1481,9 @@ private void InitializeComponent() this._lvDataList.UseCompatibleStateImageBehavior = false; this._lvDataList.View = System.Windows.Forms.View.Details; this._lvDataList.VirtualMode = true; - this._lvDataList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this._lvSqlData_RetrieveVirtualItem); - this._lvDataList.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Sql_DataList_KeyDown); - this._lvDataList.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.Sql_DataList_MouseDoubleClick); + this._lvDataList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(LvSqlDataRetrieveVirtualItem); + this._lvDataList.KeyDown += new System.Windows.Forms.KeyEventHandler(this.SqlDataListKeyDown); + this._lvDataList.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.SqlDataListMouseDoubleClick); // // entry // @@ -1548,8 +1546,8 @@ private void InitializeComponent() // // _rtbSqlLog // - this._rtbSqlLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._rtbSqlLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._rtbSqlLog.Location = new System.Drawing.Point(0, 32); this._rtbSqlLog.Name = "_rtbSqlLog"; @@ -1565,7 +1563,7 @@ private void InitializeComponent() this._bSqlToBase.TabIndex = 2; this._bSqlToBase.Text = "To DB"; this._bSqlToBase.UseVisualStyleBackColor = true; - this._bSqlToBase.Click += new System.EventHandler(this.SqlToBase_Click); + this._bSqlToBase.Click += new System.EventHandler(this.SqlToBaseClick); // // _bSqlSave // @@ -1575,7 +1573,7 @@ private void InitializeComponent() this._bSqlSave.TabIndex = 1; this._bSqlSave.Text = "Save"; this._bSqlSave.UseVisualStyleBackColor = true; - this._bSqlSave.Click += new System.EventHandler(this.SqlSave_Click); + this._bSqlSave.Click += new System.EventHandler(this.SqlSaveClick); // // _cbProcFlag // @@ -1589,7 +1587,7 @@ private void InitializeComponent() this._cbProcFlag.Text = "ProcFlag"; this._cbProcFlag.UseVisualStyleBackColor = true; this._cbProcFlag.Visible = false; - this._cbProcFlag.CheckedChanged += new System.EventHandler(this._cbProcFlag_CheckedChanged); + this._cbProcFlag.CheckedChanged += new System.EventHandler(this.CbProcFlagCheckedChanged); // // _bWrite // @@ -1602,7 +1600,7 @@ private void InitializeComponent() this._bWrite.Text = "Write"; this._bWrite.UseVisualStyleBackColor = true; this._bWrite.Visible = false; - this._bWrite.Click += new System.EventHandler(this.Write_Click); + this._bWrite.Click += new System.EventHandler(this.WriteClick); // // splitContainer7 // @@ -1676,7 +1674,7 @@ private void InitializeComponent() this.Name = "FormMain"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "FormMain"; - this.Resize += new System.EventHandler(this.FormMain_Resize); + this.Resize += new System.EventHandler(this.FormMainResize); this.statusStrip1.ResumeLayout(false); this.statusStrip1.PerformLayout(); this.menuStrip1.ResumeLayout(false); @@ -1734,8 +1732,6 @@ private void InitializeComponent() } - #endregion - private System.Windows.Forms.StatusStrip statusStrip1; private System.Windows.Forms.MenuStrip menuStrip1; private System.Windows.Forms.TabControl tabControl1; diff --git a/SpellWork/Forms/FormMain.cs b/SpellWork/Forms/FormMain.cs index 9f7d2933..84cd3f90 100644 --- a/SpellWork/Forms/FormMain.cs +++ b/SpellWork/Forms/FormMain.cs @@ -1,23 +1,26 @@ using System; -using System.Linq; -using System.Windows.Forms; +using System.Collections.Generic; using System.Drawing; using System.IO; -using System.Text; -using System.Collections.Generic; +using System.Linq; using System.Reflection; -using System.Threading; +using System.Text; +using System.Windows.Forms; +using SpellWork.Database; +using SpellWork.DBC; +using SpellWork.Extensions; +using SpellWork.Spell; -namespace SpellWork +namespace SpellWork.Forms { - public partial class FormMain : Form + public sealed partial class FormMain : Form { public FormMain() { InitializeComponent(); splitContainer3.SplitterDistance = 128; - Text = DBC.VERSION; + Text = DBC.DBC.Version; _cbSpellFamilyName.SetEnumValues("SpellFamilyName"); _cbSpellAura.SetEnumValues("Aura"); @@ -40,7 +43,7 @@ public FormMain() _cbSqlSpellFamily.SetEnumValues("SpellFamilyName"); - _status.Text = String.Format("DBC Locale: {0}", DBC.Locale); + _status.Text = String.Format("DBC Locale: {0}", DBC.DBC.Locale); _cbAdvancedFilter1.SetStructFields(); _cbAdvancedFilter2.SetStructFields(); @@ -53,70 +56,75 @@ public FormMain() #region FORM - private void Exit_Click(object sender, EventArgs e) + private static void ExitClick(object sender, EventArgs e) { Application.Exit(); } - private void About_Click(object sender, EventArgs e) + private static void AboutClick(object sender, EventArgs e) { - FormAboutBox ab = new FormAboutBox(); + var ab = new FormAboutBox(); ab.ShowDialog(); } - private void tabControl1_SelectedIndexChanged(object sender, EventArgs e) + private void TabControl1SelectedIndexChanged(object sender, EventArgs e) { _cbProcFlag.Visible = _bWrite.Visible = ((TabControl)sender).SelectedIndex == 1; } - private void Settings_Click(object sender, EventArgs e) + private void SettingsClick(object sender, EventArgs e) { - FormSettings frm = new FormSettings(); + var frm = new FormSettings(); frm.ShowDialog(this); ConnStatus(); } - private void FormMain_Resize(object sender, EventArgs e) + private void FormMainResize(object sender, EventArgs e) { try { _scCompareRoot.SplitterDistance = (((Form)sender).Size.Width / 2) - 25; _chName.Width = (((Form)sender).Size.Width - 140); } - catch { } + // ReSharper disable EmptyGeneralCatchClause + catch (Exception) + // ReSharper restore EmptyGeneralCatchClause + { + } } private void ConnStatus() { - MySQLConnect.TestConnect(); + MySqlConnection.TestConnect(); - if (MySQLConnect.Connected) + if (MySqlConnection.Connected) { - _dbConnect.Text = "Connection is successful."; + _dbConnect.Text = @"Connection successful."; _dbConnect.ForeColor = Color.Green; // read db data - DBC.ItemTemplate = MySQLConnect.SelectItems(); + DBC.DBC.ItemTemplate = MySqlConnection.SelectItems(); } else { - _dbConnect.Text = "No DB Connected"; + _dbConnect.Text = @"No DB Connected"; _dbConnect.ForeColor = Color.Red; } } - private void _Connected_Click(object sender, EventArgs e) + private void ConnectedClick(object sender, EventArgs e) { - MySQLConnect.TestConnect(); + MySqlConnection.TestConnect(); - if (MySQLConnect.Connected) - MessageBox.Show("Connection is successful!", "MySQL Connections!", MessageBoxButtons.OK, MessageBoxIcon.Information); + if (MySqlConnection.Connected) + MessageBox.Show(@"Connection is successful!", @"MySQL Connections!", MessageBoxButtons.OK, + MessageBoxIcon.Information); else - MessageBox.Show("Connection failed!", "ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(@"Connection failed!", @"ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); ConnStatus(); } - private void TextBox_KeyPress(object sender, KeyPressEventArgs e) + private static void TextBoxKeyPress(object sender, KeyPressEventArgs e) { if (!((Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back))) e.Handled = true; @@ -126,59 +134,50 @@ private void TextBox_KeyPress(object sender, KeyPressEventArgs e) #region SPELL INFO PAGE - private void _lvSpellList_SelectedIndexChanged(object sender, EventArgs e) + private void LvSpellListSelectedIndexChanged(object sender, EventArgs e) { if (_lvSpellList.SelectedIndices.Count > 0) new SpellInfo(_rtSpellInfo, _spellList[_lvSpellList.SelectedIndices[0]]); } - private void _tbSearchId_KeyDown(object sender, KeyEventArgs e) + private void TbSearchIdKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) AdvancedSearch(); } - private void _bSearch_Click(object sender, EventArgs e) + private void BSearchClick(object sender, EventArgs e) { AdvancedSearch(); } - private void _cbSpellFamilyNames_SelectedIndexChanged(object sender, EventArgs e) + private void CbSpellFamilyNamesSelectedIndexChanged(object sender, EventArgs e) { if (((ComboBox)sender).SelectedIndex != 0) - AdvansedFilter(); + AdvancedFilter(); } - private void _tbAdvansedFilterVal_KeyDown(object sender, KeyEventArgs e) + private void TbAdvansedFilterValKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) - AdvansedFilter(); + AdvancedFilter(); } private void AdvancedSearch() { - string name = _tbSearchId.Text; - uint id = name.ToUInt32(); - uint ic = _tbSearchIcon.Text.ToUInt32(); - uint at = _tbSearchAttributes.Text.ToUInt32(); - - _spellList = (from spell in DBC.Spell.Values - - where ((id == 0 || spell.ID == id) - - && (ic == 0 || spell.SpellIconID == ic) - - && (at == 0 || (spell.Attributes & at) != 0 - || (spell.AttributesEx & at) != 0 - || (spell.AttributesEx2 & at) != 0 - || (spell.AttributesEx3 & at) != 0 - || (spell.AttributesEx4 & at) != 0 - || (spell.AttributesEx5 & at) != 0 - || (spell.AttributesEx6 & at) != 0 - || (spell.AttributesEx7 & at) != 0)) - - && ((id != 0 || ic != 0 && at != 0) || spell.SpellName.ContainsText(name)) - + var name = _tbSearchId.Text; + var id = name.ToUInt32(); + var ic = _tbSearchIcon.Text.ToUInt32(); + var at = _tbSearchAttributes.Text.ToUInt32(); + + _spellList = (from spell in DBC.DBC.Spell.Values + where + ((id == 0 || spell.ID == id) && (ic == 0 || spell.SpellIconID == ic) && + (at == 0 || (spell.Attributes & at) != 0 || (spell.AttributesEx & at) != 0 || + (spell.AttributesEx2 & at) != 0 || (spell.AttributesEx3 & at) != 0 || + (spell.AttributesEx4 & at) != 0 || (spell.AttributesEx5 & at) != 0 || + (spell.AttributesEx6 & at) != 0 || (spell.AttributesEx7 & at) != 0)) && + ((id != 0 || ic != 0 && at != 0) || spell.SpellName.ContainsText(name)) select spell).ToList(); _lvSpellList.VirtualListSize = _spellList.Count(); @@ -186,7 +185,7 @@ private void AdvancedSearch() _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; } - private void AdvansedFilter() + private void AdvancedFilter() { var bFamilyNames = _cbSpellFamilyName.SelectedIndex != 0; var fFamilyNames = _cbSpellFamilyName.SelectedValue.ToInt32(); @@ -210,107 +209,97 @@ private void AdvansedFilter() var field1 = (MemberInfo)_cbAdvancedFilter1.SelectedValue; var field2 = (MemberInfo)_cbAdvancedFilter2.SelectedValue; - bool use1val = advVal1 != string.Empty; - bool use2val = advVal2 != string.Empty; - - CompareType field1ct = (CompareType)_cbAdvancedFilter1CompareType.SelectedIndex; - CompareType field2ct = (CompareType)_cbAdvancedFilter2CompareType.SelectedIndex; - - _spellList = (from spell in DBC.Spell.Values - - where ( !bFamilyNames || spell.SpellFamilyName == fFamilyNames) - && (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) - && (!bSpellAura || spell.EffectApplyAuraName.ContainsElement((uint)fSpellAura)) - && (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) - && (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) - && (!use1val || spell.CreateFilter(field1, advVal1, field1ct)) - && (!use2val || spell.CreateFilter(field2, advVal2, field2ct)) - + var use1Val = advVal1 != string.Empty; + var use2Val = advVal2 != string.Empty; + + var field1Ct = (CompareType)_cbAdvancedFilter1CompareType.SelectedIndex; + var field2Ct = (CompareType)_cbAdvancedFilter2CompareType.SelectedIndex; + + _spellList = (from spell in DBC.DBC.Spell.Values + where + (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) && + (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) && + (!bSpellAura || spell.EffectApplyAuraName.ContainsElement((uint)fSpellAura)) && + (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) && + (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) && + (!use1Val || spell.CreateFilter(field1, advVal1, field1Ct)) && + (!use2Val || spell.CreateFilter(field2, advVal2, field2Ct)) select spell).ToList(); _lvSpellList.VirtualListSize = _spellList.Count(); if (_lvSpellList.SelectedIndices.Count > 0) _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; - } #endregion #region SPELL PROC INFO PAGE - private void _cbProcSpellFamilyName_SelectedIndexChanged(object sender, EventArgs e) + private void CbProcSpellFamilyNameSelectedIndexChanged(object sender, EventArgs e) { if (((ComboBox)sender).SelectedIndex > 0) ProcFilter(); } - private void _bSpellInfo_Click(object sender, EventArgs e) - { - splitContainer2.Panel2Collapsed = !splitContainer2.Panel2Collapsed; - } - - private void _cbProcFlag_CheckedChanged(object sender, EventArgs e) + private void CbProcFlagCheckedChanged(object sender, EventArgs e) { splitContainer3.SplitterDistance = ((CheckBox)sender).Checked ? 240 : 128; } - private void _tvFamilyTree_AfterSelect(object sender, TreeViewEventArgs e) + private void TvFamilyTreeAfterSelect(object sender, TreeViewEventArgs e) { if (e.Node.Level > 0) - SetProcAtribute(DBC.Spell[e.Node.Name.ToUInt32()]); + SetProcAtribute(DBC.DBC.Spell[e.Node.Name.ToUInt32()]); } - private void _lvProcSpellList_SelectedIndexChanged(object sender, EventArgs e) + private void LvProcSpellListSelectedIndexChanged(object sender, EventArgs e) { var lv = (ListView)sender; - if (lv.SelectedIndices.Count > 0) - { - SetProcAtribute(_spellProcList[lv.SelectedIndices[0]]); - _lvProcAdditionalInfo.Items.Clear(); - } + if (lv.SelectedIndices.Count <= 0) + return; + SetProcAtribute(_spellProcList[lv.SelectedIndices[0]]); + _lvProcAdditionalInfo.Items.Clear(); } - private void _lvProcAdditionalInfo_SelectedIndexChanged(object sender, EventArgs e) + private void LvProcAdditionalInfoSelectedIndexChanged(object sender, EventArgs e) { if (_lvProcAdditionalInfo.SelectedIndices.Count > 0) - SetProcAtribute(DBC.Spell[_lvProcAdditionalInfo.SelectedItems[0].SubItems[0].Text.ToUInt32()]); + SetProcAtribute(DBC.DBC.Spell[_lvProcAdditionalInfo.SelectedItems[0].SubItems[0].Text.ToUInt32()]); } - private void _clbSchools_SelectedIndexChanged(object sender, EventArgs e) + private void ClbSchoolsSelectedIndexChanged(object sender, EventArgs e) { - if (ProcInfo.SpellProc.ID != 0) - { - _bWrite.Enabled = true; - GetProcAttribute(ProcInfo.SpellProc); - } + if (ProcInfo.SpellProc.ID == 0) + return; + _bWrite.Enabled = true; + GetProcAttribute(ProcInfo.SpellProc); } - private void _tbCooldown_TextChanged(object sender, EventArgs e) + private void TbCooldownTextChanged(object sender, EventArgs e) { - if (ProcInfo.SpellProc.ID != 0) - { - _bWrite.Enabled = true; - GetProcAttribute(ProcInfo.SpellProc); - } + if (ProcInfo.SpellProc.ID == 0) + return; + _bWrite.Enabled = true; + GetProcAttribute(ProcInfo.SpellProc); } - private void _bProcSearch_Click(object sender, EventArgs e) + private void BProcSearchClick(object sender, EventArgs e) { Search(); } - private void _tbSearch_KeyDown(object sender, KeyEventArgs e) + private void TbSearchKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) Search(); } - private void _tvFamilyTree_SelectedIndexChanged(object sender, EventArgs e) + private void TvFamilyTreeSelectedIndexChanged(object sender, EventArgs e) { - if ((int)((ComboBox)sender).SelectedIndex == 0) + if (((ComboBox)sender).SelectedIndex == 0) return; _tvFamilyTree.Nodes.Clear(); - SpellFamilyNames spellfamily = (SpellFamilyNames)(((ComboBox)sender).SelectedValue.ToInt32()); + var spellfamily = (SpellFamilyNames)(((ComboBox)sender).SelectedValue.ToInt32()); new ProcInfo(_tvFamilyTree, spellfamily); } @@ -323,37 +312,33 @@ private void SetProcAtribute(SpellEntry spell) _clbProcFlags.SetCheckedItemFromFlag(spell.ProcFlags); _clbSchools.SetCheckedItemFromFlag(spell.SchoolMask); _cbProcFitstSpellFamily.SelectedValue = spell.SpellFamilyName; - _tbPPM.Text = "0"; // need correct value + _tbPPM.Text = @"0"; // need correct value _tbChance.Text = spell.ProcChance.ToString(); _tbCooldown.Text = (spell.RecoveryTime / 1000f).ToString(); } private void GetProcAttribute(SpellEntry spell) { - uint[] SpellFamilyFlags = _tvFamilyTree.GetMask(); - var statusproc = String.Format("Spell ({0}) {1}. Proc Event ==> SchoolMask 0x{2:X2}, SpellFamily {3}, 0x{4:X8} {5:X8} {6:X8}, procFlag 0x{7:X8}, procEx 0x{8:X8}, PPMRate {9}", - spell.ID, - spell.SpellNameRank, - _clbSchools.GetFlagsValue(), - _cbProcFitstSpellFamily.ValueMember, - SpellFamilyFlags[0], - SpellFamilyFlags[1], - SpellFamilyFlags[2], - _clbProcFlags.GetFlagsValue(), - _clbProcFlagEx.GetFlagsValue(), - _tbPPM.Text.ToFloat()); + var spellFamilyFlags = _tvFamilyTree.GetMask(); + var statusproc = + String.Format( + "Spell ({0}) {1}. Proc Event ==> SchoolMask 0x{2:X2}, SpellFamily {3}, 0x{4:X8} {5:X8} {6:X8}, procFlag 0x{7:X8}, procEx 0x{8:X8}, PPMRate {9}", + spell.ID, spell.SpellNameRank, _clbSchools.GetFlagsValue(), _cbProcFitstSpellFamily.ValueMember, + spellFamilyFlags[0], spellFamilyFlags[1], spellFamilyFlags[2], _clbProcFlags.GetFlagsValue(), + _clbProcFlagEx.GetFlagsValue(), _tbPPM.Text.ToFloat()); - _gSpellProcEvent.Text = "Spell Proc Event " + statusproc; + _gSpellProcEvent.Text = @"Spell Proc Event " + statusproc; } private void Search() { - uint id = _tbProcSeach.Text.ToUInt32(); + var id = _tbProcSeach.Text.ToUInt32(); - _spellProcList = (from spell in DBC.Spell.Values - where (id == 0 || spell.ID == id) - && (id != 0 || spell.SpellName.ContainsText(_tbProcSeach.Text)) - select spell).ToList(); + _spellProcList = (from spell in DBC.DBC.Spell.Values + where + (id == 0 || spell.ID == id) && + (id != 0 || spell.SpellName.ContainsText(_tbProcSeach.Text)) + select spell).ToList(); _lvProcSpellList.VirtualListSize = _spellProcList.Count; if (_lvProcSpellList.SelectedIndices.Count > 0) @@ -377,14 +362,13 @@ private void ProcFilter() var bTarget2 = _cbProcTarget2.SelectedIndex != 0; var fTarget2 = _cbProcTarget2.SelectedValue.ToInt32(); - _spellProcList = (from spell in DBC.Spell.Values - - where (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) - && (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) - && (!bSpellAura || spell.EffectApplyAuraName.Contains((uint)fSpellAura)) - && (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) - && (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) - + _spellProcList = (from spell in DBC.DBC.Spell.Values + where + (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) && + (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) && + (!bSpellAura || spell.EffectApplyAuraName.Contains((uint)fSpellAura)) && + (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) && + (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) select spell).ToList(); _lvProcSpellList.VirtualListSize = _spellProcList.Count(); @@ -392,36 +376,36 @@ private void ProcFilter() _lvProcSpellList.Items[_lvProcSpellList.SelectedIndices[0]].Selected = false; } - private void FamilyTree_AfterCheck(object sender, TreeViewEventArgs e) + private void FamilyTreeAfterCheck(object sender, TreeViewEventArgs e) { - if (!ProcInfo.Update) return; + if (!ProcInfo.Update) + return; _bWrite.Enabled = true; _lvProcAdditionalInfo.Items.Clear(); - uint[] mask = ((TreeView)sender).GetMask(); + var mask = ((TreeView)sender).GetMask(); - var query = from Spell in DBC.Spell.Values - where Spell.SpellFamilyName == ProcInfo.SpellProc.SpellFamilyName - && Spell.SpellFamilyFlags.ContainsElement(mask) - join sk in DBC.SkillLineAbility on Spell.ID equals sk.Value.SpellId into temp1 - from Skill in temp1.DefaultIfEmpty() + var query = from spell in DBC.DBC.Spell.Values + where + spell.SpellFamilyName == ProcInfo.SpellProc.SpellFamilyName && + spell.SpellFamilyFlags.ContainsElement(mask) + join sk in DBC.DBC.SkillLineAbility on spell.ID equals sk.Value.SpellId into temp1 + from skill in temp1.DefaultIfEmpty() //join skl in DBC.SkillLine on Skill.Value.SkillId equals skl.Value.ID into temp2 //from SkillLine in temp2.DefaultIfEmpty() - orderby Skill.Key descending - select new - { - SpellID = Spell.ID, - SpellName = Spell.SpellNameRank + " " + Spell.Description, - SkillId = Skill.Value.SkillId - }; - - foreach (var str in query) - { - ListViewItem lvi = new ListViewItem(new string[] { str.SpellID.ToString(), str.SpellName }); - lvi.ImageKey = str.SkillId != 0 ? "plus.ico" : "munus.ico"; + orderby skill.Key descending + select + new + { + SpellID = spell.ID, + SpellName = spell.SpellNameRank + " " + spell.Description, + skill.Value.SkillId + }; + + foreach (var lvi in + query.Select(str => new ListViewItem(new[] {str.SpellID.ToString(), str.SpellName}) {ImageKey = str.SkillId != 0 ? "plus.ico" : "munus.ico"})) _lvProcAdditionalInfo.Items.Add(lvi); - } GetProcAttribute(ProcInfo.SpellProc); } @@ -430,28 +414,27 @@ orderby Skill.Key descending #region COMPARE PAGE - private void CompareFilterSpell_TextChanged(object sender, EventArgs e) + private void CompareFilterSpellTextChanged(object sender, EventArgs e) { - uint spell1 = _tbCompareFilterSpell1.Text.ToUInt32(); - uint spell2 = _tbCompareFilterSpell2.Text.ToUInt32(); - - if (DBC.Spell.ContainsKey(spell1) && DBC.Spell.ContainsKey(spell2)) - new SpellCompare(_rtbCompareSpell1, _rtbCompareSpell2, DBC.Spell[spell1], DBC.Spell[spell2]); + var spell1 = _tbCompareFilterSpell1.Text.ToUInt32(); + var spell2 = _tbCompareFilterSpell2.Text.ToUInt32(); + if (DBC.DBC.Spell.ContainsKey(spell1) && DBC.DBC.Spell.ContainsKey(spell2)) + new SpellCompare(_rtbCompareSpell1, _rtbCompareSpell2, DBC.DBC.Spell[spell1], DBC.DBC.Spell[spell2]); } - private void CompareSearch1_Click(object sender, EventArgs e) + private void CompareSearch1Click(object sender, EventArgs e) { - FormSearch form = new FormSearch(); + var form = new FormSearch(); form.ShowDialog(this); if (form.DialogResult == DialogResult.OK) _tbCompareFilterSpell1.Text = form.Spell.ID.ToString(); form.Dispose(); } - private void CompareSearch2_Click(object sender, EventArgs e) + private void CompareSearch2Click(object sender, EventArgs e) { - FormSearch form = new FormSearch(); + var form = new FormSearch(); form.ShowDialog(this); if (form.DialogResult == DialogResult.OK) _tbCompareFilterSpell2.Text = form.Spell.ID.ToString(); @@ -462,81 +445,80 @@ private void CompareSearch2_Click(object sender, EventArgs e) #region SQL PAGE - private void Sql_DataList_MouseDoubleClick(object sender, MouseEventArgs e) + private void SqlDataListMouseDoubleClick(object sender, MouseEventArgs e) { ProcParse(sender); } - private void Sql_DataList_KeyDown(object sender, KeyEventArgs e) + private void SqlDataListKeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) ProcParse(sender); } - private void SqlToBase_Click(object sender, EventArgs e) + private void SqlToBaseClick(object sender, EventArgs e) { - if (MySQLConnect.Connected) - MySQLConnect.Insert(_rtbSqlLog.Text); + if (MySqlConnection.Connected) + MySqlConnection.Insert(_rtbSqlLog.Text); else - MessageBox.Show("Can't connect to database!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(@"Can't connect to database!", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } - private void SqlSave_Click(object sender, EventArgs e) + private void SqlSaveClick(object sender, EventArgs e) { - if (_rtbSqlLog.Text != String.Empty) - { - SaveFileDialog _sd = new SaveFileDialog(); - _sd.Filter = "SQL files|*.sql"; - if (_sd.ShowDialog() == DialogResult.OK) - using (StreamWriter _sw = new StreamWriter(_sd.FileName, false, Encoding.UTF8)) - _sw.Write(_rtbSqlLog.Text); - } + if (_rtbSqlLog.Text == String.Empty) + return; + + var sd = new SaveFileDialog {Filter = @"SQL files|*.sql"}; + if (sd.ShowDialog() == DialogResult.OK) + using (var sw = new StreamWriter(sd.FileName, false, Encoding.UTF8)) + sw.Write(_rtbSqlLog.Text); } - private void CalcProcFlags_Click(object sender, EventArgs e) + private void CalcProcFlagsClick(object sender, EventArgs e) { switch (((Button)sender).Name) { case "_bSqlSchool": - { - uint val = _tbSqlSchool.Text.ToUInt32(); - FormCalculateFlags form = new FormCalculateFlags(typeof(SpellSchools), val, ""); - form.ShowDialog(this); - if (form.DialogResult == DialogResult.OK) - _tbSqlSchool.Text = form.Flags.ToString(); - } + { + var val = _tbSqlSchool.Text.ToUInt32(); + var form = new FormCalculateFlags(typeof(SpellSchools), val, string.Empty); + form.ShowDialog(this); + if (form.DialogResult == DialogResult.OK) + _tbSqlSchool.Text = form.Flags.ToString(); + } break; case "_bSqlProc": - { - uint val = _tbSqlProc.Text.ToUInt32(); - FormCalculateFlags form = new FormCalculateFlags(typeof(ProcFlags), val, "PROC_FLAG_"); - form.ShowDialog(this); - if (form.DialogResult == DialogResult.OK) - _tbSqlProc.Text = form.Flags.ToString(); - } + { + var val = _tbSqlProc.Text.ToUInt32(); + var form = new FormCalculateFlags(typeof(ProcFlags), val, "PROC_FLAG_"); + form.ShowDialog(this); + if (form.DialogResult == DialogResult.OK) + _tbSqlProc.Text = form.Flags.ToString(); + } break; case "_bSqlProcEx": - { - uint val = _tbSqlProcEx.Text.ToUInt32(); - FormCalculateFlags form = new FormCalculateFlags(typeof(ProcFlagsEx), val, "PROC_EX_"); - form.ShowDialog(this); - if (form.DialogResult == DialogResult.OK) - _tbSqlProcEx.Text = form.Flags.ToString(); - } + { + var val = _tbSqlProcEx.Text.ToUInt32(); + var form = new FormCalculateFlags(typeof(ProcFlagsEx), val, "PROC_EX_"); + form.ShowDialog(this); + if (form.DialogResult == DialogResult.OK) + _tbSqlProcEx.Text = form.Flags.ToString(); + } break; } } - private void Select_Click(object sender, EventArgs e) + private void SelectClick(object sender, EventArgs e) { - if (!MySQLConnect.Connected) + if (!MySqlConnection.Connected) { - MessageBox.Show("Can't connect to database!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(@"Can't connect to database!", @"Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } - StringBuilder sb = new StringBuilder("WHERE "); - string compare = _cbBinaryCompare.Checked ? "&" : "="; + var sb = new StringBuilder("WHERE "); + var compare = _cbBinaryCompare.Checked ? "&" : "="; if (_cbSqlSpellFamily.SelectedValue.ToInt32() != -1) sb.AppendFormat(" SpellFamilyName = {0} &&", _cbSqlSpellFamily.SelectedValue.ToInt32()); @@ -545,54 +527,49 @@ private void Select_Click(object sender, EventArgs e) sb.AppendFormatIfNotNull(" procFlags {1} {0} &&", _tbSqlProc.Text.ToInt32(), compare); sb.AppendFormatIfNotNull(" procEx {1} {0} &&", _tbSqlProcEx.Text.ToInt32(), compare); - String subquery = sb.ToString().Remove(sb.Length - 2, 2); - subquery = subquery == "WHERE" ? "" : subquery; + var subquery = sb.ToString().Remove(sb.Length - 2, 2); + subquery = subquery == "WHERE" ? string.Empty : subquery; - String query = String.Format("SELECT * FROM `spell_proc_event` {0} ORDER BY entry", subquery); - MySQLConnect.SelectProc(query); + var query = String.Format("SELECT * FROM `spell_proc_event` {0} ORDER BY entry", subquery); + MySqlConnection.SelectProc(query); - _lvDataList.VirtualListSize = MySQLConnect.SpellProcEvent.Count; + _lvDataList.VirtualListSize = MySqlConnection.SpellProcEvent.Count; if (_lvDataList.SelectedIndices.Count > 0) _lvDataList.Items[_lvDataList.SelectedIndices[0]].Selected = false; // check bad spell and drop - foreach (String str in MySQLConnect.Dropped) + foreach (var str in MySqlConnection.Dropped) _rtbSqlLog.AppendText(str); } - private void Write_Click(object sender, EventArgs e) + private void WriteClick(object sender, EventArgs e) { - uint[] SpellFamilyFlags = _tvFamilyTree.GetMask(); + var spellFamilyFlags = _tvFamilyTree.GetMask(); // spell comment var comment = String.Format("-- ({0}) {1}", ProcInfo.SpellProc.ID, ProcInfo.SpellProc.SpellNameRank); // drop query var drop = String.Format("DELETE FROM `spell_proc_event` WHERE `entry` IN ({0});", ProcInfo.SpellProc.ID); // insert query - var insert = String.Format("INSERT INTO `spell_proc_event` VALUES ({0}, 0x{1:X2}, 0x{2:X2}, 0x{3:X8}, 0x{4:X8}, 0x{5:X8}, 0x{6:X8}, 0x{7:X8}, {8}, {9}, {10});", - ProcInfo.SpellProc.ID, - _clbSchools.GetFlagsValue(), - _cbProcFitstSpellFamily.SelectedValue.ToUInt32(), - SpellFamilyFlags[0], - SpellFamilyFlags[1], - SpellFamilyFlags[2], - _clbProcFlags.GetFlagsValue(), - _clbProcFlagEx.GetFlagsValue(), - _tbPPM.Text.Replace(',', '.'), - _tbChance.Text.Replace(',', '.'), - _tbCooldown.Text.Replace(',', '.')); + var insert = + String.Format( + "INSERT INTO `spell_proc_event` VALUES ({0}, 0x{1:X2}, 0x{2:X2}, 0x{3:X8}, 0x{4:X8}, 0x{5:X8}, 0x{6:X8}, 0x{7:X8}, {8}, {9}, {10});", + ProcInfo.SpellProc.ID, _clbSchools.GetFlagsValue(), _cbProcFitstSpellFamily.SelectedValue.ToUInt32(), + spellFamilyFlags[0], spellFamilyFlags[1], spellFamilyFlags[2], _clbProcFlags.GetFlagsValue(), + _clbProcFlagEx.GetFlagsValue(), _tbPPM.Text.Replace(',', '.'), _tbChance.Text.Replace(',', '.'), + _tbCooldown.Text.Replace(',', '.')); _rtbSqlLog.AppendText(comment + "\r\n" + drop + "\r\n" + insert + "\r\n\r\n"); _rtbSqlLog.ColorizeCode(); - if (MySQLConnect.Connected) - MySQLConnect.Insert(drop + insert); + if (MySqlConnection.Connected) + MySqlConnection.Insert(drop + insert); ((Button)sender).Enabled = false; } private void ProcParse(object sender) { - SpellProcEventEntry proc = MySQLConnect.SpellProcEvent[((ListView)sender).SelectedIndices[0]]; - SpellEntry spell = DBC.Spell[proc.ID]; + var proc = MySqlConnection.SpellProcEvent[((ListView)sender).SelectedIndices[0]]; + var spell = DBC.DBC.Spell[proc.Id]; ProcInfo.SpellProc = spell; new SpellInfo(_rtbProcSpellInfo, spell); @@ -619,21 +596,24 @@ private void ProcParse(object sender) private List _spellList = new List(); - private void _lvSpellList_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + private List _spellProcList = new List(); + + private void LvSpellListRetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { - e.Item = new ListViewItem(new[] { _spellList[e.ItemIndex].ID.ToString(), _spellList[e.ItemIndex].SpellNameRank }); + e.Item = + new ListViewItem(new[] {_spellList[e.ItemIndex].ID.ToString(), _spellList[e.ItemIndex].SpellNameRank}); } - private List _spellProcList = new List(); - - private void _lvProcSpellList_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + private void LvProcSpellListRetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { - e.Item = new ListViewItem(new[] { _spellProcList[e.ItemIndex].ID.ToString(), _spellProcList[e.ItemIndex].SpellNameRank }); + e.Item = + new ListViewItem(new[] + {_spellProcList[e.ItemIndex].ID.ToString(), _spellProcList[e.ItemIndex].SpellNameRank}); } - private void _lvSqlData_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + private static void LvSqlDataRetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { - e.Item = new ListViewItem(MySQLConnect.SpellProcEvent[e.ItemIndex].ToArray()); + e.Item = new ListViewItem(MySqlConnection.SpellProcEvent[e.ItemIndex].ToArray()); } #endregion diff --git a/SpellWork/Forms/FormSearch.Designer.cs b/SpellWork/Forms/FormSearch.Designer.cs index 2a9712ec..3455c522 100644 --- a/SpellWork/Forms/FormSearch.Designer.cs +++ b/SpellWork/Forms/FormSearch.Designer.cs @@ -1,4 +1,4 @@ -namespace SpellWork +namespace SpellWork.Forms { partial class FormSearch { @@ -94,7 +94,7 @@ private void InitializeComponent() this._bOk.TabIndex = 9; this._bOk.Text = "OK"; this._bOk.UseVisualStyleBackColor = true; - this._bOk.Click += new System.EventHandler(this.Ok_Click); + this._bOk.Click += new System.EventHandler(this.OkClick); // // _bCencel // @@ -105,7 +105,7 @@ private void InitializeComponent() this._bCencel.TabIndex = 10; this._bCencel.Text = "Cencel"; this._bCencel.UseVisualStyleBackColor = true; - this._bCencel.Click += new System.EventHandler(this.Cencel_Click); + this._bCencel.Click += new System.EventHandler(this.CencelClick); // // groupBox1 // @@ -162,7 +162,7 @@ private void InitializeComponent() this._tbAttribute.Name = "_tbAttribute"; this._tbAttribute.Size = new System.Drawing.Size(198, 20); this._tbAttribute.TabIndex = 2; - this._tbAttribute.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); + this._tbAttribute.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdNameKeyDown); // // _tbIcon // @@ -172,7 +172,7 @@ private void InitializeComponent() this._tbIcon.Name = "_tbIcon"; this._tbIcon.Size = new System.Drawing.Size(198, 20); this._tbIcon.TabIndex = 1; - this._tbIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); + this._tbIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdNameKeyDown); // // _tbIdName // @@ -182,7 +182,7 @@ private void InitializeComponent() this._tbIdName.Name = "_tbIdName"; this._tbIdName.Size = new System.Drawing.Size(198, 20); this._tbIdName.TabIndex = 0; - this._tbIdName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); + this._tbIdName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdNameKeyDown); // // _lvSpellList // @@ -202,9 +202,9 @@ private void InitializeComponent() this._lvSpellList.UseCompatibleStateImageBehavior = false; this._lvSpellList.View = System.Windows.Forms.View.Details; this._lvSpellList.VirtualMode = true; - this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.SpellList_SelectedIndexChanged); - this._lvSpellList.DoubleClick += new System.EventHandler(this.Ok_Click); - this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.SpellList_RetrieveVirtualItem); + this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.SpellListSelectedIndexChanged); + this._lvSpellList.DoubleClick += new System.EventHandler(this.OkClick); + this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.SpellListRetrieveVirtualItem); // // _chID // @@ -242,7 +242,7 @@ private void InitializeComponent() this._cbTarget2.Name = "_cbTarget2"; this._cbTarget2.Size = new System.Drawing.Size(263, 21); this._cbTarget2.TabIndex = 7; - this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); + this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); // // _cbTarget1 // @@ -255,7 +255,7 @@ private void InitializeComponent() this._cbTarget1.Name = "_cbTarget1"; this._cbTarget1.Size = new System.Drawing.Size(263, 21); this._cbTarget1.TabIndex = 6; - this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); + this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); // // _cbSpellEffect // @@ -268,7 +268,7 @@ private void InitializeComponent() this._cbSpellEffect.Name = "_cbSpellEffect"; this._cbSpellEffect.Size = new System.Drawing.Size(263, 21); this._cbSpellEffect.TabIndex = 5; - this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); + this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); // // _cbSpellAura // @@ -281,7 +281,7 @@ private void InitializeComponent() this._cbSpellAura.Name = "_cbSpellAura"; this._cbSpellAura.Size = new System.Drawing.Size(263, 21); this._cbSpellAura.TabIndex = 4; - this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); + this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); // // _cbSpellFamily // @@ -294,7 +294,7 @@ private void InitializeComponent() this._cbSpellFamily.Name = "_cbSpellFamily"; this._cbSpellFamily.Size = new System.Drawing.Size(263, 21); this._cbSpellFamily.TabIndex = 3; - this._cbSpellFamily.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); + this._cbSpellFamily.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); // // FormSearch // diff --git a/SpellWork/Forms/FormSearch.cs b/SpellWork/Forms/FormSearch.cs index ccdd2de7..d5f9026b 100644 --- a/SpellWork/Forms/FormSearch.cs +++ b/SpellWork/Forms/FormSearch.cs @@ -2,11 +2,16 @@ using System.Collections.Generic; using System.Linq; using System.Windows.Forms; +using SpellWork.DBC; +using SpellWork.Extensions; +using SpellWork.Spell; -namespace SpellWork +namespace SpellWork.Forms { public partial class FormSearch : Form { + private List _spellList = new List(); + public FormSearch() { InitializeComponent(); @@ -20,111 +25,94 @@ public FormSearch() public SpellEntry Spell { get; private set; } - private List _spellList = new List(); - - private void IdName_KeyDown(object sender, KeyEventArgs e) + private void IdNameKeyDown(object sender, KeyEventArgs e) { - if (e.KeyCode == Keys.Enter) - { - string name = _tbIdName.Text; - uint id = name.ToUInt32(); - uint ic = _tbIcon.Text.ToUInt32(); - uint at = _tbAttribute.Text.ToUInt32(); - - _spellList = (from spell in DBC.Spell.Values - - where ((id == 0 || spell.ID == id) - - && (ic == 0 || spell.SpellIconID == ic) - - && (at == 0 || (spell.Attributes & at) != 0 - || (spell.AttributesEx & at) != 0 - || (spell.AttributesEx2 & at) != 0 - || (spell.AttributesEx3 & at) != 0 - || (spell.AttributesEx4 & at) != 0 - || (spell.AttributesEx5 & at) != 0 - || (spell.AttributesEx6 & at) != 0 - || (spell.AttributesEx7 & at) != 0)) - - && (id != 0 || ic != 0 && at != 0) || spell.SpellName.ContainsText(name) + if (e.KeyCode != Keys.Enter) + return; + + var name = _tbIdName.Text; + var id = name.ToUInt32(); + var ic = _tbIcon.Text.ToUInt32(); + var at = _tbAttribute.Text.ToUInt32(); + + _spellList = (from spell in DBC.DBC.Spell.Values + where + ((id == 0 || spell.ID == id) && (ic == 0 || spell.SpellIconID == ic) && + (at == 0 || (spell.Attributes & at) != 0 || (spell.AttributesEx & at) != 0 || + (spell.AttributesEx2 & at) != 0 || (spell.AttributesEx3 & at) != 0 || + (spell.AttributesEx4 & at) != 0 || (spell.AttributesEx5 & at) != 0 || + (spell.AttributesEx6 & at) != 0 || (spell.AttributesEx7 & at) != 0)) && + (id != 0 || ic != 0 && at != 0) || spell.SpellName.ContainsText(name) + select spell).ToList(); + + _lvSpellList.VirtualListSize = _spellList.Count(); + groupBox1.Text = @"Spell Search count: " + _spellList.Count(); - select spell).ToList(); - - _lvSpellList.VirtualListSize = _spellList.Count(); - groupBox1.Text = "Spell Search count: " + _spellList.Count(); - - if (_lvSpellList.SelectedIndices.Count > 0) - _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; - } + if (_lvSpellList.SelectedIndices.Count > 0) + _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; } - private void SpellFamily_SelectedIndexChanged(object sender, EventArgs e) + private void SpellFamilySelectedIndexChanged(object sender, EventArgs e) { - if (((ComboBox)sender).SelectedIndex != 0) - { - var bFamilyNames = _cbSpellFamily.SelectedIndex != 0; - var fFamilyNames = _cbSpellFamily.SelectedValue.ToInt32(); - - var bSpellAura = _cbSpellAura.SelectedIndex != 0; - var fSpellAura = _cbSpellAura.SelectedValue.ToInt32(); + if (((ComboBox)sender).SelectedIndex == 0) + return; - var bSpellEffect = _cbSpellEffect.SelectedIndex != 0; - var fSpellEffect = _cbSpellEffect.SelectedValue.ToInt32(); + var bFamilyNames = _cbSpellFamily.SelectedIndex != 0; + var fFamilyNames = _cbSpellFamily.SelectedValue.ToInt32(); - var bTarget1 = _cbTarget1.SelectedIndex != 0; - var fTarget1 = _cbTarget1.SelectedValue.ToInt32(); + var bSpellAura = _cbSpellAura.SelectedIndex != 0; + var fSpellAura = _cbSpellAura.SelectedValue.ToInt32(); - var bTarget2 = _cbTarget2.SelectedIndex != 0; - var fTarget2 = _cbTarget2.SelectedValue.ToInt32(); + var bSpellEffect = _cbSpellEffect.SelectedIndex != 0; + var fSpellEffect = _cbSpellEffect.SelectedValue.ToInt32(); - _spellList = (from spell in DBC.Spell.Values + var bTarget1 = _cbTarget1.SelectedIndex != 0; + var fTarget1 = _cbTarget1.SelectedValue.ToInt32(); - where (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) - && (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) - && (!bSpellAura || spell.EffectApplyAuraName.ContainsElement((uint)fSpellAura)) - && (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) - && (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) + var bTarget2 = _cbTarget2.SelectedIndex != 0; + var fTarget2 = _cbTarget2.SelectedValue.ToInt32(); - select spell).ToList(); + _spellList = (from spell in DBC.DBC.Spell.Values + where + (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) && + (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) && + (!bSpellAura || spell.EffectApplyAuraName.ContainsElement((uint)fSpellAura)) && + (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) && + (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) + select spell).ToList(); - _lvSpellList.VirtualListSize = _spellList.Count(); - groupBox2.Text = "Spell Filter " + "count: " + _spellList.Count(); + _lvSpellList.VirtualListSize = _spellList.Count(); + groupBox2.Text = @"Spell Filter " + @"count: " + _spellList.Count(); - if (_lvSpellList.SelectedIndices.Count > 0) - _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; - } + if (_lvSpellList.SelectedIndices.Count > 0) + _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; } - private void SpellList_SelectedIndexChanged(object sender, EventArgs e) + private void SpellListSelectedIndexChanged(object sender, EventArgs e) { if (_lvSpellList.SelectedIndices.Count > 0) new SpellInfo(_rtbSpellInfo, _spellList[_lvSpellList.SelectedIndices[0]]); } - private void Ok_Click(object sender, EventArgs e) + private void OkClick(object sender, EventArgs e) { - if (_lvSpellList.SelectedIndices.Count > 0) - { - Spell = _spellList[_lvSpellList.SelectedIndices[0]]; - this.DialogResult = DialogResult.OK; - this.Close(); - } - } + if (_lvSpellList.SelectedIndices.Count <= 0) + return; - private void TextBox_KeyPress(object sender, KeyPressEventArgs e) - { - if (!((Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back))) - e.Handled = true; + Spell = _spellList[_lvSpellList.SelectedIndices[0]]; + DialogResult = DialogResult.OK; + Close(); } - private void Cencel_Click(object sender, EventArgs e) + private void CencelClick(object sender, EventArgs e) { - this.Close(); + Close(); } - private void SpellList_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + private void SpellListRetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { - e.Item = new ListViewItem(new[] { _spellList[e.ItemIndex].ID.ToString(), _spellList[e.ItemIndex].SpellNameRank }); + e.Item = + new ListViewItem(new[] {_spellList[e.ItemIndex].ID.ToString(), _spellList[e.ItemIndex].SpellNameRank}); } } } diff --git a/SpellWork/Forms/FormSettings.Designer.cs b/SpellWork/Forms/FormSettings.Designer.cs index 6f954f00..c6ecba2f 100644 --- a/SpellWork/Forms/FormSettings.Designer.cs +++ b/SpellWork/Forms/FormSettings.Designer.cs @@ -1,4 +1,4 @@ -namespace SpellWork +namespace SpellWork.Forms { partial class FormSettings { @@ -155,7 +155,7 @@ private void InitializeComponent() this._cbUseDBConnect.TabIndex = 5; this._cbUseDBConnect.Text = "Use DB Connect"; this._cbUseDBConnect.UseVisualStyleBackColor = true; - this._cbUseDBConnect.CheckedChanged += new System.EventHandler(this._cbUseDBConnect_CheckedChanged); + this._cbUseDBConnect.CheckedChanged += new System.EventHandler(this.CbUseDbConnectCheckedChanged); // // _bTestConnect // @@ -165,7 +165,7 @@ private void InitializeComponent() this._bTestConnect.TabIndex = 6; this._bTestConnect.Text = "Test connect"; this._bTestConnect.UseVisualStyleBackColor = true; - this._bTestConnect.Click += new System.EventHandler(this._bSaveSettings_Click); + this._bTestConnect.Click += new System.EventHandler(this.BSaveSettingsClick); // // _bSaveSettings // @@ -175,7 +175,7 @@ private void InitializeComponent() this._bSaveSettings.TabIndex = 7; this._bSaveSettings.Text = "Save"; this._bSaveSettings.UseVisualStyleBackColor = true; - this._bSaveSettings.Click += new System.EventHandler(this._bSaveSettings_Click); + this._bSaveSettings.Click += new System.EventHandler(this.BSaveSettingsClick); // // FormSettings // @@ -195,7 +195,7 @@ private void InitializeComponent() this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "SpellWork Settings"; - this.Load += new System.EventHandler(this.SettingsForm_Load); + this.Load += new System.EventHandler(this.SettingsFormLoad); this._gbDbSetting.ResumeLayout(false); this._gbDbSetting.PerformLayout(); this.ResumeLayout(false); diff --git a/SpellWork/Forms/FormSettings.cs b/SpellWork/Forms/FormSettings.cs index 08dee074..f4f9db0c 100644 --- a/SpellWork/Forms/FormSettings.cs +++ b/SpellWork/Forms/FormSettings.cs @@ -1,14 +1,9 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; using System.Windows.Forms; +using SpellWork.Database; using SpellWork.Properties; -namespace SpellWork +namespace SpellWork.Forms { public partial class FormSettings : Form { @@ -17,12 +12,12 @@ public FormSettings() InitializeComponent(); } - private void _cbUseDBConnect_CheckedChanged(object sender, EventArgs e) + private void CbUseDbConnectCheckedChanged(object sender, EventArgs e) { _gbDbSetting.Enabled = ((CheckBox)sender).Checked; } - private void _bSaveSettings_Click(object sender, EventArgs e) + private void BSaveSettingsClick(object sender, EventArgs e) { Settings.Default.Host = _tbHost.Text; Settings.Default.Port = _tbPort.Text; @@ -31,30 +26,30 @@ private void _bSaveSettings_Click(object sender, EventArgs e) Settings.Default.WorldDbName = _tbBase.Text; Settings.Default.UseDbConnect = _cbUseDBConnect.Checked; - MySQLConnect.TestConnect(); + MySqlConnection.TestConnect(); - if (((Button)sender).Text != "Save") + if (((Button)sender).Text != @"Save") { - if (MySQLConnect.Connected) + if (MySqlConnection.Connected) { - MessageBox.Show("Connection is successful!", "MySQL Connections!", + MessageBox.Show(@"Connection is successful!", @"MySQL Connections!", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { - MessageBox.Show("Connection failed!", "ERROR!", + MessageBox.Show(@"Connection failed!", @"ERROR!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } - if (((Button)sender).Text == "Save") - { - Settings.Default.Save(); - this.Close(); - } + if (((Button)sender).Text != @"Save") + return; + + Settings.Default.Save(); + Close(); } - private void SettingsForm_Load(object sender, EventArgs e) + private void SettingsFormLoad(object sender, EventArgs e) { _tbHost.Text = Settings.Default.Host; _tbPort.Text = Settings.Default.Port; diff --git a/SpellWork/Loader.cs b/SpellWork/Loader.cs index bd599bf9..50bc2fe7 100644 --- a/SpellWork/Loader.cs +++ b/SpellWork/Loader.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; +using SpellWork.DBC; +using SpellWork.Spell; namespace SpellWork { @@ -10,31 +8,32 @@ class Loader { public Loader() { - DBC.OverrideSpellData = DBCReader.ReadDBC(null); - DBC.ScreenEffect = DBCReader.ReadDBC(DBC.ScreenEffectStrings); - DBC.SkillLine = DBCReader.ReadDBC(DBC.SkillLineStrings); - DBC.SkillLineAbility = DBCReader.ReadDBC(null); - DBC.Spell = DBCReader.ReadDBC(DBC.SpellStrings); - DBC.SpellCastTimes = DBCReader.ReadDBC(null); - DBC.SpellDifficulty = DBCReader.ReadDBC(null); - DBC.SpellDuration = DBCReader.ReadDBC(null); - DBC.SpellRadius = DBCReader.ReadDBC(null); - DBC.SpellRange = DBCReader.ReadDBC(DBC.SpellRangeStrings); + DBC.DBC.OverrideSpellData = DBCReader.ReadDBC(null); + DBC.DBC.ScreenEffect = DBCReader.ReadDBC(DBC.DBC.ScreenEffectStrings); + DBC.DBC.SkillLine = DBCReader.ReadDBC(DBC.DBC.SkillLineStrings); + DBC.DBC.SkillLineAbility = DBCReader.ReadDBC(null); + DBC.DBC.Spell = DBCReader.ReadDBC(DBC.DBC.SpellStrings); + DBC.DBC.SpellCastTimes = DBCReader.ReadDBC(null); + DBC.DBC.SpellDifficulty = DBCReader.ReadDBC(null); + DBC.DBC.SpellDuration = DBCReader.ReadDBC(null); + DBC.DBC.SpellRadius = DBCReader.ReadDBC(null); + DBC.DBC.SpellRange = DBCReader.ReadDBC(DBC.DBC.SpellRangeStrings); - DBC.Locale = DetectedLocale; + DBC.DBC.Locale = DetectedLocale; } - private LocalesDBC DetectedLocale + /// Exception. + private static LocalesDBC DetectedLocale { get { byte locale = 0; - while (DBC.Spell[DBC.SPELL_ENTRY_FOR_DETECT_LOCALE].GetName(locale) == String.Empty) + while (DBC.DBC.Spell[DBC.DBC.SpellEntryForDetectLocale].GetName(locale) == String.Empty) { ++locale; - if (locale >= DBC.MAX_DBC_LOCALE) + if (locale >= DBC.DBC.MaxDbcLocale) throw new Exception("Detected unknown locale index " + locale); } return (LocalesDBC)locale; diff --git a/SpellWork/Program.cs b/SpellWork/Program.cs index 4b22f497..62c8036b 100644 --- a/SpellWork/Program.cs +++ b/SpellWork/Program.cs @@ -1,8 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; using System.Windows.Forms; -using System.IO; +using SpellWork.Forms; namespace SpellWork { @@ -12,7 +10,7 @@ static class Program /// The main entry point for the application. /// [STAThread] - static void Main(string[] args) + static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); @@ -24,7 +22,7 @@ static void Main(string[] args) } catch (Exception ex) { - MessageBox.Show(ex.Message, "SpellWork Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.Message, @"SpellWork Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } diff --git a/SpellWork/Properties/AssemblyInfo.cs b/SpellWork/Properties/AssemblyInfo.cs index 556f6b68..618dd1ca 100644 --- a/SpellWork/Properties/AssemblyInfo.cs +++ b/SpellWork/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // General Information about an assembly is controlled through the following diff --git a/SpellWork/Spell/ProcInfo.cs b/SpellWork/Spell/ProcInfo.cs index 3171975f..f21ca57b 100644 --- a/SpellWork/Spell/ProcInfo.cs +++ b/SpellWork/Spell/ProcInfo.cs @@ -3,8 +3,10 @@ using System.Text; using System.Windows.Forms; using System.Drawing; +using SpellWork.DBC; +using SpellWork.Extensions; -namespace SpellWork +namespace SpellWork.Spell { public class ProcInfo { @@ -15,22 +17,22 @@ public ProcInfo(TreeView familyTree, SpellFamilyNames spellfamily) { familyTree.Nodes.Clear(); - var spells = from Spell in DBC.Spell - where Spell.Value.SpellFamilyName == (uint)spellfamily - join sk in DBC.SkillLineAbility on Spell.Key equals sk.Value.SpellId into temp1 - from Skill in temp1.DefaultIfEmpty() - join skl in DBC.SkillLine on Skill.Value.SkillId equals skl.Key into temp2 - from SkillLine in temp2.DefaultIfEmpty() + var spells = from spell in DBC.DBC.Spell + where spell.Value.SpellFamilyName == (uint)spellfamily + join sk in DBC.DBC.SkillLineAbility on spell.Key equals sk.Value.SpellId into temp1 + from skill in temp1.DefaultIfEmpty() + join skl in DBC.DBC.SkillLine on skill.Value.SkillId equals skl.Key into temp2 + from skillLine in temp2.DefaultIfEmpty() select new { - Spell, - Skill.Value.SkillId, - SkillLine.Value + spell, + skill.Value.SkillId, + skillLine.Value }; - for (int i = 0; i < 96; i++) + for (var i = 0; i < 96; ++i) { - uint[] mask = new uint[3]; + var mask = new uint[3]; if (i < 32) mask[0] = 1U << i; @@ -39,19 +41,21 @@ from SkillLine in temp2.DefaultIfEmpty() else mask[2] = 1U << (i - 64); - TreeNode node = new TreeNode(); - node.Text = String.Format("0x{0:X8} {1:X8} {2:X8}", mask[2], mask[1], mask[0]); - node.ImageKey = "family.ico"; + var node = new TreeNode + { + Text = String.Format("0x{0:X8} {1:X8} {2:X8}", mask[2], mask[1], mask[0]), + ImageKey = @"family.ico" + }; familyTree.Nodes.Add(node); } foreach (var elem in spells) { - SpellEntry spell = elem.Spell.Value; - bool IsSkill = elem.SkillId != 0; + var spell = elem.spell.Value; + var isSkill = elem.SkillId != 0; - StringBuilder name = new StringBuilder(); - StringBuilder toolTip = new StringBuilder(); + var name = new StringBuilder(); + var toolTip = new StringBuilder(); name.AppendFormat("{0} - {1} ", spell.ID, spell.SpellNameRank); @@ -59,7 +63,7 @@ from SkillLine in temp2.DefaultIfEmpty() toolTip.AppendFormatLine("Description: {0}", spell.Description); toolTip.AppendFormatLine("ToolTip: {0}", spell.ToolTip); - if (IsSkill) + if (isSkill) { name.AppendFormat("(Skill: ({0}) {1}) ", elem.SkillId, elem.Value.Name); @@ -68,11 +72,11 @@ from SkillLine in temp2.DefaultIfEmpty() toolTip.AppendFormatLine("Description: {0}", elem.Value.Description); } - name.AppendFormat("({0})", spell.School.ToString().NormaliseString("MASK_")); + name.AppendFormat("({0})", spell.School.ToString().NormalizeString("MASK_")); foreach (TreeNode node in familyTree.Nodes) { - uint[] mask = new uint[3]; + var mask = new uint[3]; if (node.Index < 32) mask[0] = 1U << node.Index; @@ -81,15 +85,14 @@ from SkillLine in temp2.DefaultIfEmpty() else mask[2] = 1U << (node.Index - 64); - if ((spell.SpellFamilyFlags.ContainsElement(mask))) - { - TreeNode child = new TreeNode(); - child = node.Nodes.Add(name.ToString()); - child.Name = spell.ID.ToString(); - child.ImageKey = IsSkill ? "plus.ico" : "munus.ico"; - child.ForeColor = IsSkill ? Color.Blue : Color.Red; - child.ToolTipText = toolTip.ToString(); - } + if ((!spell.SpellFamilyFlags.ContainsElement(mask))) + continue; + + var child = node.Nodes.Add(name.ToString()); + child.Name = spell.ID.ToString(); + child.ImageKey = isSkill ? "plus.ico" : "munus.ico"; + child.ForeColor = isSkill ? Color.Blue : Color.Red; + child.ToolTipText = toolTip.ToString(); } } } diff --git a/SpellWork/Spell/SpellCompare.cs b/SpellWork/Spell/SpellCompare.cs index 77a04adc..6bf801da 100644 --- a/SpellWork/Spell/SpellCompare.cs +++ b/SpellWork/Spell/SpellCompare.cs @@ -1,7 +1,9 @@ using System.Windows.Forms; using System.Drawing; +using SpellWork.DBC; +using SpellWork.Extensions; -namespace SpellWork +namespace SpellWork.Spell { /// /// Compares two spells @@ -11,7 +13,7 @@ class SpellCompare /// /// Search terms /// - string[] words = new[] { "=====" };// todo: more wodrs + readonly string[] _words = new[] { "=====" };// todo: more wodrs /// /// Compares two spells @@ -25,53 +27,31 @@ public SpellCompare(RichTextBox rtb1, RichTextBox rtb2, SpellEntry spell1, Spell new SpellInfo(rtb1, spell1); new SpellInfo(rtb2, spell2); - string[] strsl = rtb1.Text.Split('\n'); - string[] strsr = rtb2.Text.Split('\n'); + var strsl = rtb1.Text.Split('\n'); + var strsr = rtb2.Text.Split('\n'); - int pos = 0; - foreach (string str in strsl) + var pos = 0; + foreach (var str in strsl) { pos += str.Length + 1; rtb1.Select(pos - str.Length - 1, pos - 1); if (rtb2.Find(str, RichTextBoxFinds.WholeWord) != -1) - { - if (str.ContainsText(words)) - { - rtb1.SelectionBackColor = rtb1.BackColor; - } - else - { - rtb1.SelectionBackColor = Color.Cyan; - } - } + rtb1.SelectionBackColor = str.ContainsText(_words) ? rtb1.BackColor : Color.Cyan; else - { rtb1.SelectionBackColor = Color.Salmon; - } } pos = 0; - foreach (string str in strsr) + foreach (var str in strsr) { pos += str.Length + 1; rtb2.Select(pos - str.Length - 1, pos - 1); if (rtb1.Find(str, RichTextBoxFinds.WholeWord) != -1) - { - if (str.ContainsText(words)) - { - rtb2.SelectionBackColor = rtb2.BackColor; - } - else - { - rtb2.SelectionBackColor = Color.Cyan; - } - } + rtb2.SelectionBackColor = str.ContainsText(_words) ? rtb2.BackColor : Color.Cyan; else - { rtb2.SelectionBackColor = Color.Salmon; - } } } } diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index c5dd7a2d..d43268a2 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -1,7 +1,8 @@ using System; -namespace SpellWork +namespace SpellWork.Spell { + // ReSharper disable InconsistentNaming public enum LocalesDBC { enUS, @@ -669,7 +670,7 @@ public enum Targets TARGET_UNIT_TARGET_PUPPET = 90, TARGET_DEST_DEST_RANDOM_DIR_DIST = 91, TARGET_UNIT_SUMMONER = 92, - TARGET_CORPSE_AREA_ENEMY_PLAYER_SRC = 93, // TODO + TARGET_CORPSE_AREA_ENEMY_PLAYER_SRC = 93, TARGET_UNIT_VEHICLE = 94, TARGET_UNIT_DRIVER = 95, TARGET_UNIT_PASSENGER_0 = 96, @@ -1544,6 +1545,8 @@ public enum UnitMods UNIT_MOD_POWER_END = UNIT_MOD_RUNIC_POWER + 1, }; +// ReSharper restore InconsistentNaming + public class SpellEnums { #region ProcFlagDesc diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 966b752f..e53c6a0e 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -1,22 +1,23 @@ -using System; +using System.Drawing; using System.Linq; -using System.Drawing; using System.Windows.Forms; -using System.Text; +using SpellWork.Database; +using SpellWork.DBC; +using SpellWork.Extensions; -namespace SpellWork +namespace SpellWork.Spell { class SpellInfo { - private RichTextBox rtb; - private SpellEntry spell; + private readonly RichTextBox _rtb; + private SpellEntry _spell; private const string _line = "================================================="; public SpellInfo(RichTextBox rtb, SpellEntry spell) { - this.rtb = rtb; - this.spell = spell; + _rtb = rtb; + _spell = spell; ProcInfo.SpellProc = spell; @@ -25,182 +26,182 @@ public SpellInfo(RichTextBox rtb, SpellEntry spell) private void ViewSpellInfo() { - rtb.Clear(); - rtb.SetBold(); - rtb.AppendFormatLine("ID - {0} {1}", spell.ID, spell.SpellNameRank); - rtb.SetDefaultStyle(); - - rtb.AppendFormatLine(_line); - rtb.AppendFormatLineIfNotNull("Description: {0}", spell.Description); - rtb.AppendFormatLineIfNotNull("ToolTip: {0}", spell.ToolTip); - rtb.AppendFormatLineIfNotNull("Modal Next Spell: {0}", spell.ModalNextSpell); - if (spell.Description != string.Empty && spell.ToolTip != string.Empty && spell.ModalNextSpell != 0) - rtb.AppendFormatLine(_line); - - rtb.AppendFormatLine("Category = {0}, SpellIconID = {1}, activeIconID = {2}, SpellVisual = ({3},{4})", - spell.Category, spell.SpellIconID, spell.ActiveIconID, spell.SpellVisual[0], spell.SpellVisual[1]); - - rtb.AppendFormatLine("Family {0}, flag 0x{1:X8} {2:X8} {3:X8}", - (SpellFamilyNames)spell.SpellFamilyName, spell.SpellFamilyFlags[0], spell.SpellFamilyFlags[1], spell.SpellFamilyFlags[2]); - - rtb.AppendLine(); - - rtb.AppendFormatLine("SpellSchoolMask = {0} ({1})", spell.SchoolMask, spell.School); - rtb.AppendFormatLine("DamageClass = {0} ({1})", spell.DmgClass, (SpellDmgClass)spell.DmgClass); - rtb.AppendFormatLine("PreventionType = {0} ({1})", spell.PreventionType, (SpellPreventionType)spell.PreventionType); - - if (spell.Attributes != 0 || spell.AttributesEx != 0 || spell.AttributesEx2 != 0 || spell.AttributesEx3 != 0 - || spell.AttributesEx4 != 0 || spell.AttributesEx5 != 0 || spell.AttributesEx6 != 0 || spell.AttributesEx7 != 0) - rtb.AppendLine(_line); - - if (spell.Attributes != 0) - rtb.AppendFormatLine("Attributes: 0x{0:X8} ({1})", spell.Attributes, (SpellAtribute)spell.Attributes); - if (spell.AttributesEx != 0) - rtb.AppendFormatLine("AttributesEx1: 0x{0:X8} ({1})", spell.AttributesEx, (SpellAtributeEx)spell.AttributesEx); - if (spell.AttributesEx2 != 0) - rtb.AppendFormatLine("AttributesEx2: 0x{0:X8} ({1})", spell.AttributesEx2, (SpellAtributeEx2)spell.AttributesEx2); - if (spell.AttributesEx3 != 0) - rtb.AppendFormatLine("AttributesEx3: 0x{0:X8} ({1})", spell.AttributesEx3, (SpellAtributeEx3)spell.AttributesEx3); - if (spell.AttributesEx4 != 0) - rtb.AppendFormatLine("AttributesEx4: 0x{0:X8} ({1})", spell.AttributesEx4, (SpellAtributeEx4)spell.AttributesEx4); - if (spell.AttributesEx5 != 0) - rtb.AppendFormatLine("AttributesEx5: 0x{0:X8} ({1})", spell.AttributesEx5, (SpellAtributeEx5)spell.AttributesEx5); - if (spell.AttributesEx6 != 0) - rtb.AppendFormatLine("AttributesEx6: 0x{0:X8} ({1})", spell.AttributesEx6, (SpellAtributeEx6)spell.AttributesEx6); - if (spell.AttributesEx7 != 0) - rtb.AppendFormatLine("AttributesEx7: 0x{0:X8} ({1})", spell.AttributesEx7, (SpellAtributeEx7)spell.AttributesEx7); - - rtb.AppendLine(_line); - - if (spell.Targets != 0) - rtb.AppendFormatLine("Targets Mask = 0x{0:X8} ({1})", spell.Targets, (SpellCastTargetFlags)spell.Targets); - - if (spell.TargetCreatureType != 0) - rtb.AppendFormatLine("Creature Type Mask = 0x{0:X8} ({1})", - spell.TargetCreatureType, (CreatureTypeMask)spell.TargetCreatureType); - - if (spell.Stances != 0) - rtb.AppendFormatLine("Stances: {0}", (ShapeshiftFormMask)spell.Stances); - - if (spell.StancesNot != 0) - rtb.AppendFormatLine("Stances Not: {0}", (ShapeshiftFormMask)spell.StancesNot); + _rtb.Clear(); + _rtb.SetBold(); + _rtb.AppendFormatLine("ID - {0} {1}", _spell.ID, _spell.SpellNameRank); + _rtb.SetDefaultStyle(); + + _rtb.AppendFormatLine(_line); + _rtb.AppendFormatLineIfNotNull("Description: {0}", _spell.Description); + _rtb.AppendFormatLineIfNotNull("ToolTip: {0}", _spell.ToolTip); + _rtb.AppendFormatLineIfNotNull("Modal Next Spell: {0}", _spell.ModalNextSpell); + if (_spell.Description != string.Empty && _spell.ToolTip != string.Empty && _spell.ModalNextSpell != 0) + _rtb.AppendFormatLine(_line); + + _rtb.AppendFormatLine("Category = {0}, SpellIconID = {1}, activeIconID = {2}, SpellVisual = ({3},{4})", + _spell.Category, _spell.SpellIconID, _spell.ActiveIconID, _spell.SpellVisual[0], _spell.SpellVisual[1]); + + _rtb.AppendFormatLine("Family {0}, flag 0x{1:X8} {2:X8} {3:X8}", + (SpellFamilyNames)_spell.SpellFamilyName, _spell.SpellFamilyFlags[0], _spell.SpellFamilyFlags[1], _spell.SpellFamilyFlags[2]); + + _rtb.AppendLine(); + + _rtb.AppendFormatLine("SpellSchoolMask = {0} ({1})", _spell.SchoolMask, _spell.School); + _rtb.AppendFormatLine("DamageClass = {0} ({1})", _spell.DmgClass, (SpellDmgClass)_spell.DmgClass); + _rtb.AppendFormatLine("PreventionType = {0} ({1})", _spell.PreventionType, (SpellPreventionType)_spell.PreventionType); + + if (_spell.Attributes != 0 || _spell.AttributesEx != 0 || _spell.AttributesEx2 != 0 || _spell.AttributesEx3 != 0 + || _spell.AttributesEx4 != 0 || _spell.AttributesEx5 != 0 || _spell.AttributesEx6 != 0 || _spell.AttributesEx7 != 0) + _rtb.AppendLine(_line); + + if (_spell.Attributes != 0) + _rtb.AppendFormatLine("Attributes: 0x{0:X8} ({1})", _spell.Attributes, (SpellAtribute)_spell.Attributes); + if (_spell.AttributesEx != 0) + _rtb.AppendFormatLine("AttributesEx1: 0x{0:X8} ({1})", _spell.AttributesEx, (SpellAtributeEx)_spell.AttributesEx); + if (_spell.AttributesEx2 != 0) + _rtb.AppendFormatLine("AttributesEx2: 0x{0:X8} ({1})", _spell.AttributesEx2, (SpellAtributeEx2)_spell.AttributesEx2); + if (_spell.AttributesEx3 != 0) + _rtb.AppendFormatLine("AttributesEx3: 0x{0:X8} ({1})", _spell.AttributesEx3, (SpellAtributeEx3)_spell.AttributesEx3); + if (_spell.AttributesEx4 != 0) + _rtb.AppendFormatLine("AttributesEx4: 0x{0:X8} ({1})", _spell.AttributesEx4, (SpellAtributeEx4)_spell.AttributesEx4); + if (_spell.AttributesEx5 != 0) + _rtb.AppendFormatLine("AttributesEx5: 0x{0:X8} ({1})", _spell.AttributesEx5, (SpellAtributeEx5)_spell.AttributesEx5); + if (_spell.AttributesEx6 != 0) + _rtb.AppendFormatLine("AttributesEx6: 0x{0:X8} ({1})", _spell.AttributesEx6, (SpellAtributeEx6)_spell.AttributesEx6); + if (_spell.AttributesEx7 != 0) + _rtb.AppendFormatLine("AttributesEx7: 0x{0:X8} ({1})", _spell.AttributesEx7, (SpellAtributeEx7)_spell.AttributesEx7); + + _rtb.AppendLine(_line); + + if (_spell.Targets != 0) + _rtb.AppendFormatLine("Targets Mask = 0x{0:X8} ({1})", _spell.Targets, (SpellCastTargetFlags)_spell.Targets); + + if (_spell.TargetCreatureType != 0) + _rtb.AppendFormatLine("Creature Type Mask = 0x{0:X8} ({1})", + _spell.TargetCreatureType, (CreatureTypeMask)_spell.TargetCreatureType); + + if (_spell.Stances != 0) + _rtb.AppendFormatLine("Stances: {0}", (ShapeshiftFormMask)_spell.Stances); + + if (_spell.StancesNot != 0) + _rtb.AppendFormatLine("Stances Not: {0}", (ShapeshiftFormMask)_spell.StancesNot); AppendSkillLine(); // reagents { - bool printedHeader = false; - for (int i = 0; i < spell.Reagent.Length; ++i) + var printedHeader = false; + for (var i = 0; i < _spell.Reagent.Length; ++i) { - if (spell.Reagent[i] == 0) + if (_spell.Reagent[i] == 0) continue; if (!printedHeader) { - rtb.AppendLine(); - rtb.Append("Reagents:"); + _rtb.AppendLine(); + _rtb.Append("Reagents:"); printedHeader = true; } - rtb.AppendFormat(" {0} x{1}", spell.Reagent[i], spell.ReagentCount[i]); + _rtb.AppendFormat(" {0} x{1}", _spell.Reagent[i], _spell.ReagentCount[i]); } if (printedHeader) - rtb.AppendLine(); + _rtb.AppendLine(); } - rtb.AppendFormatLine("Spell Level = {0}, base {1}, max {2}, maxTarget {3}", - spell.SpellLevel, spell.BaseLevel, spell.MaxLevel, spell.MaxTargetLevel); + _rtb.AppendFormatLine("Spell Level = {0}, base {1}, max {2}, maxTarget {3}", + _spell.SpellLevel, _spell.BaseLevel, _spell.MaxLevel, _spell.MaxTargetLevel); - if (spell.EquippedItemClass != -1) + if (_spell.EquippedItemClass != -1) { - rtb.AppendFormatLine("EquippedItemClass = {0} ({1})", spell.EquippedItemClass, (ItemClass)spell.EquippedItemClass); + _rtb.AppendFormatLine("EquippedItemClass = {0} ({1})", _spell.EquippedItemClass, (ItemClass)_spell.EquippedItemClass); - if (spell.EquippedItemSubClassMask != 0) + if (_spell.EquippedItemSubClassMask != 0) { - switch ((ItemClass)spell.EquippedItemClass) + switch ((ItemClass)_spell.EquippedItemClass) { case ItemClass.WEAPON: - rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", - spell.EquippedItemSubClassMask, (ItemSubClassWeaponMask)spell.EquippedItemSubClassMask); + _rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", + _spell.EquippedItemSubClassMask, (ItemSubClassWeaponMask)_spell.EquippedItemSubClassMask); break; case ItemClass.ARMOR: - rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", - spell.EquippedItemSubClassMask, (ItemSubClassArmorMask)spell.EquippedItemSubClassMask); + _rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", + _spell.EquippedItemSubClassMask, (ItemSubClassArmorMask)_spell.EquippedItemSubClassMask); break; case ItemClass.MISC: - rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", - spell.EquippedItemSubClassMask, (ItemSubClassMiscMask)spell.EquippedItemSubClassMask); + _rtb.AppendFormatLine(" SubClass mask 0x{0:X8} ({1})", + _spell.EquippedItemSubClassMask, (ItemSubClassMiscMask)_spell.EquippedItemSubClassMask); break; } } - if (spell.EquippedItemInventoryTypeMask != 0) - rtb.AppendFormatLine(" InventoryType mask = 0x{0:X8} ({1})", - spell.EquippedItemInventoryTypeMask, (InventoryTypeMask)spell.EquippedItemInventoryTypeMask); + if (_spell.EquippedItemInventoryTypeMask != 0) + _rtb.AppendFormatLine(" InventoryType mask = 0x{0:X8} ({1})", + _spell.EquippedItemInventoryTypeMask, (InventoryTypeMask)_spell.EquippedItemInventoryTypeMask); } - rtb.AppendLine(); - rtb.AppendFormatLine("Category = {0}", spell.Category); - rtb.AppendFormatLine("DispelType = {0} ({1})", spell.Dispel, (DispelType)spell.Dispel); - rtb.AppendFormatLine("Mechanic = {0} ({1})", spell.Mechanic, (Mechanics)spell.Mechanic); + _rtb.AppendLine(); + _rtb.AppendFormatLine("Category = {0}", _spell.Category); + _rtb.AppendFormatLine("DispelType = {0} ({1})", _spell.Dispel, (DispelType)_spell.Dispel); + _rtb.AppendFormatLine("Mechanic = {0} ({1})", _spell.Mechanic, (Mechanics)_spell.Mechanic); - rtb.AppendLine(spell.Range); + _rtb.AppendLine(_spell.Range); - rtb.AppendFormatLineIfNotNull("Speed {0:F}", spell.Speed); - rtb.AppendFormatLineIfNotNull("Stackable up to {0}", spell.StackAmount); + _rtb.AppendFormatLineIfNotNull("Speed {0:F}", _spell.Speed); + _rtb.AppendFormatLineIfNotNull("Stackable up to {0}", _spell.StackAmount); - rtb.AppendLine(spell.CastTime); + _rtb.AppendLine(_spell.CastTime); - if (spell.RecoveryTime != 0 || spell.CategoryRecoveryTime != 0 || spell.StartRecoveryCategory != 0) + if (_spell.RecoveryTime != 0 || _spell.CategoryRecoveryTime != 0 || _spell.StartRecoveryCategory != 0) { - rtb.AppendFormatLine("RecoveryTime: {0} ms, CategoryRecoveryTime: {1} ms", spell.RecoveryTime, spell.CategoryRecoveryTime); - rtb.AppendFormatLine("StartRecoveryCategory = {0}, StartRecoveryTime = {1:F} ms", spell.StartRecoveryCategory, spell.StartRecoveryTime); + _rtb.AppendFormatLine("RecoveryTime: {0} ms, CategoryRecoveryTime: {1} ms", _spell.RecoveryTime, _spell.CategoryRecoveryTime); + _rtb.AppendFormatLine("StartRecoveryCategory = {0}, StartRecoveryTime = {1:F} ms", _spell.StartRecoveryCategory, _spell.StartRecoveryTime); } - rtb.AppendLine(spell.Duration); + _rtb.AppendLine(_spell.Duration); - if (spell.ManaCost != 0 || spell.ManaCostPercentage != 0) + if (_spell.ManaCost != 0 || _spell.ManaCostPercentage != 0) { - rtb.AppendFormat("Power {0}, Cost {1}", - (Powers)spell.PowerType, spell.ManaCost == 0 ? spell.ManaCostPercentage.ToString() + " %" : spell.ManaCost.ToString()); - rtb.AppendFormatIfNotNull(" + lvl * {0}", spell.ManaCostPerlevel); - rtb.AppendFormatIfNotNull(" + {0} Per Second", spell.ManaPerSecond); - rtb.AppendFormatIfNotNull(" + lvl * {0}", spell.ManaPerSecondPerLevel); - rtb.AppendLine(); + _rtb.AppendFormat("Power {0}, Cost {1}", + (Powers)_spell.PowerType, _spell.ManaCost == 0 ? _spell.ManaCostPercentage + " %" : _spell.ManaCost.ToString()); + _rtb.AppendFormatIfNotNull(" + lvl * {0}", _spell.ManaCostPerlevel); + _rtb.AppendFormatIfNotNull(" + {0} Per Second", _spell.ManaPerSecond); + _rtb.AppendFormatIfNotNull(" + lvl * {0}", _spell.ManaPerSecondPerLevel); + _rtb.AppendLine(); } - rtb.AppendFormatLine("Interrupt Flags: 0x{0:X8}, AuraIF 0x{1:X8}, ChannelIF 0x{2:X8}", - spell.InterruptFlags, spell.AuraInterruptFlags, spell.ChannelInterruptFlags); + _rtb.AppendFormatLine("Interrupt Flags: 0x{0:X8}, AuraIF 0x{1:X8}, ChannelIF 0x{2:X8}", + _spell.InterruptFlags, _spell.AuraInterruptFlags, _spell.ChannelInterruptFlags); - if (spell.CasterAuraState != 0) - rtb.AppendFormatLine("CasterAuraState = {0} ({1})", spell.CasterAuraState, (AuraState)spell.CasterAuraState); + if (_spell.CasterAuraState != 0) + _rtb.AppendFormatLine("CasterAuraState = {0} ({1})", _spell.CasterAuraState, (AuraState)_spell.CasterAuraState); - if (spell.TargetAuraState != 0) - rtb.AppendFormatLine("TargetAuraState = {0} ({1})", spell.TargetAuraState, (AuraState)spell.TargetAuraState); + if (_spell.TargetAuraState != 0) + _rtb.AppendFormatLine("TargetAuraState = {0} ({1})", _spell.TargetAuraState, (AuraState)_spell.TargetAuraState); - if (spell.CasterAuraStateNot != 0) - rtb.AppendFormatLine("CasterAuraStateNot = {0} ({1})", spell.CasterAuraStateNot, (AuraState)spell.CasterAuraStateNot); + if (_spell.CasterAuraStateNot != 0) + _rtb.AppendFormatLine("CasterAuraStateNot = {0} ({1})", _spell.CasterAuraStateNot, (AuraState)_spell.CasterAuraStateNot); - if (spell.TargetAuraStateNot != 0) - rtb.AppendFormatLine("TargetAuraStateNot = {0} ({1})", spell.TargetAuraStateNot, (AuraState)spell.TargetAuraStateNot); + if (_spell.TargetAuraStateNot != 0) + _rtb.AppendFormatLine("TargetAuraStateNot = {0} ({1})", _spell.TargetAuraStateNot, (AuraState)_spell.TargetAuraStateNot); AppendSpellAura(); - rtb.AppendFormatLineIfNotNull("Requires Spell Focus {0}", spell.RequiresSpellFocus); + _rtb.AppendFormatLineIfNotNull("Requires Spell Focus {0}", _spell.RequiresSpellFocus); - if (spell.ProcFlags != 0) + if (_spell.ProcFlags != 0) { - rtb.SetBold(); - rtb.AppendFormatLine("Proc flag 0x{0:X8}, chance = {1}, charges - {2}", - spell.ProcFlags, spell.ProcChance, spell.ProcCharges); - rtb.SetDefaultStyle(); - rtb.AppendFormatLine(_line); - rtb.AppendText(spell.ProcInfo); + _rtb.SetBold(); + _rtb.AppendFormatLine("Proc flag 0x{0:X8}, chance = {1}, charges - {2}", + _spell.ProcFlags, _spell.ProcChance, _spell.ProcCharges); + _rtb.SetDefaultStyle(); + _rtb.AppendFormatLine(_line); + _rtb.AppendText(_spell.ProcInfo); } else { - rtb.AppendFormatLine("Chance = {0}, charges - {1}", spell.ProcChance, spell.ProcCharges); + _rtb.AppendFormatLine("Chance = {0}, charges - {1}", _spell.ProcChance, _spell.ProcCharges); } AppendSpellEffectInfo(); @@ -210,10 +211,10 @@ private void ViewSpellInfo() private void AppendSkillLine() { - var query = from skillLineAbility in DBC.SkillLineAbility - join skillLine in DBC.SkillLine + var query = from skillLineAbility in DBC.DBC.SkillLineAbility + join skillLine in DBC.DBC.SkillLine on skillLineAbility.Value.SkillId equals skillLine.Key - where skillLineAbility.Value.SpellId == spell.ID + where skillLineAbility.Value.SpellId == _spell.ID select new { skillLineAbility, @@ -226,240 +227,241 @@ on skillLineAbility.Value.SkillId equals skillLine.Key var skill = query.First().skillLineAbility.Value; var line = query.First().skillLine.Value; - rtb.AppendFormatLine("Skill (Id {0}) \"{1}\"", skill.SkillId, line.Name); - rtb.AppendFormat(" ReqSkillValue {0}", skill.Req_skill_value); + _rtb.AppendFormatLine("Skill (Id {0}) \"{1}\"", skill.SkillId, line.Name); + _rtb.AppendFormat(" ReqSkillValue {0}", skill.ReqSkillValue); - rtb.AppendFormat(", Forward Spell = {0}, MinMaxValue ({1}, {2})", skill.Forward_spellid, skill.Min_value, skill.Max_value); - rtb.AppendFormat(", CharacterPoints ({0}, {1})", skill.CharacterPoints[0], skill.CharacterPoints[1]); + _rtb.AppendFormat(", Forward Spell = {0}, MinMaxValue ({1}, {2})", skill.ForwardSpellid, skill.MinValue, skill.MaxValue); + _rtb.AppendFormat(", CharacterPoints ({0}, {1})", skill.CharacterPoints[0], skill.CharacterPoints[1]); } private void AppendSpellEffectInfo() { - rtb.AppendLine(_line); + _rtb.AppendLine(_line); - for (int EFFECT_INDEX = 0; EFFECT_INDEX < DBC.MAX_EFFECT_INDEX; EFFECT_INDEX++) + for (var effectIndex = 0; effectIndex < DBC.DBC.MaxEffectIndex; effectIndex++) { - rtb.SetBold(); - if ((SpellEffects)spell.Effect[EFFECT_INDEX] == SpellEffects.NO_SPELL_EFFECT) + _rtb.SetBold(); + if ((SpellEffects)_spell.Effect[effectIndex] == SpellEffects.NO_SPELL_EFFECT) { - rtb.AppendFormatLine("Effect {0}: NO EFFECT", EFFECT_INDEX); - rtb.AppendLine(); + _rtb.AppendFormatLine("Effect {0}: NO EFFECT", effectIndex); + _rtb.AppendLine(); continue; } - rtb.AppendFormatLine("Effect {0}: Id {1} ({2})", EFFECT_INDEX, spell.Effect[EFFECT_INDEX], (SpellEffects)spell.Effect[EFFECT_INDEX]); - rtb.SetDefaultStyle(); - rtb.AppendFormat("BasePoints = {0}", spell.EffectBasePoints[EFFECT_INDEX] + 1); + _rtb.AppendFormatLine("Effect {0}: Id {1} ({2})", effectIndex, _spell.Effect[effectIndex], (SpellEffects)_spell.Effect[effectIndex]); + _rtb.SetDefaultStyle(); + _rtb.AppendFormat("BasePoints = {0}", _spell.EffectBasePoints[effectIndex] + 1); - if (spell.EffectRealPointsPerLevel[EFFECT_INDEX] != 0) - rtb.AppendFormat(" + Level * {0:F}", spell.EffectRealPointsPerLevel[EFFECT_INDEX]); + if (_spell.EffectRealPointsPerLevel[effectIndex] != 0) + _rtb.AppendFormat(" + Level * {0:F}", _spell.EffectRealPointsPerLevel[effectIndex]); // WTF ? 1 = spell.EffectBaseDice[i] - if (1 < spell.EffectDieSides[EFFECT_INDEX]) + if (1 < _spell.EffectDieSides[effectIndex]) { - if (spell.EffectRealPointsPerLevel[EFFECT_INDEX] != 0) - rtb.AppendFormat(" to {0} + lvl * {1:F}", - spell.EffectBasePoints[EFFECT_INDEX] + 1 + spell.EffectDieSides[EFFECT_INDEX], spell.EffectRealPointsPerLevel[EFFECT_INDEX]); + if (_spell.EffectRealPointsPerLevel[effectIndex] != 0) + _rtb.AppendFormat(" to {0} + lvl * {1:F}", + _spell.EffectBasePoints[effectIndex] + 1 + _spell.EffectDieSides[effectIndex], _spell.EffectRealPointsPerLevel[effectIndex]); else - rtb.AppendFormat(" to {0}", spell.EffectBasePoints[EFFECT_INDEX] + 1 + spell.EffectDieSides[EFFECT_INDEX]); + _rtb.AppendFormat(" to {0}", _spell.EffectBasePoints[effectIndex] + 1 + _spell.EffectDieSides[effectIndex]); } - rtb.AppendFormatIfNotNull(" + combo * {0:F}", spell.EffectPointsPerComboPoint[EFFECT_INDEX]); + _rtb.AppendFormatIfNotNull(" + combo * {0:F}", _spell.EffectPointsPerComboPoint[effectIndex]); - if (spell.DmgMultiplier[EFFECT_INDEX] != 1.0f) - rtb.AppendFormat(" x {0:F}", spell.DmgMultiplier[EFFECT_INDEX]); + if (_spell.DmgMultiplier[effectIndex] != 1.0f) + _rtb.AppendFormat(" x {0:F}", _spell.DmgMultiplier[effectIndex]); - rtb.AppendFormatIfNotNull(" Multiple = {0:F}", spell.EffectMultipleValue[EFFECT_INDEX]); - rtb.AppendLine(); + _rtb.AppendFormatIfNotNull(" Multiple = {0:F}", _spell.EffectMultipleValue[effectIndex]); + _rtb.AppendLine(); - rtb.AppendFormatLine("Targets ({0}, {1}) ({2}, {3})", - spell.EffectImplicitTargetA[EFFECT_INDEX], spell.EffectImplicitTargetB[EFFECT_INDEX], - (Targets)spell.EffectImplicitTargetA[EFFECT_INDEX], (Targets)spell.EffectImplicitTargetB[EFFECT_INDEX]); + _rtb.AppendFormatLine("Targets ({0}, {1}) ({2}, {3})", + _spell.EffectImplicitTargetA[effectIndex], _spell.EffectImplicitTargetB[effectIndex], + (Targets)_spell.EffectImplicitTargetA[effectIndex], (Targets)_spell.EffectImplicitTargetB[effectIndex]); - AuraModTypeName(EFFECT_INDEX); + AuraModTypeName(effectIndex); - uint[] ClassMask = new uint[3]; + var classMask = new uint[3]; - switch (EFFECT_INDEX) + switch (effectIndex) { - case 0: ClassMask = spell.EffectSpellClassMaskA; break; - case 1: ClassMask = spell.EffectSpellClassMaskB; break; - case 2: ClassMask = spell.EffectSpellClassMaskC; break; + case 0: classMask = _spell.EffectSpellClassMaskA; break; + case 1: classMask = _spell.EffectSpellClassMaskB; break; + case 2: classMask = _spell.EffectSpellClassMaskC; break; } - if (ClassMask[0] != 0 || ClassMask[1] != 0 || ClassMask[2] != 0) + if (classMask[0] != 0 || classMask[1] != 0 || classMask[2] != 0) { - rtb.AppendFormatLine("SpellClassMask = {0:X8} {1:X8} {2:X8}", ClassMask[0], ClassMask[1], ClassMask[2]); + _rtb.AppendFormatLine("SpellClassMask = {0:X8} {1:X8} {2:X8}", classMask[0], classMask[1], classMask[2]); - var query = from Spell in DBC.Spell.Values - where Spell.SpellFamilyName == spell.SpellFamilyName && Spell.SpellFamilyFlags.ContainsElement(ClassMask) - join sk in DBC.SkillLineAbility on Spell.ID equals sk.Value.SpellId into temp - from Skill in temp.DefaultIfEmpty() + var query = from spell in DBC.DBC.Spell.Values + where spell.SpellFamilyName == _spell.SpellFamilyName && spell.SpellFamilyFlags.ContainsElement(classMask) + join sk in DBC.DBC.SkillLineAbility on spell.ID equals sk.Value.SpellId into temp + from skill in temp.DefaultIfEmpty() select new { - SpellID = Spell.ID, - SpellName = Spell.SpellNameRank, - SkillId = Skill.Value.SkillId + SpellID = spell.ID, + SpellName = spell.SpellNameRank, skill.Value.SkillId }; foreach (var row in query) { if (row.SkillId > 0) { - rtb.SelectionColor = Color.Blue; - rtb.AppendFormatLine("\t+ {0} - {1}", row.SpellID, row.SpellName); + _rtb.SelectionColor = Color.Blue; + _rtb.AppendFormatLine("\t+ {0} - {1}", row.SpellID, row.SpellName); } else { - rtb.SelectionColor = Color.Red; - rtb.AppendFormatLine("\t- {0} - {1}", row.SpellID, row.SpellName); + _rtb.SelectionColor = Color.Red; + _rtb.AppendFormatLine("\t- {0} - {1}", row.SpellID, row.SpellName); } - rtb.SelectionColor = Color.Black; + _rtb.SelectionColor = Color.Black; } } - rtb.AppendFormatLineIfNotNull("{0}", spell.GetRadius(EFFECT_INDEX)); + _rtb.AppendFormatLineIfNotNull("{0}", _spell.GetRadius(effectIndex)); // append trigger spell - uint trigger = spell.EffectTriggerSpell[EFFECT_INDEX]; + var trigger = _spell.EffectTriggerSpell[effectIndex]; if (trigger != 0) { - if (DBC.Spell.ContainsKey(trigger)) + if (DBC.DBC.Spell.ContainsKey(trigger)) { - SpellEntry triggerSpell = DBC.Spell[trigger]; - rtb.SetStyle(Color.Blue, FontStyle.Bold); - rtb.AppendFormatLine(" Trigger spell ({0}) {1}. Chance = {2}", trigger, triggerSpell.SpellNameRank, spell.ProcChance); - rtb.AppendFormatLineIfNotNull(" Description: {0}", triggerSpell.Description); - rtb.AppendFormatLineIfNotNull(" ToolTip: {0}", triggerSpell.ToolTip); - rtb.SetDefaultStyle(); + var triggerSpell = DBC.DBC.Spell[trigger]; + _rtb.SetStyle(Color.Blue, FontStyle.Bold); + _rtb.AppendFormatLine(" Trigger spell ({0}) {1}. Chance = {2}", trigger, triggerSpell.SpellNameRank, _spell.ProcChance); + _rtb.AppendFormatLineIfNotNull(" Description: {0}", triggerSpell.Description); + _rtb.AppendFormatLineIfNotNull(" ToolTip: {0}", triggerSpell.ToolTip); + _rtb.SetDefaultStyle(); if (triggerSpell.ProcFlags != 0) { - rtb.AppendFormatLine("Charges - {0}", triggerSpell.ProcCharges); - rtb.AppendLine(_line); - rtb.AppendLine(triggerSpell.ProcInfo); - rtb.AppendLine(_line); + _rtb.AppendFormatLine("Charges - {0}", triggerSpell.ProcCharges); + _rtb.AppendLine(_line); + _rtb.AppendLine(triggerSpell.ProcInfo); + _rtb.AppendLine(_line); } } else { - rtb.AppendFormatLine("Trigger spell ({0}) Not found, Chance = {1}", trigger, spell.ProcChance); + _rtb.AppendFormatLine("Trigger spell ({0}) Not found, Chance = {1}", trigger, _spell.ProcChance); } } - rtb.AppendFormatLineIfNotNull("EffectChainTarget = {0}", spell.EffectChainTarget[EFFECT_INDEX]); - rtb.AppendFormatLineIfNotNull("EffectItemType = {0}", spell.EffectItemType[EFFECT_INDEX]); + _rtb.AppendFormatLineIfNotNull("EffectChainTarget = {0}", _spell.EffectChainTarget[effectIndex]); + _rtb.AppendFormatLineIfNotNull("EffectItemType = {0}", _spell.EffectItemType[effectIndex]); - if((Mechanics)spell.EffectMechanic[EFFECT_INDEX] != Mechanics.MECHANIC_NONE) - rtb.AppendFormatLine("Effect Mechanic = {0} ({1})", spell.EffectMechanic[EFFECT_INDEX], (Mechanics)spell.EffectMechanic[EFFECT_INDEX]); + if((Mechanics)_spell.EffectMechanic[effectIndex] != Mechanics.MECHANIC_NONE) + _rtb.AppendFormatLine("Effect Mechanic = {0} ({1})", _spell.EffectMechanic[effectIndex], (Mechanics)_spell.EffectMechanic[effectIndex]); - rtb.AppendLine(); + _rtb.AppendLine(); } } private void AppendSpellAura() { - if (spell.CasterAuraSpell != 0) + if (_spell.CasterAuraSpell != 0) { - if(DBC.Spell.ContainsKey(spell.CasterAuraSpell)) - rtb.AppendFormatLine(" Caster Aura Spell ({0}) {1}", spell.CasterAuraSpell, DBC.Spell[spell.CasterAuraSpell].SpellName); + if (DBC.DBC.Spell.ContainsKey(_spell.CasterAuraSpell)) + _rtb.AppendFormatLine(" Caster Aura Spell ({0}) {1}", _spell.CasterAuraSpell, DBC.DBC.Spell[_spell.CasterAuraSpell].SpellName); else - rtb.AppendFormatLine(" Caster Aura Spell ({0}) ?????", spell.CasterAuraSpell); + _rtb.AppendFormatLine(" Caster Aura Spell ({0}) ?????", _spell.CasterAuraSpell); } - if (spell.TargetAuraSpell != 0) + if (_spell.TargetAuraSpell != 0) { - if(DBC.Spell.ContainsKey(spell.TargetAuraSpell)) - rtb.AppendFormatLine(" Target Aura Spell ({0}) {1}", spell.TargetAuraSpell, DBC.Spell[spell.TargetAuraSpell].SpellName); + if (DBC.DBC.Spell.ContainsKey(_spell.TargetAuraSpell)) + _rtb.AppendFormatLine(" Target Aura Spell ({0}) {1}", _spell.TargetAuraSpell, DBC.DBC.Spell[_spell.TargetAuraSpell].SpellName); else - rtb.AppendFormatLine(" Target Aura Spell ({0}) ?????", spell.TargetAuraSpell); + _rtb.AppendFormatLine(" Target Aura Spell ({0}) ?????", _spell.TargetAuraSpell); } - if (spell.ExcludeCasterAuraSpell != 0) + if (_spell.ExcludeCasterAuraSpell != 0) { - if(DBC.Spell.ContainsKey(spell.ExcludeCasterAuraSpell)) - rtb.AppendFormatLine(" Ex Caster Aura Spell ({0}) {1}", spell.ExcludeCasterAuraSpell, DBC.Spell[spell.ExcludeCasterAuraSpell].SpellName); + if (DBC.DBC.Spell.ContainsKey(_spell.ExcludeCasterAuraSpell)) + _rtb.AppendFormatLine(" Ex Caster Aura Spell ({0}) {1}", _spell.ExcludeCasterAuraSpell, DBC.DBC.Spell[_spell.ExcludeCasterAuraSpell].SpellName); else - rtb.AppendFormatLine(" Ex Caster Aura Spell ({0}) ?????", spell.ExcludeCasterAuraSpell); + _rtb.AppendFormatLine(" Ex Caster Aura Spell ({0}) ?????", _spell.ExcludeCasterAuraSpell); } - if (spell.ExcludeTargetAuraSpell != 0) + // ReSharper disable InvertIf + if (_spell.ExcludeTargetAuraSpell != 0) { - if(DBC.Spell.ContainsKey(spell.ExcludeTargetAuraSpell)) - rtb.AppendFormatLine(" Ex Target Aura Spell ({0}) {1}", spell.ExcludeTargetAuraSpell, DBC.Spell[spell.ExcludeTargetAuraSpell].SpellName); + if (DBC.DBC.Spell.ContainsKey(_spell.ExcludeTargetAuraSpell)) + _rtb.AppendFormatLine(" Ex Target Aura Spell ({0}) {1}", _spell.ExcludeTargetAuraSpell, DBC.DBC.Spell[_spell.ExcludeTargetAuraSpell].SpellName); else - rtb.AppendFormatLine(" Ex Target Aura Spell ({0}) ?????", spell.ExcludeTargetAuraSpell); + _rtb.AppendFormatLine(" Ex Target Aura Spell ({0}) ?????", _spell.ExcludeTargetAuraSpell); } + // ReSharper enable InvertIf } private void AuraModTypeName(int index) { - AuraType aura = (AuraType)spell.EffectApplyAuraName[index]; - int misc = spell.EffectMiscValue[index]; + var aura = (AuraType)_spell.EffectApplyAuraName[index]; + var misc = _spell.EffectMiscValue[index]; - if (spell.EffectApplyAuraName[index] == 0) + if (_spell.EffectApplyAuraName[index] == 0) { - rtb.AppendFormatLineIfNotNull("EffectMiscValueA = {0}", spell.EffectMiscValue[index]); - rtb.AppendFormatLineIfNotNull("EffectMiscValueB = {0}", spell.EffectMiscValueB[index]); - rtb.AppendFormatLineIfNotNull("EffectAmplitude = {0}", spell.EffectAmplitude[index]); + _rtb.AppendFormatLineIfNotNull("EffectMiscValueA = {0}", _spell.EffectMiscValue[index]); + _rtb.AppendFormatLineIfNotNull("EffectMiscValueB = {0}", _spell.EffectMiscValueB[index]); + _rtb.AppendFormatLineIfNotNull("EffectAmplitude = {0}", _spell.EffectAmplitude[index]); return; } - rtb.AppendFormat("Aura Id {0:D} ({0})", aura); - rtb.AppendFormat(", value = {0}", spell.EffectBasePoints[index] + 1); - rtb.AppendFormat(", misc = {0} (", misc); + _rtb.AppendFormat("Aura Id {0:D} ({0})", aura); + _rtb.AppendFormat(", value = {0}", _spell.EffectBasePoints[index] + 1); + _rtb.AppendFormat(", misc = {0} (", misc); switch (aura) { case AuraType.SPELL_AURA_MOD_STAT: - rtb.Append((UnitMods)misc); + _rtb.Append((UnitMods)misc); break; case AuraType.SPELL_AURA_MOD_RATING: - rtb.Append((CombatRating)misc); + _rtb.Append((CombatRating)misc); break; case AuraType.SPELL_AURA_ADD_FLAT_MODIFIER: case AuraType.SPELL_AURA_ADD_PCT_MODIFIER: - rtb.Append((SpellModOp)misc); + _rtb.Append((SpellModOp)misc); break; // todo: more case default: - rtb.Append(misc); + _rtb.Append(misc); break; } - rtb.AppendFormat("), miscB = {0}", spell.EffectMiscValueB[index]); - rtb.AppendFormatLine(", periodic = {0}", spell.EffectAmplitude[index]); + _rtb.AppendFormat("), miscB = {0}", _spell.EffectMiscValueB[index]); + _rtb.AppendFormatLine(", periodic = {0}", _spell.EffectAmplitude[index]); switch (aura) { case AuraType.SPELL_AURA_OVERRIDE_SPELLS: - if (!DBC.OverrideSpellData.ContainsKey((uint)misc)) + if (!DBC.DBC.OverrideSpellData.ContainsKey((uint)misc)) { - rtb.SetStyle(Color.Red, FontStyle.Bold); - rtb.AppendFormatLine("Cannot find key {0} in OverrideSpellData.dbc", (uint)misc); + _rtb.SetStyle(Color.Red, FontStyle.Bold); + _rtb.AppendFormatLine("Cannot find key {0} in OverrideSpellData.dbc", (uint)misc); } else { - rtb.AppendLine(); - rtb.SetStyle(Color.DarkRed, FontStyle.Bold); - rtb.AppendLine("Overriding Spells:"); - OverrideSpellDataEntry Override = DBC.OverrideSpellData[(uint)misc]; - for (int i = 0; i < 10; ++i) + _rtb.AppendLine(); + _rtb.SetStyle(Color.DarkRed, FontStyle.Bold); + _rtb.AppendLine("Overriding Spells:"); + var @override = DBC.DBC.OverrideSpellData[(uint)misc]; + for (var i = 0; i < 10; ++i) { - if (Override.Spells[i] == 0) + if (@override.Spells[i] == 0) continue; - rtb.SetStyle(Color.DarkBlue, FontStyle.Regular); - rtb.AppendFormatLine("\t - #{0} ({1}) {2}", i + 1, Override.Spells[i], - DBC.Spell.ContainsKey(Override.Spells[i]) ? DBC.Spell[Override.Spells[i]].SpellName : "?????"); + _rtb.SetStyle(Color.DarkBlue, FontStyle.Regular); + _rtb.AppendFormatLine("\t - #{0} ({1}) {2}", i + 1, @override.Spells[i], + DBC.DBC.Spell.ContainsKey(@override.Spells[i]) ? DBC.DBC.Spell[@override.Spells[i]].SpellName : "?????"); } - rtb.AppendLine(); + _rtb.AppendLine(); } break; case AuraType.SPELL_AURA_SCREEN_EFFECT: - rtb.SetStyle(Color.DarkBlue, FontStyle.Bold); - rtb.AppendFormatLine("ScreenEffect: {0}", - DBC.ScreenEffect.ContainsKey((uint)misc) ? DBC.ScreenEffect[(uint)misc].Name : "?????"); + _rtb.SetStyle(Color.DarkBlue, FontStyle.Bold); + _rtb.AppendFormatLine("ScreenEffect: {0}", + DBC.DBC.ScreenEffect.ContainsKey((uint)misc) ? DBC.DBC.ScreenEffect[(uint)misc].Name : "?????"); break; default: break; @@ -468,17 +470,17 @@ private void AuraModTypeName(int index) private void AppendDifficultyInfo() { - uint difficultyId = spell.SpellDifficultyId; + var difficultyId = _spell.SpellDifficultyId; if (difficultyId == 0) return; - if (!DBC.SpellDifficulty.ContainsKey(difficultyId)) + if (!DBC.DBC.SpellDifficulty.ContainsKey(difficultyId)) { - rtb.AppendFormatLine("Cannot find difficulty overrides for id {0} in SpellDifficulty.dbc!", difficultyId); + _rtb.AppendFormatLine("Cannot find difficulty overrides for id {0} in SpellDifficulty.dbc!", difficultyId); return; } - string[] modeNames = new string[] + var modeNames = new[] { "Normal 10", "Normal 25", @@ -486,44 +488,44 @@ private void AppendDifficultyInfo() "Heroic 25", }; - rtb.SetBold(); - rtb.AppendLine("Spell difficulty Ids:"); + _rtb.SetBold(); + _rtb.AppendLine("Spell difficulty Ids:"); - SpellDifficultyEntry difficulty = DBC.SpellDifficulty[difficultyId]; - for (int i = 0; i < 4; ++i) + var difficulty = DBC.DBC.SpellDifficulty[difficultyId]; + for (var i = 0; i < 4; ++i) { if (difficulty.SpellId[i] <= 0) continue; - rtb.AppendFormatLine("{0}: {1}", modeNames[i], difficulty.SpellId[i]); + _rtb.AppendFormatLine("{0}: {1}", modeNames[i], difficulty.SpellId[i]); } } private void AppendItemInfo() { - if (!MySQLConnect.Connected) + if (!MySqlConnection.Connected) return; - var items = from item in DBC.ItemTemplate - where item.SpellID.ContainsElement(spell.ID) + var items = from item in DBC.DBC.ItemTemplate + where item.SpellId.ContainsElement(_spell.ID) select item; if (items.Count() == 0) return; - rtb.AppendLine(_line); - rtb.SetStyle(Color.Blue, FontStyle.Bold); - rtb.AppendLine("Items used this spell:"); - rtb.SetDefaultStyle(); + _rtb.AppendLine(_line); + _rtb.SetStyle(Color.Blue, FontStyle.Bold); + _rtb.AppendLine("Items used this spell:"); + _rtb.SetDefaultStyle(); - foreach (Item item in items) + foreach (var item in items) { - string name = item.LocalesName == string.Empty ? item.Name : item.LocalesName; - string desc = item.LocalesDescription == string.Empty ? item.Description : item.LocalesDescription; + var name = item.LocalesName == string.Empty ? item.Name : item.LocalesName; + var desc = item.LocalesDescription == string.Empty ? item.Description : item.LocalesDescription; desc = desc == string.Empty ? string.Empty : string.Format("({0})", desc); - rtb.AppendFormatLine(@" {0} - {1} {2} ", item.Entry, name, desc); + _rtb.AppendFormatLine(@" {0} - {1} {2} ", item.Entry, name, desc); } } } diff --git a/SpellWork/SpellWork.csproj b/SpellWork/SpellWork.csproj index 9ee59d8b..139d0c5a 100644 --- a/SpellWork/SpellWork.csproj +++ b/SpellWork/SpellWork.csproj @@ -106,7 +106,7 @@ - + Form From 9371f317623896fd8fc199e54679ec8642695535 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 26 May 2011 22:21:21 +0200 Subject: [PATCH 10/58] Added more spell attributes --- SpellWork/Spell/SpellEnums.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index d43268a2..c367c496 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -806,7 +806,7 @@ public enum Mechanics MECHANIC_FEAR = 5, MECHANIC_GRIP = 6, MECHANIC_ROOT = 7, - MECHANIC_PACIFY = 8, //0 spells use this mechanic + MECHANIC_SLOW_ATTACK = 8, MECHANIC_SILENCE = 9, MECHANIC_SLEEP = 10, MECHANIC_SNARE = 11, @@ -1178,8 +1178,8 @@ public enum SpellAtribute : uint SPELL_ATTR0_UNK4 = 0x00000010, // 4 SPELL_ATTR0_TRADESPELL = 0x00000020, // 5 trade spells, will be added by client to a sublist of profession spell SPELL_ATTR0_PASSIVE = 0x00000040, // 6 Passive spell - SPELL_ATTR0_UNK7 = 0x00000080, // 7 visible? - SPELL_ATTR0_UNK8 = 0x00000100, // 8 + SPELL_ATTR0_HIDDEN_CLIENTSIDE = 0x00000080, // 7 Spells with this attribute are not visible in spellbook or aura bar + SPELL_ATTR0_HIDE_IN_COMBAT_LOG = 0x00000100, // 8 This attribite controls whether spell appears in combat logs SPELL_ATTR0_UNK9 = 0x00000200, // 9 SPELL_ATTR0_UNK10 = 0x00000400, // 10 on next swing 2 SPELL_ATTR0_UNK11 = 0x00000800, // 11 @@ -1306,7 +1306,7 @@ public enum SpellAtributeEx3 : uint SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag SPELL_ATTR3_UNK16 = 0x00010000, // 16 no triggers effects that trigger on casting a spell?? (15290 - 2.2ptr change) SPELL_ATTR3_NO_INITIAL_AGGRO = 0x00020000, // 17 Soothe Animal, 39758, Mind Soothe - SPELL_ATTR3_UNK18 = 0x00040000, // 18 added to Explosive Trap Effect 3.3.0, removed from Mutilate 3.3.0 + SPELL_ATTR3_IGNORE_HIT_RESULT = 0x00040000, // 18 Spell should always hit its target SPELL_ATTR3_DISABLE_PROC = 0x00080000, // 19 during aura proc no spells can trigger (20178, 20375) SPELL_ATTR3_DEATH_PERSISTENT = 0x00100000, // 20 Death persistent spells SPELL_ATTR3_UNK21 = 0x00200000, // 21 @@ -1341,7 +1341,7 @@ public enum SpellAtributeEx4 : uint SPELL_ATTR4_UNK11 = 0x00000800, // 11 SPELL_ATTR4_UNK12 = 0x00001000, // 12 SPELL_ATTR4_UNK13 = 0x00002000, // 13 - SPELL_ATTR4_UNK14 = 0x00004000, // 14 + SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS = 0x00004000, // 14 doesn't break auras by damage from these spells SPELL_ATTR4_UNK15 = 0x00008000, // 15 SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16 not usable in arena SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 usable in arena @@ -1379,7 +1379,7 @@ public enum SpellAtributeEx5 : uint SPELL_ATTR5_UNK10 = 0x00000400, // 10 SPELL_ATTR5_UNK11 = 0x00000800, // 11 SPELL_ATTR5_UNK12 = 0x00001000, // 12 - SPELL_ATTR5_UNK13 = 0x00002000, // 13 + SPELL_ATTR5_HASTE_AFFECT_DURATION = 0x00002000, // 13 haste effects decrease duration of this SPELL_ATTR5_UNK14 = 0x00004000, // 14 SPELL_ATTR5_UNK15 = 0x00008000, // 15 SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK = 0x00010000, // 16 this allows spells with EquippedItemClass to affect spells from other items if the required item is equipped @@ -1452,8 +1452,8 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell. - SPELL_ATTR7_UNK8 = 0x00000100, // 8 Teleports, mounts and other spells. - SPELL_ATTR7_UNK9 = 0x00000200, // 9 Teleports, mounts and other spells. + SPELL_ATTR7_HORDE_ONLY = 0x00000100, // 8 Teleports, mounts and other spells. + SPELL_ATTR7_ALLIANCE_ONLY = 0x00000200, // 9 Teleports, mounts and other spells. SPELL_ATTR7_DISPEL_CHARGES = 0x00000400, // 10 Dispel and Spellsteal individual charges instead of whole aura. SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER = 0x00000800, // 11 Only non-player casts interrupt, though Feral Charge - Bear has it. SPELL_ATTR7_UNK12 = 0x00001000, // 12 Not set in 3.2.2a. From 370f96422311016d3fb8db3a5d433cee439270d3 Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 27 May 2011 19:37:04 +0200 Subject: [PATCH 11/58] Fixed flag setting --- SpellWork/Extensions/Extensions.cs | 2 +- SpellWork/Spell/SpellEnums.cs | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/SpellWork/Extensions/Extensions.cs b/SpellWork/Extensions/Extensions.cs index 8cd68895..c3ea0022 100644 --- a/SpellWork/Extensions/Extensions.cs +++ b/SpellWork/Extensions/Extensions.cs @@ -141,7 +141,7 @@ public static uint GetFlagsValue(this CheckedListBox name) { uint val = 0; for (var i = 0; i < name.CheckedIndices.Count; ++i) - val += 1U << (name.CheckedIndices[i] - 1); + val |= 1U << (name.CheckedIndices[i]); return val; } diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index c367c496..31f0b9d6 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -695,8 +695,6 @@ public enum Targets [Flags] public enum ProcFlags { - PROC_FLAG_NONE = 0x00000000, - PROC_FLAG_KILLED = 0x00000001, // 00 Killed by agressor - not sure about this flag PROC_FLAG_KILL = 0x00000002, // 01 Kill target (in most cases need XP/Honor reward) @@ -739,7 +737,7 @@ public enum ProcFlags [Flags] public enum ProcFlagsEx { - PROC_EX_NONE = 0x0000000, // If none can tigger on Hit/Crit only (passive spells MUST defined by SpellFamily flag) + // If none can tigger on Hit/Crit only (passive spells MUST defined by SpellFamily flag) PROC_EX_NORMAL_HIT = 0x0000001, // If set only from normal hit (only damage spells) PROC_EX_CRITICAL_HIT = 0x0000002, PROC_EX_MISS = 0x0000004, From 835eb062d7751057ab7eb218211728ef8ab2ab42 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 2 Jul 2011 12:48:17 +0200 Subject: [PATCH 12/58] Attribute updates --- SpellWork/Spell/SpellEnums.cs | 42 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 31f0b9d6..7dd8c4fd 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -578,8 +578,8 @@ public enum Targets NO_TARGET = 0, TARGET_UNIT_CASTER = 1, TARGET_UNIT_NEARBY_ENEMY = 2, - TARGET_UNIT_NEARBY_ALLY = 3, - TARGET_UNIT_NEARBY_ALLY_UNK = 4, + TARGET_UNIT_NEARBY_PARTY = 3, + TARGET_UNIT_NEARBY_ALLY = 4, TARGET_UNIT_PET = 5, TARGET_UNIT_TARGET_ENEMY = 6, TARGET_UNIT_AREA_ENTRY_SRC = 7, @@ -667,7 +667,7 @@ public enum Targets TARGET_DEST_DEST = 87, TARGET_DEST_DYNOBJ_NONE = 88, TARGET_DEST_TRAJ = 89, - TARGET_UNIT_TARGET_PUPPET = 90, + TARGET_UNIT_TARGET_MINIPET = 90, TARGET_DEST_DEST_RANDOM_DIR_DIST = 91, TARGET_UNIT_SUMMONER = 92, TARGET_CORPSE_AREA_ENEMY_PLAYER_SRC = 93, @@ -840,7 +840,7 @@ public enum SpellMissInfo SPELL_MISS_BLOCK = 5, SPELL_MISS_EVADE = 6, SPELL_MISS_IMMUNE = 7, - SPELL_MISS_IMMUNE2 = 8, + SPELL_MISS_IMMUNE2 = 8, // one of these 2 is MISS_TEMPIMMUNE SPELL_MISS_DEFLECT = 9, SPELL_MISS_ABSORB = 10, SPELL_MISS_REFLECT = 11 @@ -1171,15 +1171,15 @@ public enum SpellAtribute : uint SPELL_ATTR_NONE = 0x00000000, SPELL_ATTR0_UNK0 = 0x00000001, // 0 SPELL_ATTR0_REQ_AMMO = 0x00000002, // 1 - SPELL_ATTR0_ON_NEXT_SWING = 0x00000004, // 2 on next swing + SPELL_ATTR0_ON_NEXT_SWING = 0x00000004, // 2 SPELL_ATTR0_UNK3 = 0x00000008, // 3 not set in 3.0.3 - SPELL_ATTR0_UNK4 = 0x00000010, // 4 - SPELL_ATTR0_TRADESPELL = 0x00000020, // 5 trade spells, will be added by client to a sublist of profession spell + SPELL_ATTR0_ABILITY = 0x00000010, // 4 client puts 'ability' instead of 'spell' in game strings for these spells + SPELL_ATTR0_TRADESPELL = 0x00000020, // 5 trade spells (recipes), will be added by client to a sublist of profession spell SPELL_ATTR0_PASSIVE = 0x00000040, // 6 Passive spell SPELL_ATTR0_HIDDEN_CLIENTSIDE = 0x00000080, // 7 Spells with this attribute are not visible in spellbook or aura bar SPELL_ATTR0_HIDE_IN_COMBAT_LOG = 0x00000100, // 8 This attribite controls whether spell appears in combat logs - SPELL_ATTR0_UNK9 = 0x00000200, // 9 - SPELL_ATTR0_UNK10 = 0x00000400, // 10 on next swing 2 + SPELL_ATTR0_TARGET_MAINHAND_ITEM = 0x00000200, // 9 Client automatically selects item from mainhand slot as a cast target + SPELL_ATTR0_ON_NEXT_SWING_2 = 0x00000400, // 10 SPELL_ATTR0_UNK11 = 0x00000800, // 11 SPELL_ATTR0_DAYTIME_ONLY = 0x00001000, // 12 only useable at daytime, not set in 2.4.2 SPELL_ATTR0_NIGHT_ONLY = 0x00002000, // 13 only useable at night, not set in 2.4.2 @@ -1191,7 +1191,7 @@ public enum SpellAtribute : uint SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION = 0x00080000, // 19 spelldamage depends on caster level SPELL_ATTR0_STOP_ATTACK_TARGET = 0x00100000, // 20 Stop attack after use this spell (and not begin attack if use) SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK = 0x00200000, // 21 Cannot be dodged/parried/blocked - SPELL_ATTR0_UNK22 = 0x00400000, // 22 shoot spells + SPELL_ATTR0_CAST_TRACK_TARGET = 0x00400000, // 22 Client automatically forces player to face target when casting SPELL_ATTR0_CASTABLE_WHILE_DEAD = 0x00800000, // 23 castable while dead? SPELL_ATTR0_CASTABLE_WHILE_MOUNTED = 0x01000000, // 24 castable while mounted SPELL_ATTR0_DISABLED_WHILE_ACTIVE = 0x02000000, // 25 Activate and start cooldown after aura fade or remove summoned creature or go @@ -1208,13 +1208,13 @@ public enum SpellAtributeEx : uint { SPELL_ATTR1_ALL = 0xFFFFFFFF, SPELL_ATTR1_NONE = 0x00000000, - SPELL_ATTR1_DISMISS_PET = 0x00000001, // 0 dismiss pet and not allow to summon new one? + SPELL_ATTR1_DISMISS_PET = 0x00000001, // 0 for spells without this flag client doesn't allow to summon pet if caster has a pet SPELL_ATTR1_DRAIN_ALL_POWER = 0x00000002, // 1 use all power (Only paladin Lay of Hands and Bunyanize) - SPELL_ATTR1_CHANNELED_1 = 0x00000004, // 2 channeled target + SPELL_ATTR1_CHANNELED_1 = 0x00000004, // 2 clientside checked? SPELL_ATTR1_PUT_CASTER_IN_COMBAT = 0x00000008, // 3 spells that cause a caster to enter a combat SPELL_ATTR1_UNK4 = 0x00000010, // 4 stealth and whirlwind SPELL_ATTR1_NOT_BREAK_STEALTH = 0x00000020, // 5 Not break stealth - SPELL_ATTR1_CHANNELED_2 = 0x00000040, // 6 channeled self + SPELL_ATTR1_CHANNELED_2 = 0x00000040, // 6 SPELL_ATTR1_NEGATIVE = 0x00000080, // 7 SPELL_ATTR1_NOT_IN_COMBAT_TARGET = 0x00000100, // 8 Spell req target not to be in combat state SPELL_ATTR1_UNK9 = 0x00000200, // 9 melee spells @@ -1222,7 +1222,7 @@ public enum SpellAtributeEx : uint SPELL_ATTR1_UNK11 = 0x00000800, // 11 aura SPELL_ATTR1_UNK12 = 0x00001000, // 12 SPELL_ATTR1_USE_RADIUS_AS_MAX_DISTANCE = 0x00002000, // 13 - SPELL_ATTR1_STACK_FOR_DIFF_CASTERS = 0x00004000, // 14 + SPELL_ATTR1_CHANNEL_TRACK_TARGET = 0x00004000, // 14 Client automatically forces player to face target when channeling SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // 15 remove auras on immunity SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // 16 on immuniy SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // 17 @@ -1232,12 +1232,12 @@ public enum SpellAtributeEx : uint SPELL_ATTR1_UNK21 = 0x00200000, // 21 SPELL_ATTR1_REQ_COMBO_POINTS2 = 0x00400000, // 22 Req combo points on target SPELL_ATTR1_UNK23 = 0x00800000, // 23 - SPELL_ATTR1_UNK24 = 0x01000000, // 24 Req fishing pole?? + SPELL_ATTR1_UNK24 = 0x01000000, // 24 only fishing spells SPELL_ATTR1_UNK25 = 0x02000000, // 25 SPELL_ATTR1_UNK26 = 0x04000000, // 26 works correctly with [target=focus] and [target=mouseover] macros? SPELL_ATTR1_UNK27 = 0x08000000, // 27 SPELL_ATTR1_IGNORE_IMMUNITY = 0x10000000, // 28 removed from Chains of Ice 3.3.0 - SPELL_ATTR1_UNK29 = 0x20000000, // 29 + SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME = 0x20000000, // 29 spell name is displayed in cast bar instead of 'channeling' text SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite SPELL_ATTR1_UNK31 = 0x80000000 // 31 }; @@ -1328,7 +1328,7 @@ public enum SpellAtributeEx4 : uint SPELL_ATTR4_UNK0 = 0x00000001, // 0 SPELL_ATTR4_UNK1 = 0x00000002, // 1 proc on finishing move? SPELL_ATTR4_UNK2 = 0x00000004, // 2 - SPELL_ATTR4_CANT_PROC_FROM_SELFCAST = 0x00000008, // 3 + SPELL_ATTR4_UNK3 = 0x00000008, // 3 SPELL_ATTR4_UNK4 = 0x00000010, // 4 This will no longer cause guards to attack on use?? SPELL_ATTR4_UNK5 = 0x00000020, // 5 SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen @@ -1341,8 +1341,8 @@ public enum SpellAtributeEx4 : uint SPELL_ATTR4_UNK13 = 0x00002000, // 13 SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS = 0x00004000, // 14 doesn't break auras by damage from these spells SPELL_ATTR4_UNK15 = 0x00008000, // 15 - SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16 not usable in arena - SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 usable in arena + SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16 + SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 SPELL_ATTR4_UNK18 = 0x00040000, // 18 SPELL_ATTR4_UNK19 = 0x00080000, // 19 SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER = 0x00100000, // 20 supersedes message "More powerful spell applied" for self casts. @@ -1374,7 +1374,7 @@ public enum SpellAtributeEx5 : uint SPELL_ATTR5_UNK7 = 0x00000080, // 7 SPELL_ATTR5_UNK8 = 0x00000100, // 8 SPELL_ATTR5_START_PERIODIC_AT_APPLY = 0x00000200, // 9 begin periodic tick at aura apply - SPELL_ATTR5_UNK10 = 0x00000400, // 10 + SPELL_ATTR5_HIDE_DURATION = 0x00000400, // 10 SPELL_ATTR5_UNK11 = 0x00000800, // 11 SPELL_ATTR5_UNK12 = 0x00001000, // 12 SPELL_ATTR5_HASTE_AFFECT_DURATION = 0x00002000, // 13 haste effects decrease duration of this @@ -1445,7 +1445,7 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_UNK0 = 0x00000001, // 0 Shaman's new spells (Call of the ...), Feign Death. SPELL_ATTR7_UNK1 = 0x00000002, // 1 Not set in 3.2.2a. SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // 2 Paladin's auras and 65607 only. - SPELL_ATTR7_DISABLED_CLIENT_SIDE = 0x00000008, // 3 used only by client to disable spells client-side. some sort of special player flag (0x40000) bypasses that restriction + SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 66109 test spell. SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). From b8d9c3abd7fc31caa8f9e0f0289ef970110297fb Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 2 Jul 2011 20:58:50 +0200 Subject: [PATCH 13/58] More QAston's attributes --- SpellWork/Spell/SpellEnums.cs | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 7dd8c4fd..3fb02a68 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -1413,7 +1413,7 @@ public enum SpellAtributeEx6 : uint SPELL_ATTR6_UNK7 = 0x00000080, // 7 SPELL_ATTR6_IGNORE_CROWD_CONTROL_TARGETS = 0x00000100, // 8 SPELL_ATTR6_UNK9 = 0x00000200, // 9 - SPELL_ATTR6_UNK10 = 0x00000400, // 10 + SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS = 0x00000400, // 10 NYI! SPELL_ATTR6_NOT_IN_RAID_INSTANCE = 0x00000800, // 11 not usable in raid instance SPELL_ATTR6_UNK12 = 0x00001000, // 12 SPELL_ATTR6_UNK13 = 0x00002000, // 13 @@ -1426,15 +1426,15 @@ public enum SpellAtributeEx6 : uint SPELL_ATTR6_UNK20 = 0x00100000, // 20 SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute SPELL_ATTR6_UNK22 = 0x00400000, // 22 - SPELL_ATTR6_UNK23 = 0x00800000, // 23 not set in 3.0.3 - SPELL_ATTR6_UNK24 = 0x01000000, // 24 not set in 3.0.3 - SPELL_ATTR6_UNK25 = 0x02000000, // 25 not set in 3.0.3 - SPELL_ATTR6_UNK26 = 0x04000000, // 26 not set in 3.0.3 - SPELL_ATTR6_UNK27 = 0x08000000, // 27 not set in 3.0.3 - SPELL_ATTR6_UNK28 = 0x10000000, // 28 not set in 3.0.3 - SPELL_ATTR6_NO_DMG_PERCENT_MODS = 0x20000000, // 29 not set in 3.0.3 - SPELL_ATTR6_UNK30 = 0x40000000, // 30 not set in 3.0.3 - SPELL_ATTR6_UNK31 = 0x80000000 // 31 not set in 3.0.3 + SPELL_ATTR6_UNK23 = 0x00800000, // 23 + SPELL_ATTR6_CAN_TARGET_UNTARGETABLE = 0x01000000, // 24 NYI! + SPELL_ATTR6_UNK25 = 0x02000000, // 25 + SPELL_ATTR6_UNK26 = 0x04000000, // 26 + SPELL_ATTR6_UNK27 = 0x08000000, // 27 + SPELL_ATTR6_UNK28 = 0x10000000, // 28 + SPELL_ATTR6_NO_DMG_PERCENT_MODS = 0x20000000, // 29 + SPELL_ATTR6_UNK30 = 0x40000000, // 30 + SPELL_ATTR6_UNK31 = 0x80000000 // 31 }; [Flags] From 28563a8175b32789a52768b8d9b8c3cafcbf97d5 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 2 Jul 2011 21:03:16 +0200 Subject: [PATCH 14/58] Spell target updates --- SpellWork/Spell/SpellEnums.cs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 3fb02a68..5badf1d7 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -584,7 +584,7 @@ public enum Targets TARGET_UNIT_TARGET_ENEMY = 6, TARGET_UNIT_AREA_ENTRY_SRC = 7, TARGET_UNIT_AREA_ENTRY_DST = 8, - TARGET_DST_HOME = 9, // uses in teleport to innkeeper spells + TARGET_DST_HOME = 9, TARGET_10 = 10, TARGET_UNIT_TARGET_DEST_CASTER = 11, // teleport target to caster TARGET_12 = 12, @@ -592,7 +592,7 @@ public enum Targets TARGET_14 = 14, TARGET_UNIT_AREA_ENEMY_SRC = 15, TARGET_UNIT_AREA_ENEMY_DST = 16, - TARGET_DST_DB = 17, // uses in teleport spells and some other + TARGET_DST_DB = 17, TARGET_DST_CASTER = 18, TARGET_UNIT_PARTY_CASTER = 20, TARGET_UNIT_TARGET_ALLY = 21, @@ -605,8 +605,8 @@ public enum Targets //TARGET_OBJECT_ITEM_PICKLOCK TARGET_UNIT_MASTER = 27, TARGET_DEST_DYNOBJ_ENEMY = 28, - TARGET_DEST_DYNOBJ_ALLY = 29, // only for effect 27 - TARGET_UNIT_AREA_ALLY_SRC = 30, // in TargetB used only with TARGET_SRC_CASTER and in self casting range in TargetA + TARGET_DEST_DYNOBJ_ALLY = 29, + TARGET_UNIT_AREA_ALLY_SRC = 30, TARGET_UNIT_AREA_ALLY_DST = 31, TARGET_MINION = 32, //TARGET_DEST_SUMMON @@ -614,22 +614,22 @@ public enum Targets TARGET_UNIT_AREA_PARTY_DST = 34, // used in Tranquility TARGET_UNIT_TARGET_PARTY = 35, TARGET_DEST_CASTER_RANDOM_UNKNOWN = 36, //unknown - TARGET_UNIT_PARTY_TARGET = 37, + TARGET_UNIT_TARGET_ALLY_PARTY = 37, TARGET_UNIT_NEARBY_ENTRY = 38, TARGET_UNIT_CASTER_FISHING = 39, TARGET_GAMEOBJECT_NEARBY_ENTRY = 40, - TARGET_DEST_CASTER_FRONT_LEFT = 41, //earth totem - TARGET_DEST_CASTER_BACK_LEFT = 42, //water totem - TARGET_DEST_CASTER_BACK_RIGHT = 43, //air totem - TARGET_DEST_CASTER_FRONT_RIGHT = 44, //fire totem + TARGET_DEST_CASTER_FRONT_LEFT = 41, + TARGET_DEST_CASTER_BACK_LEFT = 42, + TARGET_DEST_CASTER_BACK_RIGHT = 43, + TARGET_DEST_CASTER_FRONT_RIGHT = 44, TARGET_UNIT_CHAINHEAL = 45, TARGET_DST_NEARBY_ENTRY = 46, TARGET_DEST_CASTER_FRONT = 47, TARGET_DEST_CASTER_BACK = 48, TARGET_DEST_CASTER_RIGHT = 49, TARGET_DEST_CASTER_LEFT = 50, - TARGET_GAMEOBJECT_AREA_SRC = 51, // If used with SPELL_EFFECT_ACTIVATE_OBJECT, appliccable GO entries should be specified in conditions table - TARGET_GAMEOBJECT_AREA_DST = 52, // If used with SPELL_EFFECT_ACTIVATE_OBJECT, appliccable GO entries should be specified in conditions table + TARGET_GAMEOBJECT_AREA_SRC = 51, + TARGET_GAMEOBJECT_AREA_DST = 52, TARGET_DST_TARGET_ENEMY = 53, // set unit coordinates as dest, only 16 target B imlemented TARGET_UNIT_CONE_ENEMY_UNKNOWN = 54, // 180 degree, or different angle TARGET_DEST_CASTER_FRONT_LEAP = 55, // for a leap spell @@ -638,11 +638,11 @@ public enum Targets TARGET_UNIT_NEARBY_RAID = 58, TARGET_UNIT_CONE_ALLY = 59, TARGET_UNIT_CONE_ENTRY = 60, - TARGET_UNIT_CLASS_TARGET = 61, + TARGET_UNIT_TARGET_CLASS_RAID = 61, TARGET_TEST = 62, // for a test spell TARGET_DEST_TARGET_ANY = 63, TARGET_DEST_TARGET_FRONT = 64, - TARGET_DEST_TARGET_BACK = 65, // uses in teleport behind spells + TARGET_DEST_TARGET_BACK = 65, TARGET_DEST_TARGET_RIGHT = 66, TARGET_DEST_TARGET_LEFT = 67, TARGET_DEST_TARGET_FRONT_LEFT = 68, @@ -672,7 +672,7 @@ public enum Targets TARGET_UNIT_SUMMONER = 92, TARGET_CORPSE_AREA_ENEMY_PLAYER_SRC = 93, TARGET_UNIT_VEHICLE = 94, - TARGET_UNIT_DRIVER = 95, + TARGET_UNIT_TARGET_PASSENGER = 95, TARGET_UNIT_PASSENGER_0 = 96, TARGET_UNIT_PASSENGER_1 = 97, TARGET_UNIT_PASSENGER_2 = 98, From 7efcc4163e60acb35228353e580f1ec025b6484d Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 21 Jul 2011 11:10:16 +0200 Subject: [PATCH 15/58] Added ReSharper directory to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index beba2e75..8d5f41cb 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ SpellWork/obj/* *.rej *.patch *.log +_ReSharper* From 6c4c27fa81d2139fcf23a46af7ae21cb6c64ea46 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 21 Jul 2011 11:10:52 +0200 Subject: [PATCH 16/58] Added support for named pipe connections to database --- SpellWork/DBC/Structure.cs | 6 +- SpellWork/DataBase/MySQLConnect.cs | 78 ++++++++++++----------- SpellWork/Extensions/Extensions.cs | 5 ++ SpellWork/Forms/FormSettings.Designer.cs | 6 +- SpellWork/Forms/FormSettings.cs | 15 +---- SpellWork/Program.cs | 1 + SpellWork/Properties/Settings.Designer.cs | 9 +-- SpellWork/Properties/Settings.settings | 2 +- SpellWork/Spell/SpellInfo.cs | 12 ++-- SpellWork/app.config | 2 +- 10 files changed, 70 insertions(+), 66 deletions(-) diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs index 05237b5a..ddc85411 100644 --- a/SpellWork/DBC/Structure.cs +++ b/SpellWork/DBC/Structure.cs @@ -435,8 +435,8 @@ public struct SpellProcEventEntry { public uint Id; public string SpellName; - public uint SchoolMask; - public uint SpellFamilyName; + public byte SchoolMask; + public ushort SpellFamilyName; public uint[] SpellFamilyMask; public uint ProcFlags; public uint ProcEx; @@ -480,6 +480,6 @@ public struct Item public string Description; public string LocalesName; public string LocalesDescription; - public uint[] SpellId; + public int[] SpellId; }; } diff --git a/SpellWork/DataBase/MySQLConnect.cs b/SpellWork/DataBase/MySQLConnect.cs index 89d05286..448d1612 100644 --- a/SpellWork/DataBase/MySQLConnect.cs +++ b/SpellWork/DataBase/MySQLConnect.cs @@ -1,9 +1,10 @@ using System; +using System.Collections.Generic; +using System.Windows.Forms; +using MySql.Data.MySqlClient; using SpellWork.DBC; using SpellWork.Extensions; using SpellWork.Properties; -using System.Collections.Generic; -using MySql.Data.MySqlClient; namespace SpellWork.Database { @@ -20,12 +21,12 @@ private static String ConnectionString { get { - return String.Format("Server={0};Port={1};Uid={2};Pwd={3};Database={4};character set=utf8;Connection Timeout=10", - Settings.Default.Host, - Settings.Default.Port, - Settings.Default.User, - Settings.Default.Pass, - Settings.Default.WorldDbName); + if (Settings.Default.Host == ".") + return String.Format("Server=localhost;Pipe={0};UserID={1};Password={2};Database={3};CharacterSet=utf8;ConnectionTimeout=5;ConnectionProtocol=Pipe;", + Settings.Default.PortOrPipe, Settings.Default.User, Settings.Default.Pass, Settings.Default.WorldDbName); + + return String.Format("Server={0};Port={1};UserID={2};Password={3};Database={4};CharacterSet=utf8;ConnectionTimeout=5;", + Settings.Default.Host, Settings.Default.PortOrPipe, Settings.Default.User, Settings.Default.Pass, Settings.Default.WorldDbName); } } @@ -50,25 +51,25 @@ public static void SelectProc(string query) { while (reader.Read()) { - SpellProcEventEntry str; - - str.Id = reader[0].ToUInt32(); - str.SpellName = GetSpellName(str.Id); - str.SchoolMask = reader[1].ToUInt32(); - str.SpellFamilyName = reader[2].ToUInt32(); - str.SpellFamilyMask = new[] + uint spellId = reader.GetUInt32(0); + SpellProcEvent.Add(new SpellProcEventEntry { - (uint)reader[3], - (uint)reader[4], - (uint)reader[5] - }; - str.ProcFlags = reader[6].ToUInt32(); - str.ProcEx = reader[7].ToUInt32(); - str.PpmRate = reader[8].ToUInt32(); - str.CustomChance = reader[9].ToUInt32(); - str.Cooldown = reader[10].ToUInt32(); - - SpellProcEvent.Add(str); + Id = spellId, + SpellName = GetSpellName(spellId), + SchoolMask = reader.GetByte(1), + SpellFamilyName = reader.GetUInt16(2), + SpellFamilyMask = new[] + { + reader.GetUInt32(3), + reader.GetUInt32(4), + reader.GetUInt32(5) + }, + ProcFlags = reader.GetUInt32(6), + ProcEx = reader.GetUInt32(7), + PpmRate = reader.GetFloat(8), + CustomChance = reader.GetFloat(9), + Cooldown = reader.GetUInt32(10) + }); } } } @@ -123,18 +124,18 @@ LEFT JOIN { items.Add(new Item { - Entry = reader[0].ToUInt32(), - Name = reader[1].ToString(), - Description = reader[2].ToString(), - LocalesName = reader[3].ToString(), - LocalesDescription = reader[4].ToString(), + Entry = reader.GetUInt32(0), + Name = reader.GetString(1), + Description = reader.GetString(2), + LocalesName = reader.IsDBNull(3) ? string.Empty : reader.GetString(3), + LocalesDescription = reader.IsDBNull(4) ? string.Empty : reader.GetString(4), SpellId = new[] { - (uint)reader[5], - (uint)reader[6], - (uint)reader[7], - (uint)reader[8], - (uint)reader[9] + reader.GetInt32(5), + reader.GetInt32(6), + reader.GetInt32(7), + reader.GetInt32(8), + reader.GetInt32(9) } }); } @@ -158,6 +159,11 @@ public static void TestConnect() _conn.Close(); Connected = true; } + catch (MySqlException ex) + { + MessageBox.Show(string.Format("Errno {0}{1}{2}", ex.Number, Environment.NewLine, ex.Message)); + Connected = false; + } catch { Connected = false; diff --git a/SpellWork/Extensions/Extensions.cs b/SpellWork/Extensions/Extensions.cs index c3ea0022..8c065c64 100644 --- a/SpellWork/Extensions/Extensions.cs +++ b/SpellWork/Extensions/Extensions.cs @@ -265,6 +265,11 @@ public static bool ContainsElement(this uint[] array, uint value) return array.Any(i => i == value); } + public static bool ContainsElement(this int[] array, int value) + { + return array.Any(i => i == value); + } + public static T GetValue(this Dictionary dictionary, uint key) { T value; diff --git a/SpellWork/Forms/FormSettings.Designer.cs b/SpellWork/Forms/FormSettings.Designer.cs index c6ecba2f..d0ebaad5 100644 --- a/SpellWork/Forms/FormSettings.Designer.cs +++ b/SpellWork/Forms/FormSettings.Designer.cs @@ -126,9 +126,9 @@ private void InitializeComponent() this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(6, 51); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(26, 13); + this.label2.Size = new System.Drawing.Size(52, 13); this.label2.TabIndex = 0; - this.label2.Text = "Port"; + this.label2.Text = "Port/Pipe"; // // _tbHost // @@ -181,7 +181,7 @@ private void InitializeComponent() // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(242, 234); + this.ClientSize = new System.Drawing.Size(234, 230); this.Controls.Add(this._bSaveSettings); this.Controls.Add(this._bTestConnect); this.Controls.Add(this._cbUseDBConnect); diff --git a/SpellWork/Forms/FormSettings.cs b/SpellWork/Forms/FormSettings.cs index f4f9db0c..4d624581 100644 --- a/SpellWork/Forms/FormSettings.cs +++ b/SpellWork/Forms/FormSettings.cs @@ -20,7 +20,7 @@ private void CbUseDbConnectCheckedChanged(object sender, EventArgs e) private void BSaveSettingsClick(object sender, EventArgs e) { Settings.Default.Host = _tbHost.Text; - Settings.Default.Port = _tbPort.Text; + Settings.Default.PortOrPipe = _tbPort.Text; Settings.Default.User = _tbUser.Text; Settings.Default.Pass = _tbPass.Text; Settings.Default.WorldDbName = _tbBase.Text; @@ -29,18 +29,9 @@ private void BSaveSettingsClick(object sender, EventArgs e) MySqlConnection.TestConnect(); if (((Button)sender).Text != @"Save") - { if (MySqlConnection.Connected) - { - MessageBox.Show(@"Connection is successful!", @"MySQL Connections!", + MessageBox.Show(@"Connection successful!", @"MySQL Connections!", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - else - { - MessageBox.Show(@"Connection failed!", @"ERROR!", - MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } if (((Button)sender).Text != @"Save") return; @@ -52,7 +43,7 @@ private void BSaveSettingsClick(object sender, EventArgs e) private void SettingsFormLoad(object sender, EventArgs e) { _tbHost.Text = Settings.Default.Host; - _tbPort.Text = Settings.Default.Port; + _tbPort.Text = Settings.Default.PortOrPipe; _tbUser.Text = Settings.Default.User; _tbPass.Text = Settings.Default.Pass; _tbBase.Text = Settings.Default.WorldDbName; diff --git a/SpellWork/Program.cs b/SpellWork/Program.cs index 62c8036b..9dbbc235 100644 --- a/SpellWork/Program.cs +++ b/SpellWork/Program.cs @@ -23,6 +23,7 @@ static void Main() catch (Exception ex) { MessageBox.Show(ex.Message, @"SpellWork Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); + MessageBox.Show(ex.ToString()); } } } diff --git a/SpellWork/Properties/Settings.Designer.cs b/SpellWork/Properties/Settings.Designer.cs index 0bd0f47a..54e05be6 100644 --- a/SpellWork/Properties/Settings.Designer.cs +++ b/SpellWork/Properties/Settings.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.225 +// Runtime Version:4.0.30319.235 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -14,6 +14,7 @@ namespace SpellWork.Properties [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); public static Settings Default @@ -42,15 +43,15 @@ public string Host [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("3306")] - public string Port + public string PortOrPipe { get { - return ((string)(this["Port"])); + return ((string)(this["PortOrPipe"])); } set { - this["Port"] = value; + this["PortOrPipe"] = value; } } diff --git a/SpellWork/Properties/Settings.settings b/SpellWork/Properties/Settings.settings index 1ea1e001..51b5d232 100644 --- a/SpellWork/Properties/Settings.settings +++ b/SpellWork/Properties/Settings.settings @@ -5,7 +5,7 @@ localhost - + 3306 diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index e53c6a0e..9b139e59 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -507,7 +507,7 @@ private void AppendItemInfo() return; var items = from item in DBC.DBC.ItemTemplate - where item.SpellId.ContainsElement(_spell.ID) + where item.SpellId.ContainsElement((int)_spell.ID) select item; if (items.Count() == 0) @@ -515,17 +515,17 @@ where item.SpellId.ContainsElement(_spell.ID) _rtb.AppendLine(_line); _rtb.SetStyle(Color.Blue, FontStyle.Bold); - _rtb.AppendLine("Items used this spell:"); + _rtb.AppendLine("Items using this spell:"); _rtb.SetDefaultStyle(); foreach (var item in items) { - var name = item.LocalesName == string.Empty ? item.Name : item.LocalesName; - var desc = item.LocalesDescription == string.Empty ? item.Description : item.LocalesDescription; + var name = string.IsNullOrEmpty(item.LocalesName) ? item.Name : item.LocalesName; + var desc = string.IsNullOrEmpty(item.LocalesDescription) ? item.Description : item.LocalesDescription; - desc = desc == string.Empty ? string.Empty : string.Format("({0})", desc); + desc = string.IsNullOrEmpty(desc) ? string.Empty : string.Format(" - \"{0}\"", desc); - _rtb.AppendFormatLine(@" {0} - {1} {2} ", item.Entry, name, desc); + _rtb.AppendFormatLine(@" {0}: {1} {2}", item.Entry, name, desc); } } } diff --git a/SpellWork/app.config b/SpellWork/app.config index c1831876..5d0bf867 100644 --- a/SpellWork/app.config +++ b/SpellWork/app.config @@ -10,7 +10,7 @@ localhost - + 3306 From 79379b084806ac8eeb512a2b97980c57bcb174d5 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 21 Jul 2011 11:19:48 +0200 Subject: [PATCH 17/58] Attribute updates --- SpellWork/Spell/SpellEnums.cs | 63 ++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 5badf1d7..03b903a6 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -966,26 +966,27 @@ public enum SpellModOp public enum SpellCastTargetFlags { TARGET_FLAG_SELF = 0x00000000, - TARGET_FLAG_UNUSED1 = 0x00000001, // not used in any spells as of 3.2.2a (can be set dynamically) + TARGET_FLAG_UNUSED_1 = 0x00000001, // not used TARGET_FLAG_UNIT = 0x00000002, // pguid - TARGET_FLAG_UNUSED2 = 0x00000004, // not used in any spells as of 3.2.2a (can be set dynamically) - TARGET_FLAG_UNUSED3 = 0x00000008, // not used in any spells as of 3.2.2a (can be set dynamically) + TARGET_FLAG_UNIT_RAID = 0x00000004, // not sent, used to validate target (if raid member) + TARGET_FLAG_UNIT_PARTY = 0x00000008, // not sent, used to validate target (if party member) TARGET_FLAG_ITEM = 0x00000010, // pguid - TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // 3 float - TARGET_FLAG_DEST_LOCATION = 0x00000040, // 3 float - TARGET_FLAG_OBJECT_CASTER = 0x00000080, // used in 7 spells only - TARGET_FLAG_UNIT_CASTER = 0x00000100, // looks like self target (480 spells) - TARGET_FLAG_PVP_CORPSE = 0x00000200, // pguid - TARGET_FLAG_UNIT_CORPSE = 0x00000400, // 10 spells (gathering professions) - TARGET_FLAG_OBJECT = 0x00000800, // pguid, 2 spells - TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid, 0 spells - TARGET_FLAG_STRING = 0x00002000, // string, 0 spells - TARGET_FLAG_OPEN_LOCK = 0x00004000, // 199 spells, opening object/lock - TARGET_FLAG_CORPSE = 0x00008000, // pguid, resurrection spells - TARGET_FLAG_UNK17 = 0x00010000, // pguid, not used in any spells as of 3.2.2a (can be set dynamically) - TARGET_FLAG_GLYPH = 0x00020000, // used in glyph spells - TARGET_FLAG_UNK19 = 0x00040000, // - TARGET_FLAG_UNUSED20 = 0x00080000 // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far + TARGET_FLAG_SOURCE_LOCATION = 0x00000020, // pguid, 3 float + TARGET_FLAG_DEST_LOCATION = 0x00000040, // pguid, 3 float + TARGET_FLAG_UNIT_ENEMY = 0x00000080, // not sent, used to validate target (if enemy) + TARGET_FLAG_UNIT_ALLY = 0x00000100, // not sent, used to validate target (if ally) + TARGET_FLAG_CORPSE_ENEMY = 0x00000200, // pguid + TARGET_FLAG_UNIT_DEAD = 0x00000400, // not sent, used to validate target (if dead creature) + TARGET_FLAG_GAMEOBJECT = 0x00000800, // pguid, used with TARGET_GAMEOBJECT + TARGET_FLAG_TRADE_ITEM = 0x00001000, // pguid + TARGET_FLAG_STRING = 0x00002000, // string + TARGET_FLAG_GAMEOBJECT_ITEM = 0x00004000, // not sent, used with TARGET_GAMEOBJECT_ITEM + TARGET_FLAG_CORPSE_ALLY = 0x00008000, // pguid + TARGET_FLAG_UNIT_MINIPET = 0x00010000, // pguid, used to validate target (if non combat pet) + TARGET_FLAG_GLYPH_SLOT = 0x00020000, // used in glyph spells + TARGET_FLAG_UNK19 = 0x00040000, // sometimes appears with DEST_TARGET spells (may appear or not for a given spell) + TARGET_FLAG_UNUSED20 = 0x00080000, // uint32 counter, loop { vec3 - screen position (?), guid }, not used so far + TARGET_FLAG_UNIT_PASSENGER = 0x00100000, // guessed, used to validate target (if vehicle passenger) }; public enum Powers : uint @@ -1187,7 +1188,7 @@ public enum SpellAtribute : uint SPELL_ATTR0_OUTDOORS_ONLY = 0x00008000, // 15 Only useable outdoors. SPELL_ATTR0_NOT_SHAPESHIFT = 0x00010000, // 16 Not while shapeshifted SPELL_ATTR0_ONLY_STEALTHED = 0x00020000, // 17 Must be in stealth - SPELL_ATTR0_UNK18 = 0x00040000, // 18 + SPELL_ATTR0_DONT_AFFECT_SHEATH_STATE = 0x00040000, // 18 client won't hide unit weapons in sheath on cast/channel SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION = 0x00080000, // 19 spelldamage depends on caster level SPELL_ATTR0_STOP_ATTACK_TARGET = 0x00100000, // 20 Stop attack after use this spell (and not begin attack if use) SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK = 0x00200000, // 21 Cannot be dodged/parried/blocked @@ -1211,17 +1212,17 @@ public enum SpellAtributeEx : uint SPELL_ATTR1_DISMISS_PET = 0x00000001, // 0 for spells without this flag client doesn't allow to summon pet if caster has a pet SPELL_ATTR1_DRAIN_ALL_POWER = 0x00000002, // 1 use all power (Only paladin Lay of Hands and Bunyanize) SPELL_ATTR1_CHANNELED_1 = 0x00000004, // 2 clientside checked? - SPELL_ATTR1_PUT_CASTER_IN_COMBAT = 0x00000008, // 3 spells that cause a caster to enter a combat + SPELL_ATTR1_CANT_BE_REDIRECTED = 0x00000008, // 3 SPELL_ATTR1_UNK4 = 0x00000010, // 4 stealth and whirlwind SPELL_ATTR1_NOT_BREAK_STEALTH = 0x00000020, // 5 Not break stealth SPELL_ATTR1_CHANNELED_2 = 0x00000040, // 6 - SPELL_ATTR1_NEGATIVE = 0x00000080, // 7 + SPELL_ATTR1_CANT_BE_REFLECTED = 0x00000080, // 7 SPELL_ATTR1_NOT_IN_COMBAT_TARGET = 0x00000100, // 8 Spell req target not to be in combat state - SPELL_ATTR1_UNK9 = 0x00000200, // 9 melee spells + SPELL_ATTR1_MELEE_COMBAT_START = 0x00000200, // 9 player starts melee combat after this spell is cast SPELL_ATTR1_NO_THREAT = 0x00000400, // 10 no generates threat on cast 100% (old NO_INITIAL_AGGRO) SPELL_ATTR1_UNK11 = 0x00000800, // 11 aura SPELL_ATTR1_UNK12 = 0x00001000, // 12 - SPELL_ATTR1_USE_RADIUS_AS_MAX_DISTANCE = 0x00002000, // 13 + SPELL_ATTR1_FARSIGHT = 0x00002000, // 13 SPELL_ATTR1_CHANNEL_TRACK_TARGET = 0x00004000, // 14 Client automatically forces player to face target when channeling SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // 15 remove auras on immunity SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // 16 on immuniy @@ -1236,7 +1237,7 @@ public enum SpellAtributeEx : uint SPELL_ATTR1_UNK25 = 0x02000000, // 25 SPELL_ATTR1_UNK26 = 0x04000000, // 26 works correctly with [target=focus] and [target=mouseover] macros? SPELL_ATTR1_UNK27 = 0x08000000, // 27 - SPELL_ATTR1_IGNORE_IMMUNITY = 0x10000000, // 28 removed from Chains of Ice 3.3.0 + SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR = 0x10000000, // 28 client doesn't display these spells in aura bar SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME = 0x20000000, // 29 spell name is displayed in cast bar instead of 'channeling' text SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite SPELL_ATTR1_UNK31 = 0x80000000 // 31 @@ -1249,11 +1250,11 @@ public enum SpellAtributeEx2 : uint SPELL_ATTR2_NONE = 0x00000000, SPELL_ATTR2_ALLOW_DEAD_TARGET = 0x00000001, // 0 SPELL_ATTR2_UNK1 = 0x00000002, // 1 ? many triggered spells have this flag - SPELL_ATTR2_CANT_REFLECTED = 0x00000004, // 2 ? used for detect can or not spell reflected + SPELL_ATTR2_UNK2 = 0x00000004, // 2 SPELL_ATTR2_UNK3 = 0x00000008, // 3 SPELL_ATTR2_ALWAYS_APPLY_MODIFIERS = 0x00000010, // 4 ? spell modifiers are applied dynamically (even if aura is not passive) SPELL_ATTR2_AUTOREPEAT_FLAG = 0x00000020, // 5 - SPELL_ATTR2_UNK6 = 0x00000040, // 6 + SPELL_ATTR2_CANT_TARGET_TAPPED = 0x00000040, // 6 SPELL_ATTR2_UNK7 = 0x00000080, // 7 SPELL_ATTR2_UNK8 = 0x00000100, // 8 not set in 3.0.3 SPELL_ATTR2_UNK9 = 0x00000200, // 9 @@ -1277,7 +1278,7 @@ public enum SpellAtributeEx2 : uint SPELL_ATTR2_UNK27 = 0x08000000, // 27 SPELL_ATTR2_UNK28 = 0x10000000, // 28 no breaks stealth if it fails?? SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit - SPELL_ATTR2_TRIGGERED_CAN_TRIGGER = 0x40000000, // 30 spell can trigger even if triggered + SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // 30 spell can trigger even if triggered SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed) }; @@ -1290,19 +1291,19 @@ public enum SpellAtributeEx3 : uint SPELL_ATTR3_UNK1 = 0x00000002, // 1 SPELL_ATTR3_UNK2 = 0x00000004, // 2 SPELL_ATTR3_BLOCKABLE_SPELL = 0x00000008, // 3 Only dmg class melee in 3.1.3 - SPELL_ATTR3_UNK4 = 0x00000010, // 4 Druid Rebirth only this spell have this flag + SPELL_ATTR3_IGNORE_RESURRECTION_TIMER = 0x00000010, // 4 Druid Rebirth only this spell have this flag SPELL_ATTR3_UNK5 = 0x00000020, // 5 SPELL_ATTR3_UNK6 = 0x00000040, // 6 SPELL_ATTR3_STACK_FOR_DIFF_CASTERS = 0x00000080, // 7 separate stack for every caster SPELL_ATTR3_PLAYERS_ONLY = 0x00000100, // 8 Player only? - SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_2 = 0x00000200, // 9 triggered from effect? + SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 = 0x00000200, // 9 triggered from effect? SPELL_ATTR3_MAIN_HAND = 0x00000400, // 10 Main hand weapon required SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can casted only on battleground SPELL_ATTR3_REQUIRE_DEAD_TARGET = 0x00001000, // 12 SPELL_ATTR3_UNK13 = 0x00002000, // 13 SPELL_ATTR3_UNK14 = 0x00004000, // 14 "Honorless Target" only this spells have this flag SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag - SPELL_ATTR3_UNK16 = 0x00010000, // 16 no triggers effects that trigger on casting a spell?? (15290 - 2.2ptr change) + SPELL_ATTR3_CANT_TRIGGER_PROC = 0x00010000, // 16 no triggers effects that trigger on casting a spell?? (15290 - 2.2ptr change) SPELL_ATTR3_NO_INITIAL_AGGRO = 0x00020000, // 17 Soothe Animal, 39758, Mind Soothe SPELL_ATTR3_IGNORE_HIT_RESULT = 0x00040000, // 18 Spell should always hit its target SPELL_ATTR3_DISABLE_PROC = 0x00080000, // 19 during aura proc no spells can trigger (20178, 20375) @@ -1312,7 +1313,7 @@ public enum SpellAtributeEx3 : uint SPELL_ATTR3_UNK23 = 0x00800000, // 23 SPELL_ATTR3_REQ_OFFHAND = 0x01000000, // 24 Req offhand weapon SPELL_ATTR3_UNK25 = 0x02000000, // 25 no cause spell pushback ? - SPELL_ATTR3_CAN_PROC_TRIGGERED = 0x04000000, // 26 + SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED = 0x04000000, // 26 auras with this attribute can proc from triggered spell casts with SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 (67736 + 52999) SPELL_ATTR3_DRAIN_SOUL = 0x08000000, // 27 only drain soul has this flag SPELL_ATTR3_UNK28 = 0x10000000, // 28 SPELL_ATTR3_NO_DONE_BONUS = 0x20000000, // 29 Ignore caster spellpower and done damage mods? From 9d608a1f24c19908b062892efdfb3d054bc21a6c Mon Sep 17 00:00:00 2001 From: Shauren Date: Fri, 22 Jul 2011 21:38:58 +0200 Subject: [PATCH 18/58] Another update --- SpellWork/Spell/SpellEnums.cs | 336 +++++++++++++++++----------------- 1 file changed, 168 insertions(+), 168 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 03b903a6..f6c8e8cd 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -77,172 +77,172 @@ public enum SpellSpecific /// public enum SpellEffects { - NO_SPELL_EFFECT = 0, - SPELL_EFFECT_INSTAKILL = 1, - SPELL_EFFECT_SCHOOL_DAMAGE = 2, - SPELL_EFFECT_DUMMY = 3, - SPELL_EFFECT_PORTAL_TELEPORT = 4, - SPELL_EFFECT_TELEPORT_UNITS = 5, - SPELL_EFFECT_APPLY_AURA = 6, - SPELL_EFFECT_ENVIRONMENTAL_DAMAGE = 7, - SPELL_EFFECT_POWER_DRAIN = 8, - SPELL_EFFECT_HEALTH_LEECH = 9, - SPELL_EFFECT_HEAL = 10, - SPELL_EFFECT_BIND = 11, - SPELL_EFFECT_PORTAL = 12, - SPELL_EFFECT_RITUAL_BASE = 13, - SPELL_EFFECT_RITUAL_SPECIALIZE = 14, - SPELL_EFFECT_RITUAL_ACTIVATE_PORTAL = 15, - SPELL_EFFECT_QUEST_COMPLETE = 16, - SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL = 17, - SPELL_EFFECT_RESURRECT = 18, - SPELL_EFFECT_ADD_EXTRA_ATTACKS = 19, - SPELL_EFFECT_DODGE = 20, - SPELL_EFFECT_EVADE = 21, - SPELL_EFFECT_PARRY = 22, - SPELL_EFFECT_BLOCK = 23, - SPELL_EFFECT_CREATE_ITEM = 24, - SPELL_EFFECT_WEAPON = 25, - SPELL_EFFECT_DEFENSE = 26, - SPELL_EFFECT_PERSISTENT_AREA_AURA = 27, - SPELL_EFFECT_SUMMON = 28, - SPELL_EFFECT_LEAP = 29, - SPELL_EFFECT_ENERGIZE = 30, - SPELL_EFFECT_WEAPON_PERCENT_DAMAGE = 31, - SPELL_EFFECT_TRIGGER_MISSILE = 32, - SPELL_EFFECT_OPEN_LOCK = 33, - SPELL_EFFECT_SUMMON_CHANGE_ITEM = 34, - SPELL_EFFECT_APPLY_AREA_AURA_PARTY = 35, - SPELL_EFFECT_LEARN_SPELL = 36, - SPELL_EFFECT_SPELL_DEFENSE = 37, - SPELL_EFFECT_DISPEL = 38, - SPELL_EFFECT_LANGUAGE = 39, - SPELL_EFFECT_DUAL_WIELD = 40, - SPELL_EFFECT_JUMP = 41, - SPELL_EFFECT_JUMP_DEST = 42, - SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER = 43, - SPELL_EFFECT_SKILL_STEP = 44, - SPELL_EFFECT_ADD_HONOR = 45, - SPELL_EFFECT_SPAWN = 46, - SPELL_EFFECT_TRADE_SKILL = 47, - SPELL_EFFECT_STEALTH = 48, - SPELL_EFFECT_DETECT = 49, - SPELL_EFFECT_TRANS_DOOR = 50, - SPELL_EFFECT_FORCE_CRITICAL_HIT = 51, - SPELL_EFFECT_GUARANTEE_HIT = 52, - SPELL_EFFECT_ENCHANT_ITEM = 53, - SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY = 54, - SPELL_EFFECT_TAMECREATURE = 55, - SPELL_EFFECT_SUMMON_PET = 56, - SPELL_EFFECT_LEARN_PET_SPELL = 57, - SPELL_EFFECT_WEAPON_DAMAGE = 58, - SPELL_EFFECT_CREATE_RANDOM_ITEM = 59, - SPELL_EFFECT_PROFICIENCY = 60, - SPELL_EFFECT_SEND_EVENT = 61, - SPELL_EFFECT_POWER_BURN = 62, - SPELL_EFFECT_THREAT = 63, - SPELL_EFFECT_TRIGGER_SPELL = 64, - SPELL_EFFECT_APPLY_AREA_AURA_RAID = 65, - SPELL_EFFECT_CREATE_MANA_GEM = 66, - SPELL_EFFECT_HEAL_MAX_HEALTH = 67, - SPELL_EFFECT_INTERRUPT_CAST = 68, - SPELL_EFFECT_DISTRACT = 69, - SPELL_EFFECT_PULL = 70, - SPELL_EFFECT_PICKPOCKET = 71, - SPELL_EFFECT_ADD_FARSIGHT = 72, - SPELL_EFFECT_UNTRAIN_TALENTS = 73, - SPELL_EFFECT_APPLY_GLYPH = 74, - SPELL_EFFECT_HEAL_MECHANICAL = 75, - SPELL_EFFECT_SUMMON_OBJECT_WILD = 76, - SPELL_EFFECT_SCRIPT_EFFECT = 77, - SPELL_EFFECT_ATTACK = 78, - SPELL_EFFECT_SANCTUARY = 79, - SPELL_EFFECT_ADD_COMBO_POINTS = 80, - SPELL_EFFECT_CREATE_HOUSE = 81, - SPELL_EFFECT_BIND_SIGHT = 82, - SPELL_EFFECT_DUEL = 83, - SPELL_EFFECT_STUCK = 84, - SPELL_EFFECT_SUMMON_PLAYER = 85, - SPELL_EFFECT_ACTIVATE_OBJECT = 86, - SPELL_EFFECT_WMO_DAMAGE = 87, - SPELL_EFFECT_WMO_REPAIR = 88, - SPELL_EFFECT_WMO_CHANGE = 89, - SPELL_EFFECT_KILL_CREDIT = 90, - SPELL_EFFECT_THREAT_ALL = 91, - SPELL_EFFECT_ENCHANT_HELD_ITEM = 92, - SPELL_EFFECT_FORCE_DESELECT = 93, - SPELL_EFFECT_SELF_RESURRECT = 94, - SPELL_EFFECT_SKINNING = 95, - SPELL_EFFECT_CHARGE = 96, - SPELL_EFFECT_CAST_BUTTON = 97, - SPELL_EFFECT_KNOCK_BACK = 98, - SPELL_EFFECT_DISENCHANT = 99, - SPELL_EFFECT_INEBRIATE = 100, - SPELL_EFFECT_FEED_PET = 101, - SPELL_EFFECT_DISMISS_PET = 102, - SPELL_EFFECT_REPUTATION = 103, - SPELL_EFFECT_SUMMON_OBJECT_SLOT1 = 104, - SPELL_EFFECT_SUMMON_OBJECT_SLOT2 = 105, - SPELL_EFFECT_SUMMON_OBJECT_SLOT3 = 106, - SPELL_EFFECT_SUMMON_OBJECT_SLOT4 = 107, - SPELL_EFFECT_DISPEL_MECHANIC = 108, - SPELL_EFFECT_SUMMON_DEAD_PET = 109, - SPELL_EFFECT_DESTROY_ALL_TOTEMS = 110, - SPELL_EFFECT_DURABILITY_DAMAGE = 111, - SPELL_EFFECT_112 = 112, - SPELL_EFFECT_RESURRECT_NEW = 113, - SPELL_EFFECT_ATTACK_ME = 114, - SPELL_EFFECT_DURABILITY_DAMAGE_PCT = 115, - SPELL_EFFECT_SKIN_PLAYER_CORPSE = 116, - SPELL_EFFECT_SPIRIT_HEAL = 117, - SPELL_EFFECT_SKILL = 118, - SPELL_EFFECT_APPLY_AREA_AURA_PET = 119, - SPELL_EFFECT_TELEPORT_GRAVEYARD = 120, - SPELL_EFFECT_NORMALIZED_WEAPON_DMG = 121, - SPELL_EFFECT_122 = 122, - SPELL_EFFECT_SEND_TAXI = 123, - SPELL_EFFECT_PULL_TOWARDS = 124, - SPELL_EFFECT_MODIFY_THREAT_PERCENT = 125, - SPELL_EFFECT_STEAL_BENEFICIAL_BUFF = 126, - SPELL_EFFECT_PROSPECTING = 127, - SPELL_EFFECT_APPLY_AREA_AURA_FRIEND = 128, - SPELL_EFFECT_APPLY_AREA_AURA_ENEMY = 129, - SPELL_EFFECT_REDIRECT_THREAT = 130, - SPELL_EFFECT_131 = 131, - SPELL_EFFECT_PLAY_MUSIC = 132, - SPELL_EFFECT_UNLEARN_SPECIALIZATION = 133, - SPELL_EFFECT_KILL_CREDIT2 = 134, - SPELL_EFFECT_CALL_PET = 135, - SPELL_EFFECT_HEAL_PCT = 136, - SPELL_EFFECT_ENERGIZE_PCT = 137, - SPELL_EFFECT_LEAP_BACK = 138, - SPELL_EFFECT_CLEAR_QUEST = 139, - SPELL_EFFECT_FORCE_CAST = 140, - SPELL_EFFECT_FORCE_CAST_WITH_VALUE = 141, - SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE = 142, - SPELL_EFFECT_APPLY_AREA_AURA_OWNER = 143, - SPELL_EFFECT_KNOCK_BACK_DEST = 144, - SPELL_EFFECT_PULL_TOWARDS_DEST = 145, - SPELL_EFFECT_ACTIVATE_RUNE = 146, - SPELL_EFFECT_QUEST_FAIL = 147, - SPELL_EFFECT_148 = 148, - SPELL_EFFECT_CHARGE_DEST = 149, - SPELL_EFFECT_QUEST_START = 150, - SPELL_EFFECT_TRIGGER_SPELL_2 = 151, - SPELL_EFFECT_152 = 152, - SPELL_EFFECT_CREATE_TAMED_PET = 153, - SPELL_EFFECT_DISCOVER_TAXI = 154, - SPELL_EFFECT_TITAN_GRIP = 155, - SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC = 156, - SPELL_EFFECT_CREATE_ITEM_2 = 157, - SPELL_EFFECT_MILLING = 158, - SPELL_EFFECT_ALLOW_RENAME_PET = 159, - SPELL_EFFECT_160 = 160, - SPELL_EFFECT_TALENT_SPEC_COUNT = 161, - SPELL_EFFECT_TALENT_SPEC_SELECT = 162, - SPELL_EFFECT_163 = 163, - SPELL_EFFECT_REMOVE_AURA = 164, - TOTAL_SPELL_EFFECTS = 165 + NO_SPELL_EFFECT = 0, + SPELL_EFFECT_INSTAKILL = 1, + SPELL_EFFECT_SCHOOL_DAMAGE = 2, + SPELL_EFFECT_DUMMY = 3, + SPELL_EFFECT_PORTAL_TELEPORT = 4, + SPELL_EFFECT_TELEPORT_UNITS = 5, + SPELL_EFFECT_APPLY_AURA = 6, + SPELL_EFFECT_ENVIRONMENTAL_DAMAGE = 7, + SPELL_EFFECT_POWER_DRAIN = 8, + SPELL_EFFECT_HEALTH_LEECH = 9, + SPELL_EFFECT_HEAL = 10, + SPELL_EFFECT_BIND = 11, + SPELL_EFFECT_PORTAL = 12, + SPELL_EFFECT_RITUAL_BASE = 13, + SPELL_EFFECT_RITUAL_SPECIALIZE = 14, + SPELL_EFFECT_RITUAL_ACTIVATE_PORTAL = 15, + SPELL_EFFECT_QUEST_COMPLETE = 16, + SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL = 17, + SPELL_EFFECT_RESURRECT = 18, + SPELL_EFFECT_ADD_EXTRA_ATTACKS = 19, + SPELL_EFFECT_DODGE = 20, + SPELL_EFFECT_EVADE = 21, + SPELL_EFFECT_PARRY = 22, + SPELL_EFFECT_BLOCK = 23, + SPELL_EFFECT_CREATE_ITEM = 24, + SPELL_EFFECT_WEAPON = 25, + SPELL_EFFECT_DEFENSE = 26, + SPELL_EFFECT_PERSISTENT_AREA_AURA = 27, + SPELL_EFFECT_SUMMON = 28, + SPELL_EFFECT_LEAP = 29, + SPELL_EFFECT_ENERGIZE = 30, + SPELL_EFFECT_WEAPON_PERCENT_DAMAGE = 31, + SPELL_EFFECT_TRIGGER_MISSILE = 32, + SPELL_EFFECT_OPEN_LOCK = 33, + SPELL_EFFECT_SUMMON_CHANGE_ITEM = 34, + SPELL_EFFECT_APPLY_AREA_AURA_PARTY = 35, + SPELL_EFFECT_LEARN_SPELL = 36, + SPELL_EFFECT_SPELL_DEFENSE = 37, + SPELL_EFFECT_DISPEL = 38, + SPELL_EFFECT_LANGUAGE = 39, + SPELL_EFFECT_DUAL_WIELD = 40, + SPELL_EFFECT_JUMP = 41, + SPELL_EFFECT_JUMP_DEST = 42, + SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER = 43, + SPELL_EFFECT_SKILL_STEP = 44, + SPELL_EFFECT_ADD_HONOR = 45, + SPELL_EFFECT_SPAWN = 46, + SPELL_EFFECT_TRADE_SKILL = 47, + SPELL_EFFECT_STEALTH = 48, + SPELL_EFFECT_DETECT = 49, + SPELL_EFFECT_TRANS_DOOR = 50, + SPELL_EFFECT_FORCE_CRITICAL_HIT = 51, + SPELL_EFFECT_GUARANTEE_HIT = 52, + SPELL_EFFECT_ENCHANT_ITEM = 53, + SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY = 54, + SPELL_EFFECT_TAMECREATURE = 55, + SPELL_EFFECT_SUMMON_PET = 56, + SPELL_EFFECT_LEARN_PET_SPELL = 57, + SPELL_EFFECT_WEAPON_DAMAGE = 58, + SPELL_EFFECT_CREATE_RANDOM_ITEM = 59, + SPELL_EFFECT_PROFICIENCY = 60, + SPELL_EFFECT_SEND_EVENT = 61, + SPELL_EFFECT_POWER_BURN = 62, + SPELL_EFFECT_THREAT = 63, + SPELL_EFFECT_TRIGGER_SPELL = 64, + SPELL_EFFECT_APPLY_AREA_AURA_RAID = 65, + SPELL_EFFECT_CREATE_MANA_GEM = 66, + SPELL_EFFECT_HEAL_MAX_HEALTH = 67, + SPELL_EFFECT_INTERRUPT_CAST = 68, + SPELL_EFFECT_DISTRACT = 69, + SPELL_EFFECT_PULL = 70, + SPELL_EFFECT_PICKPOCKET = 71, + SPELL_EFFECT_ADD_FARSIGHT = 72, + SPELL_EFFECT_UNTRAIN_TALENTS = 73, + SPELL_EFFECT_APPLY_GLYPH = 74, + SPELL_EFFECT_HEAL_MECHANICAL = 75, + SPELL_EFFECT_SUMMON_OBJECT_WILD = 76, + SPELL_EFFECT_SCRIPT_EFFECT = 77, + SPELL_EFFECT_ATTACK = 78, + SPELL_EFFECT_SANCTUARY = 79, + SPELL_EFFECT_ADD_COMBO_POINTS = 80, + SPELL_EFFECT_CREATE_HOUSE = 81, + SPELL_EFFECT_BIND_SIGHT = 82, + SPELL_EFFECT_DUEL = 83, + SPELL_EFFECT_STUCK = 84, + SPELL_EFFECT_SUMMON_PLAYER = 85, + SPELL_EFFECT_ACTIVATE_OBJECT = 86, + SPELL_EFFECT_GAMEOBJECT_DAMAGE = 87, + SPELL_EFFECT_GAMEOBJECT_REPAIR = 88, + SPELL_EFFECT_GAMEOBJECT_SET_DESTRUCTION_STATE = 89, + SPELL_EFFECT_KILL_CREDIT = 90, + SPELL_EFFECT_THREAT_ALL = 91, + SPELL_EFFECT_ENCHANT_HELD_ITEM = 92, + SPELL_EFFECT_FORCE_DESELECT = 93, + SPELL_EFFECT_SELF_RESURRECT = 94, + SPELL_EFFECT_SKINNING = 95, + SPELL_EFFECT_CHARGE = 96, + SPELL_EFFECT_CAST_BUTTON = 97, + SPELL_EFFECT_KNOCK_BACK = 98, + SPELL_EFFECT_DISENCHANT = 99, + SPELL_EFFECT_INEBRIATE = 100, + SPELL_EFFECT_FEED_PET = 101, + SPELL_EFFECT_DISMISS_PET = 102, + SPELL_EFFECT_REPUTATION = 103, + SPELL_EFFECT_SUMMON_OBJECT_SLOT1 = 104, + SPELL_EFFECT_SUMMON_OBJECT_SLOT2 = 105, + SPELL_EFFECT_SUMMON_OBJECT_SLOT3 = 106, + SPELL_EFFECT_SUMMON_OBJECT_SLOT4 = 107, + SPELL_EFFECT_DISPEL_MECHANIC = 108, + SPELL_EFFECT_SUMMON_DEAD_PET = 109, + SPELL_EFFECT_DESTROY_ALL_TOTEMS = 110, + SPELL_EFFECT_DURABILITY_DAMAGE = 111, + SPELL_EFFECT_112 = 112, + SPELL_EFFECT_RESURRECT_NEW = 113, + SPELL_EFFECT_ATTACK_ME = 114, + SPELL_EFFECT_DURABILITY_DAMAGE_PCT = 115, + SPELL_EFFECT_SKIN_PLAYER_CORPSE = 116, + SPELL_EFFECT_SPIRIT_HEAL = 117, + SPELL_EFFECT_SKILL = 118, + SPELL_EFFECT_APPLY_AREA_AURA_PET = 119, + SPELL_EFFECT_TELEPORT_GRAVEYARD = 120, + SPELL_EFFECT_NORMALIZED_WEAPON_DMG = 121, + SPELL_EFFECT_122 = 122, + SPELL_EFFECT_SEND_TAXI = 123, + SPELL_EFFECT_PULL_TOWARDS = 124, + SPELL_EFFECT_MODIFY_THREAT_PERCENT = 125, + SPELL_EFFECT_STEAL_BENEFICIAL_BUFF = 126, + SPELL_EFFECT_PROSPECTING = 127, + SPELL_EFFECT_APPLY_AREA_AURA_FRIEND = 128, + SPELL_EFFECT_APPLY_AREA_AURA_ENEMY = 129, + SPELL_EFFECT_REDIRECT_THREAT = 130, + SPELL_EFFECT_131 = 131, + SPELL_EFFECT_PLAY_MUSIC = 132, + SPELL_EFFECT_UNLEARN_SPECIALIZATION = 133, + SPELL_EFFECT_KILL_CREDIT2 = 134, + SPELL_EFFECT_CALL_PET = 135, + SPELL_EFFECT_HEAL_PCT = 136, + SPELL_EFFECT_ENERGIZE_PCT = 137, + SPELL_EFFECT_LEAP_BACK = 138, + SPELL_EFFECT_CLEAR_QUEST = 139, + SPELL_EFFECT_FORCE_CAST = 140, + SPELL_EFFECT_FORCE_CAST_WITH_VALUE = 141, + SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE = 142, + SPELL_EFFECT_APPLY_AREA_AURA_OWNER = 143, + SPELL_EFFECT_KNOCK_BACK_DEST = 144, + SPELL_EFFECT_PULL_TOWARDS_DEST = 145, + SPELL_EFFECT_ACTIVATE_RUNE = 146, + SPELL_EFFECT_QUEST_FAIL = 147, + SPELL_EFFECT_148 = 148, + SPELL_EFFECT_CHARGE_DEST = 149, + SPELL_EFFECT_QUEST_START = 150, + SPELL_EFFECT_TRIGGER_SPELL_2 = 151, + SPELL_EFFECT_152 = 152, + SPELL_EFFECT_CREATE_TAMED_PET = 153, + SPELL_EFFECT_DISCOVER_TAXI = 154, + SPELL_EFFECT_TITAN_GRIP = 155, + SPELL_EFFECT_ENCHANT_ITEM_PRISMATIC = 156, + SPELL_EFFECT_CREATE_ITEM_2 = 157, + SPELL_EFFECT_MILLING = 158, + SPELL_EFFECT_ALLOW_RENAME_PET = 159, + SPELL_EFFECT_160 = 160, + SPELL_EFFECT_TALENT_SPEC_COUNT = 161, + SPELL_EFFECT_TALENT_SPEC_SELECT = 162, + SPELL_EFFECT_163 = 163, + SPELL_EFFECT_REMOVE_AURA = 164, + TOTAL_SPELL_EFFECTS = 165 }; /// @@ -1334,7 +1334,7 @@ public enum SpellAtributeEx4 : uint SPELL_ATTR4_UNK5 = 0x00000020, // 5 SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen SPELL_ATTR4_TRIGGERED = 0x00000080, // 7 spells forced to be triggered - SPELL_ATTR4_FIXED_DAMAGE = 0x00000100, // 8 decimate, share damage? + SPELL_ATTR4_UNK8 = 0x00000100, // 8 ignores taken percent damage mods? SPELL_ATTR4_UNK9 = 0x00000200, // 9 SPELL_ATTR4_SPELL_VS_EXTEND_COST = 0x00000400, // 10 Rogue Shiv have this flag SPELL_ATTR4_UNK11 = 0x00000800, // 11 @@ -1433,7 +1433,7 @@ public enum SpellAtributeEx6 : uint SPELL_ATTR6_UNK26 = 0x04000000, // 26 SPELL_ATTR6_UNK27 = 0x08000000, // 27 SPELL_ATTR6_UNK28 = 0x10000000, // 28 - SPELL_ATTR6_NO_DMG_PERCENT_MODS = 0x20000000, // 29 + SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS = 0x20000000, // 29 ignores done percent damage mods? SPELL_ATTR6_UNK30 = 0x40000000, // 30 SPELL_ATTR6_UNK31 = 0x80000000 // 31 }; From dff1cd973a9debab90061a3e2664241256580f3f Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 22 Aug 2011 12:39:18 +0200 Subject: [PATCH 19/58] Attribute and target updates --- SpellWork/Spell/SpellEnums.cs | 644 +++++++++++++++++----------------- 1 file changed, 322 insertions(+), 322 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index f6c8e8cd..7caa9348 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -582,73 +582,71 @@ public enum Targets TARGET_UNIT_NEARBY_ALLY = 4, TARGET_UNIT_PET = 5, TARGET_UNIT_TARGET_ENEMY = 6, - TARGET_UNIT_AREA_ENTRY_SRC = 7, - TARGET_UNIT_AREA_ENTRY_DST = 8, - TARGET_DST_HOME = 9, + TARGET_UNIT_SRC_AREA_ENTRY = 7, + TARGET_UNIT_DEST_AREA_ENTRY = 8, + TARGET_DEST_HOME = 9, TARGET_10 = 10, - TARGET_UNIT_TARGET_DEST_CASTER = 11, // teleport target to caster + TARGET_UNIT_SRC_AREA_UNK_11 = 11, // teleport target to caster TARGET_12 = 12, TARGET_13 = 13, TARGET_14 = 14, - TARGET_UNIT_AREA_ENEMY_SRC = 15, - TARGET_UNIT_AREA_ENEMY_DST = 16, - TARGET_DST_DB = 17, - TARGET_DST_CASTER = 18, - TARGET_UNIT_PARTY_CASTER = 20, + TARGET_UNIT_SRC_AREA_ENEMY = 15, + TARGET_UNIT_DEST_AREA_ENEMY = 16, + TARGET_DEST_DB = 17, + TARGET_DEST_CASTER = 18, + TARGET_19 = 19, + TARGET_UNIT_CASTER_AREA_PARTY = 20, TARGET_UNIT_TARGET_ALLY = 21, TARGET_SRC_CASTER = 22, - TARGET_GAMEOBJECT = 23, - //TARGET_OBJECT_OPEN - TARGET_UNIT_CONE_ENEMY = 24, + TARGET_GAMEOBJECT_TARGET = 23, + TARGET_UNIT_CONE_ENEMY_24 = 24, TARGET_UNIT_TARGET_ANY = 25, - TARGET_GAMEOBJECT_ITEM = 26, - //TARGET_OBJECT_ITEM_PICKLOCK + TARGET_GAMEOBJECT_ITEM_TARGET = 26, TARGET_UNIT_MASTER = 27, TARGET_DEST_DYNOBJ_ENEMY = 28, TARGET_DEST_DYNOBJ_ALLY = 29, - TARGET_UNIT_AREA_ALLY_SRC = 30, - TARGET_UNIT_AREA_ALLY_DST = 31, - TARGET_MINION = 32, - //TARGET_DEST_SUMMON - TARGET_UNIT_AREA_PARTY_SRC = 33, - TARGET_UNIT_AREA_PARTY_DST = 34, // used in Tranquility + TARGET_UNIT_SRC_AREA_ALLY = 30, + TARGET_UNIT_DEST_AREA_ALLY = 31, + TARGET_DEST_CASTER_SUMMON = 32, // front left, doesn't use radius + TARGET_UNIT_SRC_AREA_PARTY = 33, + TARGET_UNIT_DEST_AREA_PARTY = 34, TARGET_UNIT_TARGET_PARTY = 35, - TARGET_DEST_CASTER_RANDOM_UNKNOWN = 36, //unknown - TARGET_UNIT_TARGET_ALLY_PARTY = 37, + TARGET_DEST_CASTER_UNK_36 = 36, + TARGET_UNIT_LASTTARGET_AREA_PARTY = 37, TARGET_UNIT_NEARBY_ENTRY = 38, - TARGET_UNIT_CASTER_FISHING = 39, + TARGET_DEST_CASTER_FISHING = 39, TARGET_GAMEOBJECT_NEARBY_ENTRY = 40, - TARGET_DEST_CASTER_FRONT_LEFT = 41, - TARGET_DEST_CASTER_BACK_LEFT = 42, - TARGET_DEST_CASTER_BACK_RIGHT = 43, - TARGET_DEST_CASTER_FRONT_RIGHT = 44, - TARGET_UNIT_CHAINHEAL = 45, - TARGET_DST_NEARBY_ENTRY = 46, + TARGET_DEST_CASTER_FRONT_RIGHT = 41, + TARGET_DEST_CASTER_BACK_RIGHT = 42, + TARGET_DEST_CASTER_BACK_LEFT = 43, + TARGET_DEST_CASTER_FRONT_LEFT = 44, + TARGET_UNIT_TARGET_CHAINHEAL_ALLY = 45, + TARGET_DEST_NEARBY_ENTRY = 46, TARGET_DEST_CASTER_FRONT = 47, TARGET_DEST_CASTER_BACK = 48, TARGET_DEST_CASTER_RIGHT = 49, TARGET_DEST_CASTER_LEFT = 50, - TARGET_GAMEOBJECT_AREA_SRC = 51, - TARGET_GAMEOBJECT_AREA_DST = 52, - TARGET_DST_TARGET_ENEMY = 53, // set unit coordinates as dest, only 16 target B imlemented - TARGET_UNIT_CONE_ENEMY_UNKNOWN = 54, // 180 degree, or different angle + TARGET_GAMEOBJECT_SRC_AREA = 51, + TARGET_GAMEOBJECT_DEST_AREA = 52, + TARGET_DEST_TARGET_ENEMY = 53, + TARGET_UNIT_CONE_ENEMY_54 = 54, TARGET_DEST_CASTER_FRONT_LEAP = 55, // for a leap spell - TARGET_UNIT_RAID_CASTER = 56, + TARGET_UNIT_CASTER_AREA_RAID = 56, TARGET_UNIT_TARGET_RAID = 57, TARGET_UNIT_NEARBY_RAID = 58, TARGET_UNIT_CONE_ALLY = 59, TARGET_UNIT_CONE_ENTRY = 60, - TARGET_UNIT_TARGET_CLASS_RAID = 61, - TARGET_TEST = 62, // for a test spell + TARGET_UNIT_TARGET_AREA_RAID_CLASS = 61, + TARGET_UNK_62 = 62, TARGET_DEST_TARGET_ANY = 63, TARGET_DEST_TARGET_FRONT = 64, TARGET_DEST_TARGET_BACK = 65, TARGET_DEST_TARGET_RIGHT = 66, TARGET_DEST_TARGET_LEFT = 67, - TARGET_DEST_TARGET_FRONT_LEFT = 68, - TARGET_DEST_TARGET_BACK_LEFT = 69, - TARGET_DEST_TARGET_BACK_RIGHT = 70, - TARGET_DEST_TARGET_FRONT_RIGHT = 71, + TARGET_DEST_TARGET_FRONT_RIGHT = 68, + TARGET_DEST_TARGET_BACK_RIGHT = 69, + TARGET_DEST_TARGET_BACK_LEFT = 70, + TARGET_DEST_TARGET_FRONT_LEFT = 71, TARGET_DEST_CASTER_RANDOM = 72, TARGET_DEST_CASTER_RADIUS = 73, TARGET_DEST_TARGET_RANDOM = 74, @@ -659,18 +657,18 @@ public enum Targets TARGET_DEST_DEST_BACK = 79, TARGET_DEST_DEST_RIGHT = 80, TARGET_DEST_DEST_LEFT = 81, - TARGET_DEST_DEST_FRONT_LEFT = 82, - TARGET_DEST_DEST_BACK_LEFT = 83, - TARGET_DEST_DEST_BACK_RIGHT = 84, - TARGET_DEST_DEST_FRONT_RIGHT = 85, + TARGET_DEST_DEST_FRONT_RIGHT = 82, + TARGET_DEST_DEST_BACK_RIGHT = 83, + TARGET_DEST_DEST_BACK_LEFT = 84, + TARGET_DEST_DEST_FRONT_LEFT = 85, TARGET_DEST_DEST_RANDOM = 86, TARGET_DEST_DEST = 87, TARGET_DEST_DYNOBJ_NONE = 88, TARGET_DEST_TRAJ = 89, TARGET_UNIT_TARGET_MINIPET = 90, - TARGET_DEST_DEST_RANDOM_DIR_DIST = 91, + TARGET_DEST_DEST_RADIUS = 91, TARGET_UNIT_SUMMONER = 92, - TARGET_CORPSE_AREA_ENEMY_PLAYER_SRC = 93, + TARGET_CORPSE_SRC_AREA_ENEMY = 93, // NYI TARGET_UNIT_VEHICLE = 94, TARGET_UNIT_TARGET_PASSENGER = 95, TARGET_UNIT_PASSENGER_0 = 96, @@ -681,12 +679,14 @@ public enum Targets TARGET_UNIT_PASSENGER_5 = 101, TARGET_UNIT_PASSENGER_6 = 102, TARGET_UNIT_PASSENGER_7 = 103, - TARGET_UNIT_AREA_PATH = 104, + TARGET_UNIT_CONE_ENEMY_104 = 104, TARGET_UNIT_UNK_105 = 105, // 1 spell TARGET_DEST_CHANNEL_CASTER = 106, - TARGET_UNK_AREA_UNK_DST_107 = 107, // not enough info - only generic spells avalible - TARGET_GAMEOBJECT_AREA_PATH = 108, - TARGET_DEST_UNK_110 = 110, // some kind of traj? + TARGET_UNK_DEST_AREA_UNK_107 = 107, // not enough info - only generic spells avalible + TARGET_GAMEOBJECT_CONE = 108, + TARGET_109 = 109, + TARGET_DEST_UNK_110 = 110, // 1 spell + TOTAL_SPELL_TARGETS, }; /// @@ -1168,313 +1168,313 @@ public enum CreatureTypeMask [Flags] public enum SpellAtribute : uint { - SPELL_ATTR_ALL = 0xFFFFFFFF, - SPELL_ATTR_NONE = 0x00000000, - SPELL_ATTR0_UNK0 = 0x00000001, // 0 - SPELL_ATTR0_REQ_AMMO = 0x00000002, // 1 - SPELL_ATTR0_ON_NEXT_SWING = 0x00000004, // 2 - SPELL_ATTR0_UNK3 = 0x00000008, // 3 not set in 3.0.3 - SPELL_ATTR0_ABILITY = 0x00000010, // 4 client puts 'ability' instead of 'spell' in game strings for these spells - SPELL_ATTR0_TRADESPELL = 0x00000020, // 5 trade spells (recipes), will be added by client to a sublist of profession spell - SPELL_ATTR0_PASSIVE = 0x00000040, // 6 Passive spell - SPELL_ATTR0_HIDDEN_CLIENTSIDE = 0x00000080, // 7 Spells with this attribute are not visible in spellbook or aura bar - SPELL_ATTR0_HIDE_IN_COMBAT_LOG = 0x00000100, // 8 This attribite controls whether spell appears in combat logs - SPELL_ATTR0_TARGET_MAINHAND_ITEM = 0x00000200, // 9 Client automatically selects item from mainhand slot as a cast target - SPELL_ATTR0_ON_NEXT_SWING_2 = 0x00000400, // 10 - SPELL_ATTR0_UNK11 = 0x00000800, // 11 - SPELL_ATTR0_DAYTIME_ONLY = 0x00001000, // 12 only useable at daytime, not set in 2.4.2 - SPELL_ATTR0_NIGHT_ONLY = 0x00002000, // 13 only useable at night, not set in 2.4.2 - SPELL_ATTR0_INDOORS_ONLY = 0x00004000, // 14 only useable indoors, not set in 2.4.2 - SPELL_ATTR0_OUTDOORS_ONLY = 0x00008000, // 15 Only useable outdoors. - SPELL_ATTR0_NOT_SHAPESHIFT = 0x00010000, // 16 Not while shapeshifted - SPELL_ATTR0_ONLY_STEALTHED = 0x00020000, // 17 Must be in stealth - SPELL_ATTR0_DONT_AFFECT_SHEATH_STATE = 0x00040000, // 18 client won't hide unit weapons in sheath on cast/channel - SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION = 0x00080000, // 19 spelldamage depends on caster level - SPELL_ATTR0_STOP_ATTACK_TARGET = 0x00100000, // 20 Stop attack after use this spell (and not begin attack if use) - SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK = 0x00200000, // 21 Cannot be dodged/parried/blocked - SPELL_ATTR0_CAST_TRACK_TARGET = 0x00400000, // 22 Client automatically forces player to face target when casting - SPELL_ATTR0_CASTABLE_WHILE_DEAD = 0x00800000, // 23 castable while dead? - SPELL_ATTR0_CASTABLE_WHILE_MOUNTED = 0x01000000, // 24 castable while mounted - SPELL_ATTR0_DISABLED_WHILE_ACTIVE = 0x02000000, // 25 Activate and start cooldown after aura fade or remove summoned creature or go - SPELL_ATTR0_NEGATIVE_1 = 0x04000000, // 26 Many negative spells have this attr - SPELL_ATTR0_CASTABLE_WHILE_SITTING = 0x08000000, // 27 castable while sitting - SPELL_ATTR0_CANT_USED_IN_COMBAT = 0x10000000, // 28 Cannot be used in combat - SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY = 0x20000000, // 29 unaffected by invulnerability (hmm possible not...) - SPELL_ATTR0_BREAKABLE_BY_DAMAGE = 0x40000000, // 30 - SPELL_ATTR0_CANT_CANCEL = 0x80000000 // 31 positive aura can't be canceled + SPELL_ATTR0_ALL = 0xFFFFFFFF, + SPELL_ATTR0_NONE = 0x00000000, + SPELL_ATTR0_UNK0 = 0x00000001, // 0 + SPELL_ATTR0_REQ_AMMO = 0x00000002, // 1 on next ranged + SPELL_ATTR0_ON_NEXT_SWING = 0x00000004, // 2 + SPELL_ATTR0_UNK3 = 0x00000008, // 3 not set in 3.0.3 + SPELL_ATTR0_ABILITY = 0x00000010, // 4 client puts 'ability' instead of 'spell' in game strings for these spells + SPELL_ATTR0_TRADESPELL = 0x00000020, // 5 trade spells (recipes), will be added by client to a sublist of profession spell + SPELL_ATTR0_PASSIVE = 0x00000040, // 6 Passive spell + SPELL_ATTR0_HIDDEN_CLIENTSIDE = 0x00000080, // 7 Spells with this attribute are not visible in spellbook or aura bar + SPELL_ATTR0_HIDE_IN_COMBAT_LOG = 0x00000100, // 8 This attribite controls whether spell appears in combat logs + SPELL_ATTR0_TARGET_MAINHAND_ITEM = 0x00000200, // 9 Client automatically selects item from mainhand slot as a cast target + SPELL_ATTR0_ON_NEXT_SWING_2 = 0x00000400, // 10 + SPELL_ATTR0_UNK11 = 0x00000800, // 11 + SPELL_ATTR0_DAYTIME_ONLY = 0x00001000, // 12 only useable at daytime, not set in 2.4.2 + SPELL_ATTR0_NIGHT_ONLY = 0x00002000, // 13 only useable at night, not set in 2.4.2 + SPELL_ATTR0_INDOORS_ONLY = 0x00004000, // 14 only useable indoors, not set in 2.4.2 + SPELL_ATTR0_OUTDOORS_ONLY = 0x00008000, // 15 Only useable outdoors. + SPELL_ATTR0_NOT_SHAPESHIFT = 0x00010000, // 16 Not while shapeshifted + SPELL_ATTR0_ONLY_STEALTHED = 0x00020000, // 17 Must be in stealth + SPELL_ATTR0_DONT_AFFECT_SHEATH_STATE = 0x00040000, // 18 client won't hide unit weapons in sheath on cast/channel + SPELL_ATTR0_LEVEL_DAMAGE_CALCULATION = 0x00080000, // 19 spelldamage depends on caster level + SPELL_ATTR0_STOP_ATTACK_TARGET = 0x00100000, // 20 Stop attack after use this spell (and not begin attack if use) + SPELL_ATTR0_IMPOSSIBLE_DODGE_PARRY_BLOCK = 0x00200000, // 21 Cannot be dodged/parried/blocked + SPELL_ATTR0_CAST_TRACK_TARGET = 0x00400000, // 22 Client automatically forces player to face target when casting + SPELL_ATTR0_CASTABLE_WHILE_DEAD = 0x00800000, // 23 castable while dead? + SPELL_ATTR0_CASTABLE_WHILE_MOUNTED = 0x01000000, // 24 castable while mounted + SPELL_ATTR0_DISABLED_WHILE_ACTIVE = 0x02000000, // 25 Activate and start cooldown after aura fade or remove summoned creature or go + SPELL_ATTR0_NEGATIVE_1 = 0x04000000, // 26 Many negative spells have this attr + SPELL_ATTR0_CASTABLE_WHILE_SITTING = 0x08000000, // 27 castable while sitting + SPELL_ATTR0_CANT_USED_IN_COMBAT = 0x10000000, // 28 Cannot be used in combat + SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY = 0x20000000, // 29 unaffected by invulnerability (hmm possible not...) + SPELL_ATTR0_BREAKABLE_BY_DAMAGE = 0x40000000, // 30 + SPELL_ATTR0_CANT_CANCEL = 0x80000000 // 31 positive aura can't be canceled }; [Flags] public enum SpellAtributeEx : uint { - SPELL_ATTR1_ALL = 0xFFFFFFFF, - SPELL_ATTR1_NONE = 0x00000000, - SPELL_ATTR1_DISMISS_PET = 0x00000001, // 0 for spells without this flag client doesn't allow to summon pet if caster has a pet - SPELL_ATTR1_DRAIN_ALL_POWER = 0x00000002, // 1 use all power (Only paladin Lay of Hands and Bunyanize) - SPELL_ATTR1_CHANNELED_1 = 0x00000004, // 2 clientside checked? - SPELL_ATTR1_CANT_BE_REDIRECTED = 0x00000008, // 3 - SPELL_ATTR1_UNK4 = 0x00000010, // 4 stealth and whirlwind - SPELL_ATTR1_NOT_BREAK_STEALTH = 0x00000020, // 5 Not break stealth - SPELL_ATTR1_CHANNELED_2 = 0x00000040, // 6 - SPELL_ATTR1_CANT_BE_REFLECTED = 0x00000080, // 7 - SPELL_ATTR1_NOT_IN_COMBAT_TARGET = 0x00000100, // 8 Spell req target not to be in combat state - SPELL_ATTR1_MELEE_COMBAT_START = 0x00000200, // 9 player starts melee combat after this spell is cast - SPELL_ATTR1_NO_THREAT = 0x00000400, // 10 no generates threat on cast 100% (old NO_INITIAL_AGGRO) - SPELL_ATTR1_UNK11 = 0x00000800, // 11 aura - SPELL_ATTR1_UNK12 = 0x00001000, // 12 - SPELL_ATTR1_FARSIGHT = 0x00002000, // 13 - SPELL_ATTR1_CHANNEL_TRACK_TARGET = 0x00004000, // 14 Client automatically forces player to face target when channeling - SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // 15 remove auras on immunity - SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // 16 on immuniy - SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // 17 - SPELL_ATTR1_UNK18 = 0x00040000, // 18 - SPELL_ATTR1_CANT_TARGET_SELF = 0x00080000, // 19 Applies only to unit target - for example Divine Intervention (19752) - SPELL_ATTR1_REQ_COMBO_POINTS1 = 0x00100000, // 20 Req combo points on target - SPELL_ATTR1_UNK21 = 0x00200000, // 21 - SPELL_ATTR1_REQ_COMBO_POINTS2 = 0x00400000, // 22 Req combo points on target - SPELL_ATTR1_UNK23 = 0x00800000, // 23 - SPELL_ATTR1_UNK24 = 0x01000000, // 24 only fishing spells - SPELL_ATTR1_UNK25 = 0x02000000, // 25 - SPELL_ATTR1_UNK26 = 0x04000000, // 26 works correctly with [target=focus] and [target=mouseover] macros? - SPELL_ATTR1_UNK27 = 0x08000000, // 27 - SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR = 0x10000000, // 28 client doesn't display these spells in aura bar - SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME = 0x20000000, // 29 spell name is displayed in cast bar instead of 'channeling' text - SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite - SPELL_ATTR1_UNK31 = 0x80000000 // 31 + SPELL_ATTR1_ALL = 0xFFFFFFFF, + SPELL_ATTR1_NONE = 0x00000000, + SPELL_ATTR1_DISMISS_PET = 0x00000001, // 0 for spells without this flag client doesn't allow to summon pet if caster has a pet + SPELL_ATTR1_DRAIN_ALL_POWER = 0x00000002, // 1 use all power (Only paladin Lay of Hands and Bunyanize) + SPELL_ATTR1_CHANNELED_1 = 0x00000004, // 2 clientside checked? cancelable? + SPELL_ATTR1_CANT_BE_REDIRECTED = 0x00000008, // 3 + SPELL_ATTR1_UNK4 = 0x00000010, // 4 stealth and whirlwind + SPELL_ATTR1_NOT_BREAK_STEALTH = 0x00000020, // 5 Not break stealth + SPELL_ATTR1_CHANNELED_2 = 0x00000040, // 6 + SPELL_ATTR1_CANT_BE_REFLECTED = 0x00000080, // 7 + SPELL_ATTR1_CANT_TARGET_IN_COMBAT = 0x00000100, // 8 can target only out of combat units + SPELL_ATTR1_MELEE_COMBAT_START = 0x00000200, // 9 player starts melee combat after this spell is cast + SPELL_ATTR1_NO_THREAT = 0x00000400, // 10 no generates threat on cast 100% (old NO_INITIAL_AGGRO) + SPELL_ATTR1_UNK11 = 0x00000800, // 11 aura + SPELL_ATTR1_UNK12 = 0x00001000, // 12 + SPELL_ATTR1_FARSIGHT = 0x00002000, // 13 Client removes farsight on aura loss + SPELL_ATTR1_CHANNEL_TRACK_TARGET = 0x00004000, // 14 Client automatically forces player to face target when channeling + SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // 15 remove auras on immunity + SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // 16 on immuniy + SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // 17 + SPELL_ATTR1_UNK18 = 0x00040000, // 18 + SPELL_ATTR1_CANT_TARGET_SELF = 0x00080000, // 19 + SPELL_ATTR1_REQ_COMBO_POINTS1 = 0x00100000, // 20 Req combo points on target + SPELL_ATTR1_UNK21 = 0x00200000, // 21 + SPELL_ATTR1_REQ_COMBO_POINTS2 = 0x00400000, // 22 Req combo points on target + SPELL_ATTR1_UNK23 = 0x00800000, // 23 + SPELL_ATTR1_UNK24 = 0x01000000, // 24 only fishing spells + SPELL_ATTR1_UNK25 = 0x02000000, // 25 + SPELL_ATTR1_UNK26 = 0x04000000, // 26 works correctly with [target=focus] and [target=mouseover] macros? + SPELL_ATTR1_UNK27 = 0x08000000, // 27 + SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR = 0x10000000, // 28 client doesn't display these spells in aura bar + SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME = 0x20000000, // 29 spell name is displayed in cast bar instead of 'channeling' text + SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite + SPELL_ATTR1_UNK31 = 0x80000000 // 31 }; [Flags] public enum SpellAtributeEx2 : uint { - SPELL_ATTR2_ALL = 0xFFFFFFFF, - SPELL_ATTR2_NONE = 0x00000000, - SPELL_ATTR2_ALLOW_DEAD_TARGET = 0x00000001, // 0 - SPELL_ATTR2_UNK1 = 0x00000002, // 1 ? many triggered spells have this flag - SPELL_ATTR2_UNK2 = 0x00000004, // 2 - SPELL_ATTR2_UNK3 = 0x00000008, // 3 - SPELL_ATTR2_ALWAYS_APPLY_MODIFIERS = 0x00000010, // 4 ? spell modifiers are applied dynamically (even if aura is not passive) - SPELL_ATTR2_AUTOREPEAT_FLAG = 0x00000020, // 5 - SPELL_ATTR2_CANT_TARGET_TAPPED = 0x00000040, // 6 - SPELL_ATTR2_UNK7 = 0x00000080, // 7 - SPELL_ATTR2_UNK8 = 0x00000100, // 8 not set in 3.0.3 - SPELL_ATTR2_UNK9 = 0x00000200, // 9 - SPELL_ATTR2_UNK10 = 0x00000400, // 10 - SPELL_ATTR2_HEALTH_FUNNEL = 0x00000800, // 11 - SPELL_ATTR2_UNK12 = 0x00001000, // 12 - SPELL_ATTR2_UNK13 = 0x00002000, // 13 Items enchanted by spells with this flag preserve the enchant to arenas - SPELL_ATTR2_UNK14 = 0x00004000, // 14 - SPELL_ATTR2_UNK15 = 0x00008000, // 15 not set in 3.0.3 - SPELL_ATTR2_TAME_BEAST = 0x00010000, // 16 - SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS = 0x00020000, // 17 don't reset timers for melee autoattacks (swings) or ranged autoattacks (autoshoots) - SPELL_ATTR2_UNK18 = 0x00040000, // 18 Only Revive pet - possible req dead pet - SPELL_ATTR2_NOT_NEED_SHAPESHIFT = 0x00080000, // 19 does not necessarly need shapeshift - SPELL_ATTR2_UNK20 = 0x00100000, // 20 - SPELL_ATTR2_DAMAGE_REDUCED_SHIELD = 0x00200000, // 21 for ice blocks, pala immunity buffs, priest absorb shields, but used also for other spells -> not sure! - SPELL_ATTR2_UNK22 = 0x00400000, // 22 - SPELL_ATTR2_UNK23 = 0x00800000, // 23 Only mage Arcane Concentration have this flag - SPELL_ATTR2_UNK24 = 0x01000000, // 24 - SPELL_ATTR2_UNK25 = 0x02000000, // 25 - SPELL_ATTR2_UNK26 = 0x04000000, // 26 unaffected by school immunity - SPELL_ATTR2_UNK27 = 0x08000000, // 27 - SPELL_ATTR2_UNK28 = 0x10000000, // 28 no breaks stealth if it fails?? - SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit - SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // 30 spell can trigger even if triggered - SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed) + SPELL_ATTR2_ALL = 0xFFFFFFFF, + SPELL_ATTR2_NONE = 0x00000000, + SPELL_ATTR2_CAN_TARGET_DEAD = 0x00000001, // 0 can target dead unit or corpse + SPELL_ATTR2_UNK1 = 0x00000002, // 1 ? many triggered spells have this flag + SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS = 0x00000004, // 2 26368 4.0.1 dbc change + SPELL_ATTR2_UNK3 = 0x00000008, // 3 + SPELL_ATTR2_DISPLAY_IN_STANCE_BAR = 0x00000010, // 4 client displays icon in stance bar when learned, even if not shapeshift + SPELL_ATTR2_AUTOREPEAT_FLAG = 0x00000020, // 5 + SPELL_ATTR2_CANT_TARGET_TAPPED = 0x00000040, // 6 target must be tapped by caster + SPELL_ATTR2_UNK7 = 0x00000080, // 7 + SPELL_ATTR2_UNK8 = 0x00000100, // 8 not set in 3.0.3 + SPELL_ATTR2_UNK9 = 0x00000200, // 9 + SPELL_ATTR2_UNK10 = 0x00000400, // 10 + SPELL_ATTR2_HEALTH_FUNNEL = 0x00000800, // 11 + SPELL_ATTR2_UNK12 = 0x00001000, // 12 + SPELL_ATTR2_UNK13 = 0x00002000, // 13 Items enchanted by spells with this flag preserve the enchant to arenas + SPELL_ATTR2_UNK14 = 0x00004000, // 14 + SPELL_ATTR2_UNK15 = 0x00008000, // 15 not set in 3.0.3 + SPELL_ATTR2_TAME_BEAST = 0x00010000, // 16 + SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS = 0x00020000, // 17 don't reset timers for melee autoattacks (swings) or ranged autoattacks (autoshoots) + SPELL_ATTR2_UNK18 = 0x00040000, // 18 Only Revive pet - possible req dead pet + SPELL_ATTR2_NOT_NEED_SHAPESHIFT = 0x00080000, // 19 does not necessarly need shapeshift + SPELL_ATTR2_UNK20 = 0x00100000, // 20 + SPELL_ATTR2_DAMAGE_REDUCED_SHIELD = 0x00200000, // 21 for ice blocks, pala immunity buffs, priest absorb shields, but used also for other spells -> not sure! + SPELL_ATTR2_UNK22 = 0x00400000, // 22 + SPELL_ATTR2_UNK23 = 0x00800000, // 23 Only mage Arcane Concentration have this flag + SPELL_ATTR2_UNK24 = 0x01000000, // 24 + SPELL_ATTR2_UNK25 = 0x02000000, // 25 + SPELL_ATTR2_UNK26 = 0x04000000, // 26 unaffected by school immunity + SPELL_ATTR2_UNK27 = 0x08000000, // 27 + SPELL_ATTR2_UNK28 = 0x10000000, // 28 no breaks stealth if it fails?? + SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit + SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // 30 spell can trigger even if triggered + SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed) }; [Flags] public enum SpellAtributeEx3 : uint { - SPELL_ATTR3_ALL = 0xFFFFFFFF, - SPELL_ATTR3_NONE = 0x00000000, - SPELL_ATTR3_UNK0 = 0x00000001, // 0 - SPELL_ATTR3_UNK1 = 0x00000002, // 1 - SPELL_ATTR3_UNK2 = 0x00000004, // 2 - SPELL_ATTR3_BLOCKABLE_SPELL = 0x00000008, // 3 Only dmg class melee in 3.1.3 - SPELL_ATTR3_IGNORE_RESURRECTION_TIMER = 0x00000010, // 4 Druid Rebirth only this spell have this flag - SPELL_ATTR3_UNK5 = 0x00000020, // 5 - SPELL_ATTR3_UNK6 = 0x00000040, // 6 - SPELL_ATTR3_STACK_FOR_DIFF_CASTERS = 0x00000080, // 7 separate stack for every caster - SPELL_ATTR3_PLAYERS_ONLY = 0x00000100, // 8 Player only? - SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 = 0x00000200, // 9 triggered from effect? - SPELL_ATTR3_MAIN_HAND = 0x00000400, // 10 Main hand weapon required - SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can casted only on battleground - SPELL_ATTR3_REQUIRE_DEAD_TARGET = 0x00001000, // 12 - SPELL_ATTR3_UNK13 = 0x00002000, // 13 - SPELL_ATTR3_UNK14 = 0x00004000, // 14 "Honorless Target" only this spells have this flag - SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag - SPELL_ATTR3_CANT_TRIGGER_PROC = 0x00010000, // 16 no triggers effects that trigger on casting a spell?? (15290 - 2.2ptr change) - SPELL_ATTR3_NO_INITIAL_AGGRO = 0x00020000, // 17 Soothe Animal, 39758, Mind Soothe - SPELL_ATTR3_IGNORE_HIT_RESULT = 0x00040000, // 18 Spell should always hit its target - SPELL_ATTR3_DISABLE_PROC = 0x00080000, // 19 during aura proc no spells can trigger (20178, 20375) - SPELL_ATTR3_DEATH_PERSISTENT = 0x00100000, // 20 Death persistent spells - SPELL_ATTR3_UNK21 = 0x00200000, // 21 - SPELL_ATTR3_REQ_WAND = 0x00400000, // 22 Req wand - SPELL_ATTR3_UNK23 = 0x00800000, // 23 - SPELL_ATTR3_REQ_OFFHAND = 0x01000000, // 24 Req offhand weapon - SPELL_ATTR3_UNK25 = 0x02000000, // 25 no cause spell pushback ? - SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED = 0x04000000, // 26 auras with this attribute can proc from triggered spell casts with SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 (67736 + 52999) - SPELL_ATTR3_DRAIN_SOUL = 0x08000000, // 27 only drain soul has this flag - SPELL_ATTR3_UNK28 = 0x10000000, // 28 - SPELL_ATTR3_NO_DONE_BONUS = 0x20000000, // 29 Ignore caster spellpower and done damage mods? - SPELL_ATTR3_UNK30 = 0x40000000, // 30 Shaman's Fire Nova 3.3.0, Sweeping Strikes 3.3.0 - SPELL_ATTR3_UNK31 = 0x80000000 // 31 + SPELL_ATTR3_ALL = 0xFFFFFFFF, + SPELL_ATTR3_NONE = 0x00000000, + SPELL_ATTR3_UNK0 = 0x00000001, // 0 + SPELL_ATTR3_UNK1 = 0x00000002, // 1 + SPELL_ATTR3_UNK2 = 0x00000004, // 2 + SPELL_ATTR3_BLOCKABLE_SPELL = 0x00000008, // 3 Only dmg class melee in 3.1.3 + SPELL_ATTR3_IGNORE_RESURRECTION_TIMER = 0x00000010, // 4 you don't have to wait to be resurrected with these spells + SPELL_ATTR3_UNK5 = 0x00000020, // 5 + SPELL_ATTR3_UNK6 = 0x00000040, // 6 + SPELL_ATTR3_STACK_FOR_DIFF_CASTERS = 0x00000080, // 7 separate stack for every caster + SPELL_ATTR3_ONLY_TARGET_PLAYERS = 0x00000100, // 8 can only target players + SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 = 0x00000200, // 9 triggered from effect? + SPELL_ATTR3_MAIN_HAND = 0x00000400, // 10 Main hand weapon required + SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can casted only on battleground + SPELL_ATTR3_ONLY_TARGET_GHOSTS = 0x00001000, // 12 + SPELL_ATTR3_UNK13 = 0x00002000, // 13 + SPELL_ATTR3_UNK14 = 0x00004000, // 14 "Honorless Target" only this spells have this flag + SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag + SPELL_ATTR3_CANT_TRIGGER_PROC = 0x00010000, // 16 confirmed with many patchnotes + SPELL_ATTR3_NO_INITIAL_AGGRO = 0x00020000, // 17 Soothe Animal, 39758, Mind Soothe + SPELL_ATTR3_IGNORE_HIT_RESULT = 0x00040000, // 18 Spell should always hit its target + SPELL_ATTR3_DISABLE_PROC = 0x00080000, // 19 during aura proc no spells can trigger (20178, 20375) + SPELL_ATTR3_DEATH_PERSISTENT = 0x00100000, // 20 Death persistent spells + SPELL_ATTR3_UNK21 = 0x00200000, // 21 + SPELL_ATTR3_REQ_WAND = 0x00400000, // 22 Req wand + SPELL_ATTR3_UNK23 = 0x00800000, // 23 + SPELL_ATTR3_REQ_OFFHAND = 0x01000000, // 24 Req offhand weapon + SPELL_ATTR3_UNK25 = 0x02000000, // 25 no cause spell pushback ? + SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED = 0x04000000, // 26 auras with this attribute can proc from triggered spell casts with SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 (67736 + 52999) + SPELL_ATTR3_DRAIN_SOUL = 0x08000000, // 27 only drain soul has this flag + SPELL_ATTR3_UNK28 = 0x10000000, // 28 + SPELL_ATTR3_NO_DONE_BONUS = 0x20000000, // 29 Ignore caster spellpower and done damage mods? + SPELL_ATTR3_DONT_DISPLAY_RANGE = 0x40000000, // 30 client doesn't display range in tooltip for those spells + SPELL_ATTR3_UNK31 = 0x80000000 // 31 }; [Flags] public enum SpellAtributeEx4 : uint { - SPELL_ATTR4_ALL = 0xFFFFFFFF, - SPELL_ATTR4_NONE = 0x00000000, - SPELL_ATTR4_UNK0 = 0x00000001, // 0 - SPELL_ATTR4_UNK1 = 0x00000002, // 1 proc on finishing move? - SPELL_ATTR4_UNK2 = 0x00000004, // 2 - SPELL_ATTR4_UNK3 = 0x00000008, // 3 - SPELL_ATTR4_UNK4 = 0x00000010, // 4 This will no longer cause guards to attack on use?? - SPELL_ATTR4_UNK5 = 0x00000020, // 5 - SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen - SPELL_ATTR4_TRIGGERED = 0x00000080, // 7 spells forced to be triggered - SPELL_ATTR4_UNK8 = 0x00000100, // 8 ignores taken percent damage mods? - SPELL_ATTR4_UNK9 = 0x00000200, // 9 - SPELL_ATTR4_SPELL_VS_EXTEND_COST = 0x00000400, // 10 Rogue Shiv have this flag - SPELL_ATTR4_UNK11 = 0x00000800, // 11 - SPELL_ATTR4_UNK12 = 0x00001000, // 12 - SPELL_ATTR4_UNK13 = 0x00002000, // 13 - SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS = 0x00004000, // 14 doesn't break auras by damage from these spells - SPELL_ATTR4_UNK15 = 0x00008000, // 15 - SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16 - SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 - SPELL_ATTR4_UNK18 = 0x00040000, // 18 - SPELL_ATTR4_UNK19 = 0x00080000, // 19 - SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER = 0x00100000, // 20 supersedes message "More powerful spell applied" for self casts. - SPELL_ATTR4_UNK21 = 0x00200000, // 21 - SPELL_ATTR4_UNK22 = 0x00400000, // 22 - SPELL_ATTR4_UNK23 = 0x00800000, // 23 - SPELL_ATTR4_UNK24 = 0x01000000, // 24 - SPELL_ATTR4_UNK25 = 0x02000000, // 25 pet scaling auras - SPELL_ATTR4_CAST_ONLY_IN_OUTLAND = 0x04000000, // 26 Can only be used in Outland. - SPELL_ATTR4_UNK27 = 0x08000000, // 27 - SPELL_ATTR4_UNK28 = 0x10000000, // 28 - SPELL_ATTR4_UNK29 = 0x20000000, // 29 - SPELL_ATTR4_UNK30 = 0x40000000, // 30 - SPELL_ATTR4_UNK31 = 0x80000000 // 31 + SPELL_ATTR4_ALL = 0xFFFFFFFF, + SPELL_ATTR4_NONE = 0x00000000, + SPELL_ATTR4_UNK0 = 0x00000001, // 0 + SPELL_ATTR4_UNK1 = 0x00000002, // 1 proc on finishing move? + SPELL_ATTR4_UNK2 = 0x00000004, // 2 + SPELL_ATTR4_UNK3 = 0x00000008, // 3 + SPELL_ATTR4_UNK4 = 0x00000010, // 4 This will no longer cause guards to attack on use?? + SPELL_ATTR4_UNK5 = 0x00000020, // 5 + SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen + SPELL_ATTR4_TRIGGERED = 0x00000080, // 7 spells forced to be triggered + SPELL_ATTR4_UNK8 = 0x00000100, // 8 ignores taken percent damage mods? + SPELL_ATTR4_UNK9 = 0x00000200, // 9 + SPELL_ATTR4_SPELL_VS_EXTEND_COST = 0x00000400, // 10 Rogue Shiv have this flag + SPELL_ATTR4_UNK11 = 0x00000800, // 11 + SPELL_ATTR4_UNK12 = 0x00001000, // 12 + SPELL_ATTR4_UNK13 = 0x00002000, // 13 + SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS = 0x00004000, // 14 doesn't break auras by damage from these spells + SPELL_ATTR4_UNK15 = 0x00008000, // 15 + SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16 + SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 + SPELL_ATTR4_AREA_TARGET_CHAIN = 0x00040000, // 18 (NYI)hits area targets one after another instead of all at once + SPELL_ATTR4_UNK19 = 0x00080000, // 19 + SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER = 0x00100000, // 20 supersedes message "More powerful spell applied" for self casts. + SPELL_ATTR4_UNK21 = 0x00200000, // 21 + SPELL_ATTR4_UNK22 = 0x00400000, // 22 + SPELL_ATTR4_UNK23 = 0x00800000, // 23 + SPELL_ATTR4_UNK24 = 0x01000000, // 24 + SPELL_ATTR4_UNK25 = 0x02000000, // 25 pet scaling auras + SPELL_ATTR4_CAST_ONLY_IN_OUTLAND = 0x04000000, // 26 Can only be used in Outland. + SPELL_ATTR4_UNK27 = 0x08000000, // 27 + SPELL_ATTR4_UNK28 = 0x10000000, // 28 + SPELL_ATTR4_UNK29 = 0x20000000, // 29 + SPELL_ATTR4_UNK30 = 0x40000000, // 30 + SPELL_ATTR4_UNK31 = 0x80000000 // 31 }; [Flags] public enum SpellAtributeEx5 : uint { - SPELL_ATTR5_ALL = 0xFFFFFFFF, - SPELL_ATTR5_NONE = 0x00000000, - SPELL_ATTR5_UNK0 = 0x00000001, // 0 - SPELL_ATTR5_NO_REAGENT_WHILE_PREP = 0x00000002, // 1 not need reagents if UNIT_FLAG_PREPARATION - SPELL_ATTR5_UNK2 = 0x00000004, // 2 - SPELL_ATTR5_USABLE_WHILE_STUNNED = 0x00000008, // 3 usable while stunned - SPELL_ATTR5_UNK4 = 0x00000010, // 4 - SPELL_ATTR5_SINGLE_TARGET_SPELL = 0x00000020, // 5 Only one target can be apply at a time - SPELL_ATTR5_UNK6 = 0x00000040, // 6 - SPELL_ATTR5_UNK7 = 0x00000080, // 7 - SPELL_ATTR5_UNK8 = 0x00000100, // 8 - SPELL_ATTR5_START_PERIODIC_AT_APPLY = 0x00000200, // 9 begin periodic tick at aura apply - SPELL_ATTR5_HIDE_DURATION = 0x00000400, // 10 - SPELL_ATTR5_UNK11 = 0x00000800, // 11 - SPELL_ATTR5_UNK12 = 0x00001000, // 12 - SPELL_ATTR5_HASTE_AFFECT_DURATION = 0x00002000, // 13 haste effects decrease duration of this - SPELL_ATTR5_UNK14 = 0x00004000, // 14 - SPELL_ATTR5_UNK15 = 0x00008000, // 15 - SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK = 0x00010000, // 16 this allows spells with EquippedItemClass to affect spells from other items if the required item is equipped - SPELL_ATTR5_USABLE_WHILE_FEARED = 0x00020000, // 17 usable while feared - SPELL_ATTR5_USABLE_WHILE_CONFUSED = 0x00040000, // 18 usable while confused - SPELL_ATTR5_UNK19 = 0x00080000, // 19 - SPELL_ATTR5_UNK20 = 0x00100000, // 20 - SPELL_ATTR5_UNK21 = 0x00200000, // 21 - SPELL_ATTR5_UNK22 = 0x00400000, // 22 - SPELL_ATTR5_UNK23 = 0x00800000, // 23 - SPELL_ATTR5_UNK24 = 0x01000000, // 24 - SPELL_ATTR5_UNK25 = 0x02000000, // 25 - SPELL_ATTR5_UNK26 = 0x04000000, // 26 - SPELL_ATTR5_UNK27 = 0x08000000, // 27 - SPELL_ATTR5_UNK28 = 0x10000000, // 28 - SPELL_ATTR5_UNK29 = 0x20000000, // 29 - SPELL_ATTR5_UNK30 = 0x40000000, // 30 - SPELL_ATTR5_UNK31 = 0x80000000 // 31 Forces all nearby enemies to focus attacks caster + SPELL_ATTR5_ALL = 0xFFFFFFFF, + SPELL_ATTR5_NONE = 0x00000000, + SPELL_ATTR5_UNK0 = 0x00000001, // 0 + SPELL_ATTR5_NO_REAGENT_WHILE_PREP = 0x00000002, // 1 not need reagents if UNIT_FLAG_PREPARATION + SPELL_ATTR5_UNK2 = 0x00000004, // 2 + SPELL_ATTR5_USABLE_WHILE_STUNNED = 0x00000008, // 3 usable while stunned + SPELL_ATTR5_UNK4 = 0x00000010, // 4 + SPELL_ATTR5_SINGLE_TARGET_SPELL = 0x00000020, // 5 Only one target can be apply at a time + SPELL_ATTR5_UNK6 = 0x00000040, // 6 + SPELL_ATTR5_UNK7 = 0x00000080, // 7 + SPELL_ATTR5_UNK8 = 0x00000100, // 8 + SPELL_ATTR5_START_PERIODIC_AT_APPLY = 0x00000200, // 9 begin periodic tick at aura apply + SPELL_ATTR5_HIDE_DURATION = 0x00000400, // 10 do not send duration to client + SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET = 0x00000800, // 11 (NYI) uses target's target as target if original target not valid (intervene for example) + SPELL_ATTR5_UNK12 = 0x00001000, // 12 + SPELL_ATTR5_HASTE_AFFECT_DURATION = 0x00002000, // 13 haste effects decrease duration of this + SPELL_ATTR5_UNK14 = 0x00004000, // 14 + SPELL_ATTR5_UNK15 = 0x00008000, // 15 + SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK = 0x00010000, // 16 this allows spells with EquippedItemClass to affect spells from other items if the required item is equipped + SPELL_ATTR5_USABLE_WHILE_FEARED = 0x00020000, // 17 usable while feared + SPELL_ATTR5_USABLE_WHILE_CONFUSED = 0x00040000, // 18 usable while confused + SPELL_ATTR5_UNK19 = 0x00080000, // 19 + SPELL_ATTR5_UNK20 = 0x00100000, // 20 + SPELL_ATTR5_UNK21 = 0x00200000, // 21 + SPELL_ATTR5_UNK22 = 0x00400000, // 22 + SPELL_ATTR5_UNK23 = 0x00800000, // 23 + SPELL_ATTR5_UNK24 = 0x01000000, // 24 + SPELL_ATTR5_UNK25 = 0x02000000, // 25 + SPELL_ATTR5_UNK26 = 0x04000000, // 26 + SPELL_ATTR5_UNK27 = 0x08000000, // 27 + SPELL_ATTR5_UNK28 = 0x10000000, // 28 + SPELL_ATTR5_UNK29 = 0x20000000, // 29 + SPELL_ATTR5_UNK30 = 0x40000000, // 30 + SPELL_ATTR5_UNK31 = 0x80000000 // 31 Forces all nearby enemies to focus attacks caster }; [Flags] public enum SpellAtributeEx6 : uint { - SPELL_ATTR6_ALL = 0xFFFFFFFF, - SPELL_ATTR6_NONE = 0x00000000, - SPELL_ATTR6_UNK0 = 0x00000001, // 0 Only Move spell have this flag - SPELL_ATTR6_ONLY_IN_ARENA = 0x00000002, // 1 only usable in arena - SPELL_ATTR6_IGNORE_CASTER_AURAS = 0x00000004, // 2 - SPELL_ATTR6_UNK3 = 0x00000008, // 3 - SPELL_ATTR6_UNK4 = 0x00000010, // 4 - SPELL_ATTR6_UNK5 = 0x00000020, // 5 - SPELL_ATTR6_UNK6 = 0x00000040, // 6 - SPELL_ATTR6_UNK7 = 0x00000080, // 7 - SPELL_ATTR6_IGNORE_CROWD_CONTROL_TARGETS = 0x00000100, // 8 - SPELL_ATTR6_UNK9 = 0x00000200, // 9 - SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS = 0x00000400, // 10 NYI! - SPELL_ATTR6_NOT_IN_RAID_INSTANCE = 0x00000800, // 11 not usable in raid instance - SPELL_ATTR6_UNK12 = 0x00001000, // 12 - SPELL_ATTR6_UNK13 = 0x00002000, // 13 - SPELL_ATTR6_UNK14 = 0x00004000, // 14 - SPELL_ATTR6_UNK15 = 0x00008000, // 15 not set in 3.0.3 - SPELL_ATTR6_UNK16 = 0x00010000, // 16 - SPELL_ATTR6_UNK17 = 0x00020000, // 17 - SPELL_ATTR6_UNK18 = 0x00040000, // 18 - SPELL_ATTR6_UNK19 = 0x00080000, // 19 - SPELL_ATTR6_UNK20 = 0x00100000, // 20 - SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute - SPELL_ATTR6_UNK22 = 0x00400000, // 22 - SPELL_ATTR6_UNK23 = 0x00800000, // 23 - SPELL_ATTR6_CAN_TARGET_UNTARGETABLE = 0x01000000, // 24 NYI! - SPELL_ATTR6_UNK25 = 0x02000000, // 25 - SPELL_ATTR6_UNK26 = 0x04000000, // 26 - SPELL_ATTR6_UNK27 = 0x08000000, // 27 - SPELL_ATTR6_UNK28 = 0x10000000, // 28 - SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS = 0x20000000, // 29 ignores done percent damage mods? - SPELL_ATTR6_UNK30 = 0x40000000, // 30 - SPELL_ATTR6_UNK31 = 0x80000000 // 31 + SPELL_ATTR6_ALL = 0xFFFFFFFF, + SPELL_ATTR6_NONE = 0x00000000, + SPELL_ATTR6_DONT_DISPLAY_COOLDOWN = 0x00000001, // 0 client doesn't display cooldown in tooltip for these spells + SPELL_ATTR6_ONLY_IN_ARENA = 0x00000002, // 1 only usable in arena + SPELL_ATTR6_IGNORE_CASTER_AURAS = 0x00000004, // 2 + SPELL_ATTR6_UNK3 = 0x00000008, // 3 + SPELL_ATTR6_UNK4 = 0x00000010, // 4 + SPELL_ATTR6_UNK5 = 0x00000020, // 5 + SPELL_ATTR6_UNK6 = 0x00000040, // 6 + SPELL_ATTR6_UNK7 = 0x00000080, // 7 + SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED = 0x00000100, // 8 + SPELL_ATTR6_UNK9 = 0x00000200, // 9 + SPELL_ATTR6_CAN_TARGET_POSSESSED_FRIENDS = 0x00000400, // 10 NYI! + SPELL_ATTR6_NOT_IN_RAID_INSTANCE = 0x00000800, // 11 not usable in raid instance + SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE = 0x00001000, // 12 castable while caster is on vehicle + SPELL_ATTR6_CAN_TARGET_INVISIBLE = 0x00002000, // 13 ignore visibility requirement for spell target (phases, invisibility, etc.) + SPELL_ATTR6_UNK14 = 0x00004000, // 14 + SPELL_ATTR6_UNK15 = 0x00008000, // 15 not set in 3.0.3 + SPELL_ATTR6_UNK16 = 0x00010000, // 16 + SPELL_ATTR6_UNK17 = 0x00020000, // 17 + SPELL_ATTR6_CAST_BY_CHARMER = 0x00040000, // 18 client won't allow to cast these spells when unit is not possessed && charmer of caster will be original caster + SPELL_ATTR6_UNK19 = 0x00080000, // 19 + SPELL_ATTR6_UNK20 = 0x00100000, // 20 + SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute + SPELL_ATTR6_UNK22 = 0x00400000, // 22 + SPELL_ATTR6_UNK23 = 0x00800000, // 23 + SPELL_ATTR6_CAN_TARGET_UNTARGETABLE = 0x01000000, // 24 + SPELL_ATTR6_UNK25 = 0x02000000, // 25 + SPELL_ATTR6_UNK26 = 0x04000000, // 26 + SPELL_ATTR6_UNK27 = 0x08000000, // 27 + SPELL_ATTR6_UNK28 = 0x10000000, // 28 + SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS = 0x20000000, // 29 ignores done percent damage mods? + SPELL_ATTR6_UNK30 = 0x40000000, // 30 + SPELL_ATTR6_UNK31 = 0x80000000 // 31 }; [Flags] public enum SpellAtributeEx7 : uint { - SPELL_ATTR7_ALL = 0xFFFFFFFF, - SPELL_ATTR7_NONE = 0x00000000, - SPELL_ATTR7_UNK0 = 0x00000001, // 0 Shaman's new spells (Call of the ...), Feign Death. - SPELL_ATTR7_UNK1 = 0x00000002, // 1 Not set in 3.2.2a. - SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // 2 Paladin's auras and 65607 only. - SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS - SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 66109 test spell. - SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. - SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). - SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell. - SPELL_ATTR7_HORDE_ONLY = 0x00000100, // 8 Teleports, mounts and other spells. - SPELL_ATTR7_ALLIANCE_ONLY = 0x00000200, // 9 Teleports, mounts and other spells. - SPELL_ATTR7_DISPEL_CHARGES = 0x00000400, // 10 Dispel and Spellsteal individual charges instead of whole aura. - SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER = 0x00000800, // 11 Only non-player casts interrupt, though Feral Charge - Bear has it. - SPELL_ATTR7_UNK12 = 0x00001000, // 12 Not set in 3.2.2a. - SPELL_ATTR7_UNK13 = 0x00002000, // 13 Not set in 3.2.2a. - SPELL_ATTR7_UNK14 = 0x00004000, // 14 Only 52150 (Raise Dead - Pet) spell. - SPELL_ATTR7_UNK15 = 0x00008000, // 15 Exorcism. Usable on players? 100% crit chance on undead and demons? - SPELL_ATTR7_UNK16 = 0x00010000, // 16 Druid spells (29166, 54833, 64372, 68285). - SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell. - SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects. - SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones. - SPELL_ATTR7_UNK20 = 0x00100000, // 20 - SPELL_ATTR7_UNK21 = 0x00200000, // 21 - SPELL_ATTR7_UNK22 = 0x00400000, // 22 - SPELL_ATTR7_UNK23 = 0x00800000, // 23 - SPELL_ATTR7_UNK24 = 0x01000000, // 24 - SPELL_ATTR7_UNK25 = 0x02000000, // 25 - SPELL_ATTR7_UNK26 = 0x04000000, // 26 - SPELL_ATTR7_UNK27 = 0x08000000, // 27 - SPELL_ATTR7_UNK28 = 0x10000000, // 28 - SPELL_ATTR7_UNK29 = 0x20000000, // 29 - SPELL_ATTR7_UNK30 = 0x40000000, // 30 - SPELL_ATTR7_UNK31 = 0x80000000, // 31 + SPELL_ATTR7_ALL = 0xFFFFFFFF, + SPELL_ATTR7_NONE = 0x00000000, + SPELL_ATTR7_UNK0 = 0x00000001, // 0 Shaman's new spells (Call of the ...), Feign Death. + SPELL_ATTR7_UNK1 = 0x00000002, // 1 Not set in 3.2.2a. + SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // 2 Paladin's auras and 65607 only. + SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS + SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 66109 test spell. + SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. + SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). + SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell. + SPELL_ATTR7_HORDE_ONLY = 0x00000100, // 8 Teleports, mounts and other spells. + SPELL_ATTR7_ALLIANCE_ONLY = 0x00000200, // 9 Teleports, mounts and other spells. + SPELL_ATTR7_DISPEL_CHARGES = 0x00000400, // 10 Dispel and Spellsteal individual charges instead of whole aura. + SPELL_ATTR7_INTERRUPT_ONLY_NONPLAYER = 0x00000800, // 11 Only non-player casts interrupt, though Feral Charge - Bear has it. + SPELL_ATTR7_UNK12 = 0x00001000, // 12 Not set in 3.2.2a. + SPELL_ATTR7_UNK13 = 0x00002000, // 13 Not set in 3.2.2a. + SPELL_ATTR7_UNK14 = 0x00004000, // 14 Only 52150 (Raise Dead - Pet) spell. + SPELL_ATTR7_UNK15 = 0x00008000, // 15 Exorcism. Usable on players? 100% crit chance on undead and demons? + SPELL_ATTR7_UNK16 = 0x00010000, // 16 Druid spells (29166, 54833, 64372, 68285). + SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell. + SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects. + SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones. + SPELL_ATTR7_UNK20 = 0x00100000, // 20 + SPELL_ATTR7_UNK21 = 0x00200000, // 21 + SPELL_ATTR7_UNK22 = 0x00400000, // 22 + SPELL_ATTR7_UNK23 = 0x00800000, // 23 + SPELL_ATTR7_UNK24 = 0x01000000, // 24 + SPELL_ATTR7_UNK25 = 0x02000000, // 25 + SPELL_ATTR7_UNK26 = 0x04000000, // 26 + SPELL_ATTR7_UNK27 = 0x08000000, // 27 + SPELL_ATTR7_UNK28 = 0x10000000, // 28 + SPELL_ATTR7_UNK29 = 0x20000000, // 29 + SPELL_ATTR7_UNK30 = 0x40000000, // 30 + SPELL_ATTR7_UNK31 = 0x80000000 // 31 }; [Flags] From 68e4956985d45c07dc34b62a3780d671ab3ba292 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 28 Aug 2011 00:03:42 +0200 Subject: [PATCH 20/58] Added printing required areas to spell information --- SpellWork/DBC/DBC.cs | 3 +++ SpellWork/DBC/Structure.cs | 38 +++++++++++++++++++++++++++++++++ SpellWork/Loader.cs | 2 ++ SpellWork/Spell/SpellInfo.cs | 41 ++++++++++++++++++++++++++++++++++++ 4 files changed, 84 insertions(+) diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index d5405284..262fa7b0 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -13,6 +13,8 @@ public static class DBC public const int MaxEffectIndex = 3; public const int SpellEntryForDetectLocale = 1; + public static Dictionary AreaGroup; + public static Dictionary AreaTable; public static Dictionary OverrideSpellData; public static Dictionary ScreenEffect; public static Dictionary SkillLineAbility; @@ -24,6 +26,7 @@ public static class DBC public static Dictionary SpellRadius; public static Dictionary SpellRange; + public static Dictionary AreaStrings = new Dictionary(); public static Dictionary SpellStrings = new Dictionary(); public static Dictionary SkillLineStrings = new Dictionary(); public static Dictionary SpellRangeStrings = new Dictionary(); diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs index ddc85411..09e6de0f 100644 --- a/SpellWork/DBC/Structure.cs +++ b/SpellWork/DBC/Structure.cs @@ -429,6 +429,44 @@ public struct OverrideSpellDataEntry public uint Unk; }; + public struct AreaGroupEntry + { + public uint AreaGroupId; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] + public uint[] AreaId; + public uint NextGroup; + }; + + public struct AreaTableEntry + { + public uint Id; + public uint MapId; + public uint ZoneId; + public uint ExploreFlag; + public uint Flags; + public uint SoundPreferences; + public uint SoundPreferencesUnderwater; + public uint SoundAmbience; + public uint ZoneMusic; + public uint ZoneIntroMusicTable; + public int Level; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] + public uint[] NamePtr; + public uint StringFlags; + public uint FactionFlags; + public uint LiquidType1; + public uint LiquidType2; + public uint LiquidType3; + public uint LiquidType4; + public float MinElevation; + public float AmbientMultiplier; + public uint Light; + + public string Name + { + get { return DBC.AreaStrings.GetValue(NamePtr[(uint)DBC.Locale]); } + } + }; //=============== DateBase =================\\ public struct SpellProcEventEntry diff --git a/SpellWork/Loader.cs b/SpellWork/Loader.cs index 50bc2fe7..a1a5dd57 100644 --- a/SpellWork/Loader.cs +++ b/SpellWork/Loader.cs @@ -8,6 +8,8 @@ class Loader { public Loader() { + DBC.DBC.AreaGroup = DBCReader.ReadDBC(null); + DBC.DBC.AreaTable = DBCReader.ReadDBC(DBC.DBC.AreaStrings); DBC.DBC.OverrideSpellData = DBCReader.ReadDBC(null); DBC.DBC.ScreenEffect = DBCReader.ReadDBC(DBC.DBC.ScreenEffectStrings); DBC.DBC.SkillLine = DBCReader.ReadDBC(DBC.DBC.SkillLineStrings); diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 9b139e59..83667026 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -188,6 +188,8 @@ private void ViewSpellInfo() AppendSpellAura(); + AppendAreaInfo(); + _rtb.AppendFormatLineIfNotNull("Requires Spell Focus {0}", _spell.RequiresSpellFocus); if (_spell.ProcFlags != 0) @@ -501,6 +503,45 @@ private void AppendDifficultyInfo() } } + private void AppendAreaInfo() + { + if (_spell.AreaGroupId <= 0) + return; + + var areaGroupId = (uint)_spell.AreaGroupId; + if (!DBC.DBC.AreaGroup.ContainsKey(areaGroupId)) + { + _rtb.AppendFormatLine("Cannot find area group id {0} in AreaGroup.dbc!", _spell.AreaGroupId); + return; + } + + _rtb.AppendLine(); + _rtb.SetBold(); + _rtb.AppendLine("Allowed areas:"); + while (DBC.DBC.AreaGroup.ContainsKey(areaGroupId)) + { + var groupEntry = DBC.DBC.AreaGroup[areaGroupId]; + for (var i = 0; i < 6; ++i) + { + var areaId = groupEntry.AreaId[i]; + if (DBC.DBC.AreaTable.ContainsKey(areaId)) + { + var areaEntry = DBC.DBC.AreaTable[areaId]; + _rtb.AppendFormatLine("{0} - {1} (Map: {2})", areaId, areaEntry.Name, areaEntry.MapId); + } + } + + + if (groupEntry.NextGroup == 0) + break; + + // Try search in next group + areaGroupId = groupEntry.NextGroup; + } + + _rtb.AppendLine(); + } + private void AppendItemInfo() { if (!MySqlConnection.Connected) From 383be266acff8aca631ed60ca96fa9bbeef6ff22 Mon Sep 17 00:00:00 2001 From: Warpten Date: Sun, 11 Mar 2012 12:55:21 +0100 Subject: [PATCH 21/58] Add support for SpellMissile.dbc, SpellMissileMotion.dbc and SpellVisual.dbc to gather informations about spells that behave like missiles. --- SpellWork/DBC/DBC.cs | 4 ++ SpellWork/DBC/Structure.cs | 74 ++++++++++++++++++++++++++++++++++++ SpellWork/Loader.cs | 4 +- SpellWork/Spell/SpellInfo.cs | 57 +++++++++++++++++++++++++++ 4 files changed, 138 insertions(+), 1 deletion(-) diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index 262fa7b0..42eb6a5e 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -17,6 +17,9 @@ public static class DBC public static Dictionary AreaTable; public static Dictionary OverrideSpellData; public static Dictionary ScreenEffect; + public static Dictionary SpellMissileMotion; + public static Dictionary SpellMissile; + public static Dictionary SpellVisual; public static Dictionary SkillLineAbility; public static Dictionary SkillLine; public static Dictionary Spell; @@ -31,6 +34,7 @@ public static class DBC public static Dictionary SkillLineStrings = new Dictionary(); public static Dictionary SpellRangeStrings = new Dictionary(); public static Dictionary ScreenEffectStrings = new Dictionary(); + public static Dictionary SpellMissileMotionStrings = new Dictionary(); // DB public static List ItemTemplate = new List(); diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs index 09e6de0f..5052d2c7 100644 --- a/SpellWork/DBC/Structure.cs +++ b/SpellWork/DBC/Structure.cs @@ -420,6 +420,80 @@ public string Name } }; + public struct SpellVisualEntry + { + public uint Id; + public uint PrecastKit; + public uint CastingKit; + public uint ImpactKit; + public uint StateKit; + public uint StateDoneKit; + public uint ChannelKit; + public int HasMissile; + public uint MissileModel; + public uint MissilePathType; + public uint MissileDestinationAttachment; + public uint MissileSound; + public uint AnimEventSoundID; + public uint Flags; + public uint CasterImpactKit; + public uint TargetImpactKit; + public int MissileAttachment; + public uint MissileFollowGroundHeight; + public uint MissileFollowGroundDropSpeed; + public uint MissileFollowGroundApprach; + public uint MissileFollowGroundFlags; + public uint MissileMotionId; + public uint MissileTargetingKit; + public uint InstantAreaKit; + public uint ImpactAreaKit; + public uint PersistentAreaKit; + public float MissileCastOffsetX; + public float MissileCastOffsetY; + public float MissileCastOffsetZ; + public float MissileImpactOffsetX; + public float MissileImpactOffsetY; + public float MissileImpactOffsetZ; + }; + + public struct SpellMissileMotionEntry + { + public uint Id; + private uint _Name; + private uint _Script; + public uint Flags; + public uint MissileCount; + + public string Name + { + get { return DBC.SpellMissileMotionStrings.GetValue(_Name); } + } + + public string Script + { + get { return DBC.SpellMissileMotionStrings.GetValue(_Script); } + } + }; + + public struct SpellMissileEntry + { + public uint Id; + public uint Flags; + public float defaultPitchMin; + public float defaultPitchMax; + public float defaultSpeedMin; + public float defaultSpeedMax; + public float randomizeFacingMin; + public float randomizeFacingMax; + public float randomizePitchMin; + public float randomizePitchMax; + public float randomizeSpeedMin; + public float randomizeSpeedMax; + public float gravity; + public float maxDuration; + public float collisionRadius; + }; + public struct OverrideSpellDataEntry { public uint Id; diff --git a/SpellWork/Loader.cs b/SpellWork/Loader.cs index a1a5dd57..ce59e92a 100644 --- a/SpellWork/Loader.cs +++ b/SpellWork/Loader.cs @@ -20,7 +20,9 @@ public Loader() DBC.DBC.SpellDuration = DBCReader.ReadDBC(null); DBC.DBC.SpellRadius = DBCReader.ReadDBC(null); DBC.DBC.SpellRange = DBCReader.ReadDBC(DBC.DBC.SpellRangeStrings); - + DBC.DBC.SpellMissile = DBCReader.ReadDBC(null); + DBC.DBC.SpellMissileMotion = DBCReader.ReadDBC(DBC.DBC.SpellMissileMotionStrings); + DBC.DBC.SpellVisual = DBCReader.ReadDBC(null); DBC.DBC.Locale = DetectedLocale; } diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 83667026..02d6bd53 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -209,6 +209,63 @@ private void ViewSpellInfo() AppendSpellEffectInfo(); AppendItemInfo(); AppendDifficultyInfo(); + + AppendSpellVisualInfo(); + } + + private void AppendSpellVisualInfo() + { + _rtb.AppendLine(_line); + var spellVisualData = from spellVisualEntry in DBC.DBC.SpellVisual + where spellVisualEntry.Value.Id == _spell.SpellVisual[0] + select new { spellVisualEntry }; + + if (spellVisualData.Count() == 0) + return; + + _rtb.SetBold(); + _rtb.AppendLine("Missile data"); + _rtb.SetDefaultStyle(); + + SpellVisualEntry visualData = spellVisualData.First().spellVisualEntry.Value; + + _rtb.AppendFormatLine("Missile Model ID: {0}", visualData.MissileModel); + _rtb.AppendFormatLine("Missile attachment: {0}", visualData.MissileAttachment); + _rtb.AppendFormatLine("Missile cast offset: X:{0} Y:{1} Z:{2}", visualData.MissileCastOffsetX, visualData.MissileCastOffsetY, visualData.MissileCastOffsetZ); + _rtb.AppendFormatLine("Missile impact offset: X:{0} Y:{1} Z:{2}", visualData.MissileImpactOffsetX, visualData.MissileImpactOffsetY, visualData.MissileImpactOffsetZ); + + // Missile Model Data. + var missileData = from spellMissileEntry in DBC.DBC.SpellMissile + where spellMissileEntry.Value.Id == visualData.MissileModel + select new { spellMissileEntry }; + + if (missileData.Count() != 0) + { + SpellMissileEntry missileEntry = missileData.First().spellMissileEntry.Value; + _rtb.AppendFormatLine("MissileEntry ID: {0}", missileEntry.Id); + _rtb.AppendFormatLine("Collision Radius: {0}", missileEntry.collisionRadius); + _rtb.AppendFormatLine("Default Pitch: {0} - {1}", missileEntry.defaultPitchMin, missileEntry.defaultPitchMax); + _rtb.AppendFormatLine("Random Pitch: {0} - {1}", missileEntry.randomizePitchMax, missileEntry.randomizePitchMax); + _rtb.AppendFormatLine("Default Speed: {0} - {1}", missileEntry.defaultSpeedMin, missileEntry.defaultSpeedMax); + _rtb.AppendFormatLine("Randomize Speed: {0} - {1}", missileEntry.randomizeSpeedMin, missileEntry.randomizeSpeedMax); + _rtb.AppendFormatLine("Gravity: {0}", missileEntry.gravity); + _rtb.AppendFormatLine("Maximum duration:", missileEntry.maxDuration); + _rtb.AppendLine(""); + } + + // Missile Motion Data. + var missileMotionData = from spellMissileMotionEntry in DBC.DBC.SpellMissileMotion + where spellMissileMotionEntry.Value.Id == visualData.MissileMotionId + select new { spellMissileMotionEntry }; + + if (missileMotionData.Count() != 0) + { + SpellMissileMotionEntry missileMotionEntry = missileMotionData.First().spellMissileMotionEntry.Value; + _rtb.AppendFormatLine("Missile motion: {0}", missileMotionEntry.Name); + _rtb.AppendFormatLine("Missile count: {0}", missileMotionEntry.MissileCount); + _rtb.AppendLine("Missile Script body:"); + _rtb.AppendText(missileMotionEntry.Script); + } } private void AppendSkillLine() From 04956cb03aa3eee20f489db443b297cc7f679ef7 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 31 Mar 2012 23:03:06 +0200 Subject: [PATCH 22/58] Fixed warnings about never assigned values --- SpellWork/DBC/Structure.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs index 5052d2c7..fab2cf83 100644 --- a/SpellWork/DBC/Structure.cs +++ b/SpellWork/DBC/Structure.cs @@ -459,8 +459,8 @@ public struct SpellVisualEntry public struct SpellMissileMotionEntry { public uint Id; - private uint _Name; - private uint _Script; + public uint _Name; + public uint _Script; public uint Flags; public uint MissileCount; From bda54997e694c5a6e1257f638d2fbe70824ebcf1 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 8 Apr 2012 14:54:09 +0200 Subject: [PATCH 23/58] Output spell missile section only if spell really has a missile --- SpellWork/Spell/SpellInfo.cs | 40 +++++++++++++++--------------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 02d6bd53..d2d14c0e 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -215,33 +215,30 @@ private void ViewSpellInfo() private void AppendSpellVisualInfo() { - _rtb.AppendLine(_line); - var spellVisualData = from spellVisualEntry in DBC.DBC.SpellVisual - where spellVisualEntry.Value.Id == _spell.SpellVisual[0] - select new { spellVisualEntry }; + SpellVisualEntry visualData; + if (!DBC.DBC.SpellVisual.TryGetValue(_spell.SpellVisual[0], out visualData)) + return; - if (spellVisualData.Count() == 0) + SpellMissileEntry missileEntry; + SpellMissileMotionEntry missileMotionEntry; + var hasMissileEntry = DBC.DBC.SpellMissile.TryGetValue(visualData.MissileModel, out missileEntry); + var hasMissileMotion = DBC.DBC.SpellMissileMotion.TryGetValue(visualData.MissileMotionId, out missileMotionEntry); + + if (!hasMissileEntry && !hasMissileMotion) return; + _rtb.AppendLine(_line); _rtb.SetBold(); _rtb.AppendLine("Missile data"); _rtb.SetDefaultStyle(); - SpellVisualEntry visualData = spellVisualData.First().spellVisualEntry.Value; - - _rtb.AppendFormatLine("Missile Model ID: {0}", visualData.MissileModel); - _rtb.AppendFormatLine("Missile attachment: {0}", visualData.MissileAttachment); - _rtb.AppendFormatLine("Missile cast offset: X:{0} Y:{1} Z:{2}", visualData.MissileCastOffsetX, visualData.MissileCastOffsetY, visualData.MissileCastOffsetZ); - _rtb.AppendFormatLine("Missile impact offset: X:{0} Y:{1} Z:{2}", visualData.MissileImpactOffsetX, visualData.MissileImpactOffsetY, visualData.MissileImpactOffsetZ); - // Missile Model Data. - var missileData = from spellMissileEntry in DBC.DBC.SpellMissile - where spellMissileEntry.Value.Id == visualData.MissileModel - select new { spellMissileEntry }; - - if (missileData.Count() != 0) + if (hasMissileEntry) { - SpellMissileEntry missileEntry = missileData.First().spellMissileEntry.Value; + _rtb.AppendFormatLine("Missile Model ID: {0}", visualData.MissileModel); + _rtb.AppendFormatLine("Missile attachment: {0}", visualData.MissileAttachment); + _rtb.AppendFormatLine("Missile cast offset: X:{0} Y:{1} Z:{2}", visualData.MissileCastOffsetX, visualData.MissileCastOffsetY, visualData.MissileCastOffsetZ); + _rtb.AppendFormatLine("Missile impact offset: X:{0} Y:{1} Z:{2}", visualData.MissileImpactOffsetX, visualData.MissileImpactOffsetY, visualData.MissileImpactOffsetZ); _rtb.AppendFormatLine("MissileEntry ID: {0}", missileEntry.Id); _rtb.AppendFormatLine("Collision Radius: {0}", missileEntry.collisionRadius); _rtb.AppendFormatLine("Default Pitch: {0} - {1}", missileEntry.defaultPitchMin, missileEntry.defaultPitchMax); @@ -254,13 +251,8 @@ private void AppendSpellVisualInfo() } // Missile Motion Data. - var missileMotionData = from spellMissileMotionEntry in DBC.DBC.SpellMissileMotion - where spellMissileMotionEntry.Value.Id == visualData.MissileMotionId - select new { spellMissileMotionEntry }; - - if (missileMotionData.Count() != 0) + if (hasMissileMotion) { - SpellMissileMotionEntry missileMotionEntry = missileMotionData.First().spellMissileMotionEntry.Value; _rtb.AppendFormatLine("Missile motion: {0}", missileMotionEntry.Name); _rtb.AppendFormatLine("Missile count: {0}", missileMotionEntry.MissileCount); _rtb.AppendLine("Missile Script body:"); From 4d5c8e63fb1a5eef27f982e64601bc7bb241c2a5 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 18 Apr 2012 23:07:40 +0200 Subject: [PATCH 24/58] Print MaxAffectedTargets info --- SpellWork/Spell/SpellInfo.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index d2d14c0e..b7e33834 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -186,6 +186,9 @@ private void ViewSpellInfo() if (_spell.TargetAuraStateNot != 0) _rtb.AppendFormatLine("TargetAuraStateNot = {0} ({1})", _spell.TargetAuraStateNot, (AuraState)_spell.TargetAuraStateNot); + if (_spell.MaxAffectedTargets != 0) + _rtb.AppendFormatLine("MaxAffectedTargets = {0}", _spell.MaxAffectedTargets); + AppendSpellAura(); AppendAreaInfo(); From b42cea588ce3a95a945b6b01b9c80c44383ced40 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 14 Aug 2012 23:25:29 +0200 Subject: [PATCH 25/58] Update to 4.3.4 Use DBFilesClient.NET library Todo: Fix item templates (load from db2) --- SpellWork/DBC/DBC.cs | 99 +- SpellWork/DBC/DBCReader.cs | 58 - SpellWork/DBC/Structure.cs | 597 ---- SpellWork/DBC/Structures/AreaGroupEntry.cs | 12 + SpellWork/DBC/Structures/AreaTableEntry.cs | 32 + .../DBC/Structures/OverrideSpellDataEntry.cs | 13 + SpellWork/DBC/Structures/ScreenEffectEntry.cs | 17 + .../DBC/Structures/SkillLineAbilityEntry.cs | 22 + SpellWork/DBC/Structures/SkillLineEntry.cs | 13 + .../DBC/Structures/SpellAuraOptionsEntry.cs | 11 + .../Structures/SpellAuraRestrictionsEntry.cs | 15 + .../DBC/Structures/SpellCastTimesEntry.cs | 10 + .../SpellCastingRequirementsEntry.cs | 13 + .../DBC/Structures/SpellCategoriesEntry.cs | 13 + .../DBC/Structures/SpellClassOptionsEntry.cs | 14 + .../DBC/Structures/SpellCooldownsEntry.cs | 10 + .../DBC/Structures/SpellDifficultyEntry.cs | 11 + .../DBC/Structures/SpellDurationEntry.cs | 17 + SpellWork/DBC/Structures/SpellEffectEntry.cs | 58 + SpellWork/DBC/Structures/SpellEntry.cs | 128 + .../DBC/Structures/SpellEquippedItemsEntry.cs | 10 + .../DBC/Structures/SpellInterruptsEntry.cs | 12 + SpellWork/DBC/Structures/SpellLevelsEntry.cs | 10 + SpellWork/DBC/Structures/SpellMissileEntry.cs | 21 + .../DBC/Structures/SpellMissileMotionEntry.cs | 11 + SpellWork/DBC/Structures/SpellPowerEntry.cs | 14 + SpellWork/DBC/Structures/SpellRadiusEntry.cs | 10 + SpellWork/DBC/Structures/SpellRangeEntry.cs | 14 + .../DBC/Structures/SpellReagentsEntry.cs | 13 + .../DBC/Structures/SpellRuneCostEntry.cs | 12 + SpellWork/DBC/Structures/SpellScalingEntry.cs | 21 + .../DBC/Structures/SpellShapeshiftEntry.cs | 10 + .../SpellTargetRestrictionsEntry.cs | 12 + SpellWork/DBC/Structures/SpellTotemsEntry.cs | 13 + SpellWork/DBC/Structures/SpellVisualEntry.cs | 39 + SpellWork/DBFilesClient.NET.XML | 131 + SpellWork/DBFilesClient.NET.dll | Bin 0 -> 28672 bytes SpellWork/DataBase/MySQLConnect.cs | 12 +- SpellWork/Database/Structures.cs | 45 + SpellWork/Extensions/Extensions.cs | 4 +- SpellWork/Forms/FormMain.Designer.cs | 2409 ++++++++--------- SpellWork/Forms/FormMain.cs | 55 +- SpellWork/Forms/FormMain.resx | 16 +- SpellWork/Forms/FormSearch.cs | 19 +- SpellWork/Loader.cs | 47 - SpellWork/Program.cs | 17 +- SpellWork/Properties/Resources.Designer.cs | 16 +- SpellWork/Properties/Settings.Designer.cs | 86 +- SpellWork/Spell/ProcInfo.cs | 25 +- SpellWork/Spell/SpellCompare.cs | 9 +- SpellWork/Spell/SpellEnums.cs | 196 +- SpellWork/Spell/SpellInfo.cs | 155 +- SpellWork/Spell/SpellInfoHelper.cs | 367 +++ SpellWork/SpellWork.csproj | 64 +- SpellWork/app.config | 8 +- 55 files changed, 2803 insertions(+), 2263 deletions(-) delete mode 100644 SpellWork/DBC/DBCReader.cs delete mode 100644 SpellWork/DBC/Structure.cs create mode 100644 SpellWork/DBC/Structures/AreaGroupEntry.cs create mode 100644 SpellWork/DBC/Structures/AreaTableEntry.cs create mode 100644 SpellWork/DBC/Structures/OverrideSpellDataEntry.cs create mode 100644 SpellWork/DBC/Structures/ScreenEffectEntry.cs create mode 100644 SpellWork/DBC/Structures/SkillLineAbilityEntry.cs create mode 100644 SpellWork/DBC/Structures/SkillLineEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellAuraOptionsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellAuraRestrictionsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellCastTimesEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellCastingRequirementsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellCategoriesEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellClassOptionsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellCooldownsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellDifficultyEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellDurationEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellEffectEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellEquippedItemsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellInterruptsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellLevelsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellMissileEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellMissileMotionEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellPowerEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellRadiusEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellRangeEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellReagentsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellRuneCostEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellScalingEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellShapeshiftEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellTargetRestrictionsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellTotemsEntry.cs create mode 100644 SpellWork/DBC/Structures/SpellVisualEntry.cs create mode 100644 SpellWork/DBFilesClient.NET.XML create mode 100644 SpellWork/DBFilesClient.NET.dll create mode 100644 SpellWork/Database/Structures.cs delete mode 100644 SpellWork/Loader.cs create mode 100644 SpellWork/Spell/SpellInfoHelper.cs diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index 42eb6a5e..6044445d 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -1,11 +1,17 @@ +using System; using System.Collections.Generic; +using System.IO; +using System.Reflection; +using DBFilesClient.NET; +using SpellWork.Database; +using SpellWork.DBC.Structures; using SpellWork.Spell; namespace SpellWork.DBC { public static class DBC { - public const string Version = "SpellWork 3.3.5a (12340)"; + public const string Version = "SpellWork 4.3.4 (15595)"; public const string DbcPath = @"dbc"; public const int MaxDbcLocale = 16; @@ -13,33 +19,74 @@ public static class DBC public const int MaxEffectIndex = 3; public const int SpellEntryForDetectLocale = 1; - public static Dictionary AreaGroup; - public static Dictionary AreaTable; - public static Dictionary OverrideSpellData; - public static Dictionary ScreenEffect; - public static Dictionary SpellMissileMotion; - public static Dictionary SpellMissile; - public static Dictionary SpellVisual; - public static Dictionary SkillLineAbility; - public static Dictionary SkillLine; - public static Dictionary Spell; - public static Dictionary SpellCastTimes; - public static Dictionary SpellDifficulty; - public static Dictionary SpellDuration; - public static Dictionary SpellRadius; - public static Dictionary SpellRange; - - public static Dictionary AreaStrings = new Dictionary(); - public static Dictionary SpellStrings = new Dictionary(); - public static Dictionary SkillLineStrings = new Dictionary(); - public static Dictionary SpellRangeStrings = new Dictionary(); - public static Dictionary ScreenEffectStrings = new Dictionary(); - public static Dictionary SpellMissileMotionStrings = new Dictionary(); + public static DBCStorage AreaGroup = new DBCStorage(); + public static DBCStorage AreaTable = new DBCStorage(); + public static DBCStorage OverrideSpellData = new DBCStorage(); + public static DBCStorage ScreenEffect = new DBCStorage(); + public static DBCStorage SkillLineAbility = new DBCStorage(); + public static DBCStorage SkillLine = new DBCStorage(); + public static DBCStorage Spell = new DBCStorage(); + public static DBCStorage SpellAuraOptions = new DBCStorage(); + public static DBCStorage SpellAuraRestrictions = new DBCStorage(); + public static DBCStorage SpellCastingRequirements = new DBCStorage(); + public static DBCStorage SpellCastTimes = new DBCStorage(); + public static DBCStorage SpellCategories = new DBCStorage(); + public static DBCStorage SpellClassOptions = new DBCStorage(); + public static DBCStorage SpellCooldowns = new DBCStorage(); + public static DBCStorage SpellDifficulty = new DBCStorage(); + public static DBCStorage SpellDuration = new DBCStorage(); + public static DBCStorage SpellEffect = new DBCStorage(); + public static DBCStorage SpellEquippedItems = new DBCStorage(); + public static DBCStorage SpellInterrupts = new DBCStorage(); + public static DBCStorage SpellLevels = new DBCStorage(); + public static DBCStorage SpellMissile = new DBCStorage(); + public static DBCStorage SpellMissileMotion = new DBCStorage(); + public static DBCStorage SpellPower = new DBCStorage(); + public static DBCStorage SpellRadius = new DBCStorage(); + public static DBCStorage SpellRange = new DBCStorage(); + public static DBCStorage SpellReagents = new DBCStorage(); + public static DBCStorage SpellRuneCost = new DBCStorage(); + public static DBCStorage SpellScaling = new DBCStorage(); + public static DBCStorage SpellShapeshift = new DBCStorage(); + public static DBCStorage SpellTargetRestrictions = new DBCStorage(); + public static DBCStorage SpellTotems = new DBCStorage(); + public static DBCStorage SpellVisual = new DBCStorage(); + + public static Dictionary SpellInfoStore = new Dictionary(); + + public static void Load() + { + foreach (var dbc in typeof(DBC).GetFields(BindingFlags.Static | BindingFlags.Public)) + { + if (!dbc.FieldType.IsGenericType) + continue; + + if (dbc.FieldType.GetGenericTypeDefinition() != typeof(DBCStorage<>)) + continue; + + try + { + using (var strm = new FileStream(String.Format("{0}\\{1}.dbc", DbcPath, dbc.Name), FileMode.Open)) + dbc.FieldType.GetMethod("Load", new Type[] { typeof(FileStream) }).Invoke(dbc.GetValue(null), new object[] { strm }); + } + catch (DirectoryNotFoundException dnfe) + { + throw new DirectoryNotFoundException(String.Format("Could not open {0}.dbc!", dbc.Name)); + } + catch (TargetInvocationException tie) + { + if (tie.InnerException is ArgumentException) + throw new ArgumentException(String.Format("Failed to load {0}.dbc: {1}", dbc.Name, tie.InnerException.Message)); + + throw; + } + } + + foreach (var dbcInfo in Spell.Records) + SpellInfoStore.Add(dbcInfo.Id, new SpellInfoHelper(dbcInfo)); + } // DB public static List ItemTemplate = new List(); - - // Locale - public static LocalesDBC Locale { get; set; } } } diff --git a/SpellWork/DBC/DBCReader.cs b/SpellWork/DBC/DBCReader.cs deleted file mode 100644 index c2efe481..00000000 --- a/SpellWork/DBC/DBCReader.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Text; -using System.IO; -using System.Collections.Generic; -using System.Runtime.InteropServices; -using SpellWork.Extensions; - -namespace SpellWork.DBC -{ - static class DBCReader - { - /// Exception. - /// FileNotFoundException. - public static Dictionary ReadDBC(Dictionary strDict) where T : struct - { - var dict = new Dictionary(); - var fileName = Path.Combine(DBC.DbcPath, typeof(T).Name + ".dbc").Replace("Entry", String.Empty); - - using (var reader = new BinaryReader(new FileStream(fileName, FileMode.Open, FileAccess.Read), Encoding.UTF8)) - { - if (!File.Exists(fileName)) - throw new FileNotFoundException(); - // read dbc header - var header = reader.ReadStruct(); - var size = Marshal.SizeOf(typeof(T)); - - if (!header.IsDBC) - throw new Exception(fileName + " is not DBC files!"); - - if (header.RecordSize != size) - throw new Exception(string.Format("Size of row in DBC file ({0}) != size of DBC struct ({1}) in DBC: {2}", header.RecordSize, size, fileName)); - - // read dbc data - for (var r = 0; r < header.RecordsCount; ++r) - { - var key = reader.ReadUInt32(); - reader.BaseStream.Position -= 4; - - var entry = reader.ReadStruct(); - - dict.Add(key, entry); - } - - // read dbc strings - if (strDict != null) - { - while (reader.BaseStream.Position != reader.BaseStream.Length) - { - var offset = (uint)(reader.BaseStream.Position - header.StartStringPosition); - var str = reader.ReadCString(); - strDict.Add(offset, str); - } - } - } - return dict; - } - } -} diff --git a/SpellWork/DBC/Structure.cs b/SpellWork/DBC/Structure.cs deleted file mode 100644 index fab2cf83..00000000 --- a/SpellWork/DBC/Structure.cs +++ /dev/null @@ -1,597 +0,0 @@ -using System; -using System.Text; -using System.Runtime.InteropServices; -using SpellWork.Extensions; -using SpellWork.Spell; - -namespace SpellWork.DBC -{ - public struct DbcHeader - { - public int Signature; - public int RecordsCount; - public int FieldsCount; - public int RecordSize; - public int StringTableSize; - - public bool IsDBC - { - get { return Signature == 0x43424457; } - } - - public long DataSize - { - get { return RecordsCount * RecordSize; } - } - - public long StartStringPosition - { - get { return DataSize + Marshal.SizeOf(typeof(DbcHeader)); } - } - }; - - [StructLayout(LayoutKind.Sequential)] - public struct SpellEntry - { - public uint ID; // 0 m_ID - public uint Category; // 1 m_category - public uint Dispel; // 2 m_dispelType - public uint Mechanic; // 3 m_mechanic - public uint Attributes; // 4 m_attribute - public uint AttributesEx; // 5 m_attributesEx - public uint AttributesEx2; // 6 m_attributesExB - public uint AttributesEx3; // 7 m_attributesExC - public uint AttributesEx4; // 8 m_attributesExD - public uint AttributesEx5; // 9 m_attributesExE - public uint AttributesEx6; // 10 m_attributesExF - public uint AttributesEx7; // 11 3.2.0 (0x20 - totems, 0x4 - paladin auras, etc...) - public ulong Stances; // 12-13 m_shapeshiftMask - public ulong StancesNot; // 14-15 m_shapeshiftExclude - public uint Targets; // 16 m_targets - public uint TargetCreatureType; // 17 m_targetCreatureType - public uint RequiresSpellFocus; // 18 m_requiresSpellFocus - public uint FacingCasterFlags; // 19 m_facingCasterFlags - public uint CasterAuraState; // 20 m_casterAuraState - public uint TargetAuraState; // 21 m_targetAuraState - public uint CasterAuraStateNot; // 22 m_excludeCasterAuraState - public uint TargetAuraStateNot; // 23 m_excludeTargetAuraState - public uint CasterAuraSpell; // 24 m_casterAuraSpell - public uint TargetAuraSpell; // 25 m_targetAuraSpell - public uint ExcludeCasterAuraSpell; // 26 m_excludeCasterAuraSpell - public uint ExcludeTargetAuraSpell; // 27 m_excludeTargetAuraSpell - public uint CastingTimeIndex; // 28 m_castingTimeIndex - public uint RecoveryTime; // 29 m_recoveryTime - public uint CategoryRecoveryTime; // 30 m_categoryRecoveryTime - public uint InterruptFlags; // 31 m_interruptFlags - public uint AuraInterruptFlags; // 32 m_auraInterruptFlags - public uint ChannelInterruptFlags; // 33 m_channelInterruptFlags - public uint ProcFlags; // 34 m_procTypeMask - public uint ProcChance; // 35 m_procChance - public uint ProcCharges; // 36 m_procCharges - public uint MaxLevel; // 37 m_maxLevel - public uint BaseLevel; // 38 m_baseLevel - public uint SpellLevel; // 39 m_spellLevel - public uint DurationIndex; // 40 m_durationIndex - public uint PowerType; // 41 m_powerType - public uint ManaCost; // 42 m_manaCost - public uint ManaCostPerlevel; // 43 m_manaCostPerLevel - public uint ManaPerSecond; // 44 m_manaPerSecond - public uint ManaPerSecondPerLevel; // 45 m_manaPerSecondPerLevel - public uint RangeIndex; // 46 m_rangeIndex - public float Speed; // 47 m_speed - public uint ModalNextSpell; // 48 m_modalNextSpell not used - public uint StackAmount; // 49 m_cumulativeAura - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] - public uint[] Totem; // 50-51 m_totem - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxReagentCount)] - public int[] Reagent; // 52-59 m_reagent - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxReagentCount)] - public uint[] ReagentCount; // 60-67 m_reagentCount - public int EquippedItemClass; // 68 m_equippedItemClass (value) - public int EquippedItemSubClassMask; // 69 m_equippedItemSubclass (mask) - public int EquippedItemInventoryTypeMask; // 70 m_equippedItemInvTypes (mask) - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] Effect; // 71-73 m_effect - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public int[] EffectDieSides; // 74-76 m_effectDieSides - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public float[] EffectRealPointsPerLevel; // 77-79 m_effectRealPointsPerLevel - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public int[] EffectBasePoints; // 80-82 m_effectBasePoints (don't must be used in spell/auras explicitly, must be used cached Spell::m_currentBasePoints) - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectMechanic; // 83-85 m_effectMechanic - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectImplicitTargetA; // 86-88 m_implicitTargetA - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectImplicitTargetB; // 89-91 m_implicitTargetB - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectRadiusIndex; // 92-94 m_effectRadiusIndex - spellradius.dbc - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectApplyAuraName; // 95-97 m_effectAura - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectAmplitude; // 98-100 m_effectAuraPeriod - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public float[] EffectMultipleValue; // 101-103 m_effectAmplitude - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectChainTarget; // 104-106 m_effectChainTargets - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectItemType; // 107-109 m_effectItemType - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public int[] EffectMiscValue; // 110-112 m_effectMiscValue - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public int[] EffectMiscValueB; // 113-115 m_effectMiscValueB - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectTriggerSpell; // 116-118 m_effectTriggerSpell - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public float[] EffectPointsPerComboPoint; // 119-121 m_effectPointsPerCombo - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectSpellClassMaskA; // 122-124 m_effectSpellClassMaskA, effect 0 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectSpellClassMaskB; // 125-127 m_effectSpellClassMaskB, effect 1 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public uint[] EffectSpellClassMaskC; // 128-130 m_effectSpellClassMaskC, effect 2 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] - public uint[] SpellVisual; // 131-132 m_spellVisualID - public uint SpellIconID; // 133 m_spellIconID - public uint ActiveIconID; // 134 m_activeIconID - public uint SpellPriority; // 135 m_spellPriority not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] - private readonly uint[] _SpellName; // 136-151 m_name_lang - public uint SpellNameFlag; // 152 not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] - private readonly uint[] _Rank; // 153-168 m_nameSubtext_lang - public uint RankFlags; // 169 not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] - private readonly uint[] _Description; // 170-185 m_description_lang not used - public uint DescriptionFlags; // 186 not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] - private readonly uint[] _ToolTip; // 187-202 m_auraDescription_lang not used - public uint ToolTipFlags; // 203 not used - public uint ManaCostPercentage; // 204 m_manaCostPct - public uint StartRecoveryCategory; // 205 m_startRecoveryCategory - public uint StartRecoveryTime; // 206 m_startRecoveryTime - public uint MaxTargetLevel; // 207 m_maxTargetLevel - public uint SpellFamilyName; // 208 m_spellClassSet - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public uint[] SpellFamilyFlags; // 209-211 m_spellClassMask - public uint MaxAffectedTargets; // 212 m_maxTargets - public uint DmgClass; // 213 m_defenseType - public uint PreventionType; // 214 m_preventionType - public uint StanceBarOrder; // 215 m_stanceBarOrder not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public float[] DmgMultiplier; // 216-218 m_effectChainAmplitude - public uint MinFactionId; // 219 m_minFactionID not used - public uint MinReputation; // 220 m_minReputation not used - public uint RequiredAuraVision; // 221 m_requiredAuraVision not used - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] - public uint[] TotemCategory; // 222-223 m_requiredTotemCategoryID - public int AreaGroupId; // 224 m_requiredAreaGroupId - public uint SchoolMask; // 225 m_schoolMask - public uint RuneCostID; // 226 m_runeCostID - public uint SpellMissileID; // 227 m_spellMissileID not used - public uint PowerDisplayId; // 228 PowerDisplay.dbc, new in 3.1 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxEffectIndex)] - public float[] DamageCoeficient; // 229-231 3.2.0 - public uint SpellDescriptionVariableID; // 232 3.2.0 - public uint SpellDifficultyId; // 233 3.3.0 // 239 3.3.0 - - /// - /// Return current Spell Name - /// - public string SpellName - { - get { return DBC.SpellStrings.GetValue(_SpellName[(uint)DBC.Locale]); } - } - - /// - /// Return current Spell Rank - /// - public string Rank - { - get { return _Rank[(uint)DBC.Locale] != 0 ? DBC.SpellStrings[_Rank[(uint)DBC.Locale]] : string.Empty; } - } - - public string SpellNameRank - { - get { return Rank.IsEmpty() ? SpellName : String.Format("{0} ({1})", SpellName, Rank); } - } - - /// - /// Return current Spell Description - /// - public string Description - { - get { return DBC.SpellStrings.GetValue(_Description[(uint)DBC.Locale]); } - } - - /// - /// Return current Spell ToolTip - /// - public string ToolTip - { - get { return DBC.SpellStrings.GetValue(_ToolTip[(uint)DBC.Locale]); } - } - - public string GetName(byte loc) - { - return DBC.SpellStrings.GetValue(_SpellName[loc]); - } - - public string ProcInfo - { - get - { - var i = 0; - var sb = new StringBuilder(); - var proc = ProcFlags; - while (proc != 0) - { - if ((proc & 1) != 0) - sb.AppendFormatLine(" {0}", SpellEnums.ProcFlagDesc[i]); - i++; - proc >>= 1; - } - return sb.ToString(); - } - } - - public string Duration - { - get { return DBC.SpellDuration.ContainsKey(DurationIndex) ? DBC.SpellDuration[DurationIndex].ToString() : String.Empty; } - } - - public string Range - { - get - { - if (RangeIndex == 0 || !DBC.SpellRange.ContainsKey(RangeIndex)) - return String.Empty; - - var range = DBC.SpellRange[RangeIndex]; - var sb = new StringBuilder(); - sb.AppendFormatLine("SpellRange: (Id {0}) \"{1}\":", range.Id, range.Description1); - sb.AppendFormatLine(" MinRange = {0}, MinRangeFriendly = {1}", range.MinRange, range.MinRangeFriendly); - sb.AppendFormatLine(" MaxRange = {0}, MaxRangeFriendly = {1}", range.MaxRange, range.MaxRangeFriendly); - - return sb.ToString(); - } - } - - public string GetRadius(int index) - { - var rIndex = EffectRadiusIndex[index]; - if (rIndex != 0) - return DBC.SpellRadius.ContainsKey(rIndex) ? String.Format("Radius (Id {0}) {1:F}", rIndex, DBC.SpellRadius[rIndex].Radius) : String.Format("Radius (Id {0}) Not found", rIndex); - - return String.Empty; - } - - public string CastTime - { - get - { - if (CastingTimeIndex == 0) - return String.Empty; - - return !DBC.SpellCastTimes.ContainsKey(CastingTimeIndex) - ? String.Format("CastingTime (Id {0}) = ????", CastingTimeIndex) - : String.Format("CastingTime (Id {0}) = {1:F}", CastingTimeIndex, - DBC.SpellCastTimes[CastingTimeIndex].CastTime / 1000.0f); - } - } - - public SpellSchoolMask School - { - get - { - return (SpellSchoolMask)SchoolMask; - } - } - }; - - public struct SkillLineEntry - { - public uint Id; // 0 m_ID - public int CategoryId; // 1 m_categoryID - public uint SkillCostId; // 2 m_skillCostsID - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] InternalName; // 3-18 m_displayName_lang - public uint NameFlags; // 19 - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] InternalDescription; // 20-35 m_description_lang - public uint DescriptionFlags; // 36 - public uint SpellIcon; // 37 m_spellIconID - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] InternalAlternateVerb; // 38-53 m_alternateVerb_lang - public uint AlternateVerbFlags; // 54 - public uint CanLink; // 55 m_canLink (prof. with recipes - - public string Name - { - get { return DBC.SkillLineStrings.GetValue(InternalName[(uint)DBC.Locale]); } - } - - public string Description - { - get { return DBC.SkillLineStrings.GetValue(InternalDescription[(uint)DBC.Locale]); } - } - - public string AlternateVerb - { - get { return DBC.SkillLineStrings.GetValue(InternalAlternateVerb[(uint)DBC.Locale]); } - } - }; - - public struct SkillLineAbilityEntry - { - public uint Id; // 0 m_ID - public uint SkillId; // 1 m_skillLine - public uint SpellId; // 2 m_spell - public uint Racemask; // 3 m_raceMask - public uint Classmask; // 4 m_classMask - public uint RacemaskNot; // 5 m_excludeRace - public uint ClassmaskNot; // 6 m_excludeClass - public uint ReqSkillValue; // 7 m_minSkillLineRank - public uint ForwardSpellid; // 8 m_supercededBySpell - public uint LearnOnGetSkill; // 9 m_acquireMethod - public uint MaxValue; // 10 m_trivialSkillLineRankHigh - public uint MinValue; // 11 m_trivialSkillLineRankLow - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] - public uint[] CharacterPoints; // 12-13 m_characterPoints[2] - }; - - public struct SpellRadiusEntry - { - public uint Id; - public float Radius; - public int Zero; - public float Radius2; - }; - - public struct SpellRangeEntry - { - public uint Id; - public float MinRange; - public float MinRangeFriendly; - public float MaxRange; - public float MaxRangeFriendly; - public uint Field5; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] Desc1; - public uint Desc1Flags; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] - public uint[] Desc2; - public uint Desc2Flags; - - public string Description1 - { - get { return DBC.SpellRangeStrings.GetValue(Desc1[(uint)DBC.Locale]); } - } - - public string Description2 - { - get { return DBC.SpellRangeStrings.GetValue(Desc2[(uint)DBC.Locale]); } - } - }; - - public struct SpellDurationEntry - { - public uint Id; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)] - public int[] Duration; - - public override string ToString() - { - return String.Format("Duration: ID ({0}) {1}, {2}, {3}", Id, Duration[0], Duration[1], Duration[2]); - } - }; - - public struct SpellCastTimesEntry - { - public uint Id; - public int CastTime; - public float CastTimePerLevel; - public int MinCastTime; - }; - - public struct SpellDifficultyEntry - { - public uint Id; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] - public int[] SpellId; - }; - - public struct ScreenEffectEntry - { - public uint Id; - public uint InternalName; - public uint Unk0; - public float Unk1; - public uint Unk2; - public uint Unk3; // % of smth? - public uint Unk4; // all 0 - public int Unk5; - public uint Unk6; - public uint Unk7; - - public string Name - { - get { return DBC.ScreenEffectStrings.GetValue(InternalName); } - } - }; - - public struct SpellVisualEntry - { - public uint Id; - public uint PrecastKit; - public uint CastingKit; - public uint ImpactKit; - public uint StateKit; - public uint StateDoneKit; - public uint ChannelKit; - public int HasMissile; - public uint MissileModel; - public uint MissilePathType; - public uint MissileDestinationAttachment; - public uint MissileSound; - public uint AnimEventSoundID; - public uint Flags; - public uint CasterImpactKit; - public uint TargetImpactKit; - public int MissileAttachment; - public uint MissileFollowGroundHeight; - public uint MissileFollowGroundDropSpeed; - public uint MissileFollowGroundApprach; - public uint MissileFollowGroundFlags; - public uint MissileMotionId; - public uint MissileTargetingKit; - public uint InstantAreaKit; - public uint ImpactAreaKit; - public uint PersistentAreaKit; - public float MissileCastOffsetX; - public float MissileCastOffsetY; - public float MissileCastOffsetZ; - public float MissileImpactOffsetX; - public float MissileImpactOffsetY; - public float MissileImpactOffsetZ; - }; - - public struct SpellMissileMotionEntry - { - public uint Id; - public uint _Name; - public uint _Script; - public uint Flags; - public uint MissileCount; - - public string Name - { - get { return DBC.SpellMissileMotionStrings.GetValue(_Name); } - } - - public string Script - { - get { return DBC.SpellMissileMotionStrings.GetValue(_Script); } - } - }; - - public struct SpellMissileEntry - { - public uint Id; - public uint Flags; - public float defaultPitchMin; - public float defaultPitchMax; - public float defaultSpeedMin; - public float defaultSpeedMax; - public float randomizeFacingMin; - public float randomizeFacingMax; - public float randomizePitchMin; - public float randomizePitchMax; - public float randomizeSpeedMin; - public float randomizeSpeedMax; - public float gravity; - public float maxDuration; - public float collisionRadius; - }; - - public struct OverrideSpellDataEntry - { - public uint Id; - // Value 10 also used in SpellInfo.AuraModTypeName - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)] - public uint[] Spells; - public uint Unk; - }; - - public struct AreaGroupEntry - { - public uint AreaGroupId; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)] - public uint[] AreaId; - public uint NextGroup; - }; - - public struct AreaTableEntry - { - public uint Id; - public uint MapId; - public uint ZoneId; - public uint ExploreFlag; - public uint Flags; - public uint SoundPreferences; - public uint SoundPreferencesUnderwater; - public uint SoundAmbience; - public uint ZoneMusic; - public uint ZoneIntroMusicTable; - public int Level; - [MarshalAs(UnmanagedType.ByValArray, SizeConst = DBC.MaxDbcLocale)] - public uint[] NamePtr; - public uint StringFlags; - public uint FactionFlags; - public uint LiquidType1; - public uint LiquidType2; - public uint LiquidType3; - public uint LiquidType4; - public float MinElevation; - public float AmbientMultiplier; - public uint Light; - - public string Name - { - get { return DBC.AreaStrings.GetValue(NamePtr[(uint)DBC.Locale]); } - } - }; - //=============== DateBase =================\\ - - public struct SpellProcEventEntry - { - public uint Id; - public string SpellName; - public byte SchoolMask; - public ushort SpellFamilyName; - public uint[] SpellFamilyMask; - public uint ProcFlags; - public uint ProcEx; - public float PpmRate; - public float CustomChance; - public uint Cooldown; - - public string[] ToArray() - { - return new[] - { - Id.ToString(), - SpellName, - SchoolMask.ToString(), - SpellFamilyName.ToString(), - SpellFamilyMask[0].ToString(), - SpellFamilyMask[1].ToString(), - SpellFamilyMask[2].ToString(), - ProcFlags.ToString(), - ProcEx.ToString(), - PpmRate.ToString(), - CustomChance.ToString(), - Cooldown.ToString() - }; - } - }; - - public struct SpellChain - { - public int Id; - public int PrevSpell; - public int FirstSpell; - public int Rank; - public int ReqSpell; - }; - - public struct Item - { - public uint Entry; - public string Name; - public string Description; - public string LocalesName; - public string LocalesDescription; - public int[] SpellId; - }; -} diff --git a/SpellWork/DBC/Structures/AreaGroupEntry.cs b/SpellWork/DBC/Structures/AreaGroupEntry.cs new file mode 100644 index 00000000..b3b5cd2f --- /dev/null +++ b/SpellWork/DBC/Structures/AreaGroupEntry.cs @@ -0,0 +1,12 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class AreaGroupEntry + { + public uint Id; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 6)] + public uint[] AreaId; + public uint NextGroup; + } +} diff --git a/SpellWork/DBC/Structures/AreaTableEntry.cs b/SpellWork/DBC/Structures/AreaTableEntry.cs new file mode 100644 index 00000000..376566f9 --- /dev/null +++ b/SpellWork/DBC/Structures/AreaTableEntry.cs @@ -0,0 +1,32 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class AreaTableEntry + { + public uint Id; + public uint MapId; + public uint ZoneId; + public uint ExploreFlag; + public uint Flags; + public uint SoundPreferences; + public uint SoundPreferencesUnderwater; + public uint SoundAmbience; + public uint ZoneMusic; + public uint ZoneIntroMusicTable; + public int Level; + public string Name; + public uint StringFlags; + public uint FactionFlags; + public uint LiquidType1; + public uint LiquidType2; + public uint LiquidType3; + public uint LiquidType4; + public float MinElevation; + public float AmbientMultiplier; + public uint Light; + public uint UnkCataclysm1; + public uint UnkCataclysm2; + public uint UnkCataclysm3; + public uint UnkCataclysm4; + public uint UnkCataclysm5; + } +} diff --git a/SpellWork/DBC/Structures/OverrideSpellDataEntry.cs b/SpellWork/DBC/Structures/OverrideSpellDataEntry.cs new file mode 100644 index 00000000..eb3fe25e --- /dev/null +++ b/SpellWork/DBC/Structures/OverrideSpellDataEntry.cs @@ -0,0 +1,13 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class OverrideSpellDataEntry + { + public uint Id; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 10)] + public uint[] Spells; + public uint Unk; + public string Name; + } +} diff --git a/SpellWork/DBC/Structures/ScreenEffectEntry.cs b/SpellWork/DBC/Structures/ScreenEffectEntry.cs new file mode 100644 index 00000000..b21c6f73 --- /dev/null +++ b/SpellWork/DBC/Structures/ScreenEffectEntry.cs @@ -0,0 +1,17 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class ScreenEffectEntry + { + public uint Id; + public string Name; + public uint Unk0; + public float Unk1; + public uint Unk2; + public uint Unk3; + public uint Unk4; + public int Unk5; + public uint Unk6; + public uint Unk7; + public int Unk8; + } +} diff --git a/SpellWork/DBC/Structures/SkillLineAbilityEntry.cs b/SpellWork/DBC/Structures/SkillLineAbilityEntry.cs new file mode 100644 index 00000000..6ef897f4 --- /dev/null +++ b/SpellWork/DBC/Structures/SkillLineAbilityEntry.cs @@ -0,0 +1,22 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class SkillLineAbilityEntry + { + public uint Id; // 0 m_ID + public uint SkillId; // 1 m_skillLine + public uint SpellId; // 2 m_spell + public uint Racemask; // 3 m_raceMask + public uint Classmask; // 4 m_classMask + public uint RacemaskNot; // 5 m_excludeRace + public uint ClassmaskNot; // 6 m_excludeClass + public uint ReqSkillValue; // 7 m_minSkillLineRank + public uint ForwardSpellid; // 8 m_supercededBySpell + public uint LearnOnGetSkill; // 9 m_acquireMethod + public uint MaxValue; // 10 m_trivialSkillLineRankHigh + public uint MinValue; // 11 m_trivialSkillLineRankLow + [StoragePresence(StoragePresenceOption.Include, ArraySize = 2)] + public uint[] CharacterPoints; // 12-13 m_characterPoints[2] + } +} diff --git a/SpellWork/DBC/Structures/SkillLineEntry.cs b/SpellWork/DBC/Structures/SkillLineEntry.cs new file mode 100644 index 00000000..896538c9 --- /dev/null +++ b/SpellWork/DBC/Structures/SkillLineEntry.cs @@ -0,0 +1,13 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SkillLineEntry + { + public uint Id; + public int CategoryId; + public string Name; + public string Description; + public uint SpellIcon; + public string AlternateVerb; + public uint CanLink; + } +} diff --git a/SpellWork/DBC/Structures/SpellAuraOptionsEntry.cs b/SpellWork/DBC/Structures/SpellAuraOptionsEntry.cs new file mode 100644 index 00000000..a08051f8 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellAuraOptionsEntry.cs @@ -0,0 +1,11 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellAuraOptionsEntry + { + public uint Id; + public uint StackAmount; + public uint ProcChance; + public uint ProcCharges; + public uint ProcFlags; + } +} diff --git a/SpellWork/DBC/Structures/SpellAuraRestrictionsEntry.cs b/SpellWork/DBC/Structures/SpellAuraRestrictionsEntry.cs new file mode 100644 index 00000000..4c5dbe6e --- /dev/null +++ b/SpellWork/DBC/Structures/SpellAuraRestrictionsEntry.cs @@ -0,0 +1,15 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellAuraRestrictionsEntry + { + public uint Id; + public uint CasterAuraState; + public uint TargetAuraState; + public uint CasterAuraStateNot; + public uint TargetAuraStateNot; + public uint CasterAuraSpell; + public uint TargetAuraSpell; + public uint ExcludeCasterAuraSpell; + public uint ExcludeTargetAuraSpell; + } +} diff --git a/SpellWork/DBC/Structures/SpellCastTimesEntry.cs b/SpellWork/DBC/Structures/SpellCastTimesEntry.cs new file mode 100644 index 00000000..7d4a5139 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellCastTimesEntry.cs @@ -0,0 +1,10 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellCastTimesEntry + { + public uint Id; + public int CastTime; + public int CastTimePerLevel; + public int MinCastTime; + } +} diff --git a/SpellWork/DBC/Structures/SpellCastingRequirementsEntry.cs b/SpellWork/DBC/Structures/SpellCastingRequirementsEntry.cs new file mode 100644 index 00000000..137f4a0b --- /dev/null +++ b/SpellWork/DBC/Structures/SpellCastingRequirementsEntry.cs @@ -0,0 +1,13 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellCastingRequirementsEntry + { + public uint Id; + public uint FacingCasterFlags; + public uint MinFactionId; + public uint MinReputation; + public int AreaGroupId; + public uint RequiredAuraVision; + public uint RequiresSpellFocus; + } +} diff --git a/SpellWork/DBC/Structures/SpellCategoriesEntry.cs b/SpellWork/DBC/Structures/SpellCategoriesEntry.cs new file mode 100644 index 00000000..39b21c06 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellCategoriesEntry.cs @@ -0,0 +1,13 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellCategoriesEntry + { + public uint Id; + public uint Category; + public uint DmgClass; + public uint Dispel; + public uint Mechanic; + public uint PreventionType; + public uint StartRecoveryCategory; + } +} diff --git a/SpellWork/DBC/Structures/SpellClassOptionsEntry.cs b/SpellWork/DBC/Structures/SpellClassOptionsEntry.cs new file mode 100644 index 00000000..79ccdd2d --- /dev/null +++ b/SpellWork/DBC/Structures/SpellClassOptionsEntry.cs @@ -0,0 +1,14 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellClassOptionsEntry + { + public uint Id; + public uint ModalNextSpell; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 3)] + public uint[] SpellFamilyFlags; + public uint SpellFamilyName; + public string Description; + } +} diff --git a/SpellWork/DBC/Structures/SpellCooldownsEntry.cs b/SpellWork/DBC/Structures/SpellCooldownsEntry.cs new file mode 100644 index 00000000..ad6a21a2 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellCooldownsEntry.cs @@ -0,0 +1,10 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellCooldownsEntry + { + public uint Id; + public uint CategoryRecoveryTime; + public uint RecoveryTime; + public uint StartRecoveryTime; + } +} diff --git a/SpellWork/DBC/Structures/SpellDifficultyEntry.cs b/SpellWork/DBC/Structures/SpellDifficultyEntry.cs new file mode 100644 index 00000000..175aa0a5 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellDifficultyEntry.cs @@ -0,0 +1,11 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellDifficultyEntry + { + public uint Id; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 4)] + public uint[] SpellId; + } +} diff --git a/SpellWork/DBC/Structures/SpellDurationEntry.cs b/SpellWork/DBC/Structures/SpellDurationEntry.cs new file mode 100644 index 00000000..f453ffd3 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellDurationEntry.cs @@ -0,0 +1,17 @@ +using System; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellDurationEntry + { + public uint Id; + public uint Duration; + public uint Unknown2; + public uint MaxDuration; + + public override string ToString() + { + return String.Format("Duration: ID ({0}) {1}, {2}, {3}", Id, Duration, Unknown2, MaxDuration); + } + } +} diff --git a/SpellWork/DBC/Structures/SpellEffectEntry.cs b/SpellWork/DBC/Structures/SpellEffectEntry.cs new file mode 100644 index 00000000..f36a8f12 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellEffectEntry.cs @@ -0,0 +1,58 @@ +using System; +using System.Linq; +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellEffectEntry + { + public uint Id; + public uint Type; + public float ValueMultiplier; + public uint ApplyAuraName; + public uint Amplitude; + public int BasePoints; + public float BonusMultiplier; + public float DamageMultiplier; + public uint ChainTarget; + public int DieSides; + public uint ItemType; + public uint Mechanic; + public int MiscValue; + public int MiscValueB; + public float PointsPerComboPoint; + public uint RadiusIndex; + public uint RadiusMaxIndex; + public float RealPointsPerLevel; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 3)] + public uint[] SpellClassMask; + public uint TriggerSpell; + public uint ImplicitTargetA; + public uint ImplicitTargetB; + public uint SpellId; + public uint Index; + public uint Unk0; + + public string MaxRadius + { + get + { + if (RadiusMaxIndex == 0 || !DBC.SpellRadius.ContainsKey(RadiusMaxIndex)) + return String.Empty; + + return String.Format("Max Radius (Id {0}) {1:F}", RadiusMaxIndex, DBC.SpellRadius[RadiusMaxIndex].Radius); + } + } + + public string Radius + { + get + { + if (RadiusIndex == 0 || !DBC.SpellRadius.ContainsKey(RadiusIndex)) + return String.Empty; + + return String.Format("Radius (Id {0}) {1:F}", RadiusIndex, DBC.SpellRadius[RadiusIndex].Radius); + } + } + } +} diff --git a/SpellWork/DBC/Structures/SpellEntry.cs b/SpellWork/DBC/Structures/SpellEntry.cs new file mode 100644 index 00000000..4fa97e00 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellEntry.cs @@ -0,0 +1,128 @@ +using System.Linq; +using DBFilesClient.NET; +using System.Text; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellEntry + { + public uint Id; + public uint Attributes; + public uint AttributesEx; + public uint AttributesEx2; + public uint AttributesEx3; + public uint AttributesEx4; + public uint AttributesEx5; + public uint AttributesEx6; + public uint AttributesEx7; + public uint AttributesEx8; + public uint Unknown1; + public uint Unknown2; + public uint CastingTimeIndex; + public uint DurationIndex; + public uint PowerType; + public uint RangeIndex; + public float Speed; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 2)] + public uint[] SpellVisual; + public uint SpellIconID; + public uint ActiveIconID; + public string SpellName; + public string Rank; + public string Description; + public string ToolTip; + public uint SchoolMask; + public uint RuneCostID; + public uint SpellMissileID; + public uint SpellDescriptionVariableID; + public uint SpellDifficultyId; + public float Unknown3; + public uint SpellScalingId; + public uint SpellAuraOptionsId; + public uint SpellAuraRestrictionsId; + public uint SpellCastingRequirementsId; + public uint SpellCategoriesId; + public uint SpellClassOptionsId; + public uint SpellCooldownsId; + public uint Unknown4; + public uint SpellEquippedItemsId; + public uint SpellInterruptsId; + public uint SpellLevelsId; + public uint SpellPowerId; + public uint SpellReagentsId; + public uint SpellShapeshiftId; + public uint SpellTargetRestrictionsId; + public uint SpellTotemsId; + public uint ResearchProject; + + public SpellAuraOptionsEntry AuraOptions + { + get { return SpellAuraOptionsId != 0 && DBC.SpellAuraOptions.ContainsKey(SpellAuraOptionsId) ? DBC.SpellAuraOptions[SpellAuraOptionsId] : null; } + } + + public SpellAuraRestrictionsEntry AuraRestrictions + { + get { return SpellAuraRestrictionsId != 0 && DBC.SpellAuraRestrictions.ContainsKey(SpellAuraRestrictionsId) ? DBC.SpellAuraRestrictions[SpellAuraRestrictionsId] : null; } + } + + public SpellCastingRequirementsEntry CastingRequirements + { + get { return SpellCastingRequirementsId != 0 && DBC.SpellCastingRequirements.ContainsKey(SpellCastingRequirementsId) ? DBC.SpellCastingRequirements[SpellCastingRequirementsId] : null; } + } + + public SpellCategoriesEntry Category + { + get { return SpellCategoriesId != 0 && DBC.SpellCategories.ContainsKey(SpellCategoriesId) ? DBC.SpellCategories[SpellCategoriesId] : null; } + } + + public SpellClassOptionsEntry ClassOptions + { + get { return SpellClassOptionsId != 0 && DBC.SpellClassOptions.ContainsKey(SpellClassOptionsId) ? DBC.SpellClassOptions[SpellClassOptionsId] : null; } + } + + public SpellCooldownsEntry Cooldowns + { + get { return SpellCooldownsId != 0 && DBC.SpellCooldowns.ContainsKey(SpellCooldownsId) ? DBC.SpellCooldowns[SpellCooldownsId] : null; } + } + + public SpellEquippedItemsEntry EquippedItems + { + get { return SpellEquippedItemsId != 0 && DBC.SpellEquippedItems.ContainsKey(SpellEquippedItemsId) ? DBC.SpellEquippedItems[SpellEquippedItemsId] : null; } + } + + public SpellInterruptsEntry Interrupts + { + get { return SpellInterruptsId != 0 && DBC.SpellInterrupts.ContainsKey(SpellInterruptsId) ? DBC.SpellInterrupts[SpellInterruptsId] : null; } + } + + public SpellLevelsEntry Levels + { + get { return SpellLevelsId != 0 && DBC.SpellLevels.ContainsKey(SpellLevelsId) ? DBC.SpellLevels[SpellLevelsId] : null; } + } + + public SpellPowerEntry Power + { + get { return SpellPowerId != 0 && DBC.SpellPower.ContainsKey(SpellPowerId) ? DBC.SpellPower[SpellPowerId] : null; } + } + + public SpellReagentsEntry Reagents + { + get { return SpellReagentsId != 0 && DBC.SpellReagents.ContainsKey(SpellReagentsId) ? DBC.SpellReagents[SpellReagentsId] : null; } + } + + public SpellShapeshiftEntry Shapeshift + { + get { return SpellShapeshiftId != 0 && DBC.SpellShapeshift.ContainsKey(SpellShapeshiftId) ? DBC.SpellShapeshift[SpellShapeshiftId] : null; } + } + + public SpellTargetRestrictionsEntry TargetRestrictions + { + get { return SpellTargetRestrictionsId != 0 && DBC.SpellTargetRestrictions.ContainsKey(SpellTargetRestrictionsId) ? DBC.SpellTargetRestrictions[SpellTargetRestrictionsId] : null; } + } + + public SpellTotemsEntry Totems + { + get { return SpellTotemsId != 0 && DBC.SpellTotems.ContainsKey(SpellTotemsId) ? DBC.SpellTotems[SpellTotemsId] : null; } + } + } +} diff --git a/SpellWork/DBC/Structures/SpellEquippedItemsEntry.cs b/SpellWork/DBC/Structures/SpellEquippedItemsEntry.cs new file mode 100644 index 00000000..46ecadae --- /dev/null +++ b/SpellWork/DBC/Structures/SpellEquippedItemsEntry.cs @@ -0,0 +1,10 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellEquippedItemsEntry + { + public uint Id; + public uint EquippedItemClass; + public uint EquippedItemInventoryTypeMask; + public uint EquippedItemSubClassMask; + } +} diff --git a/SpellWork/DBC/Structures/SpellInterruptsEntry.cs b/SpellWork/DBC/Structures/SpellInterruptsEntry.cs new file mode 100644 index 00000000..b7fed5b6 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellInterruptsEntry.cs @@ -0,0 +1,12 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellInterruptsEntry + { + public uint Id; + public uint AuraInterruptFlags; + public uint Unknown1; + public uint ChannelInterruptFlags; + public uint Unknown2; + public uint InterruptFlags; + } +} diff --git a/SpellWork/DBC/Structures/SpellLevelsEntry.cs b/SpellWork/DBC/Structures/SpellLevelsEntry.cs new file mode 100644 index 00000000..6e28e4b5 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellLevelsEntry.cs @@ -0,0 +1,10 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellLevelsEntry + { + public uint Id; + public uint BaseLevel; + public uint MaxLevel; + public uint SpellLevel; + } +} diff --git a/SpellWork/DBC/Structures/SpellMissileEntry.cs b/SpellWork/DBC/Structures/SpellMissileEntry.cs new file mode 100644 index 00000000..894feb49 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellMissileEntry.cs @@ -0,0 +1,21 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellMissileEntry + { + public uint Id; + public uint Flags; + public float DefaultPitchMin; + public float DefaultPitchMax; + public float DefaultSpeedMin; + public float DefaultSpeedMax; + public float RandomizeFacingMin; + public float RandomizeFacingMax; + public float RandomizePitchMin; + public float RandomizePitchMax; + public float RandomizeSpeedMin; + public float RandomizeSpeedMax; + public float Gravity; + public float MaxDuration; + public float CollisionRadius; + } +} diff --git a/SpellWork/DBC/Structures/SpellMissileMotionEntry.cs b/SpellWork/DBC/Structures/SpellMissileMotionEntry.cs new file mode 100644 index 00000000..a009ffb4 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellMissileMotionEntry.cs @@ -0,0 +1,11 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellMissileMotionEntry + { + public uint Id; + public string Name; + public string Script; + public uint Flags; + public uint MissileCount; + } +} diff --git a/SpellWork/DBC/Structures/SpellPowerEntry.cs b/SpellWork/DBC/Structures/SpellPowerEntry.cs new file mode 100644 index 00000000..e6fd0bf3 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellPowerEntry.cs @@ -0,0 +1,14 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellPowerEntry + { + public uint Id; + public uint ManaCost; + public uint ManaCostPerlevel; + public uint ManaCostPercentage; + public uint ManaPerSecond; + public uint PowerDisplayId; + public uint Unknown1; + public float Unknown2; + } +} diff --git a/SpellWork/DBC/Structures/SpellRadiusEntry.cs b/SpellWork/DBC/Structures/SpellRadiusEntry.cs new file mode 100644 index 00000000..2253d19d --- /dev/null +++ b/SpellWork/DBC/Structures/SpellRadiusEntry.cs @@ -0,0 +1,10 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellRadiusEntry + { + public uint Id; + public float Radius; + public float RadiusPerLevel; + public float MaxRadius; + } +} diff --git a/SpellWork/DBC/Structures/SpellRangeEntry.cs b/SpellWork/DBC/Structures/SpellRangeEntry.cs new file mode 100644 index 00000000..80524a2a --- /dev/null +++ b/SpellWork/DBC/Structures/SpellRangeEntry.cs @@ -0,0 +1,14 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellRangeEntry + { + public uint Id; + public float MinRangeNegative; + public float MinRangePositive; + public float MaxRangeNegative; + public float MaxRangePositive; + public uint Flags; + public string Name; + public string Name2; + } +} diff --git a/SpellWork/DBC/Structures/SpellReagentsEntry.cs b/SpellWork/DBC/Structures/SpellReagentsEntry.cs new file mode 100644 index 00000000..479ba1de --- /dev/null +++ b/SpellWork/DBC/Structures/SpellReagentsEntry.cs @@ -0,0 +1,13 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellReagentsEntry + { + public uint Id; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 8)] + public uint[] ItemId; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 8)] + public uint[] Count; + } +} diff --git a/SpellWork/DBC/Structures/SpellRuneCostEntry.cs b/SpellWork/DBC/Structures/SpellRuneCostEntry.cs new file mode 100644 index 00000000..873e6e88 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellRuneCostEntry.cs @@ -0,0 +1,12 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellRuneCostEntry + { + public uint Id; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 3)] + public uint[] RuneCost; + public uint RunicPowerGain; + } +} diff --git a/SpellWork/DBC/Structures/SpellScalingEntry.cs b/SpellWork/DBC/Structures/SpellScalingEntry.cs new file mode 100644 index 00000000..e3b444b1 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellScalingEntry.cs @@ -0,0 +1,21 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellScalingEntry + { + public uint Id; + public int MinCastTime; + public int MaxCastTime; + public uint MaxCastTimeLevel; // player level at which cast time reaches max value + public int PlayerClass; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 3)] + public float[] Multiplier; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 3)] + public float[] RandomPointsMultiplier; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 3)] + public float[] OtherMultiplier; + public float CoefBase; + public uint CoefLevelBase; + } +} diff --git a/SpellWork/DBC/Structures/SpellShapeshiftEntry.cs b/SpellWork/DBC/Structures/SpellShapeshiftEntry.cs new file mode 100644 index 00000000..d75c2be9 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellShapeshiftEntry.cs @@ -0,0 +1,10 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellShapeshiftEntry + { + public uint Id; + public ulong StancesNot; + public ulong Stances; + public int StanceBarOrder; + } +} diff --git a/SpellWork/DBC/Structures/SpellTargetRestrictionsEntry.cs b/SpellWork/DBC/Structures/SpellTargetRestrictionsEntry.cs new file mode 100644 index 00000000..e6c61795 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellTargetRestrictionsEntry.cs @@ -0,0 +1,12 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellTargetRestrictionsEntry + { + public uint Id; + public float Unknown1; + public uint MaxAffectedTargets; + public uint MaxTargetLevel; + public uint TargetCreatureType; + public uint Targets; + } +} diff --git a/SpellWork/DBC/Structures/SpellTotemsEntry.cs b/SpellWork/DBC/Structures/SpellTotemsEntry.cs new file mode 100644 index 00000000..ecff6a4a --- /dev/null +++ b/SpellWork/DBC/Structures/SpellTotemsEntry.cs @@ -0,0 +1,13 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class SpellTotemsEntry + { + public uint Id; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 2)] + public uint[] TotemCategory; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 2)] + public uint[] Totem; + } +} diff --git a/SpellWork/DBC/Structures/SpellVisualEntry.cs b/SpellWork/DBC/Structures/SpellVisualEntry.cs new file mode 100644 index 00000000..224f9f86 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellVisualEntry.cs @@ -0,0 +1,39 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellVisualEntry + { + public uint Id; + public uint PrecastKit; + public uint CastingKit; + public uint ImpactKit; + public uint StateKit; + public uint StateDoneKit; + public uint ChannelKit; + public int HasMissile; + public uint MissileModel; + public uint MissilePathType; + public uint MissileDestinationAttachment; + public uint MissileSound; + public uint AnimEventSoundID; + public uint Flags; + public uint CasterImpactKit; + public uint TargetImpactKit; + public int MissileAttachment; + public uint MissileFollowGroundHeight; + public uint MissileFollowGroundDropSpeed; + public uint MissileFollowGroundApprach; + public uint MissileFollowGroundFlags; + public uint MissileMotionId; + public uint MissileTargetingKit; + public uint InstantAreaKit; + public uint ImpactAreaKit; + public uint PersistentAreaKit; + public float MissileCastOffsetX; + public float MissileCastOffsetY; + public float MissileCastOffsetZ; + public float MissileImpactOffsetX; + public float MissileImpactOffsetY; + public float MissileImpactOffsetZ; + public uint Unknown; + } +} diff --git a/SpellWork/DBFilesClient.NET.XML b/SpellWork/DBFilesClient.NET.XML new file mode 100644 index 00000000..07d0c3c8 --- /dev/null +++ b/SpellWork/DBFilesClient.NET.XML @@ -0,0 +1,131 @@ + + + + DBFilesClient.NET + + + + + Controls how the field is treated by the DBC storage loader. + + + + + Initializes a new instance of + with the specified . + + + Specifies how the underlying class field should be treated when loading from a DBC storage. + + + + + Gets the value that specifies how the underlying class field should be treated when loading from a DBC storage. + + + + + Gets or sets the name of of the property that should be used instead of the underlying class field. + Use it with value. + + + + + Gets or sets the number of elements in the underlying array. + + + + + Initializes a new instance of class. + + + + + Removes all records from the current storage. + + + + + Loads the storage from a . + + + The from which the storage should be loaded. + + + + + Gets the number of records currently contained in the storage. + + + + + Gets the minimum record id in the storage. + Existance of a record with this id is not guaranteed. + + + + + Gets the maximum record id in the storage. + Existance of a record with this id is not guaranteed. + + + + + Initializes a new instance of class. + + + + + Loads the storage from a . + + + The from which the storage should be loaded. + + + + + Loads the storage from a . + + + The from which the storage should be loaded. + + + The to be used when loading. + + + + + Lazy C string computes the from the underlying signed byte stream by demand. + This functionality is disabled by default. Use to enable. + + + + + Specifies how a class field should be treated when loading from a DBC storage. + + + + + Specifies that the field should be included into the storage entry structure. + This is the default behavior. + + + + + Specifies that the field should be completely ignored by the DBC stoarge loader. + + + + + Specifies that the DBC storage loader should use property instead. + You should specify the property. + The property should be of the same type as the field, and its setter should be public. + + + + + Enables laziness of . + + + + diff --git a/SpellWork/DBFilesClient.NET.dll b/SpellWork/DBFilesClient.NET.dll new file mode 100644 index 0000000000000000000000000000000000000000..e3ed910a1ad644bdb0843249e57f9e8946f0ee72 GIT binary patch literal 28672 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 literal 0 HcmV?d00001 diff --git a/SpellWork/DataBase/MySQLConnect.cs b/SpellWork/DataBase/MySQLConnect.cs index 448d1612..497fba12 100644 --- a/SpellWork/DataBase/MySQLConnect.cs +++ b/SpellWork/DataBase/MySQLConnect.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Windows.Forms; using MySql.Data.MySqlClient; -using SpellWork.DBC; using SpellWork.Extensions; using SpellWork.Properties; @@ -33,7 +32,7 @@ private static String ConnectionString private static String GetSpellName(uint id) { if (DBC.DBC.Spell.ContainsKey(id)) - return DBC.DBC.Spell[id].SpellNameRank; + return DBC.DBC.SpellInfoStore[id].SpellNameRank; Dropped.Add(String.Format("DELETE FROM `spell_proc_event` WHERE `entry` IN ({0});\r\n", id.ToUInt32())); return String.Empty; @@ -92,8 +91,6 @@ public static List SelectItems() @"SELECT t.entry, t.name, t.description, - l.name_loc{0}, - l.description_loc{0}, t.spellid_1, t.spellid_2, t.spellid_3, @@ -101,17 +98,12 @@ public static List SelectItems() t.spellid_5 FROM `item_template` t - LEFT JOIN - `locales_item` l - ON - t.entry = l.entry WHERE t.spellid_1 <> 0 || t.spellid_2 <> 0 || t.spellid_3 <> 0 || t.spellid_4 <> 0 || - t.spellid_5 <> 0;", - (int)DBC.DBC.Locale == 0 ? 1 : (int)DBC.DBC.Locale /* it's hack TODO: replace code*/); + t.spellid_5 <> 0;"); using (_conn = new MySql.Data.MySqlClient.MySqlConnection(ConnectionString)) { diff --git a/SpellWork/Database/Structures.cs b/SpellWork/Database/Structures.cs new file mode 100644 index 00000000..82a8ede3 --- /dev/null +++ b/SpellWork/Database/Structures.cs @@ -0,0 +1,45 @@ +namespace SpellWork.Database +{ + public struct SpellProcEventEntry + { + public uint Id; + public string SpellName; + public byte SchoolMask; + public ushort SpellFamilyName; + public uint[] SpellFamilyMask; + public uint ProcFlags; + public uint ProcEx; + public float PpmRate; + public float CustomChance; + public uint Cooldown; + + public string[] ToArray() + { + return new[] + { + Id.ToString(), + SpellName, + SchoolMask.ToString(), + SpellFamilyName.ToString(), + SpellFamilyMask[0].ToString(), + SpellFamilyMask[1].ToString(), + SpellFamilyMask[2].ToString(), + ProcFlags.ToString(), + ProcEx.ToString(), + PpmRate.ToString(), + CustomChance.ToString(), + Cooldown.ToString() + }; + } + } + + public struct Item + { + public uint Entry; + public string Name; + public string Description; + public string LocalesName; + public string LocalesDescription; + public int[] SpellId; + } +} diff --git a/SpellWork/Extensions/Extensions.cs b/SpellWork/Extensions/Extensions.cs index 8c065c64..26fbec04 100644 --- a/SpellWork/Extensions/Extensions.cs +++ b/SpellWork/Extensions/Extensions.cs @@ -1,12 +1,12 @@ using System; using System.Collections.Generic; +using System.Data; using System.IO; using System.Linq; +using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Windows.Forms; -using System.Data; -using System.Reflection; namespace SpellWork.Extensions { diff --git a/SpellWork/Forms/FormMain.Designer.cs b/SpellWork/Forms/FormMain.Designer.cs index 1bed958c..3a71bb1d 100644 --- a/SpellWork/Forms/FormMain.Designer.cs +++ b/SpellWork/Forms/FormMain.Designer.cs @@ -33,107 +33,90 @@ private void InitializeComponent() this._status = new System.Windows.Forms.ToolStripStatusLabel(); this._ProcStatus = new System.Windows.Forms.ToolStripStatusLabel(); this.menuStrip1 = new System.Windows.Forms.MenuStrip(); - this._tsmFile = new System.Windows.Forms.ToolStripMenuItem(); - this._Connected = new System.Windows.Forms.ToolStripMenuItem(); - this._tsmSettings = new System.Windows.Forms.ToolStripMenuItem(); - this._tsmExit = new System.Windows.Forms.ToolStripMenuItem(); - this._tsmHelp = new System.Windows.Forms.ToolStripMenuItem(); - this._tsmAbout = new System.Windows.Forms.ToolStripMenuItem(); - this.tabControl1 = new System.Windows.Forms.TabControl(); + this._ilPro = new System.Windows.Forms.ImageList(this.components); + this.splitContainer7 = new System.Windows.Forms.SplitContainer(); + this.splitContainer8 = new System.Windows.Forms.SplitContainer(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.richTextBox2 = new System.Windows.Forms.RichTextBox(); + this._tpCompare = new System.Windows.Forms.TabPage(); + this._scCompareRoot = new System.Windows.Forms.SplitContainer(); + this._tbCompareFilterSpell2 = new System.Windows.Forms.TextBox(); + this._rtbCompareSpell2 = new System.Windows.Forms.RichTextBox(); + this.label14 = new System.Windows.Forms.Label(); + this._bCompareSearch2 = new System.Windows.Forms.Button(); + this._rtbCompareSpell1 = new System.Windows.Forms.RichTextBox(); + this._tbCompareFilterSpell1 = new System.Windows.Forms.TextBox(); + this.label13 = new System.Windows.Forms.Label(); + this._bCompareSearch1 = new System.Windows.Forms.Button(); this._tpSpellInfo = new System.Windows.Forms.TabPage(); this.splitContainer1 = new System.Windows.Forms.SplitContainer(); - this._rtSpellInfo = new System.Windows.Forms.RichTextBox(); this.groupBox1 = new System.Windows.Forms.GroupBox(); - this._lvSpellList = new System.Windows.Forms.ListView(); - this.chSpellID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this.chSpellName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.groupBox7 = new System.Windows.Forms.GroupBox(); + this._tbSearchId = new System.Windows.Forms.TextBox(); + this._tbSearchIcon = new System.Windows.Forms.TextBox(); + this._tbSearchAttributes = new System.Windows.Forms.TextBox(); + this._bSearch = new System.Windows.Forms.Button(); + this.label4 = new System.Windows.Forms.Label(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); this._gSpellFilter = new System.Windows.Forms.GroupBox(); + this._cbSpellFamilyName = new System.Windows.Forms.ComboBox(); + this._cbSpellAura = new System.Windows.Forms.ComboBox(); + this._cbSpellEffect = new System.Windows.Forms.ComboBox(); + this._cbTarget1 = new System.Windows.Forms.ComboBox(); + this._cbTarget2 = new System.Windows.Forms.ComboBox(); this._gbAdvansedSearch = new System.Windows.Forms.GroupBox(); - this._cbAdvancedFilter2CompareType = new System.Windows.Forms.ComboBox(); - this._cbAdvancedFilter1CompareType = new System.Windows.Forms.ComboBox(); - this._tbAdvancedFilter2Val = new System.Windows.Forms.TextBox(); - this._tbAdvancedFilter1Val = new System.Windows.Forms.TextBox(); - this._cbAdvancedFilter2 = new System.Windows.Forms.ComboBox(); this._cbAdvancedFilter1 = new System.Windows.Forms.ComboBox(); - this._cbTarget2 = new System.Windows.Forms.ComboBox(); - this._cbTarget1 = new System.Windows.Forms.ComboBox(); - this._cbSpellEffect = new System.Windows.Forms.ComboBox(); - this._cbSpellAura = new System.Windows.Forms.ComboBox(); - this._cbSpellFamilyName = new System.Windows.Forms.ComboBox(); - this.groupBox7 = new System.Windows.Forms.GroupBox(); - this.label6 = new System.Windows.Forms.Label(); - this.label5 = new System.Windows.Forms.Label(); - this.label4 = new System.Windows.Forms.Label(); - this._bSearch = new System.Windows.Forms.Button(); - this._tbSearchAttributes = new System.Windows.Forms.TextBox(); - this._tbSearchIcon = new System.Windows.Forms.TextBox(); - this._tbSearchId = new System.Windows.Forms.TextBox(); - this._tpSpellProcInfo = new System.Windows.Forms.TabPage(); + this._cbAdvancedFilter2 = new System.Windows.Forms.ComboBox(); + this._tbAdvancedFilter1Val = new System.Windows.Forms.TextBox(); + this._tbAdvancedFilter2Val = new System.Windows.Forms.TextBox(); + this._cbAdvancedFilter1CompareType = new System.Windows.Forms.ComboBox(); + this._cbAdvancedFilter2CompareType = new System.Windows.Forms.ComboBox(); + this._lvSpellList = new System.Windows.Forms.ListView(); + this.chSpellID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.chSpellName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this._rtSpellInfo = new System.Windows.Forms.RichTextBox(); + this.tabControl1 = new System.Windows.Forms.TabControl(); this.splitContainer2 = new System.Windows.Forms.SplitContainer(); + this._lvProcAdditionalInfo = new System.Windows.Forms.ListView(); + this._chID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this._chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.splitContainer3 = new System.Windows.Forms.SplitContainer(); - this.groupBox5 = new System.Windows.Forms.GroupBox(); - this._clbProcFlags = new System.Windows.Forms.CheckedListBox(); - this.groupBox4 = new System.Windows.Forms.GroupBox(); - this._clbProcFlagEx = new System.Windows.Forms.CheckedListBox(); - this._gSpellProcEvent = new System.Windows.Forms.GroupBox(); - this._clbSchools = new System.Windows.Forms.CheckedListBox(); - this._cbProcFitstSpellFamily = new System.Windows.Forms.ComboBox(); - this.label1 = new System.Windows.Forms.Label(); - this._tbPPM = new System.Windows.Forms.TextBox(); - this.label2 = new System.Windows.Forms.Label(); - this._tbChance = new System.Windows.Forms.TextBox(); - this.label3 = new System.Windows.Forms.Label(); - this._tbCooldown = new System.Windows.Forms.TextBox(); this.splitContainer4 = new System.Windows.Forms.SplitContainer(); - this._cbProcSpellFamilyTree = new System.Windows.Forms.ComboBox(); - this._tvFamilyTree = new System.Windows.Forms.TreeView(); - this._ilPro = new System.Windows.Forms.ImageList(this.components); this.splitContainer5 = new System.Windows.Forms.SplitContainer(); - this._rtbProcSpellInfo = new System.Windows.Forms.RichTextBox(); + this._cbProcSpellFamilyName = new System.Windows.Forms.ComboBox(); + this._cbProcSpellAura = new System.Windows.Forms.ComboBox(); + this._cbProcSpellEffect = new System.Windows.Forms.ComboBox(); + this._cbProcTarget1 = new System.Windows.Forms.ComboBox(); + this._cbProcTarget2 = new System.Windows.Forms.ComboBox(); + this._tbProcSeach = new System.Windows.Forms.TextBox(); + this._bProcSearch = new System.Windows.Forms.Button(); this._lvProcSpellList = new System.Windows.Forms.ListView(); this._chProcID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this._chProcName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this._bProcSearch = new System.Windows.Forms.Button(); - this._tbProcSeach = new System.Windows.Forms.TextBox(); - this._cbProcTarget2 = new System.Windows.Forms.ComboBox(); - this._cbProcTarget1 = new System.Windows.Forms.ComboBox(); - this._cbProcSpellEffect = new System.Windows.Forms.ComboBox(); - this._cbProcSpellAura = new System.Windows.Forms.ComboBox(); - this._cbProcSpellFamilyName = new System.Windows.Forms.ComboBox(); - this._lvProcAdditionalInfo = new System.Windows.Forms.ListView(); - this._chID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this._chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this._tpCompare = new System.Windows.Forms.TabPage(); - this._scCompareRoot = new System.Windows.Forms.SplitContainer(); - this._bCompareSearch1 = new System.Windows.Forms.Button(); - this.label13 = new System.Windows.Forms.Label(); - this._tbCompareFilterSpell1 = new System.Windows.Forms.TextBox(); - this._rtbCompareSpell1 = new System.Windows.Forms.RichTextBox(); - this._bCompareSearch2 = new System.Windows.Forms.Button(); - this.label14 = new System.Windows.Forms.Label(); - this._rtbCompareSpell2 = new System.Windows.Forms.RichTextBox(); - this._tbCompareFilterSpell2 = new System.Windows.Forms.TextBox(); - this._tpSqlData = new System.Windows.Forms.TabPage(); - this.groupBox3 = new System.Windows.Forms.GroupBox(); - this._cbBinaryCompare = new System.Windows.Forms.CheckBox(); - this.label9 = new System.Windows.Forms.Label(); - this._tbSqlManual = new System.Windows.Forms.TextBox(); - this.label8 = new System.Windows.Forms.Label(); - this.label12 = new System.Windows.Forms.Label(); - this.label11 = new System.Windows.Forms.Label(); - this.label10 = new System.Windows.Forms.Label(); - this.label7 = new System.Windows.Forms.Label(); - this._bSqlProcEx = new System.Windows.Forms.Button(); - this._bSqlProc = new System.Windows.Forms.Button(); - this._bSqlSchool = new System.Windows.Forms.Button(); - this._tbSqlProcEx = new System.Windows.Forms.TextBox(); - this._tbSqlProc = new System.Windows.Forms.TextBox(); - this._tbSqlSchool = new System.Windows.Forms.TextBox(); - this.textBox1 = new System.Windows.Forms.TextBox(); - this._cbSqlSpellFamily = new System.Windows.Forms.ComboBox(); - this._bSelect = new System.Windows.Forms.Button(); + this._rtbProcSpellInfo = new System.Windows.Forms.RichTextBox(); + this._tvFamilyTree = new System.Windows.Forms.TreeView(); + this._cbProcSpellFamilyTree = new System.Windows.Forms.ComboBox(); + this._gSpellProcEvent = new System.Windows.Forms.GroupBox(); + this._tbCooldown = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this._tbChance = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this._tbPPM = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this._cbProcFitstSpellFamily = new System.Windows.Forms.ComboBox(); + this._clbSchools = new System.Windows.Forms.CheckedListBox(); + this.groupBox4 = new System.Windows.Forms.GroupBox(); + this._clbProcFlagEx = new System.Windows.Forms.CheckedListBox(); + this.groupBox5 = new System.Windows.Forms.GroupBox(); + this._clbProcFlags = new System.Windows.Forms.CheckedListBox(); + this._tpSpellProcInfo = new System.Windows.Forms.TabPage(); this.groupBox2 = new System.Windows.Forms.GroupBox(); this.splitContainer6 = new System.Windows.Forms.SplitContainer(); + this._bSqlSave = new System.Windows.Forms.Button(); + this._bSqlToBase = new System.Windows.Forms.Button(); + this._rtbSqlLog = new System.Windows.Forms.RichTextBox(); this._lvDataList = new System.Windows.Forms.ListView(); this.entry = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.spellname = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); @@ -147,58 +130,69 @@ private void InitializeComponent() this.ppmRate = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.customchance = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.cooldown = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); - this._rtbSqlLog = new System.Windows.Forms.RichTextBox(); - this._bSqlToBase = new System.Windows.Forms.Button(); - this._bSqlSave = new System.Windows.Forms.Button(); + this.groupBox3 = new System.Windows.Forms.GroupBox(); + this._bSelect = new System.Windows.Forms.Button(); + this._cbSqlSpellFamily = new System.Windows.Forms.ComboBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this._tbSqlSchool = new System.Windows.Forms.TextBox(); + this._tbSqlProc = new System.Windows.Forms.TextBox(); + this._tbSqlProcEx = new System.Windows.Forms.TextBox(); + this._bSqlSchool = new System.Windows.Forms.Button(); + this._bSqlProc = new System.Windows.Forms.Button(); + this._bSqlProcEx = new System.Windows.Forms.Button(); + this.label7 = new System.Windows.Forms.Label(); + this.label10 = new System.Windows.Forms.Label(); + this.label11 = new System.Windows.Forms.Label(); + this.label12 = new System.Windows.Forms.Label(); + this.label8 = new System.Windows.Forms.Label(); + this._tbSqlManual = new System.Windows.Forms.TextBox(); + this.label9 = new System.Windows.Forms.Label(); + this._cbBinaryCompare = new System.Windows.Forms.CheckBox(); + this._tpSqlData = new System.Windows.Forms.TabPage(); this._cbProcFlag = new System.Windows.Forms.CheckBox(); this._bWrite = new System.Windows.Forms.Button(); - this.splitContainer7 = new System.Windows.Forms.SplitContainer(); - this.splitContainer8 = new System.Windows.Forms.SplitContainer(); - this.textBox2 = new System.Windows.Forms.TextBox(); - this.richTextBox1 = new System.Windows.Forms.RichTextBox(); - this.richTextBox2 = new System.Windows.Forms.RichTextBox(); + this._tsmAbout = new System.Windows.Forms.ToolStripMenuItem(); + this._tsmHelp = new System.Windows.Forms.ToolStripMenuItem(); + this._Connected = new System.Windows.Forms.ToolStripMenuItem(); + this._tsmExit = new System.Windows.Forms.ToolStripMenuItem(); + this._tsmFile = new System.Windows.Forms.ToolStripMenuItem(); + this._tsmSettings = new System.Windows.Forms.ToolStripMenuItem(); this.statusStrip1.SuspendLayout(); this.menuStrip1.SuspendLayout(); - this.tabControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer7)).BeginInit(); + this.splitContainer7.Panel1.SuspendLayout(); + this.splitContainer7.Panel2.SuspendLayout(); + this.splitContainer7.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer8)).BeginInit(); + this.splitContainer8.Panel1.SuspendLayout(); + this.splitContainer8.SuspendLayout(); + this._tpCompare.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this._scCompareRoot)).BeginInit(); + this._scCompareRoot.Panel1.SuspendLayout(); + this._scCompareRoot.Panel2.SuspendLayout(); + this._scCompareRoot.SuspendLayout(); this._tpSpellInfo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); this.groupBox1.SuspendLayout(); + this.groupBox7.SuspendLayout(); this._gSpellFilter.SuspendLayout(); this._gbAdvansedSearch.SuspendLayout(); - this.groupBox7.SuspendLayout(); - this._tpSpellProcInfo.SuspendLayout(); - this.splitContainer2.Panel1.SuspendLayout(); - this.splitContainer2.Panel2.SuspendLayout(); + this.tabControl1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).BeginInit(); this.splitContainer2.SuspendLayout(); - this.splitContainer3.Panel1.SuspendLayout(); - this.splitContainer3.Panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).BeginInit(); this.splitContainer3.SuspendLayout(); - this.groupBox5.SuspendLayout(); - this.groupBox4.SuspendLayout(); - this._gSpellProcEvent.SuspendLayout(); - this.splitContainer4.Panel1.SuspendLayout(); - this.splitContainer4.Panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).BeginInit(); this.splitContainer4.SuspendLayout(); - this.splitContainer5.Panel1.SuspendLayout(); - this.splitContainer5.Panel2.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).BeginInit(); this.splitContainer5.SuspendLayout(); - this._tpCompare.SuspendLayout(); - this._scCompareRoot.Panel1.SuspendLayout(); - this._scCompareRoot.Panel2.SuspendLayout(); - this._scCompareRoot.SuspendLayout(); - this._tpSqlData.SuspendLayout(); - this.groupBox3.SuspendLayout(); - this.groupBox2.SuspendLayout(); - this.splitContainer6.Panel1.SuspendLayout(); - this.splitContainer6.Panel2.SuspendLayout(); + this._tpSpellProcInfo.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer6)).BeginInit(); this.splitContainer6.SuspendLayout(); - this.splitContainer7.Panel1.SuspendLayout(); - this.splitContainer7.Panel2.SuspendLayout(); - this.splitContainer7.SuspendLayout(); - this.splitContainer8.Panel1.SuspendLayout(); - this.splitContainer8.SuspendLayout(); + this._tpSqlData.SuspendLayout(); this.SuspendLayout(); // // statusStrip1 @@ -239,65 +233,189 @@ private void InitializeComponent() this.menuStrip1.TabIndex = 1; this.menuStrip1.Text = "menuStrip1"; // - // _tsmFile + // _ilPro // - this._tsmFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this._Connected, - this._tsmSettings, - this._tsmExit}); - this._tsmFile.Name = "_tsmFile"; - this._tsmFile.Size = new System.Drawing.Size(37, 20); - this._tsmFile.Text = "File"; + this._ilPro.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("_ilPro.ImageStream"))); + this._ilPro.TransparentColor = System.Drawing.Color.Transparent; + this._ilPro.Images.SetKeyName(0, "info.ico"); + this._ilPro.Images.SetKeyName(1, "ok.ico"); + this._ilPro.Images.SetKeyName(2, "drop.ico"); + this._ilPro.Images.SetKeyName(3, "plus.ico"); + this._ilPro.Images.SetKeyName(4, "family.ico"); + this._ilPro.Images.SetKeyName(5, "munus.ico"); // - // _Connected + // splitContainer7 // - this._Connected.Name = "_Connected"; - this._Connected.Size = new System.Drawing.Size(132, 22); - this._Connected.Text = "Connected"; - this._Connected.Click += new System.EventHandler(this.ConnectedClick); + this.splitContainer7.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer7.Location = new System.Drawing.Point(0, 0); + this.splitContainer7.Name = "splitContainer7"; // - // _tsmSettings + // splitContainer7.Panel1 // - this._tsmSettings.Name = "_tsmSettings"; - this._tsmSettings.Size = new System.Drawing.Size(132, 22); - this._tsmSettings.Text = "Setting"; - this._tsmSettings.Click += new System.EventHandler(this.SettingsClick); + this.splitContainer7.Panel1.Controls.Add(this.splitContainer8); + this.splitContainer7.Panel1.Controls.Add(this.richTextBox1); // - // _tsmExit + // splitContainer7.Panel2 // - this._tsmExit.Name = "_tsmExit"; - this._tsmExit.Size = new System.Drawing.Size(132, 22); - this._tsmExit.Text = "Exit"; - this._tsmExit.Click += new System.EventHandler(ExitClick); + this.splitContainer7.Panel2.Controls.Add(this.richTextBox2); + this.splitContainer7.Size = new System.Drawing.Size(858, 429); + this.splitContainer7.SplitterDistance = 424; + this.splitContainer7.TabIndex = 0; // - // _tsmHelp + // splitContainer8 // - this._tsmHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this._tsmAbout}); - this._tsmHelp.Name = "_tsmHelp"; - this._tsmHelp.Size = new System.Drawing.Size(44, 20); - this._tsmHelp.Text = "Help"; + this.splitContainer8.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer8.Location = new System.Drawing.Point(0, 0); + this.splitContainer8.Name = "splitContainer8"; // - // _tsmAbout + // splitContainer8.Panel1 // - this._tsmAbout.Name = "_tsmAbout"; - this._tsmAbout.Size = new System.Drawing.Size(113, 22); - this._tsmAbout.Text = "About.."; - this._tsmAbout.Click += new System.EventHandler(AboutClick); + this.splitContainer8.Panel1.Controls.Add(this.textBox2); + this.splitContainer8.Size = new System.Drawing.Size(424, 429); + this.splitContainer8.SplitterDistance = 209; + this.splitContainer8.TabIndex = 0; // - // tabControl1 + // textBox2 // - this.tabControl1.Controls.Add(this._tpSpellInfo); - this.tabControl1.Controls.Add(this._tpSpellProcInfo); - this.tabControl1.Controls.Add(this._tpCompare); - this.tabControl1.Controls.Add(this._tpSqlData); - this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; - this.tabControl1.Location = new System.Drawing.Point(0, 24); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(872, 583); - this.tabControl1.TabIndex = 2; - this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.TabControl1SelectedIndexChanged); + this.textBox2.Location = new System.Drawing.Point(19, 12); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(100, 20); + this.textBox2.TabIndex = 0; + // + // richTextBox1 + // + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(424, 429); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = ""; + // + // richTextBox2 + // + this.richTextBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox2.Location = new System.Drawing.Point(0, 0); + this.richTextBox2.Name = "richTextBox2"; + this.richTextBox2.Size = new System.Drawing.Size(430, 429); + this.richTextBox2.TabIndex = 0; + this.richTextBox2.Text = ""; + // + // _tpCompare + // + this._tpCompare.Controls.Add(this._scCompareRoot); + this._tpCompare.Location = new System.Drawing.Point(4, 22); + this._tpCompare.Name = "_tpCompare"; + this._tpCompare.Padding = new System.Windows.Forms.Padding(3); + this._tpCompare.Size = new System.Drawing.Size(864, 557); + this._tpCompare.TabIndex = 4; + this._tpCompare.Text = "Compare Spells"; + this._tpCompare.UseVisualStyleBackColor = true; + // + // _scCompareRoot + // + this._scCompareRoot.Dock = System.Windows.Forms.DockStyle.Fill; + this._scCompareRoot.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this._scCompareRoot.Location = new System.Drawing.Point(3, 3); + this._scCompareRoot.Name = "_scCompareRoot"; + // + // _scCompareRoot.Panel1 + // + this._scCompareRoot.Panel1.BackColor = System.Drawing.Color.WhiteSmoke; + this._scCompareRoot.Panel1.Controls.Add(this._bCompareSearch1); + this._scCompareRoot.Panel1.Controls.Add(this.label13); + this._scCompareRoot.Panel1.Controls.Add(this._tbCompareFilterSpell1); + this._scCompareRoot.Panel1.Controls.Add(this._rtbCompareSpell1); + // + // _scCompareRoot.Panel2 + // + this._scCompareRoot.Panel2.BackColor = System.Drawing.Color.WhiteSmoke; + this._scCompareRoot.Panel2.Controls.Add(this._bCompareSearch2); + this._scCompareRoot.Panel2.Controls.Add(this.label14); + this._scCompareRoot.Panel2.Controls.Add(this._rtbCompareSpell2); + this._scCompareRoot.Panel2.Controls.Add(this._tbCompareFilterSpell2); + this._scCompareRoot.Size = new System.Drawing.Size(858, 551); + this._scCompareRoot.SplitterDistance = 426; + this._scCompareRoot.TabIndex = 0; + // + // _tbCompareFilterSpell2 + // + this._tbCompareFilterSpell2.Location = new System.Drawing.Point(91, 3); + this._tbCompareFilterSpell2.Name = "_tbCompareFilterSpell2"; + this._tbCompareFilterSpell2.Size = new System.Drawing.Size(146, 20); + this._tbCompareFilterSpell2.TabIndex = 1; + this._tbCompareFilterSpell2.TextChanged += new System.EventHandler(this.CompareFilterSpellTextChanged); + // + // _rtbCompareSpell2 + // + this._rtbCompareSpell2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this._rtbCompareSpell2.BackColor = System.Drawing.Color.Gainsboro; + this._rtbCompareSpell2.Font = new System.Drawing.Font("Arial Unicode MS", 9F); + this._rtbCompareSpell2.Location = new System.Drawing.Point(3, 29); + this._rtbCompareSpell2.Name = "_rtbCompareSpell2"; + this._rtbCompareSpell2.Size = new System.Drawing.Size(425, 522); + this._rtbCompareSpell2.TabIndex = 0; + this._rtbCompareSpell2.Text = ""; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(10, 6); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(61, 13); + this.label14.TabIndex = 2; + this.label14.Text = "ID or Name"; + // + // _bCompareSearch2 + // + this._bCompareSearch2.Location = new System.Drawing.Point(243, 1); + this._bCompareSearch2.Name = "_bCompareSearch2"; + this._bCompareSearch2.Size = new System.Drawing.Size(51, 23); + this._bCompareSearch2.TabIndex = 3; + this._bCompareSearch2.Text = "Search"; + this._bCompareSearch2.UseVisualStyleBackColor = true; + this._bCompareSearch2.Click += new System.EventHandler(this.CompareSearch2Click); + // + // _rtbCompareSpell1 + // + this._rtbCompareSpell1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this._rtbCompareSpell1.BackColor = System.Drawing.Color.Gainsboro; + this._rtbCompareSpell1.Font = new System.Drawing.Font("Arial Unicode MS", 9F); + this._rtbCompareSpell1.Location = new System.Drawing.Point(0, 29); + this._rtbCompareSpell1.Name = "_rtbCompareSpell1"; + this._rtbCompareSpell1.Size = new System.Drawing.Size(423, 522); + this._rtbCompareSpell1.TabIndex = 0; + this._rtbCompareSpell1.Text = ""; + // + // _tbCompareFilterSpell1 + // + this._tbCompareFilterSpell1.Location = new System.Drawing.Point(86, 3); + this._tbCompareFilterSpell1.Name = "_tbCompareFilterSpell1"; + this._tbCompareFilterSpell1.Size = new System.Drawing.Size(146, 20); + this._tbCompareFilterSpell1.TabIndex = 1; + this._tbCompareFilterSpell1.TextChanged += new System.EventHandler(this.CompareFilterSpellTextChanged); + // + // label13 + // + this.label13.AutoSize = true; + this.label13.Location = new System.Drawing.Point(5, 6); + this.label13.Name = "label13"; + this.label13.Size = new System.Drawing.Size(61, 13); + this.label13.TabIndex = 2; + this.label13.Text = "ID or Name"; + // + // _bCompareSearch1 + // + this._bCompareSearch1.Location = new System.Drawing.Point(238, 1); + this._bCompareSearch1.Name = "_bCompareSearch1"; + this._bCompareSearch1.Size = new System.Drawing.Size(51, 23); + this._bCompareSearch1.TabIndex = 3; + this._bCompareSearch1.Text = "Search"; + this._bCompareSearch1.UseVisualStyleBackColor = true; + this._bCompareSearch1.Click += new System.EventHandler(this.CompareSearch1Click); // // _tpSpellInfo // @@ -331,18 +449,6 @@ private void InitializeComponent() this.splitContainer1.SplitterDistance = 543; this.splitContainer1.TabIndex = 0; // - // _rtSpellInfo - // - this._rtSpellInfo.BackColor = System.Drawing.Color.Gainsboro; - this._rtSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this._rtSpellInfo.Font = new System.Drawing.Font("Arial Unicode MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this._rtSpellInfo.Location = new System.Drawing.Point(0, 0); - this._rtSpellInfo.Name = "_rtSpellInfo"; - this._rtSpellInfo.ReadOnly = true; - this._rtSpellInfo.Size = new System.Drawing.Size(543, 551); - this._rtSpellInfo.TabIndex = 0; - this._rtSpellInfo.Text = ""; - // // groupBox1 // this.groupBox1.Controls.Add(this._lvSpellList); @@ -355,156 +461,156 @@ private void InitializeComponent() this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; // - // _lvSpellList + // groupBox7 // - this._lvSpellList.AllowColumnReorder = true; - this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._lvSpellList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.chSpellID, - this.chSpellName}); - this._lvSpellList.FullRowSelect = true; - this._lvSpellList.GridLines = true; - this._lvSpellList.HideSelection = false; - this._lvSpellList.Location = new System.Drawing.Point(6, 284); - this._lvSpellList.MultiSelect = false; - this._lvSpellList.Name = "_lvSpellList"; - this._lvSpellList.Size = new System.Drawing.Size(302, 261); - this._lvSpellList.TabIndex = 7; - this._lvSpellList.UseCompatibleStateImageBehavior = false; - this._lvSpellList.View = System.Windows.Forms.View.Details; - this._lvSpellList.VirtualMode = true; - this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.LvSpellListRetrieveVirtualItem); - this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.LvSpellListSelectedIndexChanged); + this.groupBox7.BackColor = System.Drawing.Color.LightGray; + this.groupBox7.Controls.Add(this.label6); + this.groupBox7.Controls.Add(this.label5); + this.groupBox7.Controls.Add(this.label4); + this.groupBox7.Controls.Add(this._bSearch); + this.groupBox7.Controls.Add(this._tbSearchAttributes); + this.groupBox7.Controls.Add(this._tbSearchIcon); + this.groupBox7.Controls.Add(this._tbSearchId); + this.groupBox7.Location = new System.Drawing.Point(0, 2); + this.groupBox7.Name = "groupBox7"; + this.groupBox7.Size = new System.Drawing.Size(309, 89); + this.groupBox7.TabIndex = 9; + this.groupBox7.TabStop = false; + this.groupBox7.Text = "Spell Search"; // - // chSpellID + // _tbSearchId // - this.chSpellID.Text = "ID"; - this.chSpellID.Width = 48; + this._tbSearchId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this._tbSearchId.Location = new System.Drawing.Point(73, 13); + this._tbSearchId.Name = "_tbSearchId"; + this._tbSearchId.Size = new System.Drawing.Size(180, 20); + this._tbSearchId.TabIndex = 0; + this._tbSearchId.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); // - // chSpellName + // _tbSearchIcon // - this.chSpellName.Text = "Name"; - this.chSpellName.Width = 250; + this._tbSearchIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this._tbSearchIcon.Location = new System.Drawing.Point(73, 35); + this._tbSearchIcon.Name = "_tbSearchIcon"; + this._tbSearchIcon.Size = new System.Drawing.Size(180, 20); + this._tbSearchIcon.TabIndex = 0; + this._tbSearchIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); // - // _gSpellFilter + // _tbSearchAttributes // - this._gSpellFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._tbSearchAttributes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._gSpellFilter.BackColor = System.Drawing.Color.LightGray; - this._gSpellFilter.Controls.Add(this._gbAdvansedSearch); - this._gSpellFilter.Controls.Add(this._cbTarget2); - this._gSpellFilter.Controls.Add(this._cbTarget1); - this._gSpellFilter.Controls.Add(this._cbSpellEffect); - this._gSpellFilter.Controls.Add(this._cbSpellAura); - this._gSpellFilter.Controls.Add(this._cbSpellFamilyName); - this._gSpellFilter.Location = new System.Drawing.Point(2, 81); - this._gSpellFilter.Name = "_gSpellFilter"; - this._gSpellFilter.Size = new System.Drawing.Size(309, 224); - this._gSpellFilter.TabIndex = 8; - this._gSpellFilter.TabStop = false; - this._gSpellFilter.Text = "Spell Filter"; + this._tbSearchAttributes.Location = new System.Drawing.Point(73, 57); + this._tbSearchAttributes.Name = "_tbSearchAttributes"; + this._tbSearchAttributes.Size = new System.Drawing.Size(180, 20); + this._tbSearchAttributes.TabIndex = 0; + this._tbSearchAttributes.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); // - // _gbAdvansedSearch + // _bSearch // - this._gbAdvansedSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter2CompareType); - this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter1CompareType); - this._gbAdvansedSearch.Controls.Add(this._tbAdvancedFilter2Val); - this._gbAdvansedSearch.Controls.Add(this._tbAdvancedFilter1Val); - this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter2); - this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter1); - this._gbAdvansedSearch.Location = new System.Drawing.Point(3, 135); - this._gbAdvansedSearch.Name = "_gbAdvansedSearch"; - this._gbAdvansedSearch.Size = new System.Drawing.Size(300, 70); - this._gbAdvansedSearch.TabIndex = 6; - this._gbAdvansedSearch.TabStop = false; - this._gbAdvansedSearch.Text = "Advanced Filter"; + this._bSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._bSearch.Location = new System.Drawing.Point(258, 11); + this._bSearch.Name = "_bSearch"; + this._bSearch.Size = new System.Drawing.Size(50, 23); + this._bSearch.TabIndex = 1; + this._bSearch.Text = "Search"; + this._bSearch.UseVisualStyleBackColor = true; + this._bSearch.Click += new System.EventHandler(this.BSearchClick); // - // _cbAdvancedFilter2CompareType + // label4 // - this._cbAdvancedFilter2CompareType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this._cbAdvancedFilter2CompareType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbAdvancedFilter2CompareType.DropDownWidth = 160; - this._cbAdvancedFilter2CompareType.FormattingEnabled = true; - this._cbAdvancedFilter2CompareType.Location = new System.Drawing.Point(127, 41); - this._cbAdvancedFilter2CompareType.Name = "_cbAdvancedFilter2CompareType"; - this._cbAdvancedFilter2CompareType.Size = new System.Drawing.Size(76, 21); - this._cbAdvancedFilter2CompareType.TabIndex = 3; + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(6, 16); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(64, 13); + this.label4.TabIndex = 2; + this.label4.Text = "ID or Name:"; // - // _cbAdvancedFilter1CompareType + // label5 // - this._cbAdvancedFilter1CompareType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this._cbAdvancedFilter1CompareType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbAdvancedFilter1CompareType.DropDownWidth = 160; - this._cbAdvancedFilter1CompareType.FormattingEnabled = true; - this._cbAdvancedFilter1CompareType.Location = new System.Drawing.Point(127, 15); - this._cbAdvancedFilter1CompareType.Name = "_cbAdvancedFilter1CompareType"; - this._cbAdvancedFilter1CompareType.Size = new System.Drawing.Size(76, 21); - this._cbAdvancedFilter1CompareType.TabIndex = 2; + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(6, 38); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(45, 13); + this.label5.TabIndex = 2; + this.label5.Text = "Icon ID:"; // - // _tbAdvancedFilter2Val + // label6 // - this._tbAdvancedFilter2Val.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this._tbAdvancedFilter2Val.Location = new System.Drawing.Point(210, 42); - this._tbAdvancedFilter2Val.Name = "_tbAdvancedFilter2Val"; - this._tbAdvancedFilter2Val.Size = new System.Drawing.Size(85, 20); - this._tbAdvancedFilter2Val.TabIndex = 1; - this._tbAdvancedFilter2Val.Text = "0"; - this._tbAdvancedFilter2Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbAdvansedFilterValKeyDown); + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(6, 60); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(67, 13); + this.label6.TabIndex = 2; + this.label6.Text = "Attributes&&X:"; // - // _tbAdvancedFilter1Val + // _gSpellFilter // - this._tbAdvancedFilter1Val.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this._tbAdvancedFilter1Val.Location = new System.Drawing.Point(209, 15); - this._tbAdvancedFilter1Val.Name = "_tbAdvancedFilter1Val"; - this._tbAdvancedFilter1Val.Size = new System.Drawing.Size(85, 20); - this._tbAdvancedFilter1Val.TabIndex = 1; - this._tbAdvancedFilter1Val.Text = "0"; - this._tbAdvancedFilter1Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbAdvansedFilterValKeyDown); + this._gSpellFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this._gSpellFilter.BackColor = System.Drawing.Color.LightGray; + this._gSpellFilter.Controls.Add(this._gbAdvansedSearch); + this._gSpellFilter.Controls.Add(this._cbTarget2); + this._gSpellFilter.Controls.Add(this._cbTarget1); + this._gSpellFilter.Controls.Add(this._cbSpellEffect); + this._gSpellFilter.Controls.Add(this._cbSpellAura); + this._gSpellFilter.Controls.Add(this._cbSpellFamilyName); + this._gSpellFilter.Location = new System.Drawing.Point(2, 81); + this._gSpellFilter.Name = "_gSpellFilter"; + this._gSpellFilter.Size = new System.Drawing.Size(309, 224); + this._gSpellFilter.TabIndex = 8; + this._gSpellFilter.TabStop = false; + this._gSpellFilter.Text = "Spell Filter"; // - // _cbAdvancedFilter2 + // _cbSpellFamilyName // - this._cbAdvancedFilter2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbAdvancedFilter2.DropDownHeight = 500; - this._cbAdvancedFilter2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbAdvancedFilter2.FormattingEnabled = true; - this._cbAdvancedFilter2.IntegralHeight = false; - this._cbAdvancedFilter2.Location = new System.Drawing.Point(1, 42); - this._cbAdvancedFilter2.Name = "_cbAdvancedFilter2"; - this._cbAdvancedFilter2.Size = new System.Drawing.Size(120, 21); - this._cbAdvancedFilter2.TabIndex = 0; + this._cbSpellFamilyName.DropDownHeight = 500; + this._cbSpellFamilyName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbSpellFamilyName.DropDownWidth = 302; + this._cbSpellFamilyName.FormattingEnabled = true; + this._cbSpellFamilyName.IntegralHeight = false; + this._cbSpellFamilyName.ItemHeight = 13; + this._cbSpellFamilyName.Location = new System.Drawing.Point(4, 14); + this._cbSpellFamilyName.Name = "_cbSpellFamilyName"; + this._cbSpellFamilyName.Size = new System.Drawing.Size(302, 21); + this._cbSpellFamilyName.TabIndex = 2; + this._cbSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // - // _cbAdvancedFilter1 + // _cbSpellAura // - this._cbAdvancedFilter1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbAdvancedFilter1.DropDownHeight = 500; - this._cbAdvancedFilter1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbAdvancedFilter1.FormattingEnabled = true; - this._cbAdvancedFilter1.IntegralHeight = false; - this._cbAdvancedFilter1.Location = new System.Drawing.Point(1, 15); - this._cbAdvancedFilter1.Name = "_cbAdvancedFilter1"; - this._cbAdvancedFilter1.Size = new System.Drawing.Size(120, 21); - this._cbAdvancedFilter1.TabIndex = 0; + this._cbSpellAura.DropDownHeight = 500; + this._cbSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbSpellAura.DropDownWidth = 302; + this._cbSpellAura.FormattingEnabled = true; + this._cbSpellAura.IntegralHeight = false; + this._cbSpellAura.Location = new System.Drawing.Point(4, 38); + this._cbSpellAura.Name = "_cbSpellAura"; + this._cbSpellAura.Size = new System.Drawing.Size(302, 21); + this._cbSpellAura.TabIndex = 3; + this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // - // _cbTarget2 + // _cbSpellEffect // - this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbTarget2.DropDownHeight = 500; - this._cbTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbTarget2.DropDownWidth = 302; - this._cbTarget2.FormattingEnabled = true; - this._cbTarget2.IntegralHeight = false; - this._cbTarget2.Location = new System.Drawing.Point(4, 111); - this._cbTarget2.Name = "_cbTarget2"; - this._cbTarget2.Size = new System.Drawing.Size(302, 21); - this._cbTarget2.TabIndex = 5; - this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); + this._cbSpellEffect.DropDownHeight = 500; + this._cbSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbSpellEffect.DropDownWidth = 302; + this._cbSpellEffect.FormattingEnabled = true; + this._cbSpellEffect.IntegralHeight = false; + this._cbSpellEffect.Location = new System.Drawing.Point(4, 62); + this._cbSpellEffect.Name = "_cbSpellEffect"; + this._cbSpellEffect.Size = new System.Drawing.Size(302, 21); + this._cbSpellEffect.TabIndex = 4; + this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // // _cbTarget1 // @@ -521,148 +627,164 @@ private void InitializeComponent() this._cbTarget1.TabIndex = 5; this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // - // _cbSpellEffect + // _cbTarget2 // - this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbSpellEffect.DropDownHeight = 500; - this._cbSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbSpellEffect.DropDownWidth = 302; - this._cbSpellEffect.FormattingEnabled = true; - this._cbSpellEffect.IntegralHeight = false; - this._cbSpellEffect.Location = new System.Drawing.Point(4, 62); - this._cbSpellEffect.Name = "_cbSpellEffect"; - this._cbSpellEffect.Size = new System.Drawing.Size(302, 21); - this._cbSpellEffect.TabIndex = 4; - this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); + this._cbTarget2.DropDownHeight = 500; + this._cbTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbTarget2.DropDownWidth = 302; + this._cbTarget2.FormattingEnabled = true; + this._cbTarget2.IntegralHeight = false; + this._cbTarget2.Location = new System.Drawing.Point(4, 111); + this._cbTarget2.Name = "_cbTarget2"; + this._cbTarget2.Size = new System.Drawing.Size(302, 21); + this._cbTarget2.TabIndex = 5; + this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); // - // _cbSpellAura + // _gbAdvansedSearch // - this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._gbAdvansedSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbSpellAura.DropDownHeight = 500; - this._cbSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbSpellAura.DropDownWidth = 302; - this._cbSpellAura.FormattingEnabled = true; - this._cbSpellAura.IntegralHeight = false; - this._cbSpellAura.Location = new System.Drawing.Point(4, 38); - this._cbSpellAura.Name = "_cbSpellAura"; - this._cbSpellAura.Size = new System.Drawing.Size(302, 21); - this._cbSpellAura.TabIndex = 3; - this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); + this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter2CompareType); + this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter1CompareType); + this._gbAdvansedSearch.Controls.Add(this._tbAdvancedFilter2Val); + this._gbAdvansedSearch.Controls.Add(this._tbAdvancedFilter1Val); + this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter2); + this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter1); + this._gbAdvansedSearch.Location = new System.Drawing.Point(3, 135); + this._gbAdvansedSearch.Name = "_gbAdvansedSearch"; + this._gbAdvansedSearch.Size = new System.Drawing.Size(300, 70); + this._gbAdvansedSearch.TabIndex = 6; + this._gbAdvansedSearch.TabStop = false; + this._gbAdvansedSearch.Text = "Advanced Filter"; // - // _cbSpellFamilyName + // _cbAdvancedFilter1 // - this._cbSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbAdvancedFilter1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbSpellFamilyName.DropDownHeight = 500; - this._cbSpellFamilyName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbSpellFamilyName.DropDownWidth = 302; - this._cbSpellFamilyName.FormattingEnabled = true; - this._cbSpellFamilyName.IntegralHeight = false; - this._cbSpellFamilyName.ItemHeight = 13; - this._cbSpellFamilyName.Location = new System.Drawing.Point(4, 14); - this._cbSpellFamilyName.Name = "_cbSpellFamilyName"; - this._cbSpellFamilyName.Size = new System.Drawing.Size(302, 21); - this._cbSpellFamilyName.TabIndex = 2; - this._cbSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); + this._cbAdvancedFilter1.DropDownHeight = 500; + this._cbAdvancedFilter1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbAdvancedFilter1.FormattingEnabled = true; + this._cbAdvancedFilter1.IntegralHeight = false; + this._cbAdvancedFilter1.Location = new System.Drawing.Point(1, 15); + this._cbAdvancedFilter1.Name = "_cbAdvancedFilter1"; + this._cbAdvancedFilter1.Size = new System.Drawing.Size(120, 21); + this._cbAdvancedFilter1.TabIndex = 0; // - // groupBox7 + // _cbAdvancedFilter2 // - this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbAdvancedFilter2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox7.BackColor = System.Drawing.Color.LightGray; - this.groupBox7.Controls.Add(this.label6); - this.groupBox7.Controls.Add(this.label5); - this.groupBox7.Controls.Add(this.label4); - this.groupBox7.Controls.Add(this._bSearch); - this.groupBox7.Controls.Add(this._tbSearchAttributes); - this.groupBox7.Controls.Add(this._tbSearchIcon); - this.groupBox7.Controls.Add(this._tbSearchId); - this.groupBox7.Location = new System.Drawing.Point(0, 2); - this.groupBox7.Name = "groupBox7"; - this.groupBox7.Size = new System.Drawing.Size(309, 89); - this.groupBox7.TabIndex = 9; - this.groupBox7.TabStop = false; - this.groupBox7.Text = "Spell Search"; + this._cbAdvancedFilter2.DropDownHeight = 500; + this._cbAdvancedFilter2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbAdvancedFilter2.FormattingEnabled = true; + this._cbAdvancedFilter2.IntegralHeight = false; + this._cbAdvancedFilter2.Location = new System.Drawing.Point(1, 42); + this._cbAdvancedFilter2.Name = "_cbAdvancedFilter2"; + this._cbAdvancedFilter2.Size = new System.Drawing.Size(120, 21); + this._cbAdvancedFilter2.TabIndex = 0; // - // label6 + // _tbAdvancedFilter1Val // - this.label6.AutoSize = true; - this.label6.Location = new System.Drawing.Point(6, 60); - this.label6.Name = "label6"; - this.label6.Size = new System.Drawing.Size(67, 13); - this.label6.TabIndex = 2; - this.label6.Text = "Attributes&&X:"; + this._tbAdvancedFilter1Val.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._tbAdvancedFilter1Val.Location = new System.Drawing.Point(209, 15); + this._tbAdvancedFilter1Val.Name = "_tbAdvancedFilter1Val"; + this._tbAdvancedFilter1Val.Size = new System.Drawing.Size(85, 20); + this._tbAdvancedFilter1Val.TabIndex = 1; + this._tbAdvancedFilter1Val.Text = "0"; + this._tbAdvancedFilter1Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbAdvansedFilterValKeyDown); // - // label5 + // _tbAdvancedFilter2Val // - this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(6, 38); - this.label5.Name = "label5"; - this.label5.Size = new System.Drawing.Size(45, 13); - this.label5.TabIndex = 2; - this.label5.Text = "Icon ID:"; + this._tbAdvancedFilter2Val.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._tbAdvancedFilter2Val.Location = new System.Drawing.Point(210, 42); + this._tbAdvancedFilter2Val.Name = "_tbAdvancedFilter2Val"; + this._tbAdvancedFilter2Val.Size = new System.Drawing.Size(85, 20); + this._tbAdvancedFilter2Val.TabIndex = 1; + this._tbAdvancedFilter2Val.Text = "0"; + this._tbAdvancedFilter2Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbAdvansedFilterValKeyDown); // - // label4 + // _cbAdvancedFilter1CompareType // - this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(6, 16); - this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(64, 13); - this.label4.TabIndex = 2; - this.label4.Text = "ID or Name:"; + this._cbAdvancedFilter1CompareType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._cbAdvancedFilter1CompareType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbAdvancedFilter1CompareType.DropDownWidth = 160; + this._cbAdvancedFilter1CompareType.FormattingEnabled = true; + this._cbAdvancedFilter1CompareType.Location = new System.Drawing.Point(127, 15); + this._cbAdvancedFilter1CompareType.Name = "_cbAdvancedFilter1CompareType"; + this._cbAdvancedFilter1CompareType.Size = new System.Drawing.Size(76, 21); + this._cbAdvancedFilter1CompareType.TabIndex = 2; // - // _bSearch + // _cbAdvancedFilter2CompareType // - this._bSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this._bSearch.Location = new System.Drawing.Point(258, 11); - this._bSearch.Name = "_bSearch"; - this._bSearch.Size = new System.Drawing.Size(50, 23); - this._bSearch.TabIndex = 1; - this._bSearch.Text = "Search"; - this._bSearch.UseVisualStyleBackColor = true; - this._bSearch.Click += new System.EventHandler(this.BSearchClick); + this._cbAdvancedFilter2CompareType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._cbAdvancedFilter2CompareType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbAdvancedFilter2CompareType.DropDownWidth = 160; + this._cbAdvancedFilter2CompareType.FormattingEnabled = true; + this._cbAdvancedFilter2CompareType.Location = new System.Drawing.Point(127, 41); + this._cbAdvancedFilter2CompareType.Name = "_cbAdvancedFilter2CompareType"; + this._cbAdvancedFilter2CompareType.Size = new System.Drawing.Size(76, 21); + this._cbAdvancedFilter2CompareType.TabIndex = 3; // - // _tbSearchAttributes + // _lvSpellList // - this._tbSearchAttributes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._lvSpellList.AllowColumnReorder = true; + this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._tbSearchAttributes.Location = new System.Drawing.Point(73, 57); - this._tbSearchAttributes.Name = "_tbSearchAttributes"; - this._tbSearchAttributes.Size = new System.Drawing.Size(180, 20); - this._tbSearchAttributes.TabIndex = 0; - this._tbSearchAttributes.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); + this._lvSpellList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.chSpellID, + this.chSpellName}); + this._lvSpellList.FullRowSelect = true; + this._lvSpellList.GridLines = true; + this._lvSpellList.HideSelection = false; + this._lvSpellList.Location = new System.Drawing.Point(6, 284); + this._lvSpellList.MultiSelect = false; + this._lvSpellList.Name = "_lvSpellList"; + this._lvSpellList.Size = new System.Drawing.Size(302, 261); + this._lvSpellList.TabIndex = 7; + this._lvSpellList.UseCompatibleStateImageBehavior = false; + this._lvSpellList.View = System.Windows.Forms.View.Details; + this._lvSpellList.VirtualMode = true; + this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.LvSpellListRetrieveVirtualItem); + this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.LvSpellListSelectedIndexChanged); // - // _tbSearchIcon + // chSpellID // - this._tbSearchIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this._tbSearchIcon.Location = new System.Drawing.Point(73, 35); - this._tbSearchIcon.Name = "_tbSearchIcon"; - this._tbSearchIcon.Size = new System.Drawing.Size(180, 20); - this._tbSearchIcon.TabIndex = 0; - this._tbSearchIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); + this.chSpellID.Text = "ID"; + this.chSpellID.Width = 48; // - // _tbSearchId + // chSpellName // - this._tbSearchId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this._tbSearchId.Location = new System.Drawing.Point(73, 13); - this._tbSearchId.Name = "_tbSearchId"; - this._tbSearchId.Size = new System.Drawing.Size(180, 20); - this._tbSearchId.TabIndex = 0; - this._tbSearchId.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); + this.chSpellName.Text = "Name"; + this.chSpellName.Width = 250; // - // _tpSpellProcInfo + // _rtSpellInfo // - this._tpSpellProcInfo.Controls.Add(this.splitContainer2); - this._tpSpellProcInfo.Location = new System.Drawing.Point(4, 22); - this._tpSpellProcInfo.Name = "_tpSpellProcInfo"; - this._tpSpellProcInfo.Size = new System.Drawing.Size(864, 557); - this._tpSpellProcInfo.TabIndex = 2; - this._tpSpellProcInfo.Text = "Spell Proc Event"; - this._tpSpellProcInfo.UseVisualStyleBackColor = true; + this._rtSpellInfo.BackColor = System.Drawing.Color.Gainsboro; + this._rtSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this._rtSpellInfo.Font = new System.Drawing.Font("Arial Unicode MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this._rtSpellInfo.Location = new System.Drawing.Point(0, 0); + this._rtSpellInfo.Name = "_rtSpellInfo"; + this._rtSpellInfo.ReadOnly = true; + this._rtSpellInfo.Size = new System.Drawing.Size(543, 551); + this._rtSpellInfo.TabIndex = 0; + this._rtSpellInfo.Text = ""; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this._tpSpellInfo); + this.tabControl1.Controls.Add(this._tpSpellProcInfo); + this.tabControl1.Controls.Add(this._tpCompare); + this.tabControl1.Controls.Add(this._tpSqlData); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 24); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(872, 583); + this.tabControl1.TabIndex = 2; + this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.TabControl1SelectedIndexChanged); // // splitContainer2 // @@ -671,18 +793,38 @@ private void InitializeComponent() this.splitContainer2.Name = "splitContainer2"; this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; // - // splitContainer2.Panel1 - // - this.splitContainer2.Panel1.Controls.Add(this.splitContainer3); - // // splitContainer2.Panel2 // this.splitContainer2.Panel2.BackColor = System.Drawing.Color.Gainsboro; - this.splitContainer2.Panel2.Controls.Add(this._lvProcAdditionalInfo); this.splitContainer2.Size = new System.Drawing.Size(864, 557); this.splitContainer2.SplitterDistance = 489; this.splitContainer2.TabIndex = 0; // + // _lvProcAdditionalInfo + // + this._lvProcAdditionalInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this._lvProcAdditionalInfo.FullRowSelect = true; + this._lvProcAdditionalInfo.GridLines = true; + this._lvProcAdditionalInfo.Location = new System.Drawing.Point(0, 0); + this._lvProcAdditionalInfo.Name = "_lvProcAdditionalInfo"; + this._lvProcAdditionalInfo.Size = new System.Drawing.Size(864, 64); + this._lvProcAdditionalInfo.TabIndex = 0; + this._lvProcAdditionalInfo.UseCompatibleStateImageBehavior = false; + this._lvProcAdditionalInfo.View = System.Windows.Forms.View.Details; + this._lvProcAdditionalInfo.SelectedIndexChanged += new System.EventHandler(this.LvProcAdditionalInfoSelectedIndexChanged); + // + // _chID + // + this._chID.DisplayIndex = 0; + this._chID.Text = "Entry"; + this._chID.Width = 100; + // + // _chName + // + this._chName.DisplayIndex = 1; + this._chName.Text = "Name"; + this._chName.Width = 685; + // // splitContainer3 // this.splitContainer3.BackColor = System.Drawing.Color.White; @@ -695,271 +837,128 @@ private void InitializeComponent() // splitContainer3.Panel1 // this.splitContainer3.Panel1.BackColor = System.Drawing.Color.White; - this.splitContainer3.Panel1.Controls.Add(this.groupBox5); - this.splitContainer3.Panel1.Controls.Add(this.groupBox4); - this.splitContainer3.Panel1.Controls.Add(this._gSpellProcEvent); - // - // splitContainer3.Panel2 - // - this.splitContainer3.Panel2.Controls.Add(this.splitContainer4); this.splitContainer3.Size = new System.Drawing.Size(864, 489); this.splitContainer3.SplitterDistance = 241; this.splitContainer3.TabIndex = 0; // - // groupBox5 + // splitContainer4 // - this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox5.BackColor = System.Drawing.Color.WhiteSmoke; - this.groupBox5.Controls.Add(this._clbProcFlags); - this.groupBox5.Location = new System.Drawing.Point(3, 128); - this.groupBox5.Name = "groupBox5"; - this.groupBox5.Size = new System.Drawing.Size(858, 115); - this.groupBox5.TabIndex = 10; - this.groupBox5.TabStop = false; - this.groupBox5.Text = "Spell Proc Flags"; + this.splitContainer4.BackColor = System.Drawing.Color.White; + this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; + this.splitContainer4.Location = new System.Drawing.Point(0, 0); + this.splitContainer4.Name = "splitContainer4"; // - // _clbProcFlags + // splitContainer4.Panel1 // - this._clbProcFlags.CheckOnClick = true; - this._clbProcFlags.ColumnWidth = 170; - this._clbProcFlags.Dock = System.Windows.Forms.DockStyle.Fill; - this._clbProcFlags.FormattingEnabled = true; - this._clbProcFlags.Location = new System.Drawing.Point(3, 16); - this._clbProcFlags.MultiColumn = true; - this._clbProcFlags.Name = "_clbProcFlags"; - this._clbProcFlags.Size = new System.Drawing.Size(852, 96); - this._clbProcFlags.TabIndex = 0; - this._clbProcFlags.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); + this.splitContainer4.Panel1.BackColor = System.Drawing.Color.Gainsboro; + this.splitContainer4.Size = new System.Drawing.Size(864, 244); + this.splitContainer4.SplitterDistance = 260; + this.splitContainer4.TabIndex = 0; // - // groupBox4 + // splitContainer5 // - this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox4.BackColor = System.Drawing.Color.WhiteSmoke; - this.groupBox4.Controls.Add(this._clbProcFlagEx); - this.groupBox4.Location = new System.Drawing.Point(3, 60); - this.groupBox4.Name = "groupBox4"; - this.groupBox4.Size = new System.Drawing.Size(858, 75); - this.groupBox4.TabIndex = 9; - this.groupBox4.TabStop = false; - this.groupBox4.Text = "Spell Proc Ex"; + this.splitContainer5.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer5.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; + this.splitContainer5.Location = new System.Drawing.Point(0, 0); + this.splitContainer5.Name = "splitContainer5"; // - // _clbProcFlagEx + // splitContainer5.Panel2 // - this._clbProcFlagEx.CheckOnClick = true; - this._clbProcFlagEx.ColumnWidth = 120; - this._clbProcFlagEx.Dock = System.Windows.Forms.DockStyle.Fill; - this._clbProcFlagEx.FormattingEnabled = true; - this._clbProcFlagEx.Location = new System.Drawing.Point(3, 16); - this._clbProcFlagEx.MultiColumn = true; - this._clbProcFlagEx.Name = "_clbProcFlagEx"; - this._clbProcFlagEx.Size = new System.Drawing.Size(852, 56); - this._clbProcFlagEx.TabIndex = 3; - this._clbProcFlagEx.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); + this.splitContainer5.Panel2.BackColor = System.Drawing.Color.Gainsboro; + this.splitContainer5.Size = new System.Drawing.Size(600, 244); + this.splitContainer5.SplitterDistance = 330; + this.splitContainer5.TabIndex = 0; // - // _gSpellProcEvent + // _cbProcSpellFamilyName // - this._gSpellProcEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbProcSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._gSpellProcEvent.BackColor = System.Drawing.Color.WhiteSmoke; - this._gSpellProcEvent.Controls.Add(this._clbSchools); - this._gSpellProcEvent.Controls.Add(this._cbProcFitstSpellFamily); - this._gSpellProcEvent.Controls.Add(this.label1); - this._gSpellProcEvent.Controls.Add(this._tbPPM); - this._gSpellProcEvent.Controls.Add(this.label2); - this._gSpellProcEvent.Controls.Add(this._tbChance); - this._gSpellProcEvent.Controls.Add(this.label3); - this._gSpellProcEvent.Controls.Add(this._tbCooldown); - this._gSpellProcEvent.FlatStyle = System.Windows.Forms.FlatStyle.Flat; - this._gSpellProcEvent.Location = new System.Drawing.Point(4, 0); - this._gSpellProcEvent.Name = "_gSpellProcEvent"; - this._gSpellProcEvent.Size = new System.Drawing.Size(857, 63); - this._gSpellProcEvent.TabIndex = 8; - this._gSpellProcEvent.TabStop = false; - this._gSpellProcEvent.Text = "Spell Proc Event"; - // - // _clbSchools - // - this._clbSchools.CheckOnClick = true; - this._clbSchools.ColumnWidth = 100; - this._clbSchools.Dock = System.Windows.Forms.DockStyle.Right; - this._clbSchools.FormattingEnabled = true; - this._clbSchools.Location = new System.Drawing.Point(391, 16); - this._clbSchools.MultiColumn = true; - this._clbSchools.Name = "_clbSchools"; - this._clbSchools.Size = new System.Drawing.Size(463, 44); - this._clbSchools.TabIndex = 5; - this._clbSchools.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); - // - // _cbProcFitstSpellFamily - // - this._cbProcFitstSpellFamily.DropDownHeight = 500; - this._cbProcFitstSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbProcFitstSpellFamily.FormattingEnabled = true; - this._cbProcFitstSpellFamily.IntegralHeight = false; - this._cbProcFitstSpellFamily.Location = new System.Drawing.Point(3, 14); - this._cbProcFitstSpellFamily.Name = "_cbProcFitstSpellFamily"; - this._cbProcFitstSpellFamily.Size = new System.Drawing.Size(342, 21); - this._cbProcFitstSpellFamily.TabIndex = 4; - this._cbProcFitstSpellFamily.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); - // - // label1 - // - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(3, 41); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(30, 13); - this.label1.TabIndex = 6; - this.label1.Text = "PPM"; - // - // _tbPPM - // - this._tbPPM.Location = new System.Drawing.Point(39, 38); - this._tbPPM.MaxLength = 10; - this._tbPPM.Name = "_tbPPM"; - this._tbPPM.Size = new System.Drawing.Size(60, 20); - this._tbPPM.TabIndex = 7; - this._tbPPM.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); - this._tbPPM.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); - // - // label2 - // - this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(105, 41); - this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(44, 13); - this.label2.TabIndex = 6; - this.label2.Text = "Chance"; - // - // _tbChance - // - this._tbChance.Location = new System.Drawing.Point(155, 38); - this._tbChance.MaxLength = 10; - this._tbChance.Name = "_tbChance"; - this._tbChance.Size = new System.Drawing.Size(60, 20); - this._tbChance.TabIndex = 7; - this._tbChance.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); - this._tbChance.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); - // - // label3 - // - this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(225, 41); - this.label3.Name = "label3"; - this.label3.Size = new System.Drawing.Size(54, 13); - this.label3.TabIndex = 6; - this.label3.Text = "Cooldown"; - // - // _tbCooldown - // - this._tbCooldown.Location = new System.Drawing.Point(285, 38); - this._tbCooldown.MaxLength = 10; - this._tbCooldown.Name = "_tbCooldown"; - this._tbCooldown.Size = new System.Drawing.Size(60, 20); - this._tbCooldown.TabIndex = 7; - this._tbCooldown.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); - this._tbCooldown.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); - // - // splitContainer4 - // - this.splitContainer4.BackColor = System.Drawing.Color.White; - this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this.splitContainer4.Location = new System.Drawing.Point(0, 0); - this.splitContainer4.Name = "splitContainer4"; - // - // splitContainer4.Panel1 - // - this.splitContainer4.Panel1.BackColor = System.Drawing.Color.Gainsboro; - this.splitContainer4.Panel1.Controls.Add(this._cbProcSpellFamilyTree); - this.splitContainer4.Panel1.Controls.Add(this._tvFamilyTree); - // - // splitContainer4.Panel2 - // - this.splitContainer4.Panel2.Controls.Add(this.splitContainer5); - this.splitContainer4.Size = new System.Drawing.Size(864, 244); - this.splitContainer4.SplitterDistance = 260; - this.splitContainer4.TabIndex = 0; + this._cbProcSpellFamilyName.DropDownHeight = 500; + this._cbProcSpellFamilyName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbProcSpellFamilyName.FormattingEnabled = true; + this._cbProcSpellFamilyName.IntegralHeight = false; + this._cbProcSpellFamilyName.Location = new System.Drawing.Point(3, 24); + this._cbProcSpellFamilyName.Name = "_cbProcSpellFamilyName"; + this._cbProcSpellFamilyName.Size = new System.Drawing.Size(260, 21); + this._cbProcSpellFamilyName.TabIndex = 1; + this._cbProcSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // - // _cbProcSpellFamilyTree + // _cbProcSpellAura // - this._cbProcSpellFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbProcSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbProcSpellFamilyTree.DropDownHeight = 500; - this._cbProcSpellFamilyTree.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbProcSpellFamilyTree.FormattingEnabled = true; - this._cbProcSpellFamilyTree.IntegralHeight = false; - this._cbProcSpellFamilyTree.Location = new System.Drawing.Point(1, 2); - this._cbProcSpellFamilyTree.Name = "_cbProcSpellFamilyTree"; - this._cbProcSpellFamilyTree.Size = new System.Drawing.Size(258, 21); - this._cbProcSpellFamilyTree.TabIndex = 1; - this._cbProcSpellFamilyTree.SelectedIndexChanged += new System.EventHandler(this.TvFamilyTreeSelectedIndexChanged); + this._cbProcSpellAura.DropDownHeight = 500; + this._cbProcSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbProcSpellAura.FormattingEnabled = true; + this._cbProcSpellAura.IntegralHeight = false; + this._cbProcSpellAura.Location = new System.Drawing.Point(3, 46); + this._cbProcSpellAura.Name = "_cbProcSpellAura"; + this._cbProcSpellAura.Size = new System.Drawing.Size(260, 21); + this._cbProcSpellAura.TabIndex = 2; + this._cbProcSpellAura.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // - // _tvFamilyTree + // _cbProcSpellEffect // - this._tvFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._cbProcSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._tvFamilyTree.CheckBoxes = true; - this._tvFamilyTree.ImageIndex = 0; - this._tvFamilyTree.ImageList = this._ilPro; - this._tvFamilyTree.Location = new System.Drawing.Point(1, 23); - this._tvFamilyTree.Name = "_tvFamilyTree"; - this._tvFamilyTree.SelectedImageIndex = 0; - this._tvFamilyTree.ShowNodeToolTips = true; - this._tvFamilyTree.Size = new System.Drawing.Size(258, 219); - this._tvFamilyTree.TabIndex = 0; - this._tvFamilyTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FamilyTreeAfterCheck); - this._tvFamilyTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TvFamilyTreeAfterSelect); - // - // _ilPro - // - this._ilPro.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("_ilPro.ImageStream"))); - this._ilPro.TransparentColor = System.Drawing.Color.Transparent; - this._ilPro.Images.SetKeyName(0, "info.ico"); - this._ilPro.Images.SetKeyName(1, "ok.ico"); - this._ilPro.Images.SetKeyName(2, "drop.ico"); - this._ilPro.Images.SetKeyName(3, "plus.ico"); - this._ilPro.Images.SetKeyName(4, "family.ico"); - this._ilPro.Images.SetKeyName(5, "munus.ico"); + this._cbProcSpellEffect.DropDownHeight = 500; + this._cbProcSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbProcSpellEffect.FormattingEnabled = true; + this._cbProcSpellEffect.IntegralHeight = false; + this._cbProcSpellEffect.Location = new System.Drawing.Point(3, 68); + this._cbProcSpellEffect.Name = "_cbProcSpellEffect"; + this._cbProcSpellEffect.Size = new System.Drawing.Size(260, 21); + this._cbProcSpellEffect.TabIndex = 3; + this._cbProcSpellEffect.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // - // splitContainer5 + // _cbProcTarget1 // - this.splitContainer5.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer5.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; - this.splitContainer5.Location = new System.Drawing.Point(0, 0); - this.splitContainer5.Name = "splitContainer5"; + this._cbProcTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this._cbProcTarget1.DropDownHeight = 500; + this._cbProcTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbProcTarget1.FormattingEnabled = true; + this._cbProcTarget1.IntegralHeight = false; + this._cbProcTarget1.Location = new System.Drawing.Point(3, 90); + this._cbProcTarget1.Name = "_cbProcTarget1"; + this._cbProcTarget1.Size = new System.Drawing.Size(122, 21); + this._cbProcTarget1.TabIndex = 3; + this._cbProcTarget1.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // - // splitContainer5.Panel1 + // _cbProcTarget2 // - this.splitContainer5.Panel1.Controls.Add(this._rtbProcSpellInfo); + this._cbProcTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._cbProcTarget2.DropDownHeight = 500; + this._cbProcTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbProcTarget2.FormattingEnabled = true; + this._cbProcTarget2.IntegralHeight = false; + this._cbProcTarget2.Location = new System.Drawing.Point(144, 90); + this._cbProcTarget2.Name = "_cbProcTarget2"; + this._cbProcTarget2.Size = new System.Drawing.Size(119, 21); + this._cbProcTarget2.TabIndex = 3; + this._cbProcTarget2.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); // - // splitContainer5.Panel2 + // _tbProcSeach // - this.splitContainer5.Panel2.BackColor = System.Drawing.Color.Gainsboro; - this.splitContainer5.Panel2.Controls.Add(this._lvProcSpellList); - this.splitContainer5.Panel2.Controls.Add(this._bProcSearch); - this.splitContainer5.Panel2.Controls.Add(this._tbProcSeach); - this.splitContainer5.Panel2.Controls.Add(this._cbProcTarget2); - this.splitContainer5.Panel2.Controls.Add(this._cbProcTarget1); - this.splitContainer5.Panel2.Controls.Add(this._cbProcSpellEffect); - this.splitContainer5.Panel2.Controls.Add(this._cbProcSpellAura); - this.splitContainer5.Panel2.Controls.Add(this._cbProcSpellFamilyName); - this.splitContainer5.Size = new System.Drawing.Size(600, 244); - this.splitContainer5.SplitterDistance = 330; - this.splitContainer5.TabIndex = 0; + this._tbProcSeach.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this._tbProcSeach.Location = new System.Drawing.Point(3, 3); + this._tbProcSeach.Name = "_tbProcSeach"; + this._tbProcSeach.Size = new System.Drawing.Size(207, 20); + this._tbProcSeach.TabIndex = 4; + this._tbProcSeach.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchKeyDown); // - // _rtbProcSpellInfo + // _bProcSearch // - this._rtbProcSpellInfo.BackColor = System.Drawing.SystemColors.MenuBar; - this._rtbProcSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this._rtbProcSpellInfo.Font = new System.Drawing.Font("Arial Unicode MS", 9F); - this._rtbProcSpellInfo.Location = new System.Drawing.Point(0, 0); - this._rtbProcSpellInfo.Name = "_rtbProcSpellInfo"; - this._rtbProcSpellInfo.Size = new System.Drawing.Size(330, 244); - this._rtbProcSpellInfo.TabIndex = 0; - this._rtbProcSpellInfo.Text = ""; + this._bProcSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._bProcSearch.Location = new System.Drawing.Point(215, 3); + this._bProcSearch.Name = "_bProcSearch"; + this._bProcSearch.Size = new System.Drawing.Size(48, 20); + this._bProcSearch.TabIndex = 5; + this._bProcSearch.Text = "Search"; + this._bProcSearch.UseVisualStyleBackColor = true; + this._bProcSearch.Click += new System.EventHandler(this.BProcSearchClick); // // _lvProcSpellList // @@ -967,9 +966,6 @@ private void InitializeComponent() this._lvProcSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._lvProcSpellList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this._chProcID, - this._chProcName}); this._lvProcSpellList.FullRowSelect = true; this._lvProcSpellList.GridLines = true; this._lvProcSpellList.HideSelection = false; @@ -987,451 +983,214 @@ private void InitializeComponent() // // _chProcID // + this._chProcID.DisplayIndex = 0; this._chProcID.Text = "ID"; this._chProcID.Width = 45; // // _chProcName // + this._chProcName.DisplayIndex = 1; this._chProcName.Text = "Name"; this._chProcName.Width = 210; // - // _bProcSearch + // _rtbProcSpellInfo // - this._bProcSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this._bProcSearch.Location = new System.Drawing.Point(215, 3); - this._bProcSearch.Name = "_bProcSearch"; - this._bProcSearch.Size = new System.Drawing.Size(48, 20); - this._bProcSearch.TabIndex = 5; - this._bProcSearch.Text = "Search"; - this._bProcSearch.UseVisualStyleBackColor = true; - this._bProcSearch.Click += new System.EventHandler(this.BProcSearchClick); + this._rtbProcSpellInfo.BackColor = System.Drawing.SystemColors.MenuBar; + this._rtbProcSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; + this._rtbProcSpellInfo.Font = new System.Drawing.Font("Arial Unicode MS", 9F); + this._rtbProcSpellInfo.Location = new System.Drawing.Point(0, 0); + this._rtbProcSpellInfo.Name = "_rtbProcSpellInfo"; + this._rtbProcSpellInfo.Size = new System.Drawing.Size(330, 244); + this._rtbProcSpellInfo.TabIndex = 0; + this._rtbProcSpellInfo.Text = ""; // - // _tbProcSeach + // _tvFamilyTree // - this._tbProcSeach.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._tvFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._tbProcSeach.Location = new System.Drawing.Point(3, 3); - this._tbProcSeach.Name = "_tbProcSeach"; - this._tbProcSeach.Size = new System.Drawing.Size(207, 20); - this._tbProcSeach.TabIndex = 4; - this._tbProcSeach.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchKeyDown); + this._tvFamilyTree.CheckBoxes = true; + this._tvFamilyTree.Location = new System.Drawing.Point(1, 23); + this._tvFamilyTree.Name = "_tvFamilyTree"; + this._tvFamilyTree.ShowNodeToolTips = true; + this._tvFamilyTree.Size = new System.Drawing.Size(258, 219); + this._tvFamilyTree.TabIndex = 0; + this._tvFamilyTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FamilyTreeAfterCheck); + this._tvFamilyTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TvFamilyTreeAfterSelect); // - // _cbProcTarget2 - // - this._cbProcTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this._cbProcTarget2.DropDownHeight = 500; - this._cbProcTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbProcTarget2.FormattingEnabled = true; - this._cbProcTarget2.IntegralHeight = false; - this._cbProcTarget2.Location = new System.Drawing.Point(144, 90); - this._cbProcTarget2.Name = "_cbProcTarget2"; - this._cbProcTarget2.Size = new System.Drawing.Size(119, 21); - this._cbProcTarget2.TabIndex = 3; - this._cbProcTarget2.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // - // _cbProcTarget1 - // - this._cbProcTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this._cbProcTarget1.DropDownHeight = 500; - this._cbProcTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbProcTarget1.FormattingEnabled = true; - this._cbProcTarget1.IntegralHeight = false; - this._cbProcTarget1.Location = new System.Drawing.Point(3, 90); - this._cbProcTarget1.Name = "_cbProcTarget1"; - this._cbProcTarget1.Size = new System.Drawing.Size(122, 21); - this._cbProcTarget1.TabIndex = 3; - this._cbProcTarget1.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // - // _cbProcSpellEffect - // - this._cbProcSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this._cbProcSpellEffect.DropDownHeight = 500; - this._cbProcSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbProcSpellEffect.FormattingEnabled = true; - this._cbProcSpellEffect.IntegralHeight = false; - this._cbProcSpellEffect.Location = new System.Drawing.Point(3, 68); - this._cbProcSpellEffect.Name = "_cbProcSpellEffect"; - this._cbProcSpellEffect.Size = new System.Drawing.Size(260, 21); - this._cbProcSpellEffect.TabIndex = 3; - this._cbProcSpellEffect.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // - // _cbProcSpellAura + // _cbProcSpellFamilyTree // - this._cbProcSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._cbProcSpellFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbProcSpellAura.DropDownHeight = 500; - this._cbProcSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbProcSpellAura.FormattingEnabled = true; - this._cbProcSpellAura.IntegralHeight = false; - this._cbProcSpellAura.Location = new System.Drawing.Point(3, 46); - this._cbProcSpellAura.Name = "_cbProcSpellAura"; - this._cbProcSpellAura.Size = new System.Drawing.Size(260, 21); - this._cbProcSpellAura.TabIndex = 2; - this._cbProcSpellAura.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); + this._cbProcSpellFamilyTree.DropDownHeight = 500; + this._cbProcSpellFamilyTree.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbProcSpellFamilyTree.FormattingEnabled = true; + this._cbProcSpellFamilyTree.IntegralHeight = false; + this._cbProcSpellFamilyTree.Location = new System.Drawing.Point(1, 2); + this._cbProcSpellFamilyTree.Name = "_cbProcSpellFamilyTree"; + this._cbProcSpellFamilyTree.Size = new System.Drawing.Size(258, 21); + this._cbProcSpellFamilyTree.TabIndex = 1; + this._cbProcSpellFamilyTree.SelectedIndexChanged += new System.EventHandler(this.TvFamilyTreeSelectedIndexChanged); // - // _cbProcSpellFamilyName + // _gSpellProcEvent // - this._cbProcSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this._gSpellProcEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._cbProcSpellFamilyName.DropDownHeight = 500; - this._cbProcSpellFamilyName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbProcSpellFamilyName.FormattingEnabled = true; - this._cbProcSpellFamilyName.IntegralHeight = false; - this._cbProcSpellFamilyName.Location = new System.Drawing.Point(3, 24); - this._cbProcSpellFamilyName.Name = "_cbProcSpellFamilyName"; - this._cbProcSpellFamilyName.Size = new System.Drawing.Size(260, 21); - this._cbProcSpellFamilyName.TabIndex = 1; - this._cbProcSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // - // _lvProcAdditionalInfo - // - this._lvProcAdditionalInfo.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this._chID, - this._chName}); - this._lvProcAdditionalInfo.Dock = System.Windows.Forms.DockStyle.Fill; - this._lvProcAdditionalInfo.FullRowSelect = true; - this._lvProcAdditionalInfo.GridLines = true; - this._lvProcAdditionalInfo.Location = new System.Drawing.Point(0, 0); - this._lvProcAdditionalInfo.Name = "_lvProcAdditionalInfo"; - this._lvProcAdditionalInfo.Size = new System.Drawing.Size(864, 64); - this._lvProcAdditionalInfo.SmallImageList = this._ilPro; - this._lvProcAdditionalInfo.TabIndex = 0; - this._lvProcAdditionalInfo.UseCompatibleStateImageBehavior = false; - this._lvProcAdditionalInfo.View = System.Windows.Forms.View.Details; - this._lvProcAdditionalInfo.SelectedIndexChanged += new System.EventHandler(this.LvProcAdditionalInfoSelectedIndexChanged); - // - // _chID - // - this._chID.Text = "Entry"; - this._chID.Width = 100; - // - // _chName - // - this._chName.Text = "Name"; - this._chName.Width = 685; - // - // _tpCompare - // - this._tpCompare.Controls.Add(this._scCompareRoot); - this._tpCompare.Location = new System.Drawing.Point(4, 22); - this._tpCompare.Name = "_tpCompare"; - this._tpCompare.Padding = new System.Windows.Forms.Padding(3); - this._tpCompare.Size = new System.Drawing.Size(864, 557); - this._tpCompare.TabIndex = 4; - this._tpCompare.Text = "Compare Spells"; - this._tpCompare.UseVisualStyleBackColor = true; - // - // _scCompareRoot - // - this._scCompareRoot.Dock = System.Windows.Forms.DockStyle.Fill; - this._scCompareRoot.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; - this._scCompareRoot.Location = new System.Drawing.Point(3, 3); - this._scCompareRoot.Name = "_scCompareRoot"; + this._gSpellProcEvent.BackColor = System.Drawing.Color.WhiteSmoke; + this._gSpellProcEvent.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this._gSpellProcEvent.Location = new System.Drawing.Point(4, 0); + this._gSpellProcEvent.Name = "_gSpellProcEvent"; + this._gSpellProcEvent.Size = new System.Drawing.Size(857, 63); + this._gSpellProcEvent.TabIndex = 8; + this._gSpellProcEvent.TabStop = false; // - // _scCompareRoot.Panel1 + // _tbCooldown // - this._scCompareRoot.Panel1.BackColor = System.Drawing.Color.WhiteSmoke; - this._scCompareRoot.Panel1.Controls.Add(this._bCompareSearch1); - this._scCompareRoot.Panel1.Controls.Add(this.label13); - this._scCompareRoot.Panel1.Controls.Add(this._tbCompareFilterSpell1); - this._scCompareRoot.Panel1.Controls.Add(this._rtbCompareSpell1); + this._tbCooldown.Location = new System.Drawing.Point(285, 38); + this._tbCooldown.MaxLength = 10; + this._tbCooldown.Name = "_tbCooldown"; + this._tbCooldown.Size = new System.Drawing.Size(60, 20); + this._tbCooldown.TabIndex = 7; + this._tbCooldown.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); + this._tbCooldown.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); // - // _scCompareRoot.Panel2 + // label3 // - this._scCompareRoot.Panel2.BackColor = System.Drawing.Color.WhiteSmoke; - this._scCompareRoot.Panel2.Controls.Add(this._bCompareSearch2); - this._scCompareRoot.Panel2.Controls.Add(this.label14); - this._scCompareRoot.Panel2.Controls.Add(this._rtbCompareSpell2); - this._scCompareRoot.Panel2.Controls.Add(this._tbCompareFilterSpell2); - this._scCompareRoot.Size = new System.Drawing.Size(858, 551); - this._scCompareRoot.SplitterDistance = 426; - this._scCompareRoot.TabIndex = 0; + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(225, 41); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(54, 13); + this.label3.TabIndex = 6; // - // _bCompareSearch1 + // _tbChance // - this._bCompareSearch1.Location = new System.Drawing.Point(238, 1); - this._bCompareSearch1.Name = "_bCompareSearch1"; - this._bCompareSearch1.Size = new System.Drawing.Size(51, 23); - this._bCompareSearch1.TabIndex = 3; - this._bCompareSearch1.Text = "Search"; - this._bCompareSearch1.UseVisualStyleBackColor = true; - this._bCompareSearch1.Click += new System.EventHandler(this.CompareSearch1Click); + this._tbChance.Location = new System.Drawing.Point(155, 38); + this._tbChance.MaxLength = 10; + this._tbChance.Name = "_tbChance"; + this._tbChance.Size = new System.Drawing.Size(60, 20); + this._tbChance.TabIndex = 7; + this._tbChance.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); + this._tbChance.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); // - // label13 + // label2 // - this.label13.AutoSize = true; - this.label13.Location = new System.Drawing.Point(5, 6); - this.label13.Name = "label13"; - this.label13.Size = new System.Drawing.Size(61, 13); - this.label13.TabIndex = 2; - this.label13.Text = "ID or Name"; + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(105, 41); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(44, 13); + this.label2.TabIndex = 6; // - // _tbCompareFilterSpell1 + // _tbPPM // - this._tbCompareFilterSpell1.Location = new System.Drawing.Point(86, 3); - this._tbCompareFilterSpell1.Name = "_tbCompareFilterSpell1"; - this._tbCompareFilterSpell1.Size = new System.Drawing.Size(146, 20); - this._tbCompareFilterSpell1.TabIndex = 1; - this._tbCompareFilterSpell1.TextChanged += new System.EventHandler(this.CompareFilterSpellTextChanged); + this._tbPPM.Location = new System.Drawing.Point(39, 38); + this._tbPPM.MaxLength = 10; + this._tbPPM.Name = "_tbPPM"; + this._tbPPM.Size = new System.Drawing.Size(60, 20); + this._tbPPM.TabIndex = 7; + this._tbPPM.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); + this._tbPPM.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); // - // _rtbCompareSpell1 + // label1 // - this._rtbCompareSpell1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this._rtbCompareSpell1.BackColor = System.Drawing.Color.Gainsboro; - this._rtbCompareSpell1.Font = new System.Drawing.Font("Arial Unicode MS", 9F); - this._rtbCompareSpell1.Location = new System.Drawing.Point(0, 29); - this._rtbCompareSpell1.Name = "_rtbCompareSpell1"; - this._rtbCompareSpell1.Size = new System.Drawing.Size(423, 522); - this._rtbCompareSpell1.TabIndex = 0; - this._rtbCompareSpell1.Text = ""; + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(3, 41); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(30, 13); + this.label1.TabIndex = 6; // - // _bCompareSearch2 + // _cbProcFitstSpellFamily // - this._bCompareSearch2.Location = new System.Drawing.Point(243, 1); - this._bCompareSearch2.Name = "_bCompareSearch2"; - this._bCompareSearch2.Size = new System.Drawing.Size(51, 23); - this._bCompareSearch2.TabIndex = 3; - this._bCompareSearch2.Text = "Search"; - this._bCompareSearch2.UseVisualStyleBackColor = true; - this._bCompareSearch2.Click += new System.EventHandler(this.CompareSearch2Click); + this._cbProcFitstSpellFamily.DropDownHeight = 500; + this._cbProcFitstSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbProcFitstSpellFamily.FormattingEnabled = true; + this._cbProcFitstSpellFamily.IntegralHeight = false; + this._cbProcFitstSpellFamily.Location = new System.Drawing.Point(3, 14); + this._cbProcFitstSpellFamily.Name = "_cbProcFitstSpellFamily"; + this._cbProcFitstSpellFamily.Size = new System.Drawing.Size(342, 21); + this._cbProcFitstSpellFamily.TabIndex = 4; + this._cbProcFitstSpellFamily.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); // - // label14 + // _clbSchools // - this.label14.AutoSize = true; - this.label14.Location = new System.Drawing.Point(10, 6); - this.label14.Name = "label14"; - this.label14.Size = new System.Drawing.Size(61, 13); - this.label14.TabIndex = 2; - this.label14.Text = "ID or Name"; + this._clbSchools.CheckOnClick = true; + this._clbSchools.ColumnWidth = 100; + this._clbSchools.Dock = System.Windows.Forms.DockStyle.Right; + this._clbSchools.FormattingEnabled = true; + this._clbSchools.Location = new System.Drawing.Point(391, 16); + this._clbSchools.MultiColumn = true; + this._clbSchools.Name = "_clbSchools"; + this._clbSchools.Size = new System.Drawing.Size(463, 44); + this._clbSchools.TabIndex = 5; + this._clbSchools.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); // - // _rtbCompareSpell2 + // groupBox4 // - this._rtbCompareSpell2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._rtbCompareSpell2.BackColor = System.Drawing.Color.Gainsboro; - this._rtbCompareSpell2.Font = new System.Drawing.Font("Arial Unicode MS", 9F); - this._rtbCompareSpell2.Location = new System.Drawing.Point(3, 29); - this._rtbCompareSpell2.Name = "_rtbCompareSpell2"; - this._rtbCompareSpell2.Size = new System.Drawing.Size(425, 522); - this._rtbCompareSpell2.TabIndex = 0; - this._rtbCompareSpell2.Text = ""; - // - // _tbCompareFilterSpell2 - // - this._tbCompareFilterSpell2.Location = new System.Drawing.Point(91, 3); - this._tbCompareFilterSpell2.Name = "_tbCompareFilterSpell2"; - this._tbCompareFilterSpell2.Size = new System.Drawing.Size(146, 20); - this._tbCompareFilterSpell2.TabIndex = 1; - this._tbCompareFilterSpell2.TextChanged += new System.EventHandler(this.CompareFilterSpellTextChanged); + this.groupBox4.BackColor = System.Drawing.Color.WhiteSmoke; + this.groupBox4.Location = new System.Drawing.Point(3, 60); + this.groupBox4.Name = "groupBox4"; + this.groupBox4.Size = new System.Drawing.Size(858, 75); + this.groupBox4.TabIndex = 9; + this.groupBox4.TabStop = false; // - // _tpSqlData + // _clbProcFlagEx // - this._tpSqlData.Controls.Add(this.groupBox3); - this._tpSqlData.Controls.Add(this.groupBox2); - this._tpSqlData.Location = new System.Drawing.Point(4, 22); - this._tpSqlData.Name = "_tpSqlData"; - this._tpSqlData.Size = new System.Drawing.Size(864, 557); - this._tpSqlData.TabIndex = 3; - this._tpSqlData.Text = "Sql Data"; - this._tpSqlData.UseVisualStyleBackColor = true; + this._clbProcFlagEx.CheckOnClick = true; + this._clbProcFlagEx.ColumnWidth = 120; + this._clbProcFlagEx.Dock = System.Windows.Forms.DockStyle.Fill; + this._clbProcFlagEx.FormattingEnabled = true; + this._clbProcFlagEx.Location = new System.Drawing.Point(3, 16); + this._clbProcFlagEx.MultiColumn = true; + this._clbProcFlagEx.Name = "_clbProcFlagEx"; + this._clbProcFlagEx.Size = new System.Drawing.Size(852, 56); + this._clbProcFlagEx.TabIndex = 3; + this._clbProcFlagEx.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); // - // groupBox3 + // groupBox5 // - this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox3.BackColor = System.Drawing.Color.WhiteSmoke; - this.groupBox3.Controls.Add(this._cbBinaryCompare); - this.groupBox3.Controls.Add(this.label9); - this.groupBox3.Controls.Add(this._tbSqlManual); - this.groupBox3.Controls.Add(this.label8); - this.groupBox3.Controls.Add(this.label12); - this.groupBox3.Controls.Add(this.label11); - this.groupBox3.Controls.Add(this.label10); - this.groupBox3.Controls.Add(this.label7); - this.groupBox3.Controls.Add(this._bSqlProcEx); - this.groupBox3.Controls.Add(this._bSqlProc); - this.groupBox3.Controls.Add(this._bSqlSchool); - this.groupBox3.Controls.Add(this._tbSqlProcEx); - this.groupBox3.Controls.Add(this._tbSqlProc); - this.groupBox3.Controls.Add(this._tbSqlSchool); - this.groupBox3.Controls.Add(this.textBox1); - this.groupBox3.Controls.Add(this._cbSqlSpellFamily); - this.groupBox3.Controls.Add(this._bSelect); - this.groupBox3.Location = new System.Drawing.Point(6, 3); - this.groupBox3.Name = "groupBox3"; - this.groupBox3.Size = new System.Drawing.Size(855, 85); - this.groupBox3.TabIndex = 1; - this.groupBox3.TabStop = false; - this.groupBox3.Text = "Filter"; - // - // _cbBinaryCompare - // - this._cbBinaryCompare.AutoSize = true; - this._cbBinaryCompare.Location = new System.Drawing.Point(752, 55); - this._cbBinaryCompare.Name = "_cbBinaryCompare"; - this._cbBinaryCompare.Size = new System.Drawing.Size(100, 17); - this._cbBinaryCompare.TabIndex = 8; - this._cbBinaryCompare.Text = "Binary Compare"; - this._cbBinaryCompare.UseVisualStyleBackColor = true; - // - // label9 - // - this.label9.AutoSize = true; - this.label9.Location = new System.Drawing.Point(6, 56); - this.label9.Name = "label9"; - this.label9.Size = new System.Drawing.Size(45, 13); - this.label9.TabIndex = 7; - this.label9.Text = "Manual:"; - // - // _tbSqlManual - // - this._tbSqlManual.Location = new System.Drawing.Point(81, 53); - this._tbSqlManual.Name = "_tbSqlManual"; - this._tbSqlManual.Size = new System.Drawing.Size(272, 20); - this._tbSqlManual.TabIndex = 6; - // - // label8 - // - this.label8.AutoSize = true; - this.label8.Location = new System.Drawing.Point(6, 20); - this.label8.Name = "label8"; - this.label8.Size = new System.Drawing.Size(70, 13); - this.label8.TabIndex = 5; - this.label8.Text = "Family Name:"; - // - // label12 - // - this.label12.AutoSize = true; - this.label12.Location = new System.Drawing.Point(571, 56); - this.label12.Name = "label12"; - this.label12.Size = new System.Drawing.Size(47, 13); - this.label12.TabIndex = 5; - this.label12.Text = "Proc Ex:"; - // - // label11 - // - this.label11.AutoSize = true; - this.label11.Location = new System.Drawing.Point(376, 56); - this.label11.Name = "label11"; - this.label11.Size = new System.Drawing.Size(32, 13); - this.label11.TabIndex = 5; - this.label11.Text = "Proc:"; - // - // label10 - // - this.label10.AutoSize = true; - this.label10.Location = new System.Drawing.Point(571, 20); - this.label10.Name = "label10"; - this.label10.Size = new System.Drawing.Size(43, 13); - this.label10.TabIndex = 5; - this.label10.Text = "School:"; - // - // label7 - // - this.label7.AutoSize = true; - this.label7.Location = new System.Drawing.Point(376, 20); - this.label7.Name = "label7"; - this.label7.Size = new System.Drawing.Size(47, 13); - this.label7.TabIndex = 5; - this.label7.Text = "Spell ID:"; - // - // _bSqlProcEx - // - this._bSqlProcEx.Location = new System.Drawing.Point(718, 51); - this._bSqlProcEx.Name = "_bSqlProcEx"; - this._bSqlProcEx.Size = new System.Drawing.Size(28, 23); - this._bSqlProcEx.TabIndex = 4; - this._bSqlProcEx.Text = "..."; - this._bSqlProcEx.UseVisualStyleBackColor = true; - this._bSqlProcEx.Click += new System.EventHandler(this.CalcProcFlagsClick); - // - // _bSqlProc - // - this._bSqlProc.Location = new System.Drawing.Point(535, 51); - this._bSqlProc.Name = "_bSqlProc"; - this._bSqlProc.Size = new System.Drawing.Size(28, 23); - this._bSqlProc.TabIndex = 4; - this._bSqlProc.Text = "..."; - this._bSqlProc.UseVisualStyleBackColor = true; - this._bSqlProc.Click += new System.EventHandler(this.CalcProcFlagsClick); - // - // _bSqlSchool - // - this._bSqlSchool.Location = new System.Drawing.Point(718, 15); - this._bSqlSchool.Name = "_bSqlSchool"; - this._bSqlSchool.Size = new System.Drawing.Size(28, 23); - this._bSqlSchool.TabIndex = 4; - this._bSqlSchool.Text = "..."; - this._bSqlSchool.UseVisualStyleBackColor = true; - this._bSqlSchool.Click += new System.EventHandler(this.CalcProcFlagsClick); - // - // _tbSqlProcEx - // - this._tbSqlProcEx.Location = new System.Drawing.Point(620, 53); - this._tbSqlProcEx.Name = "_tbSqlProcEx"; - this._tbSqlProcEx.Size = new System.Drawing.Size(92, 20); - this._tbSqlProcEx.TabIndex = 3; - // - // _tbSqlProc - // - this._tbSqlProc.Location = new System.Drawing.Point(429, 53); - this._tbSqlProc.Name = "_tbSqlProc"; - this._tbSqlProc.Size = new System.Drawing.Size(100, 20); - this._tbSqlProc.TabIndex = 3; - // - // _tbSqlSchool - // - this._tbSqlSchool.Location = new System.Drawing.Point(620, 17); - this._tbSqlSchool.Name = "_tbSqlSchool"; - this._tbSqlSchool.Size = new System.Drawing.Size(92, 20); - this._tbSqlSchool.TabIndex = 3; - // - // textBox1 - // - this.textBox1.Location = new System.Drawing.Point(429, 17); - this.textBox1.Name = "textBox1"; - this.textBox1.Size = new System.Drawing.Size(100, 20); - this.textBox1.TabIndex = 2; + this.groupBox5.BackColor = System.Drawing.Color.WhiteSmoke; + this.groupBox5.Location = new System.Drawing.Point(3, 128); + this.groupBox5.Name = "groupBox5"; + this.groupBox5.Size = new System.Drawing.Size(858, 115); + this.groupBox5.TabIndex = 10; + this.groupBox5.TabStop = false; // - // _cbSqlSpellFamily + // _clbProcFlags // - this._cbSqlSpellFamily.DropDownHeight = 500; - this._cbSqlSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; - this._cbSqlSpellFamily.FormattingEnabled = true; - this._cbSqlSpellFamily.IntegralHeight = false; - this._cbSqlSpellFamily.Location = new System.Drawing.Point(81, 17); - this._cbSqlSpellFamily.Name = "_cbSqlSpellFamily"; - this._cbSqlSpellFamily.Size = new System.Drawing.Size(272, 21); - this._cbSqlSpellFamily.TabIndex = 1; + this._clbProcFlags.CheckOnClick = true; + this._clbProcFlags.ColumnWidth = 170; + this._clbProcFlags.Dock = System.Windows.Forms.DockStyle.Fill; + this._clbProcFlags.FormattingEnabled = true; + this._clbProcFlags.Location = new System.Drawing.Point(3, 16); + this._clbProcFlags.MultiColumn = true; + this._clbProcFlags.Name = "_clbProcFlags"; + this._clbProcFlags.Size = new System.Drawing.Size(852, 96); + this._clbProcFlags.TabIndex = 0; + this._clbProcFlags.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); // - // _bSelect + // _tpSpellProcInfo // - this._bSelect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); - this._bSelect.Location = new System.Drawing.Point(775, 10); - this._bSelect.Name = "_bSelect"; - this._bSelect.Size = new System.Drawing.Size(75, 23); - this._bSelect.TabIndex = 0; - this._bSelect.Text = "Select"; - this._bSelect.UseVisualStyleBackColor = true; - this._bSelect.Click += new System.EventHandler(this.SelectClick); + this._tpSpellProcInfo.Controls.Add(this.splitContainer2); + this._tpSpellProcInfo.Location = new System.Drawing.Point(4, 22); + this._tpSpellProcInfo.Name = "_tpSpellProcInfo"; + this._tpSpellProcInfo.Size = new System.Drawing.Size(864, 557); + this._tpSpellProcInfo.TabIndex = 2; + this._tpSpellProcInfo.Text = "Spell Proc Event"; + this._tpSpellProcInfo.UseVisualStyleBackColor = true; // // groupBox2 // this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.groupBox2.Controls.Add(this.splitContainer6); this.groupBox2.Location = new System.Drawing.Point(0, 94); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(864, 463); this.groupBox2.TabIndex = 0; this.groupBox2.TabStop = false; - this.groupBox2.Text = "Spell Proc Event (Select item and press Enter or Mouse double click)"; // // splitContainer6 // @@ -1440,35 +1199,46 @@ private void InitializeComponent() this.splitContainer6.Name = "splitContainer6"; this.splitContainer6.Orientation = System.Windows.Forms.Orientation.Horizontal; // - // splitContainer6.Panel1 - // - this.splitContainer6.Panel1.Controls.Add(this._lvDataList); - // // splitContainer6.Panel2 // this.splitContainer6.Panel2.BackColor = System.Drawing.Color.WhiteSmoke; - this.splitContainer6.Panel2.Controls.Add(this._rtbSqlLog); - this.splitContainer6.Panel2.Controls.Add(this._bSqlToBase); - this.splitContainer6.Panel2.Controls.Add(this._bSqlSave); this.splitContainer6.Size = new System.Drawing.Size(858, 444); this.splitContainer6.SplitterDistance = 229; this.splitContainer6.TabIndex = 0; // + // _bSqlSave + // + this._bSqlSave.Location = new System.Drawing.Point(3, 3); + this._bSqlSave.Name = "_bSqlSave"; + this._bSqlSave.Size = new System.Drawing.Size(75, 23); + this._bSqlSave.TabIndex = 1; + this._bSqlSave.Text = "Save"; + this._bSqlSave.UseVisualStyleBackColor = true; + this._bSqlSave.Click += new System.EventHandler(this.SqlSaveClick); + // + // _bSqlToBase + // + this._bSqlToBase.Location = new System.Drawing.Point(84, 3); + this._bSqlToBase.Name = "_bSqlToBase"; + this._bSqlToBase.Size = new System.Drawing.Size(75, 23); + this._bSqlToBase.TabIndex = 2; + this._bSqlToBase.Text = "To DB"; + this._bSqlToBase.UseVisualStyleBackColor = true; + this._bSqlToBase.Click += new System.EventHandler(this.SqlToBaseClick); + // + // _rtbSqlLog + // + this._rtbSqlLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this._rtbSqlLog.Location = new System.Drawing.Point(0, 32); + this._rtbSqlLog.Name = "_rtbSqlLog"; + this._rtbSqlLog.Size = new System.Drawing.Size(858, 182); + this._rtbSqlLog.TabIndex = 3; + this._rtbSqlLog.Text = ""; + // // _lvDataList // - this._lvDataList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { - this.entry, - this.spellname, - this.schoolmask, - this.spellfamilyname, - this.spellfamilymask0, - this.spellfamilymask1, - this.spellfamilymask2, - this.procflag, - this.procEx, - this.ppmRate, - this.customchance, - this.cooldown}); this._lvDataList.Dock = System.Windows.Forms.DockStyle.Fill; this._lvDataList.FullRowSelect = true; this._lvDataList.GridLines = true; @@ -1487,93 +1257,241 @@ private void InitializeComponent() // // entry // + this.entry.DisplayIndex = 0; this.entry.Text = "Entry"; this.entry.Width = 56; // // spellname // + this.spellname.DisplayIndex = 1; this.spellname.Text = "Spell Name"; this.spellname.Width = 300; // // schoolmask // + this.schoolmask.DisplayIndex = 2; this.schoolmask.Text = "School Mask"; this.schoolmask.Width = 78; // // spellfamilyname // + this.spellfamilyname.DisplayIndex = 3; this.spellfamilyname.Text = "Spell Family Name"; this.spellfamilyname.Width = 103; // // spellfamilymask0 // + this.spellfamilymask0.DisplayIndex = 4; this.spellfamilymask0.Text = "Spell Family Mask 0"; this.spellfamilymask0.Width = 110; // // spellfamilymask1 // + this.spellfamilymask1.DisplayIndex = 5; this.spellfamilymask1.Text = "Spell Family Mask 1"; this.spellfamilymask1.Width = 110; // // spellfamilymask2 // + this.spellfamilymask2.DisplayIndex = 6; this.spellfamilymask2.Text = "Spell Family Mask 2"; this.spellfamilymask2.Width = 110; // // procflag // + this.procflag.DisplayIndex = 7; this.procflag.Text = "Proc Flags"; this.procflag.Width = 80; // // procEx // + this.procEx.DisplayIndex = 8; this.procEx.Text = "Proc Ex"; this.procEx.Width = 80; // // ppmRate // + this.ppmRate.DisplayIndex = 9; this.ppmRate.Text = "PPM Rate"; this.ppmRate.Width = 67; // // customchance // + this.customchance.DisplayIndex = 10; this.customchance.Text = "Custom Chance"; this.customchance.Width = 93; // // cooldown // + this.cooldown.DisplayIndex = 11; this.cooldown.Text = "Colldown"; // - // _rtbSqlLog + // groupBox3 // - this._rtbSqlLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this._rtbSqlLog.Location = new System.Drawing.Point(0, 32); - this._rtbSqlLog.Name = "_rtbSqlLog"; - this._rtbSqlLog.Size = new System.Drawing.Size(858, 182); - this._rtbSqlLog.TabIndex = 3; - this._rtbSqlLog.Text = ""; + this.groupBox3.BackColor = System.Drawing.Color.WhiteSmoke; + this.groupBox3.Location = new System.Drawing.Point(6, 3); + this.groupBox3.Name = "groupBox3"; + this.groupBox3.Size = new System.Drawing.Size(855, 85); + this.groupBox3.TabIndex = 1; + this.groupBox3.TabStop = false; // - // _bSqlToBase + // _bSelect // - this._bSqlToBase.Location = new System.Drawing.Point(84, 3); - this._bSqlToBase.Name = "_bSqlToBase"; - this._bSqlToBase.Size = new System.Drawing.Size(75, 23); - this._bSqlToBase.TabIndex = 2; - this._bSqlToBase.Text = "To DB"; - this._bSqlToBase.UseVisualStyleBackColor = true; - this._bSqlToBase.Click += new System.EventHandler(this.SqlToBaseClick); + this._bSelect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); + this._bSelect.Location = new System.Drawing.Point(775, 10); + this._bSelect.Name = "_bSelect"; + this._bSelect.Size = new System.Drawing.Size(75, 23); + this._bSelect.TabIndex = 0; + this._bSelect.Text = "Select"; + this._bSelect.UseVisualStyleBackColor = true; + this._bSelect.Click += new System.EventHandler(this.SelectClick); // - // _bSqlSave + // _cbSqlSpellFamily // - this._bSqlSave.Location = new System.Drawing.Point(3, 3); - this._bSqlSave.Name = "_bSqlSave"; - this._bSqlSave.Size = new System.Drawing.Size(75, 23); - this._bSqlSave.TabIndex = 1; - this._bSqlSave.Text = "Save"; - this._bSqlSave.UseVisualStyleBackColor = true; - this._bSqlSave.Click += new System.EventHandler(this.SqlSaveClick); + this._cbSqlSpellFamily.DropDownHeight = 500; + this._cbSqlSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this._cbSqlSpellFamily.FormattingEnabled = true; + this._cbSqlSpellFamily.IntegralHeight = false; + this._cbSqlSpellFamily.Location = new System.Drawing.Point(81, 17); + this._cbSqlSpellFamily.Name = "_cbSqlSpellFamily"; + this._cbSqlSpellFamily.Size = new System.Drawing.Size(272, 21); + this._cbSqlSpellFamily.TabIndex = 1; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(429, 17); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(100, 20); + this.textBox1.TabIndex = 2; + // + // _tbSqlSchool + // + this._tbSqlSchool.Location = new System.Drawing.Point(620, 17); + this._tbSqlSchool.Name = "_tbSqlSchool"; + this._tbSqlSchool.Size = new System.Drawing.Size(92, 20); + this._tbSqlSchool.TabIndex = 3; + // + // _tbSqlProc + // + this._tbSqlProc.Location = new System.Drawing.Point(429, 53); + this._tbSqlProc.Name = "_tbSqlProc"; + this._tbSqlProc.Size = new System.Drawing.Size(100, 20); + this._tbSqlProc.TabIndex = 3; + // + // _tbSqlProcEx + // + this._tbSqlProcEx.Location = new System.Drawing.Point(620, 53); + this._tbSqlProcEx.Name = "_tbSqlProcEx"; + this._tbSqlProcEx.Size = new System.Drawing.Size(92, 20); + this._tbSqlProcEx.TabIndex = 3; + // + // _bSqlSchool + // + this._bSqlSchool.Location = new System.Drawing.Point(718, 15); + this._bSqlSchool.Name = "_bSqlSchool"; + this._bSqlSchool.Size = new System.Drawing.Size(28, 23); + this._bSqlSchool.TabIndex = 4; + this._bSqlSchool.Text = "..."; + this._bSqlSchool.UseVisualStyleBackColor = true; + this._bSqlSchool.Click += new System.EventHandler(this.CalcProcFlagsClick); + // + // _bSqlProc + // + this._bSqlProc.Location = new System.Drawing.Point(535, 51); + this._bSqlProc.Name = "_bSqlProc"; + this._bSqlProc.Size = new System.Drawing.Size(28, 23); + this._bSqlProc.TabIndex = 4; + this._bSqlProc.Text = "..."; + this._bSqlProc.UseVisualStyleBackColor = true; + this._bSqlProc.Click += new System.EventHandler(this.CalcProcFlagsClick); + // + // _bSqlProcEx + // + this._bSqlProcEx.Location = new System.Drawing.Point(718, 51); + this._bSqlProcEx.Name = "_bSqlProcEx"; + this._bSqlProcEx.Size = new System.Drawing.Size(28, 23); + this._bSqlProcEx.TabIndex = 4; + this._bSqlProcEx.Text = "..."; + this._bSqlProcEx.UseVisualStyleBackColor = true; + this._bSqlProcEx.Click += new System.EventHandler(this.CalcProcFlagsClick); + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(376, 20); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(47, 13); + this.label7.TabIndex = 5; + // + // label10 + // + this.label10.AutoSize = true; + this.label10.Location = new System.Drawing.Point(571, 20); + this.label10.Name = "label10"; + this.label10.Size = new System.Drawing.Size(43, 13); + this.label10.TabIndex = 5; + // + // label11 + // + this.label11.AutoSize = true; + this.label11.Location = new System.Drawing.Point(376, 56); + this.label11.Name = "label11"; + this.label11.Size = new System.Drawing.Size(32, 13); + this.label11.TabIndex = 5; + // + // label12 + // + this.label12.AutoSize = true; + this.label12.Location = new System.Drawing.Point(571, 56); + this.label12.Name = "label12"; + this.label12.Size = new System.Drawing.Size(47, 13); + this.label12.TabIndex = 5; + // + // label8 + // + this.label8.AutoSize = true; + this.label8.Location = new System.Drawing.Point(6, 20); + this.label8.Name = "label8"; + this.label8.Size = new System.Drawing.Size(70, 13); + this.label8.TabIndex = 5; + // + // _tbSqlManual + // + this._tbSqlManual.Location = new System.Drawing.Point(81, 53); + this._tbSqlManual.Name = "_tbSqlManual"; + this._tbSqlManual.Size = new System.Drawing.Size(272, 20); + this._tbSqlManual.TabIndex = 6; + // + // label9 + // + this.label9.AutoSize = true; + this.label9.Location = new System.Drawing.Point(6, 56); + this.label9.Name = "label9"; + this.label9.Size = new System.Drawing.Size(45, 13); + this.label9.TabIndex = 7; + // + // _cbBinaryCompare + // + this._cbBinaryCompare.AutoSize = true; + this._cbBinaryCompare.Location = new System.Drawing.Point(752, 55); + this._cbBinaryCompare.Name = "_cbBinaryCompare"; + this._cbBinaryCompare.Size = new System.Drawing.Size(100, 17); + this._cbBinaryCompare.TabIndex = 8; + this._cbBinaryCompare.Text = "Binary Compare"; + this._cbBinaryCompare.UseVisualStyleBackColor = true; + // + // _tpSqlData + // + this._tpSqlData.Controls.Add(this.groupBox3); + this._tpSqlData.Controls.Add(this.groupBox2); + this._tpSqlData.Location = new System.Drawing.Point(4, 22); + this._tpSqlData.Name = "_tpSqlData"; + this._tpSqlData.Size = new System.Drawing.Size(864, 557); + this._tpSqlData.TabIndex = 3; + this._tpSqlData.Text = "Sql Data"; + this._tpSqlData.UseVisualStyleBackColor = true; // // _cbProcFlag // @@ -1602,61 +1520,51 @@ private void InitializeComponent() this._bWrite.Visible = false; this._bWrite.Click += new System.EventHandler(this.WriteClick); // - // splitContainer7 - // - this.splitContainer7.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer7.Location = new System.Drawing.Point(0, 0); - this.splitContainer7.Name = "splitContainer7"; - // - // splitContainer7.Panel1 - // - this.splitContainer7.Panel1.Controls.Add(this.splitContainer8); - this.splitContainer7.Panel1.Controls.Add(this.richTextBox1); - // - // splitContainer7.Panel2 - // - this.splitContainer7.Panel2.Controls.Add(this.richTextBox2); - this.splitContainer7.Size = new System.Drawing.Size(858, 429); - this.splitContainer7.SplitterDistance = 424; - this.splitContainer7.TabIndex = 0; + // _tsmAbout // - // splitContainer8 + this._tsmAbout.Name = "_tsmAbout"; + this._tsmAbout.Size = new System.Drawing.Size(152, 22); + this._tsmAbout.Text = "About.."; + this._tsmAbout.Click += new System.EventHandler(AboutClick); // - this.splitContainer8.Dock = System.Windows.Forms.DockStyle.Fill; - this.splitContainer8.Location = new System.Drawing.Point(0, 0); - this.splitContainer8.Name = "splitContainer8"; + // _tsmHelp // - // splitContainer8.Panel1 + this._tsmHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this._tsmAbout}); + this._tsmHelp.Name = "_tsmHelp"; + this._tsmHelp.Size = new System.Drawing.Size(44, 20); + this._tsmHelp.Text = "Help"; // - this.splitContainer8.Panel1.Controls.Add(this.textBox2); - this.splitContainer8.Size = new System.Drawing.Size(424, 429); - this.splitContainer8.SplitterDistance = 209; - this.splitContainer8.TabIndex = 0; + // _Connected // - // textBox2 + this._Connected.Name = "_Connected"; + this._Connected.Size = new System.Drawing.Size(152, 22); + this._Connected.Text = "Connected"; + this._Connected.Click += new System.EventHandler(this.ConnectedClick); // - this.textBox2.Location = new System.Drawing.Point(19, 12); - this.textBox2.Name = "textBox2"; - this.textBox2.Size = new System.Drawing.Size(100, 20); - this.textBox2.TabIndex = 0; + // _tsmExit // - // richTextBox1 + this._tsmExit.Name = "_tsmExit"; + this._tsmExit.Size = new System.Drawing.Size(152, 22); + this._tsmExit.Text = "Exit"; + this._tsmExit.Click += new System.EventHandler(ExitClick); // - this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; - this.richTextBox1.Location = new System.Drawing.Point(0, 0); - this.richTextBox1.Name = "richTextBox1"; - this.richTextBox1.Size = new System.Drawing.Size(424, 429); - this.richTextBox1.TabIndex = 0; - this.richTextBox1.Text = ""; + // _tsmFile // - // richTextBox2 + this._tsmFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this._Connected, + this._tsmSettings, + this._tsmExit}); + this._tsmFile.Name = "_tsmFile"; + this._tsmFile.Size = new System.Drawing.Size(37, 20); + this._tsmFile.Text = "File"; // - this.richTextBox2.Dock = System.Windows.Forms.DockStyle.Fill; - this.richTextBox2.Location = new System.Drawing.Point(0, 0); - this.richTextBox2.Name = "richTextBox2"; - this.richTextBox2.Size = new System.Drawing.Size(430, 429); - this.richTextBox2.TabIndex = 0; - this.richTextBox2.Text = ""; + // _tsmSettings + // + this._tsmSettings.Name = "_tsmSettings"; + this._tsmSettings.Size = new System.Drawing.Size(152, 22); + this._tsmSettings.Text = "Setting"; + this._tsmSettings.Click += new System.EventHandler(this.SettingsClick); // // FormMain // @@ -1679,54 +1587,45 @@ private void InitializeComponent() this.statusStrip1.PerformLayout(); this.menuStrip1.ResumeLayout(false); this.menuStrip1.PerformLayout(); - this.tabControl1.ResumeLayout(false); + this.splitContainer7.Panel1.ResumeLayout(false); + this.splitContainer7.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer7)).EndInit(); + this.splitContainer7.ResumeLayout(false); + this.splitContainer8.Panel1.ResumeLayout(false); + this.splitContainer8.Panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer8)).EndInit(); + this.splitContainer8.ResumeLayout(false); + this._tpCompare.ResumeLayout(false); + this._scCompareRoot.Panel1.ResumeLayout(false); + this._scCompareRoot.Panel1.PerformLayout(); + this._scCompareRoot.Panel2.ResumeLayout(false); + this._scCompareRoot.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this._scCompareRoot)).EndInit(); + this._scCompareRoot.ResumeLayout(false); this._tpSpellInfo.ResumeLayout(false); this.splitContainer1.Panel1.ResumeLayout(false); this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); this.splitContainer1.ResumeLayout(false); this.groupBox1.ResumeLayout(false); + this.groupBox7.ResumeLayout(false); + this.groupBox7.PerformLayout(); this._gSpellFilter.ResumeLayout(false); this._gbAdvansedSearch.ResumeLayout(false); this._gbAdvansedSearch.PerformLayout(); - this.groupBox7.ResumeLayout(false); - this.groupBox7.PerformLayout(); - this._tpSpellProcInfo.ResumeLayout(false); - this.splitContainer2.Panel1.ResumeLayout(false); - this.splitContainer2.Panel2.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer2)).EndInit(); this.splitContainer2.ResumeLayout(false); - this.splitContainer3.Panel1.ResumeLayout(false); - this.splitContainer3.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer3)).EndInit(); this.splitContainer3.ResumeLayout(false); - this.groupBox5.ResumeLayout(false); - this.groupBox4.ResumeLayout(false); - this._gSpellProcEvent.ResumeLayout(false); - this._gSpellProcEvent.PerformLayout(); - this.splitContainer4.Panel1.ResumeLayout(false); - this.splitContainer4.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer4)).EndInit(); this.splitContainer4.ResumeLayout(false); - this.splitContainer5.Panel1.ResumeLayout(false); - this.splitContainer5.Panel2.ResumeLayout(false); - this.splitContainer5.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer5)).EndInit(); this.splitContainer5.ResumeLayout(false); - this._tpCompare.ResumeLayout(false); - this._scCompareRoot.Panel1.ResumeLayout(false); - this._scCompareRoot.Panel1.PerformLayout(); - this._scCompareRoot.Panel2.ResumeLayout(false); - this._scCompareRoot.Panel2.PerformLayout(); - this._scCompareRoot.ResumeLayout(false); - this._tpSqlData.ResumeLayout(false); - this.groupBox3.ResumeLayout(false); - this.groupBox3.PerformLayout(); - this.groupBox2.ResumeLayout(false); - this.splitContainer6.Panel1.ResumeLayout(false); - this.splitContainer6.Panel2.ResumeLayout(false); + this._tpSpellProcInfo.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer6)).EndInit(); this.splitContainer6.ResumeLayout(false); - this.splitContainer7.Panel1.ResumeLayout(false); - this.splitContainer7.Panel2.ResumeLayout(false); - this.splitContainer7.ResumeLayout(false); - this.splitContainer8.Panel1.ResumeLayout(false); - this.splitContainer8.Panel1.PerformLayout(); - this.splitContainer8.ResumeLayout(false); + this._tpSqlData.ResumeLayout(false); this.ResumeLayout(false); this.PerformLayout(); @@ -1734,76 +1633,100 @@ private void InitializeComponent() private System.Windows.Forms.StatusStrip statusStrip1; private System.Windows.Forms.MenuStrip menuStrip1; - private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.ToolStripStatusLabel _status; + private System.Windows.Forms.ToolStripStatusLabel _ProcStatus; + private System.Windows.Forms.ToolStripStatusLabel _dbConnect; + private System.Windows.Forms.SplitContainer splitContainer7; + private System.Windows.Forms.RichTextBox richTextBox1; + private System.Windows.Forms.RichTextBox richTextBox2; + private System.Windows.Forms.SplitContainer splitContainer8; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.ImageList _ilPro; + private System.Windows.Forms.TabPage _tpCompare; + private System.Windows.Forms.SplitContainer _scCompareRoot; + private System.Windows.Forms.Button _bCompareSearch1; + private System.Windows.Forms.Label label13; + private System.Windows.Forms.TextBox _tbCompareFilterSpell1; + private System.Windows.Forms.RichTextBox _rtbCompareSpell1; + private System.Windows.Forms.Button _bCompareSearch2; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.RichTextBox _rtbCompareSpell2; + private System.Windows.Forms.TextBox _tbCompareFilterSpell2; private System.Windows.Forms.TabPage _tpSpellInfo; private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.RichTextBox _rtSpellInfo; private System.Windows.Forms.GroupBox groupBox1; - private System.Windows.Forms.Button _bSearch; - private System.Windows.Forms.TextBox _tbSearchId; - private System.Windows.Forms.ComboBox _cbSpellFamilyName; private System.Windows.Forms.ListView _lvSpellList; private System.Windows.Forms.ColumnHeader chSpellID; private System.Windows.Forms.ColumnHeader chSpellName; + private System.Windows.Forms.GroupBox _gSpellFilter; + private System.Windows.Forms.GroupBox _gbAdvansedSearch; + private System.Windows.Forms.ComboBox _cbAdvancedFilter2CompareType; + private System.Windows.Forms.ComboBox _cbAdvancedFilter1CompareType; + private System.Windows.Forms.TextBox _tbAdvancedFilter2Val; + private System.Windows.Forms.TextBox _tbAdvancedFilter1Val; + private System.Windows.Forms.ComboBox _cbAdvancedFilter2; + private System.Windows.Forms.ComboBox _cbAdvancedFilter1; + private System.Windows.Forms.ComboBox _cbTarget2; private System.Windows.Forms.ComboBox _cbTarget1; private System.Windows.Forms.ComboBox _cbSpellEffect; private System.Windows.Forms.ComboBox _cbSpellAura; + private System.Windows.Forms.ComboBox _cbSpellFamilyName; + private System.Windows.Forms.GroupBox groupBox7; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button _bSearch; + private System.Windows.Forms.TextBox _tbSearchAttributes; + private System.Windows.Forms.TextBox _tbSearchIcon; + private System.Windows.Forms.TextBox _tbSearchId; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.ToolStripMenuItem _tsmHelp; + private System.Windows.Forms.ToolStripMenuItem _tsmAbout; private System.Windows.Forms.TabPage _tpSpellProcInfo; + private System.Windows.Forms.SplitContainer splitContainer2; private System.Windows.Forms.TabPage _tpSqlData; + private System.Windows.Forms.GroupBox groupBox3; private System.Windows.Forms.GroupBox groupBox2; - private System.Windows.Forms.SplitContainer splitContainer2; + private System.Windows.Forms.ListView _lvProcAdditionalInfo; + private System.Windows.Forms.ColumnHeader _chID; + private System.Windows.Forms.ColumnHeader _chName; private System.Windows.Forms.SplitContainer splitContainer3; private System.Windows.Forms.SplitContainer splitContainer4; private System.Windows.Forms.SplitContainer splitContainer5; - private System.Windows.Forms.ComboBox _cbProcSpellEffect; - private System.Windows.Forms.ComboBox _cbProcSpellAura; private System.Windows.Forms.ComboBox _cbProcSpellFamilyName; - private System.Windows.Forms.ListView _lvProcSpellList; + private System.Windows.Forms.ComboBox _cbProcSpellAura; + private System.Windows.Forms.ComboBox _cbProcSpellEffect; + private System.Windows.Forms.ComboBox _cbProcTarget1; + private System.Windows.Forms.ComboBox _cbProcTarget2; private System.Windows.Forms.TextBox _tbProcSeach; private System.Windows.Forms.Button _bProcSearch; - private System.Windows.Forms.ListView _lvProcAdditionalInfo; - private System.Windows.Forms.TreeView _tvFamilyTree; - private System.Windows.Forms.ComboBox _cbProcSpellFamilyTree; - private System.Windows.Forms.RichTextBox _rtbProcSpellInfo; - private System.Windows.Forms.ColumnHeader _chID; - private System.Windows.Forms.ColumnHeader _chName; - private System.Windows.Forms.ToolStripStatusLabel _status; - private System.Windows.Forms.ComboBox _cbTarget2; - private System.Windows.Forms.CheckBox _cbProcFlag; - private System.Windows.Forms.CheckedListBox _clbProcFlags; - private System.Windows.Forms.SplitContainer splitContainer6; - private System.Windows.Forms.ListView _lvDataList; - private System.Windows.Forms.ToolStripMenuItem _tsmFile; - private System.Windows.Forms.ToolStripMenuItem _tsmExit; - private System.Windows.Forms.ToolStripMenuItem _tsmHelp; - private System.Windows.Forms.ToolStripMenuItem _tsmAbout; - private System.Windows.Forms.ComboBox _cbProcTarget2; - private System.Windows.Forms.ComboBox _cbProcTarget1; + private System.Windows.Forms.ListView _lvProcSpellList; private System.Windows.Forms.ColumnHeader _chProcID; private System.Windows.Forms.ColumnHeader _chProcName; - private System.Windows.Forms.ToolStripMenuItem _tsmSettings; - private System.Windows.Forms.CheckedListBox _clbProcFlagEx; - private System.Windows.Forms.CheckedListBox _clbSchools; - private System.Windows.Forms.ComboBox _cbProcFitstSpellFamily; - private System.Windows.Forms.ToolStripStatusLabel _ProcStatus; + private System.Windows.Forms.RichTextBox _rtbProcSpellInfo; + private System.Windows.Forms.TreeView _tvFamilyTree; + private System.Windows.Forms.ComboBox _cbProcSpellFamilyTree; + private System.Windows.Forms.GroupBox _gSpellProcEvent; private System.Windows.Forms.TextBox _tbCooldown; private System.Windows.Forms.Label label3; private System.Windows.Forms.TextBox _tbChance; private System.Windows.Forms.Label label2; private System.Windows.Forms.TextBox _tbPPM; private System.Windows.Forms.Label label1; - private System.Windows.Forms.Button _bWrite; - private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.ComboBox _cbProcFitstSpellFamily; + private System.Windows.Forms.CheckedListBox _clbSchools; private System.Windows.Forms.GroupBox groupBox4; - private System.Windows.Forms.GroupBox _gSpellProcEvent; - private System.Windows.Forms.GroupBox groupBox7; - private System.Windows.Forms.GroupBox _gSpellFilter; - private System.Windows.Forms.Label label6; - private System.Windows.Forms.Label label5; - private System.Windows.Forms.Label label4; - private System.Windows.Forms.TextBox _tbSearchAttributes; - private System.Windows.Forms.TextBox _tbSearchIcon; + private System.Windows.Forms.CheckedListBox _clbProcFlagEx; + private System.Windows.Forms.GroupBox groupBox5; + private System.Windows.Forms.CheckedListBox _clbProcFlags; + private System.Windows.Forms.SplitContainer splitContainer6; + private System.Windows.Forms.Button _bSqlSave; + private System.Windows.Forms.Button _bSqlToBase; + private System.Windows.Forms.RichTextBox _rtbSqlLog; + private System.Windows.Forms.ListView _lvDataList; private System.Windows.Forms.ColumnHeader entry; + private System.Windows.Forms.ColumnHeader spellname; private System.Windows.Forms.ColumnHeader schoolmask; private System.Windows.Forms.ColumnHeader spellfamilyname; private System.Windows.Forms.ColumnHeader spellfamilymask0; @@ -1814,52 +1737,28 @@ private void InitializeComponent() private System.Windows.Forms.ColumnHeader ppmRate; private System.Windows.Forms.ColumnHeader customchance; private System.Windows.Forms.ColumnHeader cooldown; - private System.Windows.Forms.GroupBox groupBox3; - private System.Windows.Forms.ColumnHeader spellname; - private System.Windows.Forms.Button _bSqlToBase; - private System.Windows.Forms.Button _bSqlSave; private System.Windows.Forms.Button _bSelect; - private System.Windows.Forms.ToolStripMenuItem _Connected; - private System.Windows.Forms.ToolStripStatusLabel _dbConnect; - private System.Windows.Forms.TextBox textBox1; private System.Windows.Forms.ComboBox _cbSqlSpellFamily; - private System.Windows.Forms.Label label8; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox _tbSqlSchool; + private System.Windows.Forms.TextBox _tbSqlProc; + private System.Windows.Forms.TextBox _tbSqlProcEx; + private System.Windows.Forms.Button _bSqlSchool; + private System.Windows.Forms.Button _bSqlProc; + private System.Windows.Forms.Button _bSqlProcEx; private System.Windows.Forms.Label label7; - private System.Windows.Forms.Label label12; - private System.Windows.Forms.Label label11; private System.Windows.Forms.Label label10; - private System.Windows.Forms.Button _bSqlProcEx; - private System.Windows.Forms.Button _bSqlProc; - private System.Windows.Forms.Button _bSqlSchool; - private System.Windows.Forms.TextBox _tbSqlProcEx; - private System.Windows.Forms.TextBox _tbSqlProc; - private System.Windows.Forms.TextBox _tbSqlSchool; - private System.Windows.Forms.Label label9; + private System.Windows.Forms.Label label11; + private System.Windows.Forms.Label label12; + private System.Windows.Forms.Label label8; private System.Windows.Forms.TextBox _tbSqlManual; + private System.Windows.Forms.Label label9; private System.Windows.Forms.CheckBox _cbBinaryCompare; - private System.Windows.Forms.TabPage _tpCompare; - private System.Windows.Forms.SplitContainer splitContainer7; - private System.Windows.Forms.RichTextBox richTextBox1; - private System.Windows.Forms.RichTextBox richTextBox2; - private System.Windows.Forms.SplitContainer splitContainer8; - private System.Windows.Forms.TextBox textBox2; - private System.Windows.Forms.SplitContainer _scCompareRoot; - private System.Windows.Forms.Label label13; - private System.Windows.Forms.TextBox _tbCompareFilterSpell1; - private System.Windows.Forms.RichTextBox _rtbCompareSpell1; - private System.Windows.Forms.Label label14; - private System.Windows.Forms.RichTextBox _rtbCompareSpell2; - private System.Windows.Forms.TextBox _tbCompareFilterSpell2; - private System.Windows.Forms.Button _bCompareSearch1; - private System.Windows.Forms.Button _bCompareSearch2; - private System.Windows.Forms.GroupBox _gbAdvansedSearch; - private System.Windows.Forms.TextBox _tbAdvancedFilter2Val; - private System.Windows.Forms.TextBox _tbAdvancedFilter1Val; - private System.Windows.Forms.ComboBox _cbAdvancedFilter2; - private System.Windows.Forms.ComboBox _cbAdvancedFilter1; - private System.Windows.Forms.RichTextBox _rtbSqlLog; - private System.Windows.Forms.ImageList _ilPro; - private System.Windows.Forms.ComboBox _cbAdvancedFilter2CompareType; - private System.Windows.Forms.ComboBox _cbAdvancedFilter1CompareType; + private System.Windows.Forms.CheckBox _cbProcFlag; + private System.Windows.Forms.Button _bWrite; + private System.Windows.Forms.ToolStripMenuItem _tsmFile; + private System.Windows.Forms.ToolStripMenuItem _Connected; + private System.Windows.Forms.ToolStripMenuItem _tsmSettings; + private System.Windows.Forms.ToolStripMenuItem _tsmExit; } } \ No newline at end of file diff --git a/SpellWork/Forms/FormMain.cs b/SpellWork/Forms/FormMain.cs index 84cd3f90..07cb80d3 100644 --- a/SpellWork/Forms/FormMain.cs +++ b/SpellWork/Forms/FormMain.cs @@ -7,7 +7,6 @@ using System.Text; using System.Windows.Forms; using SpellWork.Database; -using SpellWork.DBC; using SpellWork.Extensions; using SpellWork.Spell; @@ -43,10 +42,8 @@ public FormMain() _cbSqlSpellFamily.SetEnumValues("SpellFamilyName"); - _status.Text = String.Format("DBC Locale: {0}", DBC.DBC.Locale); - - _cbAdvancedFilter1.SetStructFields(); - _cbAdvancedFilter2.SetStructFields(); + _cbAdvancedFilter1.SetStructFields(); + _cbAdvancedFilter2.SetStructFields(); _cbAdvancedFilter1CompareType.SetEnumValuesDirect(true); _cbAdvancedFilter2CompareType.SetEnumValuesDirect(true); @@ -170,7 +167,7 @@ private void AdvancedSearch() var ic = _tbSearchIcon.Text.ToUInt32(); var at = _tbSearchAttributes.Text.ToUInt32(); - _spellList = (from spell in DBC.DBC.Spell.Values + _spellList = (from spell in DBC.DBC.SpellInfoStore.Values where ((id == 0 || spell.ID == id) && (ic == 0 || spell.SpellIconID == ic) && (at == 0 || (spell.Attributes & at) != 0 || (spell.AttributesEx & at) != 0 || @@ -215,13 +212,13 @@ private void AdvancedFilter() var field1Ct = (CompareType)_cbAdvancedFilter1CompareType.SelectedIndex; var field2Ct = (CompareType)_cbAdvancedFilter2CompareType.SelectedIndex; - _spellList = (from spell in DBC.DBC.Spell.Values + _spellList = (from spell in DBC.DBC.SpellInfoStore.Values where (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) && - (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) && - (!bSpellAura || spell.EffectApplyAuraName.ContainsElement((uint)fSpellAura)) && - (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) && - (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) && + (!bSpellEffect || spell.HasEffect((SpellEffects)fSpellEffect)) && + (!bSpellAura || spell.HasAura((AuraType)fSpellAura)) && + (!bTarget1 || spell.HasTargetA((Targets)fTarget1)) && + (!bTarget2 || spell.HasTargetB((Targets)fTarget2)) && (!use1Val || spell.CreateFilter(field1, advVal1, field1Ct)) && (!use2Val || spell.CreateFilter(field2, advVal2, field2Ct)) select spell).ToList(); @@ -249,7 +246,7 @@ private void CbProcFlagCheckedChanged(object sender, EventArgs e) private void TvFamilyTreeAfterSelect(object sender, TreeViewEventArgs e) { if (e.Node.Level > 0) - SetProcAtribute(DBC.DBC.Spell[e.Node.Name.ToUInt32()]); + SetProcAtribute(DBC.DBC.SpellInfoStore[e.Node.Name.ToUInt32()]); } private void LvProcSpellListSelectedIndexChanged(object sender, EventArgs e) @@ -264,7 +261,7 @@ private void LvProcSpellListSelectedIndexChanged(object sender, EventArgs e) private void LvProcAdditionalInfoSelectedIndexChanged(object sender, EventArgs e) { if (_lvProcAdditionalInfo.SelectedIndices.Count > 0) - SetProcAtribute(DBC.DBC.Spell[_lvProcAdditionalInfo.SelectedItems[0].SubItems[0].Text.ToUInt32()]); + SetProcAtribute(DBC.DBC.SpellInfoStore[_lvProcAdditionalInfo.SelectedItems[0].SubItems[0].Text.ToUInt32()]); } private void ClbSchoolsSelectedIndexChanged(object sender, EventArgs e) @@ -304,7 +301,7 @@ private void TvFamilyTreeSelectedIndexChanged(object sender, EventArgs e) new ProcInfo(_tvFamilyTree, spellfamily); } - private void SetProcAtribute(SpellEntry spell) + private void SetProcAtribute(SpellInfoHelper spell) { new SpellInfo(_rtbProcSpellInfo, spell); @@ -317,7 +314,7 @@ private void SetProcAtribute(SpellEntry spell) _tbCooldown.Text = (spell.RecoveryTime / 1000f).ToString(); } - private void GetProcAttribute(SpellEntry spell) + private void GetProcAttribute(SpellInfoHelper spell) { var spellFamilyFlags = _tvFamilyTree.GetMask(); var statusproc = @@ -334,7 +331,7 @@ private void Search() { var id = _tbProcSeach.Text.ToUInt32(); - _spellProcList = (from spell in DBC.DBC.Spell.Values + _spellProcList = (from spell in DBC.DBC.SpellInfoStore.Values where (id == 0 || spell.ID == id) && (id != 0 || spell.SpellName.ContainsText(_tbProcSeach.Text)) @@ -362,13 +359,13 @@ private void ProcFilter() var bTarget2 = _cbProcTarget2.SelectedIndex != 0; var fTarget2 = _cbProcTarget2.SelectedValue.ToInt32(); - _spellProcList = (from spell in DBC.DBC.Spell.Values + _spellProcList = (from spell in DBC.DBC.SpellInfoStore.Values where (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) && - (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) && - (!bSpellAura || spell.EffectApplyAuraName.Contains((uint)fSpellAura)) && - (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) && - (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) + (!bSpellEffect || spell.HasEffect((SpellEffects)fSpellEffect)) && + (!bSpellAura || spell.HasAura((AuraType)fSpellAura)) && + (!bTarget1 || spell.HasTargetA((Targets)fTarget1)) && + (!bTarget2 || spell.HasTargetB((Targets)fTarget2)) select spell).ToList(); _lvProcSpellList.VirtualListSize = _spellProcList.Count(); @@ -386,21 +383,21 @@ private void FamilyTreeAfterCheck(object sender, TreeViewEventArgs e) var mask = ((TreeView)sender).GetMask(); - var query = from spell in DBC.DBC.Spell.Values + var query = from spell in DBC.DBC.SpellInfoStore.Values where spell.SpellFamilyName == ProcInfo.SpellProc.SpellFamilyName && spell.SpellFamilyFlags.ContainsElement(mask) - join sk in DBC.DBC.SkillLineAbility on spell.ID equals sk.Value.SpellId into temp1 + join sk in DBC.DBC.SkillLineAbility.Values on spell.ID equals sk.SpellId into temp1 from skill in temp1.DefaultIfEmpty() //join skl in DBC.SkillLine on Skill.Value.SkillId equals skl.Value.ID into temp2 //from SkillLine in temp2.DefaultIfEmpty() - orderby skill.Key descending + orderby skill.Id descending select new { SpellID = spell.ID, SpellName = spell.SpellNameRank + " " + spell.Description, - skill.Value.SkillId + skill.SkillId }; foreach (var lvi in @@ -420,7 +417,7 @@ private void CompareFilterSpellTextChanged(object sender, EventArgs e) var spell2 = _tbCompareFilterSpell2.Text.ToUInt32(); if (DBC.DBC.Spell.ContainsKey(spell1) && DBC.DBC.Spell.ContainsKey(spell2)) - new SpellCompare(_rtbCompareSpell1, _rtbCompareSpell2, DBC.DBC.Spell[spell1], DBC.DBC.Spell[spell2]); + new SpellCompare(_rtbCompareSpell1, _rtbCompareSpell2, DBC.DBC.SpellInfoStore[spell1], DBC.DBC.SpellInfoStore[spell2]); } private void CompareSearch1Click(object sender, EventArgs e) @@ -569,7 +566,7 @@ private void WriteClick(object sender, EventArgs e) private void ProcParse(object sender) { var proc = MySqlConnection.SpellProcEvent[((ListView)sender).SelectedIndices[0]]; - var spell = DBC.DBC.Spell[proc.Id]; + var spell = DBC.DBC.SpellInfoStore[proc.Id]; ProcInfo.SpellProc = spell; new SpellInfo(_rtbProcSpellInfo, spell); @@ -594,9 +591,9 @@ private void ProcParse(object sender) #region VIRTUAL MODE - private List _spellList = new List(); + private List _spellList = new List(); - private List _spellProcList = new List(); + private List _spellProcList = new List(); private void LvSpellListRetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { diff --git a/SpellWork/Forms/FormMain.resx b/SpellWork/Forms/FormMain.resx index 66fc0621..912e4b91 100644 --- a/SpellWork/Forms/FormMain.resx +++ b/SpellWork/Forms/FormMain.resx @@ -112,18 +112,18 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + 126, 17 - + 17, 17 - + 236, 17 @@ -131,7 +131,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAY - DQAAAk1TRnQBSQFMAgEBBgEAARwBAAEcAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + DQAAAk1TRnQBSQFMAgEBBgEAASQBAAEkAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -189,10 +189,10 @@ AYACAAH4AR8BgAEBAf8BwAEBAYAB+AEfAcABAwH/AeABgwHBAfgBHwHwAQ8B/wHwAccB4wH4AR8L - + 43 - + AAABAAUAICAAAAEACACoCAAAVgAAADAwAAABACAAqCUAAP4IAAAQEBAAAQAEACgBAACmLgAAEBAAAAEA diff --git a/SpellWork/Forms/FormSearch.cs b/SpellWork/Forms/FormSearch.cs index d5f9026b..3a1bbf32 100644 --- a/SpellWork/Forms/FormSearch.cs +++ b/SpellWork/Forms/FormSearch.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Linq; using System.Windows.Forms; -using SpellWork.DBC; using SpellWork.Extensions; using SpellWork.Spell; @@ -10,7 +9,7 @@ namespace SpellWork.Forms { public partial class FormSearch : Form { - private List _spellList = new List(); + private List _spellList = new List(); public FormSearch() { @@ -23,7 +22,7 @@ public FormSearch() _cbTarget2.SetEnumValues("Target B"); } - public SpellEntry Spell { get; private set; } + public SpellInfoHelper Spell { get; private set; } private void IdNameKeyDown(object sender, KeyEventArgs e) { @@ -35,13 +34,13 @@ private void IdNameKeyDown(object sender, KeyEventArgs e) var ic = _tbIcon.Text.ToUInt32(); var at = _tbAttribute.Text.ToUInt32(); - _spellList = (from spell in DBC.DBC.Spell.Values + _spellList = (from spell in DBC.DBC.SpellInfoStore.Values where ((id == 0 || spell.ID == id) && (ic == 0 || spell.SpellIconID == ic) && (at == 0 || (spell.Attributes & at) != 0 || (spell.AttributesEx & at) != 0 || (spell.AttributesEx2 & at) != 0 || (spell.AttributesEx3 & at) != 0 || (spell.AttributesEx4 & at) != 0 || (spell.AttributesEx5 & at) != 0 || - (spell.AttributesEx6 & at) != 0 || (spell.AttributesEx7 & at) != 0)) && + (spell.AttributesEx6 & at) != 0 || (spell.AttributesEx7 & at) != 0 || (spell.AttributesEx8 & at) != 0)) && (id != 0 || ic != 0 && at != 0) || spell.SpellName.ContainsText(name) select spell).ToList(); @@ -72,13 +71,13 @@ private void SpellFamilySelectedIndexChanged(object sender, EventArgs e) var bTarget2 = _cbTarget2.SelectedIndex != 0; var fTarget2 = _cbTarget2.SelectedValue.ToInt32(); - _spellList = (from spell in DBC.DBC.Spell.Values + _spellList = (from spell in DBC.DBC.SpellInfoStore.Values where (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) && - (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) && - (!bSpellAura || spell.EffectApplyAuraName.ContainsElement((uint)fSpellAura)) && - (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) && - (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) + (!bSpellEffect || spell.HasEffect((SpellEffects)fSpellEffect)) && + (!bSpellAura || spell.HasAura((AuraType)fSpellAura)) && + (!bTarget1 || spell.HasTargetA((Targets)fTarget1)) && + (!bTarget2 || spell.HasTargetB((Targets)fTarget2)) select spell).ToList(); _lvSpellList.VirtualListSize = _spellList.Count(); diff --git a/SpellWork/Loader.cs b/SpellWork/Loader.cs deleted file mode 100644 index ce59e92a..00000000 --- a/SpellWork/Loader.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using SpellWork.DBC; -using SpellWork.Spell; - -namespace SpellWork -{ - class Loader - { - public Loader() - { - DBC.DBC.AreaGroup = DBCReader.ReadDBC(null); - DBC.DBC.AreaTable = DBCReader.ReadDBC(DBC.DBC.AreaStrings); - DBC.DBC.OverrideSpellData = DBCReader.ReadDBC(null); - DBC.DBC.ScreenEffect = DBCReader.ReadDBC(DBC.DBC.ScreenEffectStrings); - DBC.DBC.SkillLine = DBCReader.ReadDBC(DBC.DBC.SkillLineStrings); - DBC.DBC.SkillLineAbility = DBCReader.ReadDBC(null); - DBC.DBC.Spell = DBCReader.ReadDBC(DBC.DBC.SpellStrings); - DBC.DBC.SpellCastTimes = DBCReader.ReadDBC(null); - DBC.DBC.SpellDifficulty = DBCReader.ReadDBC(null); - DBC.DBC.SpellDuration = DBCReader.ReadDBC(null); - DBC.DBC.SpellRadius = DBCReader.ReadDBC(null); - DBC.DBC.SpellRange = DBCReader.ReadDBC(DBC.DBC.SpellRangeStrings); - DBC.DBC.SpellMissile = DBCReader.ReadDBC(null); - DBC.DBC.SpellMissileMotion = DBCReader.ReadDBC(DBC.DBC.SpellMissileMotionStrings); - DBC.DBC.SpellVisual = DBCReader.ReadDBC(null); - - DBC.DBC.Locale = DetectedLocale; - } - - /// Exception. - private static LocalesDBC DetectedLocale - { - get - { - byte locale = 0; - while (DBC.DBC.Spell[DBC.DBC.SpellEntryForDetectLocale].GetName(locale) == String.Empty) - { - ++locale; - - if (locale >= DBC.DBC.MaxDbcLocale) - throw new Exception("Detected unknown locale index " + locale); - } - return (LocalesDBC)locale; - } - } - } -} diff --git a/SpellWork/Program.cs b/SpellWork/Program.cs index 9dbbc235..0bff5fb5 100644 --- a/SpellWork/Program.cs +++ b/SpellWork/Program.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Windows.Forms; using SpellWork.Forms; @@ -17,14 +18,22 @@ static void Main() try { - new Loader(); + DBC.DBC.Load(); Application.Run(new FormMain()); } - catch (Exception ex) + catch (DirectoryNotFoundException dnfe) { - MessageBox.Show(ex.Message, @"SpellWork Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); - MessageBox.Show(ex.ToString()); + MessageBox.Show(dnfe.Message, @"Missing required DBC file!", MessageBoxButtons.OK, MessageBoxIcon.Error); } + catch (ArgumentException ae) + { + MessageBox.Show(ae.Message, @"DBC file has wrong structure!", MessageBoxButtons.OK, MessageBoxIcon.Error); + } + //catch (Exception ex) + //{ + // MessageBox.Show(ex.Message, @"SpellWork Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); + // MessageBox.Show(ex.ToString()); + //} } } } diff --git a/SpellWork/Properties/Resources.Designer.cs b/SpellWork/Properties/Resources.Designer.cs index 4b66567f..ef2b3c00 100644 --- a/SpellWork/Properties/Resources.Designer.cs +++ b/SpellWork/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.1 +// Runtime Version:4.0.30319.269 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -10,8 +10,8 @@ namespace SpellWork.Properties { using System; - - + + /// /// A strongly-typed resource class, for looking up localized strings, etc. /// @@ -23,15 +23,15 @@ namespace SpellWork.Properties { [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { - + private static global::System.Resources.ResourceManager resourceMan; - + private static global::System.Globalization.CultureInfo resourceCulture; - + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] internal Resources() { } - + /// /// Returns the cached ResourceManager instance used by this class. /// @@ -45,7 +45,7 @@ internal Resources() { return resourceMan; } } - + /// /// Overrides the current thread's CurrentUICulture property for all /// resource lookups using this strongly typed resource class. diff --git a/SpellWork/Properties/Settings.Designer.cs b/SpellWork/Properties/Settings.Designer.cs index 54e05be6..b834bc8d 100644 --- a/SpellWork/Properties/Settings.Designer.cs +++ b/SpellWork/Properties/Settings.Designer.cs @@ -1,116 +1,96 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.235 +// Runtime Version:4.0.30319.269 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. // //------------------------------------------------------------------------------ -namespace SpellWork.Properties -{ +namespace SpellWork.Properties { + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")] - public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - + public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { + + public static Settings Default { + get { return defaultInstance; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("localhost")] - public string Host - { - get - { + public string Host { + get { return ((string)(this["Host"])); } - set - { + set { this["Host"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("3306")] - public string PortOrPipe - { - get - { + public string PortOrPipe { + get { return ((string)(this["PortOrPipe"])); } - set - { + set { this["PortOrPipe"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("trinity")] - public string User - { - get - { + public string User { + get { return ((string)(this["User"])); } - set - { + set { this["User"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("trinity")] - public string Pass - { - get - { + public string Pass { + get { return ((string)(this["Pass"])); } - set - { + set { this["Pass"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("world")] - public string WorldDbName - { - get - { + public string WorldDbName { + get { return ((string)(this["WorldDbName"])); } - set - { + set { this["WorldDbName"] = value; } } - + [global::System.Configuration.UserScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Configuration.DefaultSettingValueAttribute("False")] - public bool UseDbConnect - { - get - { + public bool UseDbConnect { + get { return ((bool)(this["UseDbConnect"])); } - set - { + set { this["UseDbConnect"] = value; } } diff --git a/SpellWork/Spell/ProcInfo.cs b/SpellWork/Spell/ProcInfo.cs index f21ca57b..bdfae74e 100644 --- a/SpellWork/Spell/ProcInfo.cs +++ b/SpellWork/Spell/ProcInfo.cs @@ -1,33 +1,32 @@ using System; +using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; -using System.Drawing; -using SpellWork.DBC; using SpellWork.Extensions; namespace SpellWork.Spell { public class ProcInfo { - public static SpellEntry SpellProc { get; set; } + public static SpellInfoHelper SpellProc { get; set; } public static bool Update = true; public ProcInfo(TreeView familyTree, SpellFamilyNames spellfamily) { familyTree.Nodes.Clear(); - var spells = from spell in DBC.DBC.Spell - where spell.Value.SpellFamilyName == (uint)spellfamily - join sk in DBC.DBC.SkillLineAbility on spell.Key equals sk.Value.SpellId into temp1 + var spells = from spell in DBC.DBC.SpellInfoStore.Values + where spell.SpellFamilyName == (uint)spellfamily + join sk in DBC.DBC.SkillLineAbility.Values on spell.ID equals sk.SpellId into temp1 from skill in temp1.DefaultIfEmpty() - join skl in DBC.DBC.SkillLine on skill.Value.SkillId equals skl.Key into temp2 + join skl in DBC.DBC.SkillLine.Values on skill.SkillId equals skl.Id into temp2 from skillLine in temp2.DefaultIfEmpty() select new { spell, - skill.Value.SkillId, - skillLine.Value + skill.SkillId, + skillLine }; for (var i = 0; i < 96; ++i) @@ -51,7 +50,7 @@ from skillLine in temp2.DefaultIfEmpty() foreach (var elem in spells) { - var spell = elem.spell.Value; + var spell = elem.spell; var isSkill = elem.SkillId != 0; var name = new StringBuilder(); @@ -65,11 +64,11 @@ from skillLine in temp2.DefaultIfEmpty() if (isSkill) { - name.AppendFormat("(Skill: ({0}) {1}) ", elem.SkillId, elem.Value.Name); + name.AppendFormat("(Skill: ({0}) {1}) ", elem.SkillId, elem.skillLine.Name); toolTip.AppendLine(); - toolTip.AppendFormatLine("Skill Name: {0}", elem.Value.Name); - toolTip.AppendFormatLine("Description: {0}", elem.Value.Description); + toolTip.AppendFormatLine("Skill Name: {0}", elem.skillLine.Name); + toolTip.AppendFormatLine("Description: {0}", elem.skillLine.Description); } name.AppendFormat("({0})", spell.School.ToString().NormalizeString("MASK_")); diff --git a/SpellWork/Spell/SpellCompare.cs b/SpellWork/Spell/SpellCompare.cs index 6bf801da..44428025 100644 --- a/SpellWork/Spell/SpellCompare.cs +++ b/SpellWork/Spell/SpellCompare.cs @@ -1,6 +1,5 @@ -using System.Windows.Forms; -using System.Drawing; -using SpellWork.DBC; +using System.Drawing; +using System.Windows.Forms; using SpellWork.Extensions; namespace SpellWork.Spell @@ -13,7 +12,7 @@ class SpellCompare /// /// Search terms /// - readonly string[] _words = new[] { "=====" };// todo: more wodrs + readonly string[] _words = new[] { "=====" }; /// /// Compares two spells @@ -22,7 +21,7 @@ class SpellCompare /// RichTextBox 2 in right /// Compare Spell 1 /// Compare Spell 2 - public SpellCompare(RichTextBox rtb1, RichTextBox rtb2, SpellEntry spell1, SpellEntry spell2) + public SpellCompare(RichTextBox rtb1, RichTextBox rtb2, SpellInfoHelper spell1, SpellInfoHelper spell2) { new SpellInfo(rtb1, spell1); new SpellInfo(rtb2, spell2); diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 7caa9348..c67a0ce8 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -3,19 +3,6 @@ namespace SpellWork.Spell { // ReSharper disable InconsistentNaming - public enum LocalesDBC - { - enUS, - koKR, - frFR, - deDE, - zhCN, - zhTW, - esES, - esMX, - ruRU - }; - /// /// /// @@ -242,7 +229,25 @@ public enum SpellEffects SPELL_EFFECT_TALENT_SPEC_SELECT = 162, SPELL_EFFECT_163 = 163, SPELL_EFFECT_REMOVE_AURA = 164, - TOTAL_SPELL_EFFECTS = 165 + SPELL_EFFECT_165 = 165, + SPELL_EFFECT_166 = 166, + SPELL_EFFECT_167 = 167, + SPELL_EFFECT_168 = 168, + SPELL_EFFECT_169 = 169, + SPELL_EFFECT_170 = 170, + SPELL_EFFECT_171 = 171, // Summons gamebject + SPELL_EFFECT_172 = 172, // Aoe ressurection + SPELL_EFFECT_UNLOCK_GUILD_VAULT_TAB = 173, // Guild tab unlocked (guild perk) + SPELL_EFFECT_174 = 174, // + SPELL_EFFECT_175 = 175, // Unused (4.2.2) + SPELL_EFFECT_176 = 176, // Some kind of sanctuary effect (Vanish) + SPELL_EFFECT_177 = 177, + SPELL_EFFECT_178 = 178, + SPELL_EFFECT_179 = 179, + SPELL_EFFECT_180 = 180, + SPELL_EFFECT_181 = 181, + SPELL_EFFECT_182 = 182, + TOTAL_SPELL_EFFECTS = 183 }; /// @@ -567,7 +572,61 @@ public enum AuraType SPELL_AURA_PREVENT_RESSURECTION = 314, SPELL_AURA_UNDERWATER_WALKING = 315, SPELL_AURA_PERIODIC_HASTE = 316, - TOTAL_AURAS = 317 + SPELL_AURA_MOD_SPELL_POWER_PCT = 317, + SPELL_AURA_MASTERY = 318, + SPELL_AURA_319 = 319, // (melee?) attack speed + SPELL_AURA_MOD_RANGED_ATTACK_SPEED = 320, // NYI + SPELL_AURA_321 = 321, + SPELL_AURA_INTERFERE_TARGETTING = 322, // NYI + SPELL_AURA_323 = 323, + SPELL_AURA_324 = 324, // spell critical chance (probably by school mask) + SPELL_AURA_325 = 325, + SPELL_AURA_326 = 326, // phase related + SPELL_AURA_327 = 327, + SPELL_AURA_328 = 328, + SPELL_AURA_MOD_RUNE_REGEN_SPEED = 329, // NYI + SPELL_AURA_CAST_WHILE_WALKING = 330, // NYI + SPELL_AURA_331 = 331, + SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS = 332, // NYI + SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2 = 333, // NYI + SPELL_AURA_334 = 334, + SPELL_AURA_335 = 335, + SPELL_AURA_MOD_FLYING_RESTRICTIONS = 336, // NYI + SPELL_AURA_MOD_VENDOR_ITEMS_PRICES = 337, // NYI + SPELL_AURA_MOD_DURABILITY_LOSS = 338, + SPELL_AURA_INCREASE_SKILL_GAIN_CHANCE = 339, // NYI + SPELL_AURA_340 = 340, + SPELL_AURA_341 = 341, // cooldown decrease + SPELL_AURA_MOD_TIME_BETWEEN_ATTACKS = 342, // (attack speed) NYI + SPELL_AURA_343 = 343, + SPELL_AURA_MOD_AUTOATTACK_DAMAGE = 344, + SPELL_AURA_BYPASS_ARMOR_FOR_CASTER = 345, + SPELL_AURA_PROGRESS_BAR = 346, // NYI + SPELL_AURA_MOD_SPELL_COOLDOWN_BY_HASTE = 347, // NYI + SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT = 348, // NYI + SPELL_AURA_MOD_CURRENCY_GAIN = 349, // NYI + SPELL_AURA_MOD_GATHERING_ITEMS_GAINED_PERCENT = 350, // NYI + SPELL_AURA_351 = 351, + SPELL_AURA_352 = 352, + SPELL_AURA_MOD_CAMOUFLAGE = 353, // NYI + SPELL_AURA_354 = 354, + SPELL_AURA_355 = 355, + SPELL_AURA_356 = 356, + SPELL_AURA_357 = 357, + SPELL_AURA_358 = 358, + SPELL_AURA_359 = 359, + SPELL_AURA_360 = 360, + SPELL_AURA_361 = 361, + SPELL_AURA_362 = 362, + SPELL_AURA_363 = 363, + SPELL_AURA_364 = 364, + SPELL_AURA_365 = 365, + SPELL_AURA_366 = 366, + SPELL_AURA_367 = 367, + SPELL_AURA_368 = 368, + SPELL_AURA_369 = 369, + SPELL_AURA_370 = 370, + TOTAL_AURAS = 371 } /// @@ -686,6 +745,23 @@ public enum Targets TARGET_GAMEOBJECT_CONE = 108, TARGET_109 = 109, TARGET_DEST_UNK_110 = 110, // 1 spell + TARGET_UNK_111 = 111, + TARGET_UNK_112 = 112, + TARGET_UNK_113 = 113, + TARGET_UNK_114 = 114, + TARGET_UNK_115 = 115, + TARGET_UNK_116 = 116, + TARGET_UNK_117 = 117, + TARGET_UNK_118 = 118, + TARGET_UNK_119 = 119, + TARGET_UNK_120 = 120, + TARGET_UNK_121 = 121, + TARGET_UNK_122 = 122, + TARGET_UNK_123 = 123, + TARGET_UNK_124 = 124, + TARGET_UNK_125 = 125, + TARGET_UNK_126 = 126, + TARGET_UNK_127 = 127, TOTAL_SPELL_TARGETS, }; @@ -991,14 +1067,18 @@ public enum SpellCastTargetFlags public enum Powers : uint { - POWER_MANA = 0, - POWER_RAGE = 1, - POWER_FOCUS = 2, - POWER_ENERGY = 3, - POWER_HAPPINESS = 4, - POWER_RUNE = 5, - POWER_RUNIC_POWER = 6, - POWER_HEALTH = 0xFFFFFFFE, // (-2 as signed value) + POWER_MANA = 0, + POWER_RAGE = 1, + POWER_FOCUS = 2, + POWER_ENERGY = 3, + POWER_HAPPINESS = 4, + POWER_RUNE = 5, + POWER_RUNIC_POWER = 6, + POWER_SOUL_SHARDS = 7, + POWER_ECLIPSE = 8, + POWER_HOLY_POWER = 9, + POWER_ALTERNATE_POWER = 10, // Used in some quests + POWER_HEALTH = 0xFFFFFFFE, // (-2 as signed value) }; public enum AuraState @@ -1477,6 +1557,43 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_UNK31 = 0x80000000 // 31 }; + [Flags] + public enum SpellAtributeEx8 : uint + { + SPELL_ATTR8_UNK0 = 0x00000001, // 0 + SPELL_ATTR8_UNK1 = 0x00000002, // 1 + SPELL_ATTR8_UNK2 = 0x00000004, // 2 + SPELL_ATTR8_UNK3 = 0x00000008, // 3 + SPELL_ATTR8_UNK4 = 0x00000010, // 4 + SPELL_ATTR8_UNK5 = 0x00000020, // 5 + SPELL_ATTR8_UNK6 = 0x00000040, // 6 + SPELL_ATTR8_UNK7 = 0x00000080, // 7 + SPELL_ATTR8_UNK8 = 0x00000100, // 8 + SPELL_ATTR8_UNK9 = 0x00000200, // 9 + SPELL_ATTR8_UNK10 = 0x00000400, // 10 + SPELL_ATTR8_UNK11 = 0x00000800, // 11 + SPELL_ATTR8_AURA_SEND_AMOUNT = 0x00001000, // 12 Aura must have flag AFLAG_ANY_EFFECT_AMOUNT_SENT to send amount + SPELL_ATTR8_UNK13 = 0x00002000, // 13 + SPELL_ATTR8_UNK14 = 0x00004000, // 14 + SPELL_ATTR8_UNK15 = 0x00008000, // 15 + SPELL_ATTR8_UNK16 = 0x00010000, // 16 + SPELL_ATTR8_UNK17 = 0x00020000, // 17 + SPELL_ATTR8_UNK18 = 0x00040000, // 18 + SPELL_ATTR8_UNK19 = 0x00080000, // 19 + SPELL_ATTR8_ARMOR_SPECIALIZATION = 0x00100000, // 20 + SPELL_ATTR8_UNK21 = 0x00200000, // 21 + SPELL_ATTR8_UNK22 = 0x00400000, // 22 + SPELL_ATTR8_UNK23 = 0x00800000, // 23 + SPELL_ATTR8_UNK24 = 0x01000000, // 24 + SPELL_ATTR8_UNK25 = 0x02000000, // 25 + SPELL_ATTR8_RAID_MARKER = 0x04000000, // 26 probably spell no need learn to cast + SPELL_ATTR8_UNK27 = 0x08000000, // 27 + SPELL_ATTR8_GUILD_PERKS = 0x10000000, // 28 + SPELL_ATTR8_MASTERY = 0x20000000, // 29 + SPELL_ATTR8_UNK30 = 0x40000000, // 30 + SPELL_ATTR8_UNK31 = 0x80000000 // 31 + }; + [Flags] public enum CombatRating { @@ -1505,6 +1622,7 @@ public enum CombatRating CR_WEAPON_SKILL_RANGED = 1 << 0x15, CR_EXPERTISE = 1 << 0x16, CR_ARMOR_PENETRATION = 1 << 0x17, + CR_MASTERY = 1 << 0x18, }; public enum UnitMods @@ -1522,26 +1640,30 @@ public enum UnitMods UNIT_MOD_HAPPINESS = 10, UNIT_MOD_RUNE = 11, UNIT_MOD_RUNIC_POWER = 12, - UNIT_MOD_ARMOR = 13, // UNIT_MOD_ARMOR..UNIT_MOD_RESISTANCE_ARCANE must be in existed order, it's accessed by index values of SpellSchools enum. - UNIT_MOD_RESISTANCE_HOLY = 14, - UNIT_MOD_RESISTANCE_FIRE = 15, - UNIT_MOD_RESISTANCE_NATURE = 16, - UNIT_MOD_RESISTANCE_FROST = 17, - UNIT_MOD_RESISTANCE_SHADOW = 18, - UNIT_MOD_RESISTANCE_ARCANE = 19, - UNIT_MOD_ATTACK_POWER = 20, - UNIT_MOD_ATTACK_POWER_RANGED = 21, - UNIT_MOD_DAMAGE_MAINHAND = 22, - UNIT_MOD_DAMAGE_OFFHAND = 23, - UNIT_MOD_DAMAGE_RANGED = 24, - UNIT_MOD_END = 25, + UNIT_MOD_SOUL_SHARDS = 13, + UNIT_MOD_ECLIPSE = 14, + UNIT_MOD_HOLY_POWER = 15, + UNIT_MOD_ALTERNATIVE = 16, + UNIT_MOD_ARMOR = 17, // UNIT_MOD_ARMOR..UNIT_MOD_RESISTANCE_ARCANE must be in existed order, it's accessed by index values of SpellSchools enum. + UNIT_MOD_RESISTANCE_HOLY = 18, + UNIT_MOD_RESISTANCE_FIRE = 19, + UNIT_MOD_RESISTANCE_NATURE = 20, + UNIT_MOD_RESISTANCE_FROST = 21, + UNIT_MOD_RESISTANCE_SHADOW = 22, + UNIT_MOD_RESISTANCE_ARCANE = 23, + UNIT_MOD_ATTACK_POWER = 24, + UNIT_MOD_ATTACK_POWER_RANGED = 25, + UNIT_MOD_DAMAGE_MAINHAND = 26, + UNIT_MOD_DAMAGE_OFFHAND = 27, + UNIT_MOD_DAMAGE_RANGED = 28, + UNIT_MOD_END = 29, // synonyms UNIT_MOD_STAT_START = UNIT_MOD_STAT_STRENGTH, UNIT_MOD_STAT_END = UNIT_MOD_STAT_SPIRIT + 1, UNIT_MOD_RESISTANCE_START = UNIT_MOD_ARMOR, UNIT_MOD_RESISTANCE_END = UNIT_MOD_RESISTANCE_ARCANE + 1, UNIT_MOD_POWER_START = UNIT_MOD_MANA, - UNIT_MOD_POWER_END = UNIT_MOD_RUNIC_POWER + 1, + UNIT_MOD_POWER_END = UNIT_MOD_ALTERNATIVE + 1, }; // ReSharper restore InconsistentNaming diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index b7e33834..889b10b0 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -1,8 +1,9 @@ -using System.Drawing; +using System; +using System.Drawing; using System.Linq; using System.Windows.Forms; using SpellWork.Database; -using SpellWork.DBC; +using SpellWork.DBC.Structures; using SpellWork.Extensions; namespace SpellWork.Spell @@ -10,11 +11,11 @@ namespace SpellWork.Spell class SpellInfo { private readonly RichTextBox _rtb; - private SpellEntry _spell; + private SpellInfoHelper _spell; private const string _line = "================================================="; - public SpellInfo(RichTextBox rtb, SpellEntry spell) + public SpellInfo(RichTextBox rtb, SpellInfoHelper spell) { _rtb = rtb; _spell = spell; @@ -50,8 +51,8 @@ private void ViewSpellInfo() _rtb.AppendFormatLine("DamageClass = {0} ({1})", _spell.DmgClass, (SpellDmgClass)_spell.DmgClass); _rtb.AppendFormatLine("PreventionType = {0} ({1})", _spell.PreventionType, (SpellPreventionType)_spell.PreventionType); - if (_spell.Attributes != 0 || _spell.AttributesEx != 0 || _spell.AttributesEx2 != 0 || _spell.AttributesEx3 != 0 - || _spell.AttributesEx4 != 0 || _spell.AttributesEx5 != 0 || _spell.AttributesEx6 != 0 || _spell.AttributesEx7 != 0) + if (_spell.Attributes != 0 || _spell.AttributesEx != 0 || _spell.AttributesEx2 != 0 || _spell.AttributesEx3 != 0 || _spell.AttributesEx4 != 0 + || _spell.AttributesEx5 != 0 || _spell.AttributesEx6 != 0 || _spell.AttributesEx7 != 0 || _spell.AttributesEx8 != 0) _rtb.AppendLine(_line); if (_spell.Attributes != 0) @@ -70,6 +71,8 @@ private void ViewSpellInfo() _rtb.AppendFormatLine("AttributesEx6: 0x{0:X8} ({1})", _spell.AttributesEx6, (SpellAtributeEx6)_spell.AttributesEx6); if (_spell.AttributesEx7 != 0) _rtb.AppendFormatLine("AttributesEx7: 0x{0:X8} ({1})", _spell.AttributesEx7, (SpellAtributeEx7)_spell.AttributesEx7); + if (_spell.AttributesEx8 != 0) + _rtb.AppendFormatLine("AttributesEx7: 0x{0:X8} ({1})", _spell.AttributesEx8, (SpellAtributeEx8)_spell.AttributesEx8); _rtb.AppendLine(_line); @@ -113,7 +116,7 @@ private void ViewSpellInfo() _rtb.AppendFormatLine("Spell Level = {0}, base {1}, max {2}, maxTarget {3}", _spell.SpellLevel, _spell.BaseLevel, _spell.MaxLevel, _spell.MaxTargetLevel); - if (_spell.EquippedItemClass != -1) + if (_spell.EquippedItemClass != 0) { _rtb.AppendFormatLine("EquippedItemClass = {0} ({1})", _spell.EquippedItemClass, (ItemClass)_spell.EquippedItemClass); @@ -167,7 +170,6 @@ private void ViewSpellInfo() (Powers)_spell.PowerType, _spell.ManaCost == 0 ? _spell.ManaCostPercentage + " %" : _spell.ManaCost.ToString()); _rtb.AppendFormatIfNotNull(" + lvl * {0}", _spell.ManaCostPerlevel); _rtb.AppendFormatIfNotNull(" + {0} Per Second", _spell.ManaPerSecond); - _rtb.AppendFormatIfNotNull(" + lvl * {0}", _spell.ManaPerSecondPerLevel); _rtb.AppendLine(); } @@ -243,13 +245,13 @@ private void AppendSpellVisualInfo() _rtb.AppendFormatLine("Missile cast offset: X:{0} Y:{1} Z:{2}", visualData.MissileCastOffsetX, visualData.MissileCastOffsetY, visualData.MissileCastOffsetZ); _rtb.AppendFormatLine("Missile impact offset: X:{0} Y:{1} Z:{2}", visualData.MissileImpactOffsetX, visualData.MissileImpactOffsetY, visualData.MissileImpactOffsetZ); _rtb.AppendFormatLine("MissileEntry ID: {0}", missileEntry.Id); - _rtb.AppendFormatLine("Collision Radius: {0}", missileEntry.collisionRadius); - _rtb.AppendFormatLine("Default Pitch: {0} - {1}", missileEntry.defaultPitchMin, missileEntry.defaultPitchMax); - _rtb.AppendFormatLine("Random Pitch: {0} - {1}", missileEntry.randomizePitchMax, missileEntry.randomizePitchMax); - _rtb.AppendFormatLine("Default Speed: {0} - {1}", missileEntry.defaultSpeedMin, missileEntry.defaultSpeedMax); - _rtb.AppendFormatLine("Randomize Speed: {0} - {1}", missileEntry.randomizeSpeedMin, missileEntry.randomizeSpeedMax); - _rtb.AppendFormatLine("Gravity: {0}", missileEntry.gravity); - _rtb.AppendFormatLine("Maximum duration:", missileEntry.maxDuration); + _rtb.AppendFormatLine("Collision Radius: {0}", missileEntry.CollisionRadius); + _rtb.AppendFormatLine("Default Pitch: {0} - {1}", missileEntry.DefaultPitchMin, missileEntry.DefaultPitchMax); + _rtb.AppendFormatLine("Random Pitch: {0} - {1}", missileEntry.RandomizePitchMax, missileEntry.RandomizePitchMax); + _rtb.AppendFormatLine("Default Speed: {0} - {1}", missileEntry.DefaultSpeedMin, missileEntry.DefaultSpeedMax); + _rtb.AppendFormatLine("Randomize Speed: {0} - {1}", missileEntry.RandomizeSpeedMin, missileEntry.RandomizeSpeedMax); + _rtb.AppendFormatLine("Gravity: {0}", missileEntry.Gravity); + _rtb.AppendFormatLine("Maximum duration:", missileEntry.MaxDuration); _rtb.AppendLine(""); } @@ -265,10 +267,10 @@ private void AppendSpellVisualInfo() private void AppendSkillLine() { - var query = from skillLineAbility in DBC.DBC.SkillLineAbility - join skillLine in DBC.DBC.SkillLine - on skillLineAbility.Value.SkillId equals skillLine.Key - where skillLineAbility.Value.SpellId == _spell.ID + var query = from skillLineAbility in DBC.DBC.SkillLineAbility.Records + join skillLine in DBC.DBC.SkillLine.Records + on skillLineAbility.SkillId equals skillLine.Id + where skillLineAbility.SpellId == _spell.ID select new { skillLineAbility, @@ -278,8 +280,8 @@ on skillLineAbility.Value.SkillId equals skillLine.Key if (query.Count() == 0) return; - var skill = query.First().skillLineAbility.Value; - var line = query.First().skillLine.Value; + var skill = query.First().skillLineAbility; + var line = query.First().skillLine; _rtb.AppendFormatLine("Skill (Id {0}) \"{1}\"", skill.SkillId, line.Name); _rtb.AppendFormat(" ReqSkillValue {0}", skill.ReqSkillValue); @@ -292,68 +294,54 @@ private void AppendSpellEffectInfo() { _rtb.AppendLine(_line); - for (var effectIndex = 0; effectIndex < DBC.DBC.MaxEffectIndex; effectIndex++) + foreach (var effect in _spell.Effects) { _rtb.SetBold(); - if ((SpellEffects)_spell.Effect[effectIndex] == SpellEffects.NO_SPELL_EFFECT) - { - _rtb.AppendFormatLine("Effect {0}: NO EFFECT", effectIndex); - _rtb.AppendLine(); - continue; - } - - _rtb.AppendFormatLine("Effect {0}: Id {1} ({2})", effectIndex, _spell.Effect[effectIndex], (SpellEffects)_spell.Effect[effectIndex]); + _rtb.AppendFormatLine("Effect {0}: Id {1} ({2})", effect.Index, effect.Type, (SpellEffects)effect.Type); _rtb.SetDefaultStyle(); - _rtb.AppendFormat("BasePoints = {0}", _spell.EffectBasePoints[effectIndex] + 1); + _rtb.AppendFormat("BasePoints = {0}", effect.BasePoints); - if (_spell.EffectRealPointsPerLevel[effectIndex] != 0) - _rtb.AppendFormat(" + Level * {0:F}", _spell.EffectRealPointsPerLevel[effectIndex]); + if (effect.RealPointsPerLevel != 0) + _rtb.AppendFormat(" + Level * {0:F}", effect.RealPointsPerLevel); // WTF ? 1 = spell.EffectBaseDice[i] - if (1 < _spell.EffectDieSides[effectIndex]) + if (1 < effect.DieSides) { - if (_spell.EffectRealPointsPerLevel[effectIndex] != 0) + if (effect.RealPointsPerLevel != 0) _rtb.AppendFormat(" to {0} + lvl * {1:F}", - _spell.EffectBasePoints[effectIndex] + 1 + _spell.EffectDieSides[effectIndex], _spell.EffectRealPointsPerLevel[effectIndex]); + effect.BasePoints + effect.DieSides, effect.RealPointsPerLevel); else - _rtb.AppendFormat(" to {0}", _spell.EffectBasePoints[effectIndex] + 1 + _spell.EffectDieSides[effectIndex]); + _rtb.AppendFormat(" to {0}", effect.BasePoints + effect.DieSides); } - _rtb.AppendFormatIfNotNull(" + combo * {0:F}", _spell.EffectPointsPerComboPoint[effectIndex]); + _rtb.AppendFormatIfNotNull(" + combo * {0:F}", effect.PointsPerComboPoint); - if (_spell.DmgMultiplier[effectIndex] != 1.0f) - _rtb.AppendFormat(" x {0:F}", _spell.DmgMultiplier[effectIndex]); + if (effect.DamageMultiplier != 1.0f) + _rtb.AppendFormat(" x {0:F}", effect.DamageMultiplier); - _rtb.AppendFormatIfNotNull(" Multiple = {0:F}", _spell.EffectMultipleValue[effectIndex]); + _rtb.AppendFormatIfNotNull(" Multiple = {0:F}", effect.ValueMultiplier); _rtb.AppendLine(); _rtb.AppendFormatLine("Targets ({0}, {1}) ({2}, {3})", - _spell.EffectImplicitTargetA[effectIndex], _spell.EffectImplicitTargetB[effectIndex], - (Targets)_spell.EffectImplicitTargetA[effectIndex], (Targets)_spell.EffectImplicitTargetB[effectIndex]); - - AuraModTypeName(effectIndex); + effect.ImplicitTargetA, effect.ImplicitTargetB, + (Targets)effect.ImplicitTargetA, (Targets)effect.ImplicitTargetB); - var classMask = new uint[3]; + AuraModTypeName(effect); - switch (effectIndex) - { - case 0: classMask = _spell.EffectSpellClassMaskA; break; - case 1: classMask = _spell.EffectSpellClassMaskB; break; - case 2: classMask = _spell.EffectSpellClassMaskC; break; - } + var classMask = effect.SpellClassMask; if (classMask[0] != 0 || classMask[1] != 0 || classMask[2] != 0) { _rtb.AppendFormatLine("SpellClassMask = {0:X8} {1:X8} {2:X8}", classMask[0], classMask[1], classMask[2]); - var query = from spell in DBC.DBC.Spell.Values + var query = from spell in DBC.DBC.SpellInfoStore.Values where spell.SpellFamilyName == _spell.SpellFamilyName && spell.SpellFamilyFlags.ContainsElement(classMask) - join sk in DBC.DBC.SkillLineAbility on spell.ID equals sk.Value.SpellId into temp + join sk in DBC.DBC.SkillLineAbility.Values on spell.ID equals sk.SpellId into temp from skill in temp.DefaultIfEmpty() select new { SpellID = spell.ID, - SpellName = spell.SpellNameRank, skill.Value.SkillId + SpellName = spell.SpellNameRank, skill.SkillId }; foreach (var row in query) @@ -372,15 +360,16 @@ from skill in temp.DefaultIfEmpty() } } - _rtb.AppendFormatLineIfNotNull("{0}", _spell.GetRadius(effectIndex)); + _rtb.AppendFormatLineIfNotNull("{0}", effect.Radius); + _rtb.AppendFormatLineIfNotNull("{0}", effect.MaxRadius); // append trigger spell - var trigger = _spell.EffectTriggerSpell[effectIndex]; + var trigger = effect.TriggerSpell; if (trigger != 0) { - if (DBC.DBC.Spell.ContainsKey(trigger)) + if (DBC.DBC.SpellInfoStore.ContainsKey(trigger)) { - var triggerSpell = DBC.DBC.Spell[trigger]; + var triggerSpell = DBC.DBC.SpellInfoStore[trigger]; _rtb.SetStyle(Color.Blue, FontStyle.Bold); _rtb.AppendFormatLine(" Trigger spell ({0}) {1}. Chance = {2}", trigger, triggerSpell.SpellNameRank, _spell.ProcChance); _rtb.AppendFormatLineIfNotNull(" Description: {0}", triggerSpell.Description); @@ -395,16 +384,14 @@ from skill in temp.DefaultIfEmpty() } } else - { _rtb.AppendFormatLine("Trigger spell ({0}) Not found, Chance = {1}", trigger, _spell.ProcChance); - } } - _rtb.AppendFormatLineIfNotNull("EffectChainTarget = {0}", _spell.EffectChainTarget[effectIndex]); - _rtb.AppendFormatLineIfNotNull("EffectItemType = {0}", _spell.EffectItemType[effectIndex]); + _rtb.AppendFormatLineIfNotNull("EffectChainTarget = {0}", effect.ChainTarget); + _rtb.AppendFormatLineIfNotNull("EffectItemType = {0}", effect.ItemType); - if((Mechanics)_spell.EffectMechanic[effectIndex] != Mechanics.MECHANIC_NONE) - _rtb.AppendFormatLine("Effect Mechanic = {0} ({1})", _spell.EffectMechanic[effectIndex], (Mechanics)_spell.EffectMechanic[effectIndex]); + if ((Mechanics)effect.Mechanic != Mechanics.MECHANIC_NONE) + _rtb.AppendFormatLine("Effect Mechanic = {0} ({1})", effect.Mechanic, (Mechanics)effect.Mechanic); _rtb.AppendLine(); } @@ -447,22 +434,22 @@ private void AppendSpellAura() // ReSharper enable InvertIf } - private void AuraModTypeName(int index) + private void AuraModTypeName(SpellEffectEntry effect) { - var aura = (AuraType)_spell.EffectApplyAuraName[index]; - var misc = _spell.EffectMiscValue[index]; + var aura = (AuraType)effect.ApplyAuraName; + var misc = effect.MiscValue; - if (_spell.EffectApplyAuraName[index] == 0) + if (effect.ApplyAuraName == 0) { - _rtb.AppendFormatLineIfNotNull("EffectMiscValueA = {0}", _spell.EffectMiscValue[index]); - _rtb.AppendFormatLineIfNotNull("EffectMiscValueB = {0}", _spell.EffectMiscValueB[index]); - _rtb.AppendFormatLineIfNotNull("EffectAmplitude = {0}", _spell.EffectAmplitude[index]); + _rtb.AppendFormatLineIfNotNull("EffectMiscValueA = {0}", effect.MiscValue); + _rtb.AppendFormatLineIfNotNull("EffectMiscValueB = {0}", effect.MiscValueB); + _rtb.AppendFormatLineIfNotNull("EffectAmplitude = {0}", effect.Amplitude); return; } _rtb.AppendFormat("Aura Id {0:D} ({0})", aura); - _rtb.AppendFormat(", value = {0}", _spell.EffectBasePoints[index] + 1); + _rtb.AppendFormat(", value = {0}", effect.BasePoints); _rtb.AppendFormat(", misc = {0} (", misc); switch (aura) @@ -483,8 +470,8 @@ private void AuraModTypeName(int index) break; } - _rtb.AppendFormat("), miscB = {0}", _spell.EffectMiscValueB[index]); - _rtb.AppendFormatLine(", periodic = {0}", _spell.EffectAmplitude[index]); + _rtb.AppendFormat("), miscB = {0}", effect.MiscValueB); + _rtb.AppendFormatLine(", periodic = {0}", effect.Amplitude); switch (aura) { @@ -498,8 +485,8 @@ private void AuraModTypeName(int index) { _rtb.AppendLine(); _rtb.SetStyle(Color.DarkRed, FontStyle.Bold); - _rtb.AppendLine("Overriding Spells:"); var @override = DBC.DBC.OverrideSpellData[(uint)misc]; + _rtb.AppendFormatLine("Overriding Spells{0}:", !String.IsNullOrEmpty(@override.Name) ? String.Format(" ({0}", @override.Name) : String.Empty); for (var i = 0; i < 10; ++i) { if (@override.Spells[i] == 0) @@ -522,6 +509,14 @@ private void AuraModTypeName(int index) } } + private readonly string[] modeNames = new[] + { + "Normal 10", + "Normal 25", + "Heroic 10", + "Heroic 25", + }; + private void AppendDifficultyInfo() { var difficultyId = _spell.SpellDifficultyId; @@ -534,14 +529,6 @@ private void AppendDifficultyInfo() return; } - var modeNames = new[] - { - "Normal 10", - "Normal 25", - "Heroic 10", - "Heroic 25", - }; - _rtb.SetBold(); _rtb.AppendLine("Spell difficulty Ids:"); diff --git a/SpellWork/Spell/SpellInfoHelper.cs b/SpellWork/Spell/SpellInfoHelper.cs new file mode 100644 index 00000000..5d56735c --- /dev/null +++ b/SpellWork/Spell/SpellInfoHelper.cs @@ -0,0 +1,367 @@ +using System; +using System.Linq; +using System.Text; +using SpellWork.DBC.Structures; +using SpellWork.Extensions; + +namespace SpellWork.Spell +{ + public sealed class SpellInfoHelper + { + public uint ID; // 0 m_ID + public uint Category; // 1 m_category + public uint Dispel; // 2 m_dispelType + public uint Mechanic; // 3 m_mechanic + public uint Attributes; // 4 m_attribute + public uint AttributesEx; // 5 m_attributesEx + public uint AttributesEx2; // 6 m_attributesExB + public uint AttributesEx3; // 7 m_attributesExC + public uint AttributesEx4; // 8 m_attributesExD + public uint AttributesEx5; // 9 m_attributesExE + public uint AttributesEx6; // 10 m_attributesExF + public uint AttributesEx7; // 11 3.2.0 (0x20 - totems, 0x4 - paladin auras, etc...) + public uint AttributesEx8; + public uint AttributesEx9; + public uint AttributesEx10; + public ulong Stances; // 12-13 m_shapeshiftMask + public ulong StancesNot; // 14-15 m_shapeshiftExclude + public uint Targets; // 16 m_targets + public uint TargetCreatureType; // 17 m_targetCreatureType + public uint RequiresSpellFocus; // 18 m_requiresSpellFocus + public uint FacingCasterFlags; // 19 m_facingCasterFlags + public uint CasterAuraState; // 20 m_casterAuraState + public uint TargetAuraState; // 21 m_targetAuraState + public uint CasterAuraStateNot; // 22 m_excludeCasterAuraState + public uint TargetAuraStateNot; // 23 m_excludeTargetAuraState + public uint CasterAuraSpell; // 24 m_casterAuraSpell + public uint TargetAuraSpell; // 25 m_targetAuraSpell + public uint ExcludeCasterAuraSpell; // 26 m_excludeCasterAuraSpell + public uint ExcludeTargetAuraSpell; // 27 m_excludeTargetAuraSpell + public uint CastingTimeIndex; // 28 m_castingTimeIndex + public uint RecoveryTime; // 29 m_recoveryTime + public uint CategoryRecoveryTime; // 30 m_categoryRecoveryTime + public uint InterruptFlags; // 31 m_interruptFlags + public uint AuraInterruptFlags; // 32 m_auraInterruptFlags + public uint ChannelInterruptFlags; // 33 m_channelInterruptFlags + public uint ProcFlags; // 34 m_procTypeMask + public uint ProcChance; // 35 m_procChance + public uint ProcCharges; // 36 m_procCharges + public uint MaxLevel; // 37 m_maxLevel + public uint BaseLevel; // 38 m_baseLevel + public uint SpellLevel; // 39 m_spellLevel + public uint DurationIndex; // 40 m_durationIndex + public uint PowerType; // 41 m_powerType + public uint ManaCost; // 42 m_manaCost + public uint ManaCostPerlevel; // 43 m_manaCostPerLevel + public uint ManaPerSecond; // 44 m_manaPerSecond + public uint RangeIndex; // 46 m_rangeIndex + public float Speed; // 47 m_speed + public uint ModalNextSpell; // 48 m_modalNextSpell not used + public uint StackAmount; // 49 m_cumulativeAura + public uint[] Totem; // 50-51 m_totem + public uint[] Reagent; // 52-59 m_reagent + public uint[] ReagentCount; // 60-67 m_reagentCount + public uint EquippedItemClass; // 68 m_equippedItemClass (value) + public uint EquippedItemSubClassMask; // 69 m_equippedItemSubclass (mask) + public uint EquippedItemInventoryTypeMask; // 70 m_equippedItemInvTypes (mask) + public uint[] SpellVisual; // 131-132 m_spellVisualID + public uint SpellIconID; // 133 m_spellIconID + public uint ActiveIconID; // 134 m_activeIconID + public string SpellName; // 136-151 m_name_lang + public string Rank; // 153-168 m_nameSubtext_lang + public string Description; // 170-185 m_description_lang not used + public string ToolTip; // 187-202 m_auraDescription_lang not used + public uint ManaCostPercentage; // 204 m_manaCostPct + public uint StartRecoveryCategory; // 205 m_startRecoveryCategory + public uint StartRecoveryTime; // 206 m_startRecoveryTime + public uint MaxTargetLevel; // 207 m_maxTargetLevel + public uint SpellFamilyName; // 208 m_spellClassSet + public uint[] SpellFamilyFlags; // 209-211 m_spellClassMask + public uint MaxAffectedTargets; // 212 m_maxTargets + public uint DmgClass; // 213 m_defenseType + public uint PreventionType; // 214 m_preventionType + public int StanceBarOrder; // 215 m_stanceBarOrder not used + public uint MinFactionId; // 219 m_minFactionID not used + public uint MinReputation; // 220 m_minReputation not used + public uint RequiredAuraVision; // 221 m_requiredAuraVision not used + public uint[] TotemCategory; // 222-223 m_requiredTotemCategoryID + public int AreaGroupId; // 224 m_requiredAreaGroupId + public uint SchoolMask; // 225 m_schoolMask + public uint RuneCostID; // 226 m_runeCostID + public uint SpellMissileID; // 227 m_spellMissileID not used + public uint PowerDisplayId; // 228 PowerDisplay.dbc, new in 3.1 + public uint SpellDescriptionVariableID; // 232 3.2.0 + public uint SpellDifficultyId; // 233 3.3.0 // 239 3.3.0 + + public string CastTime + { + get + { + if (CastingTimeIndex == 0) + return String.Empty; + + return !DBC.DBC.SpellCastTimes.ContainsKey(CastingTimeIndex) + ? String.Format("CastingTime (Id {0}) = ????", CastingTimeIndex) + : String.Format("CastingTime (Id {0}) = {1:F}", CastingTimeIndex, + DBC.DBC.SpellCastTimes[CastingTimeIndex].CastTime / 1000.0f); + } + } + + public string Duration + { + get { return DBC.DBC.SpellDuration.ContainsKey(DurationIndex) ? DBC.DBC.SpellDuration[DurationIndex].ToString() : String.Empty; } + } + + public SpellEffectEntry[] Effects + { + get { return DBC.DBC.SpellEffect.Records.Where(e => e.SpellId == ID).OrderBy(eff => eff.Index).ToArray(); } + } + + public string ProcInfo + { + get + { + var i = 0; + var sb = new StringBuilder(); + var proc = ProcFlags; + while (proc != 0) + { + if ((proc & 1) != 0) + sb.AppendFormatLine(" {0}", SpellEnums.ProcFlagDesc[i]); + ++i; + proc >>= 1; + } + + return sb.ToString(); + } + } + + public string Range + { + get + { + if (RangeIndex == 0 || !DBC.DBC.SpellRange.ContainsKey(RangeIndex)) + return String.Empty; + + var range = DBC.DBC.SpellRange[RangeIndex]; + var sb = new StringBuilder(); + sb.AppendFormatLine("SpellRange: (Id {0}) \"{1}\":", range.Id, range.Name); + sb.AppendFormatLine(" MinRangeNegative = {0}, MinRangePositive = {1}", range.MinRangeNegative, range.MinRangePositive); + sb.AppendFormatLine(" MaxRangeNegative = {0}, MaxRangePositive = {1}", range.MaxRangeNegative, range.MaxRangePositive); + + return sb.ToString(); + } + } + + public SpellSchoolMask School + { + get { return (SpellSchoolMask)SchoolMask; } + } + + public string SpellNameRank + { + get { return String.IsNullOrEmpty(Rank) ? SpellName : String.Format("{0} ({1})", SpellName, Rank); } + } + + public SpellInfoHelper(SpellEntry dbcData) + { + ID = dbcData.Id; + Attributes = dbcData.Attributes; + AttributesEx = dbcData.AttributesEx; + AttributesEx2 = dbcData.AttributesEx2; + AttributesEx3 = dbcData.AttributesEx3; + AttributesEx4 = dbcData.AttributesEx4; + AttributesEx5 = dbcData.AttributesEx5; + AttributesEx6 = dbcData.AttributesEx6; + AttributesEx7 = dbcData.AttributesEx7; + AttributesEx8 = dbcData.AttributesEx8; + CastingTimeIndex = dbcData.CastingTimeIndex; + DurationIndex = dbcData.DurationIndex; + PowerType = dbcData.PowerType; + RangeIndex = dbcData.RangeIndex; + Speed = dbcData.Speed; + SpellVisual = (uint[])dbcData.SpellVisual.Clone(); + SpellIconID = dbcData.SpellIconID; + ActiveIconID = dbcData.ActiveIconID; + SpellName = dbcData.SpellName; + Rank = dbcData.Rank; + Description = dbcData.Description; + ToolTip = dbcData.ToolTip; + SchoolMask = dbcData.SchoolMask; + RuneCostID = dbcData.RuneCostID; + SpellMissileID = dbcData.SpellMissileID; + + // SpellCategories.dbc + var cat = dbcData.Category; + if (cat != null) + { + Category = cat.Category; + Dispel = cat.Dispel; + Mechanic = cat.Mechanic; + StartRecoveryCategory = cat.StartRecoveryCategory; + DmgClass = cat.DmgClass; + PreventionType = cat.PreventionType; + } + + // SpellShapeshift.dbc + var shapeshift = dbcData.Shapeshift; + if (shapeshift != null) + { + Stances = shapeshift.Stances; + StancesNot = shapeshift.StancesNot; + StanceBarOrder = shapeshift.StanceBarOrder; + } + + // SpellTargetRestrictions.dbc + var targetRestrictions = dbcData.TargetRestrictions; + if (targetRestrictions != null) + { + Targets = targetRestrictions.Targets; + TargetCreatureType = targetRestrictions.TargetCreatureType; + MaxAffectedTargets = targetRestrictions.MaxAffectedTargets; + MaxTargetLevel = targetRestrictions.MaxTargetLevel; + } + + // SpellCastingRequirements.dbc + var castingRequirements = dbcData.CastingRequirements; + if (castingRequirements != null) + { + RequiresSpellFocus = castingRequirements.RequiresSpellFocus; + FacingCasterFlags = castingRequirements.FacingCasterFlags; + MinFactionId = castingRequirements.MinFactionId; + MinReputation = castingRequirements.MinReputation; + RequiredAuraVision = castingRequirements.RequiredAuraVision; + AreaGroupId = castingRequirements.AreaGroupId; + } + + // SpellAuraRestrictions.dbc + var auraRestrictions = dbcData.AuraRestrictions; + if (auraRestrictions != null) + { + CasterAuraState = auraRestrictions.CasterAuraState; + TargetAuraState = auraRestrictions.TargetAuraState; + CasterAuraStateNot = auraRestrictions.CasterAuraStateNot; + TargetAuraStateNot = auraRestrictions.TargetAuraStateNot; + CasterAuraSpell = auraRestrictions.CasterAuraSpell; + TargetAuraSpell = auraRestrictions.TargetAuraSpell; + ExcludeCasterAuraSpell = auraRestrictions.ExcludeCasterAuraSpell; + ExcludeTargetAuraSpell = auraRestrictions.ExcludeTargetAuraSpell; + } + + // SpellCooldowns.dbc + var cooldowns = dbcData.Cooldowns; + if (cooldowns != null) + { + RecoveryTime = cooldowns.RecoveryTime; + CategoryRecoveryTime = cooldowns.CategoryRecoveryTime; + StartRecoveryTime = cooldowns.StartRecoveryTime; + } + + // SpellInterrupts.dbc + var interrupts = dbcData.Interrupts; + if (interrupts != null) + { + InterruptFlags = interrupts.InterruptFlags; + AuraInterruptFlags = interrupts.AuraInterruptFlags; + ChannelInterruptFlags = interrupts.ChannelInterruptFlags; + } + + // SpellAuraOptions.dbc + var options = dbcData.AuraOptions; + if (options != null) + { + ProcFlags = options.ProcFlags; + ProcChance = options.ProcChance; + ProcCharges = options.ProcCharges; + StackAmount = options.StackAmount; + } + + // SpellLevels.dbc + var levels = dbcData.Levels; + if (levels != null) + { + MaxLevel = levels.MaxLevel; + BaseLevel = levels.BaseLevel; + SpellLevel = levels.SpellLevel; + } + + // SpellPower.dbc + var power = dbcData.Power; + if (power != null) + { + ManaCost = power.ManaCost; + ManaCostPerlevel = power.ManaCostPerlevel; + ManaPerSecond = power.ManaPerSecond; + ManaCostPercentage = power.ManaCostPercentage; + PowerDisplayId = power.PowerDisplayId; + } + + // SpellClassOptions.dbc + var classOptions = dbcData.ClassOptions; + if (classOptions != null) + { + ModalNextSpell = classOptions.ModalNextSpell; + Description = String.IsNullOrEmpty(Description) ? classOptions.Description : Description; + SpellFamilyName = classOptions.SpellFamilyName; + SpellFamilyFlags = (uint[])classOptions.SpellFamilyFlags.Clone(); + } + else + SpellFamilyFlags = new uint[3]; + + // SpellTotems.dbc + var totems = dbcData.Totems; + if (totems != null) + { + Totem = (uint[])totems.Totem.Clone(); + TotemCategory = (uint[])totems.TotemCategory.Clone(); + } + else + { + Totem = new uint[2]; + TotemCategory = new uint[2]; + } + + // SpellReagents.dbc + var reagents = dbcData.Reagents; + if (reagents != null) + { + Reagent = (uint[])reagents.ItemId.Clone(); + ReagentCount = (uint[])reagents.Count.Clone(); + } + else + { + Reagent = new uint[8]; + ReagentCount = new uint[8]; + } + + // SpellEquippedItems.dbc + var equippedItems = dbcData.EquippedItems; + if (equippedItems != null) + { + EquippedItemClass = equippedItems.EquippedItemClass; + EquippedItemSubClassMask = equippedItems.EquippedItemSubClassMask; + EquippedItemInventoryTypeMask = equippedItems.EquippedItemInventoryTypeMask; + } + } + + public bool HasEffect(SpellEffects effect) + { + return Effects.Where(eff => eff.Type == (uint)effect).Count() > 0; + } + + public bool HasAura(AuraType aura) + { + return Effects.Where(eff => eff.ApplyAuraName == (uint)aura).Count() > 0; + } + + public bool HasTargetA(Targets target) + { + return Effects.Where(eff => eff.ImplicitTargetA == (uint)target).Count() > 0; + } + + public bool HasTargetB(Targets target) + { + return Effects.Where(eff => eff.ImplicitTargetB == (uint)target).Count() > 0; + } + } +} diff --git a/SpellWork/SpellWork.csproj b/SpellWork/SpellWork.csproj index 139d0c5a..5aa894ad 100644 --- a/SpellWork/SpellWork.csproj +++ b/SpellWork/SpellWork.csproj @@ -10,7 +10,7 @@ Properties SpellWork SpellWork - v3.5 + v4.0 512 New Icon.ico false @@ -33,6 +33,7 @@ 1.0.0.%2a false true + true @@ -58,6 +59,9 @@ + + .\DBFilesClient.NET.dll + False libs\MySql.Data.dll @@ -79,6 +83,42 @@ + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -88,7 +128,6 @@ FormAboutBox.cs - Form @@ -101,20 +140,17 @@ FormSearch.cs - - - - - - Form - + FormSettings.cs + + + + - @@ -125,6 +161,7 @@ + FormAboutBox.cs @@ -138,14 +175,14 @@ FormMain.cs Designer + + FormSettings.cs + ResXFileCodeGenerator Resources.Designer.cs Designer - - FormSettings.cs - True Resources.resx @@ -199,6 +236,7 @@ true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index fe343e3a..da55b8fa 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -29,7 +29,7 @@ private void ViewSpellInfo() { _rtb.Clear(); _rtb.SetBold(); - _rtb.AppendFormatLine("ID - {0} {1}", _spell.ID, _spell.SpellNameRank); + _rtb.AppendFormatLine("ID - {0} {1}{2}", _spell.ID, _spell.SpellNameRank, _spell.ScalingText); _rtb.SetDefaultStyle(); _rtb.AppendFormatLine(_line); @@ -302,25 +302,48 @@ private void AppendSpellEffectInfo() _rtb.SetBold(); _rtb.AppendFormatLine("Effect {0}: Id {1} ({2})", effect.Index, effect.Type, (SpellEffects)effect.Type); _rtb.SetDefaultStyle(); - _rtb.AppendFormat("BasePoints = {0}", effect.BasePoints); - if (effect.RealPointsPerLevel != 0) - _rtb.AppendFormat(" + Level * {0:F}", effect.RealPointsPerLevel); - - // WTF ? 1 = spell.EffectBaseDice[i] - if (1 < effect.DieSides) + if (_spell.Scaling != null && _spell.Scaling.PlayerClass != 0) { - if (effect.RealPointsPerLevel != 0) - _rtb.AppendFormat(" to {0} + lvl * {1:F}", - effect.BasePoints + effect.DieSides, effect.RealPointsPerLevel); + var gtEntry = (uint)((_spell.Scaling.PlayerClass != -1 ? _spell.Scaling.PlayerClass - 1 : 12) * 100) + DBC.DBC.SelectedLevel - 1; + var gtMultiplier = DBC.DBC.gtSpellScaling[gtEntry].Multiplier; + + if (effect.RandomPointsScalingMultiplier != 0.0f) + { + var avg = effect.ScalingMultiplier * gtMultiplier; + var delta = effect.RandomPointsScalingMultiplier * effect.ScalingMultiplier * gtMultiplier * 0.5; + _rtb.AppendFormat("BasePoints = {0:F} to {1:F}", avg - delta, avg + delta); + } else - _rtb.AppendFormat(" to {0}", effect.BasePoints + effect.DieSides); + _rtb.AppendFormat("AveragePoints = {0:F}", effect.ScalingMultiplier * gtMultiplier); + + _rtb.AppendFormatIfNotNull(" + combo * {0:F}", effect.ComboPointsScalingMultiplier * gtMultiplier); + + if (effect.DamageMultiplier != 1.0f) + _rtb.AppendFormat(" x {0:F}", effect.DamageMultiplier); } + else + { + _rtb.AppendFormat("BasePoints = {0}", effect.BasePoints + ((effect.DieSides == 0) ? 0 : 1)); - _rtb.AppendFormatIfNotNull(" + combo * {0:F}", effect.PointsPerComboPoint); + if (effect.RealPointsPerLevel != 0) + _rtb.AppendFormat(" + Level * {0:F}", effect.RealPointsPerLevel); + + if (effect.DieSides > 1) + { + if (effect.RealPointsPerLevel != 0) + _rtb.AppendFormat(" to {0} + lvl * {1:F}", + effect.BasePoints + effect.DieSides, effect.RealPointsPerLevel); + else + _rtb.AppendFormat(" to {0}", effect.BasePoints + effect.DieSides); + } + + _rtb.AppendFormatIfNotNull(" + combo * {0:F}", effect.PointsPerComboPoint); + + if (effect.DamageMultiplier != 1.0f) + _rtb.AppendFormat(" x {0:F}", effect.DamageMultiplier); + } - if (effect.DamageMultiplier != 1.0f) - _rtb.AppendFormat(" x {0:F}", effect.DamageMultiplier); _rtb.AppendFormatIfNotNull(" Multiple = {0:F}", effect.ValueMultiplier); _rtb.AppendLine(); diff --git a/SpellWork/Spell/SpellInfoHelper.cs b/SpellWork/Spell/SpellInfoHelper.cs index 084a108e..567bf9e5 100644 --- a/SpellWork/Spell/SpellInfoHelper.cs +++ b/SpellWork/Spell/SpellInfoHelper.cs @@ -93,6 +93,7 @@ public sealed class SpellInfoHelper public uint PowerDisplayId; // 228 PowerDisplay.dbc, new in 3.1 public uint SpellDescriptionVariableID; // 232 3.2.0 public uint SpellDifficultyId; // 233 3.3.0 // 239 3.3.0 + public SpellScalingEntry Scaling; public string CastTime { @@ -159,6 +160,8 @@ public string SpellNameRank get { return String.IsNullOrEmpty(Rank) ? SpellName : String.Format("{0} ({1})", SpellName, Rank); } } + public string ScalingText { get { return Scaling != null ? String.Format(" (Level {0})", DBC.DBC.SelectedLevel) : String.Empty; } } + public SpellInfoHelper(SpellEntry dbcData) { ID = dbcData.Id; @@ -339,6 +342,7 @@ public SpellInfoHelper(SpellEntry dbcData) EquippedItemInventoryTypeMask = equippedItems.EquippedItemInventoryTypeMask; } + Scaling = dbcData.Scaling; Effects = new SpellEffectEntry[DBC.DBC.MaxEffectIndex]; } diff --git a/SpellWork/SpellWork.csproj b/SpellWork/SpellWork.csproj index 999812be..c073a7b8 100644 --- a/SpellWork/SpellWork.csproj +++ b/SpellWork/SpellWork.csproj @@ -90,6 +90,7 @@ + @@ -147,6 +148,12 @@ FormSettings.cs + + Form + + + FormSpellScaling.cs + @@ -179,6 +186,9 @@ FormSettings.cs + + FormSpellScaling.cs + ResXFileCodeGenerator Resources.Designer.cs From 234cb74c870ebfe64bcc3978228c65a1917414c9 Mon Sep 17 00:00:00 2001 From: Shauren Date: Wed, 15 Aug 2012 23:31:58 +0200 Subject: [PATCH 30/58] Implemented cast time level scaling --- SpellWork/Spell/SpellInfoHelper.cs | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/SpellWork/Spell/SpellInfoHelper.cs b/SpellWork/Spell/SpellInfoHelper.cs index 567bf9e5..07aadcb0 100644 --- a/SpellWork/Spell/SpellInfoHelper.cs +++ b/SpellWork/Spell/SpellInfoHelper.cs @@ -99,12 +99,25 @@ public string CastTime { get { + if (Scaling != null) + { + if (Scaling.MaxCastTime > 0) + { + if (Scaling.MaxCastTimeLevel > DBC.DBC.SelectedLevel) + return String.Format("Cast time = {0:F}", (Scaling.MinCastTime + (DBC.DBC.SelectedLevel - 1) * (Scaling.MaxCastTime - Scaling.MinCastTime) / (Scaling.MaxCastTimeLevel - 1)) / 1000.0f); + + return String.Format("Cast time = {0:F}", Scaling.MaxCastTime / 1000.0f); + } + + return String.Empty; + } + if (CastingTimeIndex == 0) return String.Empty; return !DBC.DBC.SpellCastTimes.ContainsKey(CastingTimeIndex) - ? String.Format("CastingTime (Id {0}) = ????", CastingTimeIndex) - : String.Format("CastingTime (Id {0}) = {1:F}", CastingTimeIndex, + ? String.Format("Cast time (Id {0}) = ????", CastingTimeIndex) + : String.Format("Cast time (Id {0}) = {1:F}", CastingTimeIndex, DBC.DBC.SpellCastTimes[CastingTimeIndex].CastTime / 1000.0f); } } From 249945e97a68fc20476ae81c0f4e4627f2705476 Mon Sep 17 00:00:00 2001 From: Nay Date: Wed, 15 Aug 2012 23:24:16 +0100 Subject: [PATCH 31/58] Icon cataclysm'ed --- SpellWork/New Icon.ico | Bin 14366 -> 15086 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/SpellWork/New Icon.ico b/SpellWork/New Icon.ico index 7ef1f9297b08f2445ced6687370bd8f6ef20227b..75d75c4af46b082b0668b90a685cf3ee3142f91c 100644 GIT binary patch literal 15086 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 literal 14366 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 Date: Fri, 17 Aug 2012 20:04:50 +0200 Subject: [PATCH 32/58] Fixed scaling for some spells --- SpellWork/Spell/SpellInfo.cs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index da55b8fa..31a8a575 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -303,10 +303,14 @@ private void AppendSpellEffectInfo() _rtb.AppendFormatLine("Effect {0}: Id {1} ({2})", effect.Index, effect.Type, (SpellEffects)effect.Type); _rtb.SetDefaultStyle(); - if (_spell.Scaling != null && _spell.Scaling.PlayerClass != 0) + if (effect.ScalingMultiplier != 0.0f && _spell.Scaling != null && _spell.Scaling.PlayerClass != 0) { - var gtEntry = (uint)((_spell.Scaling.PlayerClass != -1 ? _spell.Scaling.PlayerClass - 1 : 12) * 100) + DBC.DBC.SelectedLevel - 1; + var gtEntry = (uint)((_spell.Scaling.PlayerClass != -1 ? _spell.Scaling.PlayerClass - 1 : 11) * 100) + DBC.DBC.SelectedLevel - 1; var gtMultiplier = DBC.DBC.gtSpellScaling[gtEntry].Multiplier; + if (_spell.Scaling.MaxCastTime > 0 && _spell.Scaling.MaxCastTimeLevel > DBC.DBC.SelectedLevel) + gtMultiplier *= (float)(_spell.Scaling.MinCastTime + (DBC.DBC.SelectedLevel - 1) * (_spell.Scaling.MaxCastTime - _spell.Scaling.MinCastTime) / (_spell.Scaling.MaxCastTimeLevel - 1)) / (float)_spell.Scaling.MaxCastTime; + if (_spell.Scaling.CoefLevelBase > DBC.DBC.SelectedLevel) + gtMultiplier *= (1.0f - _spell.Scaling.CoefBase) * (float)(DBC.DBC.SelectedLevel - 1) / (float)(_spell.Scaling.CoefLevelBase - 1) + _spell.Scaling.CoefBase; if (effect.RandomPointsScalingMultiplier != 0.0f) { @@ -317,10 +321,10 @@ private void AppendSpellEffectInfo() else _rtb.AppendFormat("AveragePoints = {0:F}", effect.ScalingMultiplier * gtMultiplier); - _rtb.AppendFormatIfNotNull(" + combo * {0:F}", effect.ComboPointsScalingMultiplier * gtMultiplier); - - if (effect.DamageMultiplier != 1.0f) - _rtb.AppendFormat(" x {0:F}", effect.DamageMultiplier); + if (effect.ComboPointsScalingMultiplier != 0.0f) + _rtb.AppendFormatIfNotNull(" + combo * {0:F}", effect.ComboPointsScalingMultiplier * gtMultiplier); + else + _rtb.AppendFormatIfNotNull(" + combo * {0:F}", effect.PointsPerComboPoint); } else { @@ -339,11 +343,10 @@ private void AppendSpellEffectInfo() } _rtb.AppendFormatIfNotNull(" + combo * {0:F}", effect.PointsPerComboPoint); - - if (effect.DamageMultiplier != 1.0f) - _rtb.AppendFormat(" x {0:F}", effect.DamageMultiplier); } + if (effect.DamageMultiplier != 1.0f) + _rtb.AppendFormat(" x {0:F}", effect.DamageMultiplier); _rtb.AppendFormatIfNotNull(" Multiple = {0:F}", effect.ValueMultiplier); _rtb.AppendLine(); From 6bab672aa551aa66daf2dad15d4e724d8464f672 Mon Sep 17 00:00:00 2001 From: Vincent-Michael Date: Sat, 18 Aug 2012 13:19:55 +0200 Subject: [PATCH 33/58] Fix typo --- SpellWork/Spell/SpellInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 31a8a575..9a7c0954 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -72,7 +72,7 @@ private void ViewSpellInfo() if (_spell.AttributesEx7 != 0) _rtb.AppendFormatLine("AttributesEx7: 0x{0:X8} ({1})", _spell.AttributesEx7, (SpellAtributeEx7)_spell.AttributesEx7); if (_spell.AttributesEx8 != 0) - _rtb.AppendFormatLine("AttributesEx7: 0x{0:X8} ({1})", _spell.AttributesEx8, (SpellAtributeEx8)_spell.AttributesEx8); + _rtb.AppendFormatLine("AttributesEx8: 0x{0:X8} ({1})", _spell.AttributesEx8, (SpellAtributeEx8)_spell.AttributesEx8); _rtb.AppendLine(_line); From 2da59a5f48cde0ad19bf464480c7f93b5c6f611a Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 18 Aug 2012 13:48:27 +0200 Subject: [PATCH 34/58] Output all spell attributes (Ex9 and Ex10) --- SpellWork/DBC/Structures/SpellEntry.cs | 4 +- SpellWork/Spell/SpellEnums.cs | 74 ++++++++++++++++++++++++++ SpellWork/Spell/SpellInfo.cs | 4 ++ SpellWork/Spell/SpellInfoHelper.cs | 4 ++ 4 files changed, 84 insertions(+), 2 deletions(-) diff --git a/SpellWork/DBC/Structures/SpellEntry.cs b/SpellWork/DBC/Structures/SpellEntry.cs index 40fd3894..9ceb99eb 100644 --- a/SpellWork/DBC/Structures/SpellEntry.cs +++ b/SpellWork/DBC/Structures/SpellEntry.cs @@ -16,8 +16,8 @@ public sealed class SpellEntry public uint AttributesEx6; public uint AttributesEx7; public uint AttributesEx8; - public uint Unknown1; - public uint Unknown2; + public uint AttributesEx9; + public uint AttributesEx10; public uint CastingTimeIndex; public uint DurationIndex; public uint PowerType; diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index c67a0ce8..b88ab74c 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -1594,6 +1594,80 @@ public enum SpellAtributeEx8 : uint SPELL_ATTR8_UNK31 = 0x80000000 // 31 }; + [Flags] + public enum SpellAtributeEx9 : uint + { + SPELL_ATTR9_UNK0 = 0x00000001, // 0 + SPELL_ATTR9_UNK1 = 0x00000002, // 1 + SPELL_ATTR9_UNK2 = 0x00000004, // 2 + SPELL_ATTR9_UNK3 = 0x00000008, // 3 + SPELL_ATTR9_UNK4 = 0x00000010, // 4 + SPELL_ATTR9_UNK5 = 0x00000020, // 5 + SPELL_ATTR9_UNK6 = 0x00000040, // 6 + SPELL_ATTR9_UNK7 = 0x00000080, // 7 + SPELL_ATTR9_UNK8 = 0x00000100, // 8 + SPELL_ATTR9_UNK9 = 0x00000200, // 9 + SPELL_ATTR9_UNK10 = 0x00000400, // 10 + SPELL_ATTR9_UNK11 = 0x00000800, // 11 + SPELL_ATTR9_UNK12 = 0x00001000, // 12 + SPELL_ATTR9_UNK13 = 0x00002000, // 13 + SPELL_ATTR9_UNK14 = 0x00004000, // 14 + SPELL_ATTR9_UNK15 = 0x00008000, // 15 + SPELL_ATTR9_UNK16 = 0x00010000, // 16 + SPELL_ATTR9_UNK17 = 0x00020000, // 17 + SPELL_ATTR9_UNK18 = 0x00040000, // 18 + SPELL_ATTR9_UNK19 = 0x00080000, // 19 + SPELL_ATTR9_UNK20 = 0x00100000, // 20 + SPELL_ATTR9_UNK21 = 0x00200000, // 21 + SPELL_ATTR9_UNK22 = 0x00400000, // 22 + SPELL_ATTR9_UNK23 = 0x00800000, // 23 + SPELL_ATTR9_UNK24 = 0x01000000, // 24 + SPELL_ATTR9_UNK25 = 0x02000000, // 25 + SPELL_ATTR9_UNK26 = 0x04000000, // 26 + SPELL_ATTR9_UNK27 = 0x08000000, // 27 + SPELL_ATTR9_UNK28 = 0x10000000, // 28 + SPELL_ATTR9_UNK29 = 0x20000000, // 29 + SPELL_ATTR9_UNK30 = 0x40000000, // 30 + SPELL_ATTR9_UNK31 = 0x80000000 // 31 + }; + + [Flags] + public enum SpellAtributeEx10 : uint + { + SPELL_ATTR10_UNK0 = 0x00000001, // 0 + SPELL_ATTR10_UNK1 = 0x00000002, // 1 + SPELL_ATTR10_UNK2 = 0x00000004, // 2 + SPELL_ATTR10_UNK3 = 0x00000008, // 3 + SPELL_ATTR10_UNK4 = 0x00000010, // 4 + SPELL_ATTR10_UNK5 = 0x00000020, // 5 + SPELL_ATTR10_UNK6 = 0x00000040, // 6 + SPELL_ATTR10_UNK7 = 0x00000080, // 7 + SPELL_ATTR10_UNK8 = 0x00000100, // 8 + SPELL_ATTR10_UNK9 = 0x00000200, // 9 + SPELL_ATTR10_UNK10 = 0x00000400, // 10 + SPELL_ATTR10_UNK11 = 0x00000800, // 11 + SPELL_ATTR10_UNK12 = 0x00001000, // 12 + SPELL_ATTR10_UNK13 = 0x00002000, // 13 + SPELL_ATTR10_UNK14 = 0x00004000, // 14 + SPELL_ATTR10_UNK15 = 0x00008000, // 15 + SPELL_ATTR10_UNK16 = 0x00010000, // 16 + SPELL_ATTR10_UNK17 = 0x00020000, // 17 + SPELL_ATTR10_UNK18 = 0x00040000, // 18 + SPELL_ATTR10_UNK19 = 0x00080000, // 19 + SPELL_ATTR10_UNK20 = 0x00100000, // 20 + SPELL_ATTR10_UNK21 = 0x00200000, // 21 + SPELL_ATTR10_UNK22 = 0x00400000, // 22 + SPELL_ATTR10_UNK23 = 0x00800000, // 23 + SPELL_ATTR10_UNK24 = 0x01000000, // 24 + SPELL_ATTR10_UNK25 = 0x02000000, // 25 + SPELL_ATTR10_UNK26 = 0x04000000, // 26 + SPELL_ATTR10_UNK27 = 0x08000000, // 27 + SPELL_ATTR10_UNK28 = 0x10000000, // 28 + SPELL_ATTR10_UNK29 = 0x20000000, // 29 + SPELL_ATTR10_UNK30 = 0x40000000, // 30 + SPELL_ATTR10_UNK31 = 0x80000000 // 31 + }; + [Flags] public enum CombatRating { diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 9a7c0954..f7e46d70 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -73,6 +73,10 @@ private void ViewSpellInfo() _rtb.AppendFormatLine("AttributesEx7: 0x{0:X8} ({1})", _spell.AttributesEx7, (SpellAtributeEx7)_spell.AttributesEx7); if (_spell.AttributesEx8 != 0) _rtb.AppendFormatLine("AttributesEx8: 0x{0:X8} ({1})", _spell.AttributesEx8, (SpellAtributeEx8)_spell.AttributesEx8); + if (_spell.AttributesEx9 != 0) + _rtb.AppendFormatLine("AttributesEx9: 0x{0:X8} ({1})", _spell.AttributesEx9, (SpellAtributeEx9)_spell.AttributesEx9); + if (_spell.AttributesEx10 != 0) + _rtb.AppendFormatLine("AttributesEx10: 0x{0:X8} ({1})", _spell.AttributesEx10, (SpellAtributeEx10)_spell.AttributesEx10); _rtb.AppendLine(_line); diff --git a/SpellWork/Spell/SpellInfoHelper.cs b/SpellWork/Spell/SpellInfoHelper.cs index 07aadcb0..fb70b2cb 100644 --- a/SpellWork/Spell/SpellInfoHelper.cs +++ b/SpellWork/Spell/SpellInfoHelper.cs @@ -187,6 +187,8 @@ public SpellInfoHelper(SpellEntry dbcData) AttributesEx6 = dbcData.AttributesEx6; AttributesEx7 = dbcData.AttributesEx7; AttributesEx8 = dbcData.AttributesEx8; + AttributesEx9 = dbcData.AttributesEx9; + AttributesEx10 = dbcData.AttributesEx10; CastingTimeIndex = dbcData.CastingTimeIndex; DurationIndex = dbcData.DurationIndex; PowerType = dbcData.PowerType; @@ -202,6 +204,8 @@ public SpellInfoHelper(SpellEntry dbcData) SchoolMask = dbcData.SchoolMask; RuneCostID = dbcData.RuneCostID; SpellMissileID = dbcData.SpellMissileID; + SpellDescriptionVariableID = dbcData.SpellDescriptionVariableID; + SpellDifficultyId = dbcData.SpellDifficultyId; // SpellCategories.dbc var cat = dbcData.Category; From 1c10d542d9406afebaa28077be138312703d1e6b Mon Sep 17 00:00:00 2001 From: Shauren Date: Sat, 15 Sep 2012 19:50:08 +0200 Subject: [PATCH 35/58] Print the order of SpellFamilyFlags --- SpellWork/Spell/SpellInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index b7e33834..ee026d1a 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -41,7 +41,7 @@ private void ViewSpellInfo() _rtb.AppendFormatLine("Category = {0}, SpellIconID = {1}, activeIconID = {2}, SpellVisual = ({3},{4})", _spell.Category, _spell.SpellIconID, _spell.ActiveIconID, _spell.SpellVisual[0], _spell.SpellVisual[1]); - _rtb.AppendFormatLine("Family {0}, flag 0x{1:X8} {2:X8} {3:X8}", + _rtb.AppendFormatLine("Family {0}, flag [0] 0x{1:X8} [1] 0x{2:X8} [2] 0x{3:X8}", (SpellFamilyNames)_spell.SpellFamilyName, _spell.SpellFamilyFlags[0], _spell.SpellFamilyFlags[1], _spell.SpellFamilyFlags[2]); _rtb.AppendLine(); From cd923db9271c4389c50e95206065e8f39f678366 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 16 Sep 2012 23:36:38 +0200 Subject: [PATCH 36/58] Updated attribute after recent TC change --- SpellWork/Spell/SpellEnums.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 7caa9348..e859c35e 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -1384,7 +1384,7 @@ public enum SpellAtributeEx5 : uint SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK = 0x00010000, // 16 this allows spells with EquippedItemClass to affect spells from other items if the required item is equipped SPELL_ATTR5_USABLE_WHILE_FEARED = 0x00020000, // 17 usable while feared SPELL_ATTR5_USABLE_WHILE_CONFUSED = 0x00040000, // 18 usable while confused - SPELL_ATTR5_UNK19 = 0x00080000, // 19 + SPELL_ATTR5_DONT_TURN_DURING_CAST = 0x00080000, // 19 Blocks caster's turning when casting (client does not automatically turn caster's model to face UNIT_FIELD_TARGET) SPELL_ATTR5_UNK20 = 0x00100000, // 20 SPELL_ATTR5_UNK21 = 0x00200000, // 21 SPELL_ATTR5_UNK22 = 0x00400000, // 22 From d308bca972b470a4361d8aba66c831dedef3e5a5 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sun, 30 Dec 2012 04:32:49 +0100 Subject: [PATCH 37/58] Update aura name --- SpellWork/Spell/SpellEnums.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 9dcddc29..3bcaf730 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -567,7 +567,7 @@ public enum AuraType SPELL_AURA_309 = 309, SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE = 310, SPELL_AURA_311 = 311, - SPELL_AURA_312 = 312, + SPELL_AURA_ANIM_REPLACEMENT_SET = 312, SPELL_AURA_313 = 313, SPELL_AURA_PREVENT_RESSURECTION = 314, SPELL_AURA_UNDERWATER_WALKING = 315, From bae624fb8c07dad17087bf5e92e22eed9807b37e Mon Sep 17 00:00:00 2001 From: Kinzcool Date: Tue, 1 Jan 2013 15:08:57 -0500 Subject: [PATCH 38/58] Updated auras and spell effects name with TC --- SpellWork/Spell/SpellEnums.cs | 48 +++++++++++++++++------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 3bcaf730..cfc150c5 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -195,7 +195,7 @@ public enum SpellEffects SPELL_EFFECT_APPLY_AREA_AURA_FRIEND = 128, SPELL_EFFECT_APPLY_AREA_AURA_ENEMY = 129, SPELL_EFFECT_REDIRECT_THREAT = 130, - SPELL_EFFECT_131 = 131, + SPELL_EFFECT_PLAYER_NOTIFICATION = 131, SPELL_EFFECT_PLAY_MUSIC = 132, SPELL_EFFECT_UNLEARN_SPECIALIZATION = 133, SPELL_EFFECT_KILL_CREDIT2 = 134, @@ -212,11 +212,11 @@ public enum SpellEffects SPELL_EFFECT_PULL_TOWARDS_DEST = 145, SPELL_EFFECT_ACTIVATE_RUNE = 146, SPELL_EFFECT_QUEST_FAIL = 147, - SPELL_EFFECT_148 = 148, + SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE = 148, SPELL_EFFECT_CHARGE_DEST = 149, SPELL_EFFECT_QUEST_START = 150, SPELL_EFFECT_TRIGGER_SPELL_2 = 151, - SPELL_EFFECT_152 = 152, + SPELL_EFFECT_SUMMON_RAF_FRIEND = 152, SPELL_EFFECT_CREATE_TAMED_PET = 153, SPELL_EFFECT_DISCOVER_TAXI = 154, SPELL_EFFECT_TITAN_GRIP = 155, @@ -229,11 +229,11 @@ public enum SpellEffects SPELL_EFFECT_TALENT_SPEC_SELECT = 162, SPELL_EFFECT_163 = 163, SPELL_EFFECT_REMOVE_AURA = 164, - SPELL_EFFECT_165 = 165, - SPELL_EFFECT_166 = 166, + SPELL_EFFECT_DAMAGE_FROM_MAX_HEALTH_PCT = 165, + SPELL_EFFECT_GIVE_CURRENCY = 166, SPELL_EFFECT_167 = 167, SPELL_EFFECT_168 = 168, - SPELL_EFFECT_169 = 169, + SPELL_EFFECT_DESTROY_ITEM = 169, SPELL_EFFECT_170 = 170, SPELL_EFFECT_171 = 171, // Summons gamebject SPELL_EFFECT_172 = 172, // Aoe ressurection @@ -243,7 +243,7 @@ public enum SpellEffects SPELL_EFFECT_176 = 176, // Some kind of sanctuary effect (Vanish) SPELL_EFFECT_177 = 177, SPELL_EFFECT_178 = 178, - SPELL_EFFECT_179 = 179, + SPELL_EFFECT_CREATE_AREATRIGGER = 179, SPELL_EFFECT_180 = 180, SPELL_EFFECT_181 = 181, SPELL_EFFECT_182 = 182, @@ -531,7 +531,7 @@ public enum AuraType SPELL_AURA_X_RAY = 273, SPELL_AURA_ABILITY_CONSUME_NO_AMMO = 274, SPELL_AURA_MOD_IGNORE_SHAPESHIFT = 275, - SPELL_AURA_276 = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done + SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done SPELL_AURA_MOD_MAX_AFFECTED_TARGETS = 277, SPELL_AURA_MOD_DISARM_RANGED = 278, SPELL_AURA_INITIALIZE_IMAGES = 279, @@ -563,7 +563,7 @@ public enum AuraType SPELL_AURA_MOD_MINIMUM_SPEED = 305, SPELL_AURA_306 = 306, SPELL_AURA_HEAL_ABSORB_TEST = 307, - SPELL_AURA_308 = 308, + SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER = 308, SPELL_AURA_309 = 309, SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE = 310, SPELL_AURA_311 = 311, @@ -574,7 +574,7 @@ public enum AuraType SPELL_AURA_PERIODIC_HASTE = 316, SPELL_AURA_MOD_SPELL_POWER_PCT = 317, SPELL_AURA_MASTERY = 318, - SPELL_AURA_319 = 319, // (melee?) attack speed + SPELL_AURA_MOD_MELEE_HASTE_3 = 319, SPELL_AURA_MOD_RANGED_ATTACK_SPEED = 320, // NYI SPELL_AURA_321 = 321, SPELL_AURA_INTERFERE_TARGETTING = 322, // NYI @@ -583,20 +583,20 @@ public enum AuraType SPELL_AURA_325 = 325, SPELL_AURA_326 = 326, // phase related SPELL_AURA_327 = 327, - SPELL_AURA_328 = 328, + SPELL_AURA_PROC_ON_POWER_AMOUNT = 328, SPELL_AURA_MOD_RUNE_REGEN_SPEED = 329, // NYI SPELL_AURA_CAST_WHILE_WALKING = 330, // NYI - SPELL_AURA_331 = 331, + SPELL_AURA_FORCE_WEATHER = 331, SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS = 332, // NYI SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2 = 333, // NYI - SPELL_AURA_334 = 334, + SPELL_AURA_MOD_BLIND = 334, SPELL_AURA_335 = 335, SPELL_AURA_MOD_FLYING_RESTRICTIONS = 336, // NYI SPELL_AURA_MOD_VENDOR_ITEMS_PRICES = 337, // NYI SPELL_AURA_MOD_DURABILITY_LOSS = 338, SPELL_AURA_INCREASE_SKILL_GAIN_CHANCE = 339, // NYI - SPELL_AURA_340 = 340, - SPELL_AURA_341 = 341, // cooldown decrease + SPELL_AURA_MOD_RESURRECTED_HEALTH_BY_GUILD_MEMBER = 340, + SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN = 341, // cooldown decrease SPELL_AURA_MOD_TIME_BETWEEN_ATTACKS = 342, // (attack speed) NYI SPELL_AURA_343 = 343, SPELL_AURA_MOD_AUTOATTACK_DAMAGE = 344, @@ -612,20 +612,20 @@ public enum AuraType SPELL_AURA_354 = 354, SPELL_AURA_355 = 355, SPELL_AURA_356 = 356, - SPELL_AURA_357 = 357, - SPELL_AURA_358 = 358, + SPELL_AURA_ENABLE_BOSS1_UNIT_FRAME = 357, + SPELL_AURA_WORGEN_ALTERED_FORM = 358, SPELL_AURA_359 = 359, - SPELL_AURA_360 = 360, - SPELL_AURA_361 = 361, + SPELL_AURA_PROC_TRIGGER_SPELL_COPY = 360, + SPELL_AURA_PROC_TRIGGER_SPELL_2 = 361, SPELL_AURA_362 = 362, - SPELL_AURA_363 = 363, + SPELL_AURA_MOD_NEXT_SPELL = 363, SPELL_AURA_364 = 364, - SPELL_AURA_365 = 365, - SPELL_AURA_366 = 366, + SPELL_AURA_MAX_FAR_CLIP_PLANE = 365, + SPELL_AURA_OVERRIDE_SPELL_POWER_BY_AP_PCT = 366, SPELL_AURA_367 = 367, SPELL_AURA_368 = 368, - SPELL_AURA_369 = 369, - SPELL_AURA_370 = 370, + SPELL_AURA_ENABLE_POWER_BAR_TIMER = 369, + SPELL_AURA_SET_FAIR_FAR_CLIP = 370, TOTAL_AURAS = 371 } From 8e6f9134a1d505e5ec0d4759d3fc4a030e9edb7b Mon Sep 17 00:00:00 2001 From: Warpten Date: Sat, 2 Feb 2013 15:59:30 +0100 Subject: [PATCH 39/58] 4.3.4: Display the spell's description variable ID. --- SpellWork/Spell/SpellInfo.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index edebc149..d6dd9875 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -34,6 +34,7 @@ private void ViewSpellInfo() _rtb.AppendFormatLine(_line); _rtb.AppendFormatLineIfNotNull("Description: {0}", _spell.Description); + _rtb.AppendFormatLine("Description variable ID: {0}", _spell.SpellDescriptionVariableID); _rtb.AppendFormatLineIfNotNull("ToolTip: {0}", _spell.ToolTip); _rtb.AppendFormatLineIfNotNull("Modal Next Spell: {0}", _spell.ModalNextSpell); if (_spell.Description != string.Empty && _spell.ToolTip != string.Empty && _spell.ModalNextSpell != 0) From 8e38d5736e44baa1191bff3c41f0a8fce6b41b81 Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Fri, 1 Mar 2013 22:18:58 +0100 Subject: [PATCH 40/58] Update some spells enums --- SpellWork/Spell/SpellEnums.cs | 168 +++++++++++++++++----------------- 1 file changed, 84 insertions(+), 84 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index e859c35e..4a149026 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -186,7 +186,7 @@ public enum SpellEffects SPELL_EFFECT_SUMMON_OBJECT_SLOT3 = 106, SPELL_EFFECT_SUMMON_OBJECT_SLOT4 = 107, SPELL_EFFECT_DISPEL_MECHANIC = 108, - SPELL_EFFECT_SUMMON_DEAD_PET = 109, + SPELL_EFFECT_RESURRECT_PET = 109, SPELL_EFFECT_DESTROY_ALL_TOTEMS = 110, SPELL_EFFECT_DURABILITY_DAMAGE = 111, SPELL_EFFECT_112 = 112, @@ -208,7 +208,7 @@ public enum SpellEffects SPELL_EFFECT_APPLY_AREA_AURA_FRIEND = 128, SPELL_EFFECT_APPLY_AREA_AURA_ENEMY = 129, SPELL_EFFECT_REDIRECT_THREAT = 130, - SPELL_EFFECT_131 = 131, + SPELL_EFFECT_PLAY_SOUND = 131, SPELL_EFFECT_PLAY_MUSIC = 132, SPELL_EFFECT_UNLEARN_SPECIALIZATION = 133, SPELL_EFFECT_KILL_CREDIT2 = 134, @@ -225,11 +225,11 @@ public enum SpellEffects SPELL_EFFECT_PULL_TOWARDS_DEST = 145, SPELL_EFFECT_ACTIVATE_RUNE = 146, SPELL_EFFECT_QUEST_FAIL = 147, - SPELL_EFFECT_148 = 148, + SPELL_EFFECT_TRIGGER_MISSILE_SPELL_WITH_VALUE = 148, SPELL_EFFECT_CHARGE_DEST = 149, SPELL_EFFECT_QUEST_START = 150, SPELL_EFFECT_TRIGGER_SPELL_2 = 151, - SPELL_EFFECT_152 = 152, + SPELL_EFFECT_SUMMON_RAF_FRIEND = 152, SPELL_EFFECT_CREATE_TAMED_PET = 153, SPELL_EFFECT_DISCOVER_TAXI = 154, SPELL_EFFECT_TITAN_GRIP = 155, @@ -270,7 +270,7 @@ public enum AuraType SPELL_AURA_MOD_STEALTH_DETECT = 17, SPELL_AURA_MOD_INVISIBILITY = 18, SPELL_AURA_MOD_INVISIBILITY_DETECT = 19, - SPELL_AURA_OBS_MOD_HEALTH = 20, //20,21 unofficial + SPELL_AURA_OBS_MOD_HEALTH = 20, // 20, 21 unofficial SPELL_AURA_OBS_MOD_POWER = 21, SPELL_AURA_MOD_RESISTANCE = 22, SPELL_AURA_PERIODIC_TRIGGER_SPELL = 23, @@ -296,9 +296,9 @@ public enum AuraType SPELL_AURA_PROC_TRIGGER_DAMAGE = 43, SPELL_AURA_TRACK_CREATURES = 44, SPELL_AURA_TRACK_RESOURCES = 45, - SPELL_AURA_46 = 46, // Ignore all Gear test spells + SPELL_AURA_46 = 46, // Ignore all Gear test spells SPELL_AURA_MOD_PARRY_PERCENT = 47, - SPELL_AURA_48 = 48, // One periodic spell + SPELL_AURA_48 = 48, // One periodic spell SPELL_AURA_MOD_DODGE_PERCENT = 49, SPELL_AURA_MOD_CRITICAL_HEALING_AMOUNT = 50, SPELL_AURA_MOD_BLOCK_PERCENT = 51, @@ -313,7 +313,7 @@ public enum AuraType SPELL_AURA_MOD_PACIFY_SILENCE = 60, SPELL_AURA_MOD_SCALE = 61, SPELL_AURA_PERIODIC_HEALTH_FUNNEL = 62, - SPELL_AURA_63 = 63, // old SPELL_AURA_PERIODIC_MANA_FUNNEL + SPELL_AURA_63 = 63, // old SPELL_AURA_PERIODIC_MANA_FUNNEL SPELL_AURA_PERIODIC_MANA_LEECH = 64, SPELL_AURA_MOD_CASTING_SPEED_NOT_STACK = 65, SPELL_AURA_FEIGN_DEATH = 66, @@ -340,7 +340,7 @@ public enum AuraType SPELL_AURA_MOD_DAMAGE_PERCENT_TAKEN = 87, SPELL_AURA_MOD_HEALTH_REGEN_PERCENT = 88, SPELL_AURA_PERIODIC_DAMAGE_PERCENT = 89, - SPELL_AURA_90 = 90, // old SPELL_AURA_MOD_RESIST_CHANCE + SPELL_AURA_90 = 90, // old SPELL_AURA_MOD_RESIST_CHANCE SPELL_AURA_MOD_DETECT_RANGE = 91, SPELL_AURA_PREVENTS_FLEEING = 92, SPELL_AURA_MOD_UNATTACKABLE = 93, @@ -369,7 +369,7 @@ public enum AuraType SPELL_AURA_MOD_REGEN_DURING_COMBAT = 116, SPELL_AURA_MOD_MECHANIC_RESISTANCE = 117, SPELL_AURA_MOD_HEALING_PCT = 118, - SPELL_AURA_119 = 119, // old SPELL_AURA_SHARE_PET_TRACKING + SPELL_AURA_119 = 119, // old SPELL_AURA_SHARE_PET_TRACKING SPELL_AURA_UNTRACKABLE = 120, SPELL_AURA_EMPATHY = 121, SPELL_AURA_MOD_OFFHAND_DAMAGE_PCT = 122, @@ -399,21 +399,21 @@ public enum AuraType SPELL_AURA_ALLOW_TAME_PET_TYPE = 146, SPELL_AURA_MECHANIC_IMMUNITY_MASK = 147, SPELL_AURA_RETAIN_COMBO_POINTS = 148, - SPELL_AURA_REDUCE_PUSHBACK = 149, // Reduce Pushback + SPELL_AURA_REDUCE_PUSHBACK = 149, // Reduce Pushback SPELL_AURA_MOD_SHIELD_BLOCKVALUE_PCT = 150, - SPELL_AURA_TRACK_STEALTHED = 151, // Track Stealthed - SPELL_AURA_MOD_DETECTED_RANGE = 152, // Mod Detected Range - SPELL_AURA_SPLIT_DAMAGE_FLAT = 153, // Split Damage Flat - SPELL_AURA_MOD_STEALTH_LEVEL = 154, // Stealth Level Modifier - SPELL_AURA_MOD_WATER_BREATHING = 155, // Mod Water Breathing - SPELL_AURA_MOD_REPUTATION_GAIN = 156, // Mod Reputation Gain - SPELL_AURA_PET_DAMAGE_MULTI = 157, // Mod Pet Damage + SPELL_AURA_TRACK_STEALTHED = 151, // Track Stealthed + SPELL_AURA_MOD_DETECTED_RANGE = 152, // Mod Detected Range + SPELL_AURA_SPLIT_DAMAGE_FLAT = 153, // Split Damage Flat + SPELL_AURA_MOD_STEALTH_LEVEL = 154, // Stealth Level Modifier + SPELL_AURA_MOD_WATER_BREATHING = 155, // Mod Water Breathing + SPELL_AURA_MOD_REPUTATION_GAIN = 156, // Mod Reputation Gain + SPELL_AURA_PET_DAMAGE_MULTI = 157, // Mod Pet Damage SPELL_AURA_MOD_SHIELD_BLOCKVALUE = 158, SPELL_AURA_NO_PVP_CREDIT = 159, SPELL_AURA_MOD_AOE_AVOIDANCE = 160, SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT = 161, - SPELL_AURA_POWER_BURN_MANA = 162, - SPELL_AURA_MOD_CRIT_DAMAGE_BONUS_MELEE = 163, + SPELL_AURA_POWER_BURN = 162, + SPELL_AURA_MOD_CRIT_DAMAGE_BONUS = 163, SPELL_AURA_164 = 164, SPELL_AURA_MELEE_ATTACK_POWER_ATTACKER_BONUS = 165, SPELL_AURA_MOD_ATTACK_POWER_PCT = 166, @@ -423,15 +423,15 @@ public enum AuraType SPELL_AURA_DETECT_AMORE = 170, SPELL_AURA_MOD_SPEED_NOT_STACK = 171, SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK = 172, - SPELL_AURA_173 = 173, // old SPELL_AURA_ALLOW_CHAMPION_SPELLS - SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT = 174, // by defeult intelect, dependent from SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT + SPELL_AURA_173 = 173, // old SPELL_AURA_ALLOW_CHAMPION_SPELLS + SPELL_AURA_MOD_SPELL_DAMAGE_OF_STAT_PERCENT = 174, // by defeult intelect, dependent from SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT = 175, SPELL_AURA_SPIRIT_OF_REDEMPTION = 176, SPELL_AURA_AOE_CHARM = 177, SPELL_AURA_MOD_DEBUFF_RESISTANCE = 178, SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE = 179, SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS = 180, - SPELL_AURA_181 = 181, // old SPELL_AURA_MOD_FLAT_SPELL_CRIT_DAMAGE_VERSUS - possible flat spell crit damage versus + SPELL_AURA_181 = 181, // old SPELL_AURA_MOD_FLAT_SPELL_CRIT_DAMAGE_VERSUS - possible flat spell crit damage versus SPELL_AURA_MOD_RESISTANCE_OF_STAT_PERCENT = 182, SPELL_AURA_MOD_CRITICAL_THREAT = 183, SPELL_AURA_MOD_ATTACKER_MELEE_HIT_CHANCE = 184, @@ -446,9 +446,9 @@ public enum AuraType SPELL_AURA_MELEE_SLOW = 193, SPELL_AURA_MOD_TARGET_ABSORB_SCHOOL = 194, SPELL_AURA_MOD_TARGET_ABILITY_ABSORB_SCHOOL = 195, - SPELL_AURA_MOD_COOLDOWN = 196, // only 24818 Noxious Breath + SPELL_AURA_MOD_COOLDOWN = 196, // only 24818 Noxious Breath SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE= 197, - SPELL_AURA_198 = 198, // old SPELL_AURA_MOD_ALL_WEAPON_SKILLS + SPELL_AURA_198 = 198, // old SPELL_AURA_MOD_ALL_WEAPON_SKILLS SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT = 199, SPELL_AURA_MOD_XP_PCT = 200, SPELL_AURA_FLY = 201, @@ -456,18 +456,18 @@ public enum AuraType SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE = 203, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE = 204, SPELL_AURA_MOD_SCHOOL_CRIT_DMG_TAKEN = 205, - SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED = 206, // ? used in strange spells + SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED = 206, // ? used in strange spells SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED = 207, SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 208, SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS = 209, - SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS = 210, // unused + SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS = 210, // unused SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK = 211, SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT = 212, SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT = 213, SPELL_AURA_214 = 214, SPELL_AURA_ARENA_PREPARATION = 215, SPELL_AURA_HASTE_SPELLS = 216, - SPELL_AURA_217 = 217, + SPELL_AURA_MOD_MELEE_HASTE_2 = 217, SPELL_AURA_HASTE_RANGED = 218, SPELL_AURA_MOD_MANA_REGEN_FROM_STAT = 219, SPELL_AURA_MOD_RATING_FROM_STAT = 220, @@ -483,7 +483,7 @@ public enum AuraType SPELL_AURA_230 = 230, SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE = 231, SPELL_AURA_MECHANIC_DURATION_MOD = 232, - SPELL_AURA_233 = 233, + SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS = 233, // client-side only SPELL_AURA_MECHANIC_DURATION_MOD_NOT_STACK = 234, SPELL_AURA_MOD_DISPEL_RESIST = 235, SPELL_AURA_CONTROL_VEHICLE = 236, @@ -520,20 +520,20 @@ public enum AuraType SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL = 267, SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT = 268, SPELL_AURA_MOD_IGNORE_TARGET_RESIST = 269, - SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST = 270, // Possibly need swap vs 195 aura used only in 1 spell Chaos Bolt Passive + SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST = 270, // Possibly need swap vs 195 aura used only in 1 spell Chaos Bolt Passive SPELL_AURA_MOD_DAMAGE_FROM_CASTER = 271, SPELL_AURA_IGNORE_MELEE_RESET = 272, SPELL_AURA_X_RAY = 273, SPELL_AURA_ABILITY_CONSUME_NO_AMMO = 274, SPELL_AURA_MOD_IGNORE_SHAPESHIFT = 275, - SPELL_AURA_276 = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done + SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done SPELL_AURA_MOD_MAX_AFFECTED_TARGETS = 277, SPELL_AURA_MOD_DISARM_RANGED = 278, SPELL_AURA_INITIALIZE_IMAGES = 279, SPELL_AURA_MOD_ARMOR_PENETRATION_PCT = 280, SPELL_AURA_MOD_HONOR_GAIN_PCT = 281, SPELL_AURA_MOD_BASE_HEALTH_PCT = 282, - SPELL_AURA_MOD_HEALING_RECEIVED = 283, // Possibly only for some spell family class spells + SPELL_AURA_MOD_HEALING_RECEIVED = 283, // Possibly only for some spell family class spells SPELL_AURA_LINKED = 284, SPELL_AURA_MOD_ATTACK_POWER_OF_ARMOR = 285, SPELL_AURA_ABILITY_PERIODIC_CRIT = 286, @@ -558,13 +558,13 @@ public enum AuraType SPELL_AURA_MOD_MINIMUM_SPEED = 305, SPELL_AURA_306 = 306, SPELL_AURA_HEAL_ABSORB_TEST = 307, - SPELL_AURA_308 = 308, + SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER = 308, SPELL_AURA_309 = 309, SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE = 310, SPELL_AURA_311 = 311, SPELL_AURA_312 = 312, SPELL_AURA_313 = 313, - SPELL_AURA_PREVENT_RESSURECTION = 314, + SPELL_AURA_PREVENT_RESURRECTION = 314, SPELL_AURA_UNDERWATER_WALKING = 315, SPELL_AURA_PERIODIC_HASTE = 316, TOTAL_AURAS = 317 @@ -1173,7 +1173,7 @@ public enum SpellAtribute : uint SPELL_ATTR0_UNK0 = 0x00000001, // 0 SPELL_ATTR0_REQ_AMMO = 0x00000002, // 1 on next ranged SPELL_ATTR0_ON_NEXT_SWING = 0x00000004, // 2 - SPELL_ATTR0_UNK3 = 0x00000008, // 3 not set in 3.0.3 + SPELL_ATTR0_IS_REPLENISHMENT = 0x00000008, // 3 not set in 3.0.3 SPELL_ATTR0_ABILITY = 0x00000010, // 4 client puts 'ability' instead of 'spell' in game strings for these spells SPELL_ATTR0_TRADESPELL = 0x00000020, // 5 trade spells (recipes), will be added by client to a sublist of profession spell SPELL_ATTR0_PASSIVE = 0x00000040, // 6 Passive spell @@ -1200,7 +1200,7 @@ public enum SpellAtribute : uint SPELL_ATTR0_CASTABLE_WHILE_SITTING = 0x08000000, // 27 castable while sitting SPELL_ATTR0_CANT_USED_IN_COMBAT = 0x10000000, // 28 Cannot be used in combat SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY = 0x20000000, // 29 unaffected by invulnerability (hmm possible not...) - SPELL_ATTR0_BREAKABLE_BY_DAMAGE = 0x40000000, // 30 + SPELL_ATTR0_HEARTBEAT_RESIST_CHECK = 0x40000000, // 30 random chance the effect will end TODO: implement core support SPELL_ATTR0_CANT_CANCEL = 0x80000000 // 31 positive aura can't be canceled }; @@ -1221,22 +1221,22 @@ public enum SpellAtributeEx : uint SPELL_ATTR1_MELEE_COMBAT_START = 0x00000200, // 9 player starts melee combat after this spell is cast SPELL_ATTR1_NO_THREAT = 0x00000400, // 10 no generates threat on cast 100% (old NO_INITIAL_AGGRO) SPELL_ATTR1_UNK11 = 0x00000800, // 11 aura - SPELL_ATTR1_UNK12 = 0x00001000, // 12 + SPELL_ATTR1_IS_PICKPOCKET = 0x00001000, // 12 Pickpocket SPELL_ATTR1_FARSIGHT = 0x00002000, // 13 Client removes farsight on aura loss SPELL_ATTR1_CHANNEL_TRACK_TARGET = 0x00004000, // 14 Client automatically forces player to face target when channeling SPELL_ATTR1_DISPEL_AURAS_ON_IMMUNITY = 0x00008000, // 15 remove auras on immunity SPELL_ATTR1_UNAFFECTED_BY_SCHOOL_IMMUNE = 0x00010000, // 16 on immuniy SPELL_ATTR1_UNAUTOCASTABLE_BY_PET = 0x00020000, // 17 - SPELL_ATTR1_UNK18 = 0x00040000, // 18 + SPELL_ATTR1_UNK18 = 0x00040000, // 18 stun, polymorph, daze, hex SPELL_ATTR1_CANT_TARGET_SELF = 0x00080000, // 19 SPELL_ATTR1_REQ_COMBO_POINTS1 = 0x00100000, // 20 Req combo points on target SPELL_ATTR1_UNK21 = 0x00200000, // 21 SPELL_ATTR1_REQ_COMBO_POINTS2 = 0x00400000, // 22 Req combo points on target SPELL_ATTR1_UNK23 = 0x00800000, // 23 - SPELL_ATTR1_UNK24 = 0x01000000, // 24 only fishing spells + SPELL_ATTR1_IS_FISHING = 0x01000000, // 24 only fishing spells SPELL_ATTR1_UNK25 = 0x02000000, // 25 SPELL_ATTR1_UNK26 = 0x04000000, // 26 works correctly with [target=focus] and [target=mouseover] macros? - SPELL_ATTR1_UNK27 = 0x08000000, // 27 + SPELL_ATTR1_UNK27 = 0x08000000, // 27 melee spell? SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR = 0x10000000, // 28 client doesn't display these spells in aura bar SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME = 0x20000000, // 29 spell name is displayed in cast bar instead of 'channeling' text SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite @@ -1249,7 +1249,7 @@ public enum SpellAtributeEx2 : uint SPELL_ATTR2_ALL = 0xFFFFFFFF, SPELL_ATTR2_NONE = 0x00000000, SPELL_ATTR2_CAN_TARGET_DEAD = 0x00000001, // 0 can target dead unit or corpse - SPELL_ATTR2_UNK1 = 0x00000002, // 1 ? many triggered spells have this flag + SPELL_ATTR2_UNK1 = 0x00000002, // 1 vanish, shadowform, Ghost Wolf and other SPELL_ATTR2_CAN_TARGET_NOT_IN_LOS = 0x00000004, // 2 26368 4.0.1 dbc change SPELL_ATTR2_UNK3 = 0x00000008, // 3 SPELL_ATTR2_DISPLAY_IN_STANCE_BAR = 0x00000010, // 4 client displays icon in stance bar when learned, even if not shapeshift @@ -1258,20 +1258,20 @@ public enum SpellAtributeEx2 : uint SPELL_ATTR2_UNK7 = 0x00000080, // 7 SPELL_ATTR2_UNK8 = 0x00000100, // 8 not set in 3.0.3 SPELL_ATTR2_UNK9 = 0x00000200, // 9 - SPELL_ATTR2_UNK10 = 0x00000400, // 10 + SPELL_ATTR2_UNK10 = 0x00000400, // 10 related to tame SPELL_ATTR2_HEALTH_FUNNEL = 0x00000800, // 11 - SPELL_ATTR2_UNK12 = 0x00001000, // 12 - SPELL_ATTR2_UNK13 = 0x00002000, // 13 Items enchanted by spells with this flag preserve the enchant to arenas + SPELL_ATTR2_UNK12 = 0x00001000, // 12 Cleave, Heart Strike, Maul, Sunder Armor, Swipe + SPELL_ATTR2_PRESERVE_ENCHANT_IN_ARENA = 0x00002000, // 13 Items enchanted by spells with this flag preserve the enchant to arenas SPELL_ATTR2_UNK14 = 0x00004000, // 14 SPELL_ATTR2_UNK15 = 0x00008000, // 15 not set in 3.0.3 SPELL_ATTR2_TAME_BEAST = 0x00010000, // 16 SPELL_ATTR2_NOT_RESET_AUTO_ACTIONS = 0x00020000, // 17 don't reset timers for melee autoattacks (swings) or ranged autoattacks (autoshoots) - SPELL_ATTR2_UNK18 = 0x00040000, // 18 Only Revive pet - possible req dead pet + SPELL_ATTR2_REQ_DEAD_PET = 0x00040000, // 18 Only Revive pet and Heart of the Pheonix SPELL_ATTR2_NOT_NEED_SHAPESHIFT = 0x00080000, // 19 does not necessarly need shapeshift SPELL_ATTR2_UNK20 = 0x00100000, // 20 SPELL_ATTR2_DAMAGE_REDUCED_SHIELD = 0x00200000, // 21 for ice blocks, pala immunity buffs, priest absorb shields, but used also for other spells -> not sure! - SPELL_ATTR2_UNK22 = 0x00400000, // 22 - SPELL_ATTR2_UNK23 = 0x00800000, // 23 Only mage Arcane Concentration have this flag + SPELL_ATTR2_UNK22 = 0x00400000, // 22 Ambush, Backstab, Cheap Shot, Death Grip, Garrote, Judgements, Mutilate, Pounce, Ravage, Shiv, Shred + SPELL_ATTR2_IS_ARCANE_CONCENTRATION = 0x00800000, // 23 Only mage Arcane Concentration have this flag SPELL_ATTR2_UNK24 = 0x01000000, // 24 SPELL_ATTR2_UNK25 = 0x02000000, // 25 SPELL_ATTR2_UNK26 = 0x04000000, // 26 unaffected by school immunity @@ -1301,14 +1301,14 @@ public enum SpellAtributeEx3 : uint SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can casted only on battleground SPELL_ATTR3_ONLY_TARGET_GHOSTS = 0x00001000, // 12 SPELL_ATTR3_UNK13 = 0x00002000, // 13 - SPELL_ATTR3_UNK14 = 0x00004000, // 14 "Honorless Target" only this spells have this flag + SPELL_ATTR3_IS_HONORLESS_TARGET = 0x00004000, // 14 "Honorless Target" only this spells have this flag SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag SPELL_ATTR3_CANT_TRIGGER_PROC = 0x00010000, // 16 confirmed with many patchnotes SPELL_ATTR3_NO_INITIAL_AGGRO = 0x00020000, // 17 Soothe Animal, 39758, Mind Soothe SPELL_ATTR3_IGNORE_HIT_RESULT = 0x00040000, // 18 Spell should always hit its target SPELL_ATTR3_DISABLE_PROC = 0x00080000, // 19 during aura proc no spells can trigger (20178, 20375) SPELL_ATTR3_DEATH_PERSISTENT = 0x00100000, // 20 Death persistent spells - SPELL_ATTR3_UNK21 = 0x00200000, // 21 + SPELL_ATTR3_UNK21 = 0x00200000, // 21 unused SPELL_ATTR3_REQ_WAND = 0x00400000, // 22 Req wand SPELL_ATTR3_UNK23 = 0x00800000, // 23 SPELL_ATTR3_REQ_OFFHAND = 0x01000000, // 24 Req offhand weapon @@ -1316,7 +1316,7 @@ public enum SpellAtributeEx3 : uint SPELL_ATTR3_CAN_PROC_WITH_TRIGGERED = 0x04000000, // 26 auras with this attribute can proc from triggered spell casts with SPELL_ATTR3_TRIGGERED_CAN_TRIGGER_PROC_2 (67736 + 52999) SPELL_ATTR3_DRAIN_SOUL = 0x08000000, // 27 only drain soul has this flag SPELL_ATTR3_UNK28 = 0x10000000, // 28 - SPELL_ATTR3_NO_DONE_BONUS = 0x20000000, // 29 Ignore caster spellpower and done damage mods? + SPELL_ATTR3_NO_DONE_BONUS = 0x20000000, // 29 Ignore caster spellpower and done damage mods? client doesn't apply spellmods for those spells SPELL_ATTR3_DONT_DISPLAY_RANGE = 0x40000000, // 30 client doesn't display range in tooltip for those spells SPELL_ATTR3_UNK31 = 0x80000000 // 31 }; @@ -1326,16 +1326,16 @@ public enum SpellAtributeEx4 : uint { SPELL_ATTR4_ALL = 0xFFFFFFFF, SPELL_ATTR4_NONE = 0x00000000, - SPELL_ATTR4_UNK0 = 0x00000001, // 0 - SPELL_ATTR4_UNK1 = 0x00000002, // 1 proc on finishing move? + SPELL_ATTR4_IGNORE_RESISTANCES = 0x00000001, // 0 spells with this attribute will completely ignore the target's resistance (these spells can't be resisted) + SPELL_ATTR4_PROC_ONLY_ON_CASTER = 0x00000002, // 1 proc only on effects with TARGET_UNIT_CASTER? SPELL_ATTR4_UNK2 = 0x00000004, // 2 SPELL_ATTR4_UNK3 = 0x00000008, // 3 SPELL_ATTR4_UNK4 = 0x00000010, // 4 This will no longer cause guards to attack on use?? SPELL_ATTR4_UNK5 = 0x00000020, // 5 SPELL_ATTR4_NOT_STEALABLE = 0x00000040, // 6 although such auras might be dispellable, they cannot be stolen SPELL_ATTR4_TRIGGERED = 0x00000080, // 7 spells forced to be triggered - SPELL_ATTR4_UNK8 = 0x00000100, // 8 ignores taken percent damage mods? - SPELL_ATTR4_UNK9 = 0x00000200, // 9 + SPELL_ATTR4_FIXED_DAMAGE = 0x00000100, // 8 ignores taken percent damage mods? + SPELL_ATTR4_TRIGGER_ACTIVATE = 0x00000200, // 9 initially disabled / trigger activate from event (Execute, Riposte, Deep Freeze end other) SPELL_ATTR4_SPELL_VS_EXTEND_COST = 0x00000400, // 10 Rogue Shiv have this flag SPELL_ATTR4_UNK11 = 0x00000800, // 11 SPELL_ATTR4_UNK12 = 0x00001000, // 12 @@ -1345,19 +1345,19 @@ public enum SpellAtributeEx4 : uint SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16 SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 SPELL_ATTR4_AREA_TARGET_CHAIN = 0x00040000, // 18 (NYI)hits area targets one after another instead of all at once - SPELL_ATTR4_UNK19 = 0x00080000, // 19 + SPELL_ATTR4_UNK19 = 0x00080000, // 19 proc dalayed, after damage or don't proc on absorb? SPELL_ATTR4_NOT_CHECK_SELFCAST_POWER = 0x00100000, // 20 supersedes message "More powerful spell applied" for self casts. - SPELL_ATTR4_UNK21 = 0x00200000, // 21 - SPELL_ATTR4_UNK22 = 0x00400000, // 22 + SPELL_ATTR4_UNK21 = 0x00200000, // 21 Pally aura, dk presence, dudu form, warrior stance, shadowform, hunter track + SPELL_ATTR4_UNK22 = 0x00400000, // 22 Seal of Command (42058, 57770) and Gymer's Smash 55426 SPELL_ATTR4_UNK23 = 0x00800000, // 23 - SPELL_ATTR4_UNK24 = 0x01000000, // 24 - SPELL_ATTR4_UNK25 = 0x02000000, // 25 pet scaling auras + SPELL_ATTR4_UNK24 = 0x01000000, // 24 some shoot spell + SPELL_ATTR4_IS_PET_SCALING = 0x02000000, // 25 pet scaling auras SPELL_ATTR4_CAST_ONLY_IN_OUTLAND = 0x04000000, // 26 Can only be used in Outland. SPELL_ATTR4_UNK27 = 0x08000000, // 27 - SPELL_ATTR4_UNK28 = 0x10000000, // 28 + SPELL_ATTR4_UNK28 = 0x10000000, // 28 Aimed Shot SPELL_ATTR4_UNK29 = 0x20000000, // 29 SPELL_ATTR4_UNK30 = 0x40000000, // 30 - SPELL_ATTR4_UNK31 = 0x80000000 // 31 + SPELL_ATTR4_UNK31 = 0x80000000 // 31 Polymorph (chicken) 228 and Sonic Boom (38052, 38488) }; [Flags] @@ -1377,10 +1377,10 @@ public enum SpellAtributeEx5 : uint SPELL_ATTR5_START_PERIODIC_AT_APPLY = 0x00000200, // 9 begin periodic tick at aura apply SPELL_ATTR5_HIDE_DURATION = 0x00000400, // 10 do not send duration to client SPELL_ATTR5_ALLOW_TARGET_OF_TARGET_AS_TARGET = 0x00000800, // 11 (NYI) uses target's target as target if original target not valid (intervene for example) - SPELL_ATTR5_UNK12 = 0x00001000, // 12 + SPELL_ATTR5_UNK12 = 0x00001000, // 12 Cleave related? SPELL_ATTR5_HASTE_AFFECT_DURATION = 0x00002000, // 13 haste effects decrease duration of this SPELL_ATTR5_UNK14 = 0x00004000, // 14 - SPELL_ATTR5_UNK15 = 0x00008000, // 15 + SPELL_ATTR5_UNK15 = 0x00008000, // 15 Inflits on multiple targets? SPELL_ATTR5_SPECIAL_ITEM_CLASS_CHECK = 0x00010000, // 16 this allows spells with EquippedItemClass to affect spells from other items if the required item is equipped SPELL_ATTR5_USABLE_WHILE_FEARED = 0x00020000, // 17 usable while feared SPELL_ATTR5_USABLE_WHILE_CONFUSED = 0x00040000, // 18 usable while confused @@ -1391,7 +1391,7 @@ public enum SpellAtributeEx5 : uint SPELL_ATTR5_UNK23 = 0x00800000, // 23 SPELL_ATTR5_UNK24 = 0x01000000, // 24 SPELL_ATTR5_UNK25 = 0x02000000, // 25 - SPELL_ATTR5_UNK26 = 0x04000000, // 26 + SPELL_ATTR5_UNK26 = 0x04000000, // 26 aoe related - Boulder, Cannon, Corpse Explosion, Fire Nova, Flames, Frost Bomb, Living Bomb, Seed of Corruption, Starfall, Thunder Clap, Volley SPELL_ATTR5_UNK27 = 0x08000000, // 27 SPELL_ATTR5_UNK28 = 0x10000000, // 28 SPELL_ATTR5_UNK29 = 0x20000000, // 29 @@ -1407,10 +1407,10 @@ public enum SpellAtributeEx6 : uint SPELL_ATTR6_DONT_DISPLAY_COOLDOWN = 0x00000001, // 0 client doesn't display cooldown in tooltip for these spells SPELL_ATTR6_ONLY_IN_ARENA = 0x00000002, // 1 only usable in arena SPELL_ATTR6_IGNORE_CASTER_AURAS = 0x00000004, // 2 - SPELL_ATTR6_UNK3 = 0x00000008, // 3 + SPELL_ATTR6_ASSIST_IGNORE_IMMUNE_FLAG = 0x00000008, // 3 skips checking UNIT_FLAG_IMMUNE_TO_PC and UNIT_FLAG_IMMUNE_TO_NPC flags on assist SPELL_ATTR6_UNK4 = 0x00000010, // 4 SPELL_ATTR6_UNK5 = 0x00000020, // 5 - SPELL_ATTR6_UNK6 = 0x00000040, // 6 + SPELL_ATTR6_USE_SPELL_CAST_EVENT = 0x00000040, // 6 Auras with this attribute trigger SPELL_CAST combat log event instead of SPELL_AURA_START (clientside attribute) SPELL_ATTR6_UNK7 = 0x00000080, // 7 SPELL_ATTR6_CANT_TARGET_CROWD_CONTROLLED = 0x00000100, // 8 SPELL_ATTR6_UNK9 = 0x00000200, // 9 @@ -1419,23 +1419,23 @@ public enum SpellAtributeEx6 : uint SPELL_ATTR6_CASTABLE_WHILE_ON_VEHICLE = 0x00001000, // 12 castable while caster is on vehicle SPELL_ATTR6_CAN_TARGET_INVISIBLE = 0x00002000, // 13 ignore visibility requirement for spell target (phases, invisibility, etc.) SPELL_ATTR6_UNK14 = 0x00004000, // 14 - SPELL_ATTR6_UNK15 = 0x00008000, // 15 not set in 3.0.3 + SPELL_ATTR6_UNK15 = 0x00008000, // 15 only 54368, 67892 SPELL_ATTR6_UNK16 = 0x00010000, // 16 - SPELL_ATTR6_UNK17 = 0x00020000, // 17 + SPELL_ATTR6_UNK17 = 0x00020000, // 17 Mount spell SPELL_ATTR6_CAST_BY_CHARMER = 0x00040000, // 18 client won't allow to cast these spells when unit is not possessed && charmer of caster will be original caster - SPELL_ATTR6_UNK19 = 0x00080000, // 19 - SPELL_ATTR6_UNK20 = 0x00100000, // 20 + SPELL_ATTR6_UNK19 = 0x00080000, // 19 only 47488, 50782 + SPELL_ATTR6_UNK20 = 0x00100000, // 20 only 58371, 62218 SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute - SPELL_ATTR6_UNK22 = 0x00400000, // 22 + SPELL_ATTR6_UNK22 = 0x00400000, // 22 only 72054 SPELL_ATTR6_UNK23 = 0x00800000, // 23 SPELL_ATTR6_CAN_TARGET_UNTARGETABLE = 0x01000000, // 24 - SPELL_ATTR6_UNK25 = 0x02000000, // 25 - SPELL_ATTR6_UNK26 = 0x04000000, // 26 + SPELL_ATTR6_UNK25 = 0x02000000, // 25 Exorcism, Flash of Light + SPELL_ATTR6_UNK26 = 0x04000000, // 26 related to player castable positive buff SPELL_ATTR6_UNK27 = 0x08000000, // 27 - SPELL_ATTR6_UNK28 = 0x10000000, // 28 + SPELL_ATTR6_UNK28 = 0x10000000, // 28 Death Grip SPELL_ATTR6_NO_DONE_PCT_DAMAGE_MODS = 0x20000000, // 29 ignores done percent damage mods? SPELL_ATTR6_UNK30 = 0x40000000, // 30 - SPELL_ATTR6_UNK31 = 0x80000000 // 31 + SPELL_ATTR6_IGNORE_CATEGORY_COOLDOWN_MODS = 0x80000000 // 31 Spells with this attribute skip applying modifiers to category cooldowns }; [Flags] @@ -1447,7 +1447,7 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_UNK1 = 0x00000002, // 1 Not set in 3.2.2a. SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // 2 Paladin's auras and 65607 only. SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS - SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 66109 test spell. + SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 47883 (Soulstone Resurrection) and test spell. SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell. @@ -1463,17 +1463,17 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell. SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects. SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones. - SPELL_ATTR7_UNK20 = 0x00100000, // 20 - SPELL_ATTR7_UNK21 = 0x00200000, // 21 + SPELL_ATTR7_UNK20 = 0x00100000, // 20 Blink, Divine Shield, Ice Block + SPELL_ATTR7_UNK21 = 0x00200000, // 21 Not set SPELL_ATTR7_UNK22 = 0x00400000, // 22 - SPELL_ATTR7_UNK23 = 0x00800000, // 23 - SPELL_ATTR7_UNK24 = 0x01000000, // 24 + SPELL_ATTR7_UNK23 = 0x00800000, // 23 Motivate, Mutilate, Shattering Throw + SPELL_ATTR7_UNK24 = 0x01000000, // 24 Motivate, Mutilate, Perform Speech, Shattering Throw SPELL_ATTR7_UNK25 = 0x02000000, // 25 SPELL_ATTR7_UNK26 = 0x04000000, // 26 - SPELL_ATTR7_UNK27 = 0x08000000, // 27 - SPELL_ATTR7_UNK28 = 0x10000000, // 28 - SPELL_ATTR7_UNK29 = 0x20000000, // 29 - SPELL_ATTR7_UNK30 = 0x40000000, // 30 + SPELL_ATTR7_UNK27 = 0x08000000, // 27 Not set + SPELL_ATTR7_CONSOLIDATED_RAID_BUFF = 0x10000000, // 28 May be collapsed in raid buff frame (clientside attribute) + SPELL_ATTR7_UNK29 = 0x20000000, // 29 only 69028, 71237 + SPELL_ATTR7_UNK30 = 0x40000000, // 30 Burning Determination, Divine Sacrifice, Earth Shield, Prayer of Mending SPELL_ATTR7_UNK31 = 0x80000000 // 31 }; From a7fca901fcfae591c5b0e20112d1e3b0baac69ea Mon Sep 17 00:00:00 2001 From: Vincent_Michael Date: Sat, 2 Mar 2013 14:44:10 +0100 Subject: [PATCH 41/58] Update 4.3.4 spell enums --- SpellWork/Spell/SpellEnums.cs | 287 +++++++++++++++++----------------- 1 file changed, 143 insertions(+), 144 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index cbcbbb89..7607aeec 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -68,7 +68,7 @@ public enum SpellEffects SPELL_EFFECT_INSTAKILL = 1, SPELL_EFFECT_SCHOOL_DAMAGE = 2, SPELL_EFFECT_DUMMY = 3, - SPELL_EFFECT_PORTAL_TELEPORT = 4, + SPELL_EFFECT_PORTAL_TELEPORT = 4, // Unused (4.3.4) SPELL_EFFECT_TELEPORT_UNITS = 5, SPELL_EFFECT_APPLY_AURA = 6, SPELL_EFFECT_ENVIRONMENTAL_DAMAGE = 7, @@ -77,9 +77,9 @@ public enum SpellEffects SPELL_EFFECT_HEAL = 10, SPELL_EFFECT_BIND = 11, SPELL_EFFECT_PORTAL = 12, - SPELL_EFFECT_RITUAL_BASE = 13, - SPELL_EFFECT_RITUAL_SPECIALIZE = 14, - SPELL_EFFECT_RITUAL_ACTIVATE_PORTAL = 15, + SPELL_EFFECT_RITUAL_BASE = 13, // Unused (4.3.4) + SPELL_EFFECT_RITUAL_SPECIALIZE = 14, // Unused (4.3.4) + SPELL_EFFECT_RITUAL_ACTIVATE_PORTAL = 15, // Unused (4.3.4) SPELL_EFFECT_QUEST_COMPLETE = 16, SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL = 17, SPELL_EFFECT_RESURRECT = 18, @@ -109,14 +109,14 @@ public enum SpellEffects SPELL_EFFECT_JUMP_DEST = 42, SPELL_EFFECT_TELEPORT_UNITS_FACE_CASTER = 43, SPELL_EFFECT_SKILL_STEP = 44, - SPELL_EFFECT_ADD_HONOR = 45, + SPELL_EFFECT_PLAY_MOVIE = 45, SPELL_EFFECT_SPAWN = 46, SPELL_EFFECT_TRADE_SKILL = 47, SPELL_EFFECT_STEALTH = 48, SPELL_EFFECT_DETECT = 49, SPELL_EFFECT_TRANS_DOOR = 50, - SPELL_EFFECT_FORCE_CRITICAL_HIT = 51, - SPELL_EFFECT_GUARANTEE_HIT = 52, + SPELL_EFFECT_FORCE_CRITICAL_HIT = 51, // Unused (4.3.4) + SPELL_EFFECT_GUARANTEE_HIT = 52, // Unused (4.3.4) SPELL_EFFECT_ENCHANT_ITEM = 53, SPELL_EFFECT_ENCHANT_ITEM_TEMPORARY = 54, SPELL_EFFECT_TAMECREATURE = 55, @@ -186,7 +186,7 @@ public enum SpellEffects SPELL_EFFECT_APPLY_AREA_AURA_PET = 119, SPELL_EFFECT_TELEPORT_GRAVEYARD = 120, SPELL_EFFECT_NORMALIZED_WEAPON_DMG = 121, - SPELL_EFFECT_122 = 122, + SPELL_EFFECT_122 = 122, // Unused (4.3.4) SPELL_EFFECT_SEND_TAXI = 123, SPELL_EFFECT_PULL_TOWARDS = 124, SPELL_EFFECT_MODIFY_THREAT_PERCENT = 125, @@ -227,7 +227,7 @@ public enum SpellEffects SPELL_EFFECT_160 = 160, SPELL_EFFECT_TALENT_SPEC_COUNT = 161, SPELL_EFFECT_TALENT_SPEC_SELECT = 162, - SPELL_EFFECT_163 = 163, + SPELL_EFFECT_163 = 163, // Unused (4.3.4) SPELL_EFFECT_REMOVE_AURA = 164, SPELL_EFFECT_DAMAGE_FROM_MAX_HEALTH_PCT = 165, SPELL_EFFECT_GIVE_CURRENCY = 166, @@ -235,17 +235,17 @@ public enum SpellEffects SPELL_EFFECT_168 = 168, SPELL_EFFECT_DESTROY_ITEM = 169, SPELL_EFFECT_170 = 170, - SPELL_EFFECT_171 = 171, // Summons gamebject - SPELL_EFFECT_172 = 172, // Aoe ressurection - SPELL_EFFECT_UNLOCK_GUILD_VAULT_TAB = 173, // Guild tab unlocked (guild perk) - SPELL_EFFECT_174 = 174, // - SPELL_EFFECT_175 = 175, // Unused (4.2.2) - SPELL_EFFECT_176 = 176, // Some kind of sanctuary effect (Vanish) + SPELL_EFFECT_171 = 171, // Summons gameobject + SPELL_EFFECT_RESURRECT_WITH_AURA = 172, + SPELL_EFFECT_UNLOCK_GUILD_VAULT_TAB = 173, // Guild tab unlocked (guild perk) + SPELL_EFFECT_174 = 174, + SPELL_EFFECT_175 = 175, // Unused (4.3.4) + SPELL_EFFECT_176 = 176, // Some kind of sanctuary effect (Vanish) SPELL_EFFECT_177 = 177, - SPELL_EFFECT_178 = 178, + SPELL_EFFECT_178 = 178, // Unused (4.3.4) SPELL_EFFECT_CREATE_AREATRIGGER = 179, - SPELL_EFFECT_180 = 180, - SPELL_EFFECT_181 = 181, + SPELL_EFFECT_180 = 180, // Unused (4.3.4) + SPELL_EFFECT_181 = 181, // Unused (4.3.4) SPELL_EFFECT_182 = 182, TOTAL_SPELL_EFFECTS = 183 }; @@ -396,7 +396,7 @@ public enum AuraType SPELL_AURA_MOD_MELEE_HASTE = 138, SPELL_AURA_FORCE_REACTION = 139, SPELL_AURA_MOD_RANGED_HASTE = 140, - SPELL_AURA_MOD_RANGED_AMMO_HASTE = 141, + SPELL_AURA_141 = 141, // old SPELL_AURA_MOD_RANGED_AMMO_HASTE, unused now SPELL_AURA_MOD_BASE_RESISTANCE_PCT = 142, SPELL_AURA_MOD_RESISTANCE_EXCLUSIVE = 143, SPELL_AURA_SAFE_FALL = 144, @@ -408,14 +408,14 @@ public enum AuraType SPELL_AURA_MOD_SHIELD_BLOCKVALUE_PCT = 150, SPELL_AURA_TRACK_STEALTHED = 151, // Track Stealthed SPELL_AURA_MOD_DETECTED_RANGE = 152, // Mod Detected Range - SPELL_AURA_SPLIT_DAMAGE_FLAT = 153, // Split Damage Flat + SPELL_AURA_153 = 153, // old SPELL_AURA_SPLIT_DAMAGE_FLAT. unused 4.3.4 SPELL_AURA_MOD_STEALTH_LEVEL = 154, // Stealth Level Modifier SPELL_AURA_MOD_WATER_BREATHING = 155, // Mod Water Breathing SPELL_AURA_MOD_REPUTATION_GAIN = 156, // Mod Reputation Gain SPELL_AURA_PET_DAMAGE_MULTI = 157, // Mod Pet Damage SPELL_AURA_MOD_SHIELD_BLOCKVALUE = 158, SPELL_AURA_NO_PVP_CREDIT = 159, - SPELL_AURA_MOD_AOE_AVOIDANCE = 160, + SPELL_AURA_160 = 160, // old SPELL_AURA_MOD_AOE_AVOIDANCE. Unused 4.3.4 SPELL_AURA_MOD_HEALTH_REGEN_IN_COMBAT = 161, SPELL_AURA_POWER_BURN = 162, SPELL_AURA_MOD_CRIT_DAMAGE_BONUS = 163, @@ -424,7 +424,7 @@ public enum AuraType SPELL_AURA_MOD_ATTACK_POWER_PCT = 166, SPELL_AURA_MOD_RANGED_ATTACK_POWER_PCT = 167, SPELL_AURA_MOD_DAMAGE_DONE_VERSUS = 168, - SPELL_AURA_MOD_CRIT_PERCENT_VERSUS = 169, + SPELL_AURA_169 = 169, // old SPELL_AURA_MOD_CRIT_PERCENT_VERSUS. unused 4.3.4 SPELL_AURA_DETECT_AMORE = 170, SPELL_AURA_MOD_SPEED_NOT_STACK = 171, SPELL_AURA_MOD_MOUNTED_SPEED_NOT_STACK = 172, @@ -433,7 +433,7 @@ public enum AuraType SPELL_AURA_MOD_SPELL_HEALING_OF_STAT_PERCENT = 175, SPELL_AURA_SPIRIT_OF_REDEMPTION = 176, SPELL_AURA_AOE_CHARM = 177, - SPELL_AURA_MOD_DEBUFF_RESISTANCE = 178, + SPELL_AURA_178 = 178, // old SPELL_AURA_MOD_DEBUFF_RESISTANCE, unused SPELL_AURA_MOD_ATTACKER_SPELL_CRIT_CHANCE = 179, SPELL_AURA_MOD_FLAT_SPELL_DAMAGE_VERSUS = 180, SPELL_AURA_181 = 181, // old SPELL_AURA_MOD_FLAT_SPELL_CRIT_DAMAGE_VERSUS - possible flat spell crit damage versus @@ -454,20 +454,20 @@ public enum AuraType SPELL_AURA_MOD_COOLDOWN = 196, // only 24818 Noxious Breath SPELL_AURA_MOD_ATTACKER_SPELL_AND_WEAPON_CRIT_CHANCE= 197, SPELL_AURA_198 = 198, // old SPELL_AURA_MOD_ALL_WEAPON_SKILLS - SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT = 199, + SPELL_AURA_199 = 199, // old SPELL_AURA_MOD_INCREASES_SPELL_PCT_TO_HIT. unused 4.3.4 SPELL_AURA_MOD_XP_PCT = 200, SPELL_AURA_FLY = 201, SPELL_AURA_IGNORE_COMBAT_RESULT = 202, SPELL_AURA_MOD_ATTACKER_MELEE_CRIT_DAMAGE = 203, SPELL_AURA_MOD_ATTACKER_RANGED_CRIT_DAMAGE = 204, SPELL_AURA_MOD_SCHOOL_CRIT_DMG_TAKEN = 205, - SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED = 206, // ? used in strange spells + SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED = 206, SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED = 207, SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED = 208, SPELL_AURA_MOD_MOUNTED_FLIGHT_SPEED_ALWAYS = 209, - SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS = 210, // unused + SPELL_AURA_MOD_VEHICLE_SPEED_ALWAYS = 210, SPELL_AURA_MOD_FLIGHT_SPEED_NOT_STACK = 211, - SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT = 212, + SPELL_AURA_212 = 212, // old SPELL_AURA_MOD_RANGED_ATTACK_POWER_OF_STAT_PERCENT. unused 4.3.4 SPELL_AURA_MOD_RAGE_FROM_DAMAGE_DEALT = 213, SPELL_AURA_214 = 214, SPELL_AURA_ARENA_PREPARATION = 215, @@ -485,7 +485,7 @@ public enum AuraType SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE = 227, SPELL_AURA_DETECT_STEALTH = 228, SPELL_AURA_MOD_AOE_DAMAGE_AVOIDANCE = 229, - SPELL_AURA_230 = 230, + SPELL_AURA_MOD_MAX_HEALTH = 230, SPELL_AURA_PROC_TRIGGER_SPELL_WITH_VALUE = 231, SPELL_AURA_MECHANIC_DURATION_MOD = 232, SPELL_AURA_CHANGE_MODEL_FOR_ALL_HUMANOIDS = 233, // client-side only @@ -514,7 +514,7 @@ public enum AuraType SPELL_AURA_NO_REAGENT_USE = 256, SPELL_AURA_MOD_TARGET_RESIST_BY_SPELL_CLASS = 257, SPELL_AURA_258 = 258, - SPELL_AURA_MOD_HOT_PCT = 259, + SPELL_AURA_259 = 259, // old SPELL_AURA_MOD_HOT_PCT, unused 4.3.4 SPELL_AURA_SCREEN_EFFECT = 260, SPELL_AURA_PHASE = 261, SPELL_AURA_ABILITY_IGNORE_AURASTATE = 262, @@ -523,19 +523,19 @@ public enum AuraType SPELL_AURA_265 = 265, SPELL_AURA_266 = 266, SPELL_AURA_MOD_IMMUNE_AURA_APPLY_SCHOOL = 267, - SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT = 268, + SPELL_AURA_268 = 268, // old SPELL_AURA_MOD_ATTACK_POWER_OF_STAT_PERCENT. unused 4.3.4 SPELL_AURA_MOD_IGNORE_TARGET_RESIST = 269, - SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST = 270, // Possibly need swap vs 195 aura used only in 1 spell Chaos Bolt Passive + SPELL_AURA_270 = 270, // old SPELL_AURA_MOD_ABILITY_IGNORE_TARGET_RESIST, unused 4.3.4 SPELL_AURA_MOD_DAMAGE_FROM_CASTER = 271, SPELL_AURA_IGNORE_MELEE_RESET = 272, SPELL_AURA_X_RAY = 273, - SPELL_AURA_ABILITY_CONSUME_NO_AMMO = 274, + SPELL_AURA_274 = 274, // old SPELL_AURA_ABILITY_CONSUME_NO_AMMO, unused 4.3.4 SPELL_AURA_MOD_IGNORE_SHAPESHIFT = 275, - SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC = 276, // Only "Test Mod Damage % Mechanic" spell, possible mod damage done - SPELL_AURA_MOD_MAX_AFFECTED_TARGETS = 277, + SPELL_AURA_MOD_DAMAGE_DONE_FOR_MECHANIC = 276, + SPELL_AURA_277 = 277, // old SPELL_AURA_MOD_MAX_AFFECTED_TARGETS. unused 4.3.4 SPELL_AURA_MOD_DISARM_RANGED = 278, SPELL_AURA_INITIALIZE_IMAGES = 279, - SPELL_AURA_MOD_ARMOR_PENETRATION_PCT = 280, + SPELL_AURA_280 = 280, // old SPELL_AURA_MOD_ARMOR_PENETRATION_PCT unused 4.3.4 SPELL_AURA_MOD_HONOR_GAIN_PCT = 281, SPELL_AURA_MOD_BASE_HEALTH_PCT = 282, SPELL_AURA_MOD_HEALING_RECEIVED = 283, // Possibly only for some spell family class spells @@ -564,68 +564,68 @@ public enum AuraType SPELL_AURA_306 = 306, SPELL_AURA_HEAL_ABSORB_TEST = 307, SPELL_AURA_MOD_CRIT_CHANCE_FOR_CASTER = 308, - SPELL_AURA_309 = 309, + SPELL_AURA_309 = 309, // Not used in 4.3.4 SPELL_AURA_MOD_CREATURE_AOE_DAMAGE_AVOIDANCE = 310, SPELL_AURA_311 = 311, SPELL_AURA_ANIM_REPLACEMENT_SET = 312, - SPELL_AURA_313 = 313, + SPELL_AURA_313 = 313, // Not used in 4.3.4 - related to mounts SPELL_AURA_PREVENT_RESURRECTION = 314, SPELL_AURA_UNDERWATER_WALKING = 315, - SPELL_AURA_PERIODIC_HASTE = 316, + SPELL_AURA_PERIODIC_HASTE = 316, // Not used in 4.3.4 (name from 3.3.5a) SPELL_AURA_MOD_SPELL_POWER_PCT = 317, SPELL_AURA_MASTERY = 318, SPELL_AURA_MOD_MELEE_HASTE_3 = 319, - SPELL_AURA_MOD_RANGED_ATTACK_SPEED = 320, // NYI + SPELL_AURA_MOD_RANGED_HASTE_2 = 320, SPELL_AURA_321 = 321, - SPELL_AURA_INTERFERE_TARGETTING = 322, // NYI - SPELL_AURA_323 = 323, - SPELL_AURA_324 = 324, // spell critical chance (probably by school mask) - SPELL_AURA_325 = 325, - SPELL_AURA_326 = 326, // phase related - SPELL_AURA_327 = 327, + SPELL_AURA_INTERFERE_TARGETTING = 322, // NYI + SPELL_AURA_323 = 323, // Not used in 4.3.4 + SPELL_AURA_324 = 324, // spell critical chance (probably by school mask) + SPELL_AURA_325 = 325, // Not used in 4.3.4 + SPELL_AURA_326 = 326, // phase related + SPELL_AURA_327 = 327, // Not used in 4.3.4 SPELL_AURA_PROC_ON_POWER_AMOUNT = 328, - SPELL_AURA_MOD_RUNE_REGEN_SPEED = 329, // NYI - SPELL_AURA_CAST_WHILE_WALKING = 330, // NYI + SPELL_AURA_MOD_RUNE_REGEN_SPEED = 329, // NYI + SPELL_AURA_CAST_WHILE_WALKING = 330, SPELL_AURA_FORCE_WEATHER = 331, - SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS = 332, // NYI - SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2 = 333, // NYI - SPELL_AURA_MOD_BLIND = 334, + SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS = 332, + SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2 = 333, + SPELL_AURA_MOD_BLIND = 334, // NYI SPELL_AURA_335 = 335, - SPELL_AURA_MOD_FLYING_RESTRICTIONS = 336, // NYI - SPELL_AURA_MOD_VENDOR_ITEMS_PRICES = 337, // NYI + SPELL_AURA_MOD_FLYING_RESTRICTIONS = 336, // NYI + SPELL_AURA_MOD_VENDOR_ITEMS_PRICES = 337, SPELL_AURA_MOD_DURABILITY_LOSS = 338, - SPELL_AURA_INCREASE_SKILL_GAIN_CHANCE = 339, // NYI - SPELL_AURA_MOD_RESURRECTED_HEALTH_BY_GUILD_MEMBER = 340, - SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN = 341, // cooldown decrease - SPELL_AURA_MOD_TIME_BETWEEN_ATTACKS = 342, // (attack speed) NYI + SPELL_AURA_INCREASE_SKILL_GAIN_CHANCE = 339, // NYI + SPELL_AURA_MOD_RESURRECTED_HEALTH_BY_GUILD_MEMBER = 340, // Increases health gained when resurrected by a guild member by X + SPELL_AURA_MOD_SPELL_CATEGORY_COOLDOWN = 341, // NYI + SPELL_AURA_MOD_MELEE_RANGED_HASTE_2 = 342, SPELL_AURA_343 = 343, - SPELL_AURA_MOD_AUTOATTACK_DAMAGE = 344, + SPELL_AURA_MOD_AUTOATTACK_DAMAGE = 344, // NYI SPELL_AURA_BYPASS_ARMOR_FOR_CASTER = 345, - SPELL_AURA_PROGRESS_BAR = 346, // NYI - SPELL_AURA_MOD_SPELL_COOLDOWN_BY_HASTE = 347, // NYI - SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT = 348, // NYI - SPELL_AURA_MOD_CURRENCY_GAIN = 349, // NYI - SPELL_AURA_MOD_GATHERING_ITEMS_GAINED_PERCENT = 350, // NYI + SPELL_AURA_ENABLE_ALT_POWER = 346, // NYI + SPELL_AURA_MOD_SPELL_COOLDOWN_BY_HASTE = 347, // NYI + SPELL_AURA_DEPOSIT_BONUS_MONEY_IN_GUILD_BANK_ON_LOOT= 348, // NYI + SPELL_AURA_MOD_CURRENCY_GAIN = 349, + SPELL_AURA_MOD_GATHERING_ITEMS_GAINED_PERCENT = 350, // NYI SPELL_AURA_351 = 351, SPELL_AURA_352 = 352, - SPELL_AURA_MOD_CAMOUFLAGE = 353, // NYI - SPELL_AURA_354 = 354, + SPELL_AURA_MOD_CAMOUFLAGE = 353, // NYI + SPELL_AURA_354 = 354, // Restoration Shaman mastery - mod healing based on target's health (less = more healing) SPELL_AURA_355 = 355, - SPELL_AURA_356 = 356, + SPELL_AURA_356 = 356, // Arcane Mage mastery - mod damage based on current mana SPELL_AURA_ENABLE_BOSS1_UNIT_FRAME = 357, SPELL_AURA_WORGEN_ALTERED_FORM = 358, SPELL_AURA_359 = 359, - SPELL_AURA_PROC_TRIGGER_SPELL_COPY = 360, + SPELL_AURA_PROC_TRIGGER_SPELL_COPY = 360, // Procs the same spell that caused this proc (Dragonwrath, Tarecgosa's Rest) SPELL_AURA_PROC_TRIGGER_SPELL_2 = 361, - SPELL_AURA_362 = 362, - SPELL_AURA_MOD_NEXT_SPELL = 363, - SPELL_AURA_364 = 364, - SPELL_AURA_MAX_FAR_CLIP_PLANE = 365, - SPELL_AURA_OVERRIDE_SPELL_POWER_BY_AP_PCT = 366, + SPELL_AURA_362 = 362, // Not used in 4.3.4 + SPELL_AURA_MOD_NEXT_SPELL = 363, // Used by 101601 Throw Totem - causes the client to initialize spell cast with specified spell + SPELL_AURA_364 = 364, // Not used in 4.3.4 + SPELL_AURA_MAX_FAR_CLIP_PLANE = 365, // Overrides client's View Distance setting to max("Fair", current_setting) and turns off terrain display + SPELL_AURA_OVERRIDE_SPELL_POWER_BY_AP_PCT = 366, // NYI - Sets spellpower equal to % of attack power, discarding all other bonuses (from gear and buffs) SPELL_AURA_367 = 367, - SPELL_AURA_368 = 368, + SPELL_AURA_368 = 368, // Not used in 4.3.4 SPELL_AURA_ENABLE_POWER_BAR_TIMER = 369, - SPELL_AURA_SET_FAIR_FAR_CLIP = 370, + SPELL_AURA_SET_FAIR_FAR_CLIP = 370, // Overrides client's View Distance setting to max("Fair", current_setting) TOTAL_AURAS = 371 } @@ -1319,7 +1319,7 @@ public enum SpellAtributeEx : uint SPELL_ATTR1_UNK27 = 0x08000000, // 27 melee spell? SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR = 0x10000000, // 28 client doesn't display these spells in aura bar SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME = 0x20000000, // 29 spell name is displayed in cast bar instead of 'channeling' text - SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite + SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower SPELL_ATTR1_UNK31 = 0x80000000 // 31 }; @@ -1356,7 +1356,7 @@ public enum SpellAtributeEx2 : uint SPELL_ATTR2_UNK25 = 0x02000000, // 25 SPELL_ATTR2_UNK26 = 0x04000000, // 26 unaffected by school immunity SPELL_ATTR2_UNK27 = 0x08000000, // 27 - SPELL_ATTR2_UNK28 = 0x10000000, // 28 no breaks stealth if it fails?? + SPELL_ATTR2_UNK28 = 0x10000000, // 28 SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // 30 spell can trigger even if triggered SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed) @@ -1422,7 +1422,7 @@ public enum SpellAtributeEx4 : uint SPELL_ATTR4_UNK13 = 0x00002000, // 13 SPELL_ATTR4_DAMAGE_DOESNT_BREAK_AURAS = 0x00004000, // 14 doesn't break auras by damage from these spells SPELL_ATTR4_UNK15 = 0x00008000, // 15 - SPELL_ATTR4_NOT_USABLE_IN_ARENA = 0x00010000, // 16 + SPELL_ATTR4_NOT_USABLE_IN_ARENA_OR_RATED_BG = 0x00010000, // 16 Cannot be used in both Arenas or Rated Battlegrounds SPELL_ATTR4_USABLE_IN_ARENA = 0x00020000, // 17 SPELL_ATTR4_AREA_TARGET_CHAIN = 0x00040000, // 18 (NYI)hits area targets one after another instead of all at once SPELL_ATTR4_UNK19 = 0x00080000, // 19 proc dalayed, after damage or don't proc on absorb? @@ -1472,8 +1472,8 @@ public enum SpellAtributeEx5 : uint SPELL_ATTR5_UNK24 = 0x01000000, // 24 SPELL_ATTR5_UNK25 = 0x02000000, // 25 SPELL_ATTR5_UNK26 = 0x04000000, // 26 aoe related - Boulder, Cannon, Corpse Explosion, Fire Nova, Flames, Frost Bomb, Living Bomb, Seed of Corruption, Starfall, Thunder Clap, Volley - SPELL_ATTR5_UNK27 = 0x08000000, // 27 - SPELL_ATTR5_UNK28 = 0x10000000, // 28 + SPELL_ATTR5_DONT_SHOW_AURA_IF_SELF_CAST = 0x08000000, // 27 Auras with this attribute are not visible on units that are the caster + SPELL_ATTR5_DONT_SHOW_AURA_IF_NOT_SELF_CAST = 0x10000000, // 28 Auras with this attribute are not visible on units that are not the caster SPELL_ATTR5_UNK29 = 0x20000000, // 29 SPELL_ATTR5_UNK30 = 0x40000000, // 30 SPELL_ATTR5_UNK31 = 0x80000000 // 31 Forces all nearby enemies to focus attacks caster @@ -1504,7 +1504,7 @@ public enum SpellAtributeEx6 : uint SPELL_ATTR6_UNK17 = 0x00020000, // 17 Mount spell SPELL_ATTR6_CAST_BY_CHARMER = 0x00040000, // 18 client won't allow to cast these spells when unit is not possessed && charmer of caster will be original caster SPELL_ATTR6_UNK19 = 0x00080000, // 19 only 47488, 50782 - SPELL_ATTR6_UNK20 = 0x00100000, // 20 only 58371, 62218 + SPELL_ATTR6_ONLY_VISIBLE_TO_CASTER = 0x00100000, // 20 Auras with this attribute are only visible to their caster (or pet's owner) SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute SPELL_ATTR6_UNK22 = 0x00400000, // 22 only 72054 SPELL_ATTR6_UNK23 = 0x00800000, // 23 @@ -1523,12 +1523,11 @@ public enum SpellAtributeEx7 : uint { SPELL_ATTR7_ALL = 0xFFFFFFFF, SPELL_ATTR7_NONE = 0x00000000, - SPELL_ATTR7_UNK0 = 0x00000001, // 0 Shaman's new spells (Call of the ...), Feign Death. SPELL_ATTR7_UNK1 = 0x00000002, // 1 Not set in 3.2.2a. SPELL_ATTR7_REACTIVATE_AT_RESURRECT = 0x00000004, // 2 Paladin's auras and 65607 only. SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 47883 (Soulstone Resurrection) and test spell. - SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. + SPELL_ATTR7_SUMMON_TOTEM = 0x00000020, // 5 Only Shaman totems. SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell. SPELL_ATTR7_HORDE_ONLY = 0x00000100, // 8 Teleports, mounts and other spells. @@ -1554,64 +1553,64 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_CONSOLIDATED_RAID_BUFF = 0x10000000, // 28 May be collapsed in raid buff frame (clientside attribute) SPELL_ATTR7_UNK29 = 0x20000000, // 29 only 69028, 71237 SPELL_ATTR7_UNK30 = 0x40000000, // 30 Burning Determination, Divine Sacrifice, Earth Shield, Prayer of Mending - SPELL_ATTR7_UNK31 = 0x80000000 // 31 + SPELL_ATTR7_CLIENT_INDICATOR = 0x80000000 // 31 }; [Flags] public enum SpellAtributeEx8 : uint { - SPELL_ATTR8_UNK0 = 0x00000001, // 0 - SPELL_ATTR8_UNK1 = 0x00000002, // 1 - SPELL_ATTR8_UNK2 = 0x00000004, // 2 - SPELL_ATTR8_UNK3 = 0x00000008, // 3 - SPELL_ATTR8_UNK4 = 0x00000010, // 4 - SPELL_ATTR8_UNK5 = 0x00000020, // 5 - SPELL_ATTR8_UNK6 = 0x00000040, // 6 - SPELL_ATTR8_UNK7 = 0x00000080, // 7 - SPELL_ATTR8_UNK8 = 0x00000100, // 8 - SPELL_ATTR8_UNK9 = 0x00000200, // 9 - SPELL_ATTR8_UNK10 = 0x00000400, // 10 + SPELL_ATTR8_CANT_MISS = 0x00000001, // 0 + SPELL_ATTR8_UNK1 = 0x00000002, // 1 + SPELL_ATTR8_UNK2 = 0x00000004, // 2 + SPELL_ATTR8_UNK3 = 0x00000008, // 3 + SPELL_ATTR8_UNK4 = 0x00000010, // 4 + SPELL_ATTR8_UNK5 = 0x00000020, // 5 + SPELL_ATTR8_UNK6 = 0x00000040, // 6 + SPELL_ATTR8_UNK7 = 0x00000080, // 7 + SPELL_ATTR8_AFFECT_PARTY_AND_RAID = 0x00000100, // 8 Nearly all spells have "all party and raid" in description + SPELL_ATTR8_DONT_RESET_PERIODIC_TIMER = 0x00000200, // 9 Periodic auras with this flag keep old periodic timer when refreshing at close to one tick remaining (kind of anti DoT clipping) + SPELL_ATTR8_NAME_CHANGED_DURING_TRANSFORM = 0x00000400, // 10 according to wowhead comments, name changes, title remains SPELL_ATTR8_UNK11 = 0x00000800, // 11 SPELL_ATTR8_AURA_SEND_AMOUNT = 0x00001000, // 12 Aura must have flag AFLAG_ANY_EFFECT_AMOUNT_SENT to send amount SPELL_ATTR8_UNK13 = 0x00002000, // 13 SPELL_ATTR8_UNK14 = 0x00004000, // 14 - SPELL_ATTR8_UNK15 = 0x00008000, // 15 + SPELL_ATTR8_WATER_MOUNT = 0x00008000, // 15 only one River Boat used in Thousand Needles SPELL_ATTR8_UNK16 = 0x00010000, // 16 SPELL_ATTR8_UNK17 = 0x00020000, // 17 - SPELL_ATTR8_UNK18 = 0x00040000, // 18 - SPELL_ATTR8_UNK19 = 0x00080000, // 19 + SPELL_ATTR8_REMEMBER_SPELLS = 0x00040000, // 18 at some point in time, these auras remember spells and allow to cast them later + SPELL_ATTR8_USE_COMBO_POINTS_ON_ANY_TARGET = 0x00080000, // 19 allows to consume combo points from dead targets SPELL_ATTR8_ARMOR_SPECIALIZATION = 0x00100000, // 20 SPELL_ATTR8_UNK21 = 0x00200000, // 21 SPELL_ATTR8_UNK22 = 0x00400000, // 22 SPELL_ATTR8_UNK23 = 0x00800000, // 23 - SPELL_ATTR8_UNK24 = 0x01000000, // 24 + SPELL_ATTR8_HEALING_SPELL = 0x01000000, // 24 SPELL_ATTR8_UNK25 = 0x02000000, // 25 SPELL_ATTR8_RAID_MARKER = 0x04000000, // 26 probably spell no need learn to cast SPELL_ATTR8_UNK27 = 0x08000000, // 27 - SPELL_ATTR8_GUILD_PERKS = 0x10000000, // 28 - SPELL_ATTR8_MASTERY = 0x20000000, // 29 + SPELL_ATTR8_NOT_IN_BG_OR_ARENA = 0x10000000, // 28 not allow to cast or deactivate currently active effect, not sure about Fast Track + SPELL_ATTR8_MASTERY_SPECIALIZATION = 0x20000000, // 29 SPELL_ATTR8_UNK30 = 0x40000000, // 30 - SPELL_ATTR8_UNK31 = 0x80000000 // 31 + SPELL_ATTR8_ATTACK_IGNORE_IMMUNE_TO_PC_FLAG = 0x80000000 // 31 Do not check UNIT_FLAG_IMMUNE_TO_PC in IsValidAttackTarget }; [Flags] public enum SpellAtributeEx9 : uint { - SPELL_ATTR9_UNK0 = 0x00000001, // 0 - SPELL_ATTR9_UNK1 = 0x00000002, // 1 - SPELL_ATTR9_UNK2 = 0x00000004, // 2 - SPELL_ATTR9_UNK3 = 0x00000008, // 3 - SPELL_ATTR9_UNK4 = 0x00000010, // 4 - SPELL_ATTR9_UNK5 = 0x00000020, // 5 - SPELL_ATTR9_UNK6 = 0x00000040, // 6 - SPELL_ATTR9_UNK7 = 0x00000080, // 7 - SPELL_ATTR9_UNK8 = 0x00000100, // 8 - SPELL_ATTR9_UNK9 = 0x00000200, // 9 + SPELL_ATTR9_UNK0 = 0x00000001, // 0 + SPELL_ATTR9_UNK1 = 0x00000002, // 1 + SPELL_ATTR9_RESTRICTED_FLIGHT_AREA = 0x00000004, // 2 Dalaran and Wintergrasp flight area auras have it + SPELL_ATTR9_UNK3 = 0x00000008, // 3 + SPELL_ATTR9_SPECIAL_DELAY_CALCULATION = 0x00000010, // 4 + SPELL_ATTR9_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 + SPELL_ATTR9_UNK6 = 0x00000040, // 6 + SPELL_ATTR9_UNK7 = 0x00000080, // 7 + SPELL_ATTR9_AIMED_SHOT = 0x00000100, // 8 + SPELL_ATTR9_NOT_USABLE_IN_ARENA = 0x00000200, // 9 Cannot be used in arenas SPELL_ATTR9_UNK10 = 0x00000400, // 10 SPELL_ATTR9_UNK11 = 0x00000800, // 11 SPELL_ATTR9_UNK12 = 0x00001000, // 12 - SPELL_ATTR9_UNK13 = 0x00002000, // 13 - SPELL_ATTR9_UNK14 = 0x00004000, // 14 + SPELL_ATTR9_SLAM = 0x00002000, // 13 + SPELL_ATTR9_USABLE_IN_RATED_BATTLEGROUNDS = 0x00004000, // 14 Can be used in Rated Battlegrounds SPELL_ATTR9_UNK15 = 0x00008000, // 15 SPELL_ATTR9_UNK16 = 0x00010000, // 16 SPELL_ATTR9_UNK17 = 0x00020000, // 17 @@ -1634,38 +1633,38 @@ public enum SpellAtributeEx9 : uint [Flags] public enum SpellAtributeEx10 : uint { - SPELL_ATTR10_UNK0 = 0x00000001, // 0 - SPELL_ATTR10_UNK1 = 0x00000002, // 1 - SPELL_ATTR10_UNK2 = 0x00000004, // 2 - SPELL_ATTR10_UNK3 = 0x00000008, // 3 - SPELL_ATTR10_UNK4 = 0x00000010, // 4 - SPELL_ATTR10_UNK5 = 0x00000020, // 5 - SPELL_ATTR10_UNK6 = 0x00000040, // 6 - SPELL_ATTR10_UNK7 = 0x00000080, // 7 - SPELL_ATTR10_UNK8 = 0x00000100, // 8 - SPELL_ATTR10_UNK9 = 0x00000200, // 9 - SPELL_ATTR10_UNK10 = 0x00000400, // 10 - SPELL_ATTR10_UNK11 = 0x00000800, // 11 - SPELL_ATTR10_UNK12 = 0x00001000, // 12 - SPELL_ATTR10_UNK13 = 0x00002000, // 13 - SPELL_ATTR10_UNK14 = 0x00004000, // 14 - SPELL_ATTR10_UNK15 = 0x00008000, // 15 - SPELL_ATTR10_UNK16 = 0x00010000, // 16 - SPELL_ATTR10_UNK17 = 0x00020000, // 17 - SPELL_ATTR10_UNK18 = 0x00040000, // 18 - SPELL_ATTR10_UNK19 = 0x00080000, // 19 - SPELL_ATTR10_UNK20 = 0x00100000, // 20 - SPELL_ATTR10_UNK21 = 0x00200000, // 21 - SPELL_ATTR10_UNK22 = 0x00400000, // 22 - SPELL_ATTR10_UNK23 = 0x00800000, // 23 - SPELL_ATTR10_UNK24 = 0x01000000, // 24 - SPELL_ATTR10_UNK25 = 0x02000000, // 25 - SPELL_ATTR10_UNK26 = 0x04000000, // 26 - SPELL_ATTR10_UNK27 = 0x08000000, // 27 - SPELL_ATTR10_UNK28 = 0x10000000, // 28 - SPELL_ATTR10_UNK29 = 0x20000000, // 29 - SPELL_ATTR10_UNK30 = 0x40000000, // 30 - SPELL_ATTR10_UNK31 = 0x80000000 // 31 + SPELL_ATTR10_UNK0 = 0x00000001, // 0 + SPELL_ATTR10_UNK1 = 0x00000002, // 1 + SPELL_ATTR10_UNK2 = 0x00000004, // 2 + SPELL_ATTR10_UNK3 = 0x00000008, // 3 + SPELL_ATTR10_WATER_SPOUT = 0x00000010, // 4 + SPELL_ATTR10_UNK5 = 0x00000020, // 5 + SPELL_ATTR10_UNK6 = 0x00000040, // 6 + SPELL_ATTR10_TELEPORT_PLAYER = 0x00000080, // 7 4 Teleport Player spells + SPELL_ATTR10_UNK8 = 0x00000100, // 8 + SPELL_ATTR10_UNK9 = 0x00000200, // 9 + SPELL_ATTR10_UNK10 = 0x00000400, // 10 + SPELL_ATTR10_HERB_GATHERING_MINING = 0x00000800, // 11 Only Herb Gathering and Mining + SPELL_ATTR10_UNK12 = 0x00001000, // 12 + SPELL_ATTR10_UNK13 = 0x00002000, // 13 + SPELL_ATTR10_UNK14 = 0x00004000, // 14 + SPELL_ATTR10_UNK15 = 0x00008000, // 15 + SPELL_ATTR10_UNK16 = 0x00010000, // 16 + SPELL_ATTR10_UNK17 = 0x00020000, // 17 + SPELL_ATTR10_UNK18 = 0x00040000, // 18 + SPELL_ATTR10_UNK19 = 0x00080000, // 19 + SPELL_ATTR10_UNK20 = 0x00100000, // 20 + SPELL_ATTR10_UNK21 = 0x00200000, // 21 + SPELL_ATTR10_UNK22 = 0x00400000, // 22 + SPELL_ATTR10_UNK23 = 0x00800000, // 23 + SPELL_ATTR10_UNK24 = 0x01000000, // 24 + SPELL_ATTR10_UNK25 = 0x02000000, // 25 + SPELL_ATTR10_UNK26 = 0x04000000, // 26 + SPELL_ATTR10_UNK27 = 0x08000000, // 27 + SPELL_ATTR10_UNK28 = 0x10000000, // 28 + SPELL_ATTR10_UNK29 = 0x20000000, // 29 + SPELL_ATTR10_UNK30 = 0x40000000, // 30 + SPELL_ATTR10_UNK31 = 0x80000000 // 31 }; [Flags] From 19ff401a687ada447e214f407a344b473407070b Mon Sep 17 00:00:00 2001 From: Warpten Date: Wed, 20 Mar 2013 01:49:37 +0100 Subject: [PATCH 42/58] 4.3.4: Display the full content of SpellDescriptionVariables.cs whenever possible. --- SpellWork/DBC/DBC.cs | 1 + .../SpellDescriptionVariablesEntry.cs | 8 +++++++ SpellWork/Spell/SpellInfo.cs | 22 +++++++++++++++++-- SpellWork/SpellWork.csproj | 1 + 4 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 SpellWork/DBC/Structures/SpellDescriptionVariablesEntry.cs diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index d44f7acf..4bfc10ca 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -35,6 +35,7 @@ public static class DBC public static DBCStorage SpellCategories = new DBCStorage(); public static DBCStorage SpellClassOptions = new DBCStorage(); public static DBCStorage SpellCooldowns = new DBCStorage(); + public static DBCStorage SpellDescriptionVariables = new DBCStorage(); public static DBCStorage SpellDifficulty = new DBCStorage(); public static DBCStorage SpellDuration = new DBCStorage(); public static DBCStorage SpellEffect = new DBCStorage(); diff --git a/SpellWork/DBC/Structures/SpellDescriptionVariablesEntry.cs b/SpellWork/DBC/Structures/SpellDescriptionVariablesEntry.cs new file mode 100644 index 00000000..4b570110 --- /dev/null +++ b/SpellWork/DBC/Structures/SpellDescriptionVariablesEntry.cs @@ -0,0 +1,8 @@ +namespace SpellWork.DBC.Structures +{ + public sealed class SpellDescriptionVariablesEntry + { + public uint Id; + public string Variables; + } +} diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index d6dd9875..6191b4f8 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -33,8 +33,26 @@ private void ViewSpellInfo() _rtb.SetDefaultStyle(); _rtb.AppendFormatLine(_line); - _rtb.AppendFormatLineIfNotNull("Description: {0}", _spell.Description); - _rtb.AppendFormatLine("Description variable ID: {0}", _spell.SpellDescriptionVariableID); + + if (_spell.SpellDescriptionVariableID != 0) + { + var variableQuery = from spellDescriptionVariable in DBC.DBC.SpellDescriptionVariables.Records + where spellDescriptionVariable.Id == _spell.SpellDescriptionVariableID + select new + { + Description = spellDescriptionVariable.Variables + }; + + if (variableQuery.Count() != 0) + { + _rtb.AppendFormatLineIfNotNull("Description: {0}", _spell.Description); + _rtb.AppendFormatLine("Description variable ID: {0}", _spell.SpellDescriptionVariableID); + _rtb.AppendFormatLine("Description variable: {0}", variableQuery.First().Description); + _rtb.AppendFormatLine(_line); + } + } else + _rtb.AppendFormatLineIfNotNull("Description: {0}", _spell.Description); + _rtb.AppendFormatLineIfNotNull("ToolTip: {0}", _spell.ToolTip); _rtb.AppendFormatLineIfNotNull("Modal Next Spell: {0}", _spell.ModalNextSpell); if (_spell.Description != string.Empty && _spell.ToolTip != string.Empty && _spell.ModalNextSpell != 0) diff --git a/SpellWork/SpellWork.csproj b/SpellWork/SpellWork.csproj index c073a7b8..7b61b4f2 100644 --- a/SpellWork/SpellWork.csproj +++ b/SpellWork/SpellWork.csproj @@ -102,6 +102,7 @@ + From f02667820a3e4a3d8f05cdc6e755923dc516351c Mon Sep 17 00:00:00 2001 From: Shauren Date: Mon, 1 Apr 2013 15:23:26 +0200 Subject: [PATCH 43/58] Refactored spell description variable output --- SpellWork/DBC/DBC.cs | 2 +- SpellWork/Spell/SpellInfo.cs | 20 +------------------- SpellWork/Spell/SpellInfoHelper.cs | 24 +++++++++++++++++++++--- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index 4bfc10ca..22d0cb80 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -72,7 +72,7 @@ public static void Load() using (var strm = new FileStream(String.Format("{0}\\{1}.dbc", DbcPath, dbc.Name), FileMode.Open)) dbc.FieldType.GetMethod("Load", new Type[] { typeof(FileStream) }).Invoke(dbc.GetValue(null), new object[] { strm }); } - catch (DirectoryNotFoundException dnfe) + catch (DirectoryNotFoundException) { throw new DirectoryNotFoundException(String.Format("Could not open {0}.dbc!", dbc.Name)); } diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 6191b4f8..0b69ef3f 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -34,25 +34,7 @@ private void ViewSpellInfo() _rtb.AppendFormatLine(_line); - if (_spell.SpellDescriptionVariableID != 0) - { - var variableQuery = from spellDescriptionVariable in DBC.DBC.SpellDescriptionVariables.Records - where spellDescriptionVariable.Id == _spell.SpellDescriptionVariableID - select new - { - Description = spellDescriptionVariable.Variables - }; - - if (variableQuery.Count() != 0) - { - _rtb.AppendFormatLineIfNotNull("Description: {0}", _spell.Description); - _rtb.AppendFormatLine("Description variable ID: {0}", _spell.SpellDescriptionVariableID); - _rtb.AppendFormatLine("Description variable: {0}", variableQuery.First().Description); - _rtb.AppendFormatLine(_line); - } - } else - _rtb.AppendFormatLineIfNotNull("Description: {0}", _spell.Description); - + _rtb.AppendLine(_spell.Description); _rtb.AppendFormatLineIfNotNull("ToolTip: {0}", _spell.ToolTip); _rtb.AppendFormatLineIfNotNull("Modal Next Spell: {0}", _spell.ModalNextSpell); if (_spell.Description != string.Empty && _spell.ToolTip != string.Empty && _spell.ModalNextSpell != 0) diff --git a/SpellWork/Spell/SpellInfoHelper.cs b/SpellWork/Spell/SpellInfoHelper.cs index fb70b2cb..5568ed58 100644 --- a/SpellWork/Spell/SpellInfoHelper.cs +++ b/SpellWork/Spell/SpellInfoHelper.cs @@ -70,7 +70,7 @@ public sealed class SpellInfoHelper public uint ActiveIconID; // 134 m_activeIconID public string SpellName; // 136-151 m_name_lang public string Rank; // 153-168 m_nameSubtext_lang - public string Description; // 170-185 m_description_lang not used + public string _Description; // 170-185 m_description_lang not used public string ToolTip; // 187-202 m_auraDescription_lang not used public uint ManaCostPercentage; // 204 m_manaCostPct public uint StartRecoveryCategory; // 205 m_startRecoveryCategory @@ -175,6 +175,24 @@ public string SpellNameRank public string ScalingText { get { return Scaling != null ? String.Format(" (Level {0})", DBC.DBC.SelectedLevel) : String.Empty; } } + public string Description + { + get + { + var sb = new StringBuilder(); + if (!String.IsNullOrEmpty(_Description)) + sb.AppendFormatLine("Description: {0}", _Description); + + if (SpellDescriptionVariableID == 0 || !DBC.DBC.SpellDescriptionVariables.ContainsKey(SpellDescriptionVariableID)) + return sb.ToString(); + + var sdesc = DBC.DBC.SpellDescriptionVariables[SpellDescriptionVariableID]; + sb.AppendFormatLine("Description variable Id: {0}", sdesc.Id); + sb.AppendFormatLine("Description variable: {0}", sdesc.Variables); + return sb.ToString(); + } + } + public SpellInfoHelper(SpellEntry dbcData) { ID = dbcData.Id; @@ -199,7 +217,7 @@ public SpellInfoHelper(SpellEntry dbcData) ActiveIconID = dbcData.ActiveIconID; SpellName = dbcData.SpellName; Rank = dbcData.Rank; - Description = dbcData.Description; + _Description = dbcData.Description; ToolTip = dbcData.ToolTip; SchoolMask = dbcData.SchoolMask; RuneCostID = dbcData.RuneCostID; @@ -317,7 +335,7 @@ public SpellInfoHelper(SpellEntry dbcData) if (classOptions != null) { ModalNextSpell = classOptions.ModalNextSpell; - Description = String.IsNullOrEmpty(Description) ? classOptions.Description : Description; + _Description = String.IsNullOrEmpty(Description) ? classOptions.Description : _Description; SpellFamilyName = classOptions.SpellFamilyName; SpellFamilyFlags = (uint[])classOptions.SpellFamilyFlags.Clone(); } From 29f7f0d30683ce5980ef72411bea04d7b4126e6f Mon Sep 17 00:00:00 2001 From: Discover- Date: Fri, 6 Sep 2013 09:57:32 +0200 Subject: [PATCH 44/58] Synchronize the spell attributes with TrinityCore's latest changes --- SpellWork/Spell/SpellEnums.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index 4a149026..aa7ee998 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -1239,7 +1239,7 @@ public enum SpellAtributeEx : uint SPELL_ATTR1_UNK27 = 0x08000000, // 27 melee spell? SPELL_ATTR1_DONT_DISPLAY_IN_AURA_BAR = 0x10000000, // 28 client doesn't display these spells in aura bar SPELL_ATTR1_CHANNEL_DISPLAY_SPELL_NAME = 0x20000000, // 29 spell name is displayed in cast bar instead of 'channeling' text - SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower, Wolverine Bite + SPELL_ATTR1_ENABLE_AT_DODGE = 0x40000000, // 30 Overpower SPELL_ATTR1_UNK31 = 0x80000000 // 31 }; @@ -1276,7 +1276,7 @@ public enum SpellAtributeEx2 : uint SPELL_ATTR2_UNK25 = 0x02000000, // 25 SPELL_ATTR2_UNK26 = 0x04000000, // 26 unaffected by school immunity SPELL_ATTR2_UNK27 = 0x08000000, // 27 - SPELL_ATTR2_UNK28 = 0x10000000, // 28 no breaks stealth if it fails?? + SPELL_ATTR2_UNK28 = 0x10000000, // 28 SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // 30 spell can trigger even if triggered SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed) @@ -1392,8 +1392,8 @@ public enum SpellAtributeEx5 : uint SPELL_ATTR5_UNK24 = 0x01000000, // 24 SPELL_ATTR5_UNK25 = 0x02000000, // 25 SPELL_ATTR5_UNK26 = 0x04000000, // 26 aoe related - Boulder, Cannon, Corpse Explosion, Fire Nova, Flames, Frost Bomb, Living Bomb, Seed of Corruption, Starfall, Thunder Clap, Volley - SPELL_ATTR5_UNK27 = 0x08000000, // 27 - SPELL_ATTR5_UNK28 = 0x10000000, // 28 + SPELL_ATTR5_DONT_SHOW_AURA_IF_SELF_CAST = 0x08000000, // 27 Auras with this attribute are not visible on units that are the caster + SPELL_ATTR5_DONT_SHOW_AURA_IF_NOT_SELF_CAST = 0x10000000, // 28 Auras with this attribute are not visible on units that are not the caster SPELL_ATTR5_UNK29 = 0x20000000, // 29 SPELL_ATTR5_UNK30 = 0x40000000, // 30 SPELL_ATTR5_UNK31 = 0x80000000 // 31 Forces all nearby enemies to focus attacks caster @@ -1424,7 +1424,7 @@ public enum SpellAtributeEx6 : uint SPELL_ATTR6_UNK17 = 0x00020000, // 17 Mount spell SPELL_ATTR6_CAST_BY_CHARMER = 0x00040000, // 18 client won't allow to cast these spells when unit is not possessed && charmer of caster will be original caster SPELL_ATTR6_UNK19 = 0x00080000, // 19 only 47488, 50782 - SPELL_ATTR6_UNK20 = 0x00100000, // 20 only 58371, 62218 + SPELL_ATTR6_ONLY_VISIBLE_TO_CASTER = 0x00100000, // 20 Auras with this attribute are only visible to their caster (or pet's owner) SPELL_ATTR6_CLIENT_UI_TARGET_EFFECTS = 0x00200000, // 21 it's only client-side attribute SPELL_ATTR6_UNK22 = 0x00400000, // 22 only 72054 SPELL_ATTR6_UNK23 = 0x00800000, // 23 @@ -1474,7 +1474,7 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_CONSOLIDATED_RAID_BUFF = 0x10000000, // 28 May be collapsed in raid buff frame (clientside attribute) SPELL_ATTR7_UNK29 = 0x20000000, // 29 only 69028, 71237 SPELL_ATTR7_UNK30 = 0x40000000, // 30 Burning Determination, Divine Sacrifice, Earth Shield, Prayer of Mending - SPELL_ATTR7_UNK31 = 0x80000000 // 31 + SPELL_ATTR7_CLIENT_INDICATOR = 0x80000000 // 31 }; [Flags] From 6396eeeb75f765138a478ca9b5bc4c0b5aae1665 Mon Sep 17 00:00:00 2001 From: Discover- Date: Mon, 16 Sep 2013 16:44:23 +0200 Subject: [PATCH 45/58] Don't allow resizing the settings window --- SpellWork/Forms/FormSettings.Designer.cs | 64 ++++++++++++------------ 1 file changed, 33 insertions(+), 31 deletions(-) diff --git a/SpellWork/Forms/FormSettings.Designer.cs b/SpellWork/Forms/FormSettings.Designer.cs index d0ebaad5..3be9ec03 100644 --- a/SpellWork/Forms/FormSettings.Designer.cs +++ b/SpellWork/Forms/FormSettings.Designer.cs @@ -45,9 +45,9 @@ private void InitializeComponent() this._bSaveSettings = new System.Windows.Forms.Button(); this._gbDbSetting.SuspendLayout(); this.SuspendLayout(); - // + // // _gbDbSetting - // + // this._gbDbSetting.Controls.Add(this._tbBase); this._gbDbSetting.Controls.Add(this.label5); this._gbDbSetting.Controls.Add(this._tbPass); @@ -64,90 +64,90 @@ private void InitializeComponent() this._gbDbSetting.TabIndex = 0; this._gbDbSetting.TabStop = false; this._gbDbSetting.Text = "Date Base Connect Settings"; - // + // // _tbBase - // + // this._tbBase.Location = new System.Drawing.Point(54, 126); this._tbBase.Name = "_tbBase"; this._tbBase.Size = new System.Drawing.Size(152, 20); this._tbBase.TabIndex = 4; - // + // // label5 - // + // this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(6, 129); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(31, 13); this.label5.TabIndex = 0; this.label5.Text = "Base"; - // + // // _tbPass - // + // this._tbPass.Location = new System.Drawing.Point(54, 100); this._tbPass.Name = "_tbPass"; this._tbPass.Size = new System.Drawing.Size(152, 20); this._tbPass.TabIndex = 3; this._tbPass.UseSystemPasswordChar = true; - // + // // label4 - // + // this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(6, 103); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(30, 13); this.label4.TabIndex = 0; this.label4.Text = "Pass"; - // + // // _tbUser - // + // this._tbUser.Location = new System.Drawing.Point(54, 74); this._tbUser.Name = "_tbUser"; this._tbUser.Size = new System.Drawing.Size(152, 20); this._tbUser.TabIndex = 2; - // + // // label3 - // + // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(6, 77); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(29, 13); this.label3.TabIndex = 0; this.label3.Text = "User"; - // + // // _tbPort - // + // this._tbPort.Location = new System.Drawing.Point(54, 48); this._tbPort.Name = "_tbPort"; this._tbPort.Size = new System.Drawing.Size(152, 20); this._tbPort.TabIndex = 1; - // + // // label2 - // + // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(6, 51); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(52, 13); this.label2.TabIndex = 0; this.label2.Text = "Port/Pipe"; - // + // // _tbHost - // + // this._tbHost.Location = new System.Drawing.Point(54, 22); this._tbHost.Name = "_tbHost"; this._tbHost.Size = new System.Drawing.Size(152, 20); this._tbHost.TabIndex = 0; - // + // // label1 - // + // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(6, 25); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(29, 13); this.label1.TabIndex = 0; this.label1.Text = "Host"; - // + // // _cbUseDBConnect - // + // this._cbUseDBConnect.AutoSize = true; this._cbUseDBConnect.Location = new System.Drawing.Point(21, 176); this._cbUseDBConnect.Name = "_cbUseDBConnect"; @@ -156,9 +156,9 @@ private void InitializeComponent() this._cbUseDBConnect.Text = "Use DB Connect"; this._cbUseDBConnect.UseVisualStyleBackColor = true; this._cbUseDBConnect.CheckedChanged += new System.EventHandler(this.CbUseDbConnectCheckedChanged); - // + // // _bTestConnect - // + // this._bTestConnect.Location = new System.Drawing.Point(12, 199); this._bTestConnect.Name = "_bTestConnect"; this._bTestConnect.Size = new System.Drawing.Size(95, 23); @@ -166,9 +166,9 @@ private void InitializeComponent() this._bTestConnect.Text = "Test connect"; this._bTestConnect.UseVisualStyleBackColor = true; this._bTestConnect.Click += new System.EventHandler(this.BSaveSettingsClick); - // + // // _bSaveSettings - // + // this._bSaveSettings.Location = new System.Drawing.Point(134, 199); this._bSaveSettings.Name = "_bSaveSettings"; this._bSaveSettings.Size = new System.Drawing.Size(95, 23); @@ -176,17 +176,18 @@ private void InitializeComponent() this._bSaveSettings.Text = "Save"; this._bSaveSettings.UseVisualStyleBackColor = true; this._bSaveSettings.Click += new System.EventHandler(this.BSaveSettingsClick); - // + // // FormSettings - // + // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(234, 230); + this.ClientSize = new System.Drawing.Size(234, 229); this.Controls.Add(this._bSaveSettings); this.Controls.Add(this._bTestConnect); this.Controls.Add(this._cbUseDBConnect); this.Controls.Add(this._gbDbSetting); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; this.MaximizeBox = false; this.MaximumSize = new System.Drawing.Size(250, 268); this.MinimizeBox = false; @@ -196,6 +197,7 @@ private void InitializeComponent() this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "SpellWork Settings"; this.Load += new System.EventHandler(this.SettingsFormLoad); + this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FormSettings_KeyDown); this._gbDbSetting.ResumeLayout(false); this._gbDbSetting.PerformLayout(); this.ResumeLayout(false); From 48c4a122e49ac0a3e7595df6c4cc52ba37e688f4 Mon Sep 17 00:00:00 2001 From: Discover- Date: Mon, 16 Sep 2013 16:44:33 +0200 Subject: [PATCH 46/58] Pressing Escape in the settings form now closes it --- SpellWork/Forms/FormSettings.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/SpellWork/Forms/FormSettings.cs b/SpellWork/Forms/FormSettings.cs index 4d624581..2d3549e2 100644 --- a/SpellWork/Forms/FormSettings.cs +++ b/SpellWork/Forms/FormSettings.cs @@ -30,8 +30,7 @@ private void BSaveSettingsClick(object sender, EventArgs e) if (((Button)sender).Text != @"Save") if (MySqlConnection.Connected) - MessageBox.Show(@"Connection successful!", @"MySQL Connections!", - MessageBoxButtons.OK, MessageBoxIcon.Information); + MessageBox.Show(@"Connection successful!", @"MySQL Connections!", MessageBoxButtons.OK, MessageBoxIcon.Information); if (((Button)sender).Text != @"Save") return; @@ -49,5 +48,11 @@ private void SettingsFormLoad(object sender, EventArgs e) _tbBase.Text = Settings.Default.WorldDbName; _gbDbSetting.Enabled = _cbUseDBConnect.Checked = Settings.Default.UseDbConnect; } + + private void FormSettings_KeyDown(object sender, KeyEventArgs e) + { + if (e.KeyCode == Keys.Escape) + Close(); + } } } From 3b54090d23079acab53e794c940494a01f22e509 Mon Sep 17 00:00:00 2001 From: Discover- Date: Mon, 16 Sep 2013 16:47:54 +0200 Subject: [PATCH 47/58] Rename 'Cencel' buttons to 'Cancel' --- SpellWork/Forms/FormSearch.Designer.cs | 24 ++++++++++++------------ SpellWork/Forms/FormSearch.cs | 2 +- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/SpellWork/Forms/FormSearch.Designer.cs b/SpellWork/Forms/FormSearch.Designer.cs index 3455c522..ca40d095 100644 --- a/SpellWork/Forms/FormSearch.Designer.cs +++ b/SpellWork/Forms/FormSearch.Designer.cs @@ -32,7 +32,7 @@ private void InitializeComponent() this.splitContainer1 = new System.Windows.Forms.SplitContainer(); this._rtbSpellInfo = new System.Windows.Forms.RichTextBox(); this._bOk = new System.Windows.Forms.Button(); - this._bCencel = new System.Windows.Forms.Button(); + this._bCancel = new System.Windows.Forms.Button(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.label3 = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); @@ -70,7 +70,7 @@ private void InitializeComponent() // splitContainer1.Panel2 // this.splitContainer1.Panel2.Controls.Add(this._bOk); - this.splitContainer1.Panel2.Controls.Add(this._bCencel); + this.splitContainer1.Panel2.Controls.Add(this._bCancel); this.splitContainer1.Panel2.Controls.Add(this.groupBox1); this.splitContainer1.Size = new System.Drawing.Size(672, 455); this.splitContainer1.SplitterDistance = 381; @@ -96,16 +96,16 @@ private void InitializeComponent() this._bOk.UseVisualStyleBackColor = true; this._bOk.Click += new System.EventHandler(this.OkClick); // - // _bCencel + // _bCancel // - this._bCencel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this._bCencel.Location = new System.Drawing.Point(128, 425); - this._bCencel.Name = "_bCencel"; - this._bCencel.Size = new System.Drawing.Size(75, 23); - this._bCencel.TabIndex = 10; - this._bCencel.Text = "Cencel"; - this._bCencel.UseVisualStyleBackColor = true; - this._bCencel.Click += new System.EventHandler(this.CencelClick); + this._bCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this._bCancel.Location = new System.Drawing.Point(128, 425); + this._bCancel.Name = "_bCancel"; + this._bCancel.Size = new System.Drawing.Size(75, 23); + this._bCancel.TabIndex = 10; + this._bCancel.Text = "Cancel"; + this._bCancel.UseVisualStyleBackColor = true; + this._bCancel.Click += new System.EventHandler(this.CancelClick); // // groupBox1 // @@ -322,7 +322,7 @@ private void InitializeComponent() private System.Windows.Forms.SplitContainer splitContainer1; private System.Windows.Forms.RichTextBox _rtbSpellInfo; private System.Windows.Forms.Button _bOk; - private System.Windows.Forms.Button _bCencel; + private System.Windows.Forms.Button _bCancel; private System.Windows.Forms.GroupBox groupBox1; private System.Windows.Forms.ListView _lvSpellList; private System.Windows.Forms.GroupBox groupBox2; diff --git a/SpellWork/Forms/FormSearch.cs b/SpellWork/Forms/FormSearch.cs index d5f9026b..8429939e 100644 --- a/SpellWork/Forms/FormSearch.cs +++ b/SpellWork/Forms/FormSearch.cs @@ -104,7 +104,7 @@ private void OkClick(object sender, EventArgs e) Close(); } - private void CencelClick(object sender, EventArgs e) + private void CancelClick(object sender, EventArgs e) { Close(); } From a859b0273f0a53cf7f5a8c57e8aad79caa7b2bb6 Mon Sep 17 00:00:00 2001 From: Discover- Date: Mon, 16 Sep 2013 16:54:42 +0200 Subject: [PATCH 48/58] Add a Search button to the Search form (previously only worked with pressing Enter) --- SpellWork/Forms/FormSearch.Designer.cs | 141 ++++++++++++++----------- SpellWork/Forms/FormSearch.cs | 15 ++- 2 files changed, 88 insertions(+), 68 deletions(-) diff --git a/SpellWork/Forms/FormSearch.Designer.cs b/SpellWork/Forms/FormSearch.Designer.cs index ca40d095..678eef4c 100644 --- a/SpellWork/Forms/FormSearch.Designer.cs +++ b/SpellWork/Forms/FormSearch.Designer.cs @@ -41,52 +41,53 @@ private void InitializeComponent() this._tbIcon = new System.Windows.Forms.TextBox(); this._tbIdName = new System.Windows.Forms.TextBox(); this._lvSpellList = new System.Windows.Forms.ListView(); - this._chID = new System.Windows.Forms.ColumnHeader(); - this._chName = new System.Windows.Forms.ColumnHeader(); + this._chID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this._chName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); this.groupBox2 = new System.Windows.Forms.GroupBox(); this._cbTarget2 = new System.Windows.Forms.ComboBox(); this._cbTarget1 = new System.Windows.Forms.ComboBox(); this._cbSpellEffect = new System.Windows.Forms.ComboBox(); this._cbSpellAura = new System.Windows.Forms.ComboBox(); this._cbSpellFamily = new System.Windows.Forms.ComboBox(); + this.buttonSearch = new System.Windows.Forms.Button(); this.splitContainer1.Panel1.SuspendLayout(); this.splitContainer1.Panel2.SuspendLayout(); this.splitContainer1.SuspendLayout(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.SuspendLayout(); - // + // // splitContainer1 - // + // this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; this.splitContainer1.Location = new System.Drawing.Point(0, 0); this.splitContainer1.Name = "splitContainer1"; - // + // // splitContainer1.Panel1 - // + // this.splitContainer1.Panel1.Controls.Add(this._rtbSpellInfo); - // + // // splitContainer1.Panel2 - // + // this.splitContainer1.Panel2.Controls.Add(this._bOk); this.splitContainer1.Panel2.Controls.Add(this._bCancel); this.splitContainer1.Panel2.Controls.Add(this.groupBox1); this.splitContainer1.Size = new System.Drawing.Size(672, 455); this.splitContainer1.SplitterDistance = 381; this.splitContainer1.TabIndex = 0; - // + // // _rtbSpellInfo - // + // this._rtbSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; this._rtbSpellInfo.Location = new System.Drawing.Point(0, 0); this._rtbSpellInfo.Name = "_rtbSpellInfo"; this._rtbSpellInfo.Size = new System.Drawing.Size(381, 455); this._rtbSpellInfo.TabIndex = 11; this._rtbSpellInfo.Text = ""; - // + // // _bOk - // + // this._bOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this._bOk.Location = new System.Drawing.Point(209, 425); this._bOk.Name = "_bOk"; @@ -95,9 +96,9 @@ private void InitializeComponent() this._bOk.Text = "OK"; this._bOk.UseVisualStyleBackColor = true; this._bOk.Click += new System.EventHandler(this.OkClick); - // + // // _bCancel - // + // this._bCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); this._bCancel.Location = new System.Drawing.Point(128, 425); this._bCancel.Name = "_bCancel"; @@ -106,12 +107,13 @@ private void InitializeComponent() this._bCancel.Text = "Cancel"; this._bCancel.UseVisualStyleBackColor = true; this._bCancel.Click += new System.EventHandler(this.CancelClick); - // + // // groupBox1 - // - this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + // + this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox1.Controls.Add(this.buttonSearch); this.groupBox1.Controls.Add(this.label3); this.groupBox1.Controls.Add(this.label2); this.groupBox1.Controls.Add(this._lIDName); @@ -126,69 +128,69 @@ private void InitializeComponent() this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; this.groupBox1.Text = "Spell Search"; - // + // // label3 - // + // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(6, 69); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(49, 13); this.label3.TabIndex = 3; this.label3.Text = "Attribute:"; - // + // // label2 - // + // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(6, 43); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(45, 13); this.label2.TabIndex = 3; this.label2.Text = "Icon ID:"; - // + // // _lIDName - // + // this._lIDName.AutoSize = true; this._lIDName.Location = new System.Drawing.Point(6, 17); this._lIDName.Name = "_lIDName"; this._lIDName.Size = new System.Drawing.Size(64, 13); this._lIDName.TabIndex = 3; this._lIDName.Text = "ID or Name:"; - // + // // _tbAttribute - // - this._tbAttribute.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + // + this._tbAttribute.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this._tbAttribute.Location = new System.Drawing.Point(74, 66); this._tbAttribute.Name = "_tbAttribute"; this._tbAttribute.Size = new System.Drawing.Size(198, 20); this._tbAttribute.TabIndex = 2; this._tbAttribute.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdNameKeyDown); - // + // // _tbIcon - // - this._tbIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + // + this._tbIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this._tbIcon.Location = new System.Drawing.Point(74, 40); this._tbIcon.Name = "_tbIcon"; this._tbIcon.Size = new System.Drawing.Size(198, 20); this._tbIcon.TabIndex = 1; this._tbIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdNameKeyDown); - // + // // _tbIdName - // - this._tbIdName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + // + this._tbIdName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this._tbIdName.Location = new System.Drawing.Point(74, 14); this._tbIdName.Name = "_tbIdName"; - this._tbIdName.Size = new System.Drawing.Size(198, 20); + this._tbIdName.Size = new System.Drawing.Size(145, 20); this._tbIdName.TabIndex = 0; this._tbIdName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdNameKeyDown); - // + // // _lvSpellList - // - this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + // + this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this._lvSpellList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this._chID, this._chName}); @@ -202,23 +204,23 @@ private void InitializeComponent() this._lvSpellList.UseCompatibleStateImageBehavior = false; this._lvSpellList.View = System.Windows.Forms.View.Details; this._lvSpellList.VirtualMode = true; + this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.SpellListRetrieveVirtualItem); this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.SpellListSelectedIndexChanged); this._lvSpellList.DoubleClick += new System.EventHandler(this.OkClick); - this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.SpellListRetrieveVirtualItem); - // + // // _chID - // + // this._chID.Text = "ID"; - // + // // _chName - // + // this._chName.Text = "Name"; this._chName.Width = 213; - // + // // groupBox2 - // - this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + // + this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this.groupBox2.Controls.Add(this._cbTarget2); this.groupBox2.Controls.Add(this._cbTarget1); this.groupBox2.Controls.Add(this._cbSpellEffect); @@ -230,9 +232,9 @@ private void InitializeComponent() this.groupBox2.TabIndex = 0; this.groupBox2.TabStop = false; this.groupBox2.Text = "Spell Filter"; - // + // // _cbTarget2 - // + // this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget2.DropDownHeight = 500; this._cbTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -243,9 +245,9 @@ private void InitializeComponent() this._cbTarget2.Size = new System.Drawing.Size(263, 21); this._cbTarget2.TabIndex = 7; this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); - // + // // _cbTarget1 - // + // this._cbTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget1.DropDownHeight = 500; this._cbTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -256,9 +258,9 @@ private void InitializeComponent() this._cbTarget1.Size = new System.Drawing.Size(263, 21); this._cbTarget1.TabIndex = 6; this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); - // + // // _cbSpellEffect - // + // this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellEffect.DropDownHeight = 500; this._cbSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -269,9 +271,9 @@ private void InitializeComponent() this._cbSpellEffect.Size = new System.Drawing.Size(263, 21); this._cbSpellEffect.TabIndex = 5; this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); - // + // // _cbSpellAura - // + // this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellAura.DropDownHeight = 500; this._cbSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -282,9 +284,9 @@ private void InitializeComponent() this._cbSpellAura.Size = new System.Drawing.Size(263, 21); this._cbSpellAura.TabIndex = 4; this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); - // + // // _cbSpellFamily - // + // this._cbSpellFamily.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellFamily.DropDownHeight = 500; this._cbSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -295,9 +297,19 @@ private void InitializeComponent() this._cbSpellFamily.Size = new System.Drawing.Size(263, 21); this._cbSpellFamily.TabIndex = 3; this._cbSpellFamily.SelectedIndexChanged += new System.EventHandler(this.SpellFamilySelectedIndexChanged); - // + // + // buttonSearch + // + this.buttonSearch.Location = new System.Drawing.Point(219, 13); + this.buttonSearch.Name = "buttonSearch"; + this.buttonSearch.Size = new System.Drawing.Size(53, 22); + this.buttonSearch.TabIndex = 9; + this.buttonSearch.Text = "Search"; + this.buttonSearch.UseVisualStyleBackColor = true; + this.buttonSearch.Click += new System.EventHandler(this.buttonSearch_Click); + // // FormSearch - // + // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(672, 455); @@ -339,5 +351,6 @@ private void InitializeComponent() private System.Windows.Forms.ComboBox _cbSpellEffect; private System.Windows.Forms.ComboBox _cbSpellAura; private System.Windows.Forms.ComboBox _cbSpellFamily; + private System.Windows.Forms.Button buttonSearch; } } \ No newline at end of file diff --git a/SpellWork/Forms/FormSearch.cs b/SpellWork/Forms/FormSearch.cs index 8429939e..8c0fb800 100644 --- a/SpellWork/Forms/FormSearch.cs +++ b/SpellWork/Forms/FormSearch.cs @@ -27,9 +27,12 @@ public FormSearch() private void IdNameKeyDown(object sender, KeyEventArgs e) { - if (e.KeyCode != Keys.Enter) - return; + if (e.KeyCode == Keys.Enter) + AdvancedSearch(); + } + private void AdvancedSearch() + { var name = _tbIdName.Text; var id = name.ToUInt32(); var ic = _tbIcon.Text.ToUInt32(); @@ -111,8 +114,12 @@ private void CancelClick(object sender, EventArgs e) private void SpellListRetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { - e.Item = - new ListViewItem(new[] {_spellList[e.ItemIndex].ID.ToString(), _spellList[e.ItemIndex].SpellNameRank}); + e.Item = new ListViewItem(new[] {_spellList[e.ItemIndex].ID.ToString(), _spellList[e.ItemIndex].SpellNameRank}); + } + + private void buttonSearch_Click(object sender, EventArgs e) + { + AdvancedSearch(); } } } From b0e6c15b6828e7161300bc4133ccef8f5e678526 Mon Sep 17 00:00:00 2001 From: Discover- Date: Mon, 16 Sep 2013 16:57:12 +0200 Subject: [PATCH 49/58] Set the backcolor of the search form to the same color as the main form one and don't allow writing to it --- SpellWork/Forms/FormSearch.Designer.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SpellWork/Forms/FormSearch.Designer.cs b/SpellWork/Forms/FormSearch.Designer.cs index 678eef4c..d793094d 100644 --- a/SpellWork/Forms/FormSearch.Designer.cs +++ b/SpellWork/Forms/FormSearch.Designer.cs @@ -79,9 +79,11 @@ private void InitializeComponent() // // _rtbSpellInfo // + this._rtbSpellInfo.BackColor = System.Drawing.Color.Gainsboro; this._rtbSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; this._rtbSpellInfo.Location = new System.Drawing.Point(0, 0); this._rtbSpellInfo.Name = "_rtbSpellInfo"; + this._rtbSpellInfo.ReadOnly = true; this._rtbSpellInfo.Size = new System.Drawing.Size(381, 455); this._rtbSpellInfo.TabIndex = 11; this._rtbSpellInfo.Text = ""; From df78fbbf2438e55e542e4a3a380a6b55ba174022 Mon Sep 17 00:00:00 2001 From: Discover- Date: Tue, 17 Sep 2013 16:46:12 +0200 Subject: [PATCH 50/58] Correct the size of the calculate flags form instead of hardcoding a minimumsize and maximumsize --- .../Forms/FormCalculateFlags.Designer.cs | 31 +++++++++---------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/SpellWork/Forms/FormCalculateFlags.Designer.cs b/SpellWork/Forms/FormCalculateFlags.Designer.cs index fcdd9680..d3e265a4 100644 --- a/SpellWork/Forms/FormCalculateFlags.Designer.cs +++ b/SpellWork/Forms/FormCalculateFlags.Designer.cs @@ -34,9 +34,9 @@ private void InitializeComponent() this._clbCalcFlags = new System.Windows.Forms.CheckedListBox(); this._lFlagValue = new System.Windows.Forms.Label(); this.SuspendLayout(); - // + // // _bNo - // + // this._bNo.DialogResult = System.Windows.Forms.DialogResult.Cancel; this._bNo.Location = new System.Drawing.Point(12, 270); this._bNo.Name = "_bNo"; @@ -45,9 +45,9 @@ private void InitializeComponent() this._bNo.Text = "Cancel"; this._bNo.UseVisualStyleBackColor = true; this._bNo.Click += new System.EventHandler(this.BNoClick); - // + // // _bOk - // + // this._bOk.Location = new System.Drawing.Point(201, 270); this._bOk.Name = "_bOk"; this._bOk.Size = new System.Drawing.Size(75, 23); @@ -55,12 +55,12 @@ private void InitializeComponent() this._bOk.Text = "OK"; this._bOk.UseVisualStyleBackColor = true; this._bOk.Click += new System.EventHandler(this.BOkClick); - // + // // _clbCalcFlags - // - this._clbCalcFlags.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); + // + this._clbCalcFlags.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); this._clbCalcFlags.CheckOnClick = true; this._clbCalcFlags.FormattingEnabled = true; this._clbCalcFlags.Location = new System.Drawing.Point(0, 1); @@ -68,9 +68,9 @@ private void InitializeComponent() this._clbCalcFlags.Size = new System.Drawing.Size(291, 259); this._clbCalcFlags.TabIndex = 0; this._clbCalcFlags.SelectedValueChanged += new System.EventHandler(this.ClbCalcFlagsSelectedValueChanged); - // + // // _lFlagValue - // + // this._lFlagValue.AutoSize = true; this._lFlagValue.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); this._lFlagValue.ForeColor = System.Drawing.Color.Blue; @@ -79,23 +79,22 @@ private void InitializeComponent() this._lFlagValue.Size = new System.Drawing.Size(54, 13); this._lFlagValue.TabIndex = 3; this._lFlagValue.Text = "Value: 0"; - // + // // FormCalculateFlags - // + // this.AcceptButton = this._bOk; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this._bNo; - this.ClientSize = new System.Drawing.Size(292, 297); + this.ClientSize = new System.Drawing.Size(284, 299); this.Controls.Add(this._lFlagValue); this.Controls.Add(this._clbCalcFlags); this.Controls.Add(this._bOk); this.Controls.Add(this._bNo); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; - this.MaximumSize = new System.Drawing.Size(300, 331); this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(300, 331); this.Name = "FormCalculateFlags"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; From e7e1e14377474189b371e937ff66f48808a78cfe Mon Sep 17 00:00:00 2001 From: Sebastian Valle Date: Sun, 3 Nov 2013 14:12:49 -0500 Subject: [PATCH 51/58] Fixed the "items that use this spell" message. --- SpellWork/DBC/DBC.cs | 38 ++++++++- SpellWork/DBC/DataStoreFileNameAttribute.cs | 23 ++++++ SpellWork/DBC/Structures/ItemEntry.cs | 16 ++++ SpellWork/DBC/Structures/ItemSparseEntry.cs | 89 +++++++++++++++++++++ SpellWork/DataBase/MySQLConnect.cs | 14 ++-- SpellWork/Forms/FormMain.cs | 3 +- SpellWork/Spell/SpellInfo.cs | 3 - SpellWork/SpellWork.csproj | 3 + 8 files changed, 173 insertions(+), 16 deletions(-) create mode 100644 SpellWork/DBC/DataStoreFileNameAttribute.cs create mode 100644 SpellWork/DBC/Structures/ItemEntry.cs create mode 100644 SpellWork/DBC/Structures/ItemSparseEntry.cs diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index 22d0cb80..efb15da0 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -55,6 +55,11 @@ public static class DBC public static DBCStorage SpellTotems = new DBCStorage(); public static DBCStorage SpellVisual = new DBCStorage(); + public static DB2Storage Item = new DB2Storage(); + + [DataStoreFileName("Item-sparse")] + public static DB2Storage ItemSparse = new DB2Storage(); + public static Dictionary SpellInfoStore = new Dictionary(); public static void Load() @@ -64,12 +69,23 @@ public static void Load() if (!dbc.FieldType.IsGenericType) continue; - if (dbc.FieldType.GetGenericTypeDefinition() != typeof(DBCStorage<>)) + string extension; + if (dbc.FieldType.GetGenericTypeDefinition() == typeof(DBCStorage<>)) + extension = "dbc"; + else if (dbc.FieldType.GetGenericTypeDefinition() == typeof(DB2Storage<>)) + extension = "db2"; + else continue; + string name = dbc.Name; + + DataStoreFileNameAttribute[] attributes = dbc.GetCustomAttributes(typeof(DataStoreFileNameAttribute), false) as DataStoreFileNameAttribute[]; + if (attributes.Length == 1) + name = attributes[0].FileName; + try { - using (var strm = new FileStream(String.Format("{0}\\{1}.dbc", DbcPath, dbc.Name), FileMode.Open)) + using (var strm = new FileStream(String.Format("{0}\\{1}.{2}", DbcPath, name, extension), FileMode.Open)) dbc.FieldType.GetMethod("Load", new Type[] { typeof(FileStream) }).Invoke(dbc.GetValue(null), new object[] { strm }); } catch (DirectoryNotFoundException) @@ -102,6 +118,24 @@ public static void Load() effect.ComboPointsScalingMultiplier = scaling.OtherMultiplier[effect.Index]; } } + + foreach (var item in ItemSparse) + { + ItemTemplate.Add(new Item + { + Entry = item.Id, + Name = item.Name, + Description = item.Description, + SpellId = new[] + { + item.SpellId[0], + item.SpellId[1], + item.SpellId[2], + item.SpellId[3], + item.SpellId[4] + } + }); + } } // DB diff --git a/SpellWork/DBC/DataStoreFileNameAttribute.cs b/SpellWork/DBC/DataStoreFileNameAttribute.cs new file mode 100644 index 00000000..ad523f39 --- /dev/null +++ b/SpellWork/DBC/DataStoreFileNameAttribute.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace SpellWork.DBC +{ + [AttributeUsage(AttributeTargets.All, Inherited = false, AllowMultiple = true)] + sealed class DataStoreFileNameAttribute : Attribute + { + readonly string _fileName; + + public DataStoreFileNameAttribute(string filename) + { + this._fileName = filename; + } + + public string FileName + { + get { return _fileName; } + } + } +} diff --git a/SpellWork/DBC/Structures/ItemEntry.cs b/SpellWork/DBC/Structures/ItemEntry.cs new file mode 100644 index 00000000..2ec26a1c --- /dev/null +++ b/SpellWork/DBC/Structures/ItemEntry.cs @@ -0,0 +1,16 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class ItemEntry + { + public uint Id; + public uint Class; + public uint SubClass; + public int SoundOverrideSubclass; + public int Material; + public uint DisplayId; + public uint InventoryType; + public uint Sheath; + } +} diff --git a/SpellWork/DBC/Structures/ItemSparseEntry.cs b/SpellWork/DBC/Structures/ItemSparseEntry.cs new file mode 100644 index 00000000..7336bc77 --- /dev/null +++ b/SpellWork/DBC/Structures/ItemSparseEntry.cs @@ -0,0 +1,89 @@ +using DBFilesClient.NET; + +namespace SpellWork.DBC.Structures +{ + public sealed class ItemSparseEntry + { + public uint Id; + public uint Quality; + public uint Flags; + public uint Flags2; + public float Unk1; + public float Unk2; + public uint BuyCount; + public uint BuyPrice; + public uint SellPrice; + public uint InventoryType; + public int AllowableClass; + public int AllowableRace; + public uint ItemLevel; + public int RequiredLevel; + public uint RequiredSkill; + public uint RequiredSkillRank; + public uint RequiredSpell; + public uint RequiredHonorRank; + public uint RequiredCityRank; + public uint RequiredReputationFaction; + public uint RequiredReputationRank; + public uint MaxCount; + public uint Stackable; + public uint ContainerSlots; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 10)] + public int[] ItemStatType; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 10)] + public uint[] ItemStatValue; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 10)] + public int[] ItemStatUnk1; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 10)] + public int[] ItemStatUnk2; + public uint ScalingStatDistribution; + public uint DamageType; + public uint Delay; + public float RangedModRange; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 5)] + public int[] SpellId; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 5)] + public int[] SpellTrigger; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 5)] + public int[] SpellCharges; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 5)] + public int[] SpellCooldown; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 5)] + public int[] SpellCategory; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 5)] + public int[] SpellCategoryCooldown; + public uint Bonding; + public string Name; + public string Name2; + public string Name3; + public string Name4; + public string Description; + public uint PageText; + public uint LanguageID; + public uint PageMaterial; + public uint StartQuest; + public uint LockID; + public int Material; + public uint Sheath; + public uint RandomProperty; + public uint RandomSuffix; + public uint ItemSet; + public uint Area; + public uint Map; + public uint BagFamily; + public uint TotemCategory; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 3)] + public uint[] Color; + [StoragePresence(StoragePresenceOption.Include, ArraySize = 3)] + public uint[] Content; + public int SocketBonus; + public uint GemProperties; + public float ArmorDamageModifier; + public uint Duration; + public uint ItemLimitCategory; + public uint HolidayId; + public float StatScalingFactor; + public int CurrencySubstitutionId; + public int CurrencySubstitutionCount; + } +} diff --git a/SpellWork/DataBase/MySQLConnect.cs b/SpellWork/DataBase/MySQLConnect.cs index 4796b180..c779b404 100644 --- a/SpellWork/DataBase/MySQLConnect.cs +++ b/SpellWork/DataBase/MySQLConnect.cs @@ -83,9 +83,8 @@ public static void Insert(string query) _command.Connection.Close(); } - public static List SelectItems() + public static void AddDBItems() { - var items = DBC.DBC.ItemTemplate; // In order to reduce the search time, we make the first selection of all items that have spellid var query = String.Format( @"SELECT t.entry, @@ -114,26 +113,23 @@ public static List SelectItems() { while (reader.Read()) { - items.Add(new Item + DBC.DBC.ItemTemplate.Add(new Item { Entry = reader.GetUInt32(0), Name = reader.GetString(1), Description = reader.GetString(2), - LocalesName = reader.IsDBNull(3) ? string.Empty : reader.GetString(3), - LocalesDescription = reader.IsDBNull(4) ? string.Empty : reader.GetString(4), SpellId = new[] { + reader.GetInt32(3), + reader.GetInt32(4), reader.GetInt32(5), reader.GetInt32(6), - reader.GetInt32(7), - reader.GetInt32(8), - reader.GetInt32(9) + reader.GetInt32(7) } }); } } } - return items; } public static void TestConnect() diff --git a/SpellWork/Forms/FormMain.cs b/SpellWork/Forms/FormMain.cs index a616d2bc..8285f827 100644 --- a/SpellWork/Forms/FormMain.cs +++ b/SpellWork/Forms/FormMain.cs @@ -99,8 +99,7 @@ private void ConnStatus() { _dbConnect.Text = @"Connection successful."; _dbConnect.ForeColor = Color.Green; - // read db data - DBC.DBC.ItemTemplate = MySqlConnection.SelectItems(); + Database.MySqlConnection.AddDBItems(); } else { diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index 0b69ef3f..b72b5c29 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -618,9 +618,6 @@ private void AppendAreaInfo() private void AppendItemInfo() { - if (!MySqlConnection.Connected) - return; - var items = from item in DBC.DBC.ItemTemplate where item.SpellId.ContainsElement((int)_spell.ID) select item; diff --git a/SpellWork/SpellWork.csproj b/SpellWork/SpellWork.csproj index 7b61b4f2..0f9d268a 100644 --- a/SpellWork/SpellWork.csproj +++ b/SpellWork/SpellWork.csproj @@ -88,9 +88,12 @@ Code + + + From c560ce547efc52c431e574d659817b8b220944f8 Mon Sep 17 00:00:00 2001 From: Sebastian Valle Date: Sun, 3 Nov 2013 15:17:44 -0500 Subject: [PATCH 52/58] Reimplemented the SQL tab in 4.3.4 --- SpellWork/Forms/FormMain.Designer.cs | 702 ++++++++++++++------------- SpellWork/Forms/FormMain.cs | 27 +- SpellWork/Forms/FormMain.resx | 2 +- 3 files changed, 392 insertions(+), 339 deletions(-) diff --git a/SpellWork/Forms/FormMain.Designer.cs b/SpellWork/Forms/FormMain.Designer.cs index 8375180f..3baf6b0e 100644 --- a/SpellWork/Forms/FormMain.Designer.cs +++ b/SpellWork/Forms/FormMain.Designer.cs @@ -195,9 +195,9 @@ private void InitializeComponent() ((System.ComponentModel.ISupportInitialize)(this.splitContainer6)).BeginInit(); this.splitContainer6.SuspendLayout(); this.SuspendLayout(); - // + // // statusStrip1 - // + // this.statusStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this._dbConnect, this._status, @@ -207,24 +207,24 @@ private void InitializeComponent() this.statusStrip1.Size = new System.Drawing.Size(872, 22); this.statusStrip1.TabIndex = 0; this.statusStrip1.Text = "statusStrip1"; - // + // // _dbConnect - // + // this._dbConnect.Name = "_dbConnect"; this._dbConnect.Size = new System.Drawing.Size(0, 17); - // + // // _status - // + // this._status.Name = "_status"; this._status.Size = new System.Drawing.Size(0, 17); - // + // // _ProcStatus - // + // this._ProcStatus.Name = "_ProcStatus"; this._ProcStatus.Size = new System.Drawing.Size(0, 17); - // + // // menuStrip1 - // + // this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this._tsmFile, this._tsmHelp}); @@ -233,9 +233,9 @@ private void InitializeComponent() this.menuStrip1.Size = new System.Drawing.Size(872, 24); this.menuStrip1.TabIndex = 1; this.menuStrip1.Text = "menuStrip1"; - // + // // _tsmFile - // + // this._tsmFile.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this._Connected, this._tsmSettings, @@ -243,45 +243,45 @@ private void InitializeComponent() this._tsmFile.Name = "_tsmFile"; this._tsmFile.Size = new System.Drawing.Size(37, 20); this._tsmFile.Text = "File"; - // + // // _Connected - // + // this._Connected.Name = "_Connected"; this._Connected.Size = new System.Drawing.Size(132, 22); this._Connected.Text = "Connected"; this._Connected.Click += new System.EventHandler(this.ConnectedClick); - // + // // _tsmSettings - // + // this._tsmSettings.Name = "_tsmSettings"; this._tsmSettings.Size = new System.Drawing.Size(132, 22); this._tsmSettings.Text = "Setting"; this._tsmSettings.Click += new System.EventHandler(this.SettingsClick); - // + // // _tsmExit - // + // this._tsmExit.Name = "_tsmExit"; this._tsmExit.Size = new System.Drawing.Size(132, 22); this._tsmExit.Text = "Exit"; - this._tsmExit.Click += new System.EventHandler(ExitClick); - // + this._tsmExit.Click += new System.EventHandler(this.ExitClick); + // // _tsmHelp - // + // this._tsmHelp.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this._tsmAbout}); this._tsmHelp.Name = "_tsmHelp"; this._tsmHelp.Size = new System.Drawing.Size(44, 20); this._tsmHelp.Text = "Help"; - // + // // _tsmAbout - // + // this._tsmAbout.Name = "_tsmAbout"; this._tsmAbout.Size = new System.Drawing.Size(113, 22); this._tsmAbout.Text = "About.."; - this._tsmAbout.Click += new System.EventHandler(AboutClick); - // + this._tsmAbout.Click += new System.EventHandler(this.AboutClick); + // // _ilPro - // + // this._ilPro.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("_ilPro.ImageStream"))); this._ilPro.TransparentColor = System.Drawing.Color.Transparent; this._ilPro.Images.SetKeyName(0, "info.ico"); @@ -290,65 +290,65 @@ private void InitializeComponent() this._ilPro.Images.SetKeyName(3, "plus.ico"); this._ilPro.Images.SetKeyName(4, "family.ico"); this._ilPro.Images.SetKeyName(5, "munus.ico"); - // + // // splitContainer7 - // + // this.splitContainer7.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer7.Location = new System.Drawing.Point(0, 0); this.splitContainer7.Name = "splitContainer7"; - // + // // splitContainer7.Panel1 - // + // this.splitContainer7.Panel1.Controls.Add(this.splitContainer8); this.splitContainer7.Panel1.Controls.Add(this.richTextBox1); - // + // // splitContainer7.Panel2 - // + // this.splitContainer7.Panel2.Controls.Add(this.richTextBox2); this.splitContainer7.Size = new System.Drawing.Size(858, 429); this.splitContainer7.SplitterDistance = 424; this.splitContainer7.TabIndex = 0; - // + // // splitContainer8 - // + // this.splitContainer8.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer8.Location = new System.Drawing.Point(0, 0); this.splitContainer8.Name = "splitContainer8"; - // + // // splitContainer8.Panel1 - // + // this.splitContainer8.Panel1.Controls.Add(this.textBox2); this.splitContainer8.Size = new System.Drawing.Size(424, 429); this.splitContainer8.SplitterDistance = 209; this.splitContainer8.TabIndex = 0; - // + // // textBox2 - // + // this.textBox2.Location = new System.Drawing.Point(19, 12); this.textBox2.Name = "textBox2"; this.textBox2.Size = new System.Drawing.Size(100, 20); this.textBox2.TabIndex = 0; - // + // // richTextBox1 - // + // this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; this.richTextBox1.Location = new System.Drawing.Point(0, 0); this.richTextBox1.Name = "richTextBox1"; this.richTextBox1.Size = new System.Drawing.Size(424, 429); this.richTextBox1.TabIndex = 0; this.richTextBox1.Text = ""; - // + // // richTextBox2 - // + // this.richTextBox2.Dock = System.Windows.Forms.DockStyle.Fill; this.richTextBox2.Location = new System.Drawing.Point(0, 0); this.richTextBox2.Name = "richTextBox2"; this.richTextBox2.Size = new System.Drawing.Size(430, 429); this.richTextBox2.TabIndex = 0; this.richTextBox2.Text = ""; - // + // // _tpCompare - // + // this._tpCompare.Controls.Add(this._scCompareRoot); this._tpCompare.Location = new System.Drawing.Point(4, 22); this._tpCompare.Name = "_tpCompare"; @@ -357,24 +357,24 @@ private void InitializeComponent() this._tpCompare.TabIndex = 4; this._tpCompare.Text = "Compare Spells"; this._tpCompare.UseVisualStyleBackColor = true; - // + // // _scCompareRoot - // + // this._scCompareRoot.Dock = System.Windows.Forms.DockStyle.Fill; this._scCompareRoot.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; this._scCompareRoot.Location = new System.Drawing.Point(3, 3); this._scCompareRoot.Name = "_scCompareRoot"; - // + // // _scCompareRoot.Panel1 - // + // this._scCompareRoot.Panel1.BackColor = System.Drawing.Color.WhiteSmoke; this._scCompareRoot.Panel1.Controls.Add(this._bCompareSearch1); this._scCompareRoot.Panel1.Controls.Add(this.label13); this._scCompareRoot.Panel1.Controls.Add(this._tbCompareFilterSpell1); this._scCompareRoot.Panel1.Controls.Add(this._rtbCompareSpell1); - // + // // _scCompareRoot.Panel2 - // + // this._scCompareRoot.Panel2.BackColor = System.Drawing.Color.WhiteSmoke; this._scCompareRoot.Panel2.Controls.Add(this._bCompareSearch2); this._scCompareRoot.Panel2.Controls.Add(this.label14); @@ -383,9 +383,9 @@ private void InitializeComponent() this._scCompareRoot.Size = new System.Drawing.Size(858, 551); this._scCompareRoot.SplitterDistance = 426; this._scCompareRoot.TabIndex = 0; - // + // // _bCompareSearch1 - // + // this._bCompareSearch1.Location = new System.Drawing.Point(238, 1); this._bCompareSearch1.Name = "_bCompareSearch1"; this._bCompareSearch1.Size = new System.Drawing.Size(51, 23); @@ -393,28 +393,28 @@ private void InitializeComponent() this._bCompareSearch1.Text = "Search"; this._bCompareSearch1.UseVisualStyleBackColor = true; this._bCompareSearch1.Click += new System.EventHandler(this.CompareSearch1Click); - // + // // label13 - // + // this.label13.AutoSize = true; this.label13.Location = new System.Drawing.Point(5, 6); this.label13.Name = "label13"; this.label13.Size = new System.Drawing.Size(61, 13); this.label13.TabIndex = 2; this.label13.Text = "ID or Name"; - // + // // _tbCompareFilterSpell1 - // + // this._tbCompareFilterSpell1.Location = new System.Drawing.Point(86, 3); this._tbCompareFilterSpell1.Name = "_tbCompareFilterSpell1"; this._tbCompareFilterSpell1.Size = new System.Drawing.Size(146, 20); this._tbCompareFilterSpell1.TabIndex = 1; this._tbCompareFilterSpell1.TextChanged += new System.EventHandler(this.CompareFilterSpellTextChanged); - // + // // _rtbCompareSpell1 - // - this._rtbCompareSpell1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + // + this._rtbCompareSpell1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._rtbCompareSpell1.BackColor = System.Drawing.Color.Gainsboro; this._rtbCompareSpell1.Font = new System.Drawing.Font("Arial Unicode MS", 9F); @@ -423,9 +423,9 @@ private void InitializeComponent() this._rtbCompareSpell1.Size = new System.Drawing.Size(423, 522); this._rtbCompareSpell1.TabIndex = 0; this._rtbCompareSpell1.Text = ""; - // + // // _bCompareSearch2 - // + // this._bCompareSearch2.Location = new System.Drawing.Point(243, 1); this._bCompareSearch2.Name = "_bCompareSearch2"; this._bCompareSearch2.Size = new System.Drawing.Size(51, 23); @@ -433,20 +433,20 @@ private void InitializeComponent() this._bCompareSearch2.Text = "Search"; this._bCompareSearch2.UseVisualStyleBackColor = true; this._bCompareSearch2.Click += new System.EventHandler(this.CompareSearch2Click); - // + // // label14 - // + // this.label14.AutoSize = true; this.label14.Location = new System.Drawing.Point(10, 6); this.label14.Name = "label14"; this.label14.Size = new System.Drawing.Size(61, 13); this.label14.TabIndex = 2; this.label14.Text = "ID or Name"; - // + // // _rtbCompareSpell2 - // - this._rtbCompareSpell2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + // + this._rtbCompareSpell2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._rtbCompareSpell2.BackColor = System.Drawing.Color.Gainsboro; this._rtbCompareSpell2.Font = new System.Drawing.Font("Arial Unicode MS", 9F); @@ -455,17 +455,17 @@ private void InitializeComponent() this._rtbCompareSpell2.Size = new System.Drawing.Size(425, 522); this._rtbCompareSpell2.TabIndex = 0; this._rtbCompareSpell2.Text = ""; - // + // // _tbCompareFilterSpell2 - // + // this._tbCompareFilterSpell2.Location = new System.Drawing.Point(91, 3); this._tbCompareFilterSpell2.Name = "_tbCompareFilterSpell2"; this._tbCompareFilterSpell2.Size = new System.Drawing.Size(146, 20); this._tbCompareFilterSpell2.TabIndex = 1; this._tbCompareFilterSpell2.TextChanged += new System.EventHandler(this.CompareFilterSpellTextChanged); - // + // // _tpSpellInfo - // + // this._tpSpellInfo.Controls.Add(this.splitContainer1); this._tpSpellInfo.Location = new System.Drawing.Point(4, 22); this._tpSpellInfo.Name = "_tpSpellInfo"; @@ -474,30 +474,30 @@ private void InitializeComponent() this._tpSpellInfo.TabIndex = 0; this._tpSpellInfo.Text = "Spell Info"; this._tpSpellInfo.UseVisualStyleBackColor = true; - // + // // splitContainer1 - // - this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + // + this.splitContainer1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; this.splitContainer1.Location = new System.Drawing.Point(3, 3); this.splitContainer1.Name = "splitContainer1"; - // + // // splitContainer1.Panel1 - // + // this.splitContainer1.Panel1.Controls.Add(this._rtSpellInfo); - // + // // splitContainer1.Panel2 - // + // this.splitContainer1.Panel2.BackColor = System.Drawing.Color.Gainsboro; this.splitContainer1.Panel2.Controls.Add(this.groupBox1); this.splitContainer1.Size = new System.Drawing.Size(858, 551); this.splitContainer1.SplitterDistance = 543; this.splitContainer1.TabIndex = 0; - // + // // _rtSpellInfo - // + // this._rtSpellInfo.BackColor = System.Drawing.Color.Gainsboro; this._rtSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; this._rtSpellInfo.Font = new System.Drawing.Font("Arial Unicode MS", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); @@ -507,9 +507,9 @@ private void InitializeComponent() this._rtSpellInfo.Size = new System.Drawing.Size(543, 551); this._rtSpellInfo.TabIndex = 0; this._rtSpellInfo.Text = ""; - // + // // groupBox1 - // + // this.groupBox1.Controls.Add(this._lvSpellList); this.groupBox1.Controls.Add(this._gSpellFilter); this.groupBox1.Controls.Add(this.groupBox7); @@ -519,12 +519,12 @@ private void InitializeComponent() this.groupBox1.Size = new System.Drawing.Size(311, 551); this.groupBox1.TabIndex = 0; this.groupBox1.TabStop = false; - // + // // _lvSpellList - // + // this._lvSpellList.AllowColumnReorder = true; - this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._lvSpellList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { this.chSpellID, @@ -542,20 +542,20 @@ private void InitializeComponent() this._lvSpellList.VirtualMode = true; this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.LvSpellListRetrieveVirtualItem); this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.LvSpellListSelectedIndexChanged); - // + // // chSpellID - // + // this.chSpellID.Text = "ID"; this.chSpellID.Width = 48; - // + // // chSpellName - // + // this.chSpellName.Text = "Name"; this.chSpellName.Width = 250; - // + // // _gSpellFilter - // - this._gSpellFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._gSpellFilter.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gSpellFilter.BackColor = System.Drawing.Color.LightGray; this._gSpellFilter.Controls.Add(this._gbAdvansedSearch); @@ -570,10 +570,10 @@ private void InitializeComponent() this._gSpellFilter.TabIndex = 8; this._gSpellFilter.TabStop = false; this._gSpellFilter.Text = "Spell Filter"; - // + // // _gbAdvansedSearch - // - this._gbAdvansedSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._gbAdvansedSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter2CompareType); this._gbAdvansedSearch.Controls.Add(this._cbAdvancedFilter1CompareType); @@ -587,9 +587,9 @@ private void InitializeComponent() this._gbAdvansedSearch.TabIndex = 6; this._gbAdvansedSearch.TabStop = false; this._gbAdvansedSearch.Text = "Advanced Filter"; - // + // // _cbAdvancedFilter2CompareType - // + // this._cbAdvancedFilter2CompareType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._cbAdvancedFilter2CompareType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this._cbAdvancedFilter2CompareType.DropDownWidth = 160; @@ -598,9 +598,9 @@ private void InitializeComponent() this._cbAdvancedFilter2CompareType.Name = "_cbAdvancedFilter2CompareType"; this._cbAdvancedFilter2CompareType.Size = new System.Drawing.Size(76, 21); this._cbAdvancedFilter2CompareType.TabIndex = 3; - // + // // _cbAdvancedFilter1CompareType - // + // this._cbAdvancedFilter1CompareType.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._cbAdvancedFilter1CompareType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this._cbAdvancedFilter1CompareType.DropDownWidth = 160; @@ -609,9 +609,9 @@ private void InitializeComponent() this._cbAdvancedFilter1CompareType.Name = "_cbAdvancedFilter1CompareType"; this._cbAdvancedFilter1CompareType.Size = new System.Drawing.Size(76, 21); this._cbAdvancedFilter1CompareType.TabIndex = 2; - // + // // _tbAdvancedFilter2Val - // + // this._tbAdvancedFilter2Val.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._tbAdvancedFilter2Val.Location = new System.Drawing.Point(210, 42); this._tbAdvancedFilter2Val.Name = "_tbAdvancedFilter2Val"; @@ -619,9 +619,9 @@ private void InitializeComponent() this._tbAdvancedFilter2Val.TabIndex = 1; this._tbAdvancedFilter2Val.Text = "0"; this._tbAdvancedFilter2Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbAdvansedFilterValKeyDown); - // + // // _tbAdvancedFilter1Val - // + // this._tbAdvancedFilter1Val.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._tbAdvancedFilter1Val.Location = new System.Drawing.Point(209, 15); this._tbAdvancedFilter1Val.Name = "_tbAdvancedFilter1Val"; @@ -629,10 +629,10 @@ private void InitializeComponent() this._tbAdvancedFilter1Val.TabIndex = 1; this._tbAdvancedFilter1Val.Text = "0"; this._tbAdvancedFilter1Val.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbAdvansedFilterValKeyDown); - // + // // _cbAdvancedFilter2 - // - this._cbAdvancedFilter2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbAdvancedFilter2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbAdvancedFilter2.DropDownHeight = 500; this._cbAdvancedFilter2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -642,10 +642,10 @@ private void InitializeComponent() this._cbAdvancedFilter2.Name = "_cbAdvancedFilter2"; this._cbAdvancedFilter2.Size = new System.Drawing.Size(120, 21); this._cbAdvancedFilter2.TabIndex = 0; - // + // // _cbAdvancedFilter1 - // - this._cbAdvancedFilter1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbAdvancedFilter1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbAdvancedFilter1.DropDownHeight = 500; this._cbAdvancedFilter1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -655,10 +655,10 @@ private void InitializeComponent() this._cbAdvancedFilter1.Name = "_cbAdvancedFilter1"; this._cbAdvancedFilter1.Size = new System.Drawing.Size(120, 21); this._cbAdvancedFilter1.TabIndex = 0; - // + // // _cbTarget2 - // - this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget2.DropDownHeight = 500; this._cbTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -670,10 +670,10 @@ private void InitializeComponent() this._cbTarget2.Size = new System.Drawing.Size(302, 21); this._cbTarget2.TabIndex = 5; this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); - // + // // _cbTarget1 - // - this._cbTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbTarget1.DropDownHeight = 500; this._cbTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -685,10 +685,10 @@ private void InitializeComponent() this._cbTarget1.Size = new System.Drawing.Size(302, 21); this._cbTarget1.TabIndex = 5; this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); - // + // // _cbSpellEffect - // - this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellEffect.DropDownHeight = 500; this._cbSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -700,10 +700,10 @@ private void InitializeComponent() this._cbSpellEffect.Size = new System.Drawing.Size(302, 21); this._cbSpellEffect.TabIndex = 4; this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); - // + // // _cbSpellAura - // - this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellAura.DropDownHeight = 500; this._cbSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -715,10 +715,10 @@ private void InitializeComponent() this._cbSpellAura.Size = new System.Drawing.Size(302, 21); this._cbSpellAura.TabIndex = 3; this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); - // + // // _cbSpellFamilyName - // - this._cbSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbSpellFamilyName.DropDownHeight = 500; this._cbSpellFamilyName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -731,10 +731,10 @@ private void InitializeComponent() this._cbSpellFamilyName.Size = new System.Drawing.Size(302, 21); this._cbSpellFamilyName.TabIndex = 2; this._cbSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this.CbSpellFamilyNamesSelectedIndexChanged); - // + // // groupBox7 - // - this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this.groupBox7.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox7.BackColor = System.Drawing.Color.LightGray; this.groupBox7.Controls.Add(this.label6); @@ -750,36 +750,36 @@ private void InitializeComponent() this.groupBox7.TabIndex = 9; this.groupBox7.TabStop = false; this.groupBox7.Text = "Spell Search"; - // + // // label6 - // + // this.label6.AutoSize = true; this.label6.Location = new System.Drawing.Point(6, 60); this.label6.Name = "label6"; this.label6.Size = new System.Drawing.Size(67, 13); this.label6.TabIndex = 2; this.label6.Text = "Attributes&&X:"; - // + // // label5 - // + // this.label5.AutoSize = true; this.label5.Location = new System.Drawing.Point(6, 38); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(45, 13); this.label5.TabIndex = 2; this.label5.Text = "Icon ID:"; - // + // // label4 - // + // this.label4.AutoSize = true; this.label4.Location = new System.Drawing.Point(6, 16); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(64, 13); this.label4.TabIndex = 2; this.label4.Text = "ID or Name:"; - // + // // _bSearch - // + // this._bSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._bSearch.Location = new System.Drawing.Point(258, 11); this._bSearch.Name = "_bSearch"; @@ -788,39 +788,39 @@ private void InitializeComponent() this._bSearch.Text = "Search"; this._bSearch.UseVisualStyleBackColor = true; this._bSearch.Click += new System.EventHandler(this.BSearchClick); - // + // // _tbSearchAttributes - // - this._tbSearchAttributes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._tbSearchAttributes.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchAttributes.Location = new System.Drawing.Point(73, 57); this._tbSearchAttributes.Name = "_tbSearchAttributes"; this._tbSearchAttributes.Size = new System.Drawing.Size(180, 20); this._tbSearchAttributes.TabIndex = 0; this._tbSearchAttributes.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); - // + // // _tbSearchIcon - // - this._tbSearchIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._tbSearchIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchIcon.Location = new System.Drawing.Point(73, 35); this._tbSearchIcon.Name = "_tbSearchIcon"; this._tbSearchIcon.Size = new System.Drawing.Size(180, 20); this._tbSearchIcon.TabIndex = 0; this._tbSearchIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); - // + // // _tbSearchId - // - this._tbSearchId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._tbSearchId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbSearchId.Location = new System.Drawing.Point(73, 13); this._tbSearchId.Name = "_tbSearchId"; this._tbSearchId.Size = new System.Drawing.Size(180, 20); this._tbSearchId.TabIndex = 0; this._tbSearchId.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchIdKeyDown); - // + // // tabControl1 - // + // this.tabControl1.Controls.Add(this._tpSpellInfo); this.tabControl1.Controls.Add(this._tpSpellProcInfo); this.tabControl1.Controls.Add(this._tpCompare); @@ -832,9 +832,9 @@ private void InitializeComponent() this.tabControl1.Size = new System.Drawing.Size(872, 583); this.tabControl1.TabIndex = 2; this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.TabControl1SelectedIndexChanged); - // + // // _tpSpellProcInfo - // + // this._tpSpellProcInfo.Controls.Add(this.splitContainer2); this._tpSpellProcInfo.Location = new System.Drawing.Point(4, 22); this._tpSpellProcInfo.Name = "_tpSpellProcInfo"; @@ -842,23 +842,23 @@ private void InitializeComponent() this._tpSpellProcInfo.TabIndex = 2; this._tpSpellProcInfo.Text = "Spell Proc Event"; this._tpSpellProcInfo.UseVisualStyleBackColor = true; - // + // // splitContainer2 - // + // this.splitContainer2.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer2.Location = new System.Drawing.Point(0, 0); this.splitContainer2.Name = "splitContainer2"; this.splitContainer2.Orientation = System.Windows.Forms.Orientation.Horizontal; - // + // // splitContainer2.Panel2 - // + // this.splitContainer2.Panel2.BackColor = System.Drawing.Color.Gainsboro; this.splitContainer2.Size = new System.Drawing.Size(864, 557); this.splitContainer2.SplitterDistance = 489; this.splitContainer2.TabIndex = 0; - // + // // _tpSqlData - // + // this._tpSqlData.Controls.Add(this.groupBox3); this._tpSqlData.Controls.Add(this.groupBox2); this._tpSqlData.Location = new System.Drawing.Point(4, 22); @@ -867,31 +867,49 @@ private void InitializeComponent() this._tpSqlData.TabIndex = 3; this._tpSqlData.Text = "Sql Data"; this._tpSqlData.UseVisualStyleBackColor = true; - // + // // groupBox3 - // - this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this.groupBox3.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox3.BackColor = System.Drawing.Color.WhiteSmoke; + this.groupBox3.Controls.Add(this._cbBinaryCompare); + this.groupBox3.Controls.Add(this.label9); + this.groupBox3.Controls.Add(this._tbSqlManual); + this.groupBox3.Controls.Add(this.label8); + this.groupBox3.Controls.Add(this.label12); + this.groupBox3.Controls.Add(this.label11); + this.groupBox3.Controls.Add(this.label10); + this.groupBox3.Controls.Add(this.label7); + this.groupBox3.Controls.Add(this._bSqlProcEx); + this.groupBox3.Controls.Add(this._bSqlProc); + this.groupBox3.Controls.Add(this._bSqlSchool); + this.groupBox3.Controls.Add(this._tbSqlProcEx); + this.groupBox3.Controls.Add(this._tbSqlProc); + this.groupBox3.Controls.Add(this._tbSqlSchool); + this.groupBox3.Controls.Add(this.textBox1); + this.groupBox3.Controls.Add(this._cbSqlSpellFamily); + this.groupBox3.Controls.Add(this._bSelect); this.groupBox3.Location = new System.Drawing.Point(6, 3); this.groupBox3.Name = "groupBox3"; this.groupBox3.Size = new System.Drawing.Size(855, 85); this.groupBox3.TabIndex = 1; this.groupBox3.TabStop = false; - // + // // groupBox2 - // - this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + // + this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); + this.groupBox2.Controls.Add(this.splitContainer6); this.groupBox2.Location = new System.Drawing.Point(0, 94); this.groupBox2.Name = "groupBox2"; this.groupBox2.Size = new System.Drawing.Size(864, 463); this.groupBox2.TabIndex = 0; this.groupBox2.TabStop = false; - // + // // _lvProcAdditionalInfo - // + // this._lvProcAdditionalInfo.Dock = System.Windows.Forms.DockStyle.Fill; this._lvProcAdditionalInfo.FullRowSelect = true; this._lvProcAdditionalInfo.GridLines = true; @@ -902,67 +920,67 @@ private void InitializeComponent() this._lvProcAdditionalInfo.UseCompatibleStateImageBehavior = false; this._lvProcAdditionalInfo.View = System.Windows.Forms.View.Details; this._lvProcAdditionalInfo.SelectedIndexChanged += new System.EventHandler(this.LvProcAdditionalInfoSelectedIndexChanged); - // + // // _chID - // + // this._chID.DisplayIndex = 0; this._chID.Text = "Entry"; this._chID.Width = 100; - // + // // _chName - // + // this._chName.DisplayIndex = 1; this._chName.Text = "Name"; this._chName.Width = 685; - // + // // splitContainer3 - // + // this.splitContainer3.BackColor = System.Drawing.Color.White; this.splitContainer3.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer3.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; this.splitContainer3.Location = new System.Drawing.Point(0, 0); this.splitContainer3.Name = "splitContainer3"; this.splitContainer3.Orientation = System.Windows.Forms.Orientation.Horizontal; - // + // // splitContainer3.Panel1 - // + // this.splitContainer3.Panel1.BackColor = System.Drawing.Color.White; this.splitContainer3.Size = new System.Drawing.Size(864, 489); this.splitContainer3.SplitterDistance = 241; this.splitContainer3.TabIndex = 0; - // + // // splitContainer4 - // + // this.splitContainer4.BackColor = System.Drawing.Color.White; this.splitContainer4.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer4.FixedPanel = System.Windows.Forms.FixedPanel.Panel1; this.splitContainer4.Location = new System.Drawing.Point(0, 0); this.splitContainer4.Name = "splitContainer4"; - // + // // splitContainer4.Panel1 - // + // this.splitContainer4.Panel1.BackColor = System.Drawing.Color.Gainsboro; this.splitContainer4.Size = new System.Drawing.Size(864, 244); this.splitContainer4.SplitterDistance = 260; this.splitContainer4.TabIndex = 0; - // + // // splitContainer5 - // + // this.splitContainer5.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer5.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; this.splitContainer5.Location = new System.Drawing.Point(0, 0); this.splitContainer5.Name = "splitContainer5"; - // + // // splitContainer5.Panel2 - // + // this.splitContainer5.Panel2.BackColor = System.Drawing.Color.Gainsboro; this.splitContainer5.Size = new System.Drawing.Size(600, 244); this.splitContainer5.SplitterDistance = 330; this.splitContainer5.TabIndex = 0; - // + // // _cbProcSpellFamilyName - // - this._cbProcSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbProcSpellFamilyName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellFamilyName.DropDownHeight = 500; this._cbProcSpellFamilyName.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -973,10 +991,10 @@ private void InitializeComponent() this._cbProcSpellFamilyName.Size = new System.Drawing.Size(260, 21); this._cbProcSpellFamilyName.TabIndex = 1; this._cbProcSpellFamilyName.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // + // // _cbProcSpellAura - // - this._cbProcSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbProcSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellAura.DropDownHeight = 500; this._cbProcSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -987,10 +1005,10 @@ private void InitializeComponent() this._cbProcSpellAura.Size = new System.Drawing.Size(260, 21); this._cbProcSpellAura.TabIndex = 2; this._cbProcSpellAura.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // + // // _cbProcSpellEffect - // - this._cbProcSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbProcSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellEffect.DropDownHeight = 500; this._cbProcSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1001,10 +1019,10 @@ private void InitializeComponent() this._cbProcSpellEffect.Size = new System.Drawing.Size(260, 21); this._cbProcSpellEffect.TabIndex = 3; this._cbProcSpellEffect.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // + // // _cbProcTarget1 - // - this._cbProcTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbProcTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcTarget1.DropDownHeight = 500; this._cbProcTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1015,9 +1033,9 @@ private void InitializeComponent() this._cbProcTarget1.Size = new System.Drawing.Size(122, 21); this._cbProcTarget1.TabIndex = 3; this._cbProcTarget1.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // + // // _cbProcTarget2 - // + // this._cbProcTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._cbProcTarget2.DropDownHeight = 500; this._cbProcTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1028,19 +1046,19 @@ private void InitializeComponent() this._cbProcTarget2.Size = new System.Drawing.Size(119, 21); this._cbProcTarget2.TabIndex = 3; this._cbProcTarget2.SelectedIndexChanged += new System.EventHandler(this.CbProcSpellFamilyNameSelectedIndexChanged); - // + // // _tbProcSeach - // - this._tbProcSeach.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._tbProcSeach.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tbProcSeach.Location = new System.Drawing.Point(3, 3); this._tbProcSeach.Name = "_tbProcSeach"; this._tbProcSeach.Size = new System.Drawing.Size(207, 20); this._tbProcSeach.TabIndex = 4; this._tbProcSeach.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TbSearchKeyDown); - // + // // _bProcSearch - // + // this._bProcSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._bProcSearch.Location = new System.Drawing.Point(215, 3); this._bProcSearch.Name = "_bProcSearch"; @@ -1049,12 +1067,12 @@ private void InitializeComponent() this._bProcSearch.Text = "Search"; this._bProcSearch.UseVisualStyleBackColor = true; this._bProcSearch.Click += new System.EventHandler(this.BProcSearchClick); - // + // // _lvProcSpellList - // + // this._lvProcSpellList.AllowColumnReorder = true; - this._lvProcSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + this._lvProcSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._lvProcSpellList.FullRowSelect = true; this._lvProcSpellList.GridLines = true; @@ -1070,21 +1088,21 @@ private void InitializeComponent() this._lvProcSpellList.VirtualMode = true; this._lvProcSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.LvProcSpellListRetrieveVirtualItem); this._lvProcSpellList.SelectedIndexChanged += new System.EventHandler(this.LvProcSpellListSelectedIndexChanged); - // + // // _chProcID - // + // this._chProcID.DisplayIndex = 0; this._chProcID.Text = "ID"; this._chProcID.Width = 45; - // + // // _chProcName - // + // this._chProcName.DisplayIndex = 1; this._chProcName.Text = "Name"; this._chProcName.Width = 210; - // + // // _rtbProcSpellInfo - // + // this._rtbProcSpellInfo.BackColor = System.Drawing.SystemColors.MenuBar; this._rtbProcSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; this._rtbProcSpellInfo.Font = new System.Drawing.Font("Arial Unicode MS", 9F); @@ -1093,11 +1111,11 @@ private void InitializeComponent() this._rtbProcSpellInfo.Size = new System.Drawing.Size(330, 244); this._rtbProcSpellInfo.TabIndex = 0; this._rtbProcSpellInfo.Text = ""; - // + // // _tvFamilyTree - // - this._tvFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + // + this._tvFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._tvFamilyTree.CheckBoxes = true; this._tvFamilyTree.LineColor = System.Drawing.Color.Empty; @@ -1108,10 +1126,10 @@ private void InitializeComponent() this._tvFamilyTree.TabIndex = 0; this._tvFamilyTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.FamilyTreeAfterCheck); this._tvFamilyTree.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.TvFamilyTreeAfterSelect); - // + // // _cbProcSpellFamilyTree - // - this._cbProcSpellFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._cbProcSpellFamilyTree.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._cbProcSpellFamilyTree.DropDownHeight = 500; this._cbProcSpellFamilyTree.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; @@ -1122,10 +1140,10 @@ private void InitializeComponent() this._cbProcSpellFamilyTree.Size = new System.Drawing.Size(258, 21); this._cbProcSpellFamilyTree.TabIndex = 1; this._cbProcSpellFamilyTree.SelectedIndexChanged += new System.EventHandler(this.TvFamilyTreeSelectedIndexChanged); - // + // // _gSpellProcEvent - // - this._gSpellProcEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this._gSpellProcEvent.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._gSpellProcEvent.BackColor = System.Drawing.Color.WhiteSmoke; this._gSpellProcEvent.FlatStyle = System.Windows.Forms.FlatStyle.Flat; @@ -1134,63 +1152,63 @@ private void InitializeComponent() this._gSpellProcEvent.Size = new System.Drawing.Size(857, 63); this._gSpellProcEvent.TabIndex = 8; this._gSpellProcEvent.TabStop = false; - // + // // _tbCooldown - // + // this._tbCooldown.Location = new System.Drawing.Point(285, 38); this._tbCooldown.MaxLength = 10; this._tbCooldown.Name = "_tbCooldown"; this._tbCooldown.Size = new System.Drawing.Size(60, 20); this._tbCooldown.TabIndex = 7; this._tbCooldown.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); - this._tbCooldown.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); - // + this._tbCooldown.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBoxKeyPress); + // // label3 - // + // this.label3.AutoSize = true; this.label3.Location = new System.Drawing.Point(225, 41); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(54, 13); this.label3.TabIndex = 6; - // + // // _tbChance - // + // this._tbChance.Location = new System.Drawing.Point(155, 38); this._tbChance.MaxLength = 10; this._tbChance.Name = "_tbChance"; this._tbChance.Size = new System.Drawing.Size(60, 20); this._tbChance.TabIndex = 7; this._tbChance.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); - this._tbChance.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); - // + this._tbChance.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBoxKeyPress); + // // label2 - // + // this.label2.AutoSize = true; this.label2.Location = new System.Drawing.Point(105, 41); this.label2.Name = "label2"; this.label2.Size = new System.Drawing.Size(44, 13); this.label2.TabIndex = 6; - // + // // _tbPPM - // + // this._tbPPM.Location = new System.Drawing.Point(39, 38); this._tbPPM.MaxLength = 10; this._tbPPM.Name = "_tbPPM"; this._tbPPM.Size = new System.Drawing.Size(60, 20); this._tbPPM.TabIndex = 7; this._tbPPM.TextChanged += new System.EventHandler(this.TbCooldownTextChanged); - this._tbPPM.KeyPress += new System.Windows.Forms.KeyPressEventHandler(TextBoxKeyPress); - // + this._tbPPM.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TextBoxKeyPress); + // // label1 - // + // this.label1.AutoSize = true; this.label1.Location = new System.Drawing.Point(3, 41); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(30, 13); this.label1.TabIndex = 6; - // + // // _cbProcFitstSpellFamily - // + // this._cbProcFitstSpellFamily.DropDownHeight = 500; this._cbProcFitstSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this._cbProcFitstSpellFamily.FormattingEnabled = true; @@ -1200,9 +1218,9 @@ private void InitializeComponent() this._cbProcFitstSpellFamily.Size = new System.Drawing.Size(342, 21); this._cbProcFitstSpellFamily.TabIndex = 4; this._cbProcFitstSpellFamily.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); - // + // // _clbSchools - // + // this._clbSchools.CheckOnClick = true; this._clbSchools.ColumnWidth = 100; this._clbSchools.Dock = System.Windows.Forms.DockStyle.Right; @@ -1213,10 +1231,10 @@ private void InitializeComponent() this._clbSchools.Size = new System.Drawing.Size(463, 44); this._clbSchools.TabIndex = 5; this._clbSchools.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); - // + // // groupBox4 - // - this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this.groupBox4.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox4.BackColor = System.Drawing.Color.WhiteSmoke; this.groupBox4.Location = new System.Drawing.Point(3, 60); @@ -1224,9 +1242,9 @@ private void InitializeComponent() this.groupBox4.Size = new System.Drawing.Size(858, 75); this.groupBox4.TabIndex = 9; this.groupBox4.TabStop = false; - // + // // _clbProcFlagEx - // + // this._clbProcFlagEx.CheckOnClick = true; this._clbProcFlagEx.ColumnWidth = 120; this._clbProcFlagEx.Dock = System.Windows.Forms.DockStyle.Fill; @@ -1237,10 +1255,10 @@ private void InitializeComponent() this._clbProcFlagEx.Size = new System.Drawing.Size(852, 56); this._clbProcFlagEx.TabIndex = 3; this._clbProcFlagEx.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); - // + // // groupBox5 - // - this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + // + this.groupBox5.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this.groupBox5.BackColor = System.Drawing.Color.WhiteSmoke; this.groupBox5.Location = new System.Drawing.Point(3, 128); @@ -1248,9 +1266,9 @@ private void InitializeComponent() this.groupBox5.Size = new System.Drawing.Size(858, 115); this.groupBox5.TabIndex = 10; this.groupBox5.TabStop = false; - // + // // _clbProcFlags - // + // this._clbProcFlags.CheckOnClick = true; this._clbProcFlags.ColumnWidth = 170; this._clbProcFlags.Dock = System.Windows.Forms.DockStyle.Fill; @@ -1261,23 +1279,30 @@ private void InitializeComponent() this._clbProcFlags.Size = new System.Drawing.Size(852, 96); this._clbProcFlags.TabIndex = 0; this._clbProcFlags.SelectedIndexChanged += new System.EventHandler(this.ClbSchoolsSelectedIndexChanged); - // + // // splitContainer6 - // + // this.splitContainer6.Dock = System.Windows.Forms.DockStyle.Fill; this.splitContainer6.Location = new System.Drawing.Point(3, 16); this.splitContainer6.Name = "splitContainer6"; this.splitContainer6.Orientation = System.Windows.Forms.Orientation.Horizontal; - // + // + // splitContainer6.Panel1 + // + this.splitContainer6.Panel1.Controls.Add(this._lvDataList); + // // splitContainer6.Panel2 - // + // this.splitContainer6.Panel2.BackColor = System.Drawing.Color.WhiteSmoke; this.splitContainer6.Size = new System.Drawing.Size(858, 444); this.splitContainer6.SplitterDistance = 229; this.splitContainer6.TabIndex = 0; - // + this.splitContainer6.Panel2.Controls.Add(this._rtbSqlLog); + this.splitContainer6.Panel2.Controls.Add(this._bSqlToBase); + this.splitContainer6.Panel2.Controls.Add(this._bSqlSave); + // // _bSqlSave - // + // this._bSqlSave.Location = new System.Drawing.Point(3, 3); this._bSqlSave.Name = "_bSqlSave"; this._bSqlSave.Size = new System.Drawing.Size(75, 23); @@ -1285,9 +1310,9 @@ private void InitializeComponent() this._bSqlSave.Text = "Save"; this._bSqlSave.UseVisualStyleBackColor = true; this._bSqlSave.Click += new System.EventHandler(this.SqlSaveClick); - // + // // _bSqlToBase - // + // this._bSqlToBase.Location = new System.Drawing.Point(84, 3); this._bSqlToBase.Name = "_bSqlToBase"; this._bSqlToBase.Size = new System.Drawing.Size(75, 23); @@ -1295,20 +1320,33 @@ private void InitializeComponent() this._bSqlToBase.Text = "To DB"; this._bSqlToBase.UseVisualStyleBackColor = true; this._bSqlToBase.Click += new System.EventHandler(this.SqlToBaseClick); - // + // // _rtbSqlLog - // - this._rtbSqlLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) + // + this._rtbSqlLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); this._rtbSqlLog.Location = new System.Drawing.Point(0, 32); this._rtbSqlLog.Name = "_rtbSqlLog"; this._rtbSqlLog.Size = new System.Drawing.Size(858, 182); this._rtbSqlLog.TabIndex = 3; this._rtbSqlLog.Text = ""; - // + // // _lvDataList - // + // + this._lvDataList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.entry, + this.spellname, + this.schoolmask, + this.spellfamilyname, + this.spellfamilymask0, + this.spellfamilymask1, + this.spellfamilymask2, + this.procflag, + this.procEx, + this.ppmRate, + this.customchance, + this.cooldown}); this._lvDataList.Dock = System.Windows.Forms.DockStyle.Fill; this._lvDataList.FullRowSelect = true; this._lvDataList.GridLines = true; @@ -1321,78 +1359,78 @@ private void InitializeComponent() this._lvDataList.UseCompatibleStateImageBehavior = false; this._lvDataList.View = System.Windows.Forms.View.Details; this._lvDataList.VirtualMode = true; - this._lvDataList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(LvSqlDataRetrieveVirtualItem); + this._lvDataList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.LvSqlDataRetrieveVirtualItem); this._lvDataList.KeyDown += new System.Windows.Forms.KeyEventHandler(this.SqlDataListKeyDown); this._lvDataList.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.SqlDataListMouseDoubleClick); - // + // // entry - // + // this.entry.DisplayIndex = 0; this.entry.Text = "Entry"; this.entry.Width = 56; - // + // // spellname - // + // this.spellname.DisplayIndex = 1; this.spellname.Text = "Spell Name"; this.spellname.Width = 300; - // + // // schoolmask - // + // this.schoolmask.DisplayIndex = 2; this.schoolmask.Text = "School Mask"; this.schoolmask.Width = 78; - // + // // spellfamilyname - // + // this.spellfamilyname.DisplayIndex = 3; this.spellfamilyname.Text = "Spell Family Name"; this.spellfamilyname.Width = 103; - // + // // spellfamilymask0 - // + // this.spellfamilymask0.DisplayIndex = 4; this.spellfamilymask0.Text = "Spell Family Mask 0"; this.spellfamilymask0.Width = 110; - // + // // spellfamilymask1 - // + // this.spellfamilymask1.DisplayIndex = 5; this.spellfamilymask1.Text = "Spell Family Mask 1"; this.spellfamilymask1.Width = 110; - // + // // spellfamilymask2 - // + // this.spellfamilymask2.DisplayIndex = 6; this.spellfamilymask2.Text = "Spell Family Mask 2"; this.spellfamilymask2.Width = 110; - // + // // procflag - // + // this.procflag.DisplayIndex = 7; this.procflag.Text = "Proc Flags"; this.procflag.Width = 80; - // + // // procEx - // + // this.procEx.DisplayIndex = 8; this.procEx.Text = "Proc Ex"; this.procEx.Width = 80; - // + // // ppmRate - // + // this.ppmRate.DisplayIndex = 9; this.ppmRate.Text = "PPM Rate"; this.ppmRate.Width = 67; - // + // // customchance - // + // this.customchance.DisplayIndex = 10; this.customchance.Text = "Custom Chance"; this.customchance.Width = 93; - // + // // cooldown - // + // this.cooldown.DisplayIndex = 11; this.cooldown.Text = "Colldown"; // @@ -1406,9 +1444,9 @@ private void InitializeComponent() this._bSelect.Text = "Select"; this._bSelect.UseVisualStyleBackColor = true; this._bSelect.Click += new System.EventHandler(this.SelectClick); - // + // // _cbSqlSpellFamily - // + // this._cbSqlSpellFamily.DropDownHeight = 500; this._cbSqlSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; this._cbSqlSpellFamily.FormattingEnabled = true; @@ -1417,37 +1455,37 @@ private void InitializeComponent() this._cbSqlSpellFamily.Name = "_cbSqlSpellFamily"; this._cbSqlSpellFamily.Size = new System.Drawing.Size(272, 21); this._cbSqlSpellFamily.TabIndex = 1; - // + // // textBox1 - // + // this.textBox1.Location = new System.Drawing.Point(429, 17); this.textBox1.Name = "textBox1"; this.textBox1.Size = new System.Drawing.Size(100, 20); this.textBox1.TabIndex = 2; - // + // // _tbSqlSchool - // + // this._tbSqlSchool.Location = new System.Drawing.Point(620, 17); this._tbSqlSchool.Name = "_tbSqlSchool"; this._tbSqlSchool.Size = new System.Drawing.Size(92, 20); this._tbSqlSchool.TabIndex = 3; - // + // // _tbSqlProc - // + // this._tbSqlProc.Location = new System.Drawing.Point(429, 53); this._tbSqlProc.Name = "_tbSqlProc"; this._tbSqlProc.Size = new System.Drawing.Size(100, 20); this._tbSqlProc.TabIndex = 3; - // + // // _tbSqlProcEx - // + // this._tbSqlProcEx.Location = new System.Drawing.Point(620, 53); this._tbSqlProcEx.Name = "_tbSqlProcEx"; this._tbSqlProcEx.Size = new System.Drawing.Size(92, 20); this._tbSqlProcEx.TabIndex = 3; - // + // // _bSqlSchool - // + // this._bSqlSchool.Location = new System.Drawing.Point(718, 15); this._bSqlSchool.Name = "_bSqlSchool"; this._bSqlSchool.Size = new System.Drawing.Size(28, 23); @@ -1455,9 +1493,9 @@ private void InitializeComponent() this._bSqlSchool.Text = "..."; this._bSqlSchool.UseVisualStyleBackColor = true; this._bSqlSchool.Click += new System.EventHandler(this.CalcProcFlagsClick); - // + // // _bSqlProc - // + // this._bSqlProc.Location = new System.Drawing.Point(535, 51); this._bSqlProc.Name = "_bSqlProc"; this._bSqlProc.Size = new System.Drawing.Size(28, 23); @@ -1465,9 +1503,9 @@ private void InitializeComponent() this._bSqlProc.Text = "..."; this._bSqlProc.UseVisualStyleBackColor = true; this._bSqlProc.Click += new System.EventHandler(this.CalcProcFlagsClick); - // + // // _bSqlProcEx - // + // this._bSqlProcEx.Location = new System.Drawing.Point(718, 51); this._bSqlProcEx.Name = "_bSqlProcEx"; this._bSqlProcEx.Size = new System.Drawing.Size(28, 23); @@ -1475,64 +1513,70 @@ private void InitializeComponent() this._bSqlProcEx.Text = "..."; this._bSqlProcEx.UseVisualStyleBackColor = true; this._bSqlProcEx.Click += new System.EventHandler(this.CalcProcFlagsClick); - // + // // label7 - // + // this.label7.AutoSize = true; this.label7.Location = new System.Drawing.Point(376, 20); this.label7.Name = "label7"; this.label7.Size = new System.Drawing.Size(47, 13); this.label7.TabIndex = 5; - // + this.label7.Text = "Spell ID:"; + // // label10 - // + // this.label10.AutoSize = true; this.label10.Location = new System.Drawing.Point(571, 20); this.label10.Name = "label10"; this.label10.Size = new System.Drawing.Size(43, 13); this.label10.TabIndex = 5; - // + this.label10.Text = "School:"; + // // label11 - // + // this.label11.AutoSize = true; this.label11.Location = new System.Drawing.Point(376, 56); this.label11.Name = "label11"; this.label11.Size = new System.Drawing.Size(32, 13); this.label11.TabIndex = 5; - // + this.label11.Text = "Proc:"; + // // label12 - // + // this.label12.AutoSize = true; this.label12.Location = new System.Drawing.Point(571, 56); this.label12.Name = "label12"; this.label12.Size = new System.Drawing.Size(47, 13); this.label12.TabIndex = 5; - // + this.label12.Text = "Proc Ex:"; + // // label8 - // + // this.label8.AutoSize = true; this.label8.Location = new System.Drawing.Point(6, 20); this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(70, 13); this.label8.TabIndex = 5; - // + this.label8.Text = "Family Name:"; + // // _tbSqlManual - // + // this._tbSqlManual.Location = new System.Drawing.Point(81, 53); this._tbSqlManual.Name = "_tbSqlManual"; this._tbSqlManual.Size = new System.Drawing.Size(272, 20); this._tbSqlManual.TabIndex = 6; - // + // // label9 - // + // this.label9.AutoSize = true; this.label9.Location = new System.Drawing.Point(6, 56); this.label9.Name = "label9"; this.label9.Size = new System.Drawing.Size(45, 13); this.label9.TabIndex = 7; - // + this.label9.Text = "Manual:"; + // // _cbBinaryCompare - // + // this._cbBinaryCompare.AutoSize = true; this._cbBinaryCompare.Location = new System.Drawing.Point(752, 55); this._cbBinaryCompare.Name = "_cbBinaryCompare"; @@ -1540,9 +1584,9 @@ private void InitializeComponent() this._cbBinaryCompare.TabIndex = 8; this._cbBinaryCompare.Text = "Binary Compare"; this._cbBinaryCompare.UseVisualStyleBackColor = true; - // + // // _cbProcFlag - // + // this._cbProcFlag.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right))); this._cbProcFlag.Appearance = System.Windows.Forms.Appearance.Button; this._cbProcFlag.AutoSize = true; @@ -1554,9 +1598,9 @@ private void InitializeComponent() this._cbProcFlag.UseVisualStyleBackColor = true; this._cbProcFlag.Visible = false; this._cbProcFlag.CheckedChanged += new System.EventHandler(this.CbProcFlagCheckedChanged); - // + // // _bWrite - // + // this._bWrite.Enabled = false; this._bWrite.Location = new System.Drawing.Point(686, 1); this._bWrite.Name = "_bWrite"; @@ -1566,9 +1610,9 @@ private void InitializeComponent() this._bWrite.UseVisualStyleBackColor = true; this._bWrite.Visible = false; this._bWrite.Click += new System.EventHandler(this.WriteClick); - // + // // _bLevelScaling - // + // this._bLevelScaling.Location = new System.Drawing.Point(808, 1); this._bLevelScaling.Name = "_bLevelScaling"; this._bLevelScaling.Size = new System.Drawing.Size(60, 23); @@ -1576,9 +1620,9 @@ private void InitializeComponent() this._bLevelScaling.Text = "Scaling"; this._bLevelScaling.UseVisualStyleBackColor = true; this._bLevelScaling.Click += new System.EventHandler(this.LevelScalingClick); - // + // // FormMain - // + // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(872, 629); diff --git a/SpellWork/Forms/FormMain.cs b/SpellWork/Forms/FormMain.cs index 8285f827..c96dc52d 100644 --- a/SpellWork/Forms/FormMain.cs +++ b/SpellWork/Forms/FormMain.cs @@ -54,12 +54,12 @@ public FormMain() #region FORM - private static void ExitClick(object sender, EventArgs e) + private void ExitClick(object sender, EventArgs e) { Application.Exit(); } - private static void AboutClick(object sender, EventArgs e) + private void AboutClick(object sender, EventArgs e) { var ab = new FormAboutBox(); ab.ShowDialog(); @@ -121,7 +121,7 @@ private void ConnectedClick(object sender, EventArgs e) ConnStatus(); } - private static void TextBoxKeyPress(object sender, KeyPressEventArgs e) + private void TextBoxKeyPress(object sender, KeyPressEventArgs e) { if (!((Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back))) e.Handled = true; @@ -538,7 +538,7 @@ private void SelectClick(object sender, EventArgs e) return; } - var sb = new StringBuilder("WHERE "); + var sb = new StringBuilder("WHERE"); var compare = _cbBinaryCompare.Checked ? "&" : "="; if (_cbSqlSpellFamily.SelectedValue.ToInt32() != -1) @@ -546,13 +546,22 @@ private void SelectClick(object sender, EventArgs e) sb.AppendFormatIfNotNull(" SchoolMask {1} {0} &&", _tbSqlSchool.Text.ToInt32(), compare); sb.AppendFormatIfNotNull(" procFlags {1} {0} &&", _tbSqlProc.Text.ToInt32(), compare); - sb.AppendFormatIfNotNull(" procEx {1} {0} &&", _tbSqlProcEx.Text.ToInt32(), compare); + sb.AppendFormatIfNotNull(" procEx {1} {0}", _tbSqlProcEx.Text.ToInt32(), compare); - var subquery = sb.ToString().Remove(sb.Length - 2, 2); - subquery = subquery == "WHERE" ? string.Empty : subquery; + var subquery = sb.ToString() == "WHERE" ? string.Empty : sb.ToString(); + + if (subquery == string.Empty && _tbSqlManual.Text != string.Empty) + subquery = "WHERE " + _tbSqlManual.Text; var query = String.Format("SELECT * FROM `spell_proc_event` {0} ORDER BY entry", subquery); - MySqlConnection.SelectProc(query); + try + { + MySqlConnection.SelectProc(query); + } + catch (Exception ex) + { + MessageBox.Show("Error: " + ex.Message); + } _lvDataList.VirtualListSize = MySqlConnection.SpellProcEvent.Count; if (_lvDataList.SelectedIndices.Count > 0) @@ -632,7 +641,7 @@ private void LvProcSpellListRetrieveVirtualItem(object sender, RetrieveVirtualIt {_spellProcList[e.ItemIndex].ID.ToString(), _spellProcList[e.ItemIndex].SpellNameRank}); } - private static void LvSqlDataRetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) + private void LvSqlDataRetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) { e.Item = new ListViewItem(MySqlConnection.SpellProcEvent[e.ItemIndex].ToArray()); } diff --git a/SpellWork/Forms/FormMain.resx b/SpellWork/Forms/FormMain.resx index 30bc08f4..caf512b9 100644 --- a/SpellWork/Forms/FormMain.resx +++ b/SpellWork/Forms/FormMain.resx @@ -131,7 +131,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAY - DQAAAk1TRnQBSQFMAgEBBgEAAUwBAAFMAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + DQAAAk1TRnQBSQFMAgEBBgEAAVQBAAFUAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAASADAAEBAQABCAYAAQgYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA From 5938a5a041377323824387f3c0481fe0819b6988 Mon Sep 17 00:00:00 2001 From: Sebastian Valle Date: Sun, 3 Nov 2013 15:27:54 -0500 Subject: [PATCH 53/58] Updated the MySQL connector to the latest version --- SpellWork/libs/MySql.Data.dll | Bin 353792 -> 438272 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/SpellWork/libs/MySql.Data.dll b/SpellWork/libs/MySql.Data.dll index 992aa5621cc13880d2c16d9527816c58193d3a26..87aabe6203d0f2dbfb9e0cc187847854af83994a 100644 GIT binary patch literal 438272 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%0Dg!b(*1bWvrDC|D6%$#so`*uADZ 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 y_88D2Fl3AL_aRJ0T? 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

5pQF8gP{JKWH=?hju4nLEDyH_xZv{VRu> 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

ADYfO88-WMK_Eb6dhB>U{hulX|H`wKj`A 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Ξ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 ey From e4ea9d32720501944ffd57b5fc9c8ba392ffc868 Mon Sep 17 00:00:00 2001 From: Artox Date: Mon, 27 Jan 2014 17:28:21 +0100 Subject: [PATCH 54/58] fix case-sensitive folder name "DataBase" in project file --- SpellWork/SpellWork.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SpellWork/SpellWork.csproj b/SpellWork/SpellWork.csproj index 139d0c5a..c646f1e4 100644 --- a/SpellWork/SpellWork.csproj +++ b/SpellWork/SpellWork.csproj @@ -106,7 +106,7 @@ - + Form @@ -207,4 +207,4 @@ --> - \ No newline at end of file + From 692a1003ced2e6eb06a3fa800a3c42668c8b8b3b Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 15 Jul 2014 13:50:56 +0200 Subject: [PATCH 55/58] Added more attribute names from tc --- SpellWork/Spell/SpellEnums.cs | 8 ++++---- SpellWork/Spell/SpellInfo.cs | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/SpellWork/Spell/SpellEnums.cs b/SpellWork/Spell/SpellEnums.cs index aa7ee998..34c97db7 100644 --- a/SpellWork/Spell/SpellEnums.cs +++ b/SpellWork/Spell/SpellEnums.cs @@ -1276,7 +1276,7 @@ public enum SpellAtributeEx2 : uint SPELL_ATTR2_UNK25 = 0x02000000, // 25 SPELL_ATTR2_UNK26 = 0x04000000, // 26 unaffected by school immunity SPELL_ATTR2_UNK27 = 0x08000000, // 27 - SPELL_ATTR2_UNK28 = 0x10000000, // 28 + SPELL_ATTR2_UNK28 = 0x10000000, // 28 SPELL_ATTR2_CANT_CRIT = 0x20000000, // 29 Spell can't crit SPELL_ATTR2_TRIGGERED_CAN_TRIGGER_PROC = 0x40000000, // 30 spell can trigger even if triggered SPELL_ATTR2_FOOD_BUFF = 0x80000000 // 31 Food or Drink Buff (like Well Fed) @@ -1300,7 +1300,7 @@ public enum SpellAtributeEx3 : uint SPELL_ATTR3_MAIN_HAND = 0x00000400, // 10 Main hand weapon required SPELL_ATTR3_BATTLEGROUND = 0x00000800, // 11 Can casted only on battleground SPELL_ATTR3_ONLY_TARGET_GHOSTS = 0x00001000, // 12 - SPELL_ATTR3_UNK13 = 0x00002000, // 13 + SPELL_ATTR3_DONT_DISPLAY_CHANNEL_BAR = 0x00002000, // 13 Clientside attribute - will not display channeling bar SPELL_ATTR3_IS_HONORLESS_TARGET = 0x00004000, // 14 "Honorless Target" only this spells have this flag SPELL_ATTR3_UNK15 = 0x00008000, // 15 Auto Shoot, Shoot, Throw, - this is autoshot flag SPELL_ATTR3_CANT_TRIGGER_PROC = 0x00010000, // 16 confirmed with many patchnotes @@ -1449,7 +1449,7 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_IS_CHEAT_SPELL = 0x00000008, // 3 Cannot cast if caster doesn't have UnitFlag2 & UNIT_FLAG2_ALLOW_CHEAT_SPELLS SPELL_ATTR7_UNK4 = 0x00000010, // 4 Only 47883 (Soulstone Resurrection) and test spell. SPELL_ATTR7_SUMMON_PLAYER_TOTEM = 0x00000020, // 5 Only Shaman player totems. - SPELL_ATTR7_UNK6 = 0x00000040, // 6 Dark Surge, Surge of Light, Burning Breath triggers (boss spells). + SPELL_ATTR7_NO_PUSHBACK_ON_DAMAGE = 0x00000040, // 6 Does not cause spell pushback on damage SPELL_ATTR7_UNK7 = 0x00000080, // 7 66218 (Launch) spell. SPELL_ATTR7_HORDE_ONLY = 0x00000100, // 8 Teleports, mounts and other spells. SPELL_ATTR7_ALLIANCE_ONLY = 0x00000200, // 9 Teleports, mounts and other spells. @@ -1459,7 +1459,7 @@ public enum SpellAtributeEx7 : uint SPELL_ATTR7_UNK13 = 0x00002000, // 13 Not set in 3.2.2a. SPELL_ATTR7_UNK14 = 0x00004000, // 14 Only 52150 (Raise Dead - Pet) spell. SPELL_ATTR7_UNK15 = 0x00008000, // 15 Exorcism. Usable on players? 100% crit chance on undead and demons? - SPELL_ATTR7_UNK16 = 0x00010000, // 16 Druid spells (29166, 54833, 64372, 68285). + SPELL_ATTR7_CAN_RESTORE_SECONDARY_POWER = 0x00010000, // 16 These spells can replenish a powertype, which is not the current powertype SPELL_ATTR7_UNK17 = 0x00020000, // 17 Only 27965 (Suicide) spell. SPELL_ATTR7_HAS_CHARGE_EFFECT = 0x00040000, // 18 Only spells that have Charge among effects. SPELL_ATTR7_ZONE_TELEPORT = 0x00080000, // 19 Teleports to specific zones. diff --git a/SpellWork/Spell/SpellInfo.cs b/SpellWork/Spell/SpellInfo.cs index ee026d1a..5555b7a2 100644 --- a/SpellWork/Spell/SpellInfo.cs +++ b/SpellWork/Spell/SpellInfo.cs @@ -161,7 +161,8 @@ private void ViewSpellInfo() _rtb.AppendLine(_spell.Duration); - if (_spell.ManaCost != 0 || _spell.ManaCostPercentage != 0) + if (_spell.ManaCost != 0 || _spell.ManaCostPercentage != 0 || _spell.PowerType != 0 || + _spell.ManaCostPerlevel != 0 || _spell.ManaPerSecond != 0 || _spell.ManaPerSecondPerLevel != 0) { _rtb.AppendFormat("Power {0}, Cost {1}", (Powers)_spell.PowerType, _spell.ManaCost == 0 ? _spell.ManaCostPercentage + " %" : _spell.ManaCost.ToString()); From 19504faf61f9a903d439c521bc06c9c7f5459614 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 15 Jul 2014 13:55:52 +0200 Subject: [PATCH 56/58] Remove vshost,debug,trace for release builds --- SpellWork/SpellWork.csproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SpellWork/SpellWork.csproj b/SpellWork/SpellWork.csproj index c646f1e4..a5680935 100644 --- a/SpellWork/SpellWork.csproj +++ b/SpellWork/SpellWork.csproj @@ -46,16 +46,16 @@ AllRules.ruleset - pdbonly + none true bin\Release\ - DEBUG;TRACE prompt 4 true AllRules.ruleset + false @@ -207,4 +207,4 @@ --> - + \ No newline at end of file From 5fa3aa14845250dc3e2e1569b57c96d065ae4374 Mon Sep 17 00:00:00 2001 From: xjose93 Date: Thu, 25 Dec 2014 15:09:59 +0100 Subject: [PATCH 57/58] Allow to select dbc path instead select only default directory. (cherry picked from commit 83914cdef47a22232341e12fbbf038fe2e503308) Conflicts: SpellWork/DBC/DBC.cs --- SpellWork/DBC/DBC.cs | 14 +++++- SpellWork/Forms/FormSettings.Designer.cs | 54 ++++++++++++++++++++--- SpellWork/Forms/FormSettings.cs | 17 +++++++ SpellWork/Properties/Settings.Designer.cs | 12 +++++ SpellWork/Properties/Settings.settings | 3 ++ SpellWork/app.config | 3 ++ 6 files changed, 94 insertions(+), 9 deletions(-) diff --git a/SpellWork/DBC/DBC.cs b/SpellWork/DBC/DBC.cs index efb15da0..13105d0b 100644 --- a/SpellWork/DBC/DBC.cs +++ b/SpellWork/DBC/DBC.cs @@ -6,13 +6,13 @@ using SpellWork.Database; using SpellWork.DBC.Structures; using SpellWork.Spell; +using SpellWork.Properties; namespace SpellWork.DBC { public static class DBC { public const string Version = "SpellWork 4.3.4 (15595)"; - public const string DbcPath = @"dbc"; public const uint MaxLevel = 85; public const int MaxDbcLocale = 16; @@ -64,6 +64,16 @@ public static class DBC public static void Load() { + if (!Directory.Exists(Settings.Default.DbcPath)) + { + System.Windows.Forms.FolderBrowserDialog browserDialog = new System.Windows.Forms.FolderBrowserDialog(); + if (browserDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK) + { + Settings.Default.DbcPath = browserDialog.SelectedPath; + Settings.Default.Save(); + } + } + foreach (var dbc in typeof(DBC).GetFields(BindingFlags.Static | BindingFlags.Public)) { if (!dbc.FieldType.IsGenericType) @@ -85,7 +95,7 @@ public static void Load() try { - using (var strm = new FileStream(String.Format("{0}\\{1}.{2}", DbcPath, name, extension), FileMode.Open)) + using (var strm = new FileStream(String.Format("{0}\\{1}.{2}", Settings.Default.DbcPath, name, extension), FileMode.Open)) dbc.FieldType.GetMethod("Load", new Type[] { typeof(FileStream) }).Invoke(dbc.GetValue(null), new object[] { strm }); } catch (DirectoryNotFoundException) diff --git a/SpellWork/Forms/FormSettings.Designer.cs b/SpellWork/Forms/FormSettings.Designer.cs index d97680be..bb176aaa 100644 --- a/SpellWork/Forms/FormSettings.Designer.cs +++ b/SpellWork/Forms/FormSettings.Designer.cs @@ -42,7 +42,11 @@ private void InitializeComponent() this.label1 = new System.Windows.Forms.Label(); this._cbUseDBConnect = new System.Windows.Forms.CheckBox(); this._bTestConnect = new System.Windows.Forms.Button(); + this._tbPath = new System.Windows.Forms.TextBox(); + this.label6 = new System.Windows.Forms.Label(); this._bSaveSettings = new System.Windows.Forms.Button(); + this.folderBrowserDialog1 = new System.Windows.Forms.FolderBrowserDialog(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); this._gbDbSetting.SuspendLayout(); this.SuspendLayout(); // @@ -60,7 +64,7 @@ private void InitializeComponent() this._gbDbSetting.Controls.Add(this.label1); this._gbDbSetting.Location = new System.Drawing.Point(12, 12); this._gbDbSetting.Name = "_gbDbSetting"; - this._gbDbSetting.Size = new System.Drawing.Size(217, 158); + this._gbDbSetting.Size = new System.Drawing.Size(217, 149); this._gbDbSetting.TabIndex = 0; this._gbDbSetting.TabStop = false; this._gbDbSetting.Text = "Date Base Connect Settings"; @@ -145,11 +149,29 @@ private void InitializeComponent() this.label1.Size = new System.Drawing.Size(29, 13); this.label1.TabIndex = 0; this.label1.Text = "Host"; + // + // _tbPath + // + this._tbPath.Location = new System.Drawing.Point(66, 196); + this._tbPath.Name = "_tbPath"; + this._tbPath.Size = new System.Drawing.Size(152, 20); + this._tbPath.TabIndex = 6; + this._tbPath.Click += new System.EventHandler(this._tbPathClick); + this._tbPath.MouseHover += new System.EventHandler(this._tbPathMouseHover); + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(9, 199); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(54, 13); + this.label6.TabIndex = 5; + this.label6.Text = "DBC Path"; // // _cbUseDBConnect // this._cbUseDBConnect.AutoSize = true; - this._cbUseDBConnect.Location = new System.Drawing.Point(21, 176); + this._cbUseDBConnect.Location = new System.Drawing.Point(11, 171); this._cbUseDBConnect.Name = "_cbUseDBConnect"; this._cbUseDBConnect.Size = new System.Drawing.Size(106, 17); this._cbUseDBConnect.TabIndex = 5; @@ -159,7 +181,7 @@ private void InitializeComponent() // // _bTestConnect // - this._bTestConnect.Location = new System.Drawing.Point(12, 199); + this._bTestConnect.Location = new System.Drawing.Point(123, 167); this._bTestConnect.Name = "_bTestConnect"; this._bTestConnect.Size = new System.Drawing.Size(95, 23); this._bTestConnect.TabIndex = 6; @@ -169,7 +191,7 @@ private void InitializeComponent() // // _bSaveSettings // - this._bSaveSettings.Location = new System.Drawing.Point(134, 199); + this._bSaveSettings.Location = new System.Drawing.Point(66, 222); this._bSaveSettings.Name = "_bSaveSettings"; this._bSaveSettings.Size = new System.Drawing.Size(95, 23); this._bSaveSettings.TabIndex = 7; @@ -177,21 +199,35 @@ private void InitializeComponent() this._bSaveSettings.UseVisualStyleBackColor = true; this._bSaveSettings.Click += new System.EventHandler(this.BSaveSettingsClick); // + // folderBrowserDialog1 + // + this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.DesktopDirectory; + this.folderBrowserDialog1.SelectedPath = "."; + this.folderBrowserDialog1.ShowNewFolderButton = false; + // + // toolTip1 + // + this.toolTip1.AutoPopDelay = 5000; + this.toolTip1.InitialDelay = 0; + this.toolTip1.ReshowDelay = 0; + // // FormSettings // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(234, 229); + this.ClientSize = new System.Drawing.Size(234, 250); this.Controls.Add(this._bSaveSettings); this.Controls.Add(this._bTestConnect); this.Controls.Add(this._cbUseDBConnect); + this.Controls.Add(this._tbPath); + this.Controls.Add(this.label6); this.Controls.Add(this._gbDbSetting); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.KeyPreview = true; this.MaximizeBox = false; - this.MaximumSize = new System.Drawing.Size(250, 268); + this.MaximumSize = new System.Drawing.Size(250, 288); this.MinimizeBox = false; - this.MinimumSize = new System.Drawing.Size(250, 268); + this.MinimumSize = new System.Drawing.Size(250, 288); this.Name = "FormSettings"; this.ShowInTaskbar = false; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; @@ -221,5 +257,9 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox _cbUseDBConnect; private System.Windows.Forms.Button _bTestConnect; private System.Windows.Forms.Button _bSaveSettings; + private System.Windows.Forms.TextBox _tbPath; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.FolderBrowserDialog folderBrowserDialog1; + private System.Windows.Forms.ToolTip toolTip1; } } \ No newline at end of file diff --git a/SpellWork/Forms/FormSettings.cs b/SpellWork/Forms/FormSettings.cs index 2d3549e2..1f856aa0 100644 --- a/SpellWork/Forms/FormSettings.cs +++ b/SpellWork/Forms/FormSettings.cs @@ -15,6 +15,7 @@ public FormSettings() private void CbUseDbConnectCheckedChanged(object sender, EventArgs e) { _gbDbSetting.Enabled = ((CheckBox)sender).Checked; + this._bTestConnect.Enabled = _gbDbSetting.Enabled; } private void BSaveSettingsClick(object sender, EventArgs e) @@ -25,6 +26,7 @@ private void BSaveSettingsClick(object sender, EventArgs e) Settings.Default.Pass = _tbPass.Text; Settings.Default.WorldDbName = _tbBase.Text; Settings.Default.UseDbConnect = _cbUseDBConnect.Checked; + Settings.Default.DbcPath = _tbPath.Text; MySqlConnection.TestConnect(); @@ -47,6 +49,7 @@ private void SettingsFormLoad(object sender, EventArgs e) _tbPass.Text = Settings.Default.Pass; _tbBase.Text = Settings.Default.WorldDbName; _gbDbSetting.Enabled = _cbUseDBConnect.Checked = Settings.Default.UseDbConnect; + _tbPath.Text = Settings.Default.DbcPath; } private void FormSettings_KeyDown(object sender, KeyEventArgs e) @@ -54,5 +57,19 @@ private void FormSettings_KeyDown(object sender, KeyEventArgs e) if (e.KeyCode == Keys.Escape) Close(); } + + private void _tbPathClick(object sender, EventArgs e) + { + if (folderBrowserDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) + { + Settings.Default.DbcPath = folderBrowserDialog1.SelectedPath; + Settings.Default.Save(); + } + } + + private void _tbPathMouseHover(object sender, EventArgs e) + { + toolTip1.Show("Click to select folder path of dbcs", _tbPath); + } } } diff --git a/SpellWork/Properties/Settings.Designer.cs b/SpellWork/Properties/Settings.Designer.cs index b834bc8d..c1ace11f 100644 --- a/SpellWork/Properties/Settings.Designer.cs +++ b/SpellWork/Properties/Settings.Designer.cs @@ -94,5 +94,17 @@ public bool UseDbConnect { this["UseDbConnect"] = value; } } + + [global::System.Configuration.UserScopedSettingAttribute()] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Configuration.DefaultSettingValueAttribute("dbc")] + public string DbcPath { + get { + return ((string)(this["DbcPath"])); + } + set { + this["DbcPath"] = value; + } + } } } diff --git a/SpellWork/Properties/Settings.settings b/SpellWork/Properties/Settings.settings index 51b5d232..1c53113c 100644 --- a/SpellWork/Properties/Settings.settings +++ b/SpellWork/Properties/Settings.settings @@ -20,5 +20,8 @@ False + + dbc + \ No newline at end of file diff --git a/SpellWork/app.config b/SpellWork/app.config index ca5e9255..a5fd4e33 100644 --- a/SpellWork/app.config +++ b/SpellWork/app.config @@ -25,6 +25,9 @@ False + + dbc + From 71157c508d1f2c1e796ffaf67c470b156b6f1208 Mon Sep 17 00:00:00 2001 From: DDuarte Date: Mon, 29 Feb 2016 23:58:51 +0000 Subject: [PATCH 58/58] Remove VS 2008 .sln --- SpellWork_VS2010.sln => SpellWork.sln | 0 SpellWork_VS2008.sln | 20 -------------------- 2 files changed, 20 deletions(-) rename SpellWork_VS2010.sln => SpellWork.sln (100%) delete mode 100644 SpellWork_VS2008.sln diff --git a/SpellWork_VS2010.sln b/SpellWork.sln similarity index 100% rename from SpellWork_VS2010.sln rename to SpellWork.sln diff --git a/SpellWork_VS2008.sln b/SpellWork_VS2008.sln deleted file mode 100644 index 7dfcfe29..00000000 --- a/SpellWork_VS2008.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 10.00 -# Visual Studio 2008 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpellWork", "SpellWork\SpellWork.csproj", "{49A3559B-529A-4406-824B-F7E2831DE1B2}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {49A3559B-529A-4406-824B-F7E2831DE1B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {49A3559B-529A-4406-824B-F7E2831DE1B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49A3559B-529A-4406-824B-F7E2831DE1B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {49A3559B-529A-4406-824B-F7E2831DE1B2}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal