├── .gitignore ├── README ├── SpellWork ├── DBC │ ├── DBC.cs │ └── Structure.cs ├── DataBase │ └── MySQLConnect.cs ├── Extensions │ ├── Extensions.cs │ ├── LinqExtensions.cs │ ├── RichTextBoxExtensions.cs │ └── TreeViewExtensions.cs ├── Forms │ ├── FormAboutBox.Designer.cs │ ├── FormAboutBox.cs │ ├── FormAboutBox.resx │ ├── FormCalculateFlags.Designer.cs │ ├── FormCalculateFlags.cs │ ├── FormCalculateFlags.resx │ ├── FormMain.Designer.cs │ ├── FormMain.cs │ ├── FormMain.resx │ ├── FormSearch.Designer.cs │ ├── FormSearch.cs │ ├── FormSearch.resx │ ├── FormSettings.Designer.cs │ ├── FormSettings.cs │ └── FormSettings.resx ├── Loader.cs ├── New Icon.ico ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Spell │ ├── ProcInfo.cs │ ├── SpellCompare.cs │ ├── SpellEnums.cs │ └── SpellInfo.cs ├── SpellWork.csproj ├── app.config ├── libs │ ├── DBFilesClient.NET.XML │ ├── DBFilesClient.NET.dll │ ├── DBFilesClient.NET.pdb │ └── MySql.Data.dll └── res │ ├── down.ico │ ├── drop.ico │ ├── family.ico │ ├── info.ico │ ├── munus.ico │ ├── ok.ico │ └── plus.ico ├── SpellWork_VS2008.sln ├── SpellWork_VS2010.sln └── SpellWork_VS2012.sln /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.suo 3 | *.user 4 | 5 | bin 6 | obj 7 | 8 | *.orig 9 | *.rej 10 | *.patch 11 | *.log 12 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | SpellWork is a tool originally created by Chestr (also known as DiSlord). 2 | 3 | This project is a try to rebuild the application using C#. 4 | 5 | Thanks goes to: 6 | Chestr - for the idea and released source of original spell_work 7 | TOM_RUS - for code samples 8 | -------------------------------------------------------------------------------- /SpellWork/DBC/DBC.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using DBFilesClient.NET; 3 | 4 | namespace SpellWork 5 | { 6 | public static class DBC 7 | { 8 | public const string VERSION = "SpellWork 3.3.5a (12340)"; 9 | public const string DBC_PATH = @"dbc"; 10 | 11 | public const int MAX_DBC_LOCALE = 16; 12 | public const int MAX_EFFECT_INDEX = 3; 13 | public const int SPELL_ENTRY_FOR_DETECT_LOCALE = 1; 14 | 15 | public static DBCStorage Spell; 16 | public static DBCStorage SpellRadius; 17 | public static DBCStorage SpellCastTimes; 18 | public static DBCStorage SpellDifficulty; 19 | public static DBCStorage SpellRange; 20 | public static DBCStorage SpellDuration; 21 | public static DBCStorage SkillLineAbility; 22 | public static DBCStorage SkillLine; 23 | public static DBCStorage ScreenEffect; 24 | public static DBCStorage OverrideSpellData; 25 | public static DBCStorage AreaGroup; 26 | public static DBCStorage AreaTable; 27 | public static DBCStorage SpellRuneCost; 28 | 29 | // DB 30 | public static List ItemTemplate = new List(); 31 | 32 | // Locale 33 | public static LocalesDBC Locale { get; set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /SpellWork/DataBase/MySQLConnect.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using SpellWork.Properties; 3 | using System.Collections.Generic; 4 | using MySql.Data.MySqlClient; 5 | using System.Windows.Forms; 6 | 7 | namespace SpellWork 8 | { 9 | public static class MySQLConnect 10 | { 11 | private static MySqlConnection _conn; 12 | private static MySqlCommand _command; 13 | 14 | public static bool Connected { get; private set; } 15 | public static List Dropped = new List(); 16 | public static List SpellProcEvent = new List(); 17 | 18 | private static String ConnectionString 19 | { 20 | get 21 | { 22 | return String.Format("Server={0};Port={1};Uid={2};Pwd={3};Database={4};character set=utf8;Connection Timeout=10", 23 | Settings.Default.Host, 24 | Settings.Default.Port, 25 | Settings.Default.User, 26 | Settings.Default.Pass, 27 | Settings.Default.Db_mangos); 28 | } 29 | } 30 | 31 | private static String GetSpellName(uint id) 32 | { 33 | if (DBC.Spell.ContainsKey(id)) 34 | { 35 | return DBC.Spell[id].SpellNameRank; 36 | } 37 | else 38 | { 39 | Dropped.Add(String.Format("DELETE FROM `spell_proc_event` WHERE `entry` IN ({0});\r\n", id.ToUInt32())); 40 | return String.Empty; 41 | } 42 | } 43 | 44 | public static void SelectProc(string query) 45 | { 46 | using (_conn = new MySqlConnection(ConnectionString)) 47 | { 48 | _command = new MySqlCommand(query, _conn); 49 | _conn.Open(); 50 | SpellProcEvent.Clear(); 51 | 52 | using (var reader = _command.ExecuteReader()) 53 | { 54 | while (reader.Read()) 55 | { 56 | SpellProcEventEntry str; 57 | 58 | str.ID = reader[0].ToUInt32(); 59 | str.SpellName = GetSpellName(str.ID); 60 | str.SchoolMask = reader[1].ToUInt32(); 61 | str.SpellFamilyName = reader[2].ToUInt32(); 62 | str.SpellFamilyMask = new[,] 63 | { 64 | { 65 | (uint)reader[3 ], 66 | (uint)reader[4 ], 67 | (uint)reader[5 ], 68 | }, 69 | { 70 | (uint)reader[6 ], 71 | (uint)reader[7 ], 72 | (uint)reader[8 ], 73 | }, 74 | { 75 | (uint)reader[9 ], 76 | (uint)reader[10], 77 | (uint)reader[11], 78 | } 79 | }; 80 | str.ProcFlags = reader[12].ToUInt32(); 81 | str.ProcEx = reader[13].ToUInt32(); 82 | str.PpmRate = reader[14].ToUInt32(); 83 | str.CustomChance = reader[15].ToUInt32(); 84 | str.Cooldown = reader[16].ToUInt32(); 85 | 86 | SpellProcEvent.Add(str); 87 | } 88 | } 89 | } 90 | } 91 | 92 | public static void Insert(string query) 93 | { 94 | _conn = new MySqlConnection(ConnectionString); 95 | _command = new MySqlCommand(query, _conn); 96 | _conn.Open(); 97 | _command.ExecuteNonQuery(); 98 | _command.Connection.Close(); 99 | } 100 | 101 | public static List SelectItems() 102 | { 103 | List items = DBC.ItemTemplate; 104 | // In order to reduce the search time, we make the first selection of all items that have spellid 105 | string query = String.Format( 106 | @"SELECT t.entry, 107 | t.name, 108 | t.description, 109 | l.name_loc{0}, 110 | l.description_loc{0}, 111 | t.spellid_1, 112 | t.spellid_2, 113 | t.spellid_3, 114 | t.spellid_4, 115 | t.spellid_5 116 | FROM 117 | `item_template` t 118 | LEFT JOIN 119 | `locales_item` l 120 | ON 121 | t.entry = l.entry 122 | WHERE 123 | t.spellid_1 <> 0 || 124 | t.spellid_2 <> 0 || 125 | t.spellid_3 <> 0 || 126 | t.spellid_4 <> 0 || 127 | t.spellid_5 <> 0;", 128 | (int)DBC.Locale == 0 ? 1 : (int)DBC.Locale /* it's huck TODO: replase code*/); 129 | 130 | using (_conn = new MySqlConnection(ConnectionString)) 131 | { 132 | _command = new MySqlCommand(query, _conn); 133 | _conn.Open(); 134 | 135 | using (MySqlDataReader reader = _command.ExecuteReader()) 136 | { 137 | while (reader.Read()) 138 | { 139 | items.Add(new Item 140 | { 141 | Entry = reader[0].ToUInt32(), 142 | Name = reader[1].ToString(), 143 | Description = reader[2].ToString(), 144 | LocalesName = reader[3].ToString(), 145 | LocalesDescription = reader[4].ToString(), 146 | SpellID = new uint[] 147 | { 148 | (uint)reader[5], 149 | (uint)reader[6], 150 | (uint)reader[7], 151 | (uint)reader[8], 152 | (uint)reader[9] 153 | } 154 | }); 155 | } 156 | } 157 | } 158 | return items; 159 | } 160 | 161 | public static void TestConnect() 162 | { 163 | if (!Settings.Default.UseDbConnect) 164 | { 165 | Connected = false; 166 | return; 167 | } 168 | 169 | try 170 | { 171 | _conn = new MySqlConnection(ConnectionString); 172 | _conn.Open(); 173 | _conn.Close(); 174 | Connected = true; 175 | } 176 | catch 177 | { 178 | Connected = false; 179 | } 180 | } 181 | } 182 | } 183 | -------------------------------------------------------------------------------- /SpellWork/Extensions/Extensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Runtime.InteropServices; 5 | using System.Text; 6 | using System.Windows.Forms; 7 | using System.Data; 8 | using System.Reflection; 9 | 10 | namespace SpellWork 11 | { 12 | public static class Extensions 13 | { 14 | /// 15 | /// Reads the NULL-terminated string from the current stream. 16 | /// 17 | /// Stream to read from. 18 | /// Resulting string. 19 | public static string ReadCString(this BinaryReader reader) 20 | { 21 | byte num; 22 | List temp = new List(); 23 | 24 | while ((num = reader.ReadByte()) != 0) 25 | { 26 | temp.Add(num); 27 | } 28 | 29 | return Encoding.UTF8.GetString(temp.ToArray()); 30 | } 31 | 32 | /// 33 | /// Reads the struct from the current stream. 34 | /// 35 | /// Struct type. 36 | /// Stream to read from. 37 | /// Resulting struct. 38 | public static unsafe T ReadStruct(this BinaryReader reader) where T : struct 39 | { 40 | byte[] rawData = reader.ReadBytes(Marshal.SizeOf(typeof(T))); 41 | 42 | GCHandle handle = GCHandle.Alloc(rawData, GCHandleType.Pinned); 43 | T returnObject = (T)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(T)); 44 | 45 | handle.Free(); 46 | 47 | return returnObject; 48 | } 49 | 50 | public static StringBuilder AppendFormatIfNotNull(this StringBuilder builder, string format, params object[] arg) 51 | { 52 | if (arg[0].ToUInt32() != 0) 53 | { 54 | return builder.AppendFormat(format, arg); 55 | } 56 | 57 | return builder; 58 | } 59 | 60 | // Append Format Line 61 | public static StringBuilder AppendFormatLine(this StringBuilder builder, string format, params object[] arg0) 62 | { 63 | return builder.AppendFormat(format, arg0).AppendLine(); 64 | } 65 | 66 | public static StringBuilder AppendFormatLineIfNotNull(this StringBuilder builder, string format, int arg) 67 | { 68 | if (arg != 0) 69 | { 70 | return builder.AppendFormat(format, arg).AppendLine(); 71 | } 72 | 73 | return builder; 74 | } 75 | 76 | public static StringBuilder AppendFormatLineIfNotNull(this StringBuilder builder, string format, uint arg) 77 | { 78 | if (arg != 0) 79 | { 80 | return builder.AppendFormat(format, arg).AppendLine(); 81 | } 82 | 83 | return builder; 84 | } 85 | 86 | public static uint ToUInt32(this Object val) 87 | { 88 | if (val == null) 89 | return 0; 90 | 91 | uint num; 92 | uint.TryParse(val.ToString(), out num); 93 | return num; 94 | } 95 | 96 | public static int ToInt32(this Object val) 97 | { 98 | if (val == null) 99 | return 0; 100 | 101 | int num; 102 | int.TryParse(val.ToString(), out num); 103 | return num; 104 | } 105 | 106 | public static float ToFloat(this Object val) 107 | { 108 | if (val == null) 109 | return 0.0f; 110 | 111 | float num; 112 | float.TryParse(val.ToString().Replace(',', '.'), out num); 113 | return num; 114 | } 115 | 116 | public static ulong ToUlong(this Object val) 117 | { 118 | if (val == null) 119 | return 0U; 120 | 121 | ulong num; 122 | ulong.TryParse(val.ToString(), out num); 123 | return num; 124 | } 125 | 126 | public static String NormaliseString(this String text, String remove) 127 | { 128 | var str = String.Empty; 129 | if (remove != String.Empty) 130 | { 131 | text = text.Replace(remove, String.Empty); 132 | } 133 | 134 | foreach (var s in text.Split('_')) 135 | { 136 | int i = 0; 137 | foreach (var c in s.ToCharArray()) 138 | { 139 | str += i == 0 ? c.ToString().ToUpper() : c.ToString().ToLower(); 140 | i++; 141 | } 142 | str += " "; 143 | } 144 | 145 | return str.Remove(str.Length - 1); 146 | } 147 | 148 | public static void SetCheckedItemFromFlag(this CheckedListBox _name, uint _value) 149 | { 150 | for (int i = 0; i < _name.Items.Count; ++i) 151 | { 152 | _name.SetItemChecked(i, ((_value / (1U << (i - 1))) % 2) != 0); 153 | } 154 | } 155 | 156 | public static uint GetFlagsValue(this CheckedListBox _name) 157 | { 158 | uint val = 0; 159 | for (int i = 0; i < _name.CheckedIndices.Count; i++) 160 | { 161 | val += 1U << (_name.CheckedIndices[i] - 1); 162 | } 163 | 164 | return val; 165 | } 166 | 167 | public static void SetFlags(this CheckedListBox _clb) 168 | { 169 | _clb.Items.Clear(); 170 | 171 | foreach (var elem in Enum.GetValues(typeof(T))) 172 | { 173 | _clb.Items.Add(elem.ToString().NormaliseString(String.Empty)); 174 | } 175 | } 176 | 177 | public static void SetFlags(this CheckedListBox _clb, String remove) 178 | { 179 | _clb.Items.Clear(); 180 | 181 | foreach (var elem in Enum.GetValues(typeof(T))) 182 | { 183 | _clb.Items.Add(elem.ToString().NormaliseString(remove)); 184 | } 185 | } 186 | 187 | public static void SetFlags(this CheckedListBox _clb, Type type, String remove) 188 | { 189 | _clb.Items.Clear(); 190 | 191 | foreach (var elem in Enum.GetValues(type)) 192 | { 193 | _clb.Items.Add(elem.ToString().NormaliseString(remove)); 194 | } 195 | } 196 | 197 | public static void SetEnumValues(this ComboBox cb, string NoValue) 198 | { 199 | DataTable dt = new DataTable(); 200 | dt.Columns.Add("ID"); 201 | dt.Columns.Add("NAME"); 202 | 203 | dt.Rows.Add(new Object[] { -1, NoValue }); 204 | 205 | foreach (var str in Enum.GetValues(typeof(T))) 206 | { 207 | dt.Rows.Add(new Object[] { (int)str, "(" + ((int)str).ToString("000") + ") " + str }); 208 | } 209 | 210 | cb.DataSource = dt; 211 | cb.DisplayMember = "NAME"; 212 | cb.ValueMember = "ID"; 213 | } 214 | 215 | public static void SetEnumValuesDirect(this ComboBox cb, Boolean setFirstValue) 216 | { 217 | cb.BeginUpdate(); 218 | 219 | cb.Items.Clear(); 220 | foreach (object value in Enum.GetValues(typeof(T))) 221 | cb.Items.Add(((Enum)value).GetFullName()); 222 | 223 | if (setFirstValue && cb.Items.Count > 0) 224 | cb.SelectedIndex = 0; 225 | 226 | cb.EndUpdate(); 227 | } 228 | 229 | public static void SetStructFields(this ComboBox cb) 230 | { 231 | cb.Items.Clear(); 232 | 233 | DataTable dt = new DataTable(); 234 | dt.Columns.Add("ID", typeof(MemberInfo)); 235 | dt.Columns.Add("NAME", typeof(String)); 236 | 237 | var type = typeof(T).GetMembers(); 238 | int i = 0; 239 | foreach (MemberInfo str in type) 240 | { 241 | if (str is FieldInfo || str is PropertyInfo) 242 | { 243 | DataRow dr = dt.NewRow(); 244 | dr["ID"] = str; 245 | dr["NAME"] = String.Format("({0:000}) {1}", i, str.Name); 246 | dt.Rows.Add(dr); 247 | i++; 248 | } 249 | } 250 | 251 | cb.DataSource = dt; 252 | cb.DisplayMember = "NAME"; 253 | cb.ValueMember = "ID"; 254 | } 255 | 256 | /// 257 | /// Compares the text on the partial occurrence of a string and ignore case 258 | /// 259 | /// The original text, which will search entry 260 | /// String which will be matched with the original text 261 | /// Boolean(true or false) 262 | public static bool ContainsText(this string text, string compareText) 263 | { 264 | return (text.ToUpper().IndexOf(compareText.ToUpper(), StringComparison.CurrentCultureIgnoreCase) != -1); 265 | } 266 | 267 | /// 268 | /// Compares the text on the partial occurrence of a string and ignore case 269 | /// 270 | /// The original text, which will search entry 271 | /// Array strings which will be matched with the original text 272 | /// Boolean(true or false) 273 | public static bool ContainsText(this string text, string[] compareText) 274 | { 275 | foreach (string str in compareText) 276 | { 277 | if ((text.IndexOf(str, StringComparison.CurrentCultureIgnoreCase) != -1)) 278 | return true; 279 | } 280 | return false; 281 | } 282 | 283 | public static bool ContainsElement(this uint[] array, uint[] value) 284 | { 285 | if (array.Length != value.Length) 286 | return false; 287 | 288 | for(int i = 0; i < array.Length; i++) 289 | { 290 | if ((array[i] & value[i]) != 0) 291 | return true; 292 | } 293 | 294 | return false; 295 | } 296 | 297 | /// 298 | /// Checks if the specified value in a given array 299 | /// 300 | /// Array in which to search 301 | /// Meaning Search 302 | /// true or false 303 | public static bool ContainsElement(this uint[] array, uint value) 304 | { 305 | foreach (uint i in array) 306 | if (i == value) return true; 307 | return false; 308 | } 309 | 310 | public static T GetValue(this Dictionary dictionary, uint key) 311 | { 312 | T value; 313 | dictionary.TryGetValue(key, out value); 314 | return value; 315 | } 316 | 317 | public static bool IsEmpty(this String str) 318 | { 319 | return str == String.Empty; 320 | } 321 | 322 | public static string GetFullName(this Enum _enum) 323 | { 324 | var field = _enum.GetType().GetField(_enum.ToString()); 325 | if (field != null) 326 | { 327 | FullNameAttribute[] attrs = (FullNameAttribute[])field.GetCustomAttributes(typeof(FullNameAttribute), false); 328 | 329 | if (attrs.Length > 0) 330 | return attrs[0].FullName; 331 | } 332 | 333 | return _enum.ToString(); 334 | } 335 | } 336 | 337 | [AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)] 338 | public class FullNameAttribute : Attribute 339 | { 340 | public string FullName { get; private set; } 341 | 342 | public FullNameAttribute(string fullName) 343 | { 344 | this.FullName = fullName; 345 | } 346 | } 347 | } 348 | -------------------------------------------------------------------------------- /SpellWork/Extensions/LinqExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | 4 | namespace SpellWork 5 | { 6 | public enum CompareType 7 | { 8 | [FullName("x != y")] 9 | NotEqual, 10 | [FullName("x == y")] 11 | Equal, 12 | 13 | [FullName("x > y")] 14 | GreaterThan, 15 | [FullName("x >= y")] 16 | GreaterOrEqual, 17 | [FullName("x < y")] 18 | LowerThan, 19 | [FullName("x <= y")] 20 | LowerOrEqual, 21 | 22 | [FullName("x & y == y")] 23 | AndStrict, 24 | [FullName("x & y != 0")] 25 | And, 26 | [FullName("x & y == 0")] 27 | NotAnd, 28 | 29 | [FullName("x Starts With y")] 30 | StartsWith, 31 | [FullName("x Ends With y")] 32 | EndsWith, 33 | [FullName("x Contains y")] 34 | Contains, 35 | } 36 | 37 | public static class LinqExtensions 38 | { 39 | /// 40 | /// Compares two values object 41 | /// 42 | /// 43 | /// 44 | /// Value Type is MemberInfo 45 | /// 46 | /// 47 | public static bool CreateFilter(this T T_entry, object field, object val, CompareType compareType) 48 | { 49 | object basicValue = GetValue(T_entry, (MemberInfo)field); 50 | 51 | switch (basicValue.GetType().Name) 52 | { 53 | case "UInt32": 54 | return Compare(basicValue.ToUInt32(), val.ToUInt32(), compareType); 55 | case "Int32": 56 | return Compare(basicValue.ToInt32(), val.ToInt32(), compareType); 57 | case "Single": 58 | return Compare(basicValue.ToFloat(), val.ToFloat(), compareType); 59 | case "UInt64": 60 | return Compare(basicValue.ToUlong(), val.ToUlong(), compareType); 61 | case "String": 62 | return Compare(basicValue.ToString(), val.ToString(), compareType); 63 | case @"UInt32[]": 64 | { 65 | uint val_uint = val.ToUInt32(); 66 | foreach (uint el in (uint[])basicValue) 67 | { 68 | if (Compare(el, val_uint, compareType)) 69 | return true; 70 | } 71 | return false; 72 | } 73 | case @"Int32[]": 74 | { 75 | int val_int = val.ToInt32(); 76 | foreach (int el in (int[])basicValue) 77 | { 78 | if (Compare(el, val_int, compareType)) 79 | return true; 80 | } 81 | return false; 82 | } 83 | case @"Single[]": 84 | { 85 | float val_float = val.ToFloat(); 86 | foreach (float el in (float[])basicValue) 87 | { 88 | if (Compare(el, val_float, compareType)) 89 | return true; 90 | } 91 | return false; 92 | } 93 | case @"UInt64[]": 94 | { 95 | ulong val_ulong = val.ToUlong(); 96 | foreach (ulong el in (ulong[])basicValue) 97 | { 98 | if (Compare(el, val_ulong, compareType)) 99 | return true; 100 | } 101 | return false; 102 | } 103 | default: 104 | return false; 105 | } 106 | } 107 | 108 | #region Specific Compares 109 | 110 | private static Boolean Compare(String baseValue, String value, CompareType compareType) 111 | { 112 | switch (compareType) 113 | { 114 | case CompareType.StartsWith: 115 | return baseValue.StartsWith(value); 116 | case CompareType.EndsWith: 117 | return baseValue.EndsWith(value); 118 | 119 | case CompareType.Contains: 120 | return baseValue.ContainsText(value); 121 | 122 | case CompareType.NotEqual: 123 | return !baseValue.Equals(value, StringComparison.CurrentCultureIgnoreCase); 124 | case CompareType.Equal: 125 | default: 126 | return baseValue.Equals(value, StringComparison.CurrentCultureIgnoreCase); 127 | } 128 | } 129 | 130 | private static Boolean Compare(float baseValue, float value, CompareType compareType) 131 | { 132 | switch (compareType) 133 | { 134 | case CompareType.GreaterOrEqual: 135 | return baseValue >= value; 136 | case CompareType.GreaterThan: 137 | return baseValue > value; 138 | case CompareType.LowerOrEqual: 139 | return baseValue <= value; 140 | case CompareType.LowerThan: 141 | return baseValue < value; 142 | 143 | case CompareType.NotEqual: 144 | return baseValue != value; 145 | case CompareType.Equal: 146 | default: 147 | return baseValue == value; 148 | } 149 | } 150 | 151 | private static Boolean Compare(UInt64 baseValue, UInt64 value, CompareType compareType) 152 | { 153 | switch (compareType) 154 | { 155 | case CompareType.GreaterOrEqual: 156 | return baseValue >= value; 157 | case CompareType.GreaterThan: 158 | return baseValue > value; 159 | case CompareType.LowerOrEqual: 160 | return baseValue <= value; 161 | case CompareType.LowerThan: 162 | return baseValue < value; 163 | 164 | case CompareType.AndStrict: 165 | return (baseValue & value) == value; 166 | case CompareType.And: 167 | return (baseValue & value) != 0; 168 | case CompareType.NotAnd: 169 | return (baseValue & value) == 0; 170 | 171 | case CompareType.NotEqual: 172 | return baseValue != value; 173 | case CompareType.Equal: 174 | default: 175 | return baseValue == value; 176 | } 177 | } 178 | 179 | private static Boolean Compare(Int32 baseValue, Int32 value, CompareType compareType) 180 | { 181 | switch (compareType) 182 | { 183 | case CompareType.GreaterOrEqual: 184 | return baseValue >= value; 185 | case CompareType.GreaterThan: 186 | return baseValue > value; 187 | case CompareType.LowerOrEqual: 188 | return baseValue <= value; 189 | case CompareType.LowerThan: 190 | return baseValue < value; 191 | 192 | case CompareType.AndStrict: 193 | return (baseValue & value) == value; 194 | case CompareType.And: 195 | return (baseValue & value) != 0; 196 | case CompareType.NotAnd: 197 | return (baseValue & value) == 0; 198 | 199 | case CompareType.NotEqual: 200 | return baseValue != value; 201 | case CompareType.Equal: 202 | default: 203 | return baseValue == value; 204 | } 205 | } 206 | 207 | private static Boolean Compare(UInt32 baseValue, UInt32 value, CompareType compareType) 208 | { 209 | switch (compareType) 210 | { 211 | case CompareType.GreaterOrEqual: 212 | return baseValue >= value; 213 | case CompareType.GreaterThan: 214 | return baseValue > value; 215 | case CompareType.LowerOrEqual: 216 | return baseValue <= value; 217 | case CompareType.LowerThan: 218 | return baseValue < value; 219 | 220 | case CompareType.AndStrict: 221 | return (baseValue & value) == value; 222 | case CompareType.And: 223 | return (baseValue & value) != 0; 224 | case CompareType.NotAnd: 225 | return (baseValue & value) == 0; 226 | 227 | case CompareType.NotEqual: 228 | return baseValue != value; 229 | case CompareType.Equal: 230 | default: 231 | return baseValue == value; 232 | } 233 | } 234 | 235 | #endregion 236 | 237 | private static Object GetValue(T T_entry, MemberInfo field) 238 | { 239 | if (field is FieldInfo) 240 | return typeof(T).GetField(field.Name).GetValue(T_entry); 241 | else if (field is PropertyInfo) 242 | return typeof(T).GetProperty(field.Name).GetValue(T_entry, null); 243 | else 244 | return null; 245 | } 246 | } 247 | } 248 | -------------------------------------------------------------------------------- /SpellWork/Extensions/RichTextBoxExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | 5 | namespace SpellWork 6 | { 7 | public static class RichTextBoxExtensions 8 | { 9 | public const String DEFAULT_FAMILY = "Arial Unicode MS"; 10 | public const float DEFAULT_SIZE = 9f; 11 | 12 | public static void AppendFormatLine(this RichTextBox textbox, string format, params object[] arg0) 13 | { 14 | textbox.AppendText(String.Format(format, arg0) + Environment.NewLine); 15 | } 16 | 17 | public static void AppendFormat(this RichTextBox textbox, string format, params object[] arg0) 18 | { 19 | textbox.AppendText(String.Format(format, arg0)); 20 | } 21 | 22 | public static void AppendLine(this RichTextBox textbox) 23 | { 24 | textbox.AppendText(Environment.NewLine); 25 | } 26 | 27 | public static void AppendLine(this RichTextBox textbox, string text) 28 | { 29 | textbox.AppendText(text + Environment.NewLine); 30 | } 31 | 32 | public static void Append(this RichTextBox textbox, object text) 33 | { 34 | textbox.AppendText(text.ToString()); 35 | } 36 | 37 | public static void AppendFormatLineIfNotNull(this RichTextBox builder, string format, uint arg) 38 | { 39 | if (arg != 0) 40 | { 41 | builder.AppendFormatLine(format, arg); 42 | } 43 | } 44 | 45 | public static void AppendFormatLineIfNotNull(this RichTextBox builder, string format, float arg) 46 | { 47 | if (arg != 0.0f) 48 | { 49 | builder.AppendFormatLine(format, arg); 50 | } 51 | } 52 | 53 | public static void AppendFormatLineIfNotNull(this RichTextBox builder, string format, string arg) 54 | { 55 | if (arg != String.Empty) 56 | { 57 | builder.AppendFormatLine(format, arg); 58 | } 59 | } 60 | 61 | public static void AppendFormatIfNotNull(this RichTextBox builder, string format, uint arg) 62 | { 63 | if (arg != 0) 64 | { 65 | builder.AppendFormat(format, arg); 66 | } 67 | } 68 | 69 | public static void AppendFormatIfNotNull(this RichTextBox builder, string format, float arg) 70 | { 71 | if (arg != 0.0f) 72 | { 73 | builder.AppendFormat(format, arg); 74 | } 75 | } 76 | 77 | public static void SetStyle(this RichTextBox textbox, Color color, FontStyle style) 78 | { 79 | textbox.SelectionColor = color; 80 | textbox.SelectionFont = new Font(DEFAULT_FAMILY, DEFAULT_SIZE, style); 81 | } 82 | 83 | public static void SetBold(this RichTextBox textbox) 84 | { 85 | textbox.SelectionFont = new Font(DEFAULT_FAMILY, DEFAULT_SIZE, FontStyle.Bold); 86 | } 87 | 88 | public static void SetDefaultStyle(this RichTextBox textbox) 89 | { 90 | textbox.SelectionFont = new Font(DEFAULT_FAMILY, DEFAULT_SIZE, FontStyle.Regular); 91 | textbox.SelectionColor = Color.Black; 92 | } 93 | 94 | public static void ColorizeCode(this RichTextBox rtb) 95 | { 96 | string[] keywords = { "INSERT", "INTO", "DELETE", "FROM", "IN", "VALUES", "WHERE" }; 97 | string text = rtb.Text; 98 | 99 | rtb.SelectAll(); 100 | rtb.SelectionColor = rtb.ForeColor; 101 | 102 | foreach (String keyword in keywords) 103 | { 104 | int keywordPos = rtb.Find(keyword, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord); 105 | 106 | while (keywordPos != -1) 107 | { 108 | int commentPos = text.LastIndexOf("-- ", keywordPos, StringComparison.OrdinalIgnoreCase); 109 | int newLinePos = text.LastIndexOf("\n", keywordPos, StringComparison.OrdinalIgnoreCase); 110 | 111 | int quoteCount = 0; 112 | int quotePos = text.IndexOf("\"", newLinePos + 1, keywordPos - newLinePos, StringComparison.OrdinalIgnoreCase); 113 | 114 | for (; quotePos != -1; quoteCount++) 115 | { 116 | quotePos = text.IndexOf("\"", quotePos + 1, keywordPos - (quotePos + 1), StringComparison.OrdinalIgnoreCase); 117 | } 118 | 119 | if (newLinePos >= commentPos && quoteCount % 2 == 0) 120 | rtb.SelectionColor = Color.Blue; 121 | else if (newLinePos == commentPos) 122 | rtb.SelectionColor = Color.Green; 123 | 124 | keywordPos = rtb.Find(keyword, keywordPos + rtb.SelectionLength, RichTextBoxFinds.MatchCase | RichTextBoxFinds.WholeWord); 125 | } 126 | } 127 | 128 | rtb.Select(0, 0); 129 | } 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /SpellWork/Extensions/TreeViewExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | 3 | namespace SpellWork 4 | { 5 | public static class TreeViewExtensions 6 | { 7 | /// 8 | /// Returns the value of the collection of selected items 9 | /// 10 | /// 11 | /// 12 | public static uint[] GetMask(this TreeView tv) 13 | { 14 | uint[] val = new uint[3]; 15 | foreach (TreeNode node in tv.Nodes) 16 | { 17 | if (node.Checked) 18 | { 19 | if(node.Index < 32) 20 | val[0] += 1U << node.Index; 21 | else if(node.Index < 64) 22 | val[1] += 1U << (node.Index - 32); 23 | else 24 | val[2] += 1U << (node.Index - 64); 25 | } 26 | } 27 | return val; 28 | } 29 | 30 | /// 31 | /// Check items of the collection... 32 | /// 33 | /// 34 | /// 35 | public static void SetMask(this TreeView tv, uint[] mask) 36 | { 37 | ProcInfo.Update = false; 38 | 39 | for (int i = 0; i < tv.Nodes.Count; ++i) 40 | { 41 | if (i < 32) 42 | tv.Nodes[i].Checked = ((mask[0] / (1 << i)) % 2) != 0; 43 | else if (i < 64) 44 | tv.Nodes[i].Checked = ((mask[1] / (1 << (i - 32))) % 2) != 0; 45 | else 46 | tv.Nodes[i].Checked = ((mask[2] / (1 << (i - 64))) % 2) != 0; 47 | } 48 | 49 | ProcInfo.Update = true; 50 | } 51 | 52 | /// 53 | /// Check items of the collection... 54 | /// 55 | /// 56 | /// 57 | public static void SetMask(this TreeView tv, uint[,] mask) 58 | { 59 | ProcInfo.Update = false; 60 | 61 | for (int i = 0; i < tv.Nodes.Count; ++i) 62 | { 63 | if (i < 32) 64 | tv.Nodes[i].Checked = ((mask[0, 0] / (1 << i)) % 2) != 0; 65 | else if (i < 64) 66 | tv.Nodes[i].Checked = ((mask[0, 1] / (1 << (i - 32))) % 2) != 0; 67 | else 68 | tv.Nodes[i].Checked = ((mask[0, 2] / (1 << (i - 64))) % 2) != 0; 69 | } 70 | 71 | ProcInfo.Update = true; 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /SpellWork/Forms/FormAboutBox.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SpellWork 2 | { 3 | partial class FormAboutBox 4 | { 5 | /// 6 | /// Требуется переменная конструктора. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Освободить все используемые ресурсы. 12 | /// 13 | protected override void Dispose(bool disposing) 14 | { 15 | if (disposing && (components != null)) 16 | { 17 | components.Dispose(); 18 | } 19 | base.Dispose(disposing); 20 | } 21 | 22 | #region Код, автоматически созданный конструктором форм Windows 23 | 24 | /// 25 | /// Обязательный метод для поддержки конструктора - не изменяйте 26 | /// содержимое данного метода при помощи редактора кода. 27 | /// 28 | private void InitializeComponent() 29 | { 30 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAboutBox)); 31 | this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); 32 | this.logoPictureBox = new System.Windows.Forms.PictureBox(); 33 | this.labelProductName = new System.Windows.Forms.Label(); 34 | this.labelVersion = new System.Windows.Forms.Label(); 35 | this.labelCopyright = new System.Windows.Forms.Label(); 36 | this.labelCompanyName = new System.Windows.Forms.Label(); 37 | this.textBoxDescription = new System.Windows.Forms.TextBox(); 38 | this.okButton = new System.Windows.Forms.Button(); 39 | this.tableLayoutPanel.SuspendLayout(); 40 | ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); 41 | this.SuspendLayout(); 42 | // 43 | // tableLayoutPanel 44 | // 45 | this.tableLayoutPanel.ColumnCount = 2; 46 | this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F)); 47 | this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F)); 48 | this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); 49 | this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); 50 | this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); 51 | this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); 52 | this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3); 53 | this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); 54 | this.tableLayoutPanel.Controls.Add(this.okButton, 1, 5); 55 | this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; 56 | this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9); 57 | this.tableLayoutPanel.Name = "tableLayoutPanel"; 58 | this.tableLayoutPanel.RowCount = 6; 59 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 60 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 61 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 62 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 63 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); 64 | this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); 65 | this.tableLayoutPanel.Size = new System.Drawing.Size(417, 265); 66 | this.tableLayoutPanel.TabIndex = 0; 67 | // 68 | // logoPictureBox 69 | // 70 | this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; 71 | this.logoPictureBox.Image = ((System.Drawing.Image)(resources.GetObject("logoPictureBox.Image"))); 72 | this.logoPictureBox.Location = new System.Drawing.Point(3, 3); 73 | this.logoPictureBox.Name = "logoPictureBox"; 74 | this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 6); 75 | this.logoPictureBox.Size = new System.Drawing.Size(131, 259); 76 | this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; 77 | this.logoPictureBox.TabIndex = 12; 78 | this.logoPictureBox.TabStop = false; 79 | // 80 | // labelProductName 81 | // 82 | this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; 83 | this.labelProductName.Location = new System.Drawing.Point(143, 0); 84 | this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 85 | this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17); 86 | this.labelProductName.Name = "labelProductName"; 87 | this.labelProductName.Size = new System.Drawing.Size(271, 17); 88 | this.labelProductName.TabIndex = 19; 89 | this.labelProductName.Text = "Название продукта"; 90 | this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 91 | // 92 | // labelVersion 93 | // 94 | this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; 95 | this.labelVersion.Location = new System.Drawing.Point(143, 26); 96 | this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 97 | this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); 98 | this.labelVersion.Name = "labelVersion"; 99 | this.labelVersion.Size = new System.Drawing.Size(271, 17); 100 | this.labelVersion.TabIndex = 0; 101 | this.labelVersion.Text = "Версия"; 102 | this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 103 | // 104 | // labelCopyright 105 | // 106 | this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; 107 | this.labelCopyright.Location = new System.Drawing.Point(143, 52); 108 | this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 109 | this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); 110 | this.labelCopyright.Name = "labelCopyright"; 111 | this.labelCopyright.Size = new System.Drawing.Size(271, 17); 112 | this.labelCopyright.TabIndex = 21; 113 | this.labelCopyright.Text = "Авторские права"; 114 | this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 115 | // 116 | // labelCompanyName 117 | // 118 | this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill; 119 | this.labelCompanyName.Location = new System.Drawing.Point(143, 78); 120 | this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); 121 | this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17); 122 | this.labelCompanyName.Name = "labelCompanyName"; 123 | this.labelCompanyName.Size = new System.Drawing.Size(271, 17); 124 | this.labelCompanyName.TabIndex = 22; 125 | this.labelCompanyName.Text = "Название организации"; 126 | this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; 127 | // 128 | // textBoxDescription 129 | // 130 | this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; 131 | this.textBoxDescription.Location = new System.Drawing.Point(143, 107); 132 | this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); 133 | this.textBoxDescription.Multiline = true; 134 | this.textBoxDescription.Name = "textBoxDescription"; 135 | this.textBoxDescription.ReadOnly = true; 136 | this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; 137 | this.textBoxDescription.Size = new System.Drawing.Size(271, 126); 138 | this.textBoxDescription.TabIndex = 23; 139 | this.textBoxDescription.TabStop = false; 140 | this.textBoxDescription.Text = "Описание"; 141 | // 142 | // okButton 143 | // 144 | this.okButton.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 145 | this.okButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 146 | this.okButton.Location = new System.Drawing.Point(339, 239); 147 | this.okButton.Name = "okButton"; 148 | this.okButton.Size = new System.Drawing.Size(75, 23); 149 | this.okButton.TabIndex = 24; 150 | this.okButton.Text = "&ОК"; 151 | // 152 | // FormAboutBox 153 | // 154 | this.AcceptButton = this.okButton; 155 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 156 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 157 | this.ClientSize = new System.Drawing.Size(435, 283); 158 | this.Controls.Add(this.tableLayoutPanel); 159 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 160 | this.MaximizeBox = false; 161 | this.MinimizeBox = false; 162 | this.Name = "FormAboutBox"; 163 | this.Padding = new System.Windows.Forms.Padding(9); 164 | this.ShowIcon = false; 165 | this.ShowInTaskbar = false; 166 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 167 | this.Text = "About"; 168 | this.tableLayoutPanel.ResumeLayout(false); 169 | this.tableLayoutPanel.PerformLayout(); 170 | ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); 171 | this.ResumeLayout(false); 172 | 173 | } 174 | 175 | #endregion 176 | 177 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; 178 | private System.Windows.Forms.PictureBox logoPictureBox; 179 | private System.Windows.Forms.Label labelProductName; 180 | private System.Windows.Forms.Label labelVersion; 181 | private System.Windows.Forms.Label labelCopyright; 182 | private System.Windows.Forms.Label labelCompanyName; 183 | private System.Windows.Forms.TextBox textBoxDescription; 184 | private System.Windows.Forms.Button okButton; 185 | } 186 | } 187 | -------------------------------------------------------------------------------- /SpellWork/Forms/FormAboutBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Drawing; 5 | using System.Linq; 6 | using System.Reflection; 7 | using System.Windows.Forms; 8 | 9 | namespace SpellWork 10 | { 11 | partial class FormAboutBox : Form 12 | { 13 | public FormAboutBox() 14 | { 15 | InitializeComponent(); 16 | this.Text = String.Format("О {0} {0}", AssemblyTitle); 17 | this.labelProductName.Text = AssemblyProduct; 18 | this.labelVersion.Text = String.Format("Версия {0} {0}", AssemblyVersion); 19 | this.labelCopyright.Text = AssemblyCopyright; 20 | this.labelCompanyName.Text = AssemblyCompany; 21 | this.textBoxDescription.Text = AssemblyDescription; 22 | } 23 | 24 | #region Методы доступа к атрибутам сборки 25 | 26 | public string AssemblyTitle 27 | { 28 | get 29 | { 30 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); 31 | if (attributes.Length > 0) 32 | { 33 | AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; 34 | if (titleAttribute.Title != "") 35 | { 36 | return titleAttribute.Title; 37 | } 38 | } 39 | return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); 40 | } 41 | } 42 | 43 | public string AssemblyVersion 44 | { 45 | get 46 | { 47 | return Assembly.GetExecutingAssembly().GetName().Version.ToString(); 48 | } 49 | } 50 | 51 | public string AssemblyDescription 52 | { 53 | get 54 | { 55 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); 56 | if (attributes.Length == 0) 57 | { 58 | return ""; 59 | } 60 | return ((AssemblyDescriptionAttribute)attributes[0]).Description; 61 | } 62 | } 63 | 64 | public string AssemblyProduct 65 | { 66 | get 67 | { 68 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); 69 | if (attributes.Length == 0) 70 | { 71 | return ""; 72 | } 73 | return ((AssemblyProductAttribute)attributes[0]).Product; 74 | } 75 | } 76 | 77 | public string AssemblyCopyright 78 | { 79 | get 80 | { 81 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); 82 | if (attributes.Length == 0) 83 | { 84 | return ""; 85 | } 86 | return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; 87 | } 88 | } 89 | 90 | public string AssemblyCompany 91 | { 92 | get 93 | { 94 | object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 95 | if (attributes.Length == 0) 96 | { 97 | return ""; 98 | } 99 | return ((AssemblyCompanyAttribute)attributes[0]).Company; 100 | } 101 | } 102 | #endregion 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /SpellWork/Forms/FormCalculateFlags.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SpellWork 2 | { 3 | partial class FormCalculateFlags 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormCalculateFlags)); 32 | this._bNo = new System.Windows.Forms.Button(); 33 | this._bOk = new System.Windows.Forms.Button(); 34 | this._clbCalcFlags = new System.Windows.Forms.CheckedListBox(); 35 | this._lFlagValue = new System.Windows.Forms.Label(); 36 | this.SuspendLayout(); 37 | // 38 | // _bNo 39 | // 40 | this._bNo.DialogResult = System.Windows.Forms.DialogResult.Cancel; 41 | this._bNo.Location = new System.Drawing.Point(12, 270); 42 | this._bNo.Name = "_bNo"; 43 | this._bNo.Size = new System.Drawing.Size(75, 23); 44 | this._bNo.TabIndex = 1; 45 | this._bNo.Text = "Cancel"; 46 | this._bNo.UseVisualStyleBackColor = true; 47 | this._bNo.Click += new System.EventHandler(this._bNo_Click); 48 | // 49 | // _bOk 50 | // 51 | this._bOk.Location = new System.Drawing.Point(201, 270); 52 | this._bOk.Name = "_bOk"; 53 | this._bOk.Size = new System.Drawing.Size(75, 23); 54 | this._bOk.TabIndex = 2; 55 | this._bOk.Text = "OK"; 56 | this._bOk.UseVisualStyleBackColor = true; 57 | this._bOk.Click += new System.EventHandler(this._bOk_Click); 58 | // 59 | // _clbCalcFlags 60 | // 61 | this._clbCalcFlags.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 62 | | System.Windows.Forms.AnchorStyles.Left) 63 | | System.Windows.Forms.AnchorStyles.Right))); 64 | this._clbCalcFlags.CheckOnClick = true; 65 | this._clbCalcFlags.FormattingEnabled = true; 66 | this._clbCalcFlags.Location = new System.Drawing.Point(0, 1); 67 | this._clbCalcFlags.Name = "_clbCalcFlags"; 68 | this._clbCalcFlags.Size = new System.Drawing.Size(291, 259); 69 | this._clbCalcFlags.TabIndex = 0; 70 | this._clbCalcFlags.SelectedValueChanged += new System.EventHandler(this._clbCalcFlags_SelectedValueChanged); 71 | // 72 | // _lFlagValue 73 | // 74 | this._lFlagValue.AutoSize = true; 75 | this._lFlagValue.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(204))); 76 | this._lFlagValue.ForeColor = System.Drawing.Color.Blue; 77 | this._lFlagValue.Location = new System.Drawing.Point(93, 275); 78 | this._lFlagValue.Name = "_lFlagValue"; 79 | this._lFlagValue.Size = new System.Drawing.Size(54, 13); 80 | this._lFlagValue.TabIndex = 3; 81 | this._lFlagValue.Text = "Value: 0"; 82 | // 83 | // FormCalculateFlags 84 | // 85 | this.AcceptButton = this._bOk; 86 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 87 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 88 | this.CancelButton = this._bNo; 89 | this.ClientSize = new System.Drawing.Size(292, 297); 90 | this.Controls.Add(this._lFlagValue); 91 | this.Controls.Add(this._clbCalcFlags); 92 | this.Controls.Add(this._bOk); 93 | this.Controls.Add(this._bNo); 94 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 95 | this.MaximizeBox = false; 96 | this.MaximumSize = new System.Drawing.Size(300, 331); 97 | this.MinimizeBox = false; 98 | this.MinimumSize = new System.Drawing.Size(300, 331); 99 | this.Name = "FormCalculateFlags"; 100 | this.ShowInTaskbar = false; 101 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 102 | this.Text = "FormCalculateFlags"; 103 | this.ResumeLayout(false); 104 | this.PerformLayout(); 105 | 106 | } 107 | 108 | #endregion 109 | 110 | private System.Windows.Forms.CheckedListBox _clbCalcFlags; 111 | private System.Windows.Forms.Button _bNo; 112 | private System.Windows.Forms.Button _bOk; 113 | private System.Windows.Forms.Label _lFlagValue; 114 | } 115 | } -------------------------------------------------------------------------------- /SpellWork/Forms/FormCalculateFlags.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace SpellWork 5 | { 6 | public partial class FormCalculateFlags : Form 7 | { 8 | public uint Flags { get; private set; } 9 | 10 | public FormCalculateFlags(Type data, uint value, String remove) 11 | { 12 | InitializeComponent(); 13 | 14 | this._clbCalcFlags.SetFlags(data, remove); 15 | this._clbCalcFlags.SetCheckedItemFromFlag(value); 16 | 17 | this.Text = "Calculate " + data.Name; 18 | } 19 | 20 | private void _bOk_Click(object sender, EventArgs e) 21 | { 22 | this.Flags = this._clbCalcFlags.GetFlagsValue(); 23 | this.DialogResult = DialogResult.OK; 24 | this.Close(); 25 | } 26 | 27 | private void _bNo_Click(object sender, EventArgs e) 28 | { 29 | this.Close(); 30 | } 31 | 32 | private void _clbCalcFlags_SelectedValueChanged(object sender, EventArgs e) 33 | { 34 | this.Flags = this._clbCalcFlags.GetFlagsValue(); 35 | _lFlagValue.Text = "Value: " + this.Flags; 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /SpellWork/Forms/FormSearch.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SpellWork 2 | { 3 | partial class FormSearch 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSearch)); 32 | this.splitContainer1 = new System.Windows.Forms.SplitContainer(); 33 | this._rtbSpellInfo = new System.Windows.Forms.RichTextBox(); 34 | this._bOk = new System.Windows.Forms.Button(); 35 | this._bCencel = new System.Windows.Forms.Button(); 36 | this.groupBox1 = new System.Windows.Forms.GroupBox(); 37 | this.label3 = new System.Windows.Forms.Label(); 38 | this.label2 = new System.Windows.Forms.Label(); 39 | this._lIDName = new System.Windows.Forms.Label(); 40 | this._tbAttribute = new System.Windows.Forms.TextBox(); 41 | this._tbIcon = new System.Windows.Forms.TextBox(); 42 | this._tbIdName = new System.Windows.Forms.TextBox(); 43 | this._lvSpellList = new System.Windows.Forms.ListView(); 44 | this._chID = new System.Windows.Forms.ColumnHeader(); 45 | this._chName = new System.Windows.Forms.ColumnHeader(); 46 | this.groupBox2 = new System.Windows.Forms.GroupBox(); 47 | this._cbTarget2 = new System.Windows.Forms.ComboBox(); 48 | this._cbTarget1 = new System.Windows.Forms.ComboBox(); 49 | this._cbSpellEffect = new System.Windows.Forms.ComboBox(); 50 | this._cbSpellAura = new System.Windows.Forms.ComboBox(); 51 | this._cbSpellFamily = new System.Windows.Forms.ComboBox(); 52 | this.splitContainer1.Panel1.SuspendLayout(); 53 | this.splitContainer1.Panel2.SuspendLayout(); 54 | this.splitContainer1.SuspendLayout(); 55 | this.groupBox1.SuspendLayout(); 56 | this.groupBox2.SuspendLayout(); 57 | this.SuspendLayout(); 58 | // 59 | // splitContainer1 60 | // 61 | this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; 62 | this.splitContainer1.FixedPanel = System.Windows.Forms.FixedPanel.Panel2; 63 | this.splitContainer1.Location = new System.Drawing.Point(0, 0); 64 | this.splitContainer1.Name = "splitContainer1"; 65 | // 66 | // splitContainer1.Panel1 67 | // 68 | this.splitContainer1.Panel1.Controls.Add(this._rtbSpellInfo); 69 | // 70 | // splitContainer1.Panel2 71 | // 72 | this.splitContainer1.Panel2.Controls.Add(this._bOk); 73 | this.splitContainer1.Panel2.Controls.Add(this._bCencel); 74 | this.splitContainer1.Panel2.Controls.Add(this.groupBox1); 75 | this.splitContainer1.Size = new System.Drawing.Size(672, 455); 76 | this.splitContainer1.SplitterDistance = 381; 77 | this.splitContainer1.TabIndex = 0; 78 | // 79 | // _rtbSpellInfo 80 | // 81 | this._rtbSpellInfo.Dock = System.Windows.Forms.DockStyle.Fill; 82 | this._rtbSpellInfo.Location = new System.Drawing.Point(0, 0); 83 | this._rtbSpellInfo.Name = "_rtbSpellInfo"; 84 | this._rtbSpellInfo.Size = new System.Drawing.Size(381, 455); 85 | this._rtbSpellInfo.TabIndex = 11; 86 | this._rtbSpellInfo.Text = ""; 87 | // 88 | // _bOk 89 | // 90 | this._bOk.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 91 | this._bOk.Location = new System.Drawing.Point(209, 425); 92 | this._bOk.Name = "_bOk"; 93 | this._bOk.Size = new System.Drawing.Size(75, 23); 94 | this._bOk.TabIndex = 9; 95 | this._bOk.Text = "OK"; 96 | this._bOk.UseVisualStyleBackColor = true; 97 | this._bOk.Click += new System.EventHandler(this.Ok_Click); 98 | // 99 | // _bCencel 100 | // 101 | this._bCencel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 102 | this._bCencel.Location = new System.Drawing.Point(128, 425); 103 | this._bCencel.Name = "_bCencel"; 104 | this._bCencel.Size = new System.Drawing.Size(75, 23); 105 | this._bCencel.TabIndex = 10; 106 | this._bCencel.Text = "Cencel"; 107 | this._bCencel.UseVisualStyleBackColor = true; 108 | this._bCencel.Click += new System.EventHandler(this.Cencel_Click); 109 | // 110 | // groupBox1 111 | // 112 | this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 113 | | System.Windows.Forms.AnchorStyles.Left) 114 | | System.Windows.Forms.AnchorStyles.Right))); 115 | this.groupBox1.Controls.Add(this.label3); 116 | this.groupBox1.Controls.Add(this.label2); 117 | this.groupBox1.Controls.Add(this._lIDName); 118 | this.groupBox1.Controls.Add(this._tbAttribute); 119 | this.groupBox1.Controls.Add(this._tbIcon); 120 | this.groupBox1.Controls.Add(this._tbIdName); 121 | this.groupBox1.Controls.Add(this._lvSpellList); 122 | this.groupBox1.Controls.Add(this.groupBox2); 123 | this.groupBox1.Location = new System.Drawing.Point(3, 3); 124 | this.groupBox1.Name = "groupBox1"; 125 | this.groupBox1.Size = new System.Drawing.Size(281, 416); 126 | this.groupBox1.TabIndex = 0; 127 | this.groupBox1.TabStop = false; 128 | this.groupBox1.Text = "Spell Search"; 129 | // 130 | // label3 131 | // 132 | this.label3.AutoSize = true; 133 | this.label3.Location = new System.Drawing.Point(6, 69); 134 | this.label3.Name = "label3"; 135 | this.label3.Size = new System.Drawing.Size(49, 13); 136 | this.label3.TabIndex = 3; 137 | this.label3.Text = "Attribute:"; 138 | // 139 | // label2 140 | // 141 | this.label2.AutoSize = true; 142 | this.label2.Location = new System.Drawing.Point(6, 43); 143 | this.label2.Name = "label2"; 144 | this.label2.Size = new System.Drawing.Size(45, 13); 145 | this.label2.TabIndex = 3; 146 | this.label2.Text = "Icon ID:"; 147 | // 148 | // _lIDName 149 | // 150 | this._lIDName.AutoSize = true; 151 | this._lIDName.Location = new System.Drawing.Point(6, 17); 152 | this._lIDName.Name = "_lIDName"; 153 | this._lIDName.Size = new System.Drawing.Size(64, 13); 154 | this._lIDName.TabIndex = 3; 155 | this._lIDName.Text = "ID or Name:"; 156 | // 157 | // _tbAttribute 158 | // 159 | this._tbAttribute.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 160 | | System.Windows.Forms.AnchorStyles.Right))); 161 | this._tbAttribute.Location = new System.Drawing.Point(74, 66); 162 | this._tbAttribute.Name = "_tbAttribute"; 163 | this._tbAttribute.Size = new System.Drawing.Size(198, 20); 164 | this._tbAttribute.TabIndex = 2; 165 | this._tbAttribute.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); 166 | // 167 | // _tbIcon 168 | // 169 | this._tbIcon.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 170 | | System.Windows.Forms.AnchorStyles.Right))); 171 | this._tbIcon.Location = new System.Drawing.Point(74, 40); 172 | this._tbIcon.Name = "_tbIcon"; 173 | this._tbIcon.Size = new System.Drawing.Size(198, 20); 174 | this._tbIcon.TabIndex = 1; 175 | this._tbIcon.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); 176 | // 177 | // _tbIdName 178 | // 179 | this._tbIdName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 180 | | System.Windows.Forms.AnchorStyles.Right))); 181 | this._tbIdName.Location = new System.Drawing.Point(74, 14); 182 | this._tbIdName.Name = "_tbIdName"; 183 | this._tbIdName.Size = new System.Drawing.Size(198, 20); 184 | this._tbIdName.TabIndex = 0; 185 | this._tbIdName.KeyDown += new System.Windows.Forms.KeyEventHandler(this.IdName_KeyDown); 186 | // 187 | // _lvSpellList 188 | // 189 | this._lvSpellList.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 190 | | System.Windows.Forms.AnchorStyles.Left) 191 | | System.Windows.Forms.AnchorStyles.Right))); 192 | this._lvSpellList.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { 193 | this._chID, 194 | this._chName}); 195 | this._lvSpellList.FullRowSelect = true; 196 | this._lvSpellList.GridLines = true; 197 | this._lvSpellList.HideSelection = false; 198 | this._lvSpellList.Location = new System.Drawing.Point(0, 235); 199 | this._lvSpellList.Name = "_lvSpellList"; 200 | this._lvSpellList.Size = new System.Drawing.Size(281, 175); 201 | this._lvSpellList.TabIndex = 8; 202 | this._lvSpellList.UseCompatibleStateImageBehavior = false; 203 | this._lvSpellList.View = System.Windows.Forms.View.Details; 204 | this._lvSpellList.VirtualMode = true; 205 | this._lvSpellList.SelectedIndexChanged += new System.EventHandler(this.SpellList_SelectedIndexChanged); 206 | this._lvSpellList.DoubleClick += new System.EventHandler(this.Ok_Click); 207 | this._lvSpellList.RetrieveVirtualItem += new System.Windows.Forms.RetrieveVirtualItemEventHandler(this.SpellList_RetrieveVirtualItem); 208 | // 209 | // _chID 210 | // 211 | this._chID.Text = "ID"; 212 | // 213 | // _chName 214 | // 215 | this._chName.Text = "Name"; 216 | this._chName.Width = 213; 217 | // 218 | // groupBox2 219 | // 220 | this.groupBox2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) 221 | | System.Windows.Forms.AnchorStyles.Right))); 222 | this.groupBox2.Controls.Add(this._cbTarget2); 223 | this.groupBox2.Controls.Add(this._cbTarget1); 224 | this.groupBox2.Controls.Add(this._cbSpellEffect); 225 | this.groupBox2.Controls.Add(this._cbSpellAura); 226 | this.groupBox2.Controls.Add(this._cbSpellFamily); 227 | this.groupBox2.Location = new System.Drawing.Point(0, 88); 228 | this.groupBox2.Name = "groupBox2"; 229 | this.groupBox2.Size = new System.Drawing.Size(281, 141); 230 | this.groupBox2.TabIndex = 0; 231 | this.groupBox2.TabStop = false; 232 | this.groupBox2.Text = "Spell Filter"; 233 | // 234 | // _cbTarget2 235 | // 236 | this._cbTarget2.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); 237 | this._cbTarget2.DropDownHeight = 500; 238 | this._cbTarget2.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 239 | this._cbTarget2.FormattingEnabled = true; 240 | this._cbTarget2.IntegralHeight = false; 241 | this._cbTarget2.Location = new System.Drawing.Point(9, 113); 242 | this._cbTarget2.Name = "_cbTarget2"; 243 | this._cbTarget2.Size = new System.Drawing.Size(263, 21); 244 | this._cbTarget2.TabIndex = 7; 245 | this._cbTarget2.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); 246 | // 247 | // _cbTarget1 248 | // 249 | this._cbTarget1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); 250 | this._cbTarget1.DropDownHeight = 500; 251 | this._cbTarget1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 252 | this._cbTarget1.FormattingEnabled = true; 253 | this._cbTarget1.IntegralHeight = false; 254 | this._cbTarget1.Location = new System.Drawing.Point(9, 88); 255 | this._cbTarget1.Name = "_cbTarget1"; 256 | this._cbTarget1.Size = new System.Drawing.Size(263, 21); 257 | this._cbTarget1.TabIndex = 6; 258 | this._cbTarget1.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); 259 | // 260 | // _cbSpellEffect 261 | // 262 | this._cbSpellEffect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); 263 | this._cbSpellEffect.DropDownHeight = 500; 264 | this._cbSpellEffect.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 265 | this._cbSpellEffect.FormattingEnabled = true; 266 | this._cbSpellEffect.IntegralHeight = false; 267 | this._cbSpellEffect.Location = new System.Drawing.Point(9, 63); 268 | this._cbSpellEffect.Name = "_cbSpellEffect"; 269 | this._cbSpellEffect.Size = new System.Drawing.Size(263, 21); 270 | this._cbSpellEffect.TabIndex = 5; 271 | this._cbSpellEffect.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); 272 | // 273 | // _cbSpellAura 274 | // 275 | this._cbSpellAura.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); 276 | this._cbSpellAura.DropDownHeight = 500; 277 | this._cbSpellAura.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 278 | this._cbSpellAura.FormattingEnabled = true; 279 | this._cbSpellAura.IntegralHeight = false; 280 | this._cbSpellAura.Location = new System.Drawing.Point(9, 39); 281 | this._cbSpellAura.Name = "_cbSpellAura"; 282 | this._cbSpellAura.Size = new System.Drawing.Size(263, 21); 283 | this._cbSpellAura.TabIndex = 4; 284 | this._cbSpellAura.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); 285 | // 286 | // _cbSpellFamily 287 | // 288 | this._cbSpellFamily.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right))); 289 | this._cbSpellFamily.DropDownHeight = 500; 290 | this._cbSpellFamily.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 291 | this._cbSpellFamily.FormattingEnabled = true; 292 | this._cbSpellFamily.IntegralHeight = false; 293 | this._cbSpellFamily.Location = new System.Drawing.Point(9, 15); 294 | this._cbSpellFamily.Name = "_cbSpellFamily"; 295 | this._cbSpellFamily.Size = new System.Drawing.Size(263, 21); 296 | this._cbSpellFamily.TabIndex = 3; 297 | this._cbSpellFamily.SelectedIndexChanged += new System.EventHandler(this.SpellFamily_SelectedIndexChanged); 298 | // 299 | // FormSearch 300 | // 301 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 302 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 303 | this.ClientSize = new System.Drawing.Size(672, 455); 304 | this.Controls.Add(this.splitContainer1); 305 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 306 | this.Name = "FormSearch"; 307 | this.ShowInTaskbar = false; 308 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 309 | this.Text = "Spell Search"; 310 | this.splitContainer1.Panel1.ResumeLayout(false); 311 | this.splitContainer1.Panel2.ResumeLayout(false); 312 | this.splitContainer1.ResumeLayout(false); 313 | this.groupBox1.ResumeLayout(false); 314 | this.groupBox1.PerformLayout(); 315 | this.groupBox2.ResumeLayout(false); 316 | this.ResumeLayout(false); 317 | 318 | } 319 | 320 | #endregion 321 | 322 | private System.Windows.Forms.SplitContainer splitContainer1; 323 | private System.Windows.Forms.RichTextBox _rtbSpellInfo; 324 | private System.Windows.Forms.Button _bOk; 325 | private System.Windows.Forms.Button _bCencel; 326 | private System.Windows.Forms.GroupBox groupBox1; 327 | private System.Windows.Forms.ListView _lvSpellList; 328 | private System.Windows.Forms.GroupBox groupBox2; 329 | private System.Windows.Forms.ColumnHeader _chID; 330 | private System.Windows.Forms.ColumnHeader _chName; 331 | private System.Windows.Forms.Label label3; 332 | private System.Windows.Forms.Label label2; 333 | private System.Windows.Forms.Label _lIDName; 334 | private System.Windows.Forms.TextBox _tbAttribute; 335 | private System.Windows.Forms.TextBox _tbIcon; 336 | private System.Windows.Forms.TextBox _tbIdName; 337 | private System.Windows.Forms.ComboBox _cbTarget2; 338 | private System.Windows.Forms.ComboBox _cbTarget1; 339 | private System.Windows.Forms.ComboBox _cbSpellEffect; 340 | private System.Windows.Forms.ComboBox _cbSpellAura; 341 | private System.Windows.Forms.ComboBox _cbSpellFamily; 342 | } 343 | } -------------------------------------------------------------------------------- /SpellWork/Forms/FormSearch.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Windows.Forms; 5 | 6 | namespace SpellWork 7 | { 8 | public partial class FormSearch : Form 9 | { 10 | public FormSearch() 11 | { 12 | InitializeComponent(); 13 | // load items to control's 14 | _cbSpellFamily.SetEnumValues("SpellFamilyName"); 15 | _cbSpellAura.SetEnumValues("Aura"); 16 | _cbSpellEffect.SetEnumValues("Effect"); 17 | _cbTarget1.SetEnumValues("Target A"); 18 | _cbTarget2.SetEnumValues("Target B"); 19 | } 20 | 21 | public SpellEntry Spell { get; private set; } 22 | 23 | private List _spellList = new List(); 24 | 25 | private void IdName_KeyDown(object sender, KeyEventArgs e) 26 | { 27 | if (e.KeyCode == Keys.Enter) 28 | { 29 | string name = _tbIdName.Text; 30 | uint id = name.ToUInt32(); 31 | uint ic = _tbIcon.Text.ToUInt32(); 32 | uint at = _tbAttribute.Text.ToUInt32(); 33 | 34 | _spellList = (from spell in DBC.Spell.Values 35 | 36 | where ((id == 0 || spell.ID == id) 37 | 38 | && (ic == 0 || spell.SpellIconID == ic) 39 | 40 | && (at == 0 || (spell.Attributes & at) != 0 41 | || (spell.AttributesEx & at) != 0 42 | || (spell.AttributesEx2 & at) != 0 43 | || (spell.AttributesEx3 & at) != 0 44 | || (spell.AttributesEx4 & at) != 0 45 | || (spell.AttributesEx5 & at) != 0 46 | || (spell.AttributesEx6 & at) != 0 47 | || (spell.AttributesEx7 & at) != 0)) 48 | 49 | && (id != 0 || ic != 0 && at != 0) || spell.SpellName.ContainsText(name) 50 | 51 | select spell).ToList(); 52 | 53 | _lvSpellList.VirtualListSize = _spellList.Count(); 54 | groupBox1.Text = "Spell Search count: " + _spellList.Count(); 55 | 56 | if (_lvSpellList.SelectedIndices.Count > 0) 57 | _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; 58 | } 59 | } 60 | 61 | private void SpellFamily_SelectedIndexChanged(object sender, EventArgs e) 62 | { 63 | if (((ComboBox)sender).SelectedIndex != 0) 64 | { 65 | var bFamilyNames = _cbSpellFamily.SelectedIndex != 0; 66 | var fFamilyNames = _cbSpellFamily.SelectedValue.ToInt32(); 67 | 68 | var bSpellAura = _cbSpellAura.SelectedIndex != 0; 69 | var fSpellAura = _cbSpellAura.SelectedValue.ToInt32(); 70 | 71 | var bSpellEffect = _cbSpellEffect.SelectedIndex != 0; 72 | var fSpellEffect = _cbSpellEffect.SelectedValue.ToInt32(); 73 | 74 | var bTarget1 = _cbTarget1.SelectedIndex != 0; 75 | var fTarget1 = _cbTarget1.SelectedValue.ToInt32(); 76 | 77 | var bTarget2 = _cbTarget2.SelectedIndex != 0; 78 | var fTarget2 = _cbTarget2.SelectedValue.ToInt32(); 79 | 80 | _spellList = (from spell in DBC.Spell.Values 81 | 82 | where (!bFamilyNames || spell.SpellFamilyName == fFamilyNames) 83 | && (!bSpellEffect || spell.Effect.ContainsElement((uint)fSpellEffect)) 84 | && (!bSpellAura || spell.EffectApplyAuraName.ContainsElement((uint)fSpellAura)) 85 | && (!bTarget1 || spell.EffectImplicitTargetA.ContainsElement((uint)fTarget1)) 86 | && (!bTarget2 || spell.EffectImplicitTargetB.ContainsElement((uint)fTarget2)) 87 | 88 | select spell).ToList(); 89 | 90 | _lvSpellList.VirtualListSize = _spellList.Count(); 91 | groupBox2.Text = "Spell Filter " + "count: " + _spellList.Count(); 92 | 93 | if (_lvSpellList.SelectedIndices.Count > 0) 94 | _lvSpellList.Items[_lvSpellList.SelectedIndices[0]].Selected = false; 95 | } 96 | } 97 | 98 | private void SpellList_SelectedIndexChanged(object sender, EventArgs e) 99 | { 100 | if (_lvSpellList.SelectedIndices.Count > 0) 101 | new SpellInfo(_rtbSpellInfo, _spellList[_lvSpellList.SelectedIndices[0]]); 102 | } 103 | 104 | private void Ok_Click(object sender, EventArgs e) 105 | { 106 | if (_lvSpellList.SelectedIndices.Count > 0) 107 | { 108 | Spell = _spellList[_lvSpellList.SelectedIndices[0]]; 109 | this.DialogResult = DialogResult.OK; 110 | this.Close(); 111 | } 112 | } 113 | 114 | private void TextBox_KeyPress(object sender, KeyPressEventArgs e) 115 | { 116 | if (!((Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back))) 117 | e.Handled = true; 118 | } 119 | 120 | private void Cencel_Click(object sender, EventArgs e) 121 | { 122 | this.Close(); 123 | } 124 | 125 | private void SpellList_RetrieveVirtualItem(object sender, RetrieveVirtualItemEventArgs e) 126 | { 127 | e.Item = new ListViewItem(new[] { _spellList[e.ItemIndex].ID.ToString(), _spellList[e.ItemIndex].SpellNameRank }); 128 | } 129 | } 130 | } 131 | -------------------------------------------------------------------------------- /SpellWork/Forms/FormSearch.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | AAABAAUAICAAAAEACACoCAAAVgAAADAwAAABACAAqCUAAP4IAAAQEBAAAQAEACgBAACmLgAAEBAAAAEA 124 | CABoBQAAzi8AACAgEAABAAQA6AIAADY1AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAA 125 | AAAAAAAACQgHAAIAAAAAAgAAAAADAAUAAQAHAAEABQUBAAAABAALAgIADQIBAA4AAAAKBQYABQoDABME 126 | BAATAAAAFgAAABoCAgAdAQEAHAoCABQDCgASCgoAHAsKACYEBwAiAAAAJQEAACcAAAAiBQEAJgYBACoD 127 | AQAsAQAALgAAACQLBAArCgIAJAwLAC0NCwA0AwMANgEAADsDAgA9AQAAOgUAADULAgA8CgMAMw0KADsL 128 | DAAoEwwANhQHADsTCwAsFhUAOBgWADQcFQA2JBcAOyMdADouJABEBwYATAMCAEMLBABLCwMATAsKAFMC 129 | AwBWAQAAXAMBAF4GAABVCgIAWwsBAEoTCABEEgoAVxYGAFkMFgBHGRUARBsUAFcZFQBkBQQAawMAAGQM 130 | AgBsCwIAdQUEAHsCAQBzCwIAZhYFAGsSAwB2EwYAZhsVAHcbFQBKJBcAWSUZAGwpDQBqKBgAdygXAEss 131 | JwBXKiUASTYqAFY3KQBWPDQAbDItAHYpIwBrOCgAdjgoAFhLNwB0TDIAe0MrAGlINgB4SDcAdFlJAI4U 132 | DgCMAwAAiwsBAJUFAwCKFgcAlBgFAKcLCQCrAgEAqwwCALUHAgC6BAAApxYFALYWBQCNLxgAsisSAIk1 133 | KgCWNScAhTo1ANEcDwDRLA0AyjQVANc1GwDrLREAkkwsAJZFKwCHRzUAlkg3AIhVOQCXVjgAsk8xAKpJ 134 | NQCjTDwAtE01AKlVOQDWVCkA0U8yAMpVOgDqUjAA7Wk4AJRaUACIWkcAllhGAKpZSQCQblAAmGRJAJdr 135 | UwCva00AtWVIAKdoVACodlcAuHdXALV5ZQDcZFMA1llHAM5qTwDGeFkA13haAOxpSwDodlcAznlmAK6J 136 | XwCujW4AtodnALqUdgDPhFoA9IhYAM2MawDYhmgAyJl2ANeZdwDwj2wA6Jl1APqZeADRqXsA8qp6ALqj 137 | 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 221 | R//OkW/////W//fkuf/anHb/+8uh///zxP/x/cn////c/+33wv/hvY3/pDUP/9I3Fv/8KQ////LL//vf 222 | tv/ctIr/xJpw/5p0Uf9FGw7/QREN/zsUDP9BEQv/Qw8J/y4EAP83KyH/RzUu/y8VD/9kDhb/ThIM/7SC 223 | bv/XmXv/nmNJ/08AAP9qAAD/PAAA/0wHAP/mr5D/37mW/6WEY/+ZbVX/gUY2/4lORP+CWj3/hE86/5ZN 224 | Sf+QPED/gjgy/6FmU//Ro3r///PE/+eYcf/nSy7/0lAt/9+Zav/3gV7/7sSV///su//+k27/yykN/9sv 225 | E//IMBH/xLyH///jtv/PmHP/jFAz/3RBLf8yEAr/OxgV/yYHBP8rBAL/NgkG/zIPC/86NCn/QTct/yQP 226 | B/9WDRf/RxgU/2xLN/+5lW///+rH/4NROv9gDgL/SwMD/1gHAP+YVTr/+tKv//zgvv/QqI//snpp/7KD 227 | aP/iqXz/9KqI/9R4a/+4Ylz/o2hV/6uGZP/v/cf/x9CY/9N3Tv/iSSj/91k1//+FW//yg13/1r+N//// 228 | 1P/Ye1T/2TYd//8oGP/hdVP/7+uw/+C/jv+/fl//qV9N/3M2LP8vFBD/LhUT/yYNC/8xDQ3/QRoY/0Mk 229 | If8wLiP/PDQn/yYWCv8jAQD/PgsB/0QcEP+IKR//z3lj//nHo/+reU//YwAA/4wSDP9yCQD/7q+T///r 230 | yf/48s//9/vX//LFo///y6b/7cqf//rqu//52Kr/+OGv//+rg//HQR//5Vw1/9lWKv/ldEL/859r///J 231 | lP//2bb//enG////5///1rT/7XtW/+ZZLv//zpn/+e/H/8+Scv/rm3z/qlc7/3hFK/8qCgX/NBoa/0om 232 | Hv9IKSD/WT84/0k0LP9HLSb/QyYf/yEBAP9bJBf/NwEA/yMJAP+UMSP/mDUf/92shP//47X/x591/9OT 233 | cf/upIz/8Yt5/5keEP+sXEX///XT/9Pcqv/jlXD/8tSl/97msf/y9b7/1HRM/6wyDv/gKAr/9Vgx/+Zs 234 | Pv/tmWX//MqV///ttv/29vb/8Pzo////2f//2ar/84Fd/+JQNP//o3n/9PbS//XJqv/eh23/yJJz/5Bs 235 | Tv9iQTH/TT4u/0s6Lf9WPjL/XT80/0MfF/9EJRz/Ty8p/ygGAP+XVkj/gTow/zADAP+XMiP/mDYe/6hw 236 | R//bqXv/9+up//rcpf/kh3L/oQ8J/6sAAP+PBgD/rF5H//fbrP/SpHX//+Kx//XotP/f26b/6D0j/9U1 237 | F//pMQP/+Ws2//STW//8x47//++7///90P/d/v//4vzq//Xzvf/7xYj/84NY//ZfRP/zWjX/9fnV//b0 238 | 0f/zu57/6c6s/6SJZ/+Nc1X/j2xS/3heTf90Sj3/VxwS/0oMBP87Fg7/VDQu/ykJA/9nKx//xXBo/6BV 239 | TP95GAr/dyAG/49LJv/xmXH/8eui//7Wm/+JAwD/hA4D/20UBv9pCAD/jAkA/7cVAP/d6rL//cqf/+F5 240 | Vv///9H/2m5M/+IyG//faTb/8p9r//XIlf/77cP//f/j//P+6v/69f//8OLP//vdov/tsWv/4IFJ/+5v 241 | SP/RNgj/16SE/+zsxP/+5cP/6t66/+TRrv/Jx57/vJJv/3M/Lv9YEQP/WQAA/2YQCv85FAz/VDoz/z4k 242 | Hf8zAgD/fSsm/3UnIf9kCgD/axgC/5RJKf//nHv/59ub//3pr/+sSzH/YwoA/zwAAP9kEAT/hAAA/8QP 243 | AP/90KX/+Jx5/9kqFv/pvJb////d//e3lf/tyaP//+7J//782v/3/+j/9f/1/+r29v//++//7+TG//Xg 244 | rf/iuH3/0oVN/+VtP//rNAz/wTYb///Xs///8sz/7OS//9jPqv/k3bL/9seh/61xW/9lEwL/YQAA/14H 245 | AP9IMCT/Wko+/1M+Nv8jAAD/PAUC/y0FAP9aBwD/eCER/49ILf/GbE7/3Kd8/7yeb///57//lkwy/3QT 246 | Bf9qAAD/ghAQ/6cfBf/aTjf/22FJ/9NvVv/1vp//4f/W//P70//u89T////g//v10v/x6Mb/+vDS//fu 247 | 0////+T////i//r/5P/17Mr/5LCH/+x6Uf/pHwj/4i8Q/+p3Uv/247j/5urB/9zQrv+uVTr/sU0w/86o 248 | iv+naVH/YREA/0gFAP9hWkv/amJV/1xHP/8JAgX/BAAB/wQAAf8JAAH/EAAB/zYaIP9BHyb/gkQm/8KA 249 | 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 291 | Jv+TNh3/sGFA//j0xP/7673/z1E4/8sMAP/fmHP/3Ew6//KYjf+bOj7/cgsJ/4QBAP/c46r//ceY/+eG 292 | YP/jlGv/uZJl///1xv/x7b3/xtGZ//vPlP/e1Yz/1+ai/+mifP/dcFr/t08y/y0FB/8iCQf/HA4I/xsI 293 | AP87AQD/dDYk/2AjD/8gAAD/PB0e/1I1MP99Qzf/o2FW/zcAAP80BgD/BAAA/wUAAf8FAAD/BwAA/wcA 294 | AP8MAQP/DwQG/1YNHf+DNyH/9GdY///s0f//+uD/wHZa/+E3H//tPy7/4XZb///yz//OTjn/4QcB/+RO 295 | Pf//8b7/zqZ2/8CAV/++dFD/uHFP/8yJaP/einD/9LKB//+/kP/3rYP/pFYx/8qBW//vwI3//dWg/4hF 296 | Lv9oAwD/cgAC/1MACv8AAgH/AAQA/xYNAP8hAAX/GQAA/x4EAP8/CQD/m11T/1IbEv8yBwD/BAAA/wUA 297 | Af8FAAD/BwAA/wcAAP8NAgT/EAUH/10IFv9zLxj/8WJT/+iznv//7dX////h///yy//+r5T/u0Mt/+U6 298 | LP++EwP/xVo////qw//606b/xIxj/7lyTf+0a03/kVA0/3xDKv+KRjP/nVww/86HYf/EdVT/gi4S/61Z 299 | Pf+nYjv//r+T/+isjv9nCgD/aQAA/1AABv8AAQH/BQ0G/wwBAP8ZAAD/GQEB/xsFAP9QHxX/jFVM/zoL 300 | A/8iAAD/AgAA/wUAAf8FAAD/BQAA/wgAAf8MBAX/EAgJ/1YPEv9gHQj/2VpL//y/q//67dP/4f3Z/+j/ 301 | 2v///Nr//7Sb/+1BNf//kn3//+nA/+r1w//sroj/r2ZG/5tKL/+SSTP/bTcm/08oGv9IHBX/XRsA/3Ap 302 | Dv99LBf/axAB/3UUBv9rCwD/qk00/+q2kf+VRSz/YgAA/1QHCv8AAQD/BgoF/w4AAP8VAAD/GQcG/w4A 303 | AP9KIRj/UiQd/yMAAP8kCQX/AwEB/wMBAf8EAAD/BQAA/wYAAf8NBQb/EQkK/z0TDP9cDwD/mzQl/+Ov 304 | mP//+97/4+vN///12//Oemj//+HE//740//r+Mz/5PnI////0f+eUTf/jTgi/407Kv97Oiz/USoh/zgk 305 | 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 333 | BgBmGxUAdxsVAEokFwBZJRkAbCkNAGooGAB3KBcASywnAFcqJQBJNioAVjcpAFY8NABsMi0AdikjAGs4 334 | KAB2OCgAWEs3AHRMMgB7QysAaUg2AHhINwB0WUkAjhQOAIwDAACLCwEAlQUDAIoWBwCUGAUApwsJAKsC 335 | AQCrDAIAtQcCALoEAACnFgUAthYFAI0vGACyKxIAiTUqAJY1JwCFOjUA0RwPANEsDQDKNBUA1zUbAOst 336 | EQCSTCwAlkUrAIdHNQCWSDcAiFU5AJdWOACyTzEAqkk1AKNMPAC0TTUAqVU5ANZUKQDRTzIAylU6AOpS 337 | MADtaTgAlFpQAIhaRwCWWEYAqllJAJBuUACYZEkAl2tTAK9rTQC1ZUgAp2hUAKh2VwC4d1cAtXllANxk 338 | UwDWWUcAzmpPAMZ4WQDXeFoA7GlLAOh2VwDOeWYArolfAK6NbgC2h2cAupR2AM+EWgD0iFgAzYxrANiG 339 | aADImXYA15l3APCPbADomXUA+pl4ANGpewDyqnoAuqONAOukjgDNsI8A2KeGANa3igDoq4sA+aqHAOS1 340 | igD3t4sA6LaWAPm5lQD+u5wA1tWdAPLHjADpxpgA+8mZAPrWmgDVz6gA6M+rAPvJpwD71acA/tqsAP7Z 341 | tgD16rIA9ea2AP/iswD/5LsA/eu8AO3u0AD86MgA/uzEAOv5yQD79sgA/fTMAOf72AD4+NYA/vzTAP7+ 342 | 2wD//t4A9fnqAP7+5AD4/PcAzsPBAAfEwQCAlKYA////AAAApgAAAAEA3OwSAFDsEgAM9xIAlFzCAIgg 343 | wAD///8AzsPBAOfDwQB8AAAAJO0SAC7EwQB8AAAAAAAAAHwAAABUQdkAaO0SAGjtEgCj4OIACwAAALCC 344 | 4gADAAAAISQBAKztEgB4g+IAgJSmAAhN2QCAlKYAJE3ZACEkAQCs7RIAU5dTDQgqWhYcVkIGISEsBmC0 345 | bFJREFQjR8h4Vo9gXTCmR51QSYalS4VLpZiaBjVcpEyzOBxLT8OvSLU2DQiXFKRJyXcouEKybEhHBg2O 346 | dgapZ22nVkdys51uqinHY44zQJMltoCAeNKJwHq0gjAoWiN3q6/Vxp2Mwdmo1ataXFheTr5JaK/Xz9vO 347 | p3vKxUdhBgaFiHO713x7jNp6t0u0XjkidYiKTIqcZ0i71W41q6YGqqLLbGjSagY5bdJzxDMpE4AsV8vS 348 | vcs3za+WccEzYEVCEywUlouKUMGlvr6HFWAQjwYGFJzUvdCWX0JPhUcMBhAGBgZCnbyHIQYIAAZkDQAA 349 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 350 | AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIxgSABcEAwArCwgAOAYDAFgc 351 | EwBtCwUAsioXAK4NBACcTTQAo2dPANduVQDQkW0A5LCOAPDaqAD30asA+PbVAIhIUREDQzASJIRDERER 352 | IRGImIABEyM0ERO5mDIwAAERlcyqhDQUSCM1u4WESJRCEpiFWoUzFEkjVeyUSImCRESJVaizMxRLIzjc 353 | uIiLMiSUi1nIhVi5jIdaW+u8oxI5QolVmEVbVVnItXjs5TITOBFZVVlEJ2VUmYdVVVERFLgRWVVchTdl 354 | RJ5bVTVRESnEEY1eu5qYKqeux+dzUzO7kxFbZ1fIUidsrcdelVM8mZQATDVV6IQEhL/7qv3e20NDAExF 355 | U+mEBEi9v//GbslDMwBIuFWOy8qZ+qqvpqy0IiQAFG6VX/7t7Gqu7+rryCREQZNpzbd9vdZr7//Kr8mZ 356 | gzJJWL5VV9r2rv/9ym/9yEU0Elir9Veq7/////pq3YyThBEQS9x2r/qqq63fZvpVy4QREQnN/8a/Zmdq 357 | z+qmVclCMhEK/Mxmb8Zmdq/8pVrJhIMzOeZ3V3rHUzNc/HU+uZg4szrXdVd9dzEzV/lT6YRZEDq1ruV8 358 | /3cRMzf/pV6AORFIVIzpXfxbITi3z5U+gEkRQiEki+v3feXcx37o6II5EUEREkZt96V13L6O3IRCQxSD 359 | MREUj/avqvqrvMrIUxERNDERFEz/xn/pmIuonFMREUEhERNc/7//iIAFVVvDEREhERETN6//6EMhERES 360 | hBHBERERERd3ZlURERERESEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 361 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 362 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 363 | 364 | 365 | -------------------------------------------------------------------------------- /SpellWork/Forms/FormSettings.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SpellWork 2 | { 3 | partial class FormSettings 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormSettings)); 32 | this._gbDbSetting = new System.Windows.Forms.GroupBox(); 33 | this._tbBase = new System.Windows.Forms.TextBox(); 34 | this.label5 = new System.Windows.Forms.Label(); 35 | this._tbPass = new System.Windows.Forms.TextBox(); 36 | this.label4 = new System.Windows.Forms.Label(); 37 | this._tbUser = new System.Windows.Forms.TextBox(); 38 | this.label3 = new System.Windows.Forms.Label(); 39 | this._tbPort = new System.Windows.Forms.TextBox(); 40 | this.label2 = new System.Windows.Forms.Label(); 41 | this._tbHost = new System.Windows.Forms.TextBox(); 42 | this.label1 = new System.Windows.Forms.Label(); 43 | this._cbUseDBConnect = new System.Windows.Forms.CheckBox(); 44 | this._bTestConnect = new System.Windows.Forms.Button(); 45 | this._bSaveSettings = new System.Windows.Forms.Button(); 46 | this._gbDbSetting.SuspendLayout(); 47 | this.SuspendLayout(); 48 | // 49 | // _gbDbSetting 50 | // 51 | this._gbDbSetting.Controls.Add(this._tbBase); 52 | this._gbDbSetting.Controls.Add(this.label5); 53 | this._gbDbSetting.Controls.Add(this._tbPass); 54 | this._gbDbSetting.Controls.Add(this.label4); 55 | this._gbDbSetting.Controls.Add(this._tbUser); 56 | this._gbDbSetting.Controls.Add(this.label3); 57 | this._gbDbSetting.Controls.Add(this._tbPort); 58 | this._gbDbSetting.Controls.Add(this.label2); 59 | this._gbDbSetting.Controls.Add(this._tbHost); 60 | this._gbDbSetting.Controls.Add(this.label1); 61 | this._gbDbSetting.Location = new System.Drawing.Point(12, 12); 62 | this._gbDbSetting.Name = "_gbDbSetting"; 63 | this._gbDbSetting.Size = new System.Drawing.Size(217, 158); 64 | this._gbDbSetting.TabIndex = 0; 65 | this._gbDbSetting.TabStop = false; 66 | this._gbDbSetting.Text = "Date Base Connect Settings"; 67 | // 68 | // _tbBase 69 | // 70 | this._tbBase.Location = new System.Drawing.Point(54, 126); 71 | this._tbBase.Name = "_tbBase"; 72 | this._tbBase.Size = new System.Drawing.Size(152, 20); 73 | this._tbBase.TabIndex = 4; 74 | // 75 | // label5 76 | // 77 | this.label5.AutoSize = true; 78 | this.label5.Location = new System.Drawing.Point(6, 129); 79 | this.label5.Name = "label5"; 80 | this.label5.Size = new System.Drawing.Size(31, 13); 81 | this.label5.TabIndex = 0; 82 | this.label5.Text = "Base"; 83 | // 84 | // _tbPass 85 | // 86 | this._tbPass.Location = new System.Drawing.Point(54, 100); 87 | this._tbPass.Name = "_tbPass"; 88 | this._tbPass.Size = new System.Drawing.Size(152, 20); 89 | this._tbPass.TabIndex = 3; 90 | this._tbPass.UseSystemPasswordChar = true; 91 | // 92 | // label4 93 | // 94 | this.label4.AutoSize = true; 95 | this.label4.Location = new System.Drawing.Point(6, 103); 96 | this.label4.Name = "label4"; 97 | this.label4.Size = new System.Drawing.Size(30, 13); 98 | this.label4.TabIndex = 0; 99 | this.label4.Text = "Pass"; 100 | // 101 | // _tbUser 102 | // 103 | this._tbUser.Location = new System.Drawing.Point(54, 74); 104 | this._tbUser.Name = "_tbUser"; 105 | this._tbUser.Size = new System.Drawing.Size(152, 20); 106 | this._tbUser.TabIndex = 2; 107 | // 108 | // label3 109 | // 110 | this.label3.AutoSize = true; 111 | this.label3.Location = new System.Drawing.Point(6, 77); 112 | this.label3.Name = "label3"; 113 | this.label3.Size = new System.Drawing.Size(29, 13); 114 | this.label3.TabIndex = 0; 115 | this.label3.Text = "User"; 116 | // 117 | // _tbPort 118 | // 119 | this._tbPort.Location = new System.Drawing.Point(54, 48); 120 | this._tbPort.Name = "_tbPort"; 121 | this._tbPort.Size = new System.Drawing.Size(152, 20); 122 | this._tbPort.TabIndex = 1; 123 | // 124 | // label2 125 | // 126 | this.label2.AutoSize = true; 127 | this.label2.Location = new System.Drawing.Point(6, 51); 128 | this.label2.Name = "label2"; 129 | this.label2.Size = new System.Drawing.Size(26, 13); 130 | this.label2.TabIndex = 0; 131 | this.label2.Text = "Port"; 132 | // 133 | // _tbHost 134 | // 135 | this._tbHost.Location = new System.Drawing.Point(54, 22); 136 | this._tbHost.Name = "_tbHost"; 137 | this._tbHost.Size = new System.Drawing.Size(152, 20); 138 | this._tbHost.TabIndex = 0; 139 | // 140 | // label1 141 | // 142 | this.label1.AutoSize = true; 143 | this.label1.Location = new System.Drawing.Point(6, 25); 144 | this.label1.Name = "label1"; 145 | this.label1.Size = new System.Drawing.Size(29, 13); 146 | this.label1.TabIndex = 0; 147 | this.label1.Text = "Host"; 148 | // 149 | // _cbUseDBConnect 150 | // 151 | this._cbUseDBConnect.AutoSize = true; 152 | this._cbUseDBConnect.Location = new System.Drawing.Point(21, 176); 153 | this._cbUseDBConnect.Name = "_cbUseDBConnect"; 154 | this._cbUseDBConnect.Size = new System.Drawing.Size(106, 17); 155 | this._cbUseDBConnect.TabIndex = 5; 156 | this._cbUseDBConnect.Text = "Use DB Connect"; 157 | this._cbUseDBConnect.UseVisualStyleBackColor = true; 158 | this._cbUseDBConnect.CheckedChanged += new System.EventHandler(this._cbUseDBConnect_CheckedChanged); 159 | // 160 | // _bTestConnect 161 | // 162 | this._bTestConnect.Location = new System.Drawing.Point(12, 199); 163 | this._bTestConnect.Name = "_bTestConnect"; 164 | this._bTestConnect.Size = new System.Drawing.Size(95, 23); 165 | this._bTestConnect.TabIndex = 6; 166 | this._bTestConnect.Text = "Test connect"; 167 | this._bTestConnect.UseVisualStyleBackColor = true; 168 | this._bTestConnect.Click += new System.EventHandler(this._bSaveSettings_Click); 169 | // 170 | // _bSaveSettings 171 | // 172 | this._bSaveSettings.Location = new System.Drawing.Point(134, 199); 173 | this._bSaveSettings.Name = "_bSaveSettings"; 174 | this._bSaveSettings.Size = new System.Drawing.Size(95, 23); 175 | this._bSaveSettings.TabIndex = 7; 176 | this._bSaveSettings.Text = "Save"; 177 | this._bSaveSettings.UseVisualStyleBackColor = true; 178 | this._bSaveSettings.Click += new System.EventHandler(this._bSaveSettings_Click); 179 | // 180 | // FormSettings 181 | // 182 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 183 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 184 | this.ClientSize = new System.Drawing.Size(242, 234); 185 | this.Controls.Add(this._bSaveSettings); 186 | this.Controls.Add(this._bTestConnect); 187 | this.Controls.Add(this._cbUseDBConnect); 188 | this.Controls.Add(this._gbDbSetting); 189 | this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); 190 | this.MaximizeBox = false; 191 | this.MaximumSize = new System.Drawing.Size(250, 268); 192 | this.MinimizeBox = false; 193 | this.MinimumSize = new System.Drawing.Size(250, 268); 194 | this.Name = "FormSettings"; 195 | this.ShowInTaskbar = false; 196 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 197 | this.Text = "SpellWork Settings"; 198 | this.Load += new System.EventHandler(this.SettingsForm_Load); 199 | this._gbDbSetting.ResumeLayout(false); 200 | this._gbDbSetting.PerformLayout(); 201 | this.ResumeLayout(false); 202 | this.PerformLayout(); 203 | 204 | } 205 | 206 | #endregion 207 | 208 | private System.Windows.Forms.GroupBox _gbDbSetting; 209 | private System.Windows.Forms.Label label1; 210 | private System.Windows.Forms.TextBox _tbBase; 211 | private System.Windows.Forms.Label label5; 212 | private System.Windows.Forms.TextBox _tbPass; 213 | private System.Windows.Forms.Label label4; 214 | private System.Windows.Forms.TextBox _tbUser; 215 | private System.Windows.Forms.Label label3; 216 | private System.Windows.Forms.TextBox _tbPort; 217 | private System.Windows.Forms.Label label2; 218 | private System.Windows.Forms.TextBox _tbHost; 219 | private System.Windows.Forms.CheckBox _cbUseDBConnect; 220 | private System.Windows.Forms.Button _bTestConnect; 221 | private System.Windows.Forms.Button _bSaveSettings; 222 | } 223 | } -------------------------------------------------------------------------------- /SpellWork/Forms/FormSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Data; 5 | using System.Drawing; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Windows.Forms; 9 | using SpellWork.Properties; 10 | 11 | namespace SpellWork 12 | { 13 | public partial class FormSettings : Form 14 | { 15 | public FormSettings() 16 | { 17 | InitializeComponent(); 18 | } 19 | 20 | private void _cbUseDBConnect_CheckedChanged(object sender, EventArgs e) 21 | { 22 | _gbDbSetting.Enabled = ((CheckBox)sender).Checked; 23 | } 24 | 25 | private void _bSaveSettings_Click(object sender, EventArgs e) 26 | { 27 | Settings.Default.Host = _tbHost.Text; 28 | Settings.Default.Port = _tbPort.Text; 29 | Settings.Default.User = _tbUser.Text; 30 | Settings.Default.Pass = _tbPass.Text; 31 | Settings.Default.Db_mangos = _tbBase.Text; 32 | Settings.Default.UseDbConnect = _cbUseDBConnect.Checked; 33 | 34 | MySQLConnect.TestConnect(); 35 | 36 | if (((Button)sender).Text != "Save") 37 | { 38 | if (MySQLConnect.Connected) 39 | { 40 | MessageBox.Show("Connection is successfully!", "MySQL Connections!", 41 | MessageBoxButtons.OK, MessageBoxIcon.Information); 42 | } 43 | else 44 | { 45 | MessageBox.Show("Connection is failed!", "ERROR!", 46 | MessageBoxButtons.OK, MessageBoxIcon.Error); 47 | } 48 | } 49 | 50 | if (((Button)sender).Text == "Save") 51 | { 52 | Settings.Default.Save(); 53 | this.Close(); 54 | } 55 | } 56 | 57 | private void SettingsForm_Load(object sender, EventArgs e) 58 | { 59 | _tbHost.Text = Settings.Default.Host; 60 | _tbPort.Text = Settings.Default.Port; 61 | _tbUser.Text = Settings.Default.User; 62 | _tbPass.Text = Settings.Default.Pass; 63 | _tbBase.Text = Settings.Default.Db_mangos; 64 | _gbDbSetting.Enabled = _cbUseDBConnect.Checked = Settings.Default.UseDbConnect; 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /SpellWork/Forms/FormSettings.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | AAABAAUAICAAAAEACACoCAAAVgAAADAwAAABACAAqCUAAP4IAAAQEBAAAQAEACgBAACmLgAAEBAAAAEA 124 | CABoBQAAzi8AACAgEAABAAQA6AIAADY1AAAoAAAAIAAAAEAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAA 125 | AAAAAAAACQgHAAIAAAAAAgAAAAADAAUAAQAHAAEABQUBAAAABAALAgIADQIBAA4AAAAKBQYABQoDABME 126 | BAATAAAAFgAAABoCAgAdAQEAHAoCABQDCgASCgoAHAsKACYEBwAiAAAAJQEAACcAAAAiBQEAJgYBACoD 127 | AQAsAQAALgAAACQLBAArCgIAJAwLAC0NCwA0AwMANgEAADsDAgA9AQAAOgUAADULAgA8CgMAMw0KADsL 128 | DAAoEwwANhQHADsTCwAsFhUAOBgWADQcFQA2JBcAOyMdADouJABEBwYATAMCAEMLBABLCwMATAsKAFMC 129 | AwBWAQAAXAMBAF4GAABVCgIAWwsBAEoTCABEEgoAVxYGAFkMFgBHGRUARBsUAFcZFQBkBQQAawMAAGQM 130 | AgBsCwIAdQUEAHsCAQBzCwIAZhYFAGsSAwB2EwYAZhsVAHcbFQBKJBcAWSUZAGwpDQBqKBgAdygXAEss 131 | JwBXKiUASTYqAFY3KQBWPDQAbDItAHYpIwBrOCgAdjgoAFhLNwB0TDIAe0MrAGlINgB4SDcAdFlJAI4U 132 | DgCMAwAAiwsBAJUFAwCKFgcAlBgFAKcLCQCrAgEAqwwCALUHAgC6BAAApxYFALYWBQCNLxgAsisSAIk1 133 | KgCWNScAhTo1ANEcDwDRLA0AyjQVANc1GwDrLREAkkwsAJZFKwCHRzUAlkg3AIhVOQCXVjgAsk8xAKpJ 134 | NQCjTDwAtE01AKlVOQDWVCkA0U8yAMpVOgDqUjAA7Wk4AJRaUACIWkcAllhGAKpZSQCQblAAmGRJAJdr 135 | UwCva00AtWVIAKdoVACodlcAuHdXALV5ZQDcZFMA1llHAM5qTwDGeFkA13haAOxpSwDodlcAznlmAK6J 136 | XwCujW4AtodnALqUdgDPhFoA9IhYAM2MawDYhmgAyJl2ANeZdwDwj2wA6Jl1APqZeADRqXsA8qp6ALqj 137 | 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 221 | R//OkW/////W//fkuf/anHb/+8uh///zxP/x/cn////c/+33wv/hvY3/pDUP/9I3Fv/8KQ////LL//vf 222 | tv/ctIr/xJpw/5p0Uf9FGw7/QREN/zsUDP9BEQv/Qw8J/y4EAP83KyH/RzUu/y8VD/9kDhb/ThIM/7SC 223 | bv/XmXv/nmNJ/08AAP9qAAD/PAAA/0wHAP/mr5D/37mW/6WEY/+ZbVX/gUY2/4lORP+CWj3/hE86/5ZN 224 | Sf+QPED/gjgy/6FmU//Ro3r///PE/+eYcf/nSy7/0lAt/9+Zav/3gV7/7sSV///su//+k27/yykN/9sv 225 | E//IMBH/xLyH///jtv/PmHP/jFAz/3RBLf8yEAr/OxgV/yYHBP8rBAL/NgkG/zIPC/86NCn/QTct/yQP 226 | B/9WDRf/RxgU/2xLN/+5lW///+rH/4NROv9gDgL/SwMD/1gHAP+YVTr/+tKv//zgvv/QqI//snpp/7KD 227 | aP/iqXz/9KqI/9R4a/+4Ylz/o2hV/6uGZP/v/cf/x9CY/9N3Tv/iSSj/91k1//+FW//yg13/1r+N//// 228 | 1P/Ye1T/2TYd//8oGP/hdVP/7+uw/+C/jv+/fl//qV9N/3M2LP8vFBD/LhUT/yYNC/8xDQ3/QRoY/0Mk 229 | If8wLiP/PDQn/yYWCv8jAQD/PgsB/0QcEP+IKR//z3lj//nHo/+reU//YwAA/4wSDP9yCQD/7q+T///r 230 | yf/48s//9/vX//LFo///y6b/7cqf//rqu//52Kr/+OGv//+rg//HQR//5Vw1/9lWKv/ldEL/859r///J 231 | lP//2bb//enG////5///1rT/7XtW/+ZZLv//zpn/+e/H/8+Scv/rm3z/qlc7/3hFK/8qCgX/NBoa/0om 232 | Hv9IKSD/WT84/0k0LP9HLSb/QyYf/yEBAP9bJBf/NwEA/yMJAP+UMSP/mDUf/92shP//47X/x591/9OT 233 | cf/upIz/8Yt5/5keEP+sXEX///XT/9Pcqv/jlXD/8tSl/97msf/y9b7/1HRM/6wyDv/gKAr/9Vgx/+Zs 234 | Pv/tmWX//MqV///ttv/29vb/8Pzo////2f//2ar/84Fd/+JQNP//o3n/9PbS//XJqv/eh23/yJJz/5Bs 235 | Tv9iQTH/TT4u/0s6Lf9WPjL/XT80/0MfF/9EJRz/Ty8p/ygGAP+XVkj/gTow/zADAP+XMiP/mDYe/6hw 236 | R//bqXv/9+up//rcpf/kh3L/oQ8J/6sAAP+PBgD/rF5H//fbrP/SpHX//+Kx//XotP/f26b/6D0j/9U1 237 | F//pMQP/+Ws2//STW//8x47//++7///90P/d/v//4vzq//Xzvf/7xYj/84NY//ZfRP/zWjX/9fnV//b0 238 | 0f/zu57/6c6s/6SJZ/+Nc1X/j2xS/3heTf90Sj3/VxwS/0oMBP87Fg7/VDQu/ykJA/9nKx//xXBo/6BV 239 | TP95GAr/dyAG/49LJv/xmXH/8eui//7Wm/+JAwD/hA4D/20UBv9pCAD/jAkA/7cVAP/d6rL//cqf/+F5 240 | Vv///9H/2m5M/+IyG//faTb/8p9r//XIlf/77cP//f/j//P+6v/69f//8OLP//vdov/tsWv/4IFJ/+5v 241 | SP/RNgj/16SE/+zsxP/+5cP/6t66/+TRrv/Jx57/vJJv/3M/Lv9YEQP/WQAA/2YQCv85FAz/VDoz/z4k 242 | Hf8zAgD/fSsm/3UnIf9kCgD/axgC/5RJKf//nHv/59ub//3pr/+sSzH/YwoA/zwAAP9kEAT/hAAA/8QP 243 | AP/90KX/+Jx5/9kqFv/pvJb////d//e3lf/tyaP//+7J//782v/3/+j/9f/1/+r29v//++//7+TG//Xg 244 | rf/iuH3/0oVN/+VtP//rNAz/wTYb///Xs///8sz/7OS//9jPqv/k3bL/9seh/61xW/9lEwL/YQAA/14H 245 | AP9IMCT/Wko+/1M+Nv8jAAD/PAUC/y0FAP9aBwD/eCER/49ILf/GbE7/3Kd8/7yeb///57//lkwy/3QT 246 | Bf9qAAD/ghAQ/6cfBf/aTjf/22FJ/9NvVv/1vp//4f/W//P70//u89T////g//v10v/x6Mb/+vDS//fu 247 | 0////+T////i//r/5P/17Mr/5LCH/+x6Uf/pHwj/4i8Q/+p3Uv/247j/5urB/9zQrv+uVTr/sU0w/86o 248 | iv+naVH/YREA/0gFAP9hWkv/amJV/1xHP/8JAgX/BAAB/wQAAf8JAAH/EAAB/zYaIP9BHyb/gkQm/8KA 249 | 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 291 | Jv+TNh3/sGFA//j0xP/7673/z1E4/8sMAP/fmHP/3Ew6//KYjf+bOj7/cgsJ/4QBAP/c46r//ceY/+eG 292 | YP/jlGv/uZJl///1xv/x7b3/xtGZ//vPlP/e1Yz/1+ai/+mifP/dcFr/t08y/y0FB/8iCQf/HA4I/xsI 293 | AP87AQD/dDYk/2AjD/8gAAD/PB0e/1I1MP99Qzf/o2FW/zcAAP80BgD/BAAA/wUAAf8FAAD/BwAA/wcA 294 | AP8MAQP/DwQG/1YNHf+DNyH/9GdY///s0f//+uD/wHZa/+E3H//tPy7/4XZb///yz//OTjn/4QcB/+RO 295 | Pf//8b7/zqZ2/8CAV/++dFD/uHFP/8yJaP/einD/9LKB//+/kP/3rYP/pFYx/8qBW//vwI3//dWg/4hF 296 | Lv9oAwD/cgAC/1MACv8AAgH/AAQA/xYNAP8hAAX/GQAA/x4EAP8/CQD/m11T/1IbEv8yBwD/BAAA/wUA 297 | Af8FAAD/BwAA/wcAAP8NAgT/EAUH/10IFv9zLxj/8WJT/+iznv//7dX////h///yy//+r5T/u0Mt/+U6 298 | LP++EwP/xVo////qw//606b/xIxj/7lyTf+0a03/kVA0/3xDKv+KRjP/nVww/86HYf/EdVT/gi4S/61Z 299 | Pf+nYjv//r+T/+isjv9nCgD/aQAA/1AABv8AAQH/BQ0G/wwBAP8ZAAD/GQEB/xsFAP9QHxX/jFVM/zoL 300 | A/8iAAD/AgAA/wUAAf8FAAD/BQAA/wgAAf8MBAX/EAgJ/1YPEv9gHQj/2VpL//y/q//67dP/4f3Z/+j/ 301 | 2v///Nr//7Sb/+1BNf//kn3//+nA/+r1w//sroj/r2ZG/5tKL/+SSTP/bTcm/08oGv9IHBX/XRsA/3Ap 302 | Dv99LBf/axAB/3UUBv9rCwD/qk00/+q2kf+VRSz/YgAA/1QHCv8AAQD/BgoF/w4AAP8VAAD/GQcG/w4A 303 | AP9KIRj/UiQd/yMAAP8kCQX/AwEB/wMBAf8EAAD/BQAA/wYAAf8NBQb/EQkK/z0TDP9cDwD/mzQl/+Ov 304 | mP//+97/4+vN///12//Oemj//+HE//740//r+Mz/5PnI////0f+eUTf/jTgi/407Kv97Oiz/USoh/zgk 305 | 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 333 | BgBmGxUAdxsVAEokFwBZJRkAbCkNAGooGAB3KBcASywnAFcqJQBJNioAVjcpAFY8NABsMi0AdikjAGs4 334 | KAB2OCgAWEs3AHRMMgB7QysAaUg2AHhINwB0WUkAjhQOAIwDAACLCwEAlQUDAIoWBwCUGAUApwsJAKsC 335 | AQCrDAIAtQcCALoEAACnFgUAthYFAI0vGACyKxIAiTUqAJY1JwCFOjUA0RwPANEsDQDKNBUA1zUbAOst 336 | EQCSTCwAlkUrAIdHNQCWSDcAiFU5AJdWOACyTzEAqkk1AKNMPAC0TTUAqVU5ANZUKQDRTzIAylU6AOpS 337 | MADtaTgAlFpQAIhaRwCWWEYAqllJAJBuUACYZEkAl2tTAK9rTQC1ZUgAp2hUAKh2VwC4d1cAtXllANxk 338 | UwDWWUcAzmpPAMZ4WQDXeFoA7GlLAOh2VwDOeWYArolfAK6NbgC2h2cAupR2AM+EWgD0iFgAzYxrANiG 339 | aADImXYA15l3APCPbADomXUA+pl4ANGpewDyqnoAuqONAOukjgDNsI8A2KeGANa3igDoq4sA+aqHAOS1 340 | igD3t4sA6LaWAPm5lQD+u5wA1tWdAPLHjADpxpgA+8mZAPrWmgDVz6gA6M+rAPvJpwD71acA/tqsAP7Z 341 | tgD16rIA9ea2AP/iswD/5LsA/eu8AO3u0AD86MgA/uzEAOv5yQD79sgA/fTMAOf72AD4+NYA/vzTAP7+ 342 | 2wD//t4A9fnqAP7+5AD4/PcAzsPBAAfEwQCAlKYA////AAAApgAAAAEA3OwSAFDsEgAM9xIAlFzCAIgg 343 | wAD///8AzsPBAOfDwQB8AAAAJO0SAC7EwQB8AAAAAAAAAHwAAABUQdkAaO0SAGjtEgCj4OIACwAAALCC 344 | 4gADAAAAISQBAKztEgB4g+IAgJSmAAhN2QCAlKYAJE3ZACEkAQCs7RIAU5dTDQgqWhYcVkIGISEsBmC0 345 | bFJREFQjR8h4Vo9gXTCmR51QSYalS4VLpZiaBjVcpEyzOBxLT8OvSLU2DQiXFKRJyXcouEKybEhHBg2O 346 | dgapZ22nVkdys51uqinHY44zQJMltoCAeNKJwHq0gjAoWiN3q6/Vxp2Mwdmo1ataXFheTr5JaK/Xz9vO 347 | p3vKxUdhBgaFiHO713x7jNp6t0u0XjkidYiKTIqcZ0i71W41q6YGqqLLbGjSagY5bdJzxDMpE4AsV8vS 348 | vcs3za+WccEzYEVCEywUlouKUMGlvr6HFWAQjwYGFJzUvdCWX0JPhUcMBhAGBgZCnbyHIQYIAAZkDQAA 349 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 350 | AAAoAAAAIAAAAEAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIxgSABcEAwArCwgAOAYDAFgc 351 | EwBtCwUAsioXAK4NBACcTTQAo2dPANduVQDQkW0A5LCOAPDaqAD30asA+PbVAIhIUREDQzASJIRDERER 352 | IRGImIABEyM0ERO5mDIwAAERlcyqhDQUSCM1u4WESJRCEpiFWoUzFEkjVeyUSImCRESJVaizMxRLIzjc 353 | uIiLMiSUi1nIhVi5jIdaW+u8oxI5QolVmEVbVVnItXjs5TITOBFZVVlEJ2VUmYdVVVERFLgRWVVchTdl 354 | RJ5bVTVRESnEEY1eu5qYKqeux+dzUzO7kxFbZ1fIUidsrcdelVM8mZQATDVV6IQEhL/7qv3e20NDAExF 355 | U+mEBEi9v//GbslDMwBIuFWOy8qZ+qqvpqy0IiQAFG6VX/7t7Gqu7+rryCREQZNpzbd9vdZr7//Kr8mZ 356 | gzJJWL5VV9r2rv/9ym/9yEU0Elir9Veq7/////pq3YyThBEQS9x2r/qqq63fZvpVy4QREQnN/8a/Zmdq 357 | z+qmVclCMhEK/Mxmb8Zmdq/8pVrJhIMzOeZ3V3rHUzNc/HU+uZg4szrXdVd9dzEzV/lT6YRZEDq1ruV8 358 | /3cRMzf/pV6AORFIVIzpXfxbITi3z5U+gEkRQiEki+v3feXcx37o6II5EUEREkZt96V13L6O3IRCQxSD 359 | MREUj/avqvqrvMrIUxERNDERFEz/xn/pmIuonFMREUEhERNc/7//iIAFVVvDEREhERETN6//6EMhERES 360 | hBHBERERERd3ZlURERERESEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 361 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 362 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= 363 | 364 | 365 | -------------------------------------------------------------------------------- /SpellWork/Loader.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using DBFilesClient.NET; 4 | 5 | namespace SpellWork 6 | { 7 | class Loader 8 | { 9 | void LoadDBC(out DBCStorage dbc) where T : class, new() 10 | { 11 | var name = typeof(T).Name; 12 | name = name.Substring(0, name.Length - "Entry".Length); 13 | 14 | var tmp = new DBCStorage(); 15 | var bytes = File.ReadAllBytes(Path.Combine(DBC.DBC_PATH, name + ".dbc")); 16 | using (var ms = new MemoryStream(bytes)) 17 | tmp.Load(ms); 18 | dbc = tmp; 19 | } 20 | 21 | public Loader() 22 | { 23 | LoadDBC(out DBC.AreaGroup); 24 | LoadDBC(out DBC.AreaTable); 25 | LoadDBC(out DBC.Spell); 26 | LoadDBC(out DBC.SkillLine); 27 | LoadDBC(out DBC.SpellRange); 28 | LoadDBC(out DBC.ScreenEffect); 29 | 30 | LoadDBC(out DBC.SpellDuration); 31 | LoadDBC(out DBC.SkillLineAbility); 32 | LoadDBC(out DBC.SpellRadius); 33 | LoadDBC(out DBC.SpellCastTimes); 34 | LoadDBC(out DBC.SpellDifficulty); 35 | 36 | LoadDBC(out DBC.OverrideSpellData); 37 | LoadDBC(out DBC.SpellRuneCost); 38 | 39 | DBC.Locale = DetectedLocale; 40 | } 41 | 42 | private LocalesDBC DetectedLocale 43 | { 44 | get 45 | { 46 | byte locale = 0; 47 | while (DBC.Spell[DBC.SPELL_ENTRY_FOR_DETECT_LOCALE].GetName(locale) == String.Empty) 48 | { 49 | ++locale; 50 | 51 | if (locale >= DBC.MAX_DBC_LOCALE) 52 | throw new Exception("Detected unknown locale index " + locale); 53 | } 54 | return (LocalesDBC)locale; 55 | } 56 | } 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /SpellWork/New Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/New Icon.ico -------------------------------------------------------------------------------- /SpellWork/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace SpellWork 5 | { 6 | static class Program 7 | { 8 | /// 9 | /// The main entry point for the application. 10 | /// 11 | [STAThread] 12 | static void Main(string[] args) 13 | { 14 | Application.EnableVisualStyles(); 15 | Application.SetCompatibleTextRenderingDefault(false); 16 | 17 | try 18 | { 19 | new Loader(); 20 | Application.Run(new FormMain()); 21 | } 22 | catch (Exception ex) 23 | { 24 | MessageBox.Show(ex.Message, "SpellWork Error!", MessageBoxButtons.OK, MessageBoxIcon.Error); 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /SpellWork/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("SpellWork")] 9 | [assembly: AssemblyDescription("SpellWork")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("MaNGOS")] 12 | [assembly: AssemblyProduct("SpellWork")] 13 | [assembly: AssemblyCopyright("Copyright © LordJZ and Konctantin 2010")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("1b72dfb9-3bde-4847-97ee-fd1f2502502d")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.0.0.0")] 36 | [assembly: AssemblyFileVersion("1.0.0.0")] 37 | -------------------------------------------------------------------------------- /SpellWork/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.17626 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace SpellWork.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SpellWork.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /SpellWork/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | text/microsoft-resx 107 | 108 | 109 | 2.0 110 | 111 | 112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 113 | 114 | 115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | -------------------------------------------------------------------------------- /SpellWork/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.17626 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace SpellWork.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 16 | public sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | 26 | [global::System.Configuration.UserScopedSettingAttribute()] 27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 28 | [global::System.Configuration.DefaultSettingValueAttribute("localhost")] 29 | public string Host { 30 | get { 31 | return ((string)(this["Host"])); 32 | } 33 | set { 34 | this["Host"] = value; 35 | } 36 | } 37 | 38 | [global::System.Configuration.UserScopedSettingAttribute()] 39 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 40 | [global::System.Configuration.DefaultSettingValueAttribute("3306")] 41 | public string Port { 42 | get { 43 | return ((string)(this["Port"])); 44 | } 45 | set { 46 | this["Port"] = value; 47 | } 48 | } 49 | 50 | [global::System.Configuration.UserScopedSettingAttribute()] 51 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 52 | [global::System.Configuration.DefaultSettingValueAttribute("root")] 53 | public string User { 54 | get { 55 | return ((string)(this["User"])); 56 | } 57 | set { 58 | this["User"] = value; 59 | } 60 | } 61 | 62 | [global::System.Configuration.UserScopedSettingAttribute()] 63 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 64 | [global::System.Configuration.DefaultSettingValueAttribute("")] 65 | public string Pass { 66 | get { 67 | return ((string)(this["Pass"])); 68 | } 69 | set { 70 | this["Pass"] = value; 71 | } 72 | } 73 | 74 | [global::System.Configuration.UserScopedSettingAttribute()] 75 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 76 | [global::System.Configuration.DefaultSettingValueAttribute("mangos")] 77 | public string Db_mangos { 78 | get { 79 | return ((string)(this["Db_mangos"])); 80 | } 81 | set { 82 | this["Db_mangos"] = value; 83 | } 84 | } 85 | 86 | [global::System.Configuration.UserScopedSettingAttribute()] 87 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 88 | [global::System.Configuration.DefaultSettingValueAttribute("False")] 89 | public bool UseDbConnect { 90 | get { 91 | return ((bool)(this["UseDbConnect"])); 92 | } 93 | set { 94 | this["UseDbConnect"] = value; 95 | } 96 | } 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /SpellWork/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | localhost 7 | 8 | 9 | 3306 10 | 11 | 12 | root 13 | 14 | 15 | 16 | 17 | 18 | mangos 19 | 20 | 21 | False 22 | 23 | 24 | -------------------------------------------------------------------------------- /SpellWork/Spell/ProcInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Windows.Forms; 6 | 7 | namespace SpellWork 8 | { 9 | public class ProcInfo 10 | { 11 | public static SpellEntry SpellProc { get; set; } 12 | public static bool Update = true; 13 | 14 | public ProcInfo(TreeView familyTree, SpellFamilyNames spellfamily) 15 | { 16 | familyTree.Nodes.Clear(); 17 | 18 | var spells = from Spell in DBC.Spell.Records 19 | where Spell.SpellFamilyName == (uint)spellfamily 20 | join sk in DBC.SkillLineAbility.Records on Spell.ID equals sk.SpellId into temp1 21 | from Skill in temp1.DefaultIfEmpty() 22 | join skl in DBC.SkillLine.Records on Skill.SkillId equals skl.ID into temp2 23 | from SkillLine in temp2.DefaultIfEmpty() 24 | select new 25 | { 26 | Spell, 27 | Skill.SkillId, 28 | SkillLine 29 | }; 30 | 31 | for (int i = 0; i < 96; i++) 32 | { 33 | uint[] mask = new uint[3]; 34 | 35 | if (i < 32) 36 | mask[0] = 1U << i; 37 | else if (i < 64) 38 | mask[1] = 1U << (i - 32); 39 | else 40 | mask[2] = 1U << (i - 64); 41 | 42 | TreeNode node = new TreeNode(); 43 | node.Text = String.Format("0x{0:X8} {1:X8} {2:X8}", mask[2], mask[1], mask[0]); 44 | node.ImageKey = "family.ico"; 45 | familyTree.Nodes.Add(node); 46 | } 47 | 48 | foreach (var elem in spells) 49 | { 50 | SpellEntry spell = elem.Spell; 51 | bool IsSkill = elem.SkillId != 0; 52 | 53 | StringBuilder name = new StringBuilder(); 54 | StringBuilder toolTip = new StringBuilder(); 55 | 56 | name.AppendFormat("{0} - {1} ", spell.ID, spell.SpellNameRank); 57 | 58 | toolTip.AppendFormatLine("Spell Name: {0}", spell.SpellNameRank); 59 | toolTip.AppendFormatLine("Description: {0}", spell.Description); 60 | toolTip.AppendFormatLine("ToolTip: {0}", spell.ToolTip); 61 | 62 | if (IsSkill) 63 | { 64 | name.AppendFormat("(Skill: ({0}) {1}) ", elem.SkillId, elem.SkillLine.Name); 65 | 66 | toolTip.AppendLine(); 67 | toolTip.AppendFormatLine("Skill Name: {0}", elem.SkillLine.Name); 68 | toolTip.AppendFormatLine("Description: {0}", elem.SkillLine.Description); 69 | } 70 | 71 | name.AppendFormat("({0})", spell.School.ToString().NormaliseString("MASK_")); 72 | 73 | foreach (TreeNode node in familyTree.Nodes) 74 | { 75 | uint[] mask = new uint[3]; 76 | 77 | if (node.Index < 32) 78 | mask[0] = 1U << node.Index; 79 | else if (node.Index < 64) 80 | mask[1] = 1U << (node.Index - 32); 81 | else 82 | mask[2] = 1U << (node.Index - 64); 83 | 84 | if ((spell.SpellFamilyFlags.ContainsElement(mask))) 85 | { 86 | TreeNode child = new TreeNode(); 87 | child = node.Nodes.Add(name.ToString()); 88 | child.Name = spell.ID.ToString(); 89 | child.ImageKey = IsSkill ? "plus.ico" : "munus.ico"; 90 | child.ForeColor = IsSkill ? Color.Blue : Color.Red; 91 | child.ToolTipText = toolTip.ToString(); 92 | } 93 | } 94 | } 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /SpellWork/Spell/SpellCompare.cs: -------------------------------------------------------------------------------- 1 | using System.Windows.Forms; 2 | using System.Drawing; 3 | 4 | namespace SpellWork 5 | { 6 | /// 7 | /// Compares two spells 8 | /// 9 | class SpellCompare 10 | { 11 | /// 12 | /// Search terms 13 | /// 14 | string[] words = new[] { "=====" };// todo: more wodrs 15 | 16 | /// 17 | /// Compares two spells 18 | /// 19 | /// RichTextBox 1 in left 20 | /// RichTextBox 2 in right 21 | /// Compare Spell 1 22 | /// Compare Spell 2 23 | public SpellCompare(RichTextBox rtb1, RichTextBox rtb2, SpellEntry spell1, SpellEntry spell2) 24 | { 25 | new SpellInfo(rtb1, spell1); 26 | new SpellInfo(rtb2, spell2); 27 | 28 | string[] strsl = rtb1.Text.Split('\n'); 29 | string[] strsr = rtb2.Text.Split('\n'); 30 | 31 | int pos = 0; 32 | foreach (string str in strsl) 33 | { 34 | pos += str.Length + 1; 35 | rtb1.Select(pos - str.Length - 1, pos - 1); 36 | 37 | if (rtb2.Find(str, RichTextBoxFinds.WholeWord) != -1) 38 | { 39 | if (str.ContainsText(words)) 40 | { 41 | rtb1.SelectionBackColor = rtb1.BackColor; 42 | } 43 | else 44 | { 45 | rtb1.SelectionBackColor = Color.Cyan; 46 | } 47 | } 48 | else 49 | { 50 | rtb1.SelectionBackColor = Color.Salmon; 51 | } 52 | } 53 | 54 | pos = 0; 55 | foreach (string str in strsr) 56 | { 57 | pos += str.Length + 1; 58 | rtb2.Select(pos - str.Length - 1, pos - 1); 59 | 60 | if (rtb1.Find(str, RichTextBoxFinds.WholeWord) != -1) 61 | { 62 | if (str.ContainsText(words)) 63 | { 64 | rtb2.SelectionBackColor = rtb2.BackColor; 65 | } 66 | else 67 | { 68 | rtb2.SelectionBackColor = Color.Cyan; 69 | } 70 | } 71 | else 72 | { 73 | rtb2.SelectionBackColor = Color.Salmon; 74 | } 75 | } 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /SpellWork/SpellWork.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Debug 5 | AnyCPU 6 | 9.0.30729 7 | 2.0 8 | {49A3559B-529A-4406-824B-F7E2831DE1B2} 9 | WinExe 10 | Properties 11 | SpellWork 12 | SpellWork 13 | v4.0 14 | 512 15 | New Icon.ico 16 | false 17 | false 18 | 19 | 20 | 3.5 21 | 22 | publish\ 23 | true 24 | Disk 25 | false 26 | Foreground 27 | 7 28 | Days 29 | false 30 | false 31 | true 32 | 0 33 | 1.0.0.%2a 34 | false 35 | true 36 | 37 | 38 | 39 | true 40 | full 41 | false 42 | bin\Debug\ 43 | DEBUG;TRACE 44 | prompt 45 | 4 46 | true 47 | AllRules.ruleset 48 | 49 | 50 | pdbonly 51 | true 52 | bin\Release\ 53 | DEBUG;TRACE 54 | prompt 55 | 4 56 | true 57 | AllRules.ruleset 58 | 59 | 60 | 61 | 62 | 63 | False 64 | libs\DBFilesClient.NET.dll 65 | 66 | 67 | False 68 | libs\MySql.Data.dll 69 | 70 | 71 | 72 | 3.5 73 | 74 | 75 | 3.5 76 | 77 | 78 | 3.5 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | Form 91 | 92 | 93 | FormAboutBox.cs 94 | 95 | 96 | 97 | Form 98 | 99 | 100 | FormCalculateFlags.cs 101 | 102 | 103 | Form 104 | 105 | 106 | FormSearch.cs 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | Form 116 | 117 | 118 | FormSettings.cs 119 | 120 | 121 | 122 | 123 | 124 | 125 | Form 126 | 127 | 128 | FormMain.cs 129 | 130 | 131 | 132 | 133 | FormAboutBox.cs 134 | 135 | 136 | FormCalculateFlags.cs 137 | 138 | 139 | FormSearch.cs 140 | 141 | 142 | FormMain.cs 143 | Designer 144 | 145 | 146 | ResXFileCodeGenerator 147 | Resources.Designer.cs 148 | Designer 149 | 150 | 151 | FormSettings.cs 152 | 153 | 154 | True 155 | Resources.resx 156 | True 157 | 158 | 159 | PreserveNewest 160 | 161 | 162 | PublicSettingsSingleFileGenerator 163 | Settings.Designer.cs 164 | 165 | 166 | True 167 | Settings.settings 168 | True 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | False 177 | Профиль клиента .NET Framework 178 | false 179 | 180 | 181 | False 182 | .NET Framework 2.0 %28x86%29 183 | false 184 | 185 | 186 | False 187 | .NET Framework 3.0 %28x86%29 188 | false 189 | 190 | 191 | False 192 | .NET Framework 3.5 193 | true 194 | 195 | 196 | False 197 | .NET Framework 3.5 SP1 198 | false 199 | 200 | 201 | False 202 | Установщик Windows 3.1 203 | true 204 | 205 | 206 | 207 | 214 | -------------------------------------------------------------------------------- /SpellWork/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | localhost 12 | 13 | 14 | 3306 15 | 16 | 17 | root 18 | 19 | 20 | 21 | 22 | 23 | mangos 24 | 25 | 26 | False 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /SpellWork/libs/DBFilesClient.NET.XML: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DBFilesClient.NET 5 | 6 | 7 | 8 | 9 | Initializes a new instance of class. 10 | 11 | 12 | 13 | 14 | Removes all records from the current storage. 15 | 16 | 17 | 18 | 19 | Loads the storage from a . 20 | 21 | 22 | The from which the storage should be loaded. 23 | 24 | 25 | 26 | 27 | Gets the number of records currently contained in the storage. 28 | 29 | 30 | 31 | 32 | Gets the minimum record id in the storage. 33 | Existance of a record with this id is not guaranteed. 34 | 35 | 36 | 37 | 38 | Gets the maximum record id in the storage. 39 | Existance of a record with this id is not guaranteed. 40 | 41 | 42 | 43 | 44 | Initializes a new instance of class. 45 | 46 | 47 | 48 | 49 | Loads the storage from a . 50 | 51 | 52 | The from which the storage should be loaded. 53 | 54 | 55 | 56 | 57 | Loads the storage from a . 58 | 59 | 60 | The from which the storage should be loaded. 61 | 62 | 63 | The to be used when loading. 64 | 65 | 66 | 67 | 68 | Lazy C string computes the from the underlying signed byte stream by demand. 69 | This functionality is disabled by default. Use to enable. 70 | 71 | 72 | 73 | 74 | Enables laziness of . 75 | 76 | 77 | 78 | 79 | Controls how the field is treated by the DBC storage loader. 80 | 81 | 82 | 83 | 84 | Initializes a new instance of 85 | with the specified . 86 | 87 | 88 | Specifies how the underlying class field should be treated when loading from a DBC storage. 89 | 90 | 91 | 92 | 93 | Gets the value that specifies how the underlying class field should be treated when loading from a DBC storage. 94 | 95 | 96 | 97 | 98 | Gets or sets the name of of the property that should be used instead of the underlying class field. 99 | Use it with value. 100 | 101 | 102 | 103 | 104 | Gets or sets the number of elements in the underlying array. 105 | 106 | 107 | 108 | 109 | Specifies how a class field should be treated when loading from a DBC storage. 110 | 111 | 112 | 113 | 114 | Specifies that the field should be included into the storage entry structure. 115 | This is the default behavior. 116 | 117 | 118 | 119 | 120 | Specifies that the field should be completely ignored by the DBC stoarge loader. 121 | 122 | 123 | 124 | 125 | Specifies that the DBC storage loader should use property instead. 126 | You should specify the property. 127 | The property should be of the same type as the field, and its setter should be public. 128 | 129 | 130 | 131 | 132 | -------------------------------------------------------------------------------- /SpellWork/libs/DBFilesClient.NET.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/libs/DBFilesClient.NET.dll -------------------------------------------------------------------------------- /SpellWork/libs/DBFilesClient.NET.pdb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/libs/DBFilesClient.NET.pdb -------------------------------------------------------------------------------- /SpellWork/libs/MySql.Data.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/libs/MySql.Data.dll -------------------------------------------------------------------------------- /SpellWork/res/down.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/res/down.ico -------------------------------------------------------------------------------- /SpellWork/res/drop.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/res/drop.ico -------------------------------------------------------------------------------- /SpellWork/res/family.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/res/family.ico -------------------------------------------------------------------------------- /SpellWork/res/info.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/res/info.ico -------------------------------------------------------------------------------- /SpellWork/res/munus.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/res/munus.ico -------------------------------------------------------------------------------- /SpellWork/res/ok.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/res/ok.ico -------------------------------------------------------------------------------- /SpellWork/res/plus.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LordJZ/spellwork_cs/e5290c9a7c1dd5ba7565aa774b8d7ea446ab86ba/SpellWork/res/plus.ico -------------------------------------------------------------------------------- /SpellWork_VS2008.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 10.00 3 | # Visual Studio 2008 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpellWork", "SpellWork\SpellWork.csproj", "{49A3559B-529A-4406-824B-F7E2831DE1B2}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /SpellWork_VS2010.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpellWork", "SpellWork\SpellWork.csproj", "{49A3559B-529A-4406-824B-F7E2831DE1B2}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | -------------------------------------------------------------------------------- /SpellWork_VS2012.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 2012 4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SpellWork", "SpellWork\SpellWork.csproj", "{49A3559B-529A-4406-824B-F7E2831DE1B2}" 5 | EndProject 6 | Global 7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 8 | Debug|Any CPU = Debug|Any CPU 9 | Release|Any CPU = Release|Any CPU 10 | EndGlobalSection 11 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 12 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 13 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Release|Any CPU.ActiveCfg = Release|Any CPU 15 | {49A3559B-529A-4406-824B-F7E2831DE1B2}.Release|Any CPU.Build.0 = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(SolutionProperties) = preSolution 18 | HideSolutionNode = FALSE 19 | EndGlobalSection 20 | EndGlobal 21 | --------------------------------------------------------------------------------