diff --git a/.gitignore b/.gitignore index eb8ef517..e9e0cf61 100644 --- a/.gitignore +++ b/.gitignore @@ -13,12 +13,20 @@ user_guide_src/cilexer/dist/* user_guide_src/cilexer/pycilexer.egg-info/* #CI 3 +.DS_Store +application/cache/* +!application/cache/index.html +!application/cache/.htaccess + application/logs/* !application/logs/index.html !application/logs/.htaccess #Disabled for easy installation #/vendor/ +#YesilCMS +application/modules/armory/assets/js/viewer.min.js + #Composer composer.lock @@ -28,8 +36,8 @@ composer.lock #IDE .idea/* -!.idea/codeStyles -!.idea/runConfigurations +phpstorm.php +/nbproject/ # PHPUnit /app/phpunit.xml @@ -49,4 +57,13 @@ composer.lock .fuse_hidden* .directory .Trash-* -.nfs* \ No newline at end of file +.nfs* + +## Sublime Text cache files +*.tmlanguage.cache +*.tmPreferences.cache +*.stTheme.cache +*.sublime-workspace +*.sublime-project +/tests/tests/ +/tests/results/ \ No newline at end of file diff --git a/README.md b/README.md index 92f5add4..6ba9b5a9 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,55 @@ -![YesilCMS Logo](https://i.imgur.com/Vj0GNLV.png) + + + + YesilCMS Logo + + # YesilCMS · [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://github.com/yesilmen-vm/YesilCMS/pulls) [![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://github.com/yesilmen-vm/YesilCMS/blob/master/LICENSE) **YesilCMS** is based on [BlizzCMS](https://github.com/WoW-CMS/BlizzCMS) and specifically adapted for [VMaNGOS Core](https://github.com/vmangos/core) and includes new features and many bug fixes. +You can check out the demo on through here; [YesilCMS Demo](https://yesilcms.page). + ## Features In addition to the existing features of BlizzCMS, some of the added features are as follows; -- Complete VMaNGOS compability. +- **Complete VMaNGOS compability.** - New installation script that directs the user based on OS/Environment. - Tweaks to work on multiple Web Servers including Apache/Nginx/IIS. -- Redis caching for *nix operating systems. +- **Redis caching** for *nix operating systems. +- Advanced static caching. (optional, have some side-effects for logged in users) - Functioning [reCAPTCHA](https://www.google.com/recaptcha/admin/create). - New lightweight dark theme. -- Brand new customizable armory. +- Brand new **built-in database viewer** *(WIP(\*))*. + - Progressive database search (1.2 to 1.12) + - Item search with all related data. + - Spell search with all related data and dev-required data. + - Object, Creature and Quest page is in WIP state. (*) +- Brand new **customizable armory.** - Base character info - 3D Model Viewer (Fast: Uses plain `displayID`, Detailed: Converts old `displayID` to Classic `displayID` using Classic's DBC. You can also create a separate table instead of remote call.) - Dynamic Base Stats + - Progressive Armory (1.2 to 1.12 can be selected by user as well) - Primary & Secondary Professions - PvP Stats - Ability to show enchants on items (by using WoWHead's tooltip instead of ClassicDB) - Ability to show all character stats instead of just base-ones +- Brand new **PvP Page** + - All pvp data that player may want to see. + - Wide filtering option. + - Ability to filter by All Time and Last Week + - Ability to filter by Faction + - Ability to filter by specific name +- Unique **Timeline Module** with responsive design and full flexibility. + - Ability to add any patch on choice (including custom ones) + - Ability to order automatically or custom regardless of date + - Separated Description, General, PvE and PvP sections better for maintainability. + - Ability to add unique image for each patch. - Rest API implementation for future developments. -- Built-in account activation. -- Built-in account recovery. +- Built-in **account activation.** +- Built-in **account recovery.** +- Built-in **tooltip, item and spell viewer.** - Built-in dynamic CSRF protection on each page. - Tweaked Admin Panel. (SMTP tester, handlers and logs etc.) - On-the-fly downloadable Realmlist. @@ -33,7 +59,7 @@ In addition to the existing features of BlizzCMS, some of the added features are - Functioning vMaNGOS server (on same/another host) - OS (**Including Windows**) -- PHP 7.2+ +- PHP 7.2+ (including 8.1.x - beta) - Composer - Web-server (Tested on Nginx, Apache and IIS) - Database (MySQL/MariaDB) @@ -88,7 +114,7 @@ Create required Database & User for CMS: Then go to the site and proceed with the installation instructions. ## API Reference -There is only 1 method available yet, all CRUD operations are planned to be done from here in order to ensure infrastructure change afterwards. +There are 5 only method available yet, all CRUD operations are planned to be done from here in order to ensure infrastructure change afterwards. #### Get new display ID Takes `item_id` and returns new `ItemDisplayInfoID` from Classic build (1.14.3.44403) on [WoW Tools](https://github.com/Marlamin/wow.tools). DBC can be downloaded and used locally as well. @@ -97,9 +123,70 @@ Takes `item_id` and returns new `ItemDisplayInfoID` from Classic build (1.14.3. GET /api/v1/item/newdisplayid/item_id ``` -| Parameter | Type | Description | -|:----------|:----------|:----------------------| -| `item_id` | `integer` | **Required**. Item ID | +| Parameter | Type | Description | +|:----------|:----------|:-------------------------| +| `item_id` | `integer` | **Required**. Item entry | + +#### Get Item Info +Takes `item_id` and `patch` and returns information of given item if exists in database within given patch. + +```http + GET /api/v1/item/item_id/patch +``` + +| Parameter | Type | Description | +|:----------|:----------|:------------------------------------| +| `item_id` | `integer` | **Required**. Item entry | +| `patch` | `integer` | **Optional**. Patch version of item | + +#### Get Item Tooltip Info +Takes `item_id` and `patch` and returns `id`, `type`, `name`, `icon`, `quality` and `tooltip`. Tooltip parameter will be +html formatted. + +```http + GET /api/v1/tooltip/item/item_id/patch +``` + +| Parameter | Type | Description | +|:----------|:----------|:------------------------------------| +| `item_id` | `integer` | **Required**. Item entry | +| `patch` | `integer` | **Optional**. Patch version of item | + +#### Get Spell Tooltip Info +Takes `spell_id` and `patch` and returns `id`, `type`, `name`, `icon`, and `tooltip`. Tooltip parameter will be +html formatted. + +```http + GET /api/v1/tooltip/spell/spell_id/patch +``` + +| Parameter | Type | Description | +|:-----------|:----------|:-------------------------------------------------------------------------------| +| `spell_id` | `integer` | **Required**. Spell entry | +| `patch` | `integer` | **Optional**. Patch version of spell (build converted to patch automatically.) | + +#### Search Database +Takes `query` and `patch` and returns matching Item and Spells in database. + +```http + POST /api/v1/search_db +``` + +| Parameter | Type | Description | +|:----------|:----------|:-------------------------------------------------------------------| +| `query` | `string` | **Required**. Search query | +| `patch` | `integer` | **Optional**. Patch version (by default its 10) | +| `token` | `string` | **Required when** CSRF is enabled. Do not confuse it with API key. | + +*Note: `token` parameter should be renamed to configured `csrf_token_name`.* + + +## Roadmap + +- Minimize the code to remain compatible only with vMaNGOS and other vanilla emulators. +- Add Object, Quest and NPC structure for database. +- Customize static-based cache structure. (Create a different cache structure for the visitor and the logged in user.) +- Migrate existing framework from Codeigniter 3 to Laravel 9. ## License diff --git a/application/cache/index.html b/application/cache/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/cache/index.html +++ b/application/cache/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/config/autoload.php b/application/config/autoload.php index 265a4963..f65bdbb2 100644 --- a/application/config/autoload.php +++ b/application/config/autoload.php @@ -104,7 +104,8 @@ 'form', 'html', 'language', - 'modules' + 'modules', + 'api' ]; /* @@ -120,7 +121,7 @@ | */ $autoload['config'] = [ - 'blizzcms', + 'yesilcms', 'seo' ]; diff --git a/application/config/config.php b/application/config/config.php index d079b6dd..bbd49c68 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -313,7 +313,7 @@ | of query parameters. | */ -$config['cache_query_string'] = false; +$config['cache_query_string'] = true; /* |-------------------------------------------------------------------------- @@ -456,6 +456,8 @@ $config['csrf_expire'] = 7200; $config['csrf_regenerate'] = true; $config['csrf_exclude_uris'] = array(); +// ### to Exclude API requests use this line instead of above. +// $config['csrf_exclude_uris'] = array('^[a-z]{2}\/api\/v1/.*+$'); /* |-------------------------------------------------------------------------- diff --git a/application/config/index.html b/application/config/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/config/index.html +++ b/application/config/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/config/migration.php b/application/config/migration.php index bac355fb..018f4703 100644 --- a/application/config/migration.php +++ b/application/config/migration.php @@ -70,7 +70,7 @@ | be upgraded / downgraded to. | */ -$config['migration_version'] = 41; +$config['migration_version'] = 44; /* |-------------------------------------------------------------------------- diff --git a/application/config/routes.php b/application/config/routes.php index d75e5544..fc7d8347 100644 --- a/application/config/routes.php +++ b/application/config/routes.php @@ -177,7 +177,8 @@ * PVP statistics of the server and its realms. * It also includes arena statistics. */ -$route[$lang . '/pvp'] = 'pvp/index'; +$route[$lang . '/pvp'] = 'pvp/index'; +$route[$lang . '/pvp/stats']['POST'] = 'pvp/pvpstats'; /* * Online @@ -187,20 +188,40 @@ /* * Armory - * Information about player, items or guild. + * Information about player or guild. */ -$route[$lang . '/armory'] = 'armory'; -$route[$lang . '/armory/search'] = 'armory/search'; -$route[$lang . '/armory/result'] = 'armory/result'; -$route[$lang . '/armory/character/(:num)/(:num)'] = 'armory/character/$2/$3'; -$route[$lang . '/armory/guild/(:num)/(:num)'] = 'armory/guild/$2/$3'; +$route[$lang . '/armory'] = 'armory'; +$route[$lang . '/armory/search'] = 'armory/search'; +$route[$lang . '/armory/result'] = 'armory/result'; +$route[$lang . '/armory/character/(:num)/(:num)'] = 'armory/character/$2/$3'; +$route[$lang . '/armory/character/(:num)/(:num)/(:num)?'] = 'armory/character/$2/$3/$4'; +$route[$lang . '/armory/guild/(:num)/(:num)'] = 'armory/guild/$2/$3'; + +/* + * Armory + * Information about items and spells. (others are still in WIP) +*/ +$route[$lang . '/database'] = 'database'; +$route[$lang . '/database/result'] = 'database/result'; +$route[$lang . '/item/(:num)'] = 'database/item/$2'; +$route[$lang . '/item/(:num)/(:num)?'] = 'database/item/$2/$3'; +$route[$lang . '/spell/(:num)'] = 'database/spell/$2'; +$route[$lang . '/spell/(:num)/(:num)?'] = 'database/spell/$2/$3'; /* * Api * Initial API structure to develop CMS further */ -$route[$lang . '/api/v1'] = 'api_v1'; -$route[$lang . '/api/v1/item/newdisplayid/(:num)'] = 'api_v1/classic_displayid/$2'; +$route[$lang . '/api/v1'] = 'api_v1'; +$route[$lang . '/api/v1/item/newdisplayid/(:num)'] = 'api_v1/classic_displayid/$2'; +$route[$lang . '/api/v1/tooltip/item/(:num)'] = 'api_v1/tooltip_item/$2'; +$route[$lang . '/api/v1/tooltip/item/(:num)/(:num)?'] = 'api_v1/tooltip_item/$2/$3'; +$route[$lang . '/api/v1/tooltip/spell/(:num)'] = 'api_v1/tooltip_spell/$2'; +$route[$lang . '/api/v1/tooltip/spell/(:num)/(:num)?'] = 'api_v1/tooltip_spell/$2/$3'; +$route[$lang . '/api/v1/item/(:num)'] = 'api_v1/item/$2'; +$route[$lang . '/api/v1/item/(:num)/(:num)?'] = 'api_v1/item/$2/$3'; + +$route[$lang . '/api/v1/search/db']['POST'] = 'api_v1/search_db'; /* @@ -393,3 +414,15 @@ * To check the soap connection */ $route[$lang . '/admin/checksoap'] = 'admin/checkSoap'; + +/* + * Timeline +*/ +$route[$lang . '/admin/timeline'] = 'admin/manage_timeline'; +$route[$lang . '/admin/timeline/create'] = 'admin/create_timeline'; +$route[$lang . '/admin/timeline/edit/(:num)'] = 'admin/edit_timeline/$2'; +$route[$lang . '/admin/timeline/add'] = 'admin/add_timeline'; +$route[$lang . '/admin/timeline/update'] = 'admin/update_timeline'; +$route[$lang . '/admin/timeline/delete'] = 'admin/delete_timeline'; + +$route[$lang . '/timeline'] = 'timeline/index'; diff --git a/application/config/seo.php b/application/config/seo.php index 12f014d6..311b4873 100644 --- a/application/config/seo.php +++ b/application/config/seo.php @@ -28,7 +28,7 @@ * FALSE = Disabled * */ -$config['seo_meta_enable'] = false; +$config['seo_meta_enable'] = true; /** * @@ -37,7 +37,7 @@ * Used by Metatags, Open Graph and Twitter Card * */ -$config['seo_meta_desc'] = ''; +$config['seo_meta_desc'] = 'YesilCMS Demo - Tailored for vMaNGOS, Built for Community.'; /** * @@ -46,7 +46,7 @@ * Used only Metatags * */ -$config['seo_meta_keywords'] = ''; +$config['seo_meta_keywords'] = 'vmangos cms, cms, wow, vanilla, mangos, emulator'; /** * @@ -56,7 +56,7 @@ * FALSE = Disabled * */ -$config['seo_twitter_enable'] = false; +$config['seo_twitter_enable'] = true; /** * @@ -66,7 +66,7 @@ * FALSE = Disabled * */ -$config['seo_og_enable'] = false; +$config['seo_og_enable'] = true; /** * diff --git a/application/config/shared_dbc.php b/application/config/shared_dbc.php new file mode 100644 index 00000000..c1282a9a --- /dev/null +++ b/application/config/shared_dbc.php @@ -0,0 +1,2628 @@ + 10000, + 2 => 30000, + 3 => 60000, + 4 => 120000, + 5 => 300000, + 6 => 600000, + 7 => 5000, + 8 => 15000, + 9 => 30000, + 10 => 60000, + 11 => 10000, + 12 => 30000, + 13 => 60000, + 14 => 120000, + 15 => 300000, + 16 => 230000, + 17 => 5000, + 18 => 20000, + 19 => 30000, + 20 => 60000, + 21 => -1, + 22 => 45000, + 23 => 90000, + 24 => 160000, + 25 => 180000, + 26 => 240000, + 27 => 3000, + 28 => 5000, + 29 => 12000, + 30 => 1800000, + 31 => 8000, + 32 => 6000, + 35 => 4000, + 36 => 1000, + 37 => 1, + 38 => 11000, + 39 => 2000, + 40 => 1200000, + 41 => 360000, + 42 => 3600000, + 62 => 75000, + 63 => 25000, + 64 => 40000, + 65 => 1500, + 66 => 2500, + 85 => 18000, + 86 => 21000, + 105 => 9000, + 106 => 24000, + 125 => 35000, + 145 => 2700000, + 165 => 7000, + 185 => 6000, + 186 => 2000, + 187 => 0, + 205 => 27000, + 225 => 604800000, + 245 => 50000, + 265 => 55000, + 285 => 1000, + 305 => 14000, + 325 => 36000, + 326 => 44000, + 327 => 500, + 328 => 250, + 347 => 900000, + 367 => 7200000, + 387 => 16000, + 407 => 100, + 427 => -600000, + 447 => 2000, + 467 => 22000, + 468 => 26000, + 487 => 1700, + 507 => 1100, + 508 => 1100, + 527 => 14400000, + 547 => 5400000, + 548 => 10800000, + 549 => 3800, + 552 => 210000, + 553 => 6000, +]; + +$config['radius'] = [ + 7 => 2, + 8 => 5, + 9 => 20, + 10 => 30, + 11 => 45, + 12 => 100, + 13 => 10, + 14 => 8, + 15 => 3, + 16 => 1, + 17 => 13, + 18 => 15, + 19 => 18, + 20 => 25, + 21 => 35, + 22 => 200, + 23 => 40, + 24 => 65, + 25 => 70, + 26 => 4, + 27 => 50, + 28 => 50000, + 29 => 6, + 31 => 80 +]; + +//id,name,[item_id{1..10}], [spell_id{1..8}], [set_threshold{1..8}], reqSkill, reqRank - ugh still dont want to store it in db +$config['item_set'] = [ + 1 => ["The Gladiator", [11729, 11726, 11728, 11731, 11730, 0, 0, 0, 0, 0], [7514, 9761, 7597, 9140, 0, 0, 0, 0], [3, 2, 5, 4, 0, 0, 0, 0], 0, 0], + 41 => ["Dal'Rend's Arms", [12940, 12939, 0, 0, 0, 0, 0, 0, 0, 0], [14056, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 65 => ["Spider's Kiss", [13218, 13183, 0, 0, 0, 0, 0, 0, 0, 0], [17332, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 81 => ["The Postmaster", [13390, 13388, 13391, 13392, 13389, 0, 0, 0, 0, 0], [9764, 17498, 9417, 14590, 14712, 9106, 0, 0], [2, 5, 4, 3, 3, 5, 0, 0], 0, 0], + 121 => ["Cadaverous Garb", [14637, 14636, 14640, 14638, 14641, 0, 0, 0, 0, 0], [7516, 9140, 18686, 15465, 0, 0, 0, 0], [2, 3, 4, 5, 0, 0, 0, 0], 0, 0], + 122 => ["Necropile Raiment", [14631, 14629, 14632, 14633, 14626, 0, 0, 0, 0, 0], [7495, 7516, 18686, 14047, 0, 0, 0, 0], [3, 2, 4, 5, 0, 0, 0, 0], 0, 0], + 123 => ["Bloodmail Regalia", [14614, 14616, 14615, 14611, 14612, 0, 0, 0, 0, 0], [13665, 18686, 9140, 7516, 0, 0, 0, 0], [5, 4, 3, 2, 0, 0, 0, 0], 0, 0], + 124 => ["Deathbone Guardian", [14624, 14622, 14620, 14623, 14621, 0, 0, 0, 0, 0], [7516, 9764, 18686, 13665, 0, 0, 0, 0], [2, 3, 4, 5, 0, 0, 0, 0], 0, 0], + 141 => ["Volcanic Armor", [15053, 15054, 15055, 0, 0, 0, 0, 0, 0, 0], [9233, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 142 => ["Stormshroud Armor", [15056, 15057, 15058, 21278, 0, 0, 0, 0, 0, 0], [18979, 23863, 9142, 0, 0, 0, 0, 0], [2, 3, 4, 0, 0, 0, 0, 0], 0, 0], + 143 => ["Devilsaur Armor", [15062, 15063, 0, 0, 0, 0, 0, 0, 0, 0], [0, 15465, 0, 0, 0, 0, 0, 0], [0, 2, 0, 0, 0, 0, 0, 0], 0, 0], + 144 => ["Ironfeather Armor", [15066, 15067, 0, 0, 0, 0, 0, 0, 0, 0], [14799, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 161 => ["Defias Leather", [10399, 10403, 10402, 10401, 10400, 0, 0, 0, 0, 0], [9140, 14707, 9760, 7534, 0, 0, 0, 0], [5, 3, 2, 4, 0, 0, 0, 0], 0, 0], + 162 => ["Embrace of the Viper", [10412, 10411, 10413, 10410, 6473, 0, 0, 0, 0, 0], [9106, 7679, 7694, 20607, 0, 0, 0, 0], [5, 4, 2, 3, 0, 0, 0, 0], 0, 0], + 163 => ["Chain of the Scarlet Crusade", [10329, 10332, 10328, 10331, 10330, 10333, 0, 0, 0, 0], [9760, 7513, 14668, 20606, 15464, 0, 0, 0], [2, 3, 4, 5, 6, 0, 0, 0], 0, 0], + 181 => ["Magister's Regalia", [16685, 16683, 16686, 16684, 16687, 16689, 16688, 16682, 0, 0], [0, 0, 0, 0, 29091, 27867, 18679, 30777], [0, 0, 0, 0, 2, 6, 8, 4], 0, 0], + 182 => ["Vestments of the Devout", [16696, 16691, 16697, 16693, 16692, 16695, 16694, 16690, 0, 0], [0, 14803, 27778, 18679, 30779, 0, 0, 0], [0, 2, 6, 8, 4, 0, 0, 0], 0, 0], + 183 => ["Dreadmist Raiment", [16702, 16703, 16699, 16701, 16700, 16704, 16698, 16705, 0, 0], [0, 0, 29090, 27780, 18679, 30778, 0, 0], [0, 0, 2, 6, 8, 4, 0, 0], 0, 0], + 184 => ["Shadowcraft Armor", [16713, 16711, 16710, 16721, 16708, 16709, 16712, 16707, 0, 0], [0, 29096, 27787, 18679, 30771, 0, 0, 0], [0, 2, 6, 8, 4, 0, 0, 0], 0, 0], + 185 => ["Wildheart Raiment", [16716, 16715, 16714, 16720, 16706, 16718, 16719, 16717, 0, 0], [29097, 27781, 0, 18679, 9334, 9344, 0, 0], [2, 6, 0, 8, 4, 4, 0, 0], 0, 0], + 186 => ["Beaststalker Armor", [16680, 16675, 16681, 16677, 16674, 16678, 16679, 16676, 0, 0], [0, 0, 0, 0, 29094, 27785, 18679, 30772], [0, 0, 0, 0, 2, 6, 8, 4], 0, 0], + 187 => ["The Elements", [16673, 16670, 16671, 16667, 16672, 16668, 16669, 16666, 0, 0], [0, 0, 0, 29095, 27774, 18679, 30780, 0], [0, 0, 0, 2, 6, 8, 4, 0], 0, 0], + 188 => ["Lightforge Armor", [16723, 16725, 16722, 16726, 16724, 16728, 16729, 16727, 0, 0], [0, 29093, 0, 27498, 18679, 30775, 0, 0], [0, 2, 0, 6, 8, 4, 0, 0], 0, 0], + 189 => ["Battlegear of Valor", [16736, 16734, 16735, 16730, 16737, 16731, 16732, 16733, 0, 0], [29092, 27419, 0, 18679, 30770, 0, 0, 0], [2, 6, 0, 8, 4, 0, 0, 0], 0, 0], + 201 => ["Arcanist Regalia", [16802, 16799, 16795, 16800, 16801, 16796, 16797, 16798, 0, 0], [9346, 26175, 23545, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 202 => ["Vestments of Prophecy", [16811, 16813, 16817, 16812, 16814, 16816, 16815, 16819, 0, 0], [21973, 21092, 23550, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 203 => ["Felheart Raiment", [16806, 16804, 16805, 16810, 16809, 16807, 16808, 16803, 0, 0], [23554, 21741, 23553, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 204 => ["Nightslayer Armor", [16827, 16824, 16825, 16820, 16821, 16826, 16822, 16823, 0, 0], [21874, 21975, 23582, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 205 => ["Cenarion Raiment", [16828, 16829, 16830, 16833, 16831, 16834, 16835, 16836, 0, 0], [18382, 23556, 23557, 0, 0, 0, 0, 0], [5, 8, 3, 0, 0, 0, 0, 0], 0, 0], + 206 => ["Giantstalker Armor", [16851, 16849, 16850, 16845, 16848, 16852, 16846, 16847, 0, 0], [23560, 23566, 21926, 0, 0, 0, 0, 0], [3, 8, 5, 0, 0, 0, 0, 0], 0, 0], + 207 => ["The Earthfury", [16838, 16837, 16840, 16841, 16844, 16839, 16842, 16843, 0, 0], [23572, 21895, 23573, 0, 0, 0, 0, 0], [5, 3, 8, 0, 0, 0, 0, 0], 0, 0], + 208 => ["Lawbringer Armor", [16858, 16859, 16857, 16853, 16860, 16854, 16855, 16856, 0, 0], [18384, 23564, 7597, 21747, 0, 0, 0, 0], [5, 3, 5, 8, 0, 0, 0, 0], 0, 0], + 209 => ["Battlegear of Might", [16864, 16861, 16865, 16863, 16866, 16867, 16868, 16862, 0, 0], [23562, 21838, 23561, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 210 => ["Netherwind Regalia", [16818, 16918, 16912, 16914, 16917, 16913, 16915, 16916, 0, 0], [21879, 23549, 22007, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 211 => ["Vestments of Transcendence", [16925, 16926, 16919, 16921, 16920, 16922, 16924, 16923, 0, 0], [21853, 21894, 22010, 0, 0, 0, 0, 0], [5, 3, 8, 0, 0, 0, 0, 0], 0, 0], + 212 => ["Nemesis Raiment", [16933, 16927, 16934, 16928, 16930, 16931, 16929, 16932, 0, 0], [21922, 23555, 0, 14047, 0, 0, 0, 0], [5, 8, 0, 3, 0, 0, 0, 0], 0, 0], + 213 => ["Bloodfang Armor", [16910, 16906, 16911, 16905, 16907, 16908, 16909, 16832, 0, 0], [23558, 21881, 23581, 0, 0, 0, 0, 0], [5, 3, 8, 0, 0, 0, 0, 0], 0, 0], + 214 => ["Stormrage Raiment", [16903, 16898, 16904, 16897, 16900, 16899, 16901, 16902, 0, 0], [21894, 21872, 21871, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 215 => ["Dragonstalker Armor", [16936, 16935, 16942, 16940, 16941, 16939, 16938, 16937, 0, 0], [21928, 23578, 23559, 0, 0, 0, 0, 0], [5, 8, 3, 0, 0, 0, 0, 0], 0, 0], + 216 => ["The Ten Storms", [16944, 16943, 16950, 16945, 16948, 16949, 16947, 16946, 0, 0], [21899, 23570, 23551, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 217 => ["Judgement Armor", [16952, 16951, 16958, 16955, 16956, 16954, 16957, 16953, 0, 0], [24196, 23565, 23591, 0, 0, 0, 0, 0], [5, 3, 8, 0, 0, 0, 0, 0], 0, 0], + 218 => ["Battlegear of Wrath", [16959, 16966, 16964, 16963, 16962, 16961, 16965, 16960, 0, 0], [23563, 21890, 23548, 0, 0, 0, 0, 0], [3, 5, 8, 0, 0, 0, 0, 0], 0, 0], + 221 => ["Garb of Thero-shan", [7950, 7948, 7952, 7951, 7953, 7949, 0, 0, 0, 0], [7597, 0, 0, 0, 0, 0, 0, 0], [6, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 241 => ["Shard of the Gods", [17082, 17064, 0, 0, 0, 0, 0, 0, 0, 0], [18681, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 261 => ["Spirit of Eskhandar", [18203, 18202, 18204, 18205, 0, 0, 0, 0, 0, 0], [22648, 0, 0, 0, 0, 0, 0, 0], [4, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 281 => ["Champion's Battlegear", [16509, 16510, 16513, 16515, 16514, 16516, 0, 0, 0, 0], [13665, 14462, 22738, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 282 => ["Lieutenant Commander's Battlegear", [16405, 16406, 16430, 16431, 16429, 16432, 0, 0, 0, 0], [13665, 14462, 22738, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 301 => ["Champion's Earthshaker", [16519, 16518, 16522, 16523, 16521, 16524, 0, 0, 0, 0], [14049, 14462, 22804, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 321 => ["Imperial Plate", [12424, 12426, 12425, 12422, 12427, 12429, 12428, 0, 0, 0], [15666, 9335, 14465, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 341 => ["Champion's Regalia", [16485, 16487, 16491, 16490, 16489, 16492, 0, 0, 0, 0], [14047, 23025, 14462, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 342 => ["Champion's Raiment", [17616, 17617, 17612, 17611, 17613, 17610, 0, 0, 0, 0], [14047, 23044, 14462, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 343 => ["Lieutenant Commander's Regalia", [16369, 16391, 16413, 16414, 16416, 16415, 0, 0, 0, 0], [14047, 23025, 14462, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 344 => ["Lieutenant Commander's Raiment", [17594, 17596, 17600, 17599, 17598, 17601, 0, 0, 0, 0], [23044, 14047, 14462, 0, 0, 0, 0, 0], [4, 2, 6, 0, 0, 0, 0, 0], 0, 0], + 345 => ["Champion's Threads", [17576, 17577, 17572, 17571, 17570, 17573, 0, 0, 0, 0], [14047, 14462, 23047, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 346 => ["Lieutenant Commander's Threads", [17562, 17564, 17568, 17567, 17569, 17566, 0, 0, 0, 0], [14047, 14462, 23047, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 347 => ["Champion's Vestments", [16498, 16499, 16505, 16508, 16506, 16507, 0, 0, 0, 0], [13665, 14462, 23048, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 348 => ["Lieutenant Commander's Vestments", [16392, 16396, 16417, 16419, 16420, 16418, 0, 0, 0, 0], [13665, 23048, 14462, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 361 => ["Champion's Pursuit", [16531, 16530, 16525, 16527, 16526, 16528, 0, 0, 0, 0], [13665, 23158, 14462, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 362 => ["Lieutenant Commander's Pursuit", [16425, 16426, 16401, 16403, 16428, 16427, 0, 0, 0, 0], [13665, 23158, 14462, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 381 => ["Lieutenant Commander's Sanctuary", [16423, 16424, 16422, 16421, 16393, 16397, 0, 0, 0, 0], [14049, 23218, 14462, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 382 => ["Champion's Sanctuary", [16494, 16496, 16504, 16502, 16503, 16501, 0, 0, 0, 0], [23218, 14049, 14462, 0, 0, 0, 0, 0], [4, 2, 6, 0, 0, 0, 0, 0], 0, 0], + 383 => ["Warlord's Battlegear", [16541, 16542, 16544, 16545, 16548, 16543, 0, 0, 0, 0], [14049, 22738, 14467, 0, 0, 0, 0, 0], [6, 3, 2, 0, 0, 0, 0, 0], 0, 0], + 384 => ["Field Marshal's Battlegear", [16477, 16478, 16480, 16483, 16484, 16479, 0, 0, 0, 0], [14467, 22738, 14049, 0, 0, 0, 0, 0], [2, 3, 6, 0, 0, 0, 0, 0], 0, 0], + 386 => ["Warlord's Earthshaker", [16577, 16578, 16580, 16573, 16574, 16579, 0, 0, 0, 0], [22804, 14467, 14049, 0, 0, 0, 0, 0], [3, 2, 6, 0, 0, 0, 0, 0], 0, 0], + 387 => ["Warlord's Regalia", [16536, 16533, 16535, 16539, 16540, 16534, 0, 0, 0, 0], [14047, 14467, 23025, 0, 0, 0, 0, 0], [6, 2, 3, 0, 0, 0, 0, 0], 0, 0], + 388 => ["Field Marshal's Regalia", [16441, 16444, 16443, 16437, 16440, 16442, 0, 0, 0, 0], [14047, 14467, 23025, 0, 0, 0, 0, 0], [6, 2, 3, 0, 0, 0, 0, 0], 0, 0], + 389 => ["Field Marshal's Raiment", [17604, 17603, 17605, 17608, 17607, 17602, 0, 0, 0, 0], [14047, 14467, 23044, 0, 0, 0, 0, 0], [6, 2, 3, 0, 0, 0, 0, 0], 0, 0], + 390 => ["Warlord's Raiment", [17623, 17625, 17622, 17624, 17618, 17620, 0, 0, 0, 0], [23044, 14047, 14467, 0, 0, 0, 0, 0], [3, 6, 2, 0, 0, 0, 0, 0], 0, 0], + 391 => ["Warlord's Threads", [17586, 17588, 17593, 17591, 17590, 17592, 0, 0, 0, 0], [14467, 23047, 14047, 0, 0, 0, 0, 0], [2, 3, 6, 0, 0, 0, 0, 0], 0, 0], + 392 => ["Field Marshal's Threads", [17581, 17580, 17583, 17584, 17579, 17578, 0, 0, 0, 0], [14047, 23047, 14467, 0, 0, 0, 0, 0], [6, 3, 2, 0, 0, 0, 0, 0], 0, 0], + 393 => ["Warlord's Vestments", [16563, 16561, 16562, 16564, 16560, 16558, 0, 0, 0, 0], [14467, 23048, 14049, 0, 0, 0, 0, 0], [2, 3, 6, 0, 0, 0, 0, 0], 0, 0], + 394 => ["Field Marshal's Vestments", [16453, 16457, 16455, 16446, 16454, 16456, 0, 0, 0, 0], [14049, 23048, 14467, 0, 0, 0, 0, 0], [6, 3, 2, 0, 0, 0, 0, 0], 0, 0], + 395 => ["Field Marshal's Pursuit", [16466, 16465, 16468, 16462, 16463, 16467, 0, 0, 0, 0], [23158, 14384, 14467, 0, 0, 0, 0, 0], [3, 6, 2, 0, 0, 0, 0, 0], 0, 0], + 396 => ["Warlord's Pursuit", [16569, 16571, 16567, 16565, 16566, 16568, 0, 0, 0, 0], [14467, 14384, 23158, 0, 0, 0, 0, 0], [2, 6, 3, 0, 0, 0, 0, 0], 0, 0], + 397 => ["Field Marshal's Sanctuary", [16452, 16451, 16449, 16459, 16448, 16450, 0, 0, 0, 0], [14467, 14049, 23218, 0, 0, 0, 0, 0], [2, 6, 3, 0, 0, 0, 0, 0], 0, 0], + 398 => ["Warlord's Sanctuary", [16554, 16555, 16552, 16551, 16549, 16550, 0, 0, 0, 0], [23218, 14049, 14467, 0, 0, 0, 0, 0], [3, 6, 2, 0, 0, 0, 0, 0], 0, 0], + 401 => ["Lieutenant Commander's Aegis", [16410, 16409, 16433, 16435, 16434, 16436, 0, 0, 0, 0], [28118, 7496, 14462, 23302, 0, 0, 0, 0], [2, 2, 6, 4, 0, 0, 0, 0], 0, 0], + 402 => ["Field Marshal's Aegis", [16473, 16474, 16476, 16472, 16471, 16475, 0, 0, 0, 0], [23302, 14467, 14047, 0, 0, 0, 0, 0], [3, 2, 6, 0, 0, 0, 0, 0], 0, 0], + 421 => ["Bloodvine Garb", [19682, 19683, 19684, 0, 0, 0, 0, 0, 0, 0], [18382, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 197, 300], + 441 => ["Primal Batskin", [19685, 19687, 19686, 0, 0, 0, 0, 0, 0, 0], [24090, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 165, 300], + 442 => ["Blood Tiger Harness", [19688, 19689, 0, 0, 0, 0, 0, 0, 0, 0], [7597, 18384, 0, 0, 0, 0, 0, 0], [2, 2, 0, 0, 0, 0, 0, 0], 165, 300], + 443 => ["Bloodsoul Embrace", [19690, 19691, 19692, 0, 0, 0, 0, 0, 0, 0], [21636, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 444 => ["The Darksoul", [19693, 19694, 19695, 0, 0, 0, 0, 0, 0, 0], [21416, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 164, 300], + 461 => ["The Twin Blades of Hakkari", [19865, 19866, 0, 0, 0, 0, 0, 0, 0, 0], [15763, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 462 => ["Zanzil's Concentration", [19905, 19893, 0, 0, 0, 0, 0, 0, 0, 0], [23727, 9396, 0, 0, 0, 0, 0, 0], [2, 2, 0, 0, 0, 0, 0, 0], 0, 0], + 463 => ["Primal Blessing", [19896, 19910, 0, 0, 0, 0, 0, 0, 0, 0], [24256, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 464 => ["Overlord's Resolution", [19873, 19912, 0, 0, 0, 0, 0, 0, 0, 0], [13669, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 465 => ["Prayer of the Primal", [19863, 19920, 0, 0, 0, 0, 0, 0, 0, 0], [9318, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 466 => ["Major Mojo Infusion", [19898, 19925, 0, 0, 0, 0, 0, 0, 0, 0], [9336, 0, 0, 0, 0, 0, 0, 0], [2, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 467 => ["The Highlander's Resolution", [20041, 20048, 20057, 0, 0, 0, 0, 0, 0, 0], [7503, 7597, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 468 => ["The Highlander's Resolve", [20042, 20049, 20058, 0, 0, 0, 0, 0, 0, 0], [7597, 7503, 0, 0, 0, 0, 0, 0], [3, 2, 0, 0, 0, 0, 0, 0], 0, 0], + 469 => ["The Highlander's Determination", [20043, 20050, 20055, 0, 0, 0, 0, 0, 0, 0], [7503, 7597, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 470 => ["The Highlander's Fortitude", [20044, 20051, 20056, 0, 0, 0, 0, 0, 0, 0], [18384, 7503, 0, 0, 0, 0, 0, 0], [3, 2, 0, 0, 0, 0, 0, 0], 0, 0], + 471 => ["The Highlander's Purpose", [20052, 20045, 20059, 0, 0, 0, 0, 0, 0, 0], [7503, 7597, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 472 => ["The Highlander's Will", [20053, 20046, 20060, 0, 0, 0, 0, 0, 0, 0], [18384, 7503, 0, 0, 0, 0, 0, 0], [3, 2, 0, 0, 0, 0, 0, 0], 0, 0], + 473 => ["The Highlander's Intent", [20054, 20047, 20061, 0, 0, 0, 0, 0, 0, 0], [7503, 18384, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 474 => ["Vindicator's Battlegear", [19951, 19577, 19824, 19823, 19822, 0, 0, 0, 0, 0], [13675, 24456, 24431, 0, 0, 0, 0, 0], [2, 3, 5, 0, 0, 0, 0, 0], 0, 0], + 475 => ["Freethinker's Armor", [19952, 19588, 19827, 19826, 19825, 0, 0, 0, 0, 0], [21618, 24457, 24460, 0, 0, 0, 0, 0], [2, 3, 5, 0, 0, 0, 0, 0], 0, 0], + 476 => ["Augur's Regalia", [19609, 19956, 19830, 19829, 19828, 0, 0, 0, 0, 0], [21618, 24461, 24462, 0, 0, 0, 0, 0], [2, 3, 5, 0, 0, 0, 0, 0], 0, 0], + 477 => ["Predator's Armor", [19621, 19953, 19833, 19832, 19831, 0, 0, 0, 0, 0], [9331, 24465, 24467, 0, 0, 0, 0, 0], [2, 3, 5, 0, 0, 0, 0, 0], 0, 0], + 478 => ["Madcap's Outfit", [19617, 19954, 19836, 19835, 19834, 0, 0, 0, 0, 0], [9331, 24469, 24471, 0, 0, 0, 0, 0], [2, 3, 5, 0, 0, 0, 0, 0], 0, 0], + 479 => ["Haruspex's Garb", [19613, 19955, 19840, 19839, 19838, 0, 0, 0, 0, 0], [21618, 24480, 24479, 0, 0, 0, 0, 0], [2, 5, 3, 0, 0, 0, 0, 0], 0, 0], + 480 => ["Confessor's Raiment", [19594, 19958, 19843, 19842, 19841, 0, 0, 0, 0, 0], [9408, 24483, 24482, 0, 0, 0, 0, 0], [2, 5, 3, 0, 0, 0, 0, 0], 0, 0], + 481 => ["Demoniac's Threads", [19605, 19957, 19848, 19849, 20033, 0, 0, 0, 0, 0], [9417, 24486, 24487, 0, 0, 0, 0, 0], [2, 3, 5, 0, 0, 0, 0, 0], 0, 0], + 482 => ["Illusionist's Attire", [19601, 19959, 19846, 19845, 20034, 0, 0, 0, 0, 0], [9417, 24489, 24491, 0, 0, 0, 0, 0], [2, 3, 5, 0, 0, 0, 0, 0], 0, 0], + 483 => ["The Defiler's Determination", [20158, 20154, 20150, 0, 0, 0, 0, 0, 0, 0], [7503, 7597, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 484 => ["The Defiler's Fortitude", [20195, 20199, 20203, 0, 0, 0, 0, 0, 0, 0], [7503, 7597, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 485 => ["The Defiler's Intent", [20176, 20159, 20163, 0, 0, 0, 0, 0, 0, 0], [7503, 18384, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 486 => ["The Defiler's Purpose", [20186, 20190, 20194, 0, 0, 0, 0, 0, 0, 0], [7503, 7597, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 487 => ["The Defiler's Resolution", [20204, 20208, 20212, 0, 0, 0, 0, 0, 0, 0], [7503, 7597, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 488 => ["The Defiler's Will", [20167, 20171, 20175, 0, 0, 0, 0, 0, 0, 0], [7503, 18384, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 489 => ["Black Dragon Mail", [16984, 15050, 15052, 15051, 0, 0, 0, 0, 0, 0], [15464, 7598, 14590, 0, 0, 0, 0, 0], [2, 3, 4, 0, 0, 0, 0, 0], 0, 0], + 490 => ["Green Dragon Mail", [15045, 15046, 20296, 0, 0, 0, 0, 0, 0, 0], [21625, 21894, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 491 => ["Blue Dragon Mail", [15048, 20295, 15049, 0, 0, 0, 0, 0, 0, 0], [18675, 14127, 0, 0, 0, 0, 0, 0], [2, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 492 => ["Twilight Trappings", [20406, 20408, 20407, 0, 0, 0, 0, 0, 0, 0], [24746, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 493 => ["Genesis Raiment", [21355, 21353, 21354, 21356, 21357, 0, 0, 0, 0, 0], [26106, 18196, 15693, 0, 0, 0, 0, 0], [5, 3, 3, 0, 0, 0, 0, 0], 0, 0], + 494 => ["Symbols of Unending Life", [21408, 21409, 21407, 0, 0, 0, 0, 0, 0, 0], [26107, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 495 => ["Battlegear of Unyielding Strength", [21394, 21392, 21393, 0, 0, 0, 0, 0, 0, 0], [26111, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 496 => ["Conqueror's Battlegear", [21331, 21329, 21333, 21332, 0, 21330, 0, 0, 0, 0], [26109, 26110, 0, 0, 0, 0, 0, 0], [3, 5, 0, 0, 0, 0, 0, 0], 0, 0], + 497 => ["Deathdealer's Embrace", [0, 21359, 21360, 21361, 21362, 21364, 0, 0, 0, 0], [26112, 26113, 0, 0, 0, 0, 0, 0], [3, 5, 0, 0, 0, 0, 0, 0], 0, 0], + 498 => ["Emblems of Veiled Shadows", [21405, 21406, 21404, 0, 0, 0, 0, 0, 0, 0], [26114, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 499 => ["Doomcaller's Attire", [21337, 21338, 21335, 21334, 21336, 0, 0, 0, 0, 0], [26117, 26116, 0, 0, 0, 0, 0, 0], [5, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 500 => ["Implements of Unspoken Names", [21416, 21417, 21418, 0, 0, 0, 0, 0, 0, 0], [26118, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 501 => ["Stormcaller's Garb", [21372, 21373, 21374, 21375, 21376, 0, 0, 0, 0, 0], [26122, 26119, 0, 0, 0, 0, 0, 0], [5, 3, 0, 0, 0, 0, 0, 0], 0, 0], + 502 => ["Gift of the Gathering Storm", [21400, 21398, 21399, 0, 0, 0, 0, 0, 0, 0], [26123, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 503 => ["Enigma Vestments", [21344, 21347, 21346, 21343, 21345, 0, 0, 0, 0, 0], [26127, 26128, 0, 0, 0, 0, 0, 0], [3, 5, 0, 0, 0, 0, 0, 0], 0, 0], + 504 => ["Trappings of Vaulted Secrets", [21414, 21413, 21415, 0, 0, 0, 0, 0, 0, 0], [26131, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 505 => ["Avenger's Battlegear", [21389, 21387, 21388, 21390, 21391, 0, 0, 0, 0, 0], [26130, 23929, 0, 0, 0, 0, 0, 0], [3, 5, 0, 0, 0, 0, 0, 0], 0, 0], + 506 => ["Battlegear of Eternal Justice", [21397, 21395, 21396, 0, 0, 0, 0, 0, 0, 0], [26135, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 507 => ["Garments of the Oracle", [21349, 21350, 21348, 21352, 21351, 0, 0, 0, 0, 0], [26169, 26171, 0, 0, 0, 0, 0, 0], [3, 5, 0, 0, 0, 0, 0, 0], 0, 0], + 508 => ["Finery of Infinite Wisdom", [21410, 21411, 21412, 0, 0, 0, 0, 0, 0, 0], [26172, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 509 => ["Striker's Garb", [21366, 21365, 21370, 21368, 21367, 0, 0, 0, 0, 0], [26173, 26174, 0, 0, 0, 0, 0, 0], [3, 5, 0, 0, 0, 0, 0, 0], 0, 0], + 510 => ["Trappings of the Unseen Path", [21403, 21401, 21402, 0, 0, 0, 0, 0, 0, 0], [26176, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 511 => ["Battlegear of Heroism", [21994, 21995, 21996, 21997, 21998, 21999, 22000, 22001, 0, 0], [0, 14049, 18679, 27419, 14803, 0, 0, 0], [0, 6, 2, 4, 8, 0, 0, 0], 0, 0], + 512 => ["Darkmantle Armor", [22002, 22003, 22004, 22005, 22006, 22007, 22008, 22009, 0, 0], [0, 14049, 18679, 27787, 14803, 0, 0, 0], [0, 6, 2, 4, 8, 0, 0, 0], 0, 0], + 513 => ["Feralheart Raiment", [22106, 22107, 22108, 22109, 22110, 22111, 22112, 22113, 0, 0], [9344, 9334, 18679, 0, 27781, 14803, 0, 0], [6, 6, 2, 0, 4, 8, 0, 0], 0, 0], + 514 => ["Vestments of the Virtuous", [22078, 22079, 22080, 22081, 22082, 22083, 22084, 22085, 0, 0], [0, 14047, 18679, 27778, 14803, 0, 0, 0], [0, 6, 2, 4, 8, 0, 0, 0], 0, 0], + 515 => ["Beastmaster Armor", [22010, 22011, 22061, 22013, 22015, 22016, 22017, 22060, 0, 0], [0, 0, 0, 0, 14049, 18679, 27785, 14803], [0, 0, 0, 0, 6, 2, 4, 8], 0, 0], + 516 => ["Soulforge Armor", [22086, 22087, 22088, 22089, 22090, 22091, 22092, 22093, 0, 0], [0, 14049, 18679, 27498, 14803, 0, 0, 0], [0, 6, 2, 4, 8, 0, 0, 0], 0, 0], + 517 => ["Sorcerer's Regalia", [22062, 22063, 22064, 22065, 22066, 22067, 22068, 22069, 0, 0], [0, 0, 0, 14803, 27867, 18679, 14047, 0], [0, 0, 0, 8, 4, 2, 6, 0], 0, 0], + 518 => ["Deathmist Raiment", [22070, 22071, 22072, 22073, 22074, 22075, 22076, 22077, 0, 0], [0, 0, 14047, 18679, 27780, 14803, 0, 0], [0, 0, 6, 2, 4, 8, 0, 0], 0, 0], + 519 => ["The Five Thunders", [22095, 22096, 22097, 22098, 22099, 22100, 22101, 22102, 0, 0], [0, 0, 0, 14047, 18679, 27774, 14803, 0], [0, 0, 0, 6, 2, 4, 8, 0], 0, 0], + 520 => ["Ironweave Battlesuit", [22306, 22311, 22313, 22302, 22304, 22305, 22303, 22301, 0, 0], [27733, 14803, 0, 0, 0, 0, 0, 0], [4, 8, 0, 0, 0, 0, 0, 0], 0, 0], + 521 => ["Dreamwalker Raiment", [22492, 22494, 22493, 22490, 22489, 22491, 22488, 22495, 23064, 0], [28743, 28744, 28716, 28719, 0, 0, 0, 0], [4, 6, 2, 8, 0, 0, 0, 0], 0, 0], + 522 => ["Champion's Guard", [22864, 22856, 22879, 22880, 23257, 23258, 0, 0, 0, 0], [14049, 23048, 14467, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 523 => ["Dreadnaught's Battlegear", [22423, 22416, 22421, 22422, 22418, 22417, 22419, 22420, 0, 23059], [28842, 28844, 28843, 28845, 0, 0, 0, 0], [6, 2, 4, 8, 0, 0, 0, 0], 0, 0], + 524 => ["Bonescythe Armor", [22483, 22476, 22481, 22478, 22477, 22479, 22480, 22482, 23060, 0], [28812, 28814, 28816, 28811, 0, 0, 0, 0], [4, 8, 2, 6, 0, 0, 0, 0], 0, 0], + 525 => ["Vestments of Faith", [22518, 22519, 22514, 22517, 22513, 22512, 22516, 22515, 23061, 0], [28809, 28802, 28807, 28808, 0, 0, 0, 0], [4, 8, 2, 6, 0, 0, 0, 0], 0, 0], + 526 => ["Frostfire Regalia", [22502, 22503, 22498, 22501, 22497, 22496, 22500, 22499, 23062, 0], [28771, 28763, 28761, 28764, 0, 0, 0, 0], [6, 2, 8, 4, 0, 0, 0, 0], 0, 0], + 527 => ["The Earthshatterer", [22468, 22470, 22469, 22466, 22465, 22467, 22464, 22471, 23065, 0], [28823, 29171, 28818, 28821, 0, 0, 0, 0], [6, 4, 2, 8, 0, 0, 0, 0], 0, 0], + 528 => ["Redemption Armor", [22430, 22431, 22426, 22428, 22427, 22429, 22425, 22424, 23066, 0], [28787, 28789, 28775, 28774, 0, 0, 0, 0], [8, 6, 2, 4, 0, 0, 0, 0], 0, 0], + 529 => ["Plagueheart Raiment", [22510, 22511, 22506, 22509, 22505, 22504, 22508, 22507, 23063, 0], [28829, 28830, 28831, 28746, 0, 0, 0, 0], [4, 8, 2, 6, 0, 0, 0, 0], 0, 0], + 530 => ["Cryptstalker Armor", [22440, 22442, 22441, 22438, 22437, 22439, 22436, 22443, 23067, 0], [28752, 28751, 28756, 28755, 0, 0, 0, 0], [6, 8, 4, 2, 0, 0, 0, 0], 0, 0], + 533 => ["Battlegear of Undead Slaying", [23090, 23087, 23078, 0, 0, 0, 0, 0, 0, 0], [29068, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 534 => ["Undead Slayer's Armor", [23081, 23089, 23093, 0, 0, 0, 0, 0, 0, 0], [29068, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 535 => ["Garb of the Undead Slayer", [23088, 23082, 23092, 0, 0, 0, 0, 0, 0, 0], [29068, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 536 => ["Regalia of Undead Cleansing", [23091, 23084, 23085, 0, 0, 0, 0, 0, 0, 0], [29068, 0, 0, 0, 0, 0, 0, 0], [3, 0, 0, 0, 0, 0, 0, 0], 0, 0], + 537 => ["Champion's Battlearmor", [22868, 22858, 22872, 22873, 23244, 23243, 0, 0, 0, 0], [14049, 22738, 14467, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 538 => ["Champion's Stormcaller", [22857, 22867, 22876, 22887, 23259, 23260, 0, 0, 0, 0], [14049, 22804, 14467, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 539 => ["Champion's Refuge", [22863, 22852, 22877, 22878, 23253, 23254, 0, 0, 0, 0], [14049, 23218, 14467, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 540 => ["Champion's Investiture", [22869, 22859, 22882, 22885, 23261, 23262, 0, 0, 0, 0], [14047, 23044, 14467, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 541 => ["Champion's Dreadgear", [22865, 22855, 23255, 23256, 22881, 22884, 0, 0, 0, 0], [14467, 14047, 23047, 0, 0, 0, 0, 0], [6, 2, 4, 0, 0, 0, 0, 0], 0, 0], + 542 => ["Champion's Arcanum", [22870, 22860, 23263, 23264, 22883, 22886, 0, 0, 0, 0], [14047, 14467, 23025, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 543 => ["Champion's Pursuance", [22843, 22862, 23251, 23252, 22874, 22875, 0, 0, 0, 0], [23158, 14467, 14384, 0, 0, 0, 0, 0], [4, 6, 2, 0, 0, 0, 0, 0], 0, 0], + 544 => ["Lieutenant Commander's Redoubt", [23272, 23273, 23274, 23275, 23276, 23277, 0, 0, 0, 0], [14047, 14467, 23302, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 545 => ["Lieutenant Commander's Battlearmor", [23300, 23301, 23286, 23287, 23314, 23315, 0, 0, 0, 0], [22738, 14467, 14049, 0, 0, 0, 0, 0], [4, 6, 2, 0, 0, 0, 0, 0], 0, 0], + 546 => ["Lieutenant Commander's Arcanum", [23304, 23305, 23290, 23291, 23318, 23319, 0, 0, 0, 0], [14047, 14467, 23025, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 547 => ["Lieutenant Commander's Dreadgear", [23296, 23297, 23282, 23283, 23310, 23311, 0, 0, 0, 0], [14047, 14467, 23047, 0, 0, 0, 0, 0], [2, 6, 4, 0, 0, 0, 0, 0], 0, 0], + 548 => ["Lieutenant Commander's Guard", [23298, 23299, 23284, 23285, 23312, 23313, 0, 0, 0, 0], [23048, 14467, 14049, 0, 0, 0, 0, 0], [4, 6, 2, 0, 0, 0, 0, 0], 0, 0], + 549 => ["Lieutenant Commander's Investiture", [23302, 23303, 23288, 23289, 23316, 23317, 0, 0, 0, 0], [14047, 23044, 14467, 0, 0, 0, 0, 0], [2, 4, 6, 0, 0, 0, 0, 0], 0, 0], + 550 => ["Lieutenant Commander's Pursuance", [23292, 23293, 23278, 23279, 23306, 23307, 0, 0, 0, 0], [14467, 14384, 23158, 0, 0, 0, 0, 0], [6, 2, 4, 0, 0, 0, 0, 0], 0, 0], + 551 => ["Lieutenant Commander's Refuge", [23294, 23295, 23280, 23281, 23308, 23309, 0, 0, 0, 0], [14467, 23218, 14049, 0, 0, 0, 0, 0], [6, 4, 2, 0, 0, 0, 0, 0], 0, 0], +]; + +// AreaID, MapID, Name, X_Min, Y_Min, X_Max, Y_Max +$config['map_area'] = [ + 1 => [0, "Dun Morogh", -7160.42, -3122.92, -3877.08, 1802.08], + 3 => [0, "Badlands", -7547.92, -4566.67, -5889.58, -2079.17], + 4 => [0, "Blasted Lands", -12800, -4591.67, -10566.7, -1241.67], + 8 => [0, "Swamp of Sorrows", -11150, -4516.67, -9620.83, -2222.92], + 10 => [0, "Duskwood", -11516.7, -1866.67, -9716.67, 833.333], + 11 => [0, "Wetlands", -4904.17, -4525, -2147.92, -389.583], + 12 => [0, "Elwynn Forest", -10254.2, -1935.42, -7939.58, 1535.42], + 14 => [1, "Durotar", -1716.67, -7250, 1808.33, -1962.5], + 15 => [1, "Dustwallow Marsh", -5533.33, -6225, -2033.33, -975], + 16 => [1, "Azshara", 1960.42, -8347.92, 5341.67, -3277.08], + 17 => [1, "The Barrens", -5143.75, -7510.42, 1612.5, 2622.92], + 28 => [0, "Western Plaguelands", 500, -3883.33, 3366.67, 416.667], + 33 => [0, "Stranglethorn Vale", -15422.9, -4160.42, -11168.8, 2220.83], + 36 => [0, "Alterac Mountains", -366.667, -2016.67, 1500, 783.333], + 38 => [0, "Loch Modan", -6327.08, -4752.08, -4487.5, -1993.75], + 40 => [0, "Westfall", -11733.3, -483.333, -9400, 3016.67], + 41 => [0, "Deadwind Pass", -11533.3, -3333.33, -9866.67, -833.333], + 44 => [0, "Redridge Mountains", -10022.9, -3741.67, -8575, -1570.83], + 45 => [0, "Arathi Highlands", -2533.33, -4466.67, -133.333, -866.667], + 46 => [0, "Burning Steppes", -8983.33, -3195.83, -7031.25, -266.667], + 47 => [0, "The Hinterlands", -1100, -5425, 1466.67, -1575], + 51 => [0, "Searing Gorge", -7587.5, -2554.17, -6100, -322.917], + 85 => [0, "Tirisfal Glades", 825, -1485.42, 3837.5, 3033.33], + 130 => [0, "Silverpine Forest", -1133.33, -750, 1666.67, 3450], + 139 => [0, "Eastern Plaguelands", 1218.75, -6056.25, 3800, -2185.42], + 141 => [1, "Teldrassil", 8437.5, -1277.08, 11831.2, 3814.58], + 148 => [1, "Darkshore", 3966.67, -3608.33, 8333.33, 2941.67], + 215 => [1, "Mulgore", -3697.92, -3089.58, -272.917, 2047.92], + 267 => [0, "Hillsbrad Foothills", -1733.33, -2133.33, 400, 1066.67], + 331 => [1, "Ashenvale", 829.167, -4066.67, 4672.92, 1700], + 357 => [1, "Feralas", -7000, -1508.33, -2366.67, 5441.67], + 361 => [1, "Felwood", 3300, -4108.33, 7133.33, 1641.67], + 400 => [1, "Thousand Needles", -6900, -4833.33, -3966.67, -433.333], + 405 => [1, "Desolace", -2545.83, -262.5, 452.083, 4233.33], + 406 => [1, "Stonetalon Mountains", -339.583, -1637.5, 2916.67, 3245.83], + 440 => [1, "Tanaris", -10475, -7118.75, -5875, -218.75], + 490 => [1, "Un'Goro Crater", -8433.33, -3166.67, -5966.67, 533.333], + 493 => [1, "Moonglade", 6952.08, -3689.58, 8491.67, -1381.25], + 618 => [1, "Winterspring", 3800, -7416.67, 8533.33, -316.667], + 1377 => [1, "Silithus", -8281.25, -945.834, -5958.33, 2537.5], + 1497 => [0, "Undercity", 1237.84, -861.824, 1877.95, 873.193], + 1519 => [0, "Stormwind City", -9175.21, 367.006, -8278.85, 1380.97], + 1537 => [0, "Ironforge", -5096.85, -1504.22, -4569.24, -713.591], + 1637 => [1, "Orgrimmar", 1338.46, -5083.21, 2273.88, -3680.6], + 1638 => [1, "Thunder Bluff", -1545.83, -527.083, -850, 516.667], + 1657 => [1, "Darnassus", 9532.59, 1880.03, 10238.3, 2938.36] +]; + +$config['range_index'] = [ + 1 => [0, 0, "Self Only"], + 2 => [0, 5, "Combat Range"], + 3 => [0, 20, "Short Range"], + 4 => [0, 30, "Medium Range"], + 5 => [0, 40, "Long Range"], + 6 => [0, 100, "Vision Range"], + 7 => [0, 10, "Very Short Range"], + 8 => [10, 20, "Short Range"], + 9 => [10, 30, "Medium Range"], + 10 => [10, 40, "Long Range"], + 11 => [0, 15, "Shorter Range"], + 12 => [0, 5, "Interact Range"], + 13 => [0, 50000, "Anywhere"], + 14 => [0, 60, "Extra Long Range"], + 34 => [0, 25, "Medium-Short Range"], + 35 => [0, 35, "Medium-Long Range"], + 36 => [0, 45, "Longer Range"], + 37 => [0, 50, "Extended Range"], + 38 => [10, 25, "Extra Medium Range"], + 54 => [5, 30, "Geoff Monster Shoot"], + 74 => [8, 30, "Ranged Weapon"], + 94 => [8, 40, "Sting"], + 95 => [8, 25, "Charge"], + 96 => [0, 2, "Trap"], + 114 => [8, 35, "Hunter Range"], + 134 => [0, 80, "Tower 80"], + 135 => [0, 100, "Tower 100"], + 136 => [30, 80, "Artillery Range"] +]; + +// id, icon_name +$config['spell_icons'] = [ + 9 => 'Spell_Shadow_BlackPlague', + 10 => 'Spell_Nature_NaturesBlessing', + 11 => 'Spell_Fire_Fire', + 12 => 'Spell_Fire_Fireball', + 13 => 'Spell_Nature_MagicImmunity', + 14 => 'Spell_Frost_Frost', + 15 => 'Spell_Frost_Stun', + 16 => 'Spell_Fire_FireArmor', + 17 => 'Spell_Frost_IceShock', + 18 => 'Spell_Fire_FireBolt', + 19 => 'Spell_Nature_LightningShield', + 20 => 'Spell_Nature_StrangleVines', + 21 => 'Spell_Nature_FarSight', + 22 => 'Spell_Shadow_ShadeTrueSight', + 23 => 'Ability_ShockWave', + 24 => 'Spell_Nature_Reincarnation', + 25 => 'Ability_ThunderBolt', + 26 => 'Ability_MeleeDamage', + 27 => 'Spell_Nature_Slow', + 28 => 'Ability_Defend', + 29 => 'Ability_Seal', + 30 => 'Spell_Nature_Invisibilty', + 31 => 'Spell_Fire_Immolation', + 32 => 'Spell_Ice_Lament', + 33 => 'Spell_Fire_SealOfFire', + 34 => 'Spell_Fire_FlameBlades', + 35 => 'Spell_Frost_Glacier', + 36 => 'Spell_Frost_ManaRecharge', + 37 => 'Spell_Fire_SelfDestruct', + 38 => 'Spell_Nature_BloodLust', + 39 => 'Spell_Nature_NatureTouchGrow', + 40 => 'Spell_Nature_NatureTouchDecay', + 41 => 'Spell_Nature_DryadDispelMagic', + 42 => 'Ability_ThunderClap', + 43 => 'Ability_Temp', + 44 => 'Spell_Nature_Sleep', + 45 => 'Spell_Fire_MeteorStorm', + 46 => 'Spell_Nature_MoonGlow', + 47 => 'Spell_Nature_Purge', + 48 => 'Spell_Shadow_MindSteal', + 49 => 'Ability_EyeOfTheOwl', + 50 => 'Ability_BullRush', + 51 => 'Spell_Holy_InnerFire', + 52 => 'Spell_Holy_Devotion', + 53 => 'Spell_Nature_Thorns', + 54 => 'Spell_Nature_Brilliance', + 55 => 'Spell_Shadow_ChillTouch', + 56 => 'Spell_Frost_FreezingBreath', + 57 => 'Spell_Fire_EnchantWeapon', + 58 => 'Spell_Nature_TimeStop', + 59 => 'Spell_Misc_Food', + 60 => 'Spell_Misc_Drink', + 61 => 'Spell_Shadow_RaiseDead', + 62 => 'Spell_Nature_Lightning', + 63 => 'Spell_Nature_Strength', + 64 => 'Spell_Nature_Rejuvenation', + 65 => 'Spell_Nature_NullWard', + 66 => 'Spell_Nature_Earthquake', + 67 => 'Spell_Nature_SpiritWolf', + 68 => 'Spell_Nature_CorrosiveBreath', + 69 => 'Ability_Ensnare', + 70 => 'Spell_Holy_HolyBolt', + 71 => 'Spell_Shadow_Charm', + 72 => 'Spell_Nature_GuardianWard', + 73 => 'Spell_Holy_Restoration', + 74 => 'Spell_Holy_DispelMagic', + 75 => 'Spell_Shadow_SpectralSight', + 76 => 'Spell_Shadow_FingerOfDeath', + 77 => 'Spell_Shadow_MindRot', + 78 => 'Spell_Holy_Invulnerable', + 79 => 'Spell_Holy_LayOnHands', + 80 => 'Spell_Holy_SealOfValor', + 81 => 'Spell_Holy_DivineIntervention', + 82 => 'Spell_Nature_Polymorph', + 83 => 'Ability_Whirlwind', + 84 => 'Ability_Racial_Avatar', + 85 => 'Ability_UpgradeMoonGlaive', + 86 => 'Ability_Racial_BloodRage', + 87 => 'Spell_Shadow_Teleport', + 88 => 'Spell_Shadow_DeathCoil', + 89 => 'Spell_Shadow_RagingScream', + 90 => 'Spell_Shadow_Metamorphosis', + 91 => 'Spell_Shadow_AuraOfDarkness', + 92 => 'Spell_Shadow_SoulGem', + 93 => 'Spell_Shadow_UnholyStrength', + 94 => 'Spell_Frost_SummonWaterElemental', + 95 => 'Spell_Shadow_UnholyFrenzy', + 96 => 'Spell_Shadow_Cripple', + 97 => 'Spell_Shadow_PlagueCloud', + 98 => 'Spell_Shadow_Possession', + 99 => 'Spell_Shadow_AntiMagicShell', + 100 => 'Spell_Nature_Tranquility', + 101 => 'Spell_Frost_WindWalkOn', + 102 => 'Ability_Smash', + 103 => 'Ability_Ambush', + 104 => 'Spell_Holy_Heal', + 105 => 'Ability_SearingArrow', + 106 => 'Spell_Nature_MoonKey', + 107 => 'Ability_Racial_BearForm', + 108 => 'Ability_GhoulFrenzy', + 109 => 'Spell_Nature_FaerieFire', + 110 => 'Spell_Nature_SlowPoison', + 111 => 'Spell_Nature_ForceOfNature', + 112 => 'Spell_Nature_RavenForm', + 113 => 'Spell_Shadow_Haunting', + 114 => 'Spell_Shadow_ShadowPact', + 115 => 'Spell_Nature_Swiftness', + 116 => 'Spell_Shadow_CarrionSwarm', + 117 => 'Spell_Nature_WispHeal', + 118 => 'Spell_Shadow_DeathAndDecay', + 119 => 'Spell_Frost_FrostArmor', + 120 => 'Spell_Totem_WardOfDraining', + 121 => 'Spell_Holy_Resurrection', + 122 => 'Spell_Nature_WispSplode', + 123 => 'Spell_Nature_Regeneration', + 124 => 'Spell_Nature_ResistMagic', + 125 => 'Spell_Holy_MagicalSentry', + 126 => 'Ability_Marksmanship', + 127 => 'Ability_TheBlackArrow', + 128 => 'Ability_TrueShot', + 129 => 'Ability_WarStomp', + 130 => 'Spell_Shadow_RitualOfSacrifice', + 131 => 'Ability_Racial_ShadowMeld', + 132 => 'Ability_GolemStormBolt', + 133 => 'Spell_Frost_WizardMark', + 134 => 'Spell_Shadow_DeathScream', + 135 => 'Spell_Shadow_EvilEye', + 136 => 'Spell_Fire_Flare', + 137 => 'Spell_Shadow_MindBomb', + 138 => 'Ability_CriticalStrike', + 139 => 'Spell_Nature_EnchantArmor', + 140 => 'Spell_Shadow_SealOfKings', + 141 => 'Spell_Nature_CallStorm', + 142 => 'Spell_Frost_IceClaw', + 143 => 'Spell_Frost_Wisp', + 144 => 'Frostbolt_test', + 145 => 'Spell_Frost_ManaBurn', + 146 => 'Ability_Racial_Cannibalize', + 147 => 'Spell_Shadow_VampiricAura', + 148 => 'Ability_GolemThunderClap', + 149 => 'Spell_Nature_Regenerate', + 150 => 'Spell_Shadow_UnsummonBuilding', + 151 => 'Ability_SteelMelee', + 152 => 'Spell_Shadow_Requiem', + 153 => 'Spell_Shadow_LifeDrain', + 154 => 'Spell_Shadow_DarkRitual', + 155 => 'Spell_Nature_Drowsy', + 156 => 'Spell_Holy_SearingLight', + 157 => 'Ability_Hibernation', + 158 => 'Spell_Holy_Excorcism', + 159 => 'Spell_Holy_Retribution', + 160 => 'Spell_Shadow_CorpseExplode', + 161 => 'Ability_TownWatch', + 162 => 'Ability_Repair', + 163 => 'Ability_PoisonSting', + 164 => 'Spell_Shadow_Twilight', + 165 => 'Spell_Nature_ChainLightning', + 166 => 'Ability_Devour', + 167 => 'Spell_Holy_Dizzy', + 168 => 'Spell_Nature_NaturesWrath', + 169 => 'Spell_Shadow_DeathPact', + 170 => 'Spell_Shadow_DarkSummoning', + 171 => 'Ability_Spy', + 172 => 'Spell_Ice_MagicDamage', + 173 => 'Spell_Shadow_GatherShadows', + 174 => 'Spell_Nature_EarthBind', + 175 => 'Spell_Shadow_GhostKey', + 176 => 'Spell_Frost_Frostbolt', + 177 => 'Spell_Holy_AshesToAshes', + 178 => 'Spell_Shadow_ShadowWard', + 179 => 'Ability_Tracking', + 180 => 'Spell_Frost_ChainsOfIce', + 181 => 'Spell_Frost_FrostArmor02', + 182 => 'Spell_Frost_ChillingArmor', + 183 => 'Spell_Fire_FireBolt02', + 184 => 'Spell_Fire_Fireball02', + 185 => 'Spell_Fire_FlameBolt', + 186 => 'Spell_Frost_FrostBlast', + 187 => 'Spell_Frost_ChillingBlast', + 188 => 'Spell_Frost_FrostBolt02', + 189 => 'Spell_Frost_ChillingBolt', + 190 => 'Spell_Misc_Food_08', + 191 => 'Spell_Misc_ConjureManaJewel', + 192 => 'Spell_Fire_SunKey', + 193 => 'Spell_Frost_FrostNova', + 194 => 'Spell_Nature_NullifyPoison', + 195 => 'Spell_Nature_RemoveCurse', + 196 => 'Spell_Nature_RemoveDisease', + 197 => 'Spell_Nature_ResistNature', + 198 => 'Spell_Nature_SpiritArmor', + 199 => 'Spell_Nature_ThunderClap', + 200 => 'Spell_Nature_UndyingStrength', + 201 => 'Ability_Physical_Taunt', + 202 => 'Racial_Dwarf_FindTreasure', + 203 => 'Spell_Holy_HarmUndeadAura', + 204 => 'Spell_Holy_RetributionAura', + 205 => 'Spell_Holy_RighteousFury', + 206 => 'Spell_Holy_RighteousnessAura', + 207 => 'Spell_Shadow_AntiShadow', + 208 => 'Spell_Shadow_BurningSpirit', + 209 => 'Spell_Shadow_DetectLesserInvisibility', + 210 => 'Spell_Shadow_DetectInvisibility', + 211 => 'Spell_Shadow_ImpPhaseShift', + 212 => 'Spell_Shadow_ManaBurn', + 213 => 'Spell_Shadow_ShadowBolt', + 214 => 'Spell_Shadow_SummonFelHunter', + 215 => 'Spell_Shadow_SummonImp', + 216 => 'Spell_Shadow_SummonSuccubus', + 217 => 'Spell_Shadow_SummonVoidWalker', + 218 => 'Ability_ImpalingBolt', + 219 => 'Ability_PierceDamage', + 220 => 'Spell_Nature_Cyclone', + 221 => 'Spell_Shadow_AnimateDead', + 222 => 'Spell_Shadow_NightOfTheDead', + 223 => 'Spell_Orc_Omniscience', + 224 => 'Spell_Fire_Fire', + 225 => 'Spell_Nature_StarFall', + 226 => 'INV_Potion_19', + 227 => 'INV_Misc_Bag_11', + 228 => 'Spell_Shadow_GrimWard', + 229 => 'Spell_Nature_MirrorImage', + 230 => 'INV_Boots_03', + 231 => 'INV_Misc_Food_24', + 232 => 'Spell_Holy_Silence', + 233 => 'Spell_Shadow_Fumble', + 234 => 'Spell_Shadow_ShadowWordPain', + 235 => 'Spell_Shadow_ShadowWordDominate', + 236 => 'Spell_Holy_RemoveCurse', + 237 => 'Spell_Holy_HolySmite', + 238 => 'Spell_Holy_BlessingOfStamina', + 239 => 'Spell_Holy_BlessingOfStrength', + 240 => 'Spell_Holy_BlessingOfAgility', + 241 => 'Spell_Holy_GreaterHeal', + 242 => 'Spell_Holy_FlashHeal', + 243 => 'Ability_BackStab', + 244 => 'Ability_CheapShot', + 245 => 'Ability_Gouge', + 246 => 'Ability_Kick', + 247 => 'Ability_Poisons', + 248 => 'INV_Potion_12', + 249 => 'Ability_Sap', + 250 => 'Ability_Stealth', + 251 => 'Ability_Throw', + 252 => 'Ability_Vanish', + 253 => 'Ability_Hunter_AimedShot', + 254 => 'Ability_Hunter_BeastSooth', + 255 => 'Ability_Hunter_BeastTaming', + 256 => 'Ability_Hunter_CriticalShot', + 257 => 'Ability_Hunter_SwiftStrike', + 258 => 'INV_Misc_Food_08', + 259 => 'INV_Misc_Food_12', + 260 => 'INV_Misc_Food_11', + 261 => 'Ability_Druid_Maul', + 262 => 'Ability_Druid_Rake', + 263 => 'Spell_Nature_AbolishMagic', + 264 => 'Spell_Nature_NullifyDisease', + 265 => 'Spell_Nature_NullifyPoison_02', + 266 => 'Spell_Nature_ProtectionformNature', + 267 => 'Ability_Hunter_MendPet', + 268 => 'INV_Misc_Ale_01', + 269 => 'INV_Weapon_Crossbow_01', + 270 => 'INV_Ore_Tin_01', + 271 => 'INV_Misc_Birdbeck_02', + 272 => 'Spell_Nature_Web', + 273 => 'INV_Misc_EmptyFlask_01', + 274 => 'INV_Musket_03', + 275 => 'INV_Musket_04', + 276 => 'Ability_Warrior_DefensiveStance', + 277 => 'Ability_Warrior_Cleave', + 278 => 'Ability_Warrior_Challange', + 279 => 'Ability_Warrior_OffensiveStance', + 280 => 'Ability_Warrior_ShieldBash', + 281 => 'Ability_Warrior_ShieldWall', + 282 => 'Ability_Warrior_WarCry', + 283 => 'INV_Misc_Gem_Stone_01', + 284 => 'INV_Stone_04', + 285 => 'Spell_Frost_IceStorm', + 286 => 'INV_Staff_08', + 287 => 'INV_Misc_Orb_03', + 288 => 'INV_Ammo_Arrow_02', + 289 => 'INV_Misc_Bowl_01', + 290 => 'INV_ThrowingKnife_03', + 291 => 'Spell_Holy_DevotionAura', + 292 => 'Spell_Holy_Excorcism_02', + 293 => 'INV_Misc_Head_Tiger_01', + 294 => 'INV_Wand_01', + 295 => 'INV_Wand_02', + 296 => 'INV_Staff_03', + 297 => 'INV_Chest_Plate02', + 298 => 'Spell_Holy_FistOfJustice', + 299 => 'Spell_Holy_HealingAura', + 300 => 'Spell_Holy_Purify', + 301 => 'Spell_Holy_SealOfFury', + 302 => 'Spell_Holy_SealOfMight', + 303 => 'Spell_Holy_SealOfProtection', + 304 => 'Spell_Holy_SealOfRighteousness', + 305 => 'Spell_Holy_SealOfSalvation', + 306 => 'Spell_Holy_SealOfWisdom', + 307 => 'Spell_Holy_SealOfWrath', + 308 => 'Spell_Holy_SenseUndead', + 309 => 'Spell_Holy_TurnUndead', + 310 => 'Spell_Nature_Sentinal', + 311 => 'INV_Misc_MonsterFang_01', + 312 => 'Spell_Nature_UnyeildingStamina', + 313 => 'Spell_Shadow_AbominationExplosion', + 314 => 'INV_Gauntlets_05', + 315 => 'INV_Jewelry_Talisman_01', + 316 => 'Spell_Holy_PrayerOfHealing', + 317 => 'Spell_Magic_PolymorphPig', + 318 => 'Spell_Magic_PolymorphChicken', + 319 => 'INV_Scroll_02', + 320 => 'Spell_Lightning_LightningBolt01', + 321 => 'Spell_Holy_Renew', + 322 => 'INV_Mace_12', + 323 => 'INV_Misc_LeatherScrap_08', + 324 => 'INV_Fabric_Silk_02', + 325 => 'INV_Misc_Wrench_02', + 326 => 'INV_Misc_ArmorKit_17', + 327 => 'INV_Potion_14', + 328 => 'INV_Axe_04', + 329 => 'Spell_Holy_HolyProtection', + 330 => 'Spell_Holy_NullifyDisease', + 331 => 'Spell_Magic_LesserInvisibilty', + 332 => 'Spell_Magic_MageArmor', + 333 => 'Trade_Engineering', + 334 => 'Spell_Nature_AgitatingTotem', + 335 => 'Trade_BlackSmithing', + 336 => 'Trade_Mining', + 337 => 'Spell_Nature_InvisibilityTotem', + 338 => 'Spell_Nature_ManaRegenTotem', + 339 => 'Trade_Alchemy', + 340 => 'Spell_Nature_SlowingTotem', + 341 => 'Trade_Tailoring', + 342 => 'Trade_BrewPoison', + 343 => 'INV_Misc_Key_04', + 344 => 'INV_Misc_Gem_Sapphire_01', + 345 => 'Trade_Herbalism', + 346 => 'Trade_LeatherWorking', + 347 => 'INV_Misc_Shell_03', + 348 => 'INV_Potion_01', + 349 => 'INV_Misc_Shell_02', + 350 => 'INV_Misc_Dust_02', + 351 => 'INV_Misc_Ammo_Gunpowder_02', + 352 => 'INV_Orb_Arcanite_01', + 353 => 'INV_Misc_Gear_01', + 354 => 'INV_Cask_01', + 355 => 'INV_Misc_Bomb_05', + 356 => 'INV_Misc_StoneTablet_04', + 357 => 'INV_Scroll_05', + 358 => 'INV_Misc_Fork&Knife', + 359 => 'INV_Misc_EmptyFlask_02', + 360 => 'INV_Flask_02', + 361 => 'INV_Flask_05', + 362 => 'INV_Wine_01', + 363 => 'INV_Misc_Cape_18', + 364 => 'INV_Weapon_Bow_05', + 365 => 'INV_Weapon_Halberd_06', + 366 => 'INV_Axe_09', + 367 => 'INV_Mace_01', + 368 => 'INV_Sword_04', + 369 => 'INV_Sword_06', + 370 => 'INV_Spear_05', + 371 => 'INV_Axe_17', + 372 => 'INV_Gauntlets_06', + 373 => 'INV_Misc_Pipe_01', + 374 => 'INV_Misc_Food_09', + 393 => 'INV_Weapon_Rifle_01', + 413 => 'INV_Shield_05', + 433 => 'INV_Banner_03', + 434 => 'INV_ThrowingKnife_05', + 435 => 'INV_Mace_04', + 436 => 'INV_Weapon_Bow_02', + 437 => 'INV_Axe_13', + 438 => 'INV_Sword_26', + 439 => 'INV_Hammer_03', + 440 => 'INV_Shield_04', + 441 => 'INV_Axe_16', + 442 => 'INV_Stone_01', + 443 => 'INV_Axe_11', + 444 => 'INV_Chest_Plate01', + 453 => 'Spell_Holy_BlessingOfProtection', + 454 => 'Ability_Hunter_BeastSoothe', + 455 => 'Ability_Hunter_BeastCall', + 456 => 'Ability_Warrior_BattleShout', + 457 => 'Ability_Warrior_Charge', + 458 => 'Spell_Nature_AstralRecal', + 459 => 'Spell_Nature_AstralRecalGroup', + 460 => 'Spell_Shadow_SummonInfernal', + 473 => 'Ability_Druid_Bash', + 493 => 'Ability_Druid_CatForm', + 494 => 'Ability_Druid_Disembowel', + 495 => 'Ability_Druid_SupriseAttack', + 496 => 'Ability_Druid_Swipe', + 497 => 'Ability_Rogue_Disguise', + 498 => 'Ability_Rogue_Garrote', + 499 => 'Ability_Rogue_KidneyShot', + 500 => 'Ability_Rogue_Rupture', + 501 => 'Spell_Frost_FrostWard', + 502 => 'Spell_Holy_MindVision', + 503 => 'Spell_Holy_Redemption', + 504 => 'Spell_Holy_SealOfSacrifice', + 505 => 'Spell_Magic_FeatherFall', + 513 => 'Ability_Rogue_DualWeild', + 514 => 'Ability_Rogue_Eviscerate', + 515 => 'Ability_Rogue_SliceDice', + 516 => 'Ability_Rogue_Sprint', + 517 => 'Ability_Rogue_Trip', + 518 => 'INV_Poison_MindNumbing', + 533 => 'Ability_DualWield', + 534 => 'Ability_Hunter_BeastTraining', + 535 => 'Ability_Hunter_Pathfinding', + 536 => 'Ability_Hunter_Quickshot', + 537 => 'Ability_Hunter_RunningShot', + 538 => 'Ability_Hunter_SniperShot', + 539 => 'Ability_Rogue_Feint', + 540 => 'Spell_Holy_PrayerOfHealing02', + 541 => 'Spell_Shadow_BloodBoil', + 542 => 'Spell_Shadow_CurseOfAchimonde', + 543 => 'Spell_Shadow_CurseOfMannoroth', + 544 => 'Spell_Shadow_CurseOfSargeras', + 545 => 'Spell_Shadow_DemonBreath', + 546 => 'Spell_Shadow_LifeDrain02', + 547 => 'Spell_Shadow_RainOfFire', + 548 => 'Spell_Shadow_SiphonMana', + 553 => 'Ability_Racial_Ultravision', + 554 => 'INV_Misc_Orb_04', + 555 => 'Spell_Holy_AuraOfLight', + 556 => 'INV_Food_Egg_02', + 557 => 'INV_Wine_03', + 558 => 'Ability_Parry', + 559 => 'Ability_Warrior_DecisiveStrike', + 560 => 'Ability_Warrior_Disarm', + 561 => 'Ability_Warrior_InnerRage', + 562 => 'Ability_Warrior_Revenge', + 563 => 'Ability_Warrior_Riposte', + 564 => 'Ability_Warrior_SavageBlow', + 565 => 'Ability_Warrior_Sunder', + 566 => 'Spell_Holy_PowerWordShield', + 576 => 'INV_Misc_Fish_05', + 577 => 'INV_Misc_Fish_06', + 578 => 'Trade_Engraving', + 579 => 'INV_Staff_Goldfeathered_01', + 580 => 'Trade_Fishing', + 596 => 'Spell_Shadow_Curse', + 597 => 'INV_Misc_MonsterHead_03', + 598 => 'INV_Staff_01', + 599 => 'INV_Misc_Bone_09', + 600 => 'INV_Misc_Bone_06', + 601 => 'INV_Misc_Foot_Kodo', + 616 => 'INV_Misc_Fish_03', + 617 => 'INV_Misc_Monster_MouseTail', + 636 => 'Spell_Nature_Acid_01', + 656 => 'INV_Gizmo_02', + 657 => 'INV_Gizmo_03', + 658 => 'INV_Gizmo_01', + 676 => 'INV_Misc_Food_18', + 677 => 'Ability_ShootWand', + 678 => 'Spell_Fire_FlameShock', + 679 => 'Spell_Fire_FlameTounge', + 680 => 'Spell_Fire_SearingTotem', + 681 => 'Spell_Frost_FrostBrand', + 682 => 'Spell_Holy_LesserHeal', + 683 => 'Spell_Holy_LesserHeal02', + 684 => 'Spell_Holy_Heal02', + 685 => 'Spell_Holy_WordFortitude', + 686 => 'Spell_Nature_StrengthOfEarthTotem02', + 687 => 'Spell_Nature_EarthShock', + 688 => 'Spell_Nature_RockBiter', + 689 => 'Spell_Nature_StoneClawTotem', + 690 => 'Spell_Nature_StoneSkinTotem', + 691 => 'Spell_Nature_EarthBindTotem', + 692 => 'Spell_Shadow_CurseOfTounges', + 693 => 'Spell_Shadow_SacrificialShield', + 694 => 'Spell_Shadow_SoothingKiss', + 695 => 'Ability_FiegnDead', + 696 => 'INV_Misc_Spyglass_01', + 716 => 'INV_Boots_02', + 736 => 'INV_Misc_Pelt_Wolf_01', + 756 => 'INV_Gauntlets_04', + 776 => 'INV_Misc_Rune_01', + 796 => 'INV_Chest_Chain_05', + 816 => 'Spell_Fire_SoulBurn', + 836 => 'Ability_Mount_BlackPanther', + 856 => 'Ability_Rogue_Ambush', + 857 => 'Ability_Rogue_FeignDeath', + 858 => 'INV_Misc_Ammo_Bullet_01', + 876 => 'Spell_Fire_LavaSpawn', + 896 => 'INV_Chest_Leather_09', + 897 => 'INV_Chest_Cloth_21', + 916 => 'Ability_Mount_WhiteTiger', + 917 => 'INV_Shield_09', + 936 => 'INV_Misc_Key_03', + 937 => 'Spell_Fire_Incinerate', + 956 => 'Ability_Mount_WhiteDireWolf', + 957 => 'Ability_Druid_ChallangingRoar', + 958 => 'Ability_Druid_Cower', + 959 => 'Ability_Druid_Dash', + 960 => 'Ability_Druid_DemoralizingRoar', + 961 => 'Ability_Druid_Enrage', + 962 => 'Spell_Nature_HealingTouch', + 963 => 'Spell_Nature_HealingWaveGreater', + 964 => 'Spell_Nature_HealingWaveLesser', + 965 => 'INV_Ammo_Bullet_02', + 976 => 'Spell_Frost_FrostShock', + 996 => 'INV_Weapon_Halberd_08', + 997 => 'INV_Chest_Plate04', + 1016 => 'INV_Misc_Food_04', + 1036 => 'INV_Misc_Gem_Emerald_01', + 1037 => 'INV_Misc_Gem_Emerald_02', + 1038 => 'INV_Misc_Gem_Opal_01', + 1039 => 'INV_Misc_Gem_Ruby_01', + 1056 => 'INV_Wine_02', + 1057 => 'INV_Wine_04', + 1076 => 'INV_Misc_Head_Undead_01', + 1096 => 'INV_Misc_Milk_02', + 1097 => 'INV_Misc_Head_Human_02', + 1098 => 'INV_Misc_Key_05', + 1099 => 'INV_Misc_Key_06', + 1100 => 'INV_Misc_Key_12', + 1101 => 'INV_Misc_Key_14', + 1116 => 'INV_Misc_MonsterClaw_02', + 1136 => 'INV_Misc_MonsterScales_03', + 1137 => 'Spell_Fire_Volcano', + 1156 => 'INV_Jewelry_Amulet_07', + 1176 => 'Ability_Mount_RidingHorse', + 1177 => 'Ability_Mount_MountainRam', + 1178 => 'Ability_Mount_BlackDireWolf', + 1179 => 'Ability_Mount_NightmareHorse', + 1180 => 'Ability_Mount_Raptor', + 1181 => 'Ability_Mount_JungleTiger', + 1196 => 'INV_Misc_Ammo_Gunpowder_01', + 1197 => 'Spell_Fire_WindsofWoe', + 1216 => 'INV_Misc_Flower_02', + 1217 => 'INV_Misc_Herb_03', + 1236 => 'Spell_Frost_IceShard', + 1237 => 'INV_Misc_Bandage_08', + 1238 => 'INV_Hammer_18', + 1239 => 'INV_Wand_08', + 1240 => 'Ability_Mount_MechaStrider', + 1241 => 'Ability_Mount_Undeadhorse', + 1242 => 'INV_Hammer_24', + 1256 => 'INV_Misc_MonsterSpiderCarapace_01', + 1276 => 'INV_Ingot_03', + 1277 => 'INV_Ingot_Steel', + 1296 => 'INV_Potion_63', + 1297 => 'INV_Potion_84', + 1298 => 'INV_Potion_91', + 1299 => 'INV_Potion_93', + 1300 => 'INV_Potion_65', + 1301 => 'INV_Potion_86', + 1302 => 'INV_Potion_33', + 1303 => 'INV_Potion_58', + 1304 => 'INV_Potion_44', + 1305 => 'INV_Potion_79', + 1306 => 'INV_Drink_09', + 1307 => 'INV_Potion_15', + 1308 => 'INV_Potion_13', + 1309 => 'INV_Drink_07', + 1310 => 'INV_Potion_08', + 1311 => 'INV_Potion_18', + 1312 => 'INV_Drink_13', + 1313 => 'INV_Drink_05', + 1314 => 'INV_Drink_04', + 1315 => 'INV_Potion_30', + 1316 => 'INV_Potion_69', + 1336 => 'INV_Potion_10', + 1337 => 'INV_Potion_61', + 1356 => 'INV_Potion_04', + 1357 => 'INV_Drink_06', + 1358 => 'INV_Drink_Milk_02', + 1359 => 'INV_Drink_10', + 1360 => 'INV_Drink_11', + 1361 => 'INV_Drink_12', + 1377 => 'INV_Misc_Net_01', + 1397 => 'Spell_Nature_Windfury', + 1417 => 'INV_Misc_Horn_03', + 1437 => 'INV_Misc_Food_10', + 1457 => 'INV_Ammo_Arrow_01', + 1458 => 'INV_Axe_05', + 1459 => 'INV_Weapon_Halbard_01', + 1460 => 'INV_Mace_02', + 1461 => 'INV_Sword_20', + 1462 => 'INV_Sword_27', + 1463 => 'INV_Shield_06', + 1464 => 'INV_Sword_05', + 1465 => 'Spell_Nature_AncestralGuardian', + 1466 => 'INV_Gizmo_Pipe_04', + 1467 => 'INV_Misc_Food_15', + 1468 => 'Spell_Shadow_CreepingPlague', + 1469 => 'INV_Misc_Gem_Opal_03', + 1470 => 'INV_Misc_Gem_Topaz_01', + 1471 => 'INV_Misc_Gem_Crystal_01', + 1472 => 'INV_Misc_Gem_Variety_02', + 1473 => 'INV_Axe_03', + 1474 => 'INV_Axe_06', + 1475 => 'Ability_Druid_AquaticForm', + 1476 => 'Ability_Druid_TravelForm', + 1477 => 'Ability_Warrior_PunishingBlow', + 1478 => 'Ability_Rogue_Distract', + 1479 => 'Spell_Arcane_PortalDarnassus', + 1480 => 'Spell_Arcane_PortalIronForge', + 1481 => 'Spell_Arcane_PortalOrgrimmar', + 1482 => 'Spell_Arcane_PortalStormWind', + 1483 => 'Spell_Arcane_PortalThunderBluff', + 1484 => 'Spell_Arcane_PortalUnderCity', + 1485 => 'Spell_Arcane_StarFire', + 1486 => 'Spell_Arcane_TeleportDarnassus', + 1487 => 'Spell_Holy_MindSooth', + 1488 => 'Spell_Shadow_PsychicScream', + 1489 => 'Spell_Arcane_TeleportIronForge', + 1490 => 'Spell_Arcane_TeleportOrgrimmar', + 1491 => 'Spell_Arcane_TeleportStormWind', + 1492 => 'Spell_Arcane_TeleportThunderBluff', + 1493 => 'Spell_Arcane_TeleportUnderCity', + 1494 => 'Spell_Shadow_Contagion', + 1495 => 'INV_Drink_15', + 1496 => 'INV_Misc_Herb_16', + 1497 => 'INV_Misc_Wrench_01', + 1498 => 'INV_Shield_01', + 1499 => 'Spell_Arcane_Blink', + 1500 => 'Spell_Shadow_EnslaveDemon', + 1501 => 'INV_Weapon_ShortBlade_14', + 1502 => 'INV_Staff_10', + 1503 => 'INV_Staff_11', + 1504 => 'INV_Weapon_ShortBlade_05', + 1505 => 'INV_ThrowingKnife_01', + 1506 => 'INV_Ammo_FireTar', + 1507 => 'INV_Misc_MonsterScales_12', + 1508 => 'INV_Sword_11', + 1509 => 'INV_Misc_Food_50', + 1510 => 'Ability_Mount_PinkTiger', + 1511 => 'Ability_Hunter_BeastCall02', + 1512 => 'INV_Misc_Food_33', + 1513 => 'INV_Drink_03', + 1514 => 'INV_Egg_02', + 1515 => 'INV_Misc_Gem_Crystal_02', + 1516 => 'INV_Misc_Gem_Diamond_02', + 1517 => 'INV_Misc_Gem_Ruby_02', + 1518 => 'INV_Misc_Gem_Amethyst_01', + 1519 => 'INV_Misc_Food_31', + 1520 => 'INV_Cask_03', + 1521 => 'INV_Misc_ShadowEgg', + 1522 => 'INV_Box_PetCarrier_01', + 1523 => 'INV_Staff_30', + 1524 => 'INV_Weapon_ShortBlade_10', + 1525 => 'INV_Misc_MonsterScales_05', + 1526 => 'INV_Axe_01', + 1527 => 'INV_Spear_06', + 1528 => 'INV_ThrowingKnife_02', + 1529 => 'INV_Axe_08', + 1530 => 'Ability_Hunter_EagleEye', + 1531 => 'Ability_Druid_Ravage', + 1532 => 'INV_Misc_MonsterScales_17', + 1533 => 'INV_Misc_MonsterScales_11', + 1534 => 'Ability_Druid_CatFormAttack', + 1535 => 'INV_Misc_MonsterScales_09', + 1536 => 'INV_Misc_MonsterScales_15', + 1537 => 'INV_Misc_MonsterScales_13', + 1538 => 'INV_Misc_MonsterScales_07', + 1539 => 'INV_Ore_Arcanite_01', + 1540 => 'INV_Belt_18', + 1541 => 'INV_Misc_Slime_01', + 1542 => 'INV_Egg_04', + 1543 => 'INV_Egg_05', + 1544 => 'INV_Hammer_09', + 1545 => 'INV_Axe_18', + 1546 => 'INV_Axe_10', + 1547 => 'INV_Shoulder_11', + 1548 => 'INV_Misc_Head_Dragon_01', + 1549 => 'Ability_Hunter_AspectOfTheMonkey', + 1550 => 'INV_Misc_Horn_01', + 1551 => 'INV_Shield_20', + 1552 => 'Spell_Shadow_Shadowform', + 1553 => 'INV_Misc_Rune_04', + 1554 => 'INV_Sword_32', + 1555 => 'INV_Jewelry_Talisman_06', + 1556 => 'INV_Jewelry_Amulet_01', + 1557 => 'INV_Axe_12', + 1558 => 'INV_Misc_Pelt_Bear_03', + 1559 => 'Ability_Hunter_Pet_Bear', + 1560 => 'INV_Spear_08', + 1561 => 'INV_Misc_MonsterClaw_04', + 1562 => 'INV_Misc_MonsterClaw_03', + 1563 => 'Ability_Hunter_Pet_Cat', + 1564 => 'INV_Misc_Urn_01', + 1565 => 'Ability_Hunter_Pet_Hyena', + 1566 => 'INV_Sword_22', + 1567 => 'INV_Hammer_23', + 1568 => 'INV_Misc_Gem_Bloodstone_01', + 1569 => 'INV_Potion_11', + 1570 => 'INV_Potion_92', + 1571 => 'INV_Sword_25', + 1572 => 'INV_Sword_41', + 1573 => 'Ability_Hunter_Pet_Wolf', + 1574 => 'INV_Ingot_Eternium', + 1575 => 'INV_Misc_Rune_05', + 1576 => 'INV_Misc_StoneTablet_05', + 1577 => 'Ability_Hunter_Pet_Bat', + 1578 => 'Ability_Hunter_Pet_Boar', + 1579 => 'Ability_Hunter_Pet_Vulture', + 1580 => 'Ability_Hunter_Pet_Crab', + 1581 => 'Ability_Hunter_Pet_Crocolisk', + 1582 => 'Ability_Hunter_Pet_Gorilla', + 1583 => 'Ability_Hunter_Pet_Owl', + 1584 => 'Ability_Hunter_Pet_Raptor', + 1585 => 'Ability_Hunter_Pet_Scorpid', + 1586 => 'Ability_Hunter_Pet_Spider', + 1587 => 'Ability_Hunter_Pet_TallStrider', + 1588 => 'Ability_Hunter_Pet_Turtle', + 1589 => 'Ability_Hunter_Pet_WindSerpent', + 1590 => 'Spell_Shadow_ScourgeBuild', + 1591 => 'Spell_Shadow_DeadofNight', + 1592 => 'INV_Misc_Fish_08', + 1593 => 'INV_Stone_14', + 1594 => 'INV_Shield_19', + 1595 => 'INV_Misc_Orb_02', + 1596 => 'INV_Weapon_Halberd_11', + 1597 => 'INV_Potion_31', + 1598 => 'INV_Helmet_45', + 1599 => 'INV_Helmet_08', + 1600 => 'INV_Stone_13', + 1601 => 'INV_Sword_02', + 1602 => 'INV_Potion_29', + 1603 => 'INV_Potion_16', + 1604 => 'INV_Potion_40', + 1605 => 'INV_Potion_46', + 1606 => 'INV_Potion_67', + 1607 => 'INV_Potion_47', + 1608 => 'INV_Jewelry_Talisman_07', + 1609 => 'INV_Potion_32', + 1610 => 'INV_Misc_Flute_01', + 1611 => 'INV_Misc_Bone_HumanSkull_01', + 1612 => 'INV_Boots_Plate_03', + 1613 => 'INV_Gauntlets_19', + 1614 => 'Spell_Shadow_CallofBone', + 1615 => 'INV_Misc_Head_Tauren_02', + 1616 => 'INV_Ammo_Bullet_01', + 1617 => 'INV_Ammo_Bullet_03', + 1618 => 'INV_Misc_MonsterScales_14', + 1619 => 'INV_Gizmo_08', + 1620 => 'INV_Misc_Bandage_11', + 1621 => 'INV_Misc_Bandage_12', + 1622 => 'INV_Staff_02', + 1623 => 'INV_Staff_07', + 1624 => 'INV_Wand_07', + 1625 => 'INV_Battery_01', + 1626 => 'INV_Misc_Flower_01', + 1627 => 'INV_Misc_Food_Wheat_02', + 1628 => 'INV_Axe_02', + 1629 => 'INV_Spear_07', + 1630 => 'Ability_PoisonArrow', + 1631 => 'INV_Weapon_Rifle_02', + 1632 => 'INV_Weapon_Rifle_06', + 1633 => 'INV_Gauntlets_10', + 1634 => 'INV_Misc_Food_02', + 1635 => 'INV_Hammer_04', + 1636 => 'INV_Wand_09', + 1637 => 'INV_Crown_01', + 1638 => 'INV_Potion_55', + 1639 => 'INV_Potion_62', + 1640 => 'INV_Potion_97', + 1641 => 'INV_Potion_48', + 1642 => 'INV_Potion_26', + 1643 => 'INV_Potion_41', + 1644 => 'INV_Misc_Book_07', + 1645 => 'INV_Enchant_EssenceAstralLarge', + 1646 => 'INV_Enchant_EssenceAstralSmall', + 1647 => 'INV_Spear_04', + 1648 => 'INV_Sword_48', + 1649 => 'Spell_Nature_Preservation', + 1650 => 'INV_ThrowingAxe_03', + 1651 => 'INV_Misc_Bone_OrcSkull_01', + 1652 => 'INV_Helmet_23', + 1653 => 'INV_Misc_Pelt_Bear_Ruin_02', + 1654 => 'INV_Enchant_EssenceEternalLarge', + 1655 => 'INV_Musket_02', + 1656 => 'INV_Enchant_ShardBrilliantSmall', + 1657 => 'INV_Misc_Note_02', + 1658 => 'INV_Feather_01', + 1659 => 'INV_Misc_MonsterScales_08', + 1660 => 'Spell_Arcane_TeleportMoonglade', + 1661 => 'Racial_Troll_Berserk', + 1662 => 'Racial_Orc_BerserkerStrength', + 1663 => 'INV_Hammer_05', + 1664 => 'INV_Hammer_01', + 1665 => 'INV_Ammo_Snowball', + 1666 => 'INV_Boots_05', + 1667 => 'INV_Gizmo_07', + 1668 => 'INV_Shield_10', + 1669 => 'Spell_Holy_PrayerOfFortitude', + 1670 => 'INV_Potion_03', + 1671 => 'INV_Misc_Herb_07', + 1672 => 'INV_Jewelry_Talisman_08', + 1673 => 'Spell_Nature_DiseaseCleansingTotem', + 1674 => 'Spell_Frost_FireResistanceTotem', + 1675 => 'Spell_Nature_NatureResistanceTotem', + 1676 => 'Spell_Nature_TremorTotem', + 1677 => 'Spell_Nature_GroundingTotem', + 1678 => 'Spell_Fire_FrostResistanceTotem', + 1679 => 'Spell_Nature_PoisonCleansingTotem', + 1680 => 'Ability_Druid_FerociousBite', + 1681 => 'Ability_Druid_Mangle.tga', + 1682 => 'Ability_Mount_Kodo_01', + 1683 => 'Ability_Mount_Kodo_02', + 1684 => 'Ability_Mount_Kodo_03', + 1685 => 'INV_Misc_Organ_03', + 1686 => 'INV_Potion_25', + 1687 => 'INV_Drink_18', + 1688 => 'INV_Misc_Food_55', + 1689 => 'INV_Crown_02', + 1690 => 'Spell_Nature_MassTeleport', + 1691 => 'INV_Banner_02', + 1692 => 'INV_Gizmo_09', + 1693 => 'INV_Misc_Gem_Amethyst_02', + 1694 => 'Spell_Holy_ArcaneIntellect', + 1695 => 'INV_Misc_Birdbeck_01', + 1696 => 'INV_Misc_Bomb_04', + 1697 => 'Ability_Hunter_Harass', + 1698 => 'INV_Banner_01', + 1699 => 'INV_Misc_Head_Dragon_Black', + 1700 => 'INV_Misc_Head_Dragon_Blue', + 1701 => 'INV_Misc_Head_Dragon_Bronze', + 1702 => 'INV_Misc_Head_Dragon_Green', + 1703 => 'INV_BannerPVP_01', + 1704 => 'INV_BannerPVP_02', + 1705 => 'INV_Misc_ArmorKit_18', + 1706 => 'INV_Misc_Organ_06', + 1707 => 'INV_Enchant_ShardBrilliantLarge', + 1708 => 'INV_Enchant_EssenceMagicLarge', + 1709 => 'INV_Enchant_EssenceNetherLarge', + 1710 => 'INV_Gauntlets_03', + 1711 => 'Spell_MageArmor', + 1712 => 'Spell_FireResistanceTotem_01', + 1713 => 'Spell_FrostResistanceTotem_01', + 1714 => 'Spell_Holy_ElunesGrace', + 1715 => 'Ability_Mount_Dreadsteed', + 1716 => 'Ability_Mount_Charger', + 1717 => 'INV_Misc_Rune_06', + 1718 => 'INV_Misc_Gem_Pearl_05', + 1719 => 'Ability_Creature_Poison_03', + 1720 => 'INV_Misc_Eye_01', + 1721 => 'INV_Spear_02', + 1722 => 'Ability_Suffocate', + 1723 => 'INV_Gauntlets_31', + 1724 => 'INV_Fishingpole_02', + 1725 => 'INV_Misc_Fish_04', + 1726 => 'INV_Feather_03', + 1727 => 'INV_Jewelry_Necklace_11', + 1728 => 'INV_Potion_45', + 1729 => 'INV_Potion_17', + 1730 => 'INV_Misc_Key_08', + 1731 => 'INV_Chest_Plate16', + 1732 => 'INV_Potion_07', + 1733 => 'INV_Gizmo_GoblinBoomBox_01', + 1734 => 'Ability_Creature_Poison_05', + 1735 => 'INV_Misc_Gem_Bloodstone_02', + 1736 => 'Ability_Creature_Poison_01', + 1737 => 'Ability_Creature_Disease_02', + 1738 => 'INV_ZulGurubTrinket', + 1739 => 'Ability_Creature_Cursed_05', + 1740 => 'INV-Sword_53', + 1741 => 'Ability_Creature_Cursed_04', + 1742 => 'INV_Waepon_Bow_ZulGrub_D_02', + 1743 => 'INV_Misc_Food_28', + 1744 => 'INV_Misc_Head_Gnome_01', + 1745 => 'INV_Misc_Head_Gnome_02', + 1746 => 'Spell_Nature_CrystalBall', + 1747 => 'INV_Misc_Food_59', + 1748 => 'INV_Misc_Gem_Amethyst_03', + 1749 => 'Spell_Nature_LightningBolt', + 1750 => 'Ability_Creature_Cursed_03', + 1751 => 'INV_Misc_Head_Murloc_01', + 1752 => 'INV_Misc_MonsterHead_02', + 1753 => 'INV_Shield_08', + 1754 => 'Spell_Nature_CrystalBall', + 1755 => 'INV_Misc_Bomb_02', + 1756 => 'INV_Misc_Gem_02', + 1757 => 'INV_Misc_Gem_Pearl_04', + 1759 => 'Ability_Creature_Poison_02', + 1760 => 'Ability_Creature_Poison_04', + 1761 => 'Ability_Creature_Cursed_01', + 1762 => 'Ability_Creature_Cursed_02', + 1763 => 'INV_Drink_01', + 1764 => 'Ability_Creature_Disease_01', + 1765 => 'INV_Misc_MonsterScales_18', + 1766 => 'Ability_Creature_Cursed_03', + 1771 => 'Spell_Nature_InsectSwarm', + 1776 => 'INV_Misc_QuestionMark', + 1777 => 'INV_Misc_Head_Gnome_01', + 1778 => 'INV_Misc_Fish_20', + 1779 => 'INV_Misc_Fish_21', + 1780 => 'INV_Drink_08', + 1781 => 'INV_Misc_MonsterTail_03', + 1782 => 'INV_Shield_23', + 1783 => 'INV_Drink_08', + 1784 => 'INV_Misc_PocketWatch_01', + 1785 => 'INV_Drink_02', + 1786 => 'INV_Misc_Gem_02', + 1787 => 'INV_Misc_Gem_Topaz_02', + 1788 => 'INV_Misc_Food_65', + 1789 => 'INV_Food_ChristmasFruitCake_01', + 1790 => 'INV_Misc_AhnQirajTrinket_04', + 1791 => 'INV_Misc_AhnQirajTrinket_02', + 1792 => 'INV_Misc_Herb_10', + 1793 => 'INV_Misc_Herb_09', + 1794 => 'INV_Misc_Branch_01', + 1795 => 'Spell_Holy_Power', + 1796 => 'Spell_Holy_UnyieldingFaith', + 1797 => 'Spell_Holy_PersuitofJustice', + 1798 => 'Spell_Holy_Vindication', + 1799 => 'Spell_Holy_EyeforanEye', + 1800 => 'Spell_Magic_GreaterBlessingofKings', + 1801 => 'Spell_Holy_GreaterBlessingofLight', + 1802 => 'Spell_Holy_GreaterBlessingofKings', + 1803 => 'Spell_Holy_GreaterBlessingofSalvation', + 1804 => 'Spell_Holy_GreaterBlessingofSanctuary', + 1805 => 'Spell_Holy_GreaterBlessingofWisdom', + 1806 => 'INV_Food_ChristmasFruitCake_01', + 1807 => 'INV_Misc_Food_DimSum', + 1808 => 'INV_Potion_60', + 1809 => 'INV_Misc_QirajiCrystal_05', + 1810 => 'INV_Misc_QirajiCrystal_04', + 1811 => 'INV_Misc_QirajiCrystal_03', + 1812 => 'INV_Misc_QirajiCrystal_02', + 1813 => 'INV_Misc_QirajiCrystal_01', + 1814 => 'INV_Weapon_Bow_12', + 1815 => 'INV_Misc_EngGizmos_03', + 1816 => 'INV_Waepon_Bow_ZulGrub_D_02', + 1817 => 'INV_Misc_Food_59', + 1818 => 'INV_Helmet_46', + 1819 => 'INV_Misc_AhnQirajTrinket_05', + 1820 => 'Spell_Holy_EyeforanEye', + 1821 => 'Spell_Holy_PersuitofJustice', + 1822 => 'Spell_Holy_Vindication', + 1823 => 'Spell_Holy_UnyieldingFaith', + 1824 => 'Spell_Holy_Power', + 1825 => 'INV_Misc_AhnQirajTrinket_01', + 1826 => 'INV_Misc_AhnQirajTrinket_06', + 1827 => 'INV_QirajIdol_Death', + 1828 => 'INV_Misc_MissileLargeCluster_White', + 1829 => 'INV_Misc_Gem_Pearl_02', + 1833 => 'Mail_GMIcon', + 1838 => 'INV_Potion_02', + 1839 => 'INV_Potion_72', + 1840 => 'INV_Misc_Organ_01', + 1841 => 'INV_Misc_Organ_02', + 1845 => 'INV_Staff_26', + 1846 => 'INV_ValentinePerfumeBottle', + 1847 => 'INV_ValentineCologneBottle', + 1848 => 'INV_Misc_Dust_04', + 1849 => 'INV_ValentinesBoxOfChocolates02', + 1850 => 'INV_ValentinesCard01', + 1851 => 'INV_Potion_21', + 1852 => 'INV_Potion_52', + 1853 => 'Spell_BrokenHeart', + 1854 => 'INV_ValentinesChocolate01', + 1855 => 'INV_ValentinesChocolate02', + 1856 => 'INV_ValentinesChocolate03', + 1857 => 'INV_ValentinesChocolate04', + 1858 => 'INV_Holiday_Christmas_Present_02', + 1859 => 'INV_Holiday_Christmas_Present_01', + 1860 => 'INV_Misc_Gift_04', + 1861 => 'INV_Misc_Gift_01', + 1862 => 'INV_Misc_Gift_05', + 1863 => 'INV_Misc_Gift_03', + 1864 => 'INV_Jewelry_Ring_03', + 1865 => 'INV_Misc_Book_11', + 1866 => 'INV_Weapon_Rifle_11', + 1867 => 'INV_Weapon_Rifle_10', + 1868 => 'Spell_Holy_SearingLightPriest', + 1869 => 'Spell_Holy_PrayerofShadowProtection', + 1870 => 'Spell_Holy_PrayerofSpirit', + 1871 => 'Spell_Holy_HealingFocus', + 1872 => 'Spell_Holy_PowerInfusion', + 1873 => 'Spell_Holy_SpiritualGuidence', + 1874 => 'Spell_Holy_HolyNova', + 1875 => 'Spell_Holy_BlessedRecovery', + 1876 => 'Spell_Shadow_ImprovedVampiricEmbrace', + 1877 => 'INV_QirajIdol_Life', + 1878 => 'Spell_Holy_SummonLightwell', + 1879 => 'Spell_Holy_DivineSpirit', + 1880 => 'Spell_Holy_SpellWarding', + 1881 => 'INV_Misc_Fish_31', + 1884 => 'INV_Sword_2H_AshbringerCorrupt', + 1885 => 'Spell_ChargeNegative', + 1886 => 'Spell_ChargePositive', + 1888 => 'INV_Misc_Food_35', + 1889 => 'INV_Misc_Food_32', + 1891 => 'INV_Boots_Cloth_15', + 1892 => 'INV_Misc_Token_ArgentDawn', + 1893 => 'INV_Trinket_Naxxramas05', + 1894 => 'INV_Misc_Token_ArgentDawn2', + 1895 => 'INV_Misc_Token_ArgentDawn3', + 1896 => 'INV_Trinket_Naxxramas01', + 1897 => 'INV_Trinket_Naxxramas03', + 1898 => 'INV_Trinket_Naxxramas06', + 1899 => 'INV_Trinket_Naxxramas04', + 1903 => 'INV_Misc_Food_14', + 1905 => 'INV_Wand_06', + 1906 => 'INV_Battery_02', + 1907 => 'INV_Misc_Food_07', + 1908 => 'INV_Drink_Waterskin_09', + 1909 => 'INV_Misc_Food_19', + 1911 => 'INV_Misc_Food_73CinnamonRoll', + 1912 => 'Spell_Nature_Polymorph_Cow', + 1916 => 'INV_Helmet_21', + 1917 => 'INV_Relics_IdolofRejuvenation', + 1918 => 'Spell_Arcane_ArcaneResilience', + 1919 => 'INV_SummerFest_Symbol_Medium', + 1920 => 'Spell_Fire_MasterOfElements', + 1921 => 'Spell_Nature_StormReach', + 1922 => 'Ability_Druid_Mangle', + 1923 => 'INV_SummerFest_FireSpirit', + 1924 => 'INV_Bracer_09', + 1925 => 'INV_Misc_Food_53', + 1926 => 'INV_SummerFest_Smorc', + 1927 => 'Inv_Misc_SummerFest_BrazierOrange', + 1929 => 'Spell_Nature_HealingWay', + 1930 => 'Spell_Fire_ElementalDevastation', + 1931 => 'Spell_Nature_EyeOfTheStorm', + 1943 => 'INV_Misc_EngGizmos_19', + 1959 => 'Ability_Creature_Disease_03', + 1960 => 'Ability_Creature_Poison_06', + 1972 => 'INV_Weapon_Crossbow_11', + 1974 => 'Spell_Holiday_ToW_SpiceCloud', + 1975 => 'INV_Sword_42', + 1999 => 'INV_Boots_Cloth_16', + 2000 => 'INV_Boots_Cloth_02', + 2002 => 'INV_Musket_01', + 2003 => 'INV_Sword_51', + 2004 => 'INV_Sword_17', + 2035 => 'INV_Misc_Food_54' +]; + +$config['cast_index'] = [ + 1 => 0, + 2 => 250, + 3 => 500, + 4 => 1000, + 5 => 2000, + 6 => 5000, + 7 => 10000, + 8 => 20000, + 9 => 30000, + 10 => 1000, + 11 => 2000, + 12 => 5000, + 13 => 30000, + 14 => 3000, + 15 => 4000, + 16 => 1500, + 18 => -1000000, + 19 => 2500, + 20 => 2500, + 21 => 2600, + 22 => 3500, + 23 => 1800, + 24 => 2200, + 25 => 2900, + 26 => 3700, + 27 => 4100, + 28 => 3200, + 29 => 4700, + 30 => 4500, + 31 => 2300, + 32 => 7000, + 33 => 5125, + 34 => 8000, + 35 => 12500, + 36 => 600, + 37 => 25000, + 38 => 45000, + 39 => 60000, + 50 => 1300, + 70 => 300000, + 90 => 1700, + 91 => 2800, + 110 => 750, + 130 => 1600, + 150 => 3800, + 151 => 2700, + 152 => 3100, + 153 => 3400, + 170 => 8000, + 171 => 6000, + 190 => 100, + 191 => 0 +]; + +$config['build_list'] = [ + 6141 => "1.12.3", + 6005 => "1.12.2", + 5875 => "1.12.1", + 5803 => "1.12.1", + 5734 => "1.12.1", + 5595 => "1.12.0", + 5590 => "1.12.0", + 5579 => "1.12.0", + 5561 => "1.12.0", + 5537 => "1.12.0", + 5521 => "1.12.0", + 5496 => "1.12.0", + 5464 => "1.11.2", + 5462 => "1.11.1", + 5428 => "1.11.0", + 5413 => "1.11.0", + 5383 => "1.11.0", + 5366 => "1.11.0", + 5360 => "1.11.0", + 5344 => "1.11.0", + 5302 => "1.10.2", + 5230 => "1.10.1", + 5195 => "1.10.0", + 5140 => "1.10.0", + 5086 => "1.9.4", + 5059 => "1.9.3", + 4996 => "1.9.2", + 4983 => "1.9.1", + 4937 => "1.9.0", + 4869 => "1.9.0", + 4851 => "1.9.0", + 4878 => "1.8.4", + 4807 => "1.8.3", + 4784 => "1.8.2", + 4769 => "1.8.1", + 4735 => "1.8.0", + 4714 => "1.8.0", + 4695 => "1.7.1", + 4671 => "1.7.0", + 4579 => "1.7.0", + 4620 => "1.6.3", + 4565 => "1.6.2", + 4544 => "1.6.1", + 4500 => "1.6.0", + 4467 => "1.5.2", + 4499 => "1.5.1", + 4470 => "1.6.0", + 4449 => "1.5.1", + 4442 => "1.5.0", + 4431 => "1.4.4", + 4413 => "1.4.3", + 4375 => "1.4.2", + 4364 => "1.4.1", + 4341 => "1.4.0", + 4346 => "1.3.3", + 4298 => "1.3.2", + 4297 => "1.3.1", + 4284 => "1.3.0", + 4281 => "1.3.0", + 4273 => "1.3.0", + 4262 => "1.3.0", + 4222 => "1.2.4", + 4211 => "1.2.3", + 4196 => "1.2.2", + 4150 => "1.2.1", + 4149 => "1.2.0", + 4147 => "1.2.0", + 4125 => "1.1.2", + 4062 => "1.1.1", + 4044 => "1.1.0", + 3989 => "1.0.1", + 3980 => "1.0.0", + 3988 => "0.12.0", + 3925 => "0.11.0", + 3892 => "0.10.0", + 3810 => "0.9.1", + 3807 => "0.9.0", + 3734 => "0.8.0", + 3712 => "0.7.6", + 3702 => "0.7.1", + 3694 => "0.7.0", + 3592 => "0.6.0", + 3494 => "0.5.5", + 3368 => "0.5.3", + 2953 => "0.3.4" +]; + +$config['aura_names'] = [ + 0 => "None", + 1 => "Bind Sight", + 2 => "Possess", + 3 => "Periodic Damage - Flat", + 4 => "Dummy", + 5 => "Confuse", + 6 => "Charm", + 7 => "Fear", + 8 => "Periodic Heal", + 9 => "Mod Attack Speed", + 10 => "Mod Threat", + 11 => "Taunt", + 12 => "Stun", + 13 => "Mod Damage Done - Flat", + 14 => "Mod Damage Taken - Flat", + 15 => "Damage Shield", + 16 => "Stealth", + 17 => "Mod Stealth Detection Level", + 18 => "Invisibility", + 19 => "Mod Invisibility Detection Level", + 20 => "Regenerate Health - %", + 21 => "Regenerate Power - %", + 22 => "Mod Resistance - Flat", + 23 => "Periodically Trigger Spell", + 24 => "Periodically Give Power", + 25 => "Pacify", + 26 => "Root", + 27 => "Silence", + 28 => "Reflect Spells", + 29 => "Mod Stat - Flat", + 30 => "Mod Skill - Temporary", + 31 => "Increase Run Speed %", + 32 => "Mod Mounted Speed %", + 33 => "Decrease Run Speed %", + 34 => "Mod Maximum Health - Flat", + 35 => "Mod Maximum Power - Flat", + 36 => "Shapeshift", + 37 => "Spell Effect Immunity", + 38 => "Spell Aura Immunity", + 39 => "Spell School Immunity", + 40 => "Damage Immunity", + 41 => "Dispel Type Immunity", + 42 => "Proc Trigger Spell", + 43 => "Proc Trigger Damage", + 44 => "Track Creatures", + 45 => "Track Resources", + 46 => "Ignore All Gear", + 47 => "Mod Parry %", + 48 => "Mod Dodge Skill", + 49 => "Mod Dodge %", + 50 => "Mod Critical Healing Amount %", + 51 => "Mod Block %", + 52 => "Mod Physical Crit Chance", + 53 => "Periodically Drain Health", + 54 => "Mod Physical Hit Chance", + 55 => "Mod Spell Hit Chance", + 56 => "Transform", + 57 => "Mod Spell Crit Chance", + 58 => "Increase Swim Speed %", + 59 => "Mod Damage Done Versus Creature", + 60 => "Pacify & Silence", + 61 => "Mod Size %", + 62 => "Periodically Transfer Health", + 63 => "Periodic Transfer Power", + 64 => "Periodic Drain Power", + 65 => "Mod Spell Haste % (not stacking)", + 66 => "Feign Death", + 67 => "Disarm", + 68 => "Stalked", + 69 => "Mod Absorb School Damage", + 70 => "Extra Attacks", + 71 => "Mod Spell School Crit Chance", + 72 => "Mod Spell School Power Cost - %", + 73 => "Mod Spell School Power Cost - Flat", + 74 => "Reflect Spells School From School", + 75 => "Force Language", + 76 => "Far Sight", + 77 => "Mechanic Immunity", + 78 => "Mounted", + 79 => "Mod Damage Done - %", + 80 => "Mod Stat - %", + 81 => "Split Damage - %", + 82 => "Underwater Breathing", + 83 => "Mod Base Resistance - Flat", + 84 => "Mod Health Regeneration - Flat", + 85 => "Mod Power Regeneration - Flat", + 86 => "Create Item on Death", + 87 => "Mod Damage Taken - %", + 88 => "Mod Health Regeneration - %", + 89 => "Periodic Damage - %", + 90 => "Mod Resist Chance", + 91 => "Mod Aggro Range", + 92 => "Prevent Fleeing", + 93 => "Unattackable", + 94 => "Interrupt Power Decay", + 95 => "Ghost", + 96 => "Spell Magnet", + 97 => "Absorb Damage - Mana Shield", + 98 => "Mod Skill Value", + 99 => "Mod Attack Power - Flat", + 100 => "Always Show Debuffs", + 101 => "Mod Resistance - %", + 102 => "Mod Melee Attack Power vs Creature", + 103 => "Mod Total Threat - Temporary", + 104 => "Water Walking", + 105 => "Feather Fall", + 106 => "Levitate / Hover", + 107 => "Add Modifier - Flat", + 108 => "Add Modifier - %", + 109 => "Proc Spell on Target", + 110 => "Mod Power Regeneration - %", + 111 => "Intercept % of Attacks Against Target", + 112 => "Override Class Script", + 113 => "Mod Ranged Damage Taken - Flat", + 114 => "Mod Ranged Damage Taken - %", + 115 => "Mod Healing Taken - Flat", + 116 => "Allow % of Health Regen During Combat", + 117 => "Mod Mechanic Resistance", + 118 => "Mod Healing Taken - %", + 119 => "Share Pet Tracking", + 120 => "Untrackable", + 121 => "Beast Lore", + 122 => "Mod Offhand Damage Done %", + 123 => "Mod Target Resistance - Flat", + 124 => "Mod Ranged Attack Power - Flat", + 125 => "Mod Melee Damage Taken - Flat", + 126 => "Mod Melee Damage Taken - %", + 127 => "Mod Attacker Ranged Attack Power", + 128 => "Possess Pet", + 129 => "Increase Run Speed % - Stacking", + 130 => "Incerase Mounted Speed % - Stacking", + 131 => "Mod Ranged Attack Power vs Creature", + 132 => "Mod Maximum Power - %", + 133 => "Mod Maximum Health - %", + 134 => "Allow % of Mana Regen During Combat", + 135 => "Mod Healing Done - Flat", + 136 => "Mod Healing Done - %", + 137 => "Mod Stat - %", + 138 => "Mod Melee Haste %", + 139 => "Force Reputation", + 140 => "Mod Ranged Haste %", + 141 => "Mod Ranged Ammo Haste %", + 142 => "Mod Base Resistance - %", + 143 => "Mod Resistance - Flat (not stacking)", + 144 => "Safe Fall", + 145 => "Increase Pet Talent Points", + 146 => "Allow Exotic Pets Taming", + 147 => "Mechanic Immunity Mask", + 148 => "Retain Combo Points", + 149 => "Reduce Pushback Time %", + 150 => "Mod Shield Block Value - %", + 151 => "Track Stealthed", + 152 => "Mod Player Aggro Range", + 153 => "Split Damage - Flat", + 154 => "Mod Stealth Level", + 155 => "Mod Underwater Breathing %", + 156 => "Mod All Reputation Gained by %", + 157 => "Done Pet Damage Multiplier", + 158 => "Mod Shield Block Value - Flat", + 159 => "No PvP Credit", + 160 => "Mod AoE Avoidance", + 161 => "Mod Health Regen During Combat", + 162 => "Mana Burn", + 163 => "Mod Melee Critical Damage %", + 164 => "Aura 164", + 165 => "Mod Attacker Melee Attack Power", + 166 => "Mod Melee Attack Power - %", + 167 => "Mod Ranged Attack Power - %", + 168 => "Mod Damage Done vs Creature", + 169 => "Mod Crit Chance vs Creature", + 170 => "Change Object Visibility for Player", + 171 => "Mod Run Speed (not stacking)", + 172 => "Mod Mounted Speed (not stacking)", + 173 => "Allow Champion Spells", + 174 => "Mod Spell Power by % of Stat", + 175 => "Mod Healing Power by % of Stat", + 176 => "Spirit of Redemption", + 177 => "AoE Charm", + 178 => "Mod Debuff Resistance - %", + 179 => "Mod Attacker Spell Crit Chance", + 180 => "Mod Spell Power vs Creature", + 181 => "Mod Spell Crit vs Creature", + 182 => "Mod Resistance by % of Stat", + 183 => "Mod Threat % of Critical Hits", + 184 => "Mod Attacker Melee Hit Chance", + 185 => "Mod Attacker Ranged Hit Chance", + 186 => "Mod Attacker Spell Hit Chance", + 187 => "Mod Attacker Melee Crit Chance", + 188 => "Mod Attacker Ranged Crit Chance", + 189 => "Mod Rating", + 190 => "Mod Reputation Gained %", + 191 => "Limit Movement Speed", + 192 => "Custom Aura Spell" +]; + +$config['effect_names'] = [ + 0 => "None", + 1 => "Instakill", + 2 => "School Damage", + 3 => "Dummy", + 4 => "Portal Teleport", + 5 => "Teleport Units", + 6 => "Apply Aura", + 7 => "Environmental Damage", + 8 => "Drain Power", + 9 => "Health Leech", + 10 => "Heal", + 11 => "Bind", + 12 => "Portal", + 13 => "Ritual Base", + 14 => "Ritual Specialize", + 15 => "Ritual Activate Portal", + 16 => "Quest Complete", + 17 => "Weapon Damage + (noschool)", + 18 => "Resurrect", + 19 => "Extra Attacks", + 20 => "Dodge", + 21 => "Evade", + 22 => "Parry", + 23 => "Block", + 24 => "Create Item", + 25 => "Weapon", + 26 => "Defense", + 27 => "Persistent Area Aura", + 28 => "Summon", + 29 => "Leap", + 30 => "Give Power", + 31 => "Weapon % Dmg", + 32 => "Trigger Missile", + 33 => "Open Lock", + 34 => "Apply Area Aura", + 35 => 'Transform Item', + 36 => "Learn Spell", + 37 => "Spell Defense", + 38 => "Dispel", + 39 => "Language", + 40 => "Dual Wield", + 41 => "Summon Wild", + 42 => "Summon Guardian", + 43 => "Teleport Units (Face Caster)", + 44 => "Skill Step", + 45 => "Add Honor", + 46 => "Spawn", + 47 => "Spell Cast UI", + 48 => "Stealth", + 49 => "Detect", + 50 => "Summon Object", + 51 => "Force Critical Hit", + 52 => "Guarantee Hit", + 53 => "Enchant Item Permanent", + 54 => "Enchant Item Temporary", + 55 => "Tame Creature", + 56 => "Summon Pet", + 57 => "Learn Pet Spell", + 58 => "Weapon Damage +", + 59 => "Open Lock (Item)", + 60 => "Proficiency", + 61 => "Send Event", + 62 => "Burn Power", + 63 => "Threat", + 64 => "Trigger Spell", + 65 => "Health Funnel", + 66 => "Power Funnel", + 67 => "Heal Max Health", + 68 => "Interrupt Cast", + 69 => "Distract", + 70 => "Pull", + 71 => "Pickpocket", + 72 => "Add Farsight", + 73 => "Summon Possessed", + 74 => "Summon Totem", + 75 => "Heal Mechanical", + 76 => "Summon Object (Wild)", + 77 => "Script Effect", + 78 => "Attack", + 79 => "Sanctuary", + 80 => "Add Combo Points", + 81 => "Create House", + 82 => "Bind Sight", + 83 => "Duel", + 84 => "Stuck", + 85 => "Summon Player", + 86 => "Activate Object", + 87 => "Summon Totem (slot 1)", + 88 => "Summon Totem (slot 2)", + 89 => "Summon Totem (slot 3)", + 90 => "Summon Totem (slot 4)", + 91 => "Threat (All)", + 92 => "Enchant Held Item", + 93 => "Summon Phantasm", + 94 => "Self Resurrect", + 95 => "Skinning", + 96 => "Charge", + 97 => "Summon Critter", + 98 => "Knock Back", + 99 => "Disenchant", + 100 => "Inebriate", + 101 => "Feed Pet", + 102 => "Dismiss Pet", + 103 => "Reputation", + 104 => "Summon Object (slot 1)", + 105 => "Summon Object (slot 2)", + 106 => "Summon Object (slot 3)", + 107 => "Summon Object (slot 4)", + 108 => "Dispel Mechanic", + 109 => "Summon Dead Pet", + 110 => "Destroy All Totems", + 111 => "Durability Damage", + 112 => "Summon Demon", + 113 => "Resurrect (Flat)", + 114 => "Taunt", + 115 => "Durability Damage Pct(%)", + 116 => "Skin Player Corpse", + 117 => "Spirit Heal", + 118 => "Require Skill", + 119 => "Apply Area Aura Pet", + 120 => "Teleport Graveyard", + 121 => "Normalized Weapon Dmg", + 122 => "Silithyst Cap Reward", + 123 => "Send Taxi", + 124 => "Pull Player", + 125 => "Threat Reduce Pct(%)", + 126 => "Steal Beneficial Buff Magic", + 127 => "Require Ore", + 128 => "Apply Area Aura Friend", + 129 => "Apply Area Aura Enemy" +]; + +$config['spell_mechanics'] = [ + 0 => "", + 1 => "Charmed", + 2 => "Disoriented", + 3 => "Disarmed", + 4 => "Distracted", + 5 => "Feared (Fleeing)", + 6 => "Clumsy (Fumble)", + 7 => "Rooted", + 8 => "Pacified", + 9 => "Silenced", + 10 => "Asleep", + 11 => "Ensnared", + 12 => "Stunned", + 13 => "Frozen", + 14 => "Incapacitated", + 15 => "Bleeding", + 16 => "Healing", + 17 => "Polymorphed", + 18 => "Banished", + 19 => "Shielded", + 20 => "Shackled", + 21 => "Mounted", + 22 => "Seduced", + 23 => "Turned", + 24 => "Horrified", + 25 => "Invulnerable", + 26 => "Interrupted", + 27 => "Dazed", + 28 => "Discovered", + 29 => "Immune", + 30 => "Sapped", + 31 => "Slowed (Cast)" +]; + +$config['attributes'] = [ + 0 => [ + "Proc Failure Burns Charge", + "Uses Ranged Slot", + "On Next Swing (No Damage)", + "Need Exotic Ammo", + "Is Ability", + "Is Tradeskill", + "Passive", + "Do Not Display (Spellbook, Aura Icon, Combat Log)", + "Do Not Log", + "Held Item Only", + "On Next Swing", + "Wearer Casts Proc Trigger", + "Server Only", + "Allow Item Spell In PvP", + "Only Indoors", + "Only Outdoors", + "Not Shapeshifted", + "Only Stealthed", + "Do Not Sheath", + "Scales w/ Creature Level", + "Cancels Auto Attack Combat", + "No Active Defense", + "Track Target in Cast (Player Only)", + "Allow Cast While Dead", + "Allow While Mounted", + "Cooldown On Event", + "Aura Is Debuff", + "Allow While Sitting", + "Not In Combat (Only Peaceful)", + "No Immunities", + "Heartbeat Resist", + "No Aura Cancel" + ], + 1 => [ + "Dismiss Pet First", + "Use All Mana", + "Is Channelled", + "No Redirection", + "No Skill Increase", + "Allow While Stealthed", + "Is Self Channelled", + "No Reflection", + "Only Peaceful Targets", + "Initiates Combat (Enables Auto-Attack)", + "No Threat", + "Aura Unique", + "Failure Breaks Stealth", + "Toggle Far Sight", + "Track Target in Channel", + "Immunity Purges Effect", + "Immunity to Hostile & Friendly Effects", + "No AutoCast (AI)", + "Prevents Anim", + "Exclude Caster", + "Finishing Move - Damage", + "Threat only on Miss", + "Finishing Move - Duration", + "Ignore Owner's Death", + "Special Skillup", + "Aura Stays After Combat", + "Require All Targets", + "Discount Power On Miss", + "No Aura Icon", + "Name in Channel Bar", + "Combo on Block (Mainline: Dispel All Stacks)", + "Cast When Learned" + ], + 2 => [ + "Allow Dead Target", + "No shapeshift UI", + "Ignore Line of Sight", + "Allow Low Level Buff", + "Use Shapeshift Bar", + "Auto Repeat", + "Cannot cast on tapped", + "Do Not Report Spell Failure", + "Include In Advanced Combat Log", + "Always Cast As Unit", + "Special Taming Flag", + "No Target Per-Second Costs", + "Chain From Caster", + "Enchant own item only", + "Allow While Invisible", + "Do Not Consume if Gained During Cast", + "No Active Pets", + "Do Not Reset Combat Timers", + "No Jump While Cast Pending", + "Allow While Not Shapeshifted (caster form)", + "Initiate Combat Post-Cast (Enables Auto-Attack)", + "Fail on all targets immune", + "No Initial Threat", + "Proc Cooldown On Failure", + "Item Cast With Owner Skill", + "Don't Block Mana Regen", + "No School Immunities", + "Ignore Weaponskill", + "Not an Action", + "Can't Crit", + "Active Threat", + "Retain Item Cast" + ], + 3 => [ + "PvP Enabling", + "No Proc Equip Requirement", + "No Casting Bar Text", + "Completely Blocked", + "No Res Timer", + "No Durability Loss", + "No Avoidance", + "DoT Stacking Rule", + "Only On Player", + "Not a Proc", + "Requires Main-Hand Weapon", + "Only Battlegrounds", + "Only On Ghosts", + "Hide Channel Bar", + "Hide In Raid Filter", + "Normal Ranged Attack", + "Suppress Caster Procs", + "Suppress Target Procs", + "Always Hit", + "Instant Target Procs", + "Allow Aura While Dead", + "Only Proc Outdoors", + "Casting Cancels Autorepeat (Mainline: Do Not Trigger Target Stand)", + "No Damage History", + "Requires Off-Hand Weapon", + "Treat As Periodic", + "Can Proc From Procs", + "Only Proc on Caster", + "Ignore Caster & Target Restrictions", + "Ignore Caster Modifiers", + "Do Not Display Range", + "Not On AOE Immune" + ], + 4 => [ + "No Cast Log", + "Class Trigger Only On Target", + "Aura Expires Offline", + "No Helpful Threat", + "No Harmful Threat", + "Allow Client Targeting", + "Cannot Be Stolen", + "Allow Cast While Casting", + "Ignore Damage Taken Modifiers", + "Combat Feedback When Usable", + "Weapon Speed Cost Scaling", + "No Partial Immunity", + "Aura Is Buff", + "Do Not Log Caster", + "Reactive Damage Proc", + "Not In Spellbook", + "Not In Arena or Rated Battleground", + "Ignore Default Arena Restrictions", + "Bouncy Chain Missiles", + "Allow Proc While Sitting", + "Aura Never Bounces", + "Allow Entering Arena", + "Proc Suppress Swing Anim", + "Suppress Weapon Procs", + "Auto Ranged Combat", + "Owner Power Scaling", + "Only Flying Areas", + "Force Display Castbar", + "Ignore Combat Timer", + "Aura Bounce Fails Spell", + "Obsolete", + "Use Facing From Spell" + ] +]; + +$config['spell_categories'] = [ + 1 => "Default", + 2 => "DirectDamage-Spell", + 4 => "Item-CombatConsumable(Potion)", + 11 => "Item-Food", + 12 => "Healing-Spell", + 17 => "QuickBuff(Resist)-Spell", + 18 => "DamageOverTime-Spell", + 19 => "QuickDamage-Spell", + 20 => "Invulnerability(Other)", + 21 => "QuickBuff-Spell", + 22 => "QuickDebuff-Spell", + 23 => "Summoning", + 24 => "Item-CombatConsumable(Aggressive)", + 25 => "QuickHeal-Spell", + 26 => "Resurrection(Full)", + 27 => "Item-Scroll", + 28 => "Item-QuickBuff", + 29 => "Item-Debuff", + 30 => "Item-Healing", + 31 => "Conjure(Short)", + 32 => "Stun", + 33 => "Mez", + 34 => "Root", + 35 => "DirectDamage(AE)-Spell", + 36 => "Debuff-Spell", + 37 => "Invulnerability", + 38 => "Aura", + 39 => "Shapeshift", + 40 => "Melee(Generic)", + 41 => "Critical", + 42 => "Snare", + 43 => "Shout", + 44 => "Speed", + 45 => "Totem(Stoneclaw)", + 46 => "Healing(Group)-Spell", + 47 => "CombatStates", + 49 => "DirectDamage(AE)-Ability", + 50 => "DirectDamage(AE-Cone)-Ability", + 51 => "QuickDebuff(DPS)-Spell", + 52 => "QuickDebuff(DR)-Spell", + 54 => "QuickBuff(DR)-Spell", + 55 => "QuickBuff(DPS)-Spell", + 56 => "InstantHeal-Spell", + 57 => "QuickHeal(Group)-Spell", + 58 => "InstantHeal(Group)-Spell", + 59 => "Item-Drink", + 60 => "Invulnerability(Temp)", + 61 => "Energize(Group)-Spell", + 62 => "Energize-Spell", + 63 => "BigDirectDamage-Spell", + 64 => "MinimapSpecial", + 65 => "Melee(Special)", + 66 => "DodgeManeuver", + 67 => "BlockManeuver", + 68 => "ParryManeuver", + 72 => "DirectDamage(AE-Persistent)Spell", + 73 => "MartialArts(Generic)", + 74 => "MartialArts(Special)", + 75 => "Detect", + 76 => "Shoot/Throw", + 77 => "Trade-Herbalism", + 78 => "Trade-Mining", + 79 => "Item-Potion(Non-Combat)", + 82 => "Taunt/Detaunt", + 83 => "Taming", + 84 => "Taunt(AE)", + 85 => "DirectDamage(AE-Chain)-Ability", + 86 => "Pet", + 87 => "Conjure(Long)", + 88 => "Silence", + 89 => "Portal", + 93 => "Charm", + 94 => "Item-Summoning", + 95 => "RacialAbility", + 96 => "RacialAbility2", + 97 => "Secondary-Survival", + 98 => "BigDirectDamage-Spell(2)", + 99 => "InstantSpell", + 100 => "Item-ManaGem", + 101 => "Felhunter", + 102 => "Item-LongBuff", + 103 => "Item-Epic", + 104 => "Totem(Healing)", + 105 => "Totem(Serpent)", + 106 => "Totem(Slowing)", + 107 => "Totem(Mana)", + 108 => "Totem(Invisibility)", + 109 => "Melee(Disarm)", + 132 => "Discipline", + 133 => "Global", + 150 => "Item-Bandage", + 170 => "FinishingMove(Weapon-scaled)", + 190 => "Banish", + 230 => "Totem(Grounding)", + 250 => "BlastWave", + 270 => "KidneyShot", + 290 => "Pyroblast(REUSE)", + 310 => "Transmute-Alchemy", + 330 => "Mount", + 350 => "InnerRage", + 351 => "RangedWeapon", + 371 => "LightningShield", + 391 => "Quest-Felcurse", + 411 => "Trap", + 431 => "HolyNova", + 451 => "HolyFire", + 471 => "IceBarrier", + 511 => "AstralRecall", + 531 => "Nature\'sGrasp", + 551 => "AuraofthePious", + 571 => "Hurricane", + 591 => "Totem(ManaTide)", + 611 => "WingsofHope", + 631 => "SoulFire", + 633 => "DeathCoil", + 634 => "HowlofTerror", + 651 => "Shadowburn", + 671 => "DesperatePrayer", + 672 => "Conflagrate", + 691 => "DevouringPlague", + 731 => "SummonInfernal", + 751 => "TreeForm", + 791 => "Item-SaltShaker", + 811 => "DivineIntervention", + 831 => "Soulstone", + 851 => "Restoration", + 871 => "Shadowmeld", + 872 => "Intercept", + 891 => "Whirlwind", + 892 => "HolyShock", + 911 => "DistractingShot", + 931 => "HolyShield", + 932 => "Consecration", + 951 => "PvPBattlefieldItem-LONG(30mins)", + 971 => "MortalStrike", + 991 => "Item-SnowMaster", + 1011 => "FrenziedHealing", + 1031 => "Item-HalfHour", + 1051 => "Item-JumperCables", + 1071 => "Item-HatchJubling", + 1091 => "BattlegroundsRecall", + 1111 => "WyvernSting", + 1131 => "HammerofVengeance", + 1132 => "Intimidation", + 1133 => "FaerieFire(Feral)", + 1134 => "Riposte", + 1135 => "Counterattack", + 1136 => "Holiday-FireworkRockets", + 1137 => "Holiday-Firecracker", + 1138 => "RCWeapons", + 1139 => "Item-Quest(10minutes)", + 1140 => "Item-Quest(1min)", + 1141 => "Item-BurstTrinket", + 1142 => "Holiday-ValentinePerfume/Cologne", + 1143 => "Item-TargetDummy", + 1144 => "PriestRacial", + 1145 => "Lightwell", + 1149 => "Quest-1Hour", + 1150 => "ShadowThunderstrike", + 1151 => "Talent-DPS", + 1152 => "CreatureSpecial", + 1153 => "Item-CombatConsumable(Non-Aggressive)", + 1155 => "ArathiBasinTrinket", + 1159 => "CreatureSpecial2", + 1160 => "Item-PriestEpicStaff", + 1161 => "Reincarnation" +]; + +$config['skilline'] = [ + 6 => "Frost", + 8 => "Fire", + 26 => "Arms", + 38 => "Combat", + 39 => "Subtlety", + 40 => "Poisons", + 43 => "Swords", + 44 => "Axes", + 45 => "Bows", + 46 => "Guns", + 50 => "Beast Mastery", + 51 => "Survival", + 54 => "Maces", + 55 => "Two-Handed Swords", + 56 => "Holy", + 78 => "Shadow Magic", + 95 => "Defense", + 98 => "Language: Common", + 101 => "Dwarven Racial", + 109 => "Language: Orcish", + 111 => "Language: Dwarven", + 113 => "Language: Darnassian", + 115 => "Language: Taurahe", + 118 => "Dual Wield", + 124 => "Tauren Racial", + 125 => "Orc Racial", + 126 => "Night Elf Racial", + 129 => "First Aid", + 134 => "Feral Combat", + 136 => "Staves", + 137 => "Language: Thalassian", + 138 => "Language: Draconic", + 139 => "Language: Demon Tongue", + 140 => "Language: Titan", + 141 => "Language: Old Tongue", + 142 => "Survival", + 148 => "Horse Riding", + 149 => "Wolf Riding", + 150 => "Tiger Riding", + 152 => "Ram Riding", + 155 => "Swimming", + 160 => "Two-Handed Maces", + 162 => "Unarmed", + 163 => "Marksmanship", + 164 => "Blacksmithing", + 165 => "Leatherworking", + 171 => "Alchemy", + 172 => "Two-Handed Axes", + 173 => "Daggers", + 176 => "Thrown", + 182 => "Herbalism", + 183 => "GENERIC (DND)", + 184 => "Retribution", + 185 => "Cooking", + 186 => "Mining", + 188 => "Pet - Imp", + 189 => "Pet - Felhunter", + 197 => "Tailoring", + 202 => "Engineering", + 203 => "Pet - Spider", + 204 => "Pet - Voidwalker", + 205 => "Pet - Succubus", + 206 => "Pet - Infernal", + 207 => "Pet - Doomguard", + 208 => "Pet - Wolf", + 209 => "Pet - Cat", + 210 => "Pet - Bear", + 211 => "Pet - Boar", + 212 => "Pet - Crocilisk", + 213 => "Pet - Carrion Bird", + 214 => "Pet - Crab", + 215 => "Pet - Gorilla", + 217 => "Pet - Raptor", + 218 => "Pet - Tallstrider", + 220 => "Racial - Undead", + 226 => "Crossbows", + 228 => "Wands", + 229 => "Polearms", + 236 => "Pet - Scorpid", + 237 => "Arcane", + 251 => "Pet - Turtle", + 253 => "Assassination", + 256 => "Fury", + 257 => "Protection", + 261 => "Beast Training", + 267 => "Protection", + 270 => "Pet - Generic", + 293 => "Plate Mail", + 313 => "Language: Gnomish", + 315 => "Language: Troll", + 333 => "Enchanting", + 354 => "Demonology", + 355 => "Affliction", + 356 => "Fishing", + 373 => "Enhancement", + 374 => "Restoration", + 375 => "Elemental Combat", + 393 => "Skinning", + 413 => "Mail", + 414 => "Leather", + 415 => "Cloth", + 433 => "Shield", + 473 => "Fist Weapons", + 533 => "Raptor Riding", + 553 => "Mechanostrider Piloting", + 554 => "Undead Horsemanship", + 573 => "Restoration", + 574 => "Balance", + 593 => "Destruction", + 594 => "Holy", + 613 => "Discipline", + 633 => "Lockpicking", + 653 => "Pet - Bat", + 654 => "Pet - Hyena", + 655 => "Pet - Owl", + 656 => "Pet - Wind Serpent", + 673 => "Language: Gutterspeak", + 713 => "Kodo Riding", + 733 => "Racial - Troll", + 753 => "Racial - Gnome", + 754 => "Racial - Human", + 758 => "Pet - Event - Remote Control", + 762 => "Riding" +]; + +// lockID => type1..5, lockproperties1..5, requiredskill1..5 +$config['lock'] = [ + 2 => [2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 25, 0, 0, 0, 0], + 4 => [2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 50, 0, 0, 0, 0], + 5 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 1, 0, 0, 0], + 8 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 25, 0, 0, 0, 0], + 9 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 50, 0, 0, 0, 0], + 10 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 75, 0, 0, 0, 0], + 11 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 100, 0, 0, 0, 0], + 12 => [2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 13 => [0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 50, 0, 0, 0], + 14 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 15 => [1, 0, 0, 0, 0, 2629, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 17 => [2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 75, 0, 0, 0, 0], + 18 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 25, 0, 0, 0, 0], + 19 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 50, 0, 0, 0, 0], + 20 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 75, 0, 0, 0, 0], + 21 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 100, 0, 0, 0, 0], + 22 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 125, 0, 0, 0, 0], + 23 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 25, 0, 0, 0], + 24 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 70, 0, 0, 0], + 25 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 150, 0, 0, 0, 0], + 26 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 125, 0, 0, 0, 0], + 27 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 150, 0, 0, 0, 0], + 29 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 30 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0], + 31 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 70, 0, 0, 0, 0], + 32 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 115, 0, 0, 0, 0], + 33 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 120, 0, 0, 0, 0], + 34 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 130, 0, 0, 0, 0], + 35 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 140, 0, 0, 0, 0], + 36 => [1, 2, 2, 0, 0, 3467, 1, 0, 0, 0, 0, 100, 0, 0, 0], + 37 => [1, 2, 0, 0, 0, 3499, 1, 0, 0, 0, 0, 100, 0, 0, 0], + 38 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 39 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 65, 0, 0, 0, 0], + 40 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 75, 0, 0, 0, 0], + 41 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 125, 0, 0, 0, 0], + 42 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 155, 0, 0, 0, 0], + 43 => [0, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0], + 44 => [1, 0, 0, 0, 0, 3710, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 45 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 125, 0, 0, 0, 0], + 46 => [1, 0, 0, 0, 0, 3745, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 47 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 160, 0, 0, 0, 0], + 48 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 215, 0, 0, 0, 0], + 49 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 185, 0, 0, 0, 0], + 50 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 205, 0, 0, 0, 0], + 51 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 195, 0, 0, 0, 0], + 52 => [1, 2, 0, 0, 0, 3745, 1, 0, 0, 0, 0, 175, 0, 0, 0], + 53 => [1, 0, 0, 0, 0, 3930, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 54 => [1, 0, 0, 0, 0, 4027, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 55 => [0, 2, 0, 0, 0, 0, 4, 0, 0, 0, 0, 200, 0, 0, 0], + 56 => [0, 2, 2, 0, 0, 0, 5, 7, 0, 0, 0, 0, 0, 0, 0], + 57 => [0, 2, 2, 0, 0, 0, 5, 6, 0, 0, 0, 0, 0, 0, 0], + 58 => [1, 0, 0, 0, 0, 4529, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 59 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 60 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 125, 0, 0, 0], + 61 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 175, 0, 0, 0], + 62 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 225, 0, 0, 0], + 63 => [1, 0, 0, 0, 0, 4639, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 65 => [1, 0, 0, 0, 0, 4750, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 67 => [1, 0, 0, 0, 0, 4640, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 68 => [1, 2, 0, 0, 0, 4882, 1, 0, 0, 0, 0, 100, 0, 0, 0], + 69 => [1, 0, 0, 0, 0, 4986, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 70 => [1, 0, 0, 0, 0, 5020, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 71 => [1, 0, 0, 0, 0, 5021, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 72 => [1, 0, 0, 0, 0, 5059, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 73 => [1, 0, 0, 0, 0, 5068, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 75 => [1, 0, 0, 0, 0, 5165, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 76 => [1, 0, 0, 0, 0, 5185, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 77 => [0, 2, 2, 0, 0, 0, 10, 11, 0, 0, 0, 0, 0, 0, 0], + 80 => [1, 0, 0, 0, 0, 5338, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 81 => [0, 2, 2, 0, 0, 0, 10, 11, 0, 0, 0, 0, 0, 0, 0], + 82 => [0, 2, 2, 2, 0, 0, 1, 10, 11, 0, 0, 50, 0, 0, 0], + 83 => [1, 0, 0, 0, 0, 5397, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 84 => [1, 2, 0, 0, 0, 5396, 1, 0, 0, 0, 0, 225, 0, 0, 0], + 85 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 86 => [0, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], + 88 => [0, 2, 2, 0, 0, 0, 1, 10, 0, 0, 0, 50, 0, 0, 0], + 89 => [1, 0, 0, 0, 0, 5475, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 90 => [1, 0, 0, 0, 0, 5521, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 91 => [1, 0, 0, 0, 0, 5384, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 92 => [1, 2, 2, 0, 0, 6893, 1, 16, 0, 0, 0, 150, 150, 0, 0], + 93 => [0, 2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0], + 94 => [1, 0, 0, 0, 0, 5687, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 95 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 97 => [1, 2, 0, 0, 0, 5851, 1, 0, 0, 0, 0, 160, 0, 0, 0], + 98 => [1, 0, 0, 0, 0, 5868, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 99 => [0, 2, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0], + 119 => [1, 0, 0, 0, 0, 5916, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 139 => [1, 0, 0, 0, 0, 5937, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 159 => [1, 0, 0, 0, 0, 6074, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 179 => [0, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0], + 199 => [1, 1, 0, 0, 0, 6208, 6207, 0, 0, 0, 0, 0, 0, 0, 0], + 200 => [1, 1, 0, 0, 0, 6210, 6209, 0, 0, 0, 0, 0, 0, 0, 0], + 202 => [0, 2, 2, 2, 0, 0, 1, 10, 16, 0, 0, 1, 0, 50, 0], + 203 => [0, 2, 2, 2, 0, 0, 1, 10, 11, 0, 0, 1, 0, 0, 0], + 239 => [1, 0, 0, 0, 0, 6783, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 259 => [0, 2, 2, 0, 0, 0, 13, 2, 0, 0, 0, 0, 0, 0, 0], + 279 => [0, 2, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0], + 299 => [1, 2, 2, 2, 2, 7146, 1, 10, 11, 16, 0, 175, 0, 0, 175], + 319 => [1, 2, 2, 2, 0, 7208, 1, 5, 6, 0, 0, 1, 0, 0, 0], + 359 => [1, 0, 0, 0, 0, 7733, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 379 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 175, 0, 0, 0, 0], + 380 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 230, 0, 0, 0, 0], + 399 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 310, 0, 0, 0, 0], + 400 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 245, 0, 0, 0, 0], + 419 => [0, 2, 2, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, 0, 0], + 420 => [1, 0, 0, 0, 0, 8444, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 439 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 210, 0, 0, 0, 0], + 440 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 220, 0, 0, 0, 0], + 441 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 230, 0, 0, 0, 0], + 442 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 235, 0, 0, 0, 0], + 443 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 245, 0, 0, 0, 0], + 444 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 250, 0, 0, 0, 0], + 459 => [1, 0, 0, 0, 0, 9240, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 460 => [1, 0, 0, 0, 0, 9249, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 479 => [1, 0, 0, 0, 0, 9299, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 499 => [1, 0, 0, 0, 0, 9472, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 519 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 85, 0, 0, 0, 0], + 520 => [1, 0, 0, 0, 0, 10460, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 521 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 170, 0, 0, 0, 0], + 540 => [1, 0, 0, 0, 0, 10445, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 559 => [1, 0, 0, 0, 0, 10515, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 579 => [1, 0, 0, 0, 0, 10757, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 599 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 250, 0, 0, 0], + 600 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 275, 0, 0, 0], + 601 => [1, 0, 0, 0, 0, 10757, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 639 => [1, 0, 0, 0, 0, 11078, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 640 => [1, 0, 0, 0, 0, 11079, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 659 => [1, 0, 0, 0, 0, 11197, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 679 => [1, 0, 0, 0, 0, 11115, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 680 => [1, 2, 2, 2, 2, 11000, 1, 10, 11, 16, 0, 250, 0, 0, 250], + 699 => [1, 2, 2, 2, 2, 11140, 1, 10, 11, 16, 0, 250, 0, 0, 250], + 719 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 230, 0, 0, 0, 0], + 739 => [1, 0, 0, 0, 0, 11602, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 740 => [2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 759 => [1, 0, 0, 0, 0, 11000, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 779 => [1, 0, 0, 0, 0, 11833, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 799 => [1, 0, 0, 0, 0, 11885, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 820 => [1, 2, 2, 0, 0, 12344, 10, 11, 0, 0, 0, 0, 0, 0, 0], + 821 => [0, 1, 1, 0, 0, 0, 12144, 12286, 0, 0, 0, 0, 0, 0, 0], + 839 => [1, 0, 0, 0, 0, 12186, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 859 => [1, 0, 0, 0, 0, 12301, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 879 => [1, 2, 2, 2, 2, 12382, 1, 10, 11, 16, 0, 300, 0, 0, 300], + 899 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 920 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 939 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 275, 0, 0, 0, 0], + 959 => [1, 0, 0, 0, 0, 12785, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 960 => [1, 0, 0, 0, 0, 12814, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 979 => [1, 0, 0, 0, 0, 12891, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 999 => [1, 0, 0, 0, 0, 12906, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1019 => [1, 0, 0, 0, 0, 12942, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1039 => [1, 0, 0, 0, 0, 12973, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1059 => [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1079 => [1, 0, 0, 0, 0, 13302, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1080 => [1, 0, 0, 0, 0, 13303, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1081 => [1, 2, 0, 0, 0, 13304, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1082 => [1, 0, 0, 0, 0, 13305, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1083 => [1, 0, 0, 0, 0, 13306, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1084 => [1, 0, 0, 0, 0, 13307, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1085 => [0, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], + 1099 => [2, 2, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1119 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 260, 0, 0, 0, 0], + 1120 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 270, 0, 0, 0, 0], + 1121 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 280, 0, 0, 0, 0], + 1122 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 285, 0, 0, 0, 0], + 1123 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 290, 0, 0, 0, 0], + 1124 => [2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 300, 0, 0, 0, 0], + 1159 => [1, 2, 2, 2, 2, 13704, 1, 10, 11, 16, 0, 280, 0, 0, 300], + 1179 => [1, 0, 0, 0, 0, 13523, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1199 => [1, 0, 0, 0, 0, 13873, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1219 => [1, 0, 0, 0, 0, 14523, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1239 => [1, 0, 0, 0, 0, 14547, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1259 => [1, 0, 0, 0, 0, 15042, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1299 => [1, 0, 0, 0, 0, 15766, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1319 => [2, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1340 => [1, 0, 0, 0, 0, 16208, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1359 => [1, 0, 0, 0, 0, 16308, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1379 => [1, 0, 0, 0, 0, 16333, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1399 => [1, 0, 0, 0, 0, 16603, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1419 => [1, 0, 0, 0, 0, 17242, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1439 => [1, 0, 0, 0, 0, 17262, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1459 => [0, 1, 1, 0, 0, 0, 17333, 22754, 0, 0, 0, 0, 0, 0, 0], + 1479 => [0, 2, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0], + 1499 => [1, 0, 0, 0, 0, 17696, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1539 => [0, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], + 1559 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 110, 0, 0, 0], + 1560 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 150, 0, 0, 0], + 1561 => [0, 2, 2, 2, 0, 0, 1, 5, 6, 0, 0, 200, 0, 0, 0], + 1562 => [1, 2, 2, 2, 2, 18249, 1, 10, 11, 16, 0, 300, 0, 0, 300], + 1563 => [1, 0, 0, 0, 0, 18266, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1564 => [1, 2, 2, 2, 2, 18268, 1, 10, 11, 16, 0, 200, 0, 0, 200], + 1580 => [1, 0, 0, 0, 0, 18629, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1599 => [0, 2, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0], + 1619 => [1, 0, 0, 0, 0, 19931, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1620 => [0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5000, 0, 0, 0], + 1621 => [2, 0, 0, 0, 0, 19, 0, 0, 0, 0, 25, 0, 0, 0, 0], + 1622 => [1, 0, 0, 0, 0, 21172, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1623 => [1, 0, 0, 0, 0, 21174, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1624 => [2, 0, 0, 0, 0, 19, 0, 0, 0, 0, 50, 0, 0, 0, 0], + 1625 => [2, 0, 0, 0, 0, 19, 0, 0, 0, 0, 100, 0, 0, 0, 0], + 1626 => [2, 0, 0, 0, 0, 19, 0, 0, 0, 0, 175, 0, 0, 0, 0], + 1627 => [2, 0, 0, 0, 0, 19, 0, 0, 0, 0, 250, 0, 0, 0, 0], + 1628 => [2, 0, 0, 0, 0, 19, 0, 0, 0, 0, 375, 0, 0, 0, 0], + 1629 => [0, 1, 2, 2, 0, 0, 21761, 5, 6, 0, 0, 0, 0, 0, 0], + 1630 => [0, 1, 2, 2, 0, 0, 21762, 5, 6, 0, 0, 0, 0, 0, 0], + 1632 => [2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 305, 0, 0, 0, 0], + 1634 => [0, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], + 1635 => [0, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0], + 1636 => [1, 0, 0, 0, 0, 22486, 0, 0, 0, 0, 0, 0, 0, 0, 0], + 1647 => [1, 0, 0, 0, 0, 23055, 0, 0, 0, 0, 0, 0, 0, 0, 0] +]; + +$config['lock_type'] = [ + null, + "Lockpicking", + "Herbalism", + "Mining", + "Disarm Trap", + "Open", + "Treasure (DND)", + "Calcified Elven Gems (DND)", + "Close", + "Arm Trap", + "Quick Open", + "Quick Close", + "Open Tinkering", + "Open Kneeling", + "Open Attacking", + "Gahz'ridian (DND)" +]; \ No newline at end of file diff --git a/application/config/shared_dbc_enchants.php b/application/config/shared_dbc_enchants.php new file mode 100644 index 00000000..1c64f884 --- /dev/null +++ b/application/config/shared_dbc_enchants.php @@ -0,0 +1,1269 @@ + "Rockbiter 3", + 6 => "Rockbiter 2", + 24 => "Mana +5", + 28 => "+4 All Resistances", + 29 => "Rockbiter 1", + 31 => "Beastslaying +4", + 34 => "Counterweight +3% Attack Speed", + 37 => "Weapon Chain - Immune Disarm", + 38 => "Defense Skill +3", + 39 => "Sharpened +1", + 41 => "Health +5", + 43 => "Iron Spike (8-12)", + 44 => "Absorption (10)", + 63 => "Absorption (25)", + 64 => "Spirit +3", + 65 => "+1 All Resistances", + 66 => "Stamina +1", + 68 => "+1 Strength", + 69 => "+2 Strength", + 70 => "+3 Strength", + 71 => "+1 Stamina", + 72 => "+2 Stamina", + 73 => "+3 Stamina", + 74 => "+1 Agility", + 75 => "+2 Agility", + 76 => "+3 Agility", + 79 => "+1 Intellect", + 80 => "+2 Intellect", + 81 => "+3 Intellect", + 82 => "+1 Spirit", + 83 => "+2 Spirit", + 84 => "+3 Spirit", + 90 => "+4 Agility", + 91 => "+5 Agility", + 92 => "+6 Agility", + 93 => "+7 Agility", + 94 => "+4 Intellect", + 95 => "+5 Intellect", + 96 => "+6 Intellect", + 97 => "+7 Intellect", + 98 => "+4 Spirit", + 99 => "+5 Spirit", + 100 => "+6 Spirit", + 101 => "+7 Spirit", + 102 => "+4 Stamina", + 103 => "+5 Stamina", + 104 => "+6 Stamina", + 105 => "+7 Stamina", + 106 => "+4 Strength", + 107 => "+5 Strength", + 108 => "+6 Strength", + 109 => "+7 Strength", + 110 => "+1 Defense", + 111 => "+1 Defense", + 112 => "+2 Defense", + 113 => "+3 Defense", + 114 => "+3 Defense", + 115 => "+4 Defense", + 116 => "+5 Defense", + 125 => "Sword Skill +1", + 126 => "Sword Skill +2", + 127 => "Sword Skill +3", + 128 => "Sword Skill +4", + 129 => "Sword Skill +5", + 130 => "Sword Skill +6", + 131 => "Sword Skill +7", + 132 => "Two-Handed Sword Skill +1", + 133 => "Two-Handed Sword Skill +2", + 134 => "Two-Handed Sword Skill +3", + 135 => "Two-Handed Sword Skill +4", + 136 => "Two-Handed Sword Skill +5", + 137 => "Two-Handed Sword Skill +6", + 138 => "Two-Handed Sword Skill +7", + 139 => "Mace Skill +1", + 140 => "Mace Skill +2", + 141 => "Mace Skill +3", + 142 => "Mace Skill +4", + 143 => "Mace Skill +5", + 144 => "Mace Skill +6", + 145 => "Mace Skill +7", + 146 => "Two-Handed Mace Skill +1", + 147 => "Two-Handed Mace Skill +2", + 148 => "Two-Handed Mace Skill +3", + 149 => "Two-Handed Mace Skill +4", + 150 => "Two-Handed Mace Skill +5", + 151 => "Two-Handed Mace Skill +6", + 152 => "Two-Handed Mace Skill +7", + 153 => "Axe Skill +1", + 154 => "Axe Skill +2", + 155 => "Axe Skill +3", + 156 => "Axe Skill +4", + 157 => "Axe Skill +5", + 158 => "Ase Skill +6", + 159 => "Axe Skill +7", + 160 => "Two-Handed Axe Skill +1", + 161 => "Two-Handed Axe Skill +2", + 162 => "Two-Handed Axe Skill +3", + 163 => "Two-Handed Axe Skill +4", + 164 => "Two-Handed Axe Skill +5", + 165 => "Two-Handed Axe Skill +6", + 166 => "Two-Handed Axe Skill +7", + 167 => "Dagger Skill +1", + 168 => "Dagger Skill +2", + 169 => "Dagger Skill +3", + 170 => "Dagger Skill +4", + 171 => "Dagger Skill +5", + 172 => "Dagger Skill +6", + 173 => "Dagger Skill +7", + 174 => "Gun Skill +1", + 175 => "Gun Skill +2", + 176 => "Gun Skill +3", + 177 => "Gun Skill +4", + 178 => "Gun Skill +5", + 179 => "Gun Skill +6", + 180 => "Gun Skill +7", + 181 => "Bow Skill +1", + 182 => "Bow Skill +2", + 183 => "Bow Skill +3", + 184 => "Bow Skill +4", + 185 => "Bow Skill +5", + 186 => "Bow Skill +6", + 187 => "Bow Skill +7", + 188 => "+2 Beast Slaying", + 189 => "+4 Beast Slaying", + 190 => "+6 Beast Slaying", + 191 => "+8 Beast Slaying", + 192 => "+10 Beast Slaying", + 193 => "+12 Beast Slaying", + 194 => "+14 Beast Slaying", + 195 => "Critical Hit +1%", + 196 => "Critical Hit +2%", + 197 => "Critical Hit +3%", + 198 => "Critical Hit +4%", + 199 => "10% On Get Hit: Shadow Bolt (10 Damage)", + 200 => "10% On Get Hit: Shadow Bolt (20 Damage)", + 201 => "10% On Get Hit: Shadow Bolt (30 Damage)", + 202 => "10% On Get Hit: Shadow Bolt (40 Damage)", + 203 => "10% On Get Hit: Shadow Bolt (50 Damage)", + 204 => "10% On Get Hit: Shadow Bolt (60 Damage)", + 205 => "10% On Get Hit: Shadow Bolt (70 Damage)", + 206 => "Increases Healing +2", + 207 => "Increases Healing +4", + 208 => "Increases Healing +7", + 209 => "Increases Healing +9", + 210 => "Increases Healing +11", + 211 => "Increases Healing +13", + 212 => "Increases Healing +15", + 213 => "Increase Fire Effects +1", + 214 => "Increases Fire Effects +3", + 215 => "Increases Fire Effects +4", + 216 => "Increases Fire Effects +6", + 217 => "Increases Fire Effects +7", + 218 => "Increases Fire Damage +9", + 219 => "Increases Fire Damage +10", + 220 => "Increases Nature Effects +1", + 221 => "Increases Nature Effects +3", + 222 => "Increases Nature Effects +4", + 223 => "Increases Nature Effects +6", + 224 => "Increases Nature Effects +7", + 225 => "Increases Nature Effects +9", + 226 => "Increases Nature Effects +10", + 227 => "Increases Frost Effects +1", + 228 => "Increases Frost Effects +3", + 229 => "Increases Frost Effects +4", + 230 => "Increases Frost Effects +6", + 231 => "Increases Frost Effects +7", + 232 => "Increases Frost Effects +9", + 233 => "Increases Frost Effects +10", + 234 => "Increases Shadow Effects +1", + 235 => "Increases Shadow Effects +3", + 236 => "Increases Shadow Effects +4", + 237 => "Increases Shadow Effects +6", + 238 => "Increases Shadow Effects +7", + 239 => "Increases Shadow Effects +9", + 240 => "Increases Shadow Effects +10", + 242 => "Health +15", + 243 => "Spirit +1", + 244 => "Intellect +4", + 246 => "Mana +20", + 247 => "Agility +1", + 248 => "Strength +1", + 249 => "Beastslaying +2", + 251 => "Intellect +1", + 252 => "Spirit +6", + 253 => "Absorption (50)", + 254 => "Health +25", + 255 => "Spirit +3", + 256 => "+5 Fire Resistance", + 263 => "Fishing Lure +25", + 264 => "Fishing Lure +50", + 265 => "Fishing Lure +75", + 266 => "Fishing Lure +100", + 286 => "+2 Weapon Fire Damage", + 287 => "+4 Weapon Fire Damage", + 288 => "+6 Weapon Fire Damage", + 289 => "+8 Weapon Fire Damage", + 290 => "+10 Weapon Fire Damage", + 291 => "+12 Weapon Fire Damage", + 292 => "+14 Weapon Fire Damage", + 343 => "+8 Agility", + 349 => "+9 Agility", + 350 => "+8 Intellect", + 351 => "+8 Spirit", + 352 => "+8 Strength", + 353 => "+8 Stamina", + 354 => "+9 Intellect", + 355 => "+9 Spirit", + 356 => "+9 Stamina", + 357 => "+9 Strength", + 358 => "+10 Agility", + 359 => "+10 Intellect", + 360 => "+10 Spirit", + 361 => "+10 Stamina", + 362 => "+10 Strength", + 363 => "+11 Agility", + 364 => "+11 Intellect", + 365 => "+11 Spirit", + 366 => "+11 Stamina", + 367 => "+11 Strength", + 368 => "+12 Agility", + 369 => "+12 Intellect", + 370 => "+12 Spirit", + 371 => "+12 Stamina", + 372 => "+12 Strength", + 403 => "+13 Agility", + 404 => "+14 Agility", + 405 => "+13 Intellect", + 406 => "+14 Intellect", + 407 => "+13 Spirit", + 408 => "+14 Spirit", + 409 => "+13 Stamina", + 410 => "+13 Strength", + 411 => "+14 Stamina", + 412 => "+14 Strength", + 423 => "Increase Spell Damage +1", + 424 => "Increase Spell Damage +2", + 425 => "Increase Spell Damage +4", + 426 => "Increase Spell Damage +5", + 427 => "Increase Spell Damage +6", + 428 => "Increase Spell Damage +7", + 429 => "Increase Spell Damage +8", + 430 => "Increase Spell Damage +9", + 431 => "Increase Spell Damage +11", + 432 => "Increase Spell Damage +12", + 433 => "Increase Fire Damage +11", + 434 => "Increase Fire Damage +13", + 435 => "Increases Fire Damage +14", + 436 => "Critical Hit +5%", + 437 => "Increases Frost Effects +11", + 438 => "Increases Frost Effects +13", + 439 => "Increases Frost Effects +14", + 440 => "Increases Healing +12", + 441 => "Increases Healing +20", + 442 => "Increases Healing +22", + 443 => "Increases Nature Effects +11", + 444 => "Increases Nature Effects +13", + 445 => "Increases Nature Effects +14", + 446 => "Increases Shadow Effects +11", + 447 => "Increases Shadow Effects +13", + 448 => "Increases Shadow Effects +14", + 463 => "Mithril Spike (16-20)", + 464 => "Mithril Spurs", + 503 => "Rockbiter 4", + 683 => "Rockbiter 6", + 684 => "+15 Strength", + 723 => "Intellect +3", + 724 => "Stamina +3", + 743 => "Stealth +2", + 763 => "Block +1%", + 804 => "+10 Shadow Resistance", + 823 => "Strength +3", + 843 => "Mana +30", + 844 => "Mining +2", + 845 => "Herbalism +2", + 846 => "Fishing +2", + 847 => "All Stats +1", + 849 => "Agility +3", + 850 => "Health +35", + 851 => "Spirit +5", + 852 => "Stamina +5", + 853 => "Beastslaying +6", + 854 => "Elemental Slayer +6", + 855 => "+5 Fire Resistance", + 856 => "Strength +5", + 857 => "Mana +50", + 863 => "Blocking +2%", + 865 => "Skinning +5", + 866 => "All Stats +2", + 883 => "+15 Agility", + 903 => "+3 All Resistances", + 904 => "Agility +5", + 905 => "Intellect +5", + 906 => "Mining +5", + 907 => "Spirit +7", + 908 => "Health +50", + 909 => "Herbalism +5", + 910 => "Increased Stealth", + 911 => "Minor Speed Increase", + 913 => "Mana +65", + 923 => "Defense +3", + 924 => "Defense +1", + 925 => "Defense +2", + 926 => "+8 Frost Resistance", + 927 => "Strength +7", + 928 => "All Stats +3", + 929 => "Stamina +7", + 930 => "Minor Mount Speed Increase", + 931 => "Attack Speed +1%", + 983 => "+16 Agility", + 1043 => "+16 Strength", + 1044 => "+17 Strength", + 1045 => "+18 Strength", + 1046 => "+19 Strength", + 1047 => "+20 Strength", + 1048 => "+21 Strength", + 1049 => "+22 Strength", + 1050 => "+23 Strength", + 1051 => "+24 Strength", + 1052 => "+25 Strength", + 1053 => "+26 Strength", + 1054 => "+27 Strength", + 1055 => "+28 Strength", + 1056 => "+29 Strength", + 1057 => "+30 Strength", + 1058 => "+31 Strength", + 1059 => "+32 Strength", + 1060 => "+33 Strength", + 1061 => "+34 Strength", + 1062 => "+35 Strength", + 1063 => "+36 Strength", + 1064 => "+37 Strength", + 1065 => "+38 Strength", + 1066 => "+39 Strength", + 1067 => "+40 Strength", + 1068 => "+15 Stamina", + 1069 => "+16 Stamina", + 1070 => "+17 Stamina", + 1071 => "+18 Stamina", + 1072 => "+19 Stamina", + 1073 => "+20 Stamina", + 1074 => "+21 Stamina", + 1075 => "+22 Stamina", + 1076 => "+23 Stamina", + 1077 => "+24 Stamina", + 1078 => "+25 Stamina", + 1079 => "+26 Stamina", + 1080 => "+27 Stamina", + 1081 => "+28 Stamina", + 1082 => "+29 Stamina", + 1083 => "+30 Stamina", + 1084 => "+31 Stamina", + 1085 => "+32 Stamina", + 1086 => "+33 Stamina", + 1087 => "+34 Stamina", + 1088 => "+35 Stamina", + 1089 => "+36 Stamina", + 1090 => "+37 Stamina", + 1091 => "+38 Stamina", + 1092 => "+39 Stamina", + 1093 => "+40 Stamina", + 1094 => "+17 Agility", + 1095 => "+18 Agility", + 1096 => "+19 Agility", + 1097 => "+20 Agility", + 1098 => "+21 Agility", + 1099 => "+22 Agility", + 1100 => "+23 Agility", + 1101 => "+24 Agility", + 1102 => "+25 Agility", + 1103 => "+26 Agility", + 1104 => "+27 Agility", + 1105 => "+28 Agility", + 1106 => "+29 Agility", + 1107 => "+30 Agility", + 1108 => "+31 Agility", + 1109 => "+32 Agility", + 1110 => "+33 Agility", + 1111 => "+34 Agility", + 1112 => "+35 Agility", + 1113 => "+36 Agility", + 1114 => "+37 Agility", + 1115 => "+38 Agility", + 1116 => "+39 Agility", + 1117 => "+40 Agility", + 1118 => "+15 Intellect", + 1119 => "+16 Intellect", + 1120 => "+17 Intellect", + 1121 => "+18 Intellect", + 1122 => "+19 Intellect", + 1123 => "+20 Intellect", + 1124 => "+21 Intellect", + 1125 => "+22 Intellect", + 1126 => "+23 Intellect", + 1127 => "+24 Intellect", + 1128 => "+25 Intellect", + 1129 => "+26 Intellect", + 1130 => "+27 Intellect", + 1131 => "+28 Intellect", + 1132 => "+29 Intellect", + 1133 => "+30 Intellect", + 1134 => "+31 Intellect", + 1135 => "+32 Intellect", + 1136 => "+33 Intellect", + 1137 => "+34 Intellect", + 1138 => "+35 Intellect", + 1139 => "+36 Intellect", + 1140 => "+37 Intellect", + 1141 => "+38 Intellect", + 1142 => "+39 Intellect", + 1143 => "+40 Intellect", + 1144 => "+15 Spirit", + 1145 => "+16 Spirit", + 1146 => "+17 Spirit", + 1147 => "+18 Spirit", + 1148 => "+19 Spirit", + 1149 => "+20 Spirit", + 1150 => "+21 Spirit", + 1151 => "+22 Spirit", + 1152 => "+23 Spirit", + 1153 => "+24 Spirit", + 1154 => "+25 Spirit", + 1155 => "+26 Spirit", + 1156 => "+27 Spirit", + 1157 => "+28 Spirit", + 1158 => "+29 Spirit", + 1159 => "+30 Spirit", + 1160 => "+31 Spirit", + 1161 => "+32 Spirit", + 1162 => "+33 Spirit", + 1163 => "+34 Spirit", + 1164 => "+36 Spirit", + 1165 => "+37 Spirit", + 1166 => "+38 Spirit", + 1167 => "+39 Spirit", + 1168 => "+40 Spirit", + 1183 => "+35 Spirit", + 1203 => "+41 Strength", + 1204 => "+42 Strength", + 1205 => "+43 Strength", + 1206 => "+44 Strength", + 1207 => "+45 Strength", + 1208 => "+46 Strength", + 1209 => "+41 Stamina", + 1210 => "+42 Stamina", + 1211 => "+43 Stamina", + 1212 => "+44 Stamina", + 1213 => "+45 Stamina", + 1214 => "+46 Stamina", + 1215 => "+41 Agility", + 1216 => "+42 Agility", + 1217 => "+43 Agility", + 1218 => "+44 Agility", + 1219 => "+45 Agility", + 1220 => "+46 Agility", + 1221 => "+41 Intellect", + 1222 => "+42 Intellect", + 1223 => "+43 Intellect", + 1224 => "+44 Intellect", + 1225 => "+45 Intellect", + 1226 => "+46 Intellect", + 1227 => "+41 Spirit", + 1228 => "+42 Spirit", + 1229 => "+43 Spirit", + 1230 => "+44 Spirit", + 1231 => "+45 Spirit", + 1232 => "+46 Spirit", + 1243 => "+1 Arcane Resistance", + 1244 => "+2 Arcane Resistance", + 1245 => "+3 Arcane Resistance", + 1246 => "+4 Arcane Resistance", + 1247 => "+5 Arcane Resistance", + 1248 => "+6 Arcane Resistance", + 1249 => "+7 Arcane Resistance", + 1250 => "+8 Arcane Resistance", + 1251 => "+9 Arcane Resistance", + 1252 => "+10 Arcane Resistance", + 1253 => "+11 Arcane Resistance", + 1254 => "+12 Arcane Resistance", + 1255 => "+13 Arcane Resistance", + 1256 => "+14 Arcane Resistance", + 1257 => "+15 Arcane Resistance", + 1258 => "+16 Arcane Resistance", + 1259 => "+17 Arcane Resistance", + 1260 => "+18 Arcane Resistance", + 1261 => "+19 Arcane Resistance", + 1262 => "+20 Arcane Resistance", + 1263 => "+21 Arcane Resistance", + 1264 => "+22 Arcane Resistance", + 1265 => "+23 Arcane Resistance", + 1266 => "+24 Arcane Resistance", + 1267 => "+25 Arcane Resistance", + 1268 => "+26 Arcane Resistance", + 1269 => "+27 Arcane Resistance", + 1270 => "+28 Arcane Resistance", + 1271 => "+29 Arcane Resistance", + 1272 => "+30 Arcane Resistance", + 1273 => "+31 Arcane Resistance", + 1274 => "+32 Arcane Resistance", + 1275 => "+33 Arcane Resistance", + 1276 => "+34 Arcane Resistance", + 1277 => "+35 Arcane Resistance", + 1278 => "+36 Arcane Resistance", + 1279 => "+37 Arcane Resistance", + 1280 => "+38 Arcane Resistance", + 1281 => "+39 Arcane Resistance", + 1282 => "+40 Arcane Resistance", + 1283 => "+41 Arcane Resistance", + 1284 => "+42 Arcane Resistance", + 1285 => "+43 Arcane Resistance", + 1286 => "+44 Arcane Resistance", + 1287 => "+45 Arcane Resistance", + 1288 => "+46 Arcane Resistance", + 1289 => "+1 Frost Resistance", + 1290 => "+2 Frost Resistance", + 1291 => "+3 Frost Resistance", + 1292 => "+4 Frost Resistance", + 1293 => "+5 Frost Resistance", + 1294 => "+6 Frost Resistance", + 1295 => "+7 Frost Resistance", + 1296 => "+8 Frost Resistance", + 1297 => "+9 Frost Resistance", + 1298 => "+10 Frost Resistance", + 1299 => "+11 Frost Resistance", + 1300 => "+12 Frost Resistance", + 1301 => "+13 Frost Resistance", + 1302 => "+14 Frost Resistance", + 1303 => "+15 Frost Resistance", + 1304 => "+16 Frost Resistance", + 1305 => "+17 Frost Resistance", + 1306 => "+18 Frost Resistance", + 1307 => "+19 Frost Resistance", + 1308 => "+20 Frost Resistance", + 1309 => "+21 Frost Resistance", + 1310 => "+22 Frost Resistance", + 1311 => "+23 Frost Resistance", + 1312 => "+24 Frost Resistance", + 1313 => "+25 Frost Resistance", + 1314 => "+26 Frost Resistance", + 1315 => "+27 Frost Resistance", + 1316 => "+28 Frost Resistance", + 1317 => "+29 Frost Resistance", + 1318 => "+30 Frost Resistance", + 1319 => "+31 Frost Resistance", + 1320 => "+32 Frost Resistance", + 1321 => "+33 Frost Resistance", + 1322 => "+34 Frost Resistance", + 1323 => "+35 Frost Resistance", + 1324 => "+36 Frost Resistance", + 1325 => "+37 Frost Resistance", + 1326 => "+38 Frost Resistance", + 1327 => "+39 Frost Resistance", + 1328 => "+40 Frost Resistance", + 1329 => "+41 Frost Resistance", + 1330 => "+42 Frost Resistance", + 1331 => "+43 Frost Resistance", + 1332 => "+44 Frost Resistance", + 1333 => "+45 Frost Resistance", + 1334 => "+46 Frost Resistance", + 1335 => "+1 Fire Resistance", + 1336 => "+2 Fire Resistance", + 1337 => "+3 Fire Resistance", + 1338 => "+4 Fire Resistance", + 1339 => "+5 Fire Resistance", + 1340 => "+6 Fire Resistance", + 1341 => "+7 Fire Resistance", + 1342 => "+8 Fire Resistance", + 1343 => "+9 Fire Resistance", + 1344 => "+10 Fire Resistance", + 1345 => "+11 Fire Resistance", + 1346 => "+12 Fire Resistance", + 1347 => "+13 Fire Resistance", + 1348 => "+14 Fire Resistance", + 1349 => "+15 Fire Resistance", + 1350 => "+16 Fire Resistance", + 1351 => "+17 Fire Resistance", + 1352 => "+18 Fire Resistance", + 1353 => "+19 Fire Resistance", + 1354 => "+20 Fire Resistance", + 1355 => "+21 Fire Resistance", + 1356 => "+22 Fire Resistance", + 1357 => "+23 Fire Resistance", + 1358 => "+24 Fire Resistance", + 1359 => "+25 Fire Resistance", + 1360 => "+26 Fire Resistance", + 1361 => "+27 Fire Resistance", + 1362 => "+28 Fire Resistance", + 1363 => "+29 Fire Resistance", + 1364 => "+30 Fire Resistance", + 1365 => "+31 Fire Resistance", + 1366 => "+32 Fire Resistance", + 1367 => "+33 Fire Resistance", + 1368 => "+34 Fire Resistance", + 1369 => "+35 Fire Resistance", + 1370 => "+36 Fire Resistance", + 1371 => "+37 Fire Resistance", + 1372 => "+38 Fire Resistance", + 1373 => "+39 Fire Resistance", + 1374 => "+40 Fire Resistance", + 1375 => "+41 Fire Resistance", + 1376 => "+42 Fire Resistance", + 1377 => "+43 Fire Resistance", + 1378 => "+44 Fire Resistance", + 1379 => "+45 Fire Resistance", + 1380 => "+46 Fire Resistance", + 1381 => "+1 Nature Resistance", + 1382 => "+2 Nature Resistance", + 1383 => "+3 Nature Resistance", + 1384 => "+4 Nature Resistance", + 1385 => "+5 Nature Resistance", + 1386 => "+6 Nature Resistance", + 1387 => "+7 Nature Resistance", + 1388 => "+8 Nature Resistance", + 1389 => "+9 Nature Resistance", + 1390 => "+10 Nature Resistance", + 1391 => "+11 Nature Resistance", + 1392 => "+12 Nature Resistance", + 1393 => "+13 Nature Resistance", + 1394 => "+14 Nature Resistance", + 1395 => "+15 Nature Resistance", + 1396 => "+16 Nature Resistance", + 1397 => "+17 Nature Resistance", + 1398 => "+18 Nature Resistance", + 1399 => "+19 Nature Resistance", + 1400 => "+20 Nature Resistance", + 1401 => "+21 Nature Resistance", + 1402 => "+22 Nature Resistance", + 1403 => "+23 Nature Resistance", + 1404 => "+24 Nature Resistance", + 1405 => "+25 Nature Resistance", + 1406 => "+26 Nature Resistance", + 1407 => "+27 Nature Resistance", + 1408 => "+28 Nature Resistance", + 1409 => "+29 Nature Resistance", + 1410 => "+30 Nature Resistance", + 1411 => "+31 Nature Resistance", + 1412 => "+32 Nature Resistance", + 1413 => "+33 Nature Resistance", + 1414 => "+34 Nature Resistance", + 1415 => "+35 Nature Resistance", + 1416 => "+36 Nature Resistance", + 1417 => "+37 Nature Resistance", + 1418 => "+38 Nature Resistance", + 1419 => "+39 Nature Resistance", + 1420 => "+40 Nature Resistance", + 1421 => "+41 Nature Resistance", + 1422 => "+42 Nature Resistance", + 1423 => "+43 Nature Resistance", + 1424 => "+44 Nature Resistance", + 1425 => "+45 Nature Resistance", + 1426 => "+46 Nature Resistance", + 1427 => "+1 Shadow Resistance", + 1428 => "+2 Shadow Resistance", + 1429 => "+3 Shadow Resistance", + 1430 => "+4 Shadow Resistance", + 1431 => "+5 Shadow Resistance", + 1432 => "+6 Shadow Resistance", + 1433 => "+7 Shadow Resistance", + 1434 => "+8 Shadow Resistance", + 1435 => "+9 Shadow Resistance", + 1436 => "+10 Shadow Resistance", + 1437 => "+11 Shadow Resistance", + 1438 => "+12 Shadow Resistance", + 1439 => "+13 Shadow Resistance", + 1440 => "+14 Shadow Resistance", + 1441 => "+15 Shadow Resistance", + 1442 => "+16 Shadow Resistance", + 1443 => "+17 Shadow Resistance", + 1444 => "+18 Shadow Resistance", + 1445 => "+19 Shadow Resistance", + 1446 => "+20 Shadow Resistance", + 1447 => "+21 Shadow Resistance", + 1448 => "+22 Shadow Resistance", + 1449 => "+23 Shadow Resistance", + 1450 => "+24 Shadow Resistance", + 1451 => "+25 Shadow Resistance", + 1452 => "+26 Resist Shadow", + 1453 => "+27 Shadow Resistance", + 1454 => "+28 Shadow Resistance", + 1455 => "+29 Shadow Resistance", + 1456 => "+30 Shadow Resistance", + 1457 => "+31 Shadow Resistance", + 1458 => "+32 Shadow Resistance", + 1459 => "+33 Shadow Resistance", + 1460 => "+34 Shadow Resistance", + 1461 => "+35 Shadow Resistance", + 1462 => "+36 Shadow Resistance", + 1463 => "+37 Shadow Resistance", + 1464 => "+38 Shadow Resistance", + 1465 => "+39 Shadow Resistance", + 1466 => "+40 Shadow Resistance", + 1467 => "+41 Shadow Resistance", + 1468 => "+42 Shadow Resistance", + 1469 => "+43 Shadow Resistance", + 1470 => "+44 Shadow Resistance", + 1471 => "+45 Shadow Resistance", + 1472 => "+46 Shadow Resistance", + 1483 => "Mana +150", + 1503 => "HP +100", + 1504 => "Armor +125", + 1505 => "+20 Fire Resistance", + 1506 => "Strength +8", + 1507 => "Stamina +8", + 1508 => "Agility +8", + 1509 => "Intellect +8", + 1510 => "Spirit +8", + 1523 => "MANA/FR +85/14", + 1524 => "HP/FR +75/14", + 1525 => "AC/FR +110/14", + 1526 => "STR/FR +10/14", + 1527 => "STA/FR +10/14", + 1528 => "AGI/FR +10/14", + 1529 => "INT/FR +10/14", + 1530 => "SPI/FR +10/14", + 1531 => "STR/STA +10/10", + 1563 => "+2 Attack Power", + 1583 => "+4 Attack Power", + 1584 => "+6 Attack Power", + 1585 => "+8 Attack Power", + 1586 => "+10 Attack Power", + 1587 => "+12 Attack Power", + 1588 => "+14 Attack Power", + 1589 => "+16 Attack Power", + 1590 => "+18 Attack Power", + 1591 => "+20 Attack Power", + 1592 => "+22 Attack Power", + 1593 => "+24 Attack Power", + 1594 => "+26 Attack Power", + 1595 => "+28 Attack Power", + 1596 => "+30 Attack Power", + 1597 => "+32 Attack Power", + 1598 => "+34 Attack Power", + 1599 => "+36 Attack Power", + 1600 => "+38 Attack Power", + 1601 => "+40 Attack Power", + 1602 => "+42 Attack Power", + 1603 => "+44 Attack Power", + 1604 => "+46 Attack Power", + 1605 => "+48 Attack Power", + 1606 => "+50 Attack Power", + 1607 => "+52 Attack Power", + 1608 => "+54 Attack Power", + 1609 => "+56 Attack Power", + 1610 => "+58 Attack Power", + 1611 => "+60 Attack Power", + 1612 => "+62 Attack Power", + 1613 => "+64 Attack Power", + 1614 => "+66 Attack Power", + 1615 => "+68 Attack Power", + 1616 => "+70 Attack Power", + 1617 => "+72 Attack Power", + 1618 => "+74 Attack Power", + 1619 => "+76 Attack Power", + 1620 => "+78 Attack Power", + 1621 => "+80 Attack Power", + 1622 => "+82 Attack Power", + 1623 => "+84 Attack Power", + 1624 => "+86 Attack Power", + 1625 => "+88 Attack Power", + 1626 => "+90 Attack Power", + 1627 => "+92 Attack Power", + 1663 => "Rockbiter 5", + 1664 => "Rockbiter 7", + 1704 => "Thorium Spike (20-30)", + 1883 => "Intellect +7", + 1884 => "Spirit +9", + 1885 => "Strength +9", + 1886 => "Stamina +9", + 1887 => "Agility +7", + 1888 => "+5 All Resistances", + 1890 => "Spirit +9", + 1891 => "All Stats +4", + 1892 => "Health +100", + 1893 => "Mana +100", + 1901 => "Intellect +9", + 1903 => "Spirit +9", + 1904 => "Intellect +9", + 1923 => "+3 Fire Resistance", + 1943 => "+8 Defense", + 1944 => "+5 Defense", + 1945 => "+6 Defense", + 1946 => "+7 Defense", + 1947 => "+7 Defense", + 1948 => "+9 Defense", + 1949 => "+9 Defense", + 1950 => "+10 Defense", + 1951 => "+11 Defense", + 1952 => "+13 Defense", + 1953 => "+15 Defense", + 1954 => "+17 Defense", + 1955 => "+21 Defense", + 1956 => "+11 Defense", + 1957 => "+12 Defense", + 1958 => "+13 Defense", + 1959 => "+14 Defense", + 1960 => "+15 Defense", + 1961 => "+16 Defense", + 1962 => "+17 Defense", + 1963 => "+18 Defense", + 1964 => "+19 Defense", + 1965 => "+19 Defense", + 1966 => "+20 Defense", + 1967 => "+21 Defense", + 1968 => "+22 Defense", + 1969 => "+23 Defense", + 1970 => "+23 Defense", + 1971 => "+24 Defense", + 1972 => "+25 Defense", + 1973 => "+25 Defense", + 1983 => "+1% Block", + 1984 => "+2% Block", + 1985 => "+3% Block", + 1986 => "+4% Block", + 2040 => "+2 Ranged Attack Power", + 2041 => "+5 Ranged Attack Power", + 2042 => "+7 Ranged Attack Power", + 2043 => "+10 Ranged Attack Power", + 2044 => "+12 Ranged Attack Power", + 2045 => "+14 Ranged Attack Power", + 2046 => "+17 Ranged Attack Power", + 2047 => "+19 Ranged Attack Power", + 2048 => "+22 Ranged Attack Power", + 2049 => "+24 Ranged Attack Power", + 2050 => "+26 Ranged Attack Power", + 2051 => "+29 Ranged Attack Power", + 2052 => "+31 Ranged Attack Power", + 2053 => "+34 Ranged Attack Power", + 2054 => "+36 Ranged Attack Power", + 2055 => "+38 Ranged Attack Power", + 2056 => "+41 Ranged Attack Power", + 2057 => "+43 Ranged Attack Power", + 2058 => "+46 Ranged Attack Power", + 2059 => "+48 Ranged Attack Power", + 2060 => "+50 Ranged Attack Power", + 2061 => "+53 Ranged Attack Power", + 2062 => "+55 Ranged Attack Power", + 2063 => "+58 Ranged Attack Power", + 2064 => "+60 Ranged Attack Power", + 2065 => "+62 Ranged Attack Power", + 2066 => "+65 Ranged Attack Power", + 2067 => "+67 Ranged Attack Power", + 2068 => "+70 Ranged Attack Power", + 2069 => "+72 Ranged Attack Power", + 2070 => "+74 Ranged Attack Power", + 2071 => "+77 Ranged Attack Power", + 2072 => "+79 Ranged Attack Power", + 2073 => "+82 Ranged Attack Power", + 2074 => "+84 Ranged Attack Power", + 2075 => "+86 Ranged Attack Power", + 2076 => "+89 Ranged Attack Power", + 2077 => "+91 Ranged Attack Power", + 2078 => "+1% Dodge", + 2079 => "+1 Arcane Spell Damage", + 2080 => "+3 Arcane Spell Damage", + 2081 => "+4 Arcane Spell Damage", + 2082 => "+6 Arcane Spell Damage", + 2083 => "+7 Arcane Spell Damage", + 2084 => "+9 Arcane Spell Damage", + 2085 => "+10 Arcane Spell Damage", + 2086 => "+11 Arcane Spell Damage", + 2087 => "+13 Arcane Spell Damage", + 2088 => "+14 Arcane Spell Damage", + 2089 => "+16 Arcane Spell Damage", + 2090 => "+17 Arcane Spell Damage", + 2091 => "+19 Arcane Spell Damage", + 2092 => "+20 Arcane Spell Damage", + 2093 => "+21 Arcane Spell Damage", + 2094 => "+23 Arcane Spell Damage", + 2095 => "+24 Arcane Spell Damage", + 2096 => "+26 Arcane Spell Damage", + 2097 => "+27 Arcane Spell Damage", + 2098 => "+29 Arcane Spell Damage", + 2099 => "+30 Arcane Spell Damage", + 2100 => "+31 Arcane Spell Damage", + 2101 => "+33 Arcane Spell Damage", + 2102 => "+34 Arcane Spell Damage", + 2103 => "+36 Arcane Spell Damage", + 2104 => "+37 Arcane Spell Damage", + 2105 => "+39 Arcane Spell Damage", + 2106 => "+40 Arcane Spell Damage", + 2107 => "+41 Arcane Spell Damage", + 2108 => "+43 Arcane Spell Damage", + 2109 => "+44 Arcane Spell Damage", + 2110 => "+46 Arcane Spell Damage", + 2111 => "+47 Arcane Spell Damage", + 2112 => "+49 Arcane Spell Damage", + 2113 => "+50 Arcane Spell Damage", + 2114 => "+51 Arcane Spell Damage", + 2115 => "+53 Arcane Spell Damage", + 2116 => "+54 Arcane Spell Damage", + 2117 => "+1 Shadow Spell Damage", + 2118 => "+3 Shadow Spell Damage", + 2119 => "+4 Shadow Spell Damage", + 2120 => "+6 Shadow Spell Damage", + 2121 => "+7 Shadow Spell Damage", + 2122 => "+9 Shadow Spell Damage", + 2123 => "+10 Shadow Spell Damage", + 2124 => "+11 Shadow Spell Damage", + 2125 => "+13 Shadow Spell Damage", + 2126 => "+14 Shadow Spell Damage", + 2127 => "+16 Shadow Spell Damage", + 2128 => "+17 Shadow Spell Damage", + 2129 => "+19 Shadow Spell Damage", + 2130 => "+20 Shadow Spell Damage", + 2131 => "+21 Shadow Spell Damage", + 2132 => "+23 Shadow Spell Damage", + 2133 => "+24 Shadow Spell Damage", + 2134 => "+26 Shadow Spell Damage", + 2135 => "+27 Shadow Spell Damage", + 2136 => "+29 Shadow Spell Damage", + 2137 => "+30 Shadow Spell Damage", + 2138 => "+31 Shadow Spell Damage", + 2139 => "+33 Shadow Spell Damage", + 2140 => "+34 Shadow Spell Damage", + 2141 => "+36 Shadow Spell Damage", + 2142 => "+37 Shadow Spell Damage", + 2143 => "+39 Shadow Spell Damage", + 2144 => "+40 Shadow Spell Damage", + 2145 => "+41 Shadow Spell Damage", + 2146 => "+43 Shadow Spell Damage", + 2147 => "+44 Shadow Spell Damage", + 2148 => "+46 Shadow Spell Damage", + 2149 => "+47 Shadow Spell Damage", + 2150 => "+49 Shadow Spell Damage", + 2151 => "+50 Shadow Spell Damage", + 2152 => "+51 Shadow Spell Damage", + 2153 => "+53 Shadow Spell Damage", + 2154 => "+54 Shadow Spell Damage", + 2155 => "+1 Fire Spell Damage", + 2156 => "+3 Fire Spell Damage", + 2157 => "+4 Fire Spell Damage", + 2158 => "+6 Fire Spell Damage", + 2159 => "+7 Fire Spell Damage", + 2160 => "+9 Fire Spell Damage", + 2161 => "+10 Fire Spell Damage", + 2162 => "+11 Fire Spell Damage", + 2163 => "+13 Fire Spell Damage", + 2164 => "+14 Fire Spell Damage", + 2165 => "+16 Fire Spell Damage", + 2166 => "+17 Fire Spell Damage", + 2167 => "+19 Fire Spell Damage", + 2168 => "+20 Fire Spell Damage", + 2169 => "+21 Fire Spell Damage", + 2170 => "+23 Fire Spell Damage", + 2171 => "+24 Fire Spell Damage", + 2172 => "+26 Fire Spell Damage", + 2173 => "+27 Fire Spell Damage", + 2174 => "+29 Fire Spell Damage", + 2175 => "+30 Fire Spell Damage", + 2176 => "+31 Fire Spell Damage", + 2177 => "+33 Fire Spell Damage", + 2178 => "+34 Fire Spell Damage", + 2179 => "+36 Fire Spell Damage", + 2180 => "+37 Fire Spell Damage", + 2181 => "+39 Fire Spell Damage", + 2182 => "+40 Fire Spell Damage", + 2183 => "+41 Fire Spell Damage", + 2184 => "+43 Fire Spell Damage", + 2185 => "+44 Fire Spell Damage", + 2186 => "+46 Fire Spell Damage", + 2187 => "+47 Fire Spell Damage", + 2188 => "+49 Fire Spell Damage", + 2189 => "+50 Fire Spell Damage", + 2190 => "+51 Fire Spell Damage", + 2191 => "+53 Fire Spell Damage", + 2192 => "+54 Fire Spell Damage", + 2193 => "+1 Holy Spell Damage", + 2194 => "+3 Holy Spell Damage", + 2195 => "+4 Holy Spell Damage", + 2196 => "+6 Holy Spell Damage", + 2197 => "+7 Holy Spell Damage", + 2198 => "+9 Holy Spell Damage", + 2199 => "+10 Holy Spell Damage", + 2200 => "+11 Holy Spell Damage", + 2201 => "+13 Holy Spell Damage", + 2202 => "+14 Holy Spell Damage", + 2203 => "+16 Holy Spell Damage", + 2204 => "+17 Holy Spell Damage", + 2205 => "+19 Holy Spell Damage", + 2206 => "+20 Holy Spell Damage", + 2207 => "+21 Holy Spell Damage", + 2208 => "+23 Holy Spell Damage", + 2209 => "+24 Holy Spell Damage", + 2210 => "+26 Holy Spell Damage", + 2211 => "+27 Holy Spell Damage", + 2212 => "+29 Holy Spell Damage", + 2213 => "+30 Holy Spell Damage", + 2214 => "+31 Holy Spell Damage", + 2215 => "+33 Holy Spell Damage", + 2216 => "+34 Holy Spell Damage", + 2217 => "+36 Holy Spell Damage", + 2218 => "+37 Holy Spell Damage", + 2219 => "+39 Holy Spell Damage", + 2220 => "+40 Holy Spell Damage", + 2221 => "+41 Holy Spell Damage", + 2222 => "+43 Holy Spell Damage", + 2223 => "+44 Holy Spell Damage", + 2224 => "+46 Holy Spell Damage", + 2225 => "+47 Holy Spell Damage", + 2226 => "+49 Holy Spell Damage", + 2227 => "+50 Holy Spell Damage", + 2228 => "+51 Holy Spell Damage", + 2229 => "+53 Holy Spell Damage", + 2230 => "+54 Holy Spell Damage", + 2231 => "+1 Frost Spell Damage", + 2232 => "+3 Frost Spell Damage", + 2233 => "+4 Frost Spell Damage", + 2234 => "+6 Frost Spell Damage", + 2235 => "+7 Frost Spell Damage", + 2236 => "+9 Frost Spell Damage", + 2237 => "+10 Frost Spell Damage", + 2238 => "+11 Frost Spell Damage", + 2239 => "+13 Frost Spell Damage", + 2240 => "+14 Frost Spell Damage", + 2241 => "+16 Frost Spell Damage", + 2242 => "+17 Frost Spell Damage", + 2243 => "+19 Frost Spell Damage", + 2244 => "+20 Frost Spell Damage", + 2245 => "+21 Frost Spell Damage", + 2246 => "+23 Frost Spell Damage", + 2247 => "+24 Frost Spell Damage", + 2248 => "+26 Frost Spell Damage", + 2249 => "+27 Frost Spell Damage", + 2250 => "+29 Frost Spell Damage", + 2251 => "+30 Frost Spell Damage", + 2252 => "+31 Frost Spell Damage", + 2253 => "+33 Frost Spell Damage", + 2254 => "+34 Frost Spell Damage", + 2255 => "+36 Frost Spell Damage", + 2256 => "+37 Frost Spell Damage", + 2257 => "+39 Frost Spell Damage", + 2258 => "+40 Frost Spell Damage", + 2259 => "+41 Frost Spell Damage", + 2260 => "+43 Frost Spell Damage", + 2261 => "+44 Frost Spell Damage", + 2262 => "+46 Frost Spell Damage", + 2263 => "+47 Frost Spell Damage", + 2264 => "+49 Frost Spell Damage", + 2265 => "+50 Frost Spell Damage", + 2266 => "+51 Frost Spell Damage", + 2267 => "+53 Frost Spell Damage", + 2268 => "+54 Frost Spell Damage", + 2269 => "+1 Nature Spell Damage", + 2270 => "+3 Nature Spell Damage", + 2271 => "+4 Nature Spell Damage", + 2272 => "+6 Nature Spell Damage", + 2273 => "+7 Nature Spell Damage", + 2274 => "+9 Nature Spell Damage", + 2275 => "+10 Nature Spell Damage", + 2276 => "+11 Nature Spell Damage", + 2277 => "+13 Nature Spell Damage", + 2278 => "+14 Nature Spell Damage", + 2279 => "+16 Nature Spell Damage", + 2280 => "+17 Nature Spell Damage", + 2281 => "+19 Nature Spell Damage", + 2282 => "+20 Nature Spell Damage", + 2283 => "+21 Nature Spell Damage", + 2284 => "+23 Nature Spell Damage", + 2285 => "+24 Nature Spell Damage", + 2286 => "+26 Nature Spell Damage", + 2287 => "+27 Nature Spell Damage", + 2288 => "+29 Nature Spell Damage", + 2289 => "+30 Nature Spell Damage", + 2290 => "+31 Nature Spell Damage", + 2291 => "+33 Nature Spell Damage", + 2292 => "+34 Nature Spell Damage", + 2293 => "+36 Nature Spell Damage", + 2294 => "+37 Nature Spell Damage", + 2295 => "+39 Nature Spell Damage", + 2296 => "+40 Nature Spell Damage", + 2297 => "+41 Nature Spell Damage", + 2298 => "+43 Nature Spell Damage", + 2299 => "+44 Nature Spell Damage", + 2300 => "+46 Nature Spell Damage", + 2301 => "+47 Nature Spell Damage", + 2302 => "+49 Nature Spell Damage", + 2303 => "+50 Nature Spell Damage", + 2304 => "+51 Nature Spell Damage", + 2305 => "+53 Nature Spell Damage", + 2306 => "+54 Nature Spell Damage", + 2307 => "+2 Healing Spells", + 2308 => "+4 Healing Spells", + 2309 => "+7 Healing Spells", + 2310 => "+9 Healing Spells", + 2311 => "+11 Healing Spells", + 2312 => "+13 Healing Spells", + 2313 => "+15 Healing Spells", + 2314 => "+18 Healing Spells", + 2315 => "+20 Healing Spells", + 2316 => "+22 Healing Spells", + 2317 => "+24 Healing Spells", + 2318 => "+26 Healing Spells", + 2319 => "+29 Healing Spells", + 2320 => "+31 Healing Spells", + 2321 => "+33 Healing Spells", + 2322 => "+35 Healing Spells", + 2323 => "+37 Healing Spells", + 2324 => "+40 Healing Spells", + 2325 => "+42 Healing Spells", + 2326 => "+44 Healing Spells", + 2327 => "+46 Healing Spells", + 2328 => "+48 Healing Spells", + 2329 => "+51 Healing Spells", + 2330 => "+53 Healing Spells", + 2331 => "+55 Healing Spells", + 2332 => "+57 Healing Spells", + 2333 => "+59 Healing Spells", + 2334 => "+62 Healing Spells", + 2335 => "+64 Healing Spells", + 2336 => "+66 Healing Spells", + 2337 => "+68 Healing Spells", + 2338 => "+70 Healing Spells", + 2339 => "+73 Healing Spells", + 2340 => "+75 Healing Spells", + 2341 => "+77 Healing Spells", + 2342 => "+79 Healing Spells", + 2343 => "+81 Healing Spells", + 2344 => "+84 Healing Spells", + 2363 => "+1 mana every 5 sec.", + 2364 => "+1 mana every 5 sec.", + 2365 => "+1 mana every 5 sec.", + 2366 => "+2 mana every 5 sec.", + 2367 => "+2 mana every 5 sec.", + 2368 => "+2 mana every 5 sec.", + 2369 => "+3 mana every 5 sec.", + 2370 => "+3 mana every 5 sec.", + 2371 => "+4 mana every 5 sec.", + 2372 => "+4 mana every 5 sec.", + 2373 => "+4 mana every 5 sec.", + 2374 => "+5 mana every 5 sec.", + 2375 => "+5 mana every 5 sec.", + 2376 => "+6 mana every 5 sec.", + 2377 => "+6 mana every 5 sec.", + 2378 => "+6 mana every 5 sec.", + 2379 => "+7 mana every 5 sec.", + 2380 => "+7 mana every 5 sec.", + 2381 => "+8 mana every 5 sec.", + 2382 => "+8 mana every 5 sec.", + 2383 => "+8 mana every 5 sec.", + 2384 => "+9 mana every 5 sec.", + 2385 => "+9 mana every 5 sec.", + 2386 => "+10 mana every 5 sec.", + 2387 => "+10 mana every 5 sec.", + 2388 => "+10 mana every 5 sec.", + 2389 => "+11 mana every 5 sec.", + 2390 => "+11 mana every 5 sec.", + 2391 => "+12 mana every 5 sec.", + 2392 => "+12 mana every 5 sec.", + 2393 => "+12 mana every 5 sec.", + 2394 => "+13 mana every 5 sec.", + 2395 => "+13 mana every 5 sec.", + 2396 => "+14 mana every 5 sec.", + 2397 => "+14 mana every 5 sec.", + 2398 => "+14 mana every 5 sec.", + 2399 => "+15 mana every 5 sec.", + 2400 => "+15 mana every 5 sec.", + 2401 => "+1 health every 5 sec.", + 2402 => "+1 health every 5 sec.", + 2403 => "+1 health every 5 sec.", + 2404 => "+1 health every 5 sec.", + 2405 => "+1 health every 5 sec.", + 2406 => "+2 health every 5 sec.", + 2407 => "+2 health every 5 sec.", + 2408 => "+2 health every 5 sec.", + 2409 => "+2 health every 5 sec.", + 2410 => "+3 health every 5 sec.", + 2411 => "+3 health every 5 sec.", + 2412 => "+3 health every 5 sec.", + 2413 => "+3 health every 5 sec.", + 2414 => "+4 health every 5 sec.", + 2415 => "+4 health every 5 sec.", + 2416 => "+4 health every 5 sec.", + 2417 => "+4 health every 5 sec.", + 2418 => "+5 health every 5 sec.", + 2419 => "+5 health every 5 sec.", + 2420 => "+5 health every 5 sec.", + 2421 => "+5 health every 5 sec.", + 2422 => "+6 health every 5 sec.", + 2423 => "+6 health every 5 sec.", + 2424 => "+6 health every 5 sec.", + 2425 => "+6 health every 5 sec.", + 2426 => "+7 health every 5 sec.", + 2427 => "+7 health every 5 sec.", + 2428 => "+7 health every 5 sec.", + 2429 => "+7 health every 5 sec.", + 2430 => "+8 health every 5 sec.", + 2431 => "+8 health every 5 sec.", + 2432 => "+8 health every 5 sec.", + 2433 => "+8 health every 5 sec.", + 2434 => "+9 health every 5 sec.", + 2435 => "+9 health every 5 sec.", + 2436 => "+9 health every 5 sec.", + 2437 => "+9 health every 5 sec.", + 2438 => "+10 health every 5 sec.", + 2443 => "Frost Spell Damage +7", + 2463 => "+7 Fire Resistance", + 2483 => "+5 Fire Resistance", + 2484 => "+5 Frost Resistance", + 2485 => "+5 Arcane Resistance", + 2486 => "+5 Nature Resistance", + 2487 => "+5 Shadow Resistance", + 2488 => "+5 All Resistances", + 2503 => "Defense +3", + 2504 => "Spell Damage +30", + 2505 => "Healing Spells +55", + 2506 => "Critical +2%", + 2523 => "+3% Hit", + 2543 => "Attack Speed +1%", + 2544 => "Healing and Spell Damage +8", + 2545 => "Dodge +1%", + 2563 => "Strength +15", + 2564 => "Agility +15", + 2565 => "Mana Regen 4 per 5 sec.", + 2566 => "Healing Spells +24", + 2567 => "Spirit +20", + 2568 => "Intellect +22", + 2583 => "Defense +7/Stamina +10/Block Value +15", + 2584 => "Defense +7/Stamina +10/Healing Spells +24", + 2585 => "Attack Power +28/Dodge +1%", + 2586 => "Ranged Attack Power +24/Stamina +10/Hit +1%", + 2587 => "Healing and Spell Damage +13/Intellect +15", + 2588 => "Healing and Spell Damage +18/Spell Hit +1%", + 2589 => "Healing and Spell Damage +18/Stamina +10", + 2590 => "Mana Regen +4/Stamina +10/Healing Spells +24", + 2591 => "Intellect +10/Stamina +10/Healing Spells +24", + 2603 => "Eternium Line", + 2604 => "+33 Healing Spells", + 2605 => "+18 Spell Damage and Healing", + 2606 => "+30 Attack Power", + 2607 => "+12 Damage and Healing Spells", + 2608 => "+13 Damage and Healing Spells", + 2609 => "+15 Damage and Healing Spells", + 2610 => "+14 Damage and Healing Spells", + 2611 => "REUSE Random - 15 Spells All", + 2612 => "+18 Damage and Healing Spells", + 2613 => "Threat +2%", + 2614 => "Shadow Damage +20", + 2615 => "Frost Damage +20", + 2616 => "Fire Damage +20", + 2617 => "Healing Spells +30", + 2618 => "Agility +15", + 2619 => "+15 Fire Resistance", + 2620 => "+15 Nature Resistance", + 2621 => "Subtlety", + 2622 => "Dodge +1%", + 2623 => "Minor Wizard Oil", + 2624 => "Minor Mana Oil", + 2625 => "Lesser Mana Oil", + 2626 => "Lesser Wizard Oil", + 2627 => "Wizard Oil", + 2628 => "Brilliant Wizard Oil", + 2629 => "Brilliant Mana Oil", + 2646 => "Agility +25", + 2681 => "+10 Nature Resistance", + 2682 => "+10 Frost Resistance", + 2683 => "+10 Shadow Resistance", + 2684 => "+100 Attack Power vs Undead", + 2685 => "+60 Spell Damage vs Undead", + 2715 => "Healing +31 and 5 mana per 5 sec.", + 2716 => "Stamina +16 and Armor +100", + 2717 => "Attack Power +26 and +1% Critical Strike", + 2721 => "Spell Damage +15 and +1% Spell Critical Strike" +]; \ No newline at end of file diff --git a/application/config/blizzcms.php b/application/config/yesilcms.php similarity index 99% rename from application/config/blizzcms.php rename to application/config/yesilcms.php index d8fa0eed..b38e1c3d 100644 --- a/application/config/blizzcms.php +++ b/application/config/yesilcms.php @@ -214,4 +214,4 @@ * Otherwise, if it is true, it performs the check by means of the private IP. * */ -$config['check_realm_local'] = false; +$config['check_realm_local'] = false; \ No newline at end of file diff --git a/application/controllers/General.php b/application/controllers/General.php index 7e9cf6b9..7cf024fc 100644 --- a/application/controllers/General.php +++ b/application/controllers/General.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property $template + * @property Template $template */ class General extends CI_Controller { diff --git a/application/controllers/index.html b/application/controllers/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/controllers/index.html +++ b/application/controllers/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/core/index.html b/application/core/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/core/index.html +++ b/application/core/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/helpers/api_helper.php b/application/helpers/api_helper.php new file mode 100644 index 00000000..e079b652 --- /dev/null +++ b/application/helpers/api_helper.php @@ -0,0 +1,1292 @@ + 1) { + return 'Unique ' . '(' . $count . ')'; + } + + return ''; +} + +/** + * @param int $class + * + * @return string + */ +function itemClass(int $class): string +{ + if ($class === 0) { + return 'Consumable'; + } elseif ($class === 1) { + return 'Container'; + } elseif ($class === 2) { + return 'Weapon'; + } elseif ($class === 4) { + return 'Armor'; + } elseif ($class === 5) { + return 'Reagent'; + } elseif ($class === 6) { + return 'Projectile'; + } elseif ($class === 7) { + return 'Trade Goods'; + } elseif ($class === 9) { + return 'Recipe'; + } elseif ($class === 11) { + return 'Quiver'; + } elseif ($class === 12) { + return 'Quest'; + } elseif ($class === 13) { + return 'Key'; + } elseif ($class === 15) { + return 'Miscellaneous'; + } + + return 'Unknown'; +} + +/** + * @param int $class + * @param int $subclass + * + * @return string + */ +function itemSubClass(int $class, int $subclass): string +{ + if ($class === 0) { + if ($subclass === 0) { + return 'Consumable'; + } elseif ($subclass === 1) { + return 'Potion'; + } elseif ($subclass === 2) { + return 'Elixir'; + } elseif ($subclass === 3) { + return 'Flask'; + } elseif ($subclass === 4) { + return 'Scroll'; + } elseif ($subclass === 5) { + return 'Food & Drink'; + } elseif ($subclass === 6) { + return 'Item Enhancement'; + } elseif ($subclass === 7) { + return 'Bandage'; + } elseif ($subclass === 8) { + return 'Other'; + } + } elseif ($class === 1) { + if ($subclass === 0) { + return 'Bag'; + } elseif ($subclass === 1) { + return 'Soul Bag'; + } elseif ($subclass === 2) { + return 'Herb Bag'; + } elseif ($subclass === 3) { + return 'Enchanting Bag'; + } + } elseif ($class === 2) { + if ($subclass === 0 || $subclass === 1) { + return 'Axe'; + } elseif ($subclass === 2) { + return 'Bow'; + } elseif ($subclass === 3) { + return 'Gun'; + } elseif ($subclass === 4 || $subclass === 5) { + return 'Mace'; + } elseif ($subclass === 6) { + return 'Polearm'; + } elseif ($subclass === 7 || $subclass === 8) { + return 'Sword'; + } elseif ($subclass === 9) { + return 'Obsolete'; + } elseif ($subclass === 10) { + return 'Staff'; + } elseif ($subclass === 11 || $subclass === 12) { + return 'Exotic'; + } elseif ($subclass === 13) { + return 'Fist Weapon'; + } elseif ($subclass === 14) { + return 'Miscellaneous'; + } elseif ($subclass === 15) { + return 'Dagger'; + } elseif ($subclass === 16) { + return 'Thrown'; + } elseif ($subclass === 17) { + return 'Spear'; + } elseif ($subclass === 18) { + return 'Crossbow'; + } elseif ($subclass === 19) { + return 'Wand'; + } elseif ($subclass === 20) { + return 'Fishing Pole'; + } + } elseif ($class === 4) { + if ($subclass === 0) { + return 'Miscellaneous'; + } elseif ($subclass === 1) { + return 'Cloth'; + } elseif ($subclass === 2) { + return 'Leather'; + } elseif ($subclass === 3) { + return 'Mail'; + } elseif ($subclass === 4) { + return 'Plate'; + } elseif ($subclass === 5) { + return 'Buckler(OBSOLETE)'; + } elseif ($subclass === 6) { + return 'Shield'; + } elseif ($subclass === 7) { + return 'Libram'; + } elseif ($subclass === 8) { + return 'Idol'; + } elseif ($subclass === 9) { + return 'Totem'; + } + } elseif ($class === 5) { + if ($subclass === 0) { + return 'Reagent'; + } + } elseif ($class === 6) { + if ($subclass === 2) { + return 'Arrow'; + } elseif ($subclass === 3) { + return 'Bullet'; + } + } elseif ($class === 7) { + if ($subclass === 0) { + return 'Trade Goods'; + } elseif ($subclass === 1) { + return 'Parts'; + } elseif ($subclass === 2) { + return 'Explosives'; + } elseif ($subclass === 3) { + return 'Devices'; + } + } elseif ($class === 9) { + if ($subclass === 0) { + return 'Book'; + } elseif ($subclass === 1) { + return 'Leatherworking'; + } elseif ($subclass === 2) { + return 'Tailoring'; + } elseif ($subclass === 3) { + return 'Engineering'; + } elseif ($subclass === 4) { + return 'Blacksmithing'; + } elseif ($subclass === 5) { + return 'Cooking'; + } elseif ($subclass === 6) { + return 'Alchemy'; + } elseif ($subclass === 7) { + return 'First Aid'; + } elseif ($subclass === 8) { + return 'Enchanting'; + } elseif ($subclass === 9) { + return 'Fishing'; + } + } elseif ($class === 11) { + if ($subclass === 2) { + return 'Quiver'; + } elseif ($subclass === 3) { + return 'Ammo Pouch'; + } + } elseif ($class === 12) { + if ($subclass === 0) { + return 'Quest'; + } + } elseif ($class === 13) { + if ($subclass === 0) { + return 'Key'; + } elseif ($subclass === 1) { + return 'Lockpick'; + } + } elseif ($class === 15) { + if ($subclass === 0) { + return 'Junk'; + } + } + + return 'Unknown'; +} + +/** + * @param int $inv_type + * + * @return string + */ +function itemInventory(int $inv_type): string +{ + $inventoryType = [ + 1 => "Head", + 2 => "Neck", + 3 => "Shoulder", + 4 => "Shirt", + 5 => "Chest", + 6 => "Waist", + 7 => "Legs", + 8 => "Feet", + 9 => "Wrist", + 10 => "Hands", + 11 => "Finger", + 12 => "Trinket", + 13 => "One-Hand", + 14 => "Off Hand", /*Shield*/ + 15 => "Ranged", + 16 => "Back", + 17 => "Two-Hand", + 18 => "Bag", + 19 => "Tabard", + 20 => "Chest", /*Robe*/ + 21 => "Main Hand", + 22 => "Off Hand", + 23 => "Held In Off-Hand", + 24 => "Projectile", + 25 => "Thrown", + 26 => "Wand", /*Ranged2*/ + 27 => "Quiver", + 28 => "Relic" + ]; + + return $inventoryType[$inv_type] ?? ''; +} + +/** + * @param int $class + * + * @return bool + */ +function isWeapon(int $class): bool +{ + $weaponArr = [2]; //[2, 4, 6, 7, 12], check + + return in_array($class, $weaponArr, true); +} + +/** + * @param int $dmg_min + * @param int $dmg_max + * @param int $dmg_type + * @param int $dmg_order + * + * @return string + */ +function weaponDamage(int $dmg_min, int $dmg_max, int $dmg_type, int $dmg_order): string +{ + $damage = ''; + + if ($dmg_min > 0 && $dmg_max > 0) { + if ($dmg_type === 0) { + $damage = $dmg_min . ' - ' . $dmg_max . ' Damage'; + } elseif ($dmg_type === 1) { + $damage = $dmg_min . ' - ' . $dmg_max . ' Holy Damage'; + } elseif ($dmg_type === 2) { + $damage = $dmg_min . ' - ' . $dmg_max . ' Fire Damage'; + } elseif ($dmg_type === 3) { + $damage = $dmg_min . ' - ' . $dmg_max . ' Nature Damage'; + } elseif ($dmg_type === 4) { + $damage = $dmg_min . ' - ' . $dmg_max . ' Frost Damage'; + } elseif ($dmg_type === 5) { + $damage = $dmg_min . ' - ' . $dmg_max . ' Shadow Damage'; + } elseif ($dmg_type === 6) { + $damage = $dmg_min . ' - ' . $dmg_max . ' Arcane Damage'; + } + + if ($dmg_order > 1) { + $damage = '+ ' . $damage; + } + } + + return $damage; +} + +/** + * @param int $dmg_min + * @param int $dmg_max + * @param int|null $speed + * + * @return int|string + */ +function weaponDPS(int $dmg_min, int $dmg_max, int $speed = null) +{ + if ($speed) { + return number_format(($dmg_min + $dmg_max) / (2 * ($speed / 1000)), 1) . ' damage per second'; + } + + return 0; +} + +/** + * @param int $stat_type + * @param int $stat_value + * + * @return string + */ +function itemStat(int $stat_type, int $stat_value): string +{ + $stat = ''; + + if ($stat_type >= 0 && $stat_type < 8) { + $stat = $stat_value > 0 ? '+' : '-'; + + if ($stat_type === 0) { + $stat .= $stat_value . ' Mana'; + } elseif ($stat_type === 1) { + $stat .= $stat_value . ' Health'; + } elseif ($stat_type === 3) { + $stat .= $stat_value . ' Agility'; + } elseif ($stat_type === 4) { + $stat .= $stat_value . ' Strength'; + } elseif ($stat_type === 5) { + $stat .= $stat_value . ' Intellect'; + } elseif ($stat_type === 6) { + $stat .= $stat_value . ' Spirit'; + } elseif ($stat_type === 7) { + $stat .= $stat_value . ' Stamina'; + } + } + + return $stat; +} + +/** + * @param int $res_val + * @param int $res_type + * + * @return string + */ +function itemResistance(int $res_val, int $res_type): string +{ + $resistance_names = [ + 0 => 'Holy', + 1 => 'Fire', + 2 => 'Nature', + 3 => 'Frost', + 4 => 'Shadow', + 5 => 'Arcane' + ]; + + return '+' . $res_val . ' ' . ($resistance_names[$res_type] ?? 'Unknown') . ' Resistance'; +} + +/** + * @param int $skill + * @param int $rank + * + * @return string + */ +function requiredSkill(int $skill, int $rank = 1): string +{ + $skills = [ + 129 => 'First Aid', + 164 => 'Blacksmithing', + 165 => 'Leatherworking', + 171 => 'Alchemy', + 182 => 'Herbalism', + 185 => 'Cooking', + 186 => 'Mining', + 197 => 'Tailoring', + 202 => 'Engineering', + 333 => 'Enchanting', + 356 => 'Fishing', + 393 => 'Skinning', + ]; + +// Shouldn't exist for armory tooltip, just for test remove later + $riding_keys = [148, 149, 150, 152, 533, 553, 554, 713, 762]; + $riding = array_fill_keys($riding_keys, 'Riding'); + + $skills += $riding; + + return 'Requires ' . ($skills[$skill] ?? 'Unknown') . ' (' . $rank . ')'; +} + +/** + * @param int $id + * + * @return string + */ +function className(int $id): string +{ + if ($id === 1) { + $class = 'Warrior'; + } elseif ($id === 2) { + $class = 'Paladin'; + } elseif ($id === 3) { + $class = 'Hunter'; + } elseif ($id === 4) { + $class = 'Rogue'; + } elseif ($id === 5) { + $class = 'Priest'; + } elseif ($id === 7) { + $class = 'Shaman'; + } elseif ($id === 8) { + $class = 'Mage'; + } elseif ($id === 9) { + $class = 'Warlock'; + } elseif ($id === 11) { + $class = 'Druid'; + } else { + $class = 'Unknown'; + } + + return $class; +} + +/** + * @param int $mask + * @param bool $html + * + * @return string + */ +function getAllowableClass(int $mask, bool $html = true): string +{ + $mask &= 0x5DF; + if ($mask == 0x5DF) { + return false; + } + + $tmp = []; + $cl = []; + $i = 1; + + while ($mask) { + if ($mask & (1 << ($i - 1))) { + $tmp[$i] = (! fMod(count($tmp) + 1, 3) > 10 ? -10 : null) . sprintf('%d', $i); + $cl[$tmp[$i]] = $html ? className($tmp[$i]) : $tmp[$i]; + $mask &= ~(1 << ($i - 1)); + } + $i++; + } + + return implode(', ', $cl); +} + +/** + * @param int $id + * + * @return string + */ +function raceName(int $id): string +{ + if ($id === 1) { + $race = 'Human'; + } elseif ($id === 2) { + $race = 'Orc'; + } elseif ($id === 3) { + $race = 'Dwarf'; + } elseif ($id === 4) { + $race = 'Night Elf'; + } elseif ($id === 5) { + $race = 'Undead'; + } elseif ($id === 6) { + $race = 'Tauren'; + } elseif ($id === 7) { + $race = 'Gnome'; + } elseif ($id === 8) { + $race = 'Troll'; + } else { + $race = 'Unknown'; + } + + return $race; +} + +/** + * @param int $mask + * + * @return string + */ +function getAllowableRace(int $mask): string +{ + $mask &= 0xFF; + $mask_horde = 0xB2; + $mask_alliance = 0x4D; + + if ($mask == 0xFF) { + return false; + } + + if ($mask == $mask_horde) { + return 'Orc, Undead, Tauren, Troll'; + } + + if ($mask == $mask_alliance) { + return 'Human, Dwarf, Night Elf, Gnome'; + } + + $tmp = []; + $race = []; + $i = 1; + + while ($mask) { + if ($mask & (1 << ($i - 1))) { + $tmp[$i] = (! fMod(count($tmp) + 1, 3) > 10 ? -10 : null) . sprintf('%d', $i); + $race[$tmp[$i]] = raceName($tmp[$i]); + $mask &= ~(1 << ($i - 1)); + } + $i++; + } + + return implode(', ', $race); +} + +/** + * @param int $rank + * + * @return string[] + */ +function reqHonorRank(int $rank): array +{ + if ($rank === 5) { + $title = [0 => 'Private', 1 => 'Scout']; + } elseif ($rank === 6) { + $title = [0 => 'Corporal', 1 => 'Grunt']; + } elseif ($rank === 7) { + $title = [0 => 'Sergeant', 1 => 'Sergeant']; + } elseif ($rank === 8) { + $title = [0 => 'Master Sergeant', 1 => 'Senior Sergeant']; + } elseif ($rank === 9) { + $title = [0 => 'Sergeant Major', 1 => 'First Sergeant']; + } elseif ($rank === 10) { + $title = [0 => 'Knight', 1 => 'Stone Guard']; + } elseif ($rank === 11) { + $title = [0 => 'Knight-Lieutenant', 1 => 'Blood Guard']; + } elseif ($rank === 12) { + $title = [0 => 'Knight-Captain', 1 => 'Legionnaire']; + } elseif ($rank === 13) { + $title = [0 => 'Knight-Champion', 1 => 'Centurion']; + } elseif ($rank === 14) { + $title = [0 => 'Lieutenant Commander', 1 => 'Champion']; + } elseif ($rank === 15) { + $title = [0 => 'Commander', 1 => 'Lieutenant General']; + } elseif ($rank === 16) { + $title = [0 => 'Marshal', 1 => 'General']; + } elseif ($rank === 17) { + $title = [0 => 'Field Marshal', 1 => 'Warlord']; + } elseif ($rank === 18) { + $title = [0 => 'Grand Marshal', 1 => 'High Warlord']; + } else { + $title = [0 => 'Unknown', 1 => 'Unknown']; + } + + return $title; +} + +/** + * @param string $item_name + * @param int $rank + * + * @return string + */ +function getRankByFaction(string $item_name, int $rank): string +{ + $alliance = [ + 'Private', + 'Alliance', + 'Sergeant\'s Cape', + 'Master Sergeant\'s', + 'Sergeant Major\'s', + 'Knight\'s', + 'Knight-Lieutenant\'s', + 'Knight-Captain\'s', + 'Lieutenant Commander\'s', + 'Steed', + 'Tiger', + 'Battlestrider', + 'Ram', + 'Marshal\'s', + ]; + + if (preg_match('/\Q' . implode('\E|\Q', $alliance) . '\E/', $item_name)) { + $result = reqHonorRank($rank)[0]; + } else { + $result = reqHonorRank($rank)[1]; + } + + return $result; +} + +/** + * @param int $rank + * + * @return string + */ +function getRepRank(int $rank): string +{ + if ($rank === 0) { + $rep = "Hated"; + } elseif ($rank === 1) { + $rep = "Hostile"; + } elseif ($rank === 2) { + $rep = "Unfriendly"; + } elseif ($rank === 3) { + $rep = 'Neutral'; + } elseif ($rank === 4) { + $rep = 'Friendly'; + } elseif ($rank === 5) { + $rep = 'Honored'; + } elseif ($rank === 6) { + $rep = 'Revered'; + } elseif ($rank === 7) { + $rep = 'Exalted'; + } else { + $rep = 'Unknown'; + } + + return $rep; +} + +/** + * @param int $msec + * + * @return int[] + */ +function parseTime(int $msec): array +{ + $time = [0, 0, 0, 0, 0]; + + if ($_ = ($msec % 1000)) { + $time[0] = $_; + } + + $sec = $msec / 1000; + + if ($sec >= 3600 * 24) { + $time[4] = floor($sec / 3600 / 24); + $sec -= $time[4] * 3600 * 24; + } + + if ($sec >= 3600) { + $time[3] = floor($sec / 3600); + $sec -= $time[3] * 3600; + } + + if ($sec >= 60) { + $time[2] = floor($sec / 60); + $sec -= $time[2] * 60; + } + + if ($sec > 0) { + $time[1] = (int)$sec; + $sec -= $time[1]; + } + + return $time; +} + +/** + * @param int $msec + * @param bool $short + * + * @return string + */ +function formatTime(int $msec, bool $short = false): string +{ + [$ms, $s, $m, $h, $d] = parseTime(abs($msec)); + $sg = ["year", "month", "week", "day", "hour", "minute", "second", "millisecond"]; + $pl = ["years", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; + $ab = ["yr", "mo", "wk", "day", "hr", "min", "sec", "ms"]; + + if ($short) { + if ($_ = round($d / 364)) { + return $_ . ' ' . $ab[0]; + } + if ($_ = round($d / 30)) { + return $_ . ' ' . $ab[1]; + } + if ($_ = round($d / 7)) { + return $_ . ' ' . $ab[2]; + } + if ($_ = round($d)) { + return $_ . ' ' . $ab[3]; + } + if ($_ = round($h)) { + return $_ . ' ' . $ab[4]; + } + if ($_ = round($m)) { + return $_ . ' ' . $ab[5]; + } + if ($_ = round($s + $ms / 1000, 2)) { + return $_ . ' ' . $ab[6]; + } + if ($ms) { + return $ms . ' ' . $ab[7]; + } + + return '0 ' . $ab[6]; + } else { + $_ = $d + $h / 24; + if ($_ > 1 && ! ($_ % 364)) // whole years + { + return round(($d + $h / 24) / 364, 2) . ' ' . ($d / 364 == 1 && ! $h ? $sg[0] : $pl[0]); + } + if ($_ > 1 && ! ($_ % 30)) // whole month + { + return round(($d + $h / 24) / 30, 2) . ' ' . ($d / 30 == 1 && ! $h ? $sg[1] : $pl[1]); + } + if ($_ > 1 && ! ($_ % 7)) // whole weeks + { + return round(($d + $h / 24) / 7, 2) . ' ' . ($d / 7 == 1 && ! $h ? $sg[2] : $pl[2]); + } + if ($d) { + return round($d + $h / 24, 2) . ' ' . ($d == 1 && ! $h ? $sg[3] : $pl[3]); + } + if ($h) { + return round($h + $m / 60, 2) . ' ' . ($h == 1 && ! $m ? $sg[4] : $pl[4]); + } + if ($m) { + return round($m + $s / 60, 2) . ' ' . ($m == 1 && ! $s ? $sg[5] : $pl[5]); + } + if ($s) { + return round($s + $ms / 1000, 2) . ' ' . ($s == 1 && ! $ms ? $sg[6] : $pl[6]); + } + if ($ms) { + return $ms . ' ' . ($ms == 1 ? $sg[7] : $pl[7]); + } + + return '0 ' . ($pl[6]); + } +} + +/** + * @param string $val + * + * @return bool + */ +function isInt(string $val): bool +{ + if (is_int($val) || ctype_digit($val)) { + return true; + } + + return false; +} + +/** + * @param string $var + * + * @return int + */ +function getIndex(string $var): int +{ + return abs((int)filter_var($var, FILTER_SANITIZE_NUMBER_INT)); +} + +/** + * @param $str + * @param $s + * @param $e + * + * @return string + */ +function getBetweenStr($str, $s, $e): string +{ + $str = ' ' . $str; + $ini = strpos($str, $s); + if ($ini == 0) { + return ''; + } + $ini += strlen($s); + $len = strpos($str, $e, $ini) - $ini; + + return substr($str, $ini, $len); +} + +/** + * @param int $patch + * + * @return int + */ +function patchToBuild(int $patch): int +{ + $build = [4222, 4297, 4375, 4449, 4544, 4695, 4878, 5086, 5302, 5464, 5875]; + + return $build[$patch]; +} + +/** + * @param int $build + * + * @return int + */ +function buildToPatch(int $build): int +{ + $patch = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; + + if ($build <= 4222) { + return $patch[0]; + } elseif ($build <= 4297) { + return $patch[1]; + } elseif ($build <= 4375) { + return $patch[2]; + } elseif ($build <= 4449) { + return $patch[3]; + } elseif ($build <= 4544) { + return $patch[4]; + } elseif ($build <= 4695) { + return $patch[5]; + } elseif ($build <= 4878) { + return $patch[6]; + } elseif ($build <= 5086) { + return $patch[7]; + } elseif ($build <= 5302) { + return $patch[8]; + } elseif ($build <= 5464) { + return $patch[9]; + } elseif ($build >= 5875) { + return $patch[10]; + } + + return 0; +} + +/** + * @param int $qty + * + * @return string + */ +function formatSellPrice(int $qty): string +{ + $money = ''; + + if ($qty >= 10000) { + $g = floor($qty / 10000); + $money .= '' . $g . ' '; + $qty -= $g * 10000; + } + + if ($qty >= 100) { + $s = floor($qty / 100); + $money .= '' . $s . ' '; + $qty -= $s * 100; + } + + if ($qty > 0) { + $money .= '' . $qty . ''; + } + + return $money; +} + +/** + * @param int $value + * + * @return string + */ +function getComparisonOperatorName(int $value): string +{ + if ($value === 0) { // == + return "Equal To"; + } elseif ($value === 1) { // >= + return "Equal Or Greater Than"; + } elseif ($value === 2) { // <= + return "Equal Or Less Than"; + } + + return ""; +} + +/** + * @param int $id + * + * @return string + */ +function getTeamName(int $id): string +{ + if ($id === 1) { + return "Crossfaction"; + } elseif ($id === 67) { + return "Horde"; + } elseif ($id === 469) { + return "Alliance"; + } + + return ""; +} + +/** + * @param int $id + * + * @return string + */ +function getGenderName(int $id): string +{ + if ($id === 0) { + return "Male"; + } elseif ($id === 1) { + return "Female"; + } elseif ($id === 2) { + return "None"; + } + + return ""; +} + +/** + * @param int $id + * + * @return string + */ +function getLootStateName(int $id): string +{ + if ($id === 0) { + return "Not Ready"; + } elseif ($id === 1) { + return "Ready"; + } elseif ($id === 2) { + return "Activated"; + } elseif ($id === 3) { + return "Just Deactivated"; + } + + return ""; +} + +/** + * @param int $id + * + * @return string + */ +function getGOStateName(int $id): string +{ + if ($id === 0) { + return "Active"; + } elseif ($id === 1) { + return "Ready"; + } elseif ($id === 2) { + return "Alternative"; + } + + return ""; +} + +/** + * @param int $id + * + * @return string + */ +function nearByPlayer(int $id): string +{ + if ($id === 0) { + return "Any"; + } elseif ($id === 1) { + return "Hostile"; + } elseif ($id === 2) { + return "Friendly"; + } + + return ""; +} + +/** + * @param array $index + * @param bool $show_name + * + * @return string + */ +function spellRange(array $index = [], bool $show_name = false): string +{ + if (empty($index)) { + return ''; + } + + $min = $index[0]; + $max = $index[1]; + $name = $show_name ? ' (' . $index[2] . ')' : ''; + + if (! $max) { + if ($show_name) { + return '0 yards' . $name; + } else { + return ''; + } + } + + // minRange exists; show as range + if ($min) { + return sprintf("%s yd range", $min . ' - ' . $max) . $name; + } // hardcode: "melee range" + elseif ($max == 5) { + return "Melee Range" . $name; + } // hardcode "unlimited range" + elseif ($max == 50000) { + return "Unlimited Range" . $name; + } // regular case + else { + return sprintf("%s yd range", $max) . $name; + } +} + +/** + * @param int $id + * + * @return string + */ +function powerType(int $id): string +{ + if ($id === 0) { + return "Mana"; + } elseif ($id === 1) { + return "Rage"; + } elseif ($id === 2) { + return "Focus"; + } elseif ($id === 3) { + return "Energy"; + } elseif ($id === 4294967294) { + return "Health"; + } else { + return "Unknown"; + } +} + +/** + * @param int $id + * + * @return string + */ +function schoolType(int $id): string +{ + if ($id === 0) { + return "Physical"; + } elseif ($id === 1) { + return "Holy"; + } elseif ($id === 2) { + return "Fire"; + } elseif ($id === 3) { + return "Nature"; + } elseif ($id === 4) { + return "Frost"; + } elseif ($id === 5) { + return "Shadow"; + } elseif ($id === 6) { + return "Arcane"; + } + + return ""; +} + +/** + * @param int $id + * + * @return string + */ +function dispelType(int $id): string +{ + if ($id === 1) { + return "Magic"; + } elseif ($id === 2) { + return "Curse"; + } elseif ($id === 3) { + return "Disease"; + } elseif ($id === 4) { + return "Poison"; + } elseif ($id === 5) { + return "Stealth"; + } elseif ($id === 6) { + return "Invisibility"; + } elseif ($id === 7) { + return "All"; + } elseif ($id === 8) { + return "NPC Only"; + } elseif ($id === 9) { + return "Enrage"; + } elseif ($id === 10) { + return "ZG Ticket"; + } + + return ""; +} + +/** + * @param int $type + * @param int $cost + * @param int $cost_per_level + * @param int $cost_per_second + * + * @return string + */ +function spellPowerCost(int $type, int $cost, int $cost_per_level, int $cost_per_second): string +{ + $str = ''; + + if ($cost > 0 || $cost_per_second > 0 || $cost_per_level > 0) { + $str .= ($type === 1 ? $cost / 10 : $cost) . ' ' . powerType($type); + } + + // append periodic cost + if ($cost_per_second > 0) { + $str .= sprintf(', plus %s per sec', $cost_per_second); + } + + // append level cost (todo (low): work in as scaling cost) + if ($cost_per_level > 0) { + $str .= sprintf(', plus %s per level', $cost_per_level); + } + + return $str; +} + +/** + * @param int $attr + * + * @return int + */ +function isChanneledSpell(int $attr): int +{ + return $attr & (0x00000004 | 0x00000040); +} + + +/** + * @param int $cast_time + * @param int $attr_ex + * @param int $type + * + * @return string + */ +function spellCastTime(int $cast_time, int $attr_ex, int $type): string +{ + $ch = false; + if (isChanneledSpell($attr_ex)) { + $ch = true; + } + + if ($cast_time > 0) { + if ($ch) { + return sprintf('Channeled (%s sec cast)', $cast_time / 1000); + } else { + return sprintf('%s sec cast', $cast_time / 1000); + } + } elseif ($type != 1) { + return "Instant"; + } else { + return "Instant cast"; + } +} + +/** + * @param int $recovery_time + * + * @return string + */ +function spellCD(int $recovery_time): string +{ + if ($recovery_time) { + return sprintf('%s cooldown', formatTime($recovery_time, true)); + } else { + return ''; + } +} + +/** + * @return int[] + */ +function getMasks(): array +{ + return [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648]; +} + +/** + * @param $loot + * @param $newloot + * + * @return void + */ +function addLoot(&$loot, $newloot) +{ + $exist = []; + foreach ($loot as $offset => $item) { + $exist[$item['entry']] = $offset; + } + + foreach ($newloot as $newitem) { + // Shouldn't happen + if (! is_array($newitem)) { + return; + } + + if (isset($exist[$newitem['entry']])) { + $loot[$exist[$item['entry']]]['mincount'] = min($loot[$exist[$item['entry']]]['mincount'], $newitem['mincount']); + $loot[$exist[$item['entry']]]['maxcount'] = max($loot[$exist[$item['entry']]]['maxcount'], $newitem['maxcount']); + $loot[$exist[$item['entry']]]['percent'] += $newitem['percent']; + $loot[$exist[$item['entry']]]['group'] = 0; + $loot[$exist[$item['entry']]]['condition_id'] = $newitem['condition_id']; + } else { + $loot[] = $newitem; + } + } +} + +/** + * @param int $val + * + * @return int|void + */ +function sign(int $val) +{ + if ($val > 0) { + return 1; + } + if ($val < 0) { + return -1; + } + if ($val === 0) { + return 0; + } +} \ No newline at end of file diff --git a/application/helpers/index.html b/application/helpers/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/helpers/index.html +++ b/application/helpers/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/helpers/modules_helper.php b/application/helpers/modules_helper.php index dd38e287..ff7958fe 100644 --- a/application/helpers/modules_helper.php +++ b/application/helpers/modules_helper.php @@ -48,6 +48,20 @@ function secondsToTime($inputSeconds): string return implode(', ', $timeParts); } +/** + * @param $string + * @param int $chars + * + * @return mixed|string + */ +function truncateString($string, int $chars = 100) +{ + preg_match('/^.{0,' . $chars . '}(?:.*?)\b/iu', $string, $matches); + $new_string = $matches[0] ?? ''; + + return ($new_string === $string) ? $string : $new_string . '…'; +} + /** * @param $class * @param $race @@ -182,11 +196,53 @@ function getAdditionalSpellCrit(int $class, int $intellect): float return round($spellCrit, 2); } +/** + * @param int $rank + * + * @return string[] + */ +function getRankTitle(int $rank): array +{ + if ($rank === 1) { + $title = [0 => 'Private', 1 => 'Scout']; + } elseif ($rank === 2) { + $title = [0 => 'Corporal', 1 => 'Grunt']; + } elseif ($rank === 3) { + $title = [0 => 'Sergeant', 1 => 'Sergeant']; + } elseif ($rank === 4) { + $title = [0 => 'Master Sergeant', 1 => 'Senior Sergeant']; + } elseif ($rank === 5) { + $title = [0 => 'Sergeant Major', 1 => 'First Sergeant']; + } elseif ($rank === 6) { + $title = [0 => 'Knight', 1 => 'Stone Guard']; + } elseif ($rank === 7) { + $title = [0 => 'Knight-Lieutenant', 1 => 'Blood Guard']; + } elseif ($rank === 8) { + $title = [0 => 'Knight-Captain', 1 => 'Legionnaire']; + } elseif ($rank === 9) { + $title = [0 => 'Knight-Champion', 1 => 'Centurion']; + } elseif ($rank === 10) { + $title = [0 => 'Lieutenant Commander', 1 => 'Champion']; + } elseif ($rank === 11) { + $title = [0 => 'Commander', 1 => 'Lieutenant General']; + } elseif ($rank === 12) { + $title = [0 => 'Marshal', 1 => 'General']; + } elseif ($rank === 13) { + $title = [0 => 'Field Marshal', 1 => 'Warlord']; + } elseif ($rank === 14) { + $title = [0 => 'Grand Marshal', 1 => 'High Warlord']; + } else { + $title = [0 => 'N/A', 1 => 'N/A']; + } + + return $title; +} + /** * @param int $class * @param $spirit * - * Its probably not accurate but should be close. + * It's probably not accurate but should be close. * https://vanilla-wow-archive.fandom.com/wiki/Spirit * https://github.com/yutsuku/BetterCharacterStats/blob/master/helper.lua#L919 * @@ -314,10 +370,11 @@ function guessMainSpec(int $class, $charStats): array return $stats; } + /** * @param $inp * - * @return mixed|string + * @return string|int */ function formatStats($inp) { @@ -336,6 +393,10 @@ function formatStats($inp) function formatPercentage($inp): string { if (isset($inp)) { + if ((float)$inp < 0.01) { + return sprintf('%0.3f', $inp) . '%'; + } + return sprintf('%0.2f', $inp) . '%'; } @@ -350,7 +411,7 @@ function formatPercentage($inp): string */ function percentageOf($number, $everything): int { - return ($number / $everything) * 100; + return intval(($number / $everything) * 100); } /** @@ -398,3 +459,543 @@ function generateToken($length): string return $token; } + +/** + * @param $patch + * + * @return string + */ +function getPatchName($patch): string +{ + $patches = ['1.2', '1.3', '1.4', '1.5', '1.6', '1.7', '1.8', '1.9', '1.10', '1.11', '1.12']; + + if (! empty($patch) || strlen($patch) > 0) { + return $patches[$patch]; + } + + return '1.12'; +} + +/** + * @param $id + * @param $item_patch + * @param $selected_patch + * @param string $lang + * + * @return string + */ +function showTooltip($id, $item_patch, $selected_patch, string $lang = 'en'): string +{ + if (empty($selected_patch) || $selected_patch === 10) { + return 'href="' . base_url() . $lang . '/item/' . $id . '"'; + } elseif ($item_patch === 99) { + return 'class="tooltipLink" data-tooltip="This item does not exists in selected patch: ' . getPatchName($selected_patch) . '"'; + } else { + return 'href="' . base_url() . $lang . '/item/' . $id . '-' . $item_patch . '"'; + } +} + +/** + * @param $patch + * + * @return int + */ +function dataPatch($patch): int +{ + if (! empty($patch) || strlen($patch) > 0) { + return (int)$patch; + } + + return 10; +} + +/** + * @param $rank + * + * @return string + */ +function creatureRank($rank): string +{ + $ranks = ['Normal', 'Elite ', 'Rare Elite', 'Boss', 'Rare ']; + + if (! empty($rank) || strlen($rank) > 0) { + return $ranks[$rank]; + } + + return 'Unknown'; +} + +/** + * @param string $text + * @param bool $rt + * @param string $extra + * + * @return string + */ +function tableText(string $text, bool $rt = false, string $extra = ''): string +{ + if (! empty($text) || strlen($text) > 0) { + return $text . ($extra ? ' ' . $extra : ''); + } + + if ($rt) { + return 'n/a'; + } + + return 'None'; +} + +function effectAttributes(int $effect, int $id, $patch = 10): ?string +{ + if ($effect === 8 || $effect === 30 || $effect === 62) { + $powType = [0 => "Mana", 1 => "Rage", 2 => "Focus", 3 => "Energy", 4 => "Happiness"]; + + return $powType[$id]; + } elseif ($effect === 16) { //quest complete, later add quest page when implemented + $CI =& get_instance(); + + return $CI->Database_model->getQuestTitle($id, $patch); + } elseif ($effect === 28 || $effect === 56 || $effect === 74 || $effect === 90 || $effect === 112 || $effect === 134) { + $CI =& get_instance(); + + return $CI->Database_model->getCreatureName($id, $patch); //creature name, later add npc page when implemented + } elseif ($effect === 33) { + $CI =& get_instance(); + + return $CI->config->item('lock_type')[$id] ?? $id; + } elseif ($effect === 53 || $effect === 54 || $effect === 92 || $effect === 156) { + return $id; + } elseif ($effect === 38 || $effect === 126) { + $dispType = [null, "Magic", "Curse", "Disease", "Poison", "Stealth", "Invisibility", null, null, "Enrage"]; + + return $dispType[$id] ?? $id; + } elseif ($effect === 39) { + $lang = [1 => "Orcish", 2 => "Darnassian", 3 => "Taurahe", 6 => "Dwarvish", 7 => "Common", 8 => "Demonic", 11 => "Draconic", 13 => "Gnomish", 14 => "Troll"]; + + return $lang[$id] ?? $id; + } elseif ($effect === 50 || $effect === 76 || $effect === 104 || $effect === 105 || $effect === 106 || $effect === 107) { + $CI =& get_instance(); + + return $CI->Database_model->getGOName($id, $patch); //gameobject name, later add obj page when implemented + } elseif ($effect === 86) { + $actions = [ + "None", + "Animate Custom 0", + "Animate Custom 1", + "Animate Custom 2", + "Animate Custom 3", + "Disturb / Trigger Trap", + "Unlock", + "Lock", + "Open", + "Unlock & Open", + "Close", + "Toggle Open", + "Destroy", + "Rebuild", + "Creation", + "Despawn", + "Make Inert" + ]; + + return $actions[$id] ?? $id; + } elseif ($effect === 108) { + $CI =& get_instance(); + + return $CI->config->item('spell_mechanics')[$id] ?? $id; + } elseif ($effect === 44 || $effect === 118) { + $CI =& get_instance(); + + return $CI->config->item('skilline')[$id] ?? $id; + } elseif ($effect === 103) { + $CI =& get_instance(); + + return $CI->Database_model->getFactionName($id, $patch); + } elseif ($effect === 123) { + return $id; + } + + return null; +} + +/** + * @param int $aura + * @param int $id + * @param int $patch + * + * @return string + */ +function auraAttributes(int $aura, int $id, int $patch = 10): string +{ + if ($aura === 17) { + $val = ["General", "Trap"]; + + return $val[$id]; + } elseif ($aura === 19) { + $invType = [null, "General", null, "Trap", null, null, "Drunk", null, null, null, null, null]; + + return $invType[$id] ?? $id; + } elseif ($aura === 21 || $aura === 24 || $aura === 35 || $aura === 85 || $aura === 100 || $aura === 132) { + $powType = [0 => "Mana", 1 => "Rage", 2 => "Focus", 3 => "Energy", 4 => "Happiness"]; + + return $powType[$id]; + } elseif ($aura === 29 || $aura === 80 || $aura === 137) { + $stats = ["Strength", "Agility", "Stamina", "Intellect", "Spirit"]; + $mask = $id < 0 ? 0x1F : 1 << $id; + $res = []; + for ($j = 0; $j < 5; $j++) { + if ($mask & (1 << $j)) { + $res[] = $stats[$j]; + } + } + + return $res ? implode(", ", $res) : $stats[$id]; + } elseif ($aura === 36) { + $shType = [ + "Default", + "Cat Form", + "Tree of Life", + "Travel Form", + "Aquatic Form", + "Bear From", + "Ambient", + "Ghoul", + "Dire Bear Form", + "Steve's Ghoul", + "Tharon'ja Skeleton", + "Darkmoon - Test of Strength", + "BLB Player", + "Shadowdance", + "Creature - Bear", + "Creature - Cat", + "Ghostwolf", + "Battle Stance", + "Defensive Stance", + "Berserker Stance", + "Test", + "Zombie", + "Metamorphosis", + null, + null, + "Undead", + "Frenzy", + "Swift Flight Form", + "Shadow Form", + "Flight Form", + "Stealth", + "Moonkin Form", + "Spirit of Redemption" + ]; + + return $shType[$id] ?? $id; + } elseif ($aura === 37) { + $CI =& get_instance(); + + return $CI->config->item('effect_names')[$id] ?? $id; + } elseif ($aura === 38) { + $CI =& get_instance(); + + return $CI->config->item('aura_names')[$id] ?? $id; + } elseif ($aura === 41) { + $dispType = [null, "Magic", "Curse", "Disease", "Poison", "Stealth", "Invisibility", null, null, "Enrage"]; + + return $dispType[$id] ?? $id; + } elseif ($aura === 44 || $aura === 59 || $aura === 102 || $aura === 131 || $aura === 168 || $aura === 180) { + $crType = ["Uncategorized", "Beast", "Dragonkin", "Demon", "Elemental", "Giant", "Undead", "Humanoid",]; + + $res = []; + foreach ($crType as $k => $str) { + if ($k && ($id & (1 << $k - 1))) { + $res[] = $str; + } + } + + return $res ? implode(", ", $res) : $crType[$id] ?? $id; + } elseif ($aura === 45) { + $CI =& get_instance(); + + return $CI->config->item('lock_type')[$id] ?? $id; + } elseif ($aura === 56 || $aura === 78) { // Mount + $CI =& get_instance(); + + return $CI->Database_model->getCreatureName($id, $patch); //creature name, later add npc page when implemented + } elseif ($aura === 75) { + $lang = [1 => "Orcish", 2 => "Darnassian", 3 => "Taurahe", 6 => "Dwarvish", 7 => "Common", 8 => "Demonic"]; + + return $lang[$id] ?? $id; + } elseif ($aura === 77 || $aura === 117 || $aura === 232 || $aura === 234 || $aura === 255 || $aura === 276) { + $CI =& get_instance(); + + return $CI->config->item('spell_mechanics')[$id] ?? $id; + } elseif ($aura === 139 || $aura === 190) { + $CI =& get_instance(); + + return $CI->Database_model->getFactionName($id, $patch); + } elseif ($aura === 147) { + $CI =& get_instance(); + + $mechType = $CI->config->item('spell_mechanics'); + + $res = []; + foreach ($mechType as $k => $str) { + if ($k && ($id & (1 << $k - 1))) { + $res[] = $str; + } + } + + return $res ? implode(", ", $res) : $mechType[$id] ?? $id; + } elseif ($aura === 10 + || $aura === 13 + || $aura === 14 + || $aura === 22 + || $aura === 39 + || $aura === 40 + || $aura === 50 + || $aura === 57 + || $aura === 69 + || $aura === 71 + || $aura === 72 + || $aura === 73 + || $aura === 74 + || $aura === 79 + || $aura === 81 + || $aura === 83 + || $aura === 87 + || $aura === 97 + || $aura === 101 + || $aura === 115 + || $aura === 118 + || $aura === 123 + || $aura === 135 + || $aura === 136 + || $aura === 142 + || $aura === 143 + || $aura === 149 + || $aura === 163 + || $aura === 174 + || $aura === 182 + || $aura === 186 + || $aura === 194 + || $aura === 195 + || $aura === 199 + || $aura === 229 + || $aura === 271 + || $aura === 310 + || $aura === 237 + || $aura === 238 + || $aura === 242 + || $aura === 259 + || $aura === 267 + || $aura === 269 + || $aura === 285 + || $aura === 300 + || $aura === 301 + ) { + return getMagicSchools($id); + } elseif ($aura === 30 || $aura === 98) { + $CI =& get_instance(); + + return $CI->config->item('skilline')[$id] ?? $id; + } elseif ($aura === 107 || $aura === 108) { + $spellModOpTypes = [ + "Damage", + "Duration", + "Threat", + "Effect 1", + "Charges", + "Range", + "Radius", + "Critical Hit Chance", + "All Effects", + "Casting Time loss", + "Casting Time", + "Cooldown", + "Effect 2", + "Ignore Armor", + "Cost", + "Critical Damage Bonus", + "Chance to Fail", + "Jump Targets", + "Proc Chance", + "Intervall", + "Multiplier (Damage)", + "Global Cooldown", + "Damage over Time", + "Effect 3", + "Multiplier (Bonus)", + null, + "Procs per Minute", + "Multiplier (Value)", + "Chance to Resist Dispel", + "Critical Damage Bonus2", + "Refund Cost on Fail" + ]; + + return $spellModOpTypes[$id] ?? $id; + } + + return (string)$id; +} + +/** + * @param $schoolMask + * + * @return string + */ +function getMagicSchools($schoolMask): string +{ + $schoolMask &= 0x7F; + $sc = ["Physical", "Holy", "Fire", "Nature", "Frost", "Shadow", "Arcane"]; + $tmp = []; + $i = 0; + + while ($schoolMask) { + if ($schoolMask & (1 << $i)) { + $tmp[] = $sc[$i]; + $schoolMask &= ~(1 << $i); + } + $i++; + } + + return implode(', ', $tmp); +} + +/** + * @param int $race + * + * @return int + */ +function sideByRaceMask(int $race): int +{ + // Any + if (! $race || ($race & 0xFF) == 0xFF) { + return 3; + } + + // Horde + if ($race & 0xB2 && ! ($race & 0x4D)) { + return 2; + } + + // Alliance + if ($race & 0x4D && ! ($race & 0xB2)) { + return 1; + } + + return 3; +} + +/** + * @param int $id + * + * @return string + */ +function sideByID(int $id): string +{ + $sides = [1 => "Alliance", -1 => "Alliance only", 2 => "Horde", -2 => "Horde only", 3 => "Both"]; + + return $sides[$id] ?? 'Unknown'; +} + +/** + * @param int $id + * + * @return string + */ +function territoryByTeamID(int $id): string +{ + $territory = [0 => "Contested", 2 => "Alliance", 4 => "Horde"]; + + return $territory[$id] ?? ''; +} + +/** + * @param int $id + * + * @return string + */ +function zoneCatByMapID(int $id): string +{ + if ($id === 0) { + return "Eastern Kingdoms"; + } elseif ($id === 1) { + return "Kalimdor"; + } else { + return "Instance"; + } +} + +/** + * @param int $id + * + * @return string + */ +function GOTypeByID(int $id): string +{ + if ($id === 0) { + return "Door"; + } elseif ($id === 1) { + return "Button"; + } elseif ($id === 2) { + return "Questgiver"; + } elseif ($id === 3) { + return "Chest"; + } elseif ($id === 5) { + return "Generic"; + } elseif ($id === 6) { + return "Trap"; + } elseif ($id === 7) { + return "Chair"; + } elseif ($id === 8) { + return "Spell Focus"; + } elseif ($id === 9) { + return "Text"; + } elseif ($id === 10) { + return "Goober"; + } elseif ($id === 11) { + return "Transport"; + } elseif ($id === 13) { + return "Camera"; + } elseif ($id === 14) { + return "Map Object"; + } elseif ($id === 15) { + return "MO Transport"; + } elseif ($id === 16) { + return "Duel Arbitier"; + } elseif ($id === 17) { + return "Fishing Node"; + } elseif ($id === 18) { + return "Ritual"; + } elseif ($id === 19) { + return "Mailbox"; + } elseif ($id === 20) { + return "Auction House"; + } elseif ($id === 22) { + return "Spell Caster"; + } elseif ($id === 23) { + return "Meeting Stone"; + } elseif ($id === 24) { + return "Flag Stand"; + } elseif ($id === 25) { + return "Fishing Hole"; + } elseif ($id === 26) { + return "Flag Drop"; + } elseif ($id === 29) { + return "Capture Point"; + } + + return "Unknown"; +} + +function ordinalNumber(int $number, bool $html = false): string +{ + if ($number === 0) { + return 'n/a'; + } + $ends = array('th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'); + if ((($number % 100) >= 11) && (($number % 100) <= 13)) { + return $number . ($html ? 'th' : 'th'); + } else { + return $number . ($html ? '' . $ends[$number % 10] . '' : $ends[$number % 10]); + } +} \ No newline at end of file diff --git a/application/hooks/index.html b/application/hooks/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/hooks/index.html +++ b/application/hooks/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/index.html b/application/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/index.html +++ b/application/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/language/english/admin_lang.php b/application/language/english/admin_lang.php index ef6e349b..195b2d24 100644 --- a/application/language/english/admin_lang.php +++ b/application/language/english/admin_lang.php @@ -30,6 +30,7 @@ $lang['admin_nav_download'] = 'Download'; $lang['admin_nav_Tickets'] = 'Tickets'; $lang['admin_nav_manage_tickets'] = 'Manage Tickets'; +$lang['admin_nav_timeline'] = 'Timeline'; /*Sections Lang*/ $lang['section_general_settings'] = 'General Settings'; @@ -75,6 +76,10 @@ $lang['table_header_guid'] = 'Guid'; $lang['table_header_information'] = 'Information'; $lang['table_header_value'] = 'Value'; +$lang['table_header_patch'] = 'Patch'; +$lang['table_header_date'] = 'Date'; +$lang['table_header_image'] = 'Image'; +$lang['table_header_order'] = 'Order'; /*Input Placeholder Lang*/ $lang['placeholder_manage_account'] = 'Manage Account'; @@ -107,6 +112,8 @@ $lang['placeholder_create_download'] = 'Create Download'; $lang['placeholder_edit_download'] = 'Edit Download'; $lang['placeholder_upload_image'] = 'Upload Image'; +$lang['placeholder_create_timeline'] = 'Create Timeline Item'; +$lang['placeholder_edit_timeline'] = 'Edit Timeline Item'; $lang['placeholder_icon_name'] = 'Icon Name'; $lang['placeholder_category'] = 'Category'; $lang['placeholder_name'] = 'Name'; @@ -137,6 +144,8 @@ $lang['placeholder_emulator'] = 'Emulator'; $lang['placeholder_size'] = 'Size'; $lang['placeholder_select_type'] = 'Select a Type'; +$lang['placeholder_patch'] = 'Select Patch'; +$lang['placeholder_date'] = 'Select Date'; /*Config Lang*/ $lang['conf_website_name'] = 'Website Name'; @@ -189,6 +198,7 @@ $lang['option_disabled'] = 'Disabled'; $lang['option_ssl'] = 'SSL'; $lang['option_tls'] = 'TLS'; +$lang['option_none'] = 'None'; $lang['option_everyone'] = 'Everyone'; $lang['option_staff'] = 'STAFF'; $lang['option_all'] = 'STAFF - Everyone'; diff --git a/application/language/english/general_lang.php b/application/language/english/general_lang.php index ce997f99..5eea8eca 100644 --- a/application/language/english/general_lang.php +++ b/application/language/english/general_lang.php @@ -99,8 +99,13 @@ /*Table header Lang*/ $lang['table_header_name'] = 'Name'; +$lang['table_header_cname'] = 'Character Name'; +$lang['table_header_gname'] = 'Guild Name'; $lang['table_header_faction'] = 'Faction'; -$lang['table_header_total_kills'] = 'Total Kills'; +$lang['table_header_total_kills'] = 'Lifetime Kills'; +$lang['table_header_total_honor'] = 'Rating'; +$lang['table_header_current_rank'] = 'Current Rank'; +$lang['table_header_kills'] = 'Kills'; $lang['table_header_today_kills'] = 'Today Kills'; $lang['table_header_yersterday_kills'] = 'Yesterday Kills'; $lang['table_header_team_name'] = 'Team Name'; @@ -254,3 +259,9 @@ $lang['email_password_recovery_p1'] = 'Password Recovery Confirmation'; $lang['email_password_recovery_p2'] = 'Password Recovery'; $lang['email_account_activation'] = 'Activate Your %s Account'; + +/*Timeline Lang*/ +$lang['timeline_subtitle'] = 'Content Release Timeline'; +$lang['timeline_general'] = 'General'; +$lang['timeline_pve'] = 'PvE'; +$lang['timeline_pvp'] = 'PvP'; \ No newline at end of file diff --git a/application/language/english/index.html b/application/language/english/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/language/english/index.html +++ b/application/language/english/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/language/english/notification_lang.php b/application/language/english/notification_lang.php index 13a9f8f0..e3cc844b 100644 --- a/application/language/english/notification_lang.php +++ b/application/language/english/notification_lang.php @@ -66,6 +66,7 @@ $lang['notification_name_empty'] = 'Name is empty'; $lang['notification_id_empty'] = 'id is empty'; $lang['notification_reply_empty'] = 'Reply is empty'; +$lang['notification_general_error'] = 'Something went wrong.'; $lang['notification_reply_created'] = 'Reply has been sended.'; $lang['notification_reply_updated'] = 'Reply has been updated.'; $lang['notification_reply_deleted'] = 'Reply has been deleted.'; @@ -112,8 +113,10 @@ $lang['notification_topsite_created'] = 'The topsite has been created.'; $lang['notification_topsite_edited'] = 'The topsite has been edited.'; $lang['notification_topsite_deleted'] = 'The topsite has been deleted.'; - -$lang['notification_settings_updated'] = 'The settings has been updated.
Page will reload now.'; +$lang['notification_timeline_created'] = 'The Timeline item has been created.'; +$lang['notification_timeline_edited'] = 'The Timeline item has been edited.'; +$lang['notification_timeline_deleted'] = 'The Timeline item has been deleted.'; +$lang['notification_settings_updated'] = 'The settings have been updated.
Page will reload now.'; $lang['notification_module_enabled'] = 'The module has been enabled.'; $lang['notification_module_disabled'] = 'The module has been disabled.'; $lang['notification_migration'] = 'The settings have been set.'; diff --git a/application/language/french/admin_lang.php b/application/language/french/admin_lang.php index 1ca7409e..0c0d34d9 100644 --- a/application/language/french/admin_lang.php +++ b/application/language/french/admin_lang.php @@ -30,6 +30,7 @@ $lang['admin_nav_download'] = 'Téléchargement'; $lang['admin_nav_Tickets'] = 'Tickets'; $lang['admin_nav_manage_tickets'] = 'Gérer le Tickets'; +$lang['admin_nav_timeline'] = 'Timeline'; /*Sections Lang*/ $lang['section_general_settings'] = 'Réglages Généraux'; @@ -75,6 +76,10 @@ $lang['table_header_guid'] = 'Guid'; $lang['table_header_information'] = 'Information'; $lang['table_header_value'] = 'Valeur'; +$lang['table_header_patch'] = 'Patch'; +$lang['table_header_date'] = 'Date'; +$lang['table_header_image'] = 'Image'; +$lang['table_header_order'] = 'Order'; /*Input Placeholder Lang*/ $lang['placeholder_manage_account'] = 'Gérer les Comptes'; @@ -107,6 +112,8 @@ $lang['placeholder_create_download'] = 'Créer un Téléchargement'; $lang['placeholder_edit_download'] = 'Editer un Téléchargement'; $lang['placeholder_upload_image'] = 'Upload une Image'; +$lang['placeholder_create_timeline'] = 'Create Timeline Item'; +$lang['placeholder_edit_timeline'] = 'Edit Timeline Item'; $lang['placeholder_icon_name'] = 'Nom d\'Icon'; $lang['placeholder_category'] = 'Categorie'; $lang['placeholder_name'] = 'Nom'; @@ -137,6 +144,8 @@ $lang['placeholder_emulator'] = 'Emulateur'; $lang['placeholder_size'] = 'Taille'; $lang['placeholder_select_type'] = 'Sélectionner un Type'; +$lang['placeholder_patch'] = 'Select Patch'; +$lang['placeholder_date'] = 'Select Date'; /*Config Lang*/ $lang['conf_website_name'] = 'Nom du Site'; @@ -189,6 +198,7 @@ $lang['option_disabled'] = 'Désactivé'; $lang['option_ssl'] = 'SSL'; $lang['option_tls'] = 'TLS'; +$lang['option_none'] = 'None'; $lang['option_everyone'] = 'Tout le monde'; $lang['option_staff'] = 'STAFF'; $lang['option_all'] = 'STAFF - Tout le monde'; diff --git a/application/language/french/general_lang.php b/application/language/french/general_lang.php index 04c0cc91..6d163687 100644 --- a/application/language/french/general_lang.php +++ b/application/language/french/general_lang.php @@ -98,9 +98,14 @@ $lang['placeholder_subject'] = 'Sujet'; /*Table Header Lang*/ +$lang['table_header_cname'] = 'Character Name'; +$lang['table_header_gname'] = 'Guild Name'; $lang['table_header_name'] = 'Nom'; $lang['table_header_faction'] = 'Faction'; $lang['table_header_total_kills'] = 'Total de Kills'; +$lang['table_header_total_honor'] = 'Total Honor'; +$lang['table_header_current_rank'] = 'Current Rank'; +$lang['table_header_kills'] = 'Kills'; $lang['table_header_today_kills'] = 'Today de Kills'; $lang['table_header_yersterday_kills'] = 'Kills d\'hier'; $lang['table_header_team_name'] = 'Nom de l\'Equipe'; @@ -254,3 +259,9 @@ $lang['email_password_recovery_p1'] = 'Password Recovery Confirmation'; $lang['email_password_recovery_p2'] = 'Password Recovery'; $lang['email_account_activation'] = 'Activate Your %s Account'; + +/*Timeline Lang*/ +$lang['timeline_subtitle'] = 'Content Release Timeline'; +$lang['timeline_general'] = 'General'; +$lang['timeline_pve'] = 'PvE'; +$lang['timeline_pvp'] = 'PvP'; \ No newline at end of file diff --git a/application/language/french/index.html b/application/language/french/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/language/french/index.html +++ b/application/language/french/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/language/french/notification_lang.php b/application/language/french/notification_lang.php index 5b0e8021..322046cd 100644 --- a/application/language/french/notification_lang.php +++ b/application/language/french/notification_lang.php @@ -66,6 +66,7 @@ $lang['notification_name_empty'] = 'Le nom est vide'; $lang['notification_id_empty'] = 'L\'identifiant est vide'; $lang['notification_reply_empty'] = 'La réponse est vide'; +$lang['notification_general_error'] = 'Something went wrong.'; $lang['notification_reply_created'] = 'La réponse a été envoyée.'; $lang['notification_reply_updated'] = 'Reply has been updated.'; $lang['notification_reply_deleted'] = 'La réponse a été supprimée.'; @@ -112,7 +113,9 @@ $lang['notification_topsite_created'] = 'Le topsite a été créée'; $lang['notification_topsite_edited'] = 'Le topsite a été modifié'; $lang['notification_topsite_deleted'] = 'Le topsite a été supprimé'; - +$lang['notification_timeline_created'] = 'The Timeline item has been created.'; +$lang['notification_timeline_edited'] = 'The Timeline item has been edited.'; +$lang['notification_timeline_deleted'] = 'The Timeline item has been deleted.'; $lang['notification_settings_updated'] = 'Les paramètres ont été mis à jour.'; $lang['notification_module_enabled'] = 'Le module a été activé.'; $lang['notification_module_disabled'] = 'Le module a été désactivé.'; diff --git a/application/language/german/admin_lang.php b/application/language/german/admin_lang.php index 9b1509b0..29651d8e 100644 --- a/application/language/german/admin_lang.php +++ b/application/language/german/admin_lang.php @@ -30,6 +30,7 @@ $lang['admin_nav_download'] = 'Download'; $lang['admin_nav_Tickets'] = 'Tickets'; $lang['admin_nav_manage_tickets'] = 'Tickets bearbeiten'; +$lang['admin_nav_timeline'] = 'Timeline'; /*Sections Lang*/ $lang['section_general_settings'] = 'Allgemeine Einstellungen'; @@ -75,6 +76,10 @@ $lang['table_header_guid'] = 'Guid'; $lang['table_header_information'] = 'Information'; $lang['table_header_value'] = 'Mänge'; +$lang['table_header_patch'] = 'Patch'; +$lang['table_header_date'] = 'Date'; +$lang['table_header_image'] = 'Image'; +$lang['table_header_order'] = 'Order'; /*Input Placeholder Lang*/ $lang['placeholder_manage_account'] = 'Account verwalten'; @@ -107,6 +112,8 @@ $lang['placeholder_create_download'] = 'Create Download'; $lang['placeholder_edit_download'] = 'Edit Download'; $lang['placeholder_upload_image'] = 'Bild hochladen'; +$lang['placeholder_create_timeline'] = 'Create Timeline Item'; +$lang['placeholder_edit_timeline'] = 'Edit Timeline Item'; $lang['placeholder_icon_name'] = 'Icon Name'; $lang['placeholder_category'] = 'Kategorie'; $lang['placeholder_name'] = 'Name'; @@ -137,6 +144,8 @@ $lang['placeholder_emulator'] = 'Emulator'; $lang['placeholder_size'] = 'Size'; $lang['placeholder_select_type'] = 'Select a Type'; +$lang['placeholder_patch'] = 'Select Patch'; +$lang['placeholder_date'] = 'Select Date'; /*Config Lang*/ $lang['conf_website_name'] = 'Website Name'; @@ -189,6 +198,7 @@ $lang['option_disabled'] = 'Deaktiviert'; $lang['option_ssl'] = 'SSL'; $lang['option_tls'] = 'TLS'; +$lang['option_none'] = 'None'; $lang['option_everyone'] = 'Alle'; $lang['option_staff'] = 'Nur Team'; $lang['option_all'] = 'Nur Team - Alle'; diff --git a/application/language/german/general_lang.php b/application/language/german/general_lang.php index d9a5c03d..c5ffbe14 100644 --- a/application/language/german/general_lang.php +++ b/application/language/german/general_lang.php @@ -17,7 +17,7 @@ $lang['tab_cart'] = 'Einkaufswagen'; $lang['tab_account'] = 'Mein Account'; $lang['tab_reset'] = 'Passwort wiederherstellen'; -$lang['tab_pending'] = 'Account Activation'; +$lang['tab_pending'] = 'Account Aktivierung'; $lang['tab_error'] = 'Error 404'; $lang['tab_maintenance'] = 'Wartungsarbeiten'; $lang['tab_online'] = 'Online Spieler'; @@ -31,14 +31,14 @@ $lang['button_register'] = 'Registrieren'; $lang['button_login'] = 'Anmelden'; $lang['button_logout'] = 'Abmelden'; -$lang['button_activate'] = 'Activate'; -$lang['button_request'] = 'Request New Code'; +$lang['button_activate'] = 'Aktivieren'; +$lang['button_request'] = 'Neuen Code beantragen'; $lang['button_forgot_password'] = 'Passwort vergessen?'; $lang['button_user_panel'] = 'Benutzer Panel'; $lang['button_admin_panel'] = 'Admin Panel'; $lang['button_mod_panel'] = 'Mod Panel'; $lang['button_change_avatar'] = 'Avatar ändern'; -$lang['button_add_personal_info'] = 'Add Personal Information'; +$lang['button_add_personal_info'] = 'Persönliche Informationen hinzufügen'; $lang['button_create_report'] = 'Report erstellen'; $lang['button_new_topic'] = 'Neues Thema'; $lang['button_edit_topic'] = 'Thema bearbeiten'; @@ -61,9 +61,9 @@ /*Alert Lang*/ $lang['alert_successful_purchase'] = 'Item erfolgreich gekauft.'; -$lang['alert_upload_error'] = 'Dein bild muss im jpg oder png Format sein'; +$lang['alert_upload_error'] = 'Dein Bild muss im .jpg oder .png Format sein'; $lang['alert_changelog_not_found'] = 'Noch keine Changelogs vorhanden'; -$lang['alert_points_insufficient'] = 'Unzureichend Punkte'; +$lang['alert_points_insufficient'] = 'Unzureichende Punkte'; /*Status Lang*/ $lang['offline'] = 'Offline'; @@ -98,12 +98,17 @@ $lang['placeholder_subject'] = 'Thema'; /*Table header Lang*/ +$lang['table_header_cname'] = 'Charaktername'; +$lang['table_header_gname'] = 'Gildenname'; $lang['table_header_name'] = 'Name'; $lang['table_header_faction'] = 'Fraktion'; -$lang['table_header_total_kills'] = 'Insgesamte Kills'; -$lang['table_header_today_kills'] = 'Heutige Kills'; -$lang['table_header_yersterday_kills'] = 'Yesterday Kills'; -$lang['table_header_team_name'] = 'Team Name'; +$lang['table_header_total_kills'] = 'Gesamte Ehrenhafte Siege'; +$lang['table_header_total_honor'] = 'Gesamte Ehre'; +$lang['table_header_current_rank'] = 'Aktueller Rang'; +$lang['table_header_kills'] = 'Ehrenhafte Siege'; +$lang['table_header_today_kills'] = 'Heutige Ehrenhafte Siege'; +$lang['table_header_yersterday_kills'] = 'Gestrige Ehrenhafte Siege'; +$lang['table_header_team_name'] = 'Teamnamen'; $lang['table_header_members'] = 'Mitglieder'; $lang['table_header_rating'] = 'Bewertung'; $lang['table_header_games'] = 'Spiele'; @@ -113,12 +118,12 @@ $lang['table_header_date'] = 'Datum'; $lang['table_header_author'] = 'Autor'; $lang['table_header_time'] = 'Zeit'; -$lang['table_header_icon'] = 'Icon'; +$lang['table_header_icon'] = 'Symbol'; $lang['table_header_realm'] = 'Realm'; $lang['table_header_zone'] = 'Zone'; $lang['table_header_character'] = 'Charakter'; $lang['table_header_price'] = 'Preis'; -$lang['table_header_item_name'] = 'Item Name'; +$lang['table_header_item_name'] = 'Itemname'; $lang['table_header_items'] = 'Item(s)'; $lang['table_header_quantity'] = 'Menge'; @@ -168,15 +173,15 @@ $lang['race_maghar_orc'] = 'Maghar Ork'; /*Header Lang*/ -$lang['header_cookie_message'] = 'diese website benutzt Cookies um eine Benutzerfreundliche erfahrung zu Garantieren'; +$lang['header_cookie_message'] = 'Diese website benutzt Cookies um eine Benutzerfreundliche erfahrung zu Garantieren'; $lang['header_cookie_button'] = 'Verstanden!'; /*Footer Lang*/ -$lang['footer_rights'] = 'All rights reserved.'; +$lang['footer_rights'] = 'Alle Rechte vorbehalten.'; /*Page 404 Lang*/ $lang['page_404_title'] = '404 Seite nicht gefunden'; -$lang['page_404_description'] = 'Sieht so aus, als hättest du was kaputt gemacht'; +$lang['page_404_description'] = 'Sieht so aus, als wäre etwas kaputt gegangen'; /*Panel Lang*/ $lang['panel_acc_rank'] = 'Account Rang'; @@ -184,21 +189,21 @@ $lang['panel_vp'] = 'Vote Punkte'; $lang['panel_expansion'] = 'Erweiterung'; $lang['panel_member'] = 'Mitglied seit'; -$lang['panel_chars_list'] = 'Character Liste'; -$lang['panel_account_details'] = 'Account Details'; +$lang['panel_chars_list'] = 'Charakter Liste'; +$lang['panel_account_details'] = 'Account Informationen'; $lang['panel_last_ip'] = 'Letzte IP'; $lang['panel_request_ip'] = 'Requested IP'; -$lang['panel_change_email'] = 'Email Addresse ändern'; +$lang['panel_change_email'] = 'Email-Adresse ändern'; $lang['panel_change_username'] = 'Benutzername ändern'; $lang['panel_change_password'] = 'Passwort ändern'; $lang['panel_replace_pass_by'] = 'Password ersetzen durch'; $lang['panel_current_username'] = 'Aktueller Benutzername'; $lang['panel_current_email'] = 'Aktuelle Email Addresse'; $lang['panel_replace_email_by'] = 'Email ersetzen durch'; -$lang['panel_server_checkstatus'] = 'Server is offline. Purchases are not available.'; +$lang['panel_server_checkstatus'] = 'Der Server ist momentan offline. Einkäufe sind daher aktuell nicht möglich.'; /*Home Lang*/ -$lang['home_latest_news'] = 'Letzte neuigkeiten'; +$lang['home_latest_news'] = 'Letzte Neuigkeiten'; $lang['home_discord'] = 'Discord'; $lang['home_server_status'] = 'Server Status'; $lang['home_set_realmlist'] = 'Download Realmlist'; @@ -211,11 +216,11 @@ $lang['statistics_top_5v5'] = 'TOP 5V5'; /*News Lang*/ -$lang['news_recent_list'] = 'Kürzliche neuigkeiten'; +$lang['news_recent_list'] = 'Kürzliche Neuigkeiten'; $lang['news_comments'] = 'Kommentare'; /*Bugtracker Lang*/ -$lang['bugtracker_report_notfound'] = 'Bericht nicht gefunden'; +$lang['bugtracker_report_notfound'] = 'Ticket nicht gefunden'; /*Donate Lang*/ $lang['donate_get'] = 'Erhalte'; @@ -226,13 +231,13 @@ /*Forum Lang*/ $lang['forum_posts_count'] = 'Posts'; $lang['forum_topic_locked'] = 'Dieses Thema ist geschlossen.'; -$lang['forum_comment_locked'] = 'Du willst mit schreiben? Melde dich an und tritt der Konversation bei'; -$lang['forum_comment_locked_act'] = 'Have something to say? Please activate your account first.'; -$lang['forum_comment_header'] = 'Konversation beitretten'; +$lang['forum_comment_locked'] = 'Du willst ein Kommentar abgeben? Melde dich an und tritt der Konversation bei'; +$lang['forum_comment_locked_act'] = 'Hast du etwas zu sagen? Bitte aktiviere zuerst dein Konto.'; +$lang['forum_comment_header'] = 'Konversation beitreten'; $lang['forum_not_authorized'] = 'Nicht autorisiert'; -$lang['forum_post_history'] = 'Post History ansehen'; +$lang['forum_post_history'] = 'Nachrichtenverlauf ansehen'; $lang['forum_topic_list'] = 'Themen Liste'; -$lang['forum_last_activity'] = 'Letzte aktivietät'; +$lang['forum_last_activity'] = 'Letzte Aktivität'; $lang['forum_last_post_by'] = 'Letzter Post durch'; $lang['forum_whos_online'] = 'Wer ist Online'; $lang['forum_replies_count'] = 'Antworten'; @@ -240,7 +245,7 @@ $lang['forum_users_count'] = 'Benutzer'; /*Store Lang*/ -$lang['store_categories'] = 'Store Kategorien'; +$lang['store_categories'] = 'Shop Kategorien'; $lang['store_top_items'] = 'TOP Items'; $lang['store_cart_added'] = 'Zum Einkaufswagen hinzugefügt'; $lang['store_cart_in_your'] = 'In deinem Einkaufswagen'; @@ -251,6 +256,12 @@ $lang['soap_send_body'] = 'Danke für deinen Einkauf!'; /*Email Lang*/ -$lang['email_password_recovery_p1'] = 'Password Recovery Confirmation'; -$lang['email_password_recovery_p2'] = 'Password Recovery'; -$lang['email_account_activation'] = 'Activate Your %s Account'; +$lang['email_password_recovery_p1'] = 'Passwort-Wiederherstellungs-Bestätigung'; +$lang['email_password_recovery_p2'] = 'Password-Wiederherstellung'; +$lang['email_account_activation'] = 'Aktiviere deinen Account: %s'; + +/*Timeline Lang*/ +$lang['timeline_subtitle'] = 'Content Release Timeline'; +$lang['timeline_general'] = 'Allgemein'; +$lang['timeline_pve'] = 'PvE'; +$lang['timeline_pvp'] = 'PvP'; diff --git a/application/language/german/index.html b/application/language/german/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/language/german/index.html +++ b/application/language/german/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/language/german/notification_lang.php b/application/language/german/notification_lang.php index 487e8551..98349244 100644 --- a/application/language/german/notification_lang.php +++ b/application/language/german/notification_lang.php @@ -66,6 +66,7 @@ $lang['notification_name_empty'] = 'Name ist nicht ausgefüllt'; $lang['notification_id_empty'] = 'Id ist nicht ausgefüllt'; $lang['notification_reply_empty'] = 'Antwort ist nicht ausgefüllt'; +$lang['notification_general_error'] = 'Something went wrong.'; $lang['notification_reply_created'] = 'Antwort wurde gesendet.'; $lang['notification_reply_updated'] = 'Reply has been updated.'; $lang['notification_reply_deleted'] = 'antwort wurde gelöscht.'; @@ -112,7 +113,9 @@ $lang['notification_topsite_created'] = 'Die Topseite wurde erstellt.'; $lang['notification_topsite_edited'] = 'Die Topseite wurde bearbeitet.'; $lang['notification_topsite_deleted'] = 'Die Topseite wurde gelöscht.'; - +$lang['notification_timeline_created'] = 'The Timeline item has been created.'; +$lang['notification_timeline_edited'] = 'The Timeline item has been edited.'; +$lang['notification_timeline_deleted'] = 'The Timeline item has been deleted.'; $lang['notification_settings_updated'] = 'Die Einstellungen wurden aktuallisiert.'; $lang['notification_module_enabled'] = 'Das Modul wurde aktiviert.'; $lang['notification_module_disabled'] = 'Das Modul wurde deaktiviert.'; diff --git a/application/language/index.html b/application/language/index.html index 69df4e1d..1ab9e4f8 100644 --- a/application/language/index.html +++ b/application/language/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/language/spanish/admin_lang.php b/application/language/spanish/admin_lang.php index 35a25ccc..d356a742 100644 --- a/application/language/spanish/admin_lang.php +++ b/application/language/spanish/admin_lang.php @@ -30,6 +30,7 @@ $lang['admin_nav_download'] = 'Descargas'; $lang['admin_nav_Tickets'] = 'Tickets'; $lang['admin_nav_manage_tickets'] = 'Administrar Tickets'; +$lang['admin_nav_timeline'] = 'Timeline'; /*Sections Lang*/ $lang['section_general_settings'] = 'Configuración General'; @@ -75,6 +76,10 @@ $lang['table_header_guid'] = 'Guid'; $lang['table_header_information'] = 'Información'; $lang['table_header_value'] = 'Valor'; +$lang['table_header_patch'] = 'Patch'; +$lang['table_header_date'] = 'Date'; +$lang['table_header_image'] = 'Image'; +$lang['table_header_order'] = 'Order'; /*Input Placeholder Lang*/ $lang['placeholder_manage_account'] = 'Administrar Cuenta'; @@ -107,6 +112,8 @@ $lang['placeholder_create_download'] = 'Crear una Descarga'; $lang['placeholder_edit_download'] = 'Editar Descarga'; $lang['placeholder_upload_image'] = 'Cargar imagen'; +$lang['placeholder_create_timeline'] = 'Create Timeline Item'; +$lang['placeholder_edit_timeline'] = 'Edit Timeline Item'; $lang['placeholder_icon_name'] = 'Nombre del icono'; $lang['placeholder_category'] = 'Categoría'; $lang['placeholder_name'] = 'Nombre'; @@ -137,6 +144,8 @@ $lang['placeholder_emulator'] = 'Emulador'; $lang['placeholder_size'] = 'Tamaño'; $lang['placeholder_select_type'] = 'Selecciona un Tipo'; +$lang['placeholder_patch'] = 'Select Patch'; +$lang['placeholder_date'] = 'Select Date'; /*Config Lang*/ $lang['conf_website_name'] = 'Nombre del Sitio Web'; @@ -189,6 +198,7 @@ $lang['option_disabled'] = 'Deshabilitado'; $lang['option_ssl'] = 'SSL'; $lang['option_tls'] = 'TLS'; +$lang['option_none'] = 'None'; $lang['option_everyone'] = 'Todos'; $lang['option_staff'] = 'STAFF'; $lang['option_all'] = 'STAFF - Todos'; diff --git a/application/language/spanish/general_lang.php b/application/language/spanish/general_lang.php index c2e35117..f13ed3ab 100644 --- a/application/language/spanish/general_lang.php +++ b/application/language/spanish/general_lang.php @@ -98,9 +98,14 @@ $lang['placeholder_subject'] = 'Asunto'; /*Table header Lang*/ +$lang['table_header_cname'] = 'Character Name'; +$lang['table_header_gname'] = 'Guild Name'; $lang['table_header_name'] = 'Nombre'; $lang['table_header_faction'] = 'Facción'; $lang['table_header_total_kills'] = 'Muertes Totales'; +$lang['table_header_total_honor'] = 'Total Honor'; +$lang['table_header_current_rank'] = 'Current Rank'; +$lang['table_header_kills'] = 'Kills'; $lang['table_header_today_kills'] = 'Muertes hoy'; $lang['table_header_yersterday_kills'] = 'Muertes ayer'; $lang['table_header_team_name'] = 'Nombre del equipo'; @@ -254,3 +259,9 @@ $lang['email_password_recovery_p1'] = 'Password Recovery Confirmation'; $lang['email_password_recovery_p2'] = 'Password Recovery'; $lang['email_account_activation'] = 'Activate Your %s Account'; + +/*Timeline Lang*/ +$lang['timeline_subtitle'] = 'Content Release Timeline'; +$lang['timeline_general'] = 'General'; +$lang['timeline_pve'] = 'PvE'; +$lang['timeline_pvp'] = 'PvP'; \ No newline at end of file diff --git a/application/language/spanish/index.html b/application/language/spanish/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/language/spanish/index.html +++ b/application/language/spanish/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/language/spanish/notification_lang.php b/application/language/spanish/notification_lang.php index 4bb4cf0c..962518a3 100644 --- a/application/language/spanish/notification_lang.php +++ b/application/language/spanish/notification_lang.php @@ -66,6 +66,7 @@ $lang['notification_name_empty'] = 'El nombre está vacío'; $lang['notification_id_empty'] = 'El id está vacío'; $lang['notification_reply_empty'] = 'La respuesta está vacía'; +$lang['notification_general_error'] = 'Something went wrong.'; $lang['notification_reply_created'] = 'La respuesta ha sido enviada.'; $lang['notification_reply_updated'] = 'Reply has been updated.'; $lang['notification_reply_deleted'] = 'Se ha eliminado la respuesta.'; @@ -112,7 +113,9 @@ $lang['notification_topsite_created'] = 'El topsite ha sido creado.'; $lang['notification_topsite_edited'] = 'El topsite ha sido editado.'; $lang['notification_topsite_deleted'] = 'El topsite ha sido eliminado.'; - +$lang['notification_timeline_created'] = 'The Timeline item has been created.'; +$lang['notification_timeline_edited'] = 'The Timeline item has been edited.'; +$lang['notification_timeline_deleted'] = 'The Timeline item has been deleted.'; $lang['notification_settings_updated'] = 'La configuración ha sido actualizada.'; $lang['notification_module_enabled'] = 'El módulo ha sido habilitado.'; $lang['notification_module_disabled'] = 'El módulo ha sido desactivado.'; diff --git a/application/libraries/MY_Form_validation.php b/application/libraries/MY_Form_validation.php new file mode 100644 index 00000000..2e3d3d0d --- /dev/null +++ b/application/libraries/MY_Form_validation.php @@ -0,0 +1,9 @@ +input->server('HTTP_X_HTTP_METHOD_OVERRIDE'); } - $method = strtolower($method); + $method = strtolower($method ?? ''); } if (empty($method)) { diff --git a/application/libraries/Template.php b/application/libraries/Template.php index 3eab4240..5248a3f3 100644 --- a/application/libraries/Template.php +++ b/application/libraries/Template.php @@ -88,10 +88,10 @@ public function __construct($config = array()) } $this->set_metadata('stylesheet', base_url($assets . 'core/amaranjs/css/amaran.min.css'), 'link'); $this->set_metadata('script', base_url($assets . 'core/js/jquery.min.js'), 'script'); - $this->set_metadata('script', base_url($assets . 'core/fontawesome/js/all.min.js'), 'script'); + $this->set_metadata('script', base_url($assets . 'core/fontawesome/js/solid.min.js'), 'script'); + $this->set_metadata('script', base_url($assets . 'core/fontawesome/js/regular.min.js'), 'script'); + $this->set_metadata('script', base_url($assets . 'core/fontawesome/js/fontawesome.min.js'), 'script'); $this->set_metadata('script', base_url($assets . 'core/amaranjs/js/jquery.amaran.min.js'), 'script'); - $this->set_metadata('script', 'https://www.google.com/recaptcha/api.js', 'script'); - $this->set_metadata('script', base_url($assets . 'core/sweetalert2/js/sweetalert2@10.js'), 'script'); log_message('debug', 'Template Class Initialized'); } diff --git a/application/libraries/configwriter/index.html b/application/libraries/configwriter/index.html new file mode 100644 index 00000000..1ab9e4f8 --- /dev/null +++ b/application/libraries/configwriter/index.html @@ -0,0 +1,7 @@ + +403 Forbidden + +

403 Forbidden

+
yesilcms
+ + \ No newline at end of file diff --git a/application/libraries/index.html b/application/libraries/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/libraries/index.html +++ b/application/libraries/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/logs/index.html b/application/logs/index.html index b702fbc3..1ab9e4f8 100644 --- a/application/logs/index.html +++ b/application/logs/index.html @@ -1,11 +1,7 @@ - - - 403 Forbidden - +403 Forbidden - -

Directory access is forbidden.

- +

403 Forbidden

+
yesilcms
- + \ No newline at end of file diff --git a/application/migrations/001_create_ci_sessions.php b/application/migrations/001_create_ci_sessions.php index 1135cf06..e307b25c 100644 --- a/application/migrations/001_create_ci_sessions.php +++ b/application/migrations/001_create_ci_sessions.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_ci_sessions extends CI_Migration { diff --git a/application/migrations/002_create_avatars.php b/application/migrations/002_create_avatars.php index 0f8fc991..e63bccdc 100644 --- a/application/migrations/002_create_avatars.php +++ b/application/migrations/002_create_avatars.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_avatars extends CI_Migration { diff --git a/application/migrations/003_create_bugtracker.php b/application/migrations/003_create_bugtracker.php index 129081ca..9f478062 100644 --- a/application/migrations/003_create_bugtracker.php +++ b/application/migrations/003_create_bugtracker.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_bugtracker extends CI_Migration { diff --git a/application/migrations/004_create_bugtracker_priority.php b/application/migrations/004_create_bugtracker_priority.php index c154bb4f..a87e626b 100644 --- a/application/migrations/004_create_bugtracker_priority.php +++ b/application/migrations/004_create_bugtracker_priority.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_bugtracker_priority extends CI_Migration { diff --git a/application/migrations/005_create_bugtracker_status.php b/application/migrations/005_create_bugtracker_status.php index 907e6502..d510aeeb 100644 --- a/application/migrations/005_create_bugtracker_status.php +++ b/application/migrations/005_create_bugtracker_status.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_bugtracker_status extends CI_Migration { diff --git a/application/migrations/006_create_bugtracker_type.php b/application/migrations/006_create_bugtracker_type.php index a815d8d9..d34a8a2b 100644 --- a/application/migrations/006_create_bugtracker_type.php +++ b/application/migrations/006_create_bugtracker_type.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_bugtracker_type extends CI_Migration { diff --git a/application/migrations/007_create_changelogs.php b/application/migrations/007_create_changelogs.php index a17580ee..1f7b1fbd 100644 --- a/application/migrations/007_create_changelogs.php +++ b/application/migrations/007_create_changelogs.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_changelogs extends CI_Migration { diff --git a/application/migrations/008_create_donate.php b/application/migrations/008_create_donate.php index ba7f8806..1945299b 100644 --- a/application/migrations/008_create_donate.php +++ b/application/migrations/008_create_donate.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_donate extends CI_Migration { diff --git a/application/migrations/009_create_donate_logs.php b/application/migrations/009_create_donate_logs.php index 06f7018a..9d323206 100644 --- a/application/migrations/009_create_donate_logs.php +++ b/application/migrations/009_create_donate_logs.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_donate_logs extends CI_Migration { diff --git a/application/migrations/010_create_forum.php b/application/migrations/010_create_forum.php index b466ac09..7a863442 100644 --- a/application/migrations/010_create_forum.php +++ b/application/migrations/010_create_forum.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_forum extends CI_Migration { diff --git a/application/migrations/011_create_forum_category.php b/application/migrations/011_create_forum_category.php index c4a05c6b..b526203c 100644 --- a/application/migrations/011_create_forum_category.php +++ b/application/migrations/011_create_forum_category.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_forum_category extends CI_Migration { diff --git a/application/migrations/012_create_forum_replies.php b/application/migrations/012_create_forum_replies.php index 4b745201..63b0cf5b 100644 --- a/application/migrations/012_create_forum_replies.php +++ b/application/migrations/012_create_forum_replies.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_forum_replies extends CI_Migration { diff --git a/application/migrations/013_create_forum_topics.php b/application/migrations/013_create_forum_topics.php index 96cf2355..f508c795 100644 --- a/application/migrations/013_create_forum_topics.php +++ b/application/migrations/013_create_forum_topics.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_forum_topics extends CI_Migration { diff --git a/application/migrations/014_create_menu.php b/application/migrations/014_create_menu.php index 910968cf..4edd9b7a 100644 --- a/application/migrations/014_create_menu.php +++ b/application/migrations/014_create_menu.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_menu extends CI_Migration { @@ -55,13 +55,14 @@ public function up() array('name' => 'Forums', 'url' => 'forum', 'icon' => 'fas fa-comments', 'main' => '1', 'child' => '0', 'type' => '1'), array('name' => 'Online Players', 'url' => 'online', 'icon' => 'fas fa-user', 'main' => '1', 'child' => '0', 'type' => '1'), array('name' => 'Armory', 'url' => 'armory', 'icon' => 'fas fa-users', 'main' => '1', 'child' => '0', 'type' => '1'), + array('name' => 'Database', 'url' => 'database', 'icon' => 'fas fa-database', 'main' => '1', 'child' => '0', 'type' => '1'), array('name' => 'Account', 'url' => '#', 'icon' => 'fas fa-house-user', 'main' => '2', 'child' => '0', 'type' => '1'), - array('name' => 'Donate', 'url' => 'donate', 'icon' => 'fas fa-hand-holding-dollar', 'main' => '1', 'child' => '5', 'type' => '1'), - array('name' => 'Vote', 'url' => 'vote', 'icon' => 'fas fa-check-to-slot', 'main' => '1', 'child' => '5', 'type' => '1'), - array('name' => 'Store', 'url' => 'store', 'icon' => 'fas fa-store', 'main' => '1', 'child' => '5', 'type' => '1'), - array('name' => 'Bugtracker', 'url' => 'bugtracker', 'icon' => 'fas fa-bug', 'main' => '1', 'child' => '5', 'type' => '1'), - array('name' => 'Changelogs', 'url' => 'changelogs', 'icon' => 'fas fa-scroll', 'main' => '1', 'child' => '5', 'type' => '1'), - array('name' => 'Download', 'url' => 'download', 'icon' => 'fas fa-download', 'main' => '1', 'child' => '5', 'type' => '1'), + array('name' => 'Donate', 'url' => 'donate', 'icon' => 'fas fa-hand-holding-dollar', 'main' => '1', 'child' => '6', 'type' => '1'), + array('name' => 'Vote', 'url' => 'vote', 'icon' => 'fas fa-check-to-slot', 'main' => '1', 'child' => '6', 'type' => '1'), + array('name' => 'Store', 'url' => 'store', 'icon' => 'fas fa-store', 'main' => '1', 'child' => '6', 'type' => '1'), + array('name' => 'Bugtracker', 'url' => 'bugtracker', 'icon' => 'fas fa-bug', 'main' => '1', 'child' => '6', 'type' => '1'), + array('name' => 'Changelogs', 'url' => 'changelogs', 'icon' => 'fas fa-scroll', 'main' => '1', 'child' => '6', 'type' => '1'), + array('name' => 'Download', 'url' => 'download', 'icon' => 'fas fa-download', 'main' => '1', 'child' => '6', 'type' => '1'), array('name' => 'Terms of Use', 'url' => 'page/terms-of-use', 'icon' => 'fas fa-book-open', 'main' => '1', 'child' => '0', 'type' => '1') ); $this->db->insert_batch('menu', $data); diff --git a/application/migrations/015_create_modules.php b/application/migrations/015_create_modules.php index 3c7f48a9..5669d4c2 100644 --- a/application/migrations/015_create_modules.php +++ b/application/migrations/015_create_modules.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_modules extends CI_Migration { @@ -49,7 +49,7 @@ public function up() array('name' => 'Bugtracker', 'status' => '1'), array('name' => 'Changelogs', 'status' => '1'), array('name' => 'Download', 'status' => '1'), - array('name' => 'Armory', 'status' => '1'), + array('name' => 'Armory', 'status' => '1') ); $this->db->insert_batch('modules', $data); } diff --git a/application/migrations/016_create_news.php b/application/migrations/016_create_news.php index 947bdb41..a257949a 100644 --- a/application/migrations/016_create_news.php +++ b/application/migrations/016_create_news.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_news extends CI_Migration { @@ -45,6 +45,12 @@ public function up() 'image' => 'news_default.jpg', 'date' => '1659139200' ), + array( + 'title' => 'YesilCMS is now much more powerful.', + 'description' => '

Many improvements and features have been added with the latest version.

Some of them can be listed as;

The project is at the very beginning of the road and there are unlimited options that can be implemented. You can also contribute here!

', + 'image' => 'news_default_2.jpg', + 'date' => '1667908800' + ) ); $this->db->insert_batch('news', $data); } diff --git a/application/migrations/017_create_news_comments.php b/application/migrations/017_create_news_comments.php index f3468d1e..672018d0 100644 --- a/application/migrations/017_create_news_comments.php +++ b/application/migrations/017_create_news_comments.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_news_comments extends CI_Migration { diff --git a/application/migrations/018_create_pages.php b/application/migrations/018_create_pages.php index 0a309963..ac580533 100644 --- a/application/migrations/018_create_pages.php +++ b/application/migrations/018_create_pages.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_pages extends CI_Migration { diff --git a/application/migrations/019_create_pending_users.php b/application/migrations/019_create_pending_users.php index 54c6440f..30209c70 100644 --- a/application/migrations/019_create_pending_users.php +++ b/application/migrations/019_create_pending_users.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_pending_users extends CI_Migration { diff --git a/application/migrations/020_create_ranks_default.php b/application/migrations/020_create_ranks_default.php index 689bb50d..c8c8d5b1 100644 --- a/application/migrations/020_create_ranks_default.php +++ b/application/migrations/020_create_ranks_default.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_ranks_default extends CI_Migration { diff --git a/application/migrations/021_create_slides.php b/application/migrations/021_create_slides.php index 1836fd71..29f4062f 100644 --- a/application/migrations/021_create_slides.php +++ b/application/migrations/021_create_slides.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_slides extends CI_Migration { @@ -43,7 +43,7 @@ public function up() $data = array( array( 'title' => 'YesilCMS - Welcome to your website.', - 'description' => 'This is a reworked version of BlizzCMS that adds compability to vMaNGOS
and new features such as Armory, Account Activation, Password Recovery, API infrastructure and more.', + 'description' => 'YesilCMS is fully compatible with vMaNGOS and has many new features such as Armory, Account Activation, Password Recovery, API infrastructure and more.', 'type' => '1', 'route' => 's-1.jpg' ), diff --git a/application/migrations/022_create_realms.php b/application/migrations/022_create_realms.php index c5fa3c0c..b296bf47 100644 --- a/application/migrations/022_create_realms.php +++ b/application/migrations/022_create_realms.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_realms extends CI_Migration { diff --git a/application/migrations/023_create_store_categories.php b/application/migrations/023_create_store_categories.php index 80991e00..034644ca 100644 --- a/application/migrations/023_create_store_categories.php +++ b/application/migrations/023_create_store_categories.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_store_categories extends CI_Migration { diff --git a/application/migrations/024_create_store_items.php b/application/migrations/024_create_store_items.php index 122336e6..5d67c16e 100644 --- a/application/migrations/024_create_store_items.php +++ b/application/migrations/024_create_store_items.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_store_items extends CI_Migration { diff --git a/application/migrations/025_create_store_top.php b/application/migrations/025_create_store_top.php index 893704c1..9ecb9917 100644 --- a/application/migrations/025_create_store_top.php +++ b/application/migrations/025_create_store_top.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_store_top extends CI_Migration { diff --git a/application/migrations/026_create_users.php b/application/migrations/026_create_users.php index 42e193b0..c44c6912 100644 --- a/application/migrations/026_create_users.php +++ b/application/migrations/026_create_users.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_users extends CI_Migration { diff --git a/application/migrations/027_create_votes.php b/application/migrations/027_create_votes.php index 202efc60..3845cb70 100644 --- a/application/migrations/027_create_votes.php +++ b/application/migrations/027_create_votes.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $db - * @property mixed $dbforge + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_votes extends CI_Migration { diff --git a/application/migrations/028_create_votes_logs.php b/application/migrations/028_create_votes_logs.php index e2328279..00cec756 100644 --- a/application/migrations/028_create_votes_logs.php +++ b/application/migrations/028_create_votes_logs.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_votes_logs extends CI_Migration { diff --git a/application/migrations/029_create_mod_logs.php b/application/migrations/029_create_mod_logs.php index 5c6c2f96..b21da97d 100644 --- a/application/migrations/029_create_mod_logs.php +++ b/application/migrations/029_create_mod_logs.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_mod_logs extends CI_Migration { diff --git a/application/migrations/030_create_zones.php b/application/migrations/030_create_zones.php index 3a061772..f228648a 100644 --- a/application/migrations/030_create_zones.php +++ b/application/migrations/030_create_zones.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_zones extends CI_Migration { diff --git a/application/migrations/031_alter_store_items.php b/application/migrations/031_alter_store_items.php index ab128d8d..e3d6e0f1 100644 --- a/application/migrations/031_alter_store_items.php +++ b/application/migrations/031_alter_store_items.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_alter_store_items extends CI_Migration { diff --git a/application/migrations/032_create_mod_actions.php b/application/migrations/032_create_mod_actions.php index 63fbb517..32d8deaf 100644 --- a/application/migrations/032_create_mod_actions.php +++ b/application/migrations/032_create_mod_actions.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_mod_actions extends CI_Migration { diff --git a/application/migrations/033_alter_store_categories.php b/application/migrations/033_alter_store_categories.php index 0d1f10c1..3fe87500 100644 --- a/application/migrations/033_alter_store_categories.php +++ b/application/migrations/033_alter_store_categories.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_alter_store_categories extends CI_Migration { diff --git a/application/migrations/034_alter_store_top.php b/application/migrations/034_alter_store_top.php index 97806e6e..e2c8791e 100644 --- a/application/migrations/034_alter_store_top.php +++ b/application/migrations/034_alter_store_top.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_alter_store_top extends CI_Migration { diff --git a/application/migrations/035_alter_pending_users.php b/application/migrations/035_alter_pending_users.php index 861c43be..d55f9adf 100644 --- a/application/migrations/035_alter_pending_users.php +++ b/application/migrations/035_alter_pending_users.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_alter_pending_users extends CI_Migration { diff --git a/application/migrations/036_alter_users.php b/application/migrations/036_alter_users.php index c6398ce5..bf81f499 100644 --- a/application/migrations/036_alter_users.php +++ b/application/migrations/036_alter_users.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_alter_users extends CI_Migration { diff --git a/application/migrations/037_create_store_logs.php b/application/migrations/037_create_store_logs.php index 4c6e5bc8..f4af6220 100644 --- a/application/migrations/037_create_store_logs.php +++ b/application/migrations/037_create_store_logs.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_store_logs extends CI_Migration { diff --git a/application/migrations/038_alter_store_menu.php b/application/migrations/038_alter_store_menu.php index 438e0bbc..c1ec8b9d 100644 --- a/application/migrations/038_alter_store_menu.php +++ b/application/migrations/038_alter_store_menu.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_alter_store_menu extends CI_Migration { diff --git a/application/migrations/039_create_download.php b/application/migrations/039_create_download.php index 0fb4f7fc..6ef1b714 100644 --- a/application/migrations/039_create_download.php +++ b/application/migrations/039_create_download.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_download extends CI_Migration { diff --git a/application/migrations/040_create_password_reset.php b/application/migrations/040_create_password_reset.php index 24a125b6..31792bf8 100644 --- a/application/migrations/040_create_password_reset.php +++ b/application/migrations/040_create_password_reset.php @@ -3,7 +3,7 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge + * @property CI_DB_forge $dbforge */ class Migration_create_password_reset extends CI_Migration { diff --git a/application/migrations/041_create_activation_status.php b/application/migrations/041_create_activation_status.php index ee20f22c..7a7b909d 100644 --- a/application/migrations/041_create_activation_status.php +++ b/application/migrations/041_create_activation_status.php @@ -3,8 +3,8 @@ defined('BASEPATH') or exit('No direct script access allowed'); /** - * @property mixed $dbforge - * @property mixed $db + * @property CI_DB_forge $dbforge + * @property CI_DB_query_builder $db */ class Migration_create_activation_status extends CI_Migration { diff --git a/application/migrations/042_create_timeline.php b/application/migrations/042_create_timeline.php new file mode 100644 index 00000000..96748a47 --- /dev/null +++ b/application/migrations/042_create_timeline.php @@ -0,0 +1,151 @@ +dbforge->add_field(array( + 'id' => array( + 'type' => 'INT', + 'constraint' => '10', + 'null' => false, + 'unsigned' => true, + 'auto_increment' => true + ), + 'description' => array( + 'type' => 'JSON', + 'null' => false, + 'comment' => 'JSON for MySQL, LONGTEXT for MariaDB' + ), + 'patch' => array( + 'type' => 'VARCHAR', + 'constraint' => '16', + 'null' => false + ), + 'date' => array( + 'type' => 'DATE', + 'default' => false, + 'comment' => 'YYYY-MM-DD' + ), + 'image' => array( + 'type' => 'VARCHAR', + 'constraint' => '255', + 'null' => false + ), + 'order' => array( + 'type' => 'TINYINT', + 'constraint' => '1', + 'default' => 1, + 'null' => false, + 'unsigned' => true, + ) + )); + $this->dbforge->add_key('id', true); + $this->dbforge->create_table('timeline'); + + $data = array( + array( + 'description' => '{"description":"

Patch 1.1.0 was the first version<\/strong> of the game during the North America release of World of Warcraft.<\/p>\r\n

Racial traits are now available for all races. Each race receives at least 4 traits (several passive and at least one active trait per race). Undead racial traits have changed to be more consistent with the new traits and Undead players are now considered Humanoid targets rather than Undead targets.<\/p>\r\n

New Raid Encounters<\/strong><\/p>\r\n

Rumors of Onyxia, an enormous black dragon, have been heard through out Azeroth. Be sure to bring many brave warriors for she won\'t take kindly to intruders in her lair. Both factions will need to complete unique, and challenging quests to gain access to the Onyxia encounter. **During the beta testing there will be a temporary placeholder vendor who sells keys to Onyxia\'s lair for testing purposes.<\/p>\r\n

Discovered in the heart of Blackrock Mountain beyond the Depths, lies the Molten Core. Within the Molten Core lives a multitude of ancient and powerful evil. Adventurers be ware, for the dangers found within the Molten Core are many and takes many forms.<\/p>\r\n

**Raid loot is being worked on and temporary loot has been placed in raid encounters<\/p>","general":[""],"pve":["Scholomance, a level 57-60 instanced dungeon in Western Plaguelands is now open.","Ragefire Chasm, a low level instance dungeon in Orgrimmar, is now available."],"pvp":["Mind Control and Hunter\'s Mark flag you for PvP when used on enemy players.","Healing and buffing NPCs will not flag you for PvP unless those NPCs are in combat.","NPCs no longer tap creatures they are fighting."]}', + 'patch' => '1.1.0', + 'date' => '2004-11-07', + 'image' => 'cc5c52b0d41717547bf1d9b9ccb74135.jpg', + 'order' => 1 + ), + array( + 'description' => '{"description":"

Patch 1.2.0: Mysteries of Maraudon<\/strong> was released on December 18, 2004.<\/p>\r\n

Happy Holidays!<\/strong><\/p>\r\n

The holidays are here and the citizens of Azeroth are celebrating the occasion with festive decorations and winter time activities. Keep an eye out for some fun and exciting surprises throughout the world!<\/p>","general":["Players will now receive credit for killing a monster even if they die during battle.","Players will now be able to purchase and train mounts from other races in their faction. However, you will first need to obtain \"Exalted\" reputation status with that race in order to do so. Mounts of the opposing faction are not available for purchase.","A \"Looking for Group\" channel has been added. Additional improvements in looking for group functionality will be added in future patches."],"pve":["New Dungeon: Maraudon","If you die in Molten Core, you will now be able to retrieve your corpse at the Blackrock Depths instance line.","Several instance bosses and sub-bosses have had their levels slightly lowered."],"pvp":["Gurubashi Arena - The arena in Stranglethorn Vale has been changed so that free-for-all PvP will only take place on the floor of the arena, and no longer in the stands or on the entrance ramp. Please keep in mind that on PvP realms, members of the opposite faction can still attack you anywhere in the arena because Stranglethorn Vale is a contested area. There is now a short countdown before a duel starts."]}', + 'patch' => '1.2.0', + 'date' => '2004-12-18', + 'image' => '0eaa74871efd8005cd12c8a3e0a17348.jpg', + 'order' => 2 + ), + array( + 'description' => '{"description":"

Patch 1.3.0: Ruins of the Dire Maul<\/strong> was released on March 7, 2005.<\/p>\r\n

Diremaul<\/strong><\/p>\r\n

Diremaul, a new dungeon for players level 56-60, is now open and ready for business. Diremaul is populated by a fierce tribe of ogres and is located in the western region of Feralas. Diremaul will be limited groups of no more than five players each.<\/p>","general":["Bind on Pickup items that are of a quality below the default group loot threshold (white\/gray) will no longer require confirmation before looting.","Quests that are not completable while in a raid group are no longer allowed if the instance is owned by a raid group, regardless of whether you are currently in that raid group or not."],"pve":["New Dungeon: Dire Maul","Players who have completed the Molten Core discovery quest can now port directly to the zone, bypassing Blackrock Depths.","Several of the dungeon and raid armor sets have been updated with their non-placeholder textures. These sets include the Devout, Prophecy, Elements, Arcanist\'s and Wildheart sets. Future patches will update more dungeon and raid sets."],"pvp":["Numbers and punctuation will not be passed through chat communication to members of the opposing faction.","Spells in PvP now have a slight increase in range and area of effect when targets are moving. This should improve the overall usability of spells and ranged attacks."]}', + 'patch' => '1.3.0', + 'date' => '2005-03-07', + 'image' => '2b12c9c00fcf52f931b63eeadc557415.jpg', + 'order' => 3 + ), + array( + 'description' => '{"description":"

Patch 1.4.0: The Call to War<\/strong>\u00a0was released on April 19, 2005.<\/p>\r\n

PvP Honor System<\/strong><\/p>\r\n

The Player versus Player Honor System is now active. Players will be able to gain rankings based on their PvP performance, with lucrative rewards for those who distinguish themselves on the field of battle! Read more about the PvP Honor system.<\/p>\r\n

Children\'s Week<\/strong><\/p>\r\n

Children\'s Week is celebrated in Orgrimmar and Stormwind City at the start of May and lasts for a week. It is a time to give back to the innocents of war: the orphans!<\/p>","general":["Level 60 mounts purchased at vendors now have a whole new look. Faster undead mounts already have a different look and so have not changed. The new mounts can be seen standing near the mount vendors. If you have one of the old fast mounts, you can exchange it for one with a new look at the mount vendor.","Healing-over-time spells should now be improved by "],"pve":["Invasions by elementals at different locations on Kalimdor have reportedly been occurring sporadically every few days. Concerned adventurers should investigate Silithus, Un\'Goro Crater, Azshara, and Winterspring to counter these incursions."],"pvp":["Player vs Player Honor System"]}', + 'patch' => '1.4.0', + 'date' => '2005-04-19', + 'image' => '121b0f29a5053e16487d222cae35d5cb.jpg', + 'order' => 4 + ), + array( + 'description' => '{"description":"

Patch 1.5.0: Battlegrounds<\/strong> was released on June 7, 2005.<\/p>\r\n

Battlegrounds Arrive!<\/strong><\/p>\r\n

The Warsong Gulch and Alterac Valley battlegrounds are now available. The Warsong Gulch entrances may be found in the northern Barrens near the Mor\'Shan Rampart (Horde) and south of Silverwing Outpost in Ashenvale (Alliance). The Alterac Valley entrances may be found east of Sofera\'s Naze in Alterac (Horde), and in the Headlands of Alterac (Alliance).<\/p>","general":["Pet speed has been increased when out of combat and following their master.","Berserking (Troll Racial) - Updated tooltip to clarify ability only usable following a melee critical.","Hardiness (Orc Racial) - Fixed a bug that caused many abilities to ignore the additional resistance."],"pve":[""],"pvp":["Honor System","Dishonorable kills - gained by killing a trivial Civilian NPC - now has a negative impact on a player\'s honor. Enough dishonorable kills will reduce a player\'s rank all the way to zero.","Players may now see an \"estimated contribution point value\" in the combat log for an honorable kill. Note that this value does not take diminishing returns against the same player into account, and is therefore \"estimated\".","\"Team Contribution Points\" has been renamed to \"Honor\"","Players will see their last week\'s kill data in the \"Last Week\" section of the Honor System UI even if they did not achieve the 25 honorable kills required to gain standing or rank.","Dueling is now allowed within Everlook."]}', + 'patch' => '1.5.0', + 'date' => '2005-06-07', + 'image' => '0804b3294cec4a4ba2dbde5e2ff9829f.jpg', + 'order' => 5 + ), + array( + 'description' => '{"description":"

Patch 1.6.0: Assault on Blackwing Lair<\/strong> was a major content patch for World of Warcraft. Among other changes, it featured the release of the Blackwing Lair raid instance, the introduction of the Darkmoon Faire to Azeroth, Battlemasters in major cities, and revamps of the Warlock and Warrior talent trees.<\/p>\r\n

Blackwing Lair Released<\/strong><\/p>\r\n

Nefarian\'s sanctum, Blackwing Lair, can be found at the very height of Blackrock Spire. It is there in the dark recesses of the mountain\'s peak that Nefarian has begun to unfold the final stages of his plan to destroy Ragnaros once and for all and lead his army to undisputed supremacy over all the races of Azeroth. Blackwing Lair is a max-level, 40-player raid dungeon, with many new encounters and tempting rewards awaiting the intrepid adventurer that dares enter its halls.<\/p>\r\n

Darkmoon Faire<\/strong><\/p>\r\n

A gathering of the exotic from around the world and beyond, Silas Darkmoon has brought together the Darkmoon Faire as a celebration of the wondrous and mysterious found in Azeroth. While the Faire spends most of their time in parts unknown, they do stop from time to time in Mulgore and Elwynn Forest. When the faire is on its way barkers will stop by Orgrimmar and Ironforge to announce its arrival.<\/p>\r\n

Battlemasters<\/strong><\/p>\r\n

There is a new way to enter the battleground queues. Battlemasters! Located in each of the cities, right-clicking on a battlemaster will allow your character to enter a battleground queue just like you normally would if you touched that battleground\'s entrance portal. The functionality is exactly the same, so when it\'s your character\'s time to enter the chosen battleground, you will be teleported directly in. Local guards can give you directions on how to find the battlemaster that you\'re looking for.<\/p>","general":[""],"pve":["Blackwing Lair introduced","Several spawns removed from Scholomance. This should make for a more enjoyable 5 player experience.","Phase shifted imps are no longer hit by Magmadar\'s Lava Bomb."],"pvp":["There is now a progress bar on the Honor tab of your character window that displays how close you are to your next rank."]}', + 'patch' => '1.6.0', + 'date' => '2005-07-12', + 'image' => '54b2b5cc2d7827e54e9399ea682038bc.jpg', + 'order' => 6 + ), + array( + 'description' => '{"description":"

Patch 1.7.0: Rise of the Blood God<\/strong> was released on September 13, 2005.<\/p>\r\n

Zul\'Gurub<\/strong><\/p>\r\n

Hidden within the jungles of Stranglethorn, an ancient Troll city full of peril has been uncovered. Do you have what it takes to delve into its mysteries with a band of hardy explorers? There\'s only one way to find out! Zul\'Gurub is a high-level, 20-man raid instance with 120 new rare and epic items to uncover. Adventure awaits!<\/p>\r\n

Arathi Basin<\/strong><\/p>\r\n

Join the League of Arathor or the Forsaken Defilers as they battle for the precious resources stockpiled within the latest Battleground, Arathi Basin! Pitting 15 members of each faction against each other, the race is on to be the first to 2000 resources, capturing strategic landmarks around the Basin to increase your team\'s gain and cripple the enemy. With an all-new set of reputation-based rewards, there\'s never been a better time to join the war!<\/p>","general":["The Stranglethorn Fishing Extravaganza is a grand new event set along the coasts of Stranglethorn Vale. Early on the appointed day, friendly neighborhood goblins will visit Ironforge and Orgrimmar to inform aspiring anglers of the grand tournament and give instructions. At the appropriate time, the shout will ring out across Stranglethorn to bait your hooks and cast your lines!"],"pve":["Zul\'Gurub","You can now no longer avoid Onyxia\'s confuse effect by jumping or moving erratically."],"pvp":["Arathi Basin","Battleground \"holidays\" have been added to Warsong Gulch, Alterac Valley and Arathi Basin. Holidays occur during most weekends, starting on Thursday night at midnight and continuing until Tuesday morning. During a holiday, emissaries from that Battleground will be found in the major cities, and honor\/faction rewards for performing objectives in that battleground are increased."]}', + 'patch' => '1.7.0', + 'date' => '2005-09-13', + 'image' => 'a0187a1f1ea9b4b27226f467fc51d4c8.jpg', + 'order' => 7 + ), + array( + 'description' => '{"description":"

Patch 1.8.0: Dragons of Nightmare<\/strong> was released on October 10, 2005.<\/p>\r\n

Disturbance at the Great Trees<\/strong><\/p>\r\n

Something is amiss in the Emerald Dream. Immense dragons with the shimmering emerald scales of the Green Dragonflight have been sighted guarding the portals at the Great Trees... but these once-noble creatures crawl with a new, strange menace, not the peace for which Ysera is known. Bring many allies should you dare to confront them; their powers are formidable and they will not hesitate to crush any who draw near.<\/p>\r\n

The Stirring of the Silithid<\/strong><\/p>\r\n

The arid sands of Silithus are shifting. Something is awakening beyond the wall to the south... Aid the Druids of the Cenarion Circle as they delve into the mysteries of the desert. Seek answers behind the Twilight Hammer\'s presence. Discover more about the alien creatures known as the Silithid as you explore their hives. Many new endeavors await the high-level adventurer!<\/p>\r\n

Hallow\'s End<\/strong><\/p>\r\n

When the decorations of Hallow\'s End light up Azeroth\'s cities, you know there\'s mischief afoot! Seek special vendors in Orgrimmar or Ironforge and get your hands on treats! Aid a sick orphan in a little trick-or-treating! Darkcaller Yanka, attending the Forsaken\'s Wickerman Festival, and Sergeant Hartman of Southshore are seeking your aid in keeping the enemy out of their holiday affairs -- are you up to the challenge?<\/p>","general":["As a direct result of this, many weapons have shifted position in their relative power. In particular, many Epic (purple) quality items are now more powerful than slower Superior (blue) weapons."],"pve":["Dragons of Nightmare - The four corrupted dragons from the Emerald Dream.","Azuregos is now properly resistant to Frost damage."],"pvp":["The percentage of players that may reach ranks 6 through 14 has been increased.","Lower-level players should advance in the Honor System more quickly than they had previously (although this change does not affect the highest ranks they can achieve)."]}', + 'patch' => '1.8.0', + 'date' => '2005-10-10', + 'image' => 'a96937a861cdabe389ce39d4b5e1b9e5.jpg', + 'order' => 8 + ), + array( + 'description' => '{"description":"

Patch 1.9.0: The Gates of Ahn\'Qiraj<\/strong>\u00a0was released on January 3, 2006.<\/p>\r\n

The Gates of Ahn\'Qiraj<\/strong><\/p>\r\n

The Gates of Ahn\'Qiraj will house two massive, unique dungeons -- the Ruins of Ahn\'Qiraj, a 20-man raid dungeon, and the Temple of Ahn\'Qiraj, a 40-man raid dungeon. As players delve deeper into the mysteries of Ahn\'Qiraj, they will discover revelations of the Silithid infestation and their shadowy masters, the Qiraji. Players will have to complete a world event of massive proportions before they can open the Gates of Ahn\'Qiraj on their realm.<\/p>\r\n

Multiple Battlegrounds Queues<\/strong><\/p>\r\n

Players will be able to enter multiple battleground queues. No longer must you make the hard decision of which queue to join -- when queued for all three, you can join the first one available or hold out for that particular battleground which you\'ve really got your heart set on. Should a queue open while you are already in a battleground, you may switch to the new battle or remain in the current on.<\/p>","general":["The Gates of Ahn\'Qiraj world event."],"pve":["The Ruins of Ahn\'Qiraj (outdoor 20-player instance)","The Temple of Ahn\'Qiraj (indoor 40-player instance)","New Tier2 Epic Armor Models"],"pvp":["Level 48, 38, and 28 versions of the Defiler\'s Talisman and Talisman of Arathor have been added.","Two new rewards have been added for reaching Friendly reputation level with the Silverwing Sentinel and Warsong Outrider factions.","Reputation rewards for the PvP Battlegrounds have been adjusted:","Warsong Gulch and Arathi Basin now offer Battleground-specific rations at Friendly reputation."]}', + 'patch' => '1.9.0', + 'date' => '2006-01-03', + 'image' => '9e60d34f6c52072249c85eefc59923d0.jpg', + 'order' => 9 + ), + array( + 'description' => '{"description":"

Patch 1.10.0: Storms of Azeroth<\/strong>\u00a0was released on March 28, 2006.<\/p>\r\n

New High-Level Armor Sets!<\/strong><\/p>\r\n

Adventurers of Azeroth can now quest to upgrade their previous Rare-quality Dungeon set to a new, higher-quality set, including epic gear! These tasks include all-new boss encounters, so prepare your finest group of dungeon-delvers and prepare for a challenge!<\/p>\r\n

Weather!<\/strong><\/p>\r\n

Weather has been introduced in the following areas around Azeroth:<\/p>\r\n