31 Commits

Author SHA1 Message Date
Ben Carter
85b82d923e Update README.md
Fixed more wrong AI generated shit
2025-08-31 10:34:20 -04:00
Ben Carter
e53469c1ba Update README.md 2025-08-24 09:09:07 -04:00
Ben Carter
33f4d3d7ff Update README.md 2025-08-23 22:31:59 -04:00
Ben Carter
8ef539f817 Update README.md
Complete Readme v1
2025-08-23 22:30:33 -04:00
Ben Carter
d469f1c632 Merge pull request #34 from araxiaonline/araxia-main
Araxia main
2025-08-23 22:29:49 -04:00
Ben Carter
336a0a3257 Merge pull request #33 from araxiaonline/feature/full-expansion-upgrade
Feature/full expansion upgrade
2025-08-23 20:58:39 -04:00
Ben Carter
b8d4c5e698 Update data/sql/db-world/base/09_custom_items.sql
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-23 20:57:24 -04:00
Ben Carter
9120666bd5 Update data/sql/db-world/base/09_custom_items.sql
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-23 20:57:15 -04:00
8fbb47b5b6 Fixes from Gemini review 2025-08-23 16:41:56 -04:00
716ca94e73 resolve sql nullable key 2025-08-23 14:36:41 -04:00
fa81bd6f79 Added money fixes on mythic 2025-08-23 14:33:33 -04:00
e8ddac961d fixes xp and gold for scaled creatures 2025-08-22 01:14:06 -04:00
74c529a2b0 Added sql for molten core raid and rebalance of low ilevel gear 2025-08-21 01:30:34 -04:00
4801ab5484 Added death handlers for creatures 2025-08-21 01:30:30 -04:00
5fca712e62 Added creature scaling fixes for respawn and scripted events. 2025-08-21 01:29:47 -04:00
1b1c54782b Scaling updates for non creatures and fixes for elemental damage melee 2025-08-01 18:50:14 -04:00
3f3f63f90e Updates to enemy scaling mechanics for heroic, raids 2025-08-01 10:06:55 -04:00
64dd608dc4 Merge branch 'feature/full-expansion-upgrade' of https://github.com/araxiaonline/mod-mythic-plus into feature/full-expansion-upgrade 2025-07-19 09:47:50 -04:00
2dbbccc6eb updating spell damage mechanics 2025-07-19 09:47:30 -04:00
Ben Carter
f225a8211b Update src/MythicPlus.cpp
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-07-19 09:45:59 -04:00
1481fe1cce Major overhauls of key systems and scripts 2025-07-18 19:49:02 -04:00
53218b487a Major updates to the entire system lots of content changes. 2025-07-18 19:48:36 -04:00
7618b2af58 Added new commands and fixed PlayerScript dupe issue. 2025-02-09 23:25:48 -05:00
586858c485 updates to upgrade advancement event and new handlers 2025-02-09 23:25:41 -05:00
a5b22f84ed major fixes to advancement handler which is not upgrading stats correctly 2025-02-09 23:25:22 -05:00
f0f3b26229 updated index and added resistances 2025-02-09 23:24:46 -05:00
18bb3e6599 Updated logger, and fixed up event handlers 2025-02-04 00:24:08 -05:00
15c4e22967 updated for resist information 2025-02-04 00:23:36 -05:00
27db74e2ae Merge branch 'araxia-main' into refactor-scripts 2025-01-24 17:27:05 -05:00
Ben Carter
1cac20f7a5 Merge pull request #30 from araxiaonline/araxia-main
Updates to work with latest acore source
2025-01-18 11:38:42 -05:00
5986d314c7 Updates to work with latest acore source 2025-01-12 18:22:35 -05:00
40 changed files with 16041 additions and 863 deletions

309
README.md
View File

@@ -0,0 +1,309 @@
# Mythic Plus Module for AzerothCore
🚨 **This is not mythic like in retail.** 🚨
This module started with the intention of creating a retail-like mythic plus system but has evolved into something unique. Instead, think of it as an **expansion of existing Wrath to new end game conte r** that reuses much of the existing dungeons and creatures, overhauling them to much higher difficulties with new loot mechanics.
## Overview
The Mythic Plus module transforms existing World of Warcraft dungeons (Wrath of the Lich King to add additional endgame content) into challenging, scaled encounters with progressive difficulty levels, enhanced rewards, and unique gameplay mechanics to extend gameplay experience.
## Features
### Core Systems
- **Progressive Difficulty Scaling**: Multiple tiers of difficulty that scale creature stats, abilities, and rewards
- **Player Advancement System**: Custom advancements for mythic plus progression, completion times, and special challenges
- **Voiced NPCs**: Enhanced immersion with voice acting for key NPCs and encounters
- **Dynamic Loot System**: New loot mechanics with scaled rewards based on difficulty completed
- **Death Penalty System**: Configurable death penalties that affect progression
- **Time-Based Challenges**:
- (In progress)
### Massive Content Expansion
- **50,000+ New Items**: Completely new item database with scaled equipment for all difficulty tiers
- **New Rare Materials**: Custom crafting materials and rare drops exclusive to mythic plus content
- **Reworked Tier Gear**: All expansion tier sets completely reworked and rebalanced for mythic plus scaling
- **Cross-Expansion Integration**: Unified progression system spanning Vanilla through Wrath
### Difficulty Tiers
The module supports multiple difficulty levels with configurable scaling:
- **Mythic Dungeons**: Base enhanced difficulty with improved creature stats and new rare material drops
- **Legendary Dungeons**: In progress
- **Ascendant Dungeons**: In progress
### Per-Dungeon Customization
- **Database-Driven Scaling**: Each dungeon can have unique scaling values configured through database tables
- **Individual Encounter Tuning**: Specific creatures and bosses can have custom multipliers independent of global settings
- **Dungeon-Specific Materials**: Unique rare materials and rewards exclusive to certain dungeons or difficulty combinations
### Creature Enhancements
- **Health & Damage Scaling**: Configurable multipliers for different difficulty tiers
- **Voiced Encounters**: Important NPCs and bosses feature voice acting for enhanced immersion
- **Cross-Expansion Itemization**: Unified item progression that spans all supported expansions
## Installation
### Prerequisites
-- Trickerer Acore or Azerothcore
- MySQL database 8.4
- C++ compiler with C++20 support
- docker for most tested experience
- companion lua scripts **more details coming here**
### Build Process
1. **Clone the repository** into your AzerothCore modules directory:
```bash
cd /path/to/azerothcore/modules
git clone https://github.com/araxiaonline/mod-mythic-plus.git
```
2. **Rebuild AzerothCore** with the module:
```bash
cd /path/to/azerothcore/build
make -j$(nproc)
```
3. **Install database changes**:
Database changes will be installed using azerothcores built in script, if it does not you can use the following commands below:
```bash
# Apply the SQL files from data/sql/ in the correct order
# Note: This includes extensive item database additions (50,000+ items)
# and achievement system integration
mysql -u username -p acore_world < modules/mod-mythic-plus/data/sql/db-characters/*.sql
mysql -u username -p acore_world < modules/mod-mythic-plus/data/sql/db-world/*.sql
# Verify the massive item additions were applied successfully
# The module includes a complete item database overhaul
```
### Configuration
1. **Copy the configuration file**:
```bash
cp modules/mod-mythic-plus/conf/mod-mythic-plus.conf.dist /path/to/azerothcore/etc/modules/mod-mythic-plus.conf
```
2. **Edit the configuration file** to customize your settings:
```bash
nano /path/to/azerothcore/etc/modules/mod-mythic-plus.conf
```
## Configuration Options
### Global Settings
```ini
# Enable/disable the entire Mythic Plus system
MythicPlus.Enabled = 1
# Enable enhanced rewards system
MythicPlus.EnableEnhancedRewards = 1
# Enable achievement system integration
MythicPlus.EnableAchievementSystem = 1
# Enable death limit system for dungeons
MythicPlus.EnableDeathLimits = 1
```
### Difficulty Scaling
```ini
# Mythic tier creature scaling
MythicPlus.Mythic.DungeonHealth = 1.5
MythicPlus.Mythic.DungeonDmg = 1.25
MythicPlus.Mythic.DungeonDmgSpell = 1.3
MythicPlus.Mythic.DungeonArmor = 1.25
MythicPlus.Mythic.DungeonXPGain = 1.5
# Legendary tier creature scaling
MythicPlus.Legendary.DungeonHealth = 2.25
MythicPlus.Legendary.DungeonDmg = 2.25
MythicPlus.Legendary.DungeonDmgSpell = 2.75
MythicPlus.Legendary.DungeonArmor = 3.25
MythicPlus.Legendary.DungeonXPGain = 85
# Ascendant tier creature scaling
MythicPlus.Ascendant.DungeonHealth = 3.25
MythicPlus.Ascendant.DungeonDmg = 3.25
MythicPlus.Ascendant.DungeonDmgSpell = 3.75
MythicPlus.Ascendant.DungeonArmor = 3.25
MythicPlus.Ascendant.DungeonXPGain = 87
```
### Death Penalty Settings
```ini
# Death limits before failure
MythicPlus.Death.DeathLimit = 5
# Enable/disable death penalties
MythicPlus.EnableDeathDifficulties = 1
# Death penalty scaling
MythicPlus.DisableDamageSpell = 1
```
## Supported Dungeons
The module enhances dungeons from multiple expansions:
### Wrath of the Lich King
- All major dungeons receive scaling enhancements
- Heroic and normal modes both supported
- Enhanced creature abilities and mechanics
###
### Cross-Expansion Features
- Unified scaling system across all supported content
- Consistent reward progression regardless of original expansion
- Balanced challenge curve from entry-level to extreme difficulti
## Commands
### Player Commands
- **`.mythicplus info`** - Display current dungeon difficulty and stats
- **`.mythicplus status`** - Show personal mythic plus progression and achievements
- **`.mythicplus materials`** - View collected rare materials and crafting components
- **`.mythicplus tokens`** - Check endgame token balance and available exchanges
- **`.mythicplus achievements`** - Display mythic plus specific achievement progress
- **`.mythicplus reset`** - Reset personal statistics (if enabled)
### GM Commands
- **`.mythicplus enable <level>`** - Set dungeon difficulty level
- **`.mythicplus disable`** - Disable mythic plus for current dungeon
- **`.mythicplus reload`** - Reload configuration without restart
- **`.mythicplus debug <player>`** - Show debug information for specified player
- **`.mythicplus scaling <dungeon_id> <multiplier>`** - Set custom scaling for specific dungeon
- **`.mythicplus materials add <player> <material_id> <count>`** - Add rare materials to player
- **`.mythicplus tokens grant <player> <token_type> <amount>`** - Grant endgame tokens
## Gameplay Mechanics
### Difficulty Progression
1. **Entry Level**: Start with Mythic difficulty for enhanced challenge
2. **Intermediate**: Progress to Legendary for significant stat increases
3. **Advanced**: Attempt Ascendant level for extreme challenges
4. **Mastery**: Custom difficulty configurations for server-specific content
### Death System
- Players have limited deaths before dungeon failure
- Death count affects final rewards and achievements
- Configurable penalties including reduced experience or currency
### Reward Scaling
- **50,000+ New Items**: Massive equipment database with items scaling from entry-level mythic to extreme ascendant tiers
- **Rare Material System**: Exclusive crafting materials that drop only in mythic plus content, used for high-end crafting and upgrades
- **Endgame Token Economy**: Multiple token types for different content tiers, exchangeable for premium rewards
- **Reworked Tier Sets**: Complete overhaul of all expansion tier gear, rescaled and rebalanced for mythic plus progression
- **Achievement Rewards**: Exclusive items, titles, and cosmetic rewards locked behind achievement completion
- **Cross-Expansion Progression**: Items and materials from different expansions integrated into a unified progression system
## Customization
### Adding Custom Difficulties
The module supports adding custom difficulty tiers by:
1. Editing the configuration file to add new scaling values
2. Updating database entries for custom creature stats
3. Implementing custom reward tables for new difficulties
### Creature Modifications
- Individual creature scaling can be customized per dungeon
- Special abilities can be added or modified through database entries
- Custom spell rotations and AI behaviors configurable
### Loot Customization
- **50,000+ Item Integration**: Massive custom item database with proper scaling and progression
- **Rare Material Drops**: Custom drop tables for exclusive mythic plus materials
- **Endgame Token Distribution**: Configurable token rewards based on difficulty and performance
- **Tier Set Reworks**: All expansion tier sets completely rebalanced with new set bonuses and scaling
- **Per-Dungeon Loot Tables**: Each dungeon can have unique reward pools and exclusive items
- **Achievement-Gated Rewards**: Special items and materials locked behind specific achievement completions
## Troubleshooting
### Common Issues
**Module not loading**:
- Verify the module was compiled correctly
- Check server logs for compilation errors
- Ensure all dependencies are met
**Database errors**:
- Confirm all SQL files were applied in correct order
- Verify database user has appropriate permissions
- Check for conflicting modules or custom modifications
**Configuration not working**:
- Verify configuration file is in correct location
- Check file permissions and syntax
- Use `.mythicplus reload` command after making changes
**Performance issues**:
- Monitor server resources during high-difficulty encounters
- Adjust scaling values if creatures are too powerful
- Consider reducing concurrent mythic plus dungeons
### Debug Mode
Enable debug logging by setting:
```ini
MythicPlus.DebugMode = 1
```
This provides detailed information about:
- Creature scaling calculations
- Reward calculations
- Player progression tracking
- System performance metrics
## Contributing
### Development Setup
1. Fork the repository
2. Create a feature branch
3. Make your changes following the existing code style
4. Test thoroughly on a development server
5. Submit a pull request with detailed description
### Code Standards
- Follow AzerothCore coding conventions
- Include appropriate comments and documentation
- Test all changes across multiple difficulty levels
- Ensure compatibility with other popular modules
### Bug Reports
When reporting bugs, include:
- AzerothCore version and commit hash
- Module version/commit
- Configuration file settings
- Detailed reproduction steps
- Server logs showing the issue
## Credits
**Development Team**: Araxia Online Development Team
- **Lead Developer**: ben-of-codecraft
- **Contributors**: james-huston
**Special Thanks**:
- AzerothCore development team for the excellent foundation
- Community members who provided testing and feedback
- Original World of Warcraft developers for creating the content we enhance
## License
This project is licensed under the GPL-3.0 License - see the [LICENSE](LICENSE) file for details.
## Support
- **GitHub Issues**: Report bugs and request features
- **Community Discord**: Join discussions and get help from other users
- **Documentation**: Check the wiki for additional guides and tutorials
---
*Remember: This module significantly increases dungeon difficulty. Start with lower difficulties and work your way up to avoid frustration. The enhanced challenge is designed to provide engaging content for experienced players seeking greater difficulty than the original game provided.*

View File

@@ -6,8 +6,8 @@
#
##########################################################
Appender.MythicPlusLog=2,5,0,mod-mythic-plus.log,w
Appender.MythicPlusConsole=1,5,0,"1 9 3 6 5 8"
Appender.MythicPlusLog=2,4,0,mod-mythic-plus.log,w
# Appender.MythicPlusConsole=1,5,0,"1 9 3 6 5 8"
Logger.module.MythicPlus=5,MythicPlusLog MythicPlusConsole
##########################################################
@@ -36,11 +36,13 @@ MythicPlus.EnableDeathLimits = 1
##########################################################
#
# Mythic+ Stat Modifiers By Difficuty
# Mythic+ Global Stat Modifiers By Difficulty
# - These values are used to adjust the difficulty of enemies and bosses base
# stats based on the difficulty of the dungeon.
# - Bosses will only receive their multiplier not the Dungeon multiplier to prevent multiplicative scaling.
# - These values are used to scale the difficulty of all dungeons across new difficulty modes.
#
# To scale individual instances you should use the mp_scale_factors table per instance to increase/reduce Modifiers
##########################################################
MythicPlus.Mythic.DungeonHealth = 1.25
@@ -103,7 +105,7 @@ MythicPlus.Ascendant.DeathAllowance = 15
# - These values are used to set the offset to where items per difficulty will map to.
# - Item drops in this mode use the original item entry + on offset to determine the new item entry reward.
# - This enables a fast lookup at loot drop time as it is just an addition operation.
# - If using the base geneated sql the settings below will map to it. If the offset is incorrect,
# - If using the base generated sql the settings below will map to it. If the offset is incorrect,
# the item will not be found and the original low level item will be rewarded.
#
##########################################################
@@ -112,8 +114,21 @@ MythicPlus.Mythic.ItemOffset = 20000000
MythicPlus.Legendary.ItemOffset = 21000000
MythicPlus.Ascendant.ItemOffset = 22000000
##########################################################
# Diminishing Returns
# - These values are used to set the diminishing returns for the different difficulties.
# - The diminishing returns are used to limit the amount of damage that can be done to a target.
# - The diminishing returns are based on the difficulty of the dungeon and the amount of damage that has been done to the target.
##########################################################
MythicPlus.DiminishingExponent = 0.96
MythicPlus.DiminishingThreshold.Mythic = 10000
MythicPlus.DiminishingThreshold.Legendary = 20000
MythicPlus.DiminishingThreshold.Ascendant = 40000
##############
# Scaling Adjusters
#############
MythicPlus.MeleeAttackPowerDampener = 800
MythicPlus.MeleeAttackPowerStart = 3000
MythicPlus.ElementalMeleeReducer = 0.50
MythicPlus.NormalEnemyReducer = 0.50
MythicPlus.NonCreatureSpellReducer = 0.50

View File

@@ -17,7 +17,7 @@ CREATE TABLE mp_player_instance_data (
guid INT UNSIGNED NOT NULL DEFAULT '0',
difficulty INT UNSIGNED NOT NULL DEFAULT '3',
mapId INT UNSIGNED NOT NULL,
instanceId INT UNSIGNED,
instanceId INT UNSIGNED NOT NULL DEFAULT '0',
deaths INT UNSIGNED NOT NULL,
PRIMARY KEY (guid, mapId, instanceId)
@@ -88,13 +88,13 @@ CREATE TABLE mp_player_advancement_history (
bonus FLOAT NOT NULL,
upgradeRank INT UNSIGNED NOT NULL,
diceSpent INT UNSIGNED NOT NULL DEFAULT '0',
materialId1 INT UNSIGNED NOT NULL,
materialId2 INT UNSIGNED NOT NULL,
materialId3 INT UNSIGNED NOT NULL,
materialCost1 INT UNSIGNED NOT NULL,
materialCost2 INT UNSIGNED NOT NULL,
materialCost3 INT UNSIGNED NOT NULL,
entryId1 INT UNSIGNED NOT NULL,
entryId2 INT UNSIGNED,
entryId3 INT UNSIGNED,
itemCost1 INT UNSIGNED NOT NULL,
itemCost2 INT UNSIGNED,
itemCost3 INT UNSIGNED,
added TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (guid, advancementId)
PRIMARY KEY (guid, advancementId, upgradeRank)
);

View File

@@ -4,12 +4,12 @@ DROP TABLE IF EXISTS mp_upgrade_ranks;
CREATE TABLE mp_upgrade_ranks (
upgradeRank INT UNSIGNED NOT NULL,
advancementId INT UNSIGNED NOT NULL,
materialId1 INT UNSIGNED NOT NULL,
materialId2 INT UNSIGNED NOT NULL,
materialId3 INT UNSIGNED NOT NULL,
materialCost1 INT UNSIGNED NOT NULL,
materialCost2 INT UNSIGNED NOT NULL,
materialCost3 INT UNSIGNED NOT NULL,
itemEntry1 INT UNSIGNED NOT NULL,
itemEntry2 INT UNSIGNED NOT NULL,
itemEntry3 INT UNSIGNED NOT NULL,
itemCost1 INT UNSIGNED NOT NULL,
itemCost2 INT UNSIGNED NOT NULL,
itemCost3 INT UNSIGNED NOT NULL,
minIncrease1 INT UNSIGNED NOT NULL,
maxIncrease1 INT UNSIGNED NOT NULL,
minIncrease2 INT UNSIGNED NOT NULL,
@@ -23,7 +23,7 @@ CREATE TABLE mp_upgrade_ranks (
PRIMARY KEY (upgradeRank, advancementId)
);
-- Used to allocate trade materials based on slot upgrades
-- Used to allocate trade materials to a category for fusion into new tradeskills
DROP TABLE IF EXISTS mp_material_types;
CREATE TABLE mp_material_types (
materialId INT UNSIGNED NOT NULL,
@@ -38,11 +38,10 @@ CREATE TABLE mp_material_types (
DROP TABLE IF EXISTS mp_scale_factors;
CREATE TABLE mp_scale_factors (
mapId SMALLINT NOT NULL,
dmg_bonus INT DEFAULT '100',
spell_bonus INT DEFAULT '100',
hp_bonus INT DEFAULT '100',
difficulty INT DEFAULT '100',
max INT DEFAULT '100',
melee_bonus FLOAT DEFAULT '1',
spell_bonus FLOAT DEFAULT '1',
heal_bonus FLOAT DEFAULT '1',
hp_bonus FLOAT DEFAULT '1',
difficulty FLOAT DEFAULT '1',
PRIMARY KEY (mapId)
);

View File

@@ -535,3 +535,5 @@ WHERE
'Eternal Mana', -- Central crafting material for arcane resistance gear.
'Saronite Animus' -- Rare drop from arcane-themed enemies in Icecrown Citadel.
);
REPLACE INTO mp_material_types (materialId, entry, name) VALUES (23, 911002, 'Veilstone');

View File

@@ -1,81 +1,152 @@
-- Last Update: 2021/08/15
-- Last Update: 2025/01/17
-- Description: Scale factors for Mythic+ dungeons used to normalize dungeon difficulty across expansions.
-- 1. Pre 60 level dungeons (13 dmg_bonus, 2 hp_bonus, max 23, difficulty 3)
INSERT INTO mp_scale_factors (mapId, dmg_bonus, spell_bonus, hp_bonus, difficulty, max)
-- 1. Pre 60 level dungeons (melee_bonus: 1.9-2.2, spell_bonus: 1.8-1.9, hp_bonus: 2, difficulty: 3)
INSERT INTO mp_scale_factors (mapId, melee_bonus, spell_bonus, heal_bonus, hp_bonus, difficulty)
VALUES
(389, 22, 19,2, 3, 23), -- Ragefire Chasm
(43, 19, 18,2, 3, 23), -- Wailing Caverns
(36, 19, 19,2, 3, 23), -- The Deadmines
(33, 19, 19,2, 3, 23), -- Shadowfang Keep
(34, 19, 19,2, 3, 23), -- The Stockade
(48, 19, 19,2, 3, 23), -- Blackfathom Deeps
(90, 19, 19,2, 3, 23), -- Gnomeregan
(47, 19, 19,2, 3, 23), -- Razorfen Kraul
(189, 19, 19,2, 3, 23), -- Scarlet Monastery (Graveyard)
(129, 19, 19,2, 3, 23), -- Razorfen Downs
(70, 19, 19,2, 3, 23), -- Uldaman
(209, 19, 19,2, 3, 23), -- Zul'Farrak
(349, 19, 19,2, 3, 23) -- Maraudon
ON DUPLICATE KEY UPDATE mapId = mapId;
(389, 2.2, 1.9, 1.9, 2, 3), -- Ragefire Chasm
(43, 1.9, 1.8, 1.8, 2, 3), -- Wailing Caverns
(36, 1.9, 1.9, 1.9, 2, 3), -- The Deadmines
(33, 1.9, 1.9, 1.9, 2, 3), -- Shadowfang Keep
(34, 1.9, 1.9, 1.9, 2, 3), -- The Stockade
(48, 1.9, 1.9, 1.9, 2, 3), -- Blackfathom Deeps
(90, 1.9, 1.9, 1.9, 2, 3), -- Gnomeregan
(47, 1.9, 1.9, 1.9, 2, 3), -- Razorfen Kraul
(189, 1.9, 1.9, 1.9, 2, 3), -- Scarlet Monastery (Graveyard)
(129, 1.9, 1.9, 1.9, 2, 3), -- Razorfen Downs
(70, 1.9, 1.9, 1.9, 2, 3), -- Uldaman
(209, 1.9, 1.9, 1.9, 2, 3), -- Zul'Farrak
(349, 1.9, 1.9, 1.9, 2, 3) -- Maraudon
AS new_values
ON DUPLICATE KEY UPDATE
melee_bonus = new_values.melee_bonus,
spell_bonus = new_values.spell_bonus,
heal_bonus = new_values.heal_bonus,
hp_bonus = new_values.hp_bonus,
difficulty = new_values.difficulty;
-- 2. Level 60 dungeons for classic (15 dmg_bonus, 3 hp_bonus, max 25, difficulty 3)
INSERT INTO mp_scale_factors (mapId, dmg_bonus, spell_bonus, hp_bonus, difficulty, max)
-- 2. Level 60 dungeons for classic (melee_bonus: 1.7, spell_bonus: 2.0, hp_bonus: 3, difficulty: 3)
INSERT INTO mp_scale_factors (mapId, melee_bonus, spell_bonus, heal_bonus, hp_bonus, difficulty)
VALUES
(289, 17, 20,3, 3, 25), -- Scholomance
(109, 17, 20,3, 3, 25), -- Sunken Temple
(329, 17, 20,3, 3, 25), -- Stratholme
(229, 17, 20,3, 3, 25), -- Blackrock Spire (Lower)
(230, 17, 20,3, 3, 25), -- Blackrock Spire (Upper)
(429, 17, 20,3, 3, 25), -- Dire Maul
(269, 17, 20,3, 3, 25) -- Temple of Atal'Hakkar
ON DUPLICATE KEY UPDATE mapId = mapId;
(289, 1.7, 2.0, 2.0, 3, 3), -- Scholomance
(109, 1.7, 2.0, 2.0, 3, 3), -- Sunken Temple
(329, 1.7, 2.0, 2.0, 3, 3), -- Stratholme
(229, 1.7, 2.0, 2.0, 3, 3), -- Blackrock Spire (Lower)
(230, 1.7, 2.0, 2.0, 3, 3), -- Blackrock Spire (Upper)
(429, 1.7, 2.0, 2.0, 3, 3), -- Dire Maul
(269, 1.7, 2.0, 2.0, 3, 3) -- Temple of Atal'Hakkar
AS new_values
ON DUPLICATE KEY UPDATE
melee_bonus = new_values.melee_bonus,
spell_bonus = new_values.spell_bonus,
heal_bonus = new_values.heal_bonus,
hp_bonus = new_values.hp_bonus,
difficulty = new_values.difficulty;
-- 3. Pre 70 dungeons in Burning Crusade (15 dmg_bonus, 4 hp_bonus, max 26, difficulty 3)
INSERT INTO mp_scale_factors (mapId, dmg_bonus, spell_bonus, hp_bonus, difficulty, max)
-- 3. Pre 70 dungeons in Burning Crusade (melee_bonus: 1.6, spell_bonus: 1.4, hp_bonus: 4, difficulty: 3)
INSERT INTO mp_scale_factors (mapId, melee_bonus, spell_bonus, heal_bonus, hp_bonus, difficulty)
VALUES
(542, 16, 14,4, 3, 26), -- Hellfire The Blood Furnace
(543, 16, 14,4, 3, 26), -- Hellfire Ramparts
(545, 16, 14,4, 3, 26), -- Coilfang Steamvaults
(546, 16, 14,4, 3, 26), -- Coilfang Reservoir: The Underbog
(547, 16, 14,4, 3, 26), -- Coilfang Reservoir: The Underbog
(557, 16, 14,4, 3, 26), -- Auchindoun: Mana-Tombs
(558, 16, 14,4, 3, 26), -- Auchindoun: Auchenai Crypts
(560, 16, 14,4, 3, 26) -- Caverns of Time: Old Hillsbrad Foothills
ON DUPLICATE KEY UPDATE mapId = mapId;
(542, 1.6, 1.4, 1.4, 4, 3), -- Hellfire The Blood Furnace
(543, 1.6, 1.4, 1.4, 4, 3), -- Hellfire Ramparts
(545, 1.6, 1.4, 1.4, 4, 3), -- Coilfang Steamvaults
(546, 1.6, 1.4, 1.4, 4, 3), -- Coilfang Reservoir: The Underbog
(547, 1.6, 1.4, 1.4, 4, 3), -- Coilfang Reservoir: The Slave Pens
(557, 1.6, 1.4, 1.4, 4, 3), -- Auchindoun: Mana-Tombs
(558, 1.6, 1.4, 1.4, 4, 3), -- Auchindoun: Auchenai Crypts
(560, 1.6, 1.4, 1.4, 4, 3) -- Caverns of Time: Old Hillsbrad Foothills
AS new_values
ON DUPLICATE KEY UPDATE
melee_bonus = new_values.melee_bonus,
spell_bonus = new_values.spell_bonus,
heal_bonus = new_values.heal_bonus,
hp_bonus = new_values.hp_bonus,
difficulty = new_values.difficulty;
-- 4. Level 70 dungeons in Burning Crusade (14 dmg_bonus, 4 hp_bonus, max 29, difficulty 3)
INSERT INTO mp_scale_factors (mapId, dmg_bonus, spell_bonus, hp_bonus, difficulty, max)
-- 4. Level 70 dungeons in Burning Crusade (melee_bonus: 1.4, spell_bonus: 1.3, hp_bonus: 4, difficulty: 3)
INSERT INTO mp_scale_factors (mapId, melee_bonus, spell_bonus, heal_bonus, hp_bonus, difficulty)
VALUES
(540, 14, 13,4, 3, 29), -- Shattered Halls
(556, 14, 13,4, 3, 29), -- Auchindoun: Sethekk Halls
(555, 14, 13,4, 3, 29), -- Auchindoun: Shadow Labyrinth
(553, 14, 13,4, 3, 29), -- Tempest Keep: The Botanica
(554, 14, 13,4, 3, 29), -- Tempest Keep: The Mechanar
(552, 14, 13,4, 3, 29), -- Tempest Keep: The Arcatraz
(585, 14, 13,4, 3, 29) -- Magisters' Terrace
ON DUPLICATE KEY UPDATE mapId = mapId;
(540, 1.4, 1.3, 1.3, 4, 3), -- Shattered Halls
(556, 1.4, 1.3, 1.3, 4, 3), -- Auchindoun: Sethekk Halls
(555, 1.4, 1.3, 1.3, 4, 3), -- Auchindoun: Shadow Labyrinth
(553, 1.4, 1.3, 1.3, 4, 3), -- Tempest Keep: The Botanica
(554, 1.4, 1.3, 1.3, 4, 3), -- Tempest Keep: The Mechanar
(552, 1.4, 1.3, 1.3, 4, 3), -- Tempest Keep: The Arcatraz
(585, 1.4, 1.3, 1.3, 4, 3) -- Magisters' Terrace
AS new_values
ON DUPLICATE KEY UPDATE
melee_bonus = new_values.melee_bonus,
spell_bonus = new_values.spell_bonus,
heal_bonus = new_values.heal_bonus,
hp_bonus = new_values.hp_bonus,
difficulty = new_values.difficulty;
-- 5. Pre 80 dungeons in Wrath of the Lich King (17 dmg_bonus, 3 hp_bonus, max 30, difficulty 3)
INSERT INTO mp_scale_factors (mapId, dmg_bonus, spell_bonus, hp_bonus, difficulty, max)
-- 5. Pre 80 dungeons in Wrath of the Lich King (melee_bonus: 1.9, spell_bonus: 1.2, hp_bonus: 3, difficulty: 3)
INSERT INTO mp_scale_factors (mapId, melee_bonus, spell_bonus, heal_bonus, hp_bonus, difficulty)
VALUES
(574, 19, 12,3, 3, 30), -- Utgarde Keep
(619, 19, 12,3, 3, 30), -- Ahn'kahet: The Old Kingdom
(576, 19, 12,3, 3, 30), -- The Nexus
(600, 19, 12,3, 3, 30), -- Drak'Tharon Keep
(601, 19, 12,3, 3, 30), -- Azjol-Nerub
(608, 19, 12,3, 3, 30) -- The Violet Hold
ON DUPLICATE KEY UPDATE mapId = mapId;
(574, 1.9, 1.2, 1.2, 3, 3), -- Utgarde Keep
(619, 1.9, 1.2, 1.2, 3, 3), -- Ahn'kahet: The Old Kingdom
(576, 1.9, 1.2, 1.2, 3, 3), -- The Nexus
(600, 1.9, 1.2, 1.2, 3, 3), -- Drak'Tharon Keep
(601, 1.9, 1.2, 1.2, 3, 3), -- Azjol-Nerub
(608, 1.9, 1.2, 1.2, 3, 3) -- The Violet Hold
AS new_values
ON DUPLICATE KEY UPDATE
melee_bonus = new_values.melee_bonus,
spell_bonus = new_values.spell_bonus,
heal_bonus = new_values.heal_bonus,
hp_bonus = new_values.hp_bonus,
difficulty = new_values.difficulty;
-- 6. Level 80 dungeons in Wrath of the Lich King (19 dmg_bonus, 4 hp_bonus, max 33, difficulty 3)
INSERT INTO mp_scale_factors (mapId, dmg_bonus, spell_bonus, hp_bonus, difficulty, max)
-- 6. Level 80 dungeons in Wrath of the Lich King (melee_bonus: 1.9, spell_bonus: 1.3, hp_bonus: 5, difficulty: 3)
INSERT INTO mp_scale_factors (mapId, melee_bonus, spell_bonus, heal_bonus, hp_bonus, difficulty)
VALUES
(595, 19, 13,5, 3, 33), -- The Culling of Stratholme
(604, 19, 13,5, 3, 33), -- Gundrak
(599, 19, 13,5, 3, 33), -- Halls of Stone
(602, 19, 13,5, 3, 33), -- Halls of Lightning
(578, 19, 13,5, 3, 33), -- The Oculus
(650, 19, 13,5, 3, 33), -- Trial of the Champion
(632, 19, 13,5, 3, 33), -- The Forge of Souls
(658, 19, 13,5, 3, 33), -- Pit of Saron
(668, 19, 13,5, 3, 33) -- Halls of Reflection
ON DUPLICATE KEY UPDATE mapId = mapId;
(595, 1.9, 1.3, 1.3, 5, 3), -- The Culling of Stratholme
(604, 1.9, 1.3, 1.3, 5, 3), -- Gundrak
(599, 1.9, 1.3, 1.3, 5, 3), -- Halls of Stone
(602, 1.9, 1.3, 1.3, 5, 3), -- Halls of Lightning
(578, 1.9, 1.3, 1.3, 5, 3), -- The Oculus
(650, 1.9, 1.3, 1.3, 5, 3), -- Trial of the Champion
(632, 1.9, 1.3, 1.3, 5, 3), -- The Forge of Souls
(658, 1.9, 1.3, 1.3, 5, 3), -- Pit of Saron
(668, 1.9, 1.3, 1.3, 5, 3) -- Halls of Reflection
AS new_values
ON DUPLICATE KEY UPDATE
melee_bonus = new_values.melee_bonus,
spell_bonus = new_values.spell_bonus,
heal_bonus = new_values.heal_bonus,
hp_bonus = new_values.hp_bonus,
difficulty = new_values.difficulty;
-- 7. Raid instances (melee_bonus: 2.6, spell_bonus: 2.0, heal_bonus: 1.6, hp_bonus: 3, difficulty: 3)
INSERT INTO mp_scale_factors (mapId, melee_bonus, spell_bonus, heal_bonus, hp_bonus, difficulty)
VALUES
(169, 2.6, 2.0, 1.6, 3, 3), -- Emerald Dream
(249, 2.8, 1.6, 1.6, 3, 3), -- Onyxia's Lair
(309, 2.0, 1.3, 1.6, 3, 3), -- Zul'Gurub
(409, 2.2, 1.4, 1.6, 3, 3), -- Molten Core
(469, 2.6, 2.0, 1.6, 3, 3), -- Blackwing Lair
(509, 2.6, 2.0, 1.6, 3, 3), -- Ruins of Ahn'Qiraj
(531, 2.6, 2.0, 1.6, 3, 3), -- Ahn'Qiraj Temple
(532, 2.6, 2.0, 1.6, 3, 3), -- Karazhan
(533, 2.0, 1.8, 1.6, 3, 3), -- Naxxramas
(534, 2.6, 2.0, 1.6, 3, 3), -- The Battle for Mount Hyjal
(544, 2.0, 2.0, 1.6, 3, 3), -- Magtheridon's Lair
(548, 2.6, 2.0, 1.6, 3, 3), -- Coilfang: Serpentshrine Cavern
(550, 2.6, 2.0, 1.6, 3, 3), -- Tempest Keep
(564, 2.9, 2.8, 1.6, 3, 3), -- Black Temple
(565, 2.6, 2.0, 1.6, 3, 3), -- Gruul's Lair
(568, 2.6, 2.0, 1.6, 3, 3), -- Zul'Aman
(580, 2.6, 2.0, 1.6, 3, 3), -- The Sunwell
(603, 2.6, 2.0, 1.6, 3, 3), -- Ulduar
(615, 2.6, 2.0, 1.6, 3, 3), -- The Obsidian Sanctum
(616, 2.6, 2.0, 1.6, 3, 3), -- The Eye of Eternity
(624, 2.6, 2.0, 1.6, 3, 3), -- Vault of Archavon
(631, 2.8, 2.4, 1.6, 5, 3), -- Icecrown Citadel
(649, 3.0, 2.3, 1.6, 4, 3), -- Trial of the Crusader
(724, 2.68, 2.0, 1.6, 3, 3) -- The Ruby Sanctum
AS new_values
ON DUPLICATE KEY UPDATE
melee_bonus = new_values.melee_bonus,
spell_bonus = new_values.spell_bonus,
heal_bonus = new_values.heal_bonus,
hp_bonus = new_values.hp_bonus,
difficulty = new_values.difficulty;

View File

@@ -1,253 +1,500 @@
-- SQL Script to Insert 50 Ranks for Each Stat
REPLACE INTO mp_upgrade_ranks (upgradeRank, advancementId, materialId1, materialCost1, materialId2, materialCost2, materialId3, materialCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES
(1, 3, 7, 100, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 3, 7, 150, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 3, 7, 200, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 3, 7, 250, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 3, 7, 300, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 3, 7, 350, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 3, 7, 400, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 3, 7, 450, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 3, 7, 500, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 3, 7, 550, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 3, 7, 500, 8, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 3, 7, 525, 8, 10, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 3, 7, 550, 8, 20, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 3, 7, 575, 8, 30, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 3, 7, 600, 8, 40, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 3, 7, 625, 8, 50, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 3, 7, 650, 8, 60, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 3, 7, 675, 8, 70, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 3, 7, 700, 8, 80, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 3, 7, 725, 8, 90, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 3, 7, 750, 8, 100, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 3, 7, 775, 8, 110, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 3, 7, 800, 8, 120, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 3, 7, 825, 8, 130, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 3, 7, 850, 8, 140, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 3, 7, 875, 8, 150, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 3, 7, 900, 8, 160, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 3, 7, 925, 8, 170, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 3, 7, 950, 8, 180, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 3, 7, 1000, 8, 190, 20, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 3, 7, 1018, 8, 200, 20, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 3, 7, 1036, 8, 210, 20, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 3, 7, 1054, 8, 220, 20, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 3, 7, 1072, 8, 230, 20, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 3, 7, 1090, 8, 240, 20, 18, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 3, 7, 1108, 8, 250, 20, 21, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 3, 7, 1126, 8, 260, 20, 24, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 3, 7, 1144, 8, 270, 20, 27, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 3, 7, 1162, 8, 280, 20, 30, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 3, 7, 1180, 8, 290, 20, 33, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 3, 7, 1198, 8, 300, 20, 36, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 3, 7, 1216, 8, 310, 20, 39, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 3, 7, 1234, 8, 320, 20, 42, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 3, 7, 1252, 8, 330, 20, 45, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 3, 7, 1270, 8, 340, 20, 48, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 3, 7, 1288, 8, 350, 20, 51, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 3, 7, 1306, 8, 360, 20, 54, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 3, 7, 1324, 8, 370, 20, 57, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 3, 7, 1342, 8, 380, 20, 60, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 3, 7, 1360, 8, 390, 20, 63, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 4, 9, 100, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 4, 9, 150, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 4, 9, 200, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 4, 9, 250, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 4, 9, 300, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 4, 9, 350, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 4, 9, 400, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 4, 9, 450, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 4, 9, 500, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 4, 9, 550, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 4, 9, 500, 10, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 4, 9, 525, 10, 10, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 4, 9, 550, 10, 20, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 4, 9, 575, 10, 30, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 4, 9, 600, 10, 40, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 4, 9, 625, 10, 50, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 4, 9, 650, 10, 60, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 4, 9, 675, 10, 70, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 4, 9, 700, 10, 80, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 4, 9, 725, 10, 90, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 4, 9, 750, 10, 100, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 4, 9, 775, 10, 110, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 4, 9, 800, 10, 120, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 4, 9, 825, 10, 130, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 4, 9, 850, 10, 140, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 4, 9, 875, 10, 150, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 4, 9, 900, 10, 160, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 4, 9, 925, 10, 170, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 4, 9, 950, 10, 180, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 4, 9, 1000, 10, 190, 20, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 4, 9, 1018, 10, 200, 20, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 4, 9, 1036, 10, 210, 20, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 4, 9, 1054, 10, 220, 20, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 4, 9, 1072, 10, 230, 20, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 4, 9, 1090, 10, 240, 20, 18, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 4, 9, 1108, 10, 250, 20, 21, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 4, 9, 1126, 10, 260, 20, 24, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 4, 9, 1144, 10, 270, 20, 27, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 4, 9, 1162, 10, 280, 20, 30, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 4, 9, 1180, 10, 290, 20, 33, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 4, 9, 1198, 10, 300, 20, 36, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 4, 9, 1216, 10, 310, 20, 39, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 4, 9, 1234, 10, 320, 20, 42, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 4, 9, 1252, 10, 330, 20, 45, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 4, 9, 1270, 10, 340, 20, 48, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 4, 9, 1288, 10, 350, 20, 51, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 4, 9, 1306, 10, 360, 20, 54, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 4, 9, 1324, 10, 370, 20, 57, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 4, 9, 1342, 10, 380, 20, 60, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 4, 9, 1360, 10, 390, 20, 63, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 0, 1, 100, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 0, 1, 150, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 0, 1, 200, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 0, 1, 250, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 0, 1, 300, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 0, 1, 350, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 0, 1, 400, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 0, 1, 450, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 0, 1, 500, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 0, 1, 550, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 0, 1, 500, 2, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 0, 1, 525, 2, 10, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 0, 1, 550, 2, 20, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 0, 1, 575, 2, 30, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 0, 1, 600, 2, 40, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 0, 1, 625, 2, 50, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 0, 1, 650, 2, 60, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 0, 1, 675, 2, 70, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 0, 1, 700, 2, 80, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 0, 1, 725, 2, 90, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 0, 1, 750, 2, 100, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 0, 1, 775, 2, 110, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 0, 1, 800, 2, 120, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 0, 1, 825, 2, 130, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 0, 1, 850, 2, 140, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 0, 1, 875, 2, 150, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 0, 1, 900, 2, 160, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 0, 1, 925, 2, 170, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 0, 1, 950, 2, 180, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 0, 1, 1000, 2, 190, 20, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 0, 1, 1018, 2, 200, 20, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 0, 1, 1036, 2, 210, 20, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 0, 1, 1054, 2, 220, 20, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 0, 1, 1072, 2, 230, 20, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 0, 1, 1090, 2, 240, 20, 18, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 0, 1, 1108, 2, 250, 20, 21, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 0, 1, 1126, 2, 260, 20, 24, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 0, 1, 1144, 2, 270, 20, 27, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 0, 1, 1162, 2, 280, 20, 30, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 0, 1, 1180, 2, 290, 20, 33, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 0, 1, 1198, 2, 300, 20, 36, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 0, 1, 1216, 2, 310, 20, 39, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 0, 1, 1234, 2, 320, 20, 42, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 0, 1, 1252, 2, 330, 20, 45, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 0, 1, 1270, 2, 340, 20, 48, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 0, 1, 1288, 2, 350, 20, 51, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 0, 1, 1306, 2, 360, 20, 54, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 0, 1, 1324, 2, 370, 20, 57, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 0, 1, 1342, 2, 380, 20, 60, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 0, 1, 1360, 2, 390, 20, 63, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 1, 3, 100, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 1, 3, 150, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 1, 3, 200, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 1, 3, 250, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 1, 3, 300, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 1, 3, 350, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 1, 3, 400, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 1, 3, 450, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 1, 3, 500, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 1, 3, 550, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 1, 3, 500, 4, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 1, 3, 525, 4, 10, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 1, 3, 550, 4, 20, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 1, 3, 575, 4, 30, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 1, 3, 600, 4, 40, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 1, 3, 625, 4, 50, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 1, 3, 650, 4, 60, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 1, 3, 675, 4, 70, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 1, 3, 700, 4, 80, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 1, 3, 725, 4, 90, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 1, 3, 750, 4, 100, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 1, 3, 775, 4, 110, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 1, 3, 800, 4, 120, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 1, 3, 825, 4, 130, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 1, 3, 850, 4, 140, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 1, 3, 875, 4, 150, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 1, 3, 900, 4, 160, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 1, 3, 925, 4, 170, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 1, 3, 950, 4, 180, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 1, 3, 1000, 4, 190, 20, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 1, 3, 1018, 4, 200, 20, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 1, 3, 1036, 4, 210, 20, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 1, 3, 1054, 4, 220, 20, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 1, 3, 1072, 4, 230, 20, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 1, 3, 1090, 4, 240, 20, 18, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 1, 3, 1108, 4, 250, 20, 21, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 1, 3, 1126, 4, 260, 20, 24, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 1, 3, 1144, 4, 270, 20, 27, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 1, 3, 1162, 4, 280, 20, 30, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 1, 3, 1180, 4, 290, 20, 33, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 1, 3, 1198, 4, 300, 20, 36, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 1, 3, 1216, 4, 310, 20, 39, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 1, 3, 1234, 4, 320, 20, 42, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 1, 3, 1252, 4, 330, 20, 45, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 1, 3, 1270, 4, 340, 20, 48, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 1, 3, 1288, 4, 350, 20, 51, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 1, 3, 1306, 4, 360, 20, 54, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 1, 3, 1324, 4, 370, 20, 57, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 1, 3, 1342, 4, 380, 20, 60, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 1, 3, 1360, 4, 390, 20, 63, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 2, 5, 100, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 2, 5, 150, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 2, 5, 200, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 2, 5, 250, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 2, 5, 300, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 2, 5, 350, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 2, 5, 400, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 2, 5, 450, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 2, 5, 500, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 2, 5, 550, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 2, 5, 500, 6, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 2, 5, 525, 6, 10, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 2, 5, 550, 6, 20, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 2, 5, 575, 6, 30, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 2, 5, 600, 6, 40, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 2, 5, 625, 6, 50, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 2, 5, 650, 6, 60, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 2, 5, 675, 6, 70, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 2, 5, 700, 6, 80, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 2, 5, 725, 6, 90, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 2, 5, 750, 6, 100, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 2, 5, 775, 6, 110, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 2, 5, 800, 6, 120, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 2, 5, 825, 6, 130, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 2, 5, 850, 6, 140, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 2, 5, 875, 6, 150, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 2, 5, 900, 6, 160, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 2, 5, 925, 6, 170, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 2, 5, 950, 6, 180, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 2, 5, 1000, 6, 190, 20, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 2, 5, 1018, 6, 200, 20, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 2, 5, 1036, 6, 210, 20, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 2, 5, 1054, 6, 220, 20, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 2, 5, 1072, 6, 230, 20, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 2, 5, 1090, 6, 240, 20, 18, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 2, 5, 1108, 6, 250, 20, 21, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 2, 5, 1126, 6, 260, 20, 24, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 2, 5, 1144, 6, 270, 20, 27, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 2, 5, 1162, 6, 280, 20, 30, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 2, 5, 1180, 6, 290, 20, 33, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 2, 5, 1198, 6, 300, 20, 36, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 2, 5, 1216, 6, 310, 20, 39, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 2, 5, 1234, 6, 320, 20, 42, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 2, 5, 1252, 6, 330, 20, 45, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 2, 5, 1270, 6, 340, 20, 48, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 2, 5, 1288, 6, 350, 20, 51, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 2, 5, 1306, 6, 360, 20, 54, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 2, 5, 1324, 6, 370, 20, 57, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 2, 5, 1342, 6, 380, 20, 60, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 2, 5, 1360, 6, 390, 20, 63, 9, 18, 13, 18, 24, 27, 167, 197, 222)
;
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 0, 911005, 0, 0, 5, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 1, 911009, 0, 0, 5, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 2, 911003, 0, 0, 5, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 3, 911007, 0, 0, 5, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 4, 911011, 0, 0, 5, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 5, 911019, 0, 0, 4, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 6, 911017, 0, 0, 4, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 7, 911023, 0, 0, 4, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 8, 911015, 0, 0, 4, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (1, 9, 911021, 0, 0, 4, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 0, 911005, 0, 0, 8, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 1, 911009, 0, 0, 8, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 2, 911003, 0, 0, 8, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 3, 911007, 0, 0, 8, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 4, 911011, 0, 0, 8, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 5, 911019, 0, 0, 6, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 6, 911017, 0, 0, 6, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 7, 911023, 0, 0, 6, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 8, 911015, 0, 0, 6, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (2, 9, 911021, 0, 0, 6, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 0, 911005, 0, 0, 10, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 1, 911009, 0, 0, 10, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 2, 911003, 0, 0, 10, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 3, 911007, 0, 0, 10, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 4, 911011, 0, 0, 10, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 5, 911019, 0, 0, 8, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 6, 911017, 0, 0, 8, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 7, 911023, 0, 0, 8, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 8, 911015, 0, 0, 8, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (3, 9, 911021, 0, 0, 8, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 0, 911005, 0, 0, 13, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 1, 911009, 0, 0, 13, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 2, 911003, 0, 0, 13, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 3, 911007, 0, 0, 13, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 4, 911011, 0, 0, 13, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 5, 911019, 0, 0, 9, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 6, 911017, 0, 0, 9, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 7, 911023, 0, 0, 9, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 8, 911015, 0, 0, 9, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (4, 9, 911021, 0, 0, 9, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 0, 911005, 0, 0, 15, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 1, 911009, 0, 0, 15, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 2, 911003, 0, 0, 15, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 3, 911007, 0, 0, 15, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 4, 911011, 0, 0, 15, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 5, 911019, 0, 0, 11, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 6, 911017, 0, 0, 11, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 7, 911023, 0, 0, 11, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 8, 911015, 0, 0, 11, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (5, 9, 911021, 0, 0, 11, 0, 0, 1, 5, 3, 5, 4, 6, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 0, 911005, 0, 0, 18, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 1, 911009, 0, 0, 18, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 2, 911003, 0, 0, 18, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 3, 911007, 0, 0, 18, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 4, 911011, 0, 0, 18, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 5, 911019, 0, 0, 13, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 6, 911017, 0, 0, 13, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 7, 911023, 0, 0, 13, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 8, 911015, 0, 0, 13, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (6, 9, 911021, 0, 0, 13, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 0, 911005, 0, 0, 20, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 1, 911009, 0, 0, 20, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 2, 911003, 0, 0, 20, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 3, 911007, 0, 0, 20, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 4, 911011, 0, 0, 20, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 5, 911019, 0, 0, 15, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 6, 911017, 0, 0, 15, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 7, 911023, 0, 0, 15, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 8, 911015, 0, 0, 15, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (7, 9, 911021, 0, 0, 15, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 0, 911005, 0, 0, 23, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 1, 911009, 0, 0, 23, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 2, 911003, 0, 0, 23, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 3, 911007, 0, 0, 23, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 4, 911011, 0, 0, 23, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 5, 911019, 0, 0, 16, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 6, 911017, 0, 0, 16, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 7, 911023, 0, 0, 16, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 8, 911015, 0, 0, 16, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (8, 9, 911021, 0, 0, 16, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 0, 911005, 0, 0, 25, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 1, 911009, 0, 0, 25, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 2, 911003, 0, 0, 25, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 3, 911007, 0, 0, 25, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 4, 911011, 0, 0, 25, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 5, 911019, 0, 0, 18, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 6, 911017, 0, 0, 18, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 7, 911023, 0, 0, 18, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 8, 911015, 0, 0, 18, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (9, 9, 911021, 0, 0, 18, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 0, 911005, 0, 0, 28, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 1, 911009, 0, 0, 28, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 2, 911003, 0, 0, 28, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 3, 911007, 0, 0, 28, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 4, 911011, 0, 0, 28, 0, 0, 1, 10, 5, 10, 8, 11, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 5, 911019, 0, 0, 20, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 6, 911017, 0, 0, 20, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 7, 911023, 0, 0, 20, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 8, 911015, 0, 0, 20, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (10, 9, 911021, 0, 0, 20, 0, 0, 3, 7, 5, 7, 8, 10, 25, 50, 75);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 0, 911005, 911006, 0, 25, 0, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 1, 911009, 911010, 0, 25, 0, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 2, 911003, 911004, 0, 25, 0, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 3, 911007, 911008, 0, 25, 0, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 4, 911011, 911012, 0, 25, 0, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 5, 911019, 911020, 0, 18, 0, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 6, 911017, 911018, 0, 18, 0, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 7, 911023, 911024, 0, 18, 0, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 8, 911015, 911016, 0, 18, 0, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (11, 9, 911021, 911022, 0, 18, 0, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 0, 911005, 911006, 0, 27, 2, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 1, 911009, 911010, 0, 27, 2, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 2, 911003, 911004, 0, 27, 2, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 3, 911007, 911008, 0, 27, 2, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 4, 911011, 911012, 0, 27, 2, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 5, 911019, 911020, 0, 19, 2, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 6, 911017, 911018, 0, 19, 2, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 7, 911023, 911024, 0, 19, 2, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 8, 911015, 911016, 0, 19, 2, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (12, 9, 911021, 911022, 0, 19, 2, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 0, 911005, 911006, 0, 28, 4, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 1, 911009, 911010, 0, 28, 4, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 2, 911003, 911004, 0, 28, 4, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 3, 911007, 911008, 0, 28, 4, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 4, 911011, 911012, 0, 28, 4, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 5, 911019, 911020, 0, 20, 4, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 6, 911017, 911018, 0, 20, 4, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 7, 911023, 911024, 0, 20, 4, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 8, 911015, 911016, 0, 20, 4, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (13, 9, 911021, 911022, 0, 20, 4, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 0, 911005, 911006, 0, 29, 6, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 1, 911009, 911010, 0, 29, 6, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 2, 911003, 911004, 0, 29, 6, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 3, 911007, 911008, 0, 29, 6, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 4, 911011, 911012, 0, 29, 6, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 5, 911019, 911020, 0, 22, 6, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 6, 911017, 911018, 0, 22, 6, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 7, 911023, 911024, 0, 22, 6, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 8, 911015, 911016, 0, 22, 6, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (14, 9, 911021, 911022, 0, 22, 6, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 0, 911005, 911006, 0, 30, 8, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 1, 911009, 911010, 0, 30, 8, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 2, 911003, 911004, 0, 30, 8, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 3, 911007, 911008, 0, 30, 8, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 4, 911011, 911012, 0, 30, 8, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 5, 911019, 911020, 0, 23, 8, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 6, 911017, 911018, 0, 23, 8, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 7, 911023, 911024, 0, 23, 8, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 8, 911015, 911016, 0, 23, 8, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (15, 9, 911021, 911022, 0, 23, 8, 0, 5, 9, 7, 9, 12, 14, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 0, 911005, 911006, 0, 32, 10, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 1, 911009, 911010, 0, 32, 10, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 2, 911003, 911004, 0, 32, 10, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 3, 911007, 911008, 0, 32, 10, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 4, 911011, 911012, 0, 32, 10, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 5, 911019, 911020, 0, 24, 10, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 6, 911017, 911018, 0, 24, 10, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 7, 911023, 911024, 0, 24, 10, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 8, 911015, 911016, 0, 24, 10, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (16, 9, 911021, 911022, 0, 24, 10, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 0, 911005, 911006, 0, 33, 12, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 1, 911009, 911010, 0, 33, 12, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 2, 911003, 911004, 0, 33, 12, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 3, 911007, 911008, 0, 33, 12, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 4, 911011, 911012, 0, 33, 12, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 5, 911019, 911020, 0, 25, 12, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 6, 911017, 911018, 0, 25, 12, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 7, 911023, 911024, 0, 25, 12, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 8, 911015, 911016, 0, 25, 12, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (17, 9, 911021, 911022, 0, 25, 12, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 0, 911005, 911006, 0, 34, 14, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 1, 911009, 911010, 0, 34, 14, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 2, 911003, 911004, 0, 34, 14, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 3, 911007, 911008, 0, 34, 14, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 4, 911011, 911012, 0, 34, 14, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 5, 911019, 911020, 0, 27, 14, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 6, 911017, 911018, 0, 27, 14, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 7, 911023, 911024, 0, 27, 14, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 8, 911015, 911016, 0, 27, 14, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (18, 9, 911021, 911022, 0, 27, 14, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 0, 911005, 911006, 0, 35, 16, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 1, 911009, 911010, 0, 35, 16, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 2, 911003, 911004, 0, 35, 16, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 3, 911007, 911008, 0, 35, 16, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 4, 911011, 911012, 0, 35, 16, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 5, 911019, 911020, 0, 28, 16, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 6, 911017, 911018, 0, 28, 16, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 7, 911023, 911024, 0, 28, 16, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 8, 911015, 911016, 0, 28, 16, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (19, 9, 911021, 911022, 0, 28, 16, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 0, 911005, 911006, 0, 37, 18, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 1, 911009, 911010, 0, 37, 18, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 2, 911003, 911004, 0, 37, 18, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 3, 911007, 911008, 0, 37, 18, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 4, 911011, 911012, 0, 37, 18, 0, 3, 12, 7, 12, 12, 15, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 5, 911019, 911020, 0, 29, 18, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 6, 911017, 911018, 0, 29, 18, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 7, 911023, 911024, 0, 29, 18, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 8, 911015, 911016, 0, 29, 18, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (20, 9, 911021, 911022, 0, 29, 18, 0, 7, 11, 9, 11, 16, 18, 50, 75, 100);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 0, 911005, 911006, 0, 38, 20, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 1, 911009, 911010, 0, 38, 20, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 2, 911003, 911004, 0, 38, 20, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 3, 911007, 911008, 0, 38, 20, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 4, 911011, 911012, 0, 38, 20, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 5, 911019, 911020, 0, 30, 20, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 6, 911017, 911018, 0, 30, 20, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 7, 911023, 911024, 0, 30, 20, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 8, 911015, 911016, 0, 30, 20, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (21, 9, 911021, 911022, 0, 30, 20, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 0, 911005, 911006, 0, 39, 22, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 1, 911009, 911010, 0, 39, 22, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 2, 911003, 911004, 0, 39, 22, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 3, 911007, 911008, 0, 39, 22, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 4, 911011, 911012, 0, 39, 22, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 5, 911019, 911020, 0, 32, 22, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 6, 911017, 911018, 0, 32, 22, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 7, 911023, 911024, 0, 32, 22, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 8, 911015, 911016, 0, 32, 22, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (22, 9, 911021, 911022, 0, 32, 22, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 0, 911005, 911006, 0, 40, 24, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 1, 911009, 911010, 0, 40, 24, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 2, 911003, 911004, 0, 40, 24, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 3, 911007, 911008, 0, 40, 24, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 4, 911011, 911012, 0, 40, 24, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 5, 911019, 911020, 0, 33, 24, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 6, 911017, 911018, 0, 33, 24, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 7, 911023, 911024, 0, 33, 24, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 8, 911015, 911016, 0, 33, 24, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (23, 9, 911021, 911022, 0, 33, 24, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 0, 911005, 911006, 0, 42, 26, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 1, 911009, 911010, 0, 42, 26, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 2, 911003, 911004, 0, 42, 26, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 3, 911007, 911008, 0, 42, 26, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 4, 911011, 911012, 0, 42, 26, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 5, 911019, 911020, 0, 34, 26, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 6, 911017, 911018, 0, 34, 26, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 7, 911023, 911024, 0, 34, 26, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 8, 911015, 911016, 0, 34, 26, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (24, 9, 911021, 911022, 0, 34, 26, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 0, 911005, 911006, 0, 43, 28, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 1, 911009, 911010, 0, 43, 28, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 2, 911003, 911004, 0, 43, 28, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 3, 911007, 911008, 0, 43, 28, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 4, 911011, 911012, 0, 43, 28, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 5, 911019, 911020, 0, 35, 28, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 6, 911017, 911018, 0, 35, 28, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 7, 911023, 911024, 0, 35, 28, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 8, 911015, 911016, 0, 35, 28, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (25, 9, 911021, 911022, 0, 35, 28, 0, 9, 13, 11, 13, 20, 22, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 0, 911005, 911006, 0, 44, 30, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 1, 911009, 911010, 0, 44, 30, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 2, 911003, 911004, 0, 44, 30, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 3, 911007, 911008, 0, 44, 30, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 4, 911011, 911012, 0, 44, 30, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 5, 911019, 911020, 0, 37, 30, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 6, 911017, 911018, 0, 37, 30, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 7, 911023, 911024, 0, 37, 30, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 8, 911015, 911016, 0, 37, 30, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (26, 9, 911021, 911022, 0, 37, 30, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 0, 911005, 911006, 0, 45, 32, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 1, 911009, 911010, 0, 45, 32, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 2, 911003, 911004, 0, 45, 32, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 3, 911007, 911008, 0, 45, 32, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 4, 911011, 911012, 0, 45, 32, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 5, 911019, 911020, 0, 38, 32, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 6, 911017, 911018, 0, 38, 32, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 7, 911023, 911024, 0, 38, 32, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 8, 911015, 911016, 0, 38, 32, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (27, 9, 911021, 911022, 0, 38, 32, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 0, 911005, 911006, 0, 47, 34, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 1, 911009, 911010, 0, 47, 34, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 2, 911003, 911004, 0, 47, 34, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 3, 911007, 911008, 0, 47, 34, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 4, 911011, 911012, 0, 47, 34, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 5, 911019, 911020, 0, 39, 34, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 6, 911017, 911018, 0, 39, 34, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 7, 911023, 911024, 0, 39, 34, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 8, 911015, 911016, 0, 39, 34, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (28, 9, 911021, 911022, 0, 39, 34, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 0, 911005, 911006, 0, 48, 36, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 1, 911009, 911010, 0, 48, 36, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 2, 911003, 911004, 0, 48, 36, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 3, 911007, 911008, 0, 48, 36, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 4, 911011, 911012, 0, 48, 36, 0, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 5, 911019, 911020, 0, 40, 36, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 6, 911017, 911018, 0, 40, 36, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 7, 911023, 911024, 0, 40, 36, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 8, 911015, 911016, 0, 40, 36, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (29, 9, 911021, 911022, 0, 40, 36, 0, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 0, 911005, 911006, 911002, 50, 38, 3, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 1, 911009, 911010, 911002, 50, 38, 3, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 2, 911003, 911004, 911002, 50, 38, 3, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 3, 911007, 911008, 911002, 50, 38, 3, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 4, 911011, 911012, 911002, 50, 38, 3, 5, 14, 9, 14, 16, 19, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 5, 911019, 911020, 911002, 35, 38, 3, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 6, 911017, 911018, 911002, 35, 38, 3, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 7, 911023, 911024, 911002, 35, 38, 3, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 8, 911015, 911016, 911002, 35, 38, 3, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (30, 9, 911021, 911022, 911002, 35, 38, 3, 11, 15, 13, 15, 24, 26, 75, 100, 125);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 0, 911005, 911006, 911002, 51, 40, 6, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 1, 911009, 911010, 911002, 51, 40, 6, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 2, 911003, 911004, 911002, 51, 40, 6, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 3, 911007, 911008, 911002, 51, 40, 6, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 4, 911011, 911012, 911002, 51, 40, 6, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 5, 911019, 911020, 911002, 36, 40, 6, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 6, 911017, 911018, 911002, 36, 40, 6, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 7, 911023, 911024, 911002, 36, 40, 6, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 8, 911015, 911016, 911002, 36, 40, 6, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (31, 9, 911021, 911022, 911002, 36, 40, 6, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 0, 911005, 911006, 911002, 52, 42, 9, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 1, 911009, 911010, 911002, 52, 42, 9, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 2, 911003, 911004, 911002, 52, 42, 9, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 3, 911007, 911008, 911002, 52, 42, 9, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 4, 911011, 911012, 911002, 52, 42, 9, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 5, 911019, 911020, 911002, 37, 42, 9, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 6, 911017, 911018, 911002, 37, 42, 9, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 7, 911023, 911024, 911002, 37, 42, 9, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 8, 911015, 911016, 911002, 37, 42, 9, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (32, 9, 911021, 911022, 911002, 37, 42, 9, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 0, 911005, 911006, 911002, 53, 44, 12, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 1, 911009, 911010, 911002, 53, 44, 12, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 2, 911003, 911004, 911002, 53, 44, 12, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 3, 911007, 911008, 911002, 53, 44, 12, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 4, 911011, 911012, 911002, 53, 44, 12, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 5, 911019, 911020, 911002, 38, 44, 12, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 6, 911017, 911018, 911002, 38, 44, 12, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 7, 911023, 911024, 911002, 38, 44, 12, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 8, 911015, 911016, 911002, 38, 44, 12, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (33, 9, 911021, 911022, 911002, 38, 44, 12, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 0, 911005, 911006, 911002, 54, 46, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 1, 911009, 911010, 911002, 54, 46, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 2, 911003, 911004, 911002, 54, 46, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 3, 911007, 911008, 911002, 54, 46, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 4, 911011, 911012, 911002, 54, 46, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 5, 911019, 911020, 911002, 39, 46, 15, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 6, 911017, 911018, 911002, 39, 46, 15, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 7, 911023, 911024, 911002, 39, 46, 15, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 8, 911015, 911016, 911002, 39, 46, 15, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (34, 9, 911021, 911022, 911002, 39, 46, 15, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 0, 911005, 911006, 911002, 55, 48, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 1, 911009, 911010, 911002, 55, 48, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 2, 911003, 911004, 911002, 55, 48, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 3, 911007, 911008, 911002, 55, 48, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 4, 911011, 911012, 911002, 55, 48, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 5, 911019, 911020, 911002, 40, 48, 18, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 6, 911017, 911018, 911002, 40, 48, 18, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 7, 911023, 911024, 911002, 40, 48, 18, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 8, 911015, 911016, 911002, 40, 48, 18, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (35, 9, 911021, 911022, 911002, 40, 48, 18, 13, 17, 15, 17, 28, 30, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 0, 911005, 911006, 911002, 56, 50, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 1, 911009, 911010, 911002, 56, 50, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 2, 911003, 911004, 911002, 56, 50, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 3, 911007, 911008, 911002, 56, 50, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 4, 911011, 911012, 911002, 56, 50, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 5, 911019, 911020, 911002, 41, 50, 21, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 6, 911017, 911018, 911002, 41, 50, 21, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 7, 911023, 911024, 911002, 41, 50, 21, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 8, 911015, 911016, 911002, 41, 50, 21, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (36, 9, 911021, 911022, 911002, 41, 50, 21, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 0, 911005, 911006, 911002, 57, 52, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 1, 911009, 911010, 911002, 57, 52, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 2, 911003, 911004, 911002, 57, 52, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 3, 911007, 911008, 911002, 57, 52, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 4, 911011, 911012, 911002, 57, 52, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 5, 911019, 911020, 911002, 42, 52, 24, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 6, 911017, 911018, 911002, 42, 52, 24, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 7, 911023, 911024, 911002, 42, 52, 24, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 8, 911015, 911016, 911002, 42, 52, 24, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (37, 9, 911021, 911022, 911002, 42, 52, 24, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 0, 911005, 911006, 911002, 58, 54, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 1, 911009, 911010, 911002, 58, 54, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 2, 911003, 911004, 911002, 58, 54, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 3, 911007, 911008, 911002, 58, 54, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 4, 911011, 911012, 911002, 58, 54, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 5, 911019, 911020, 911002, 43, 54, 27, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 6, 911017, 911018, 911002, 43, 54, 27, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 7, 911023, 911024, 911002, 43, 54, 27, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 8, 911015, 911016, 911002, 43, 54, 27, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (38, 9, 911021, 911022, 911002, 43, 54, 27, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 0, 911005, 911006, 911002, 59, 56, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 1, 911009, 911010, 911002, 59, 56, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 2, 911003, 911004, 911002, 59, 56, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 3, 911007, 911008, 911002, 59, 56, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 4, 911011, 911012, 911002, 59, 56, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 5, 911019, 911020, 911002, 44, 56, 30, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 6, 911017, 911018, 911002, 44, 56, 30, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 7, 911023, 911024, 911002, 44, 56, 30, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 8, 911015, 911016, 911002, 44, 56, 30, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (39, 9, 911021, 911022, 911002, 44, 56, 30, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 0, 911005, 911006, 911002, 59, 58, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 1, 911009, 911010, 911002, 59, 58, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 2, 911003, 911004, 911002, 59, 58, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 3, 911007, 911008, 911002, 59, 58, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 4, 911011, 911012, 911002, 59, 58, 15, 7, 16, 11, 16, 20, 23, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 5, 911019, 911020, 911002, 44, 58, 33, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 6, 911017, 911018, 911002, 44, 58, 33, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 7, 911023, 911024, 911002, 44, 58, 33, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 8, 911015, 911016, 911002, 44, 58, 33, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (40, 9, 911021, 911022, 911002, 44, 58, 33, 15, 19, 17, 19, 32, 34, 100, 125, 150);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 0, 911005, 911006, 911002, 60, 60, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 1, 911009, 911010, 911002, 60, 60, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 2, 911003, 911004, 911002, 60, 60, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 3, 911007, 911008, 911002, 60, 60, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 4, 911011, 911012, 911002, 60, 60, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 5, 911019, 911020, 911002, 45, 60, 36, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 6, 911017, 911018, 911002, 45, 60, 36, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 7, 911023, 911024, 911002, 45, 60, 36, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 8, 911015, 911016, 911002, 45, 60, 36, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (41, 9, 911021, 911022, 911002, 45, 60, 36, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 0, 911005, 911006, 911002, 61, 62, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 1, 911009, 911010, 911002, 61, 62, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 2, 911003, 911004, 911002, 61, 62, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 3, 911007, 911008, 911002, 61, 62, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 4, 911011, 911012, 911002, 61, 62, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 5, 911019, 911020, 911002, 46, 62, 39, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 6, 911017, 911018, 911002, 46, 62, 39, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 7, 911023, 911024, 911002, 46, 62, 39, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 8, 911015, 911016, 911002, 46, 62, 39, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (42, 9, 911021, 911022, 911002, 46, 62, 39, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 0, 911005, 911006, 911002, 62, 64, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 1, 911009, 911010, 911002, 62, 64, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 2, 911003, 911004, 911002, 62, 64, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 3, 911007, 911008, 911002, 62, 64, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 4, 911011, 911012, 911002, 62, 64, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 5, 911019, 911020, 911002, 47, 64, 42, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 6, 911017, 911018, 911002, 47, 64, 42, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 7, 911023, 911024, 911002, 47, 64, 42, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 8, 911015, 911016, 911002, 47, 64, 42, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (43, 9, 911021, 911022, 911002, 47, 64, 42, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 0, 911005, 911006, 911002, 63, 66, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 1, 911009, 911010, 911002, 63, 66, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 2, 911003, 911004, 911002, 63, 66, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 3, 911007, 911008, 911002, 63, 66, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 4, 911011, 911012, 911002, 63, 66, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 5, 911019, 911020, 911002, 48, 66, 45, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 6, 911017, 911018, 911002, 48, 66, 45, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 7, 911023, 911024, 911002, 48, 66, 45, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 8, 911015, 911016, 911002, 48, 66, 45, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (44, 9, 911021, 911022, 911002, 48, 66, 45, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 0, 911005, 911006, 911002, 64, 68, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 1, 911009, 911010, 911002, 64, 68, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 2, 911003, 911004, 911002, 64, 68, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 3, 911007, 911008, 911002, 64, 68, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 4, 911011, 911012, 911002, 64, 68, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 5, 911019, 911020, 911002, 49, 68, 48, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 6, 911017, 911018, 911002, 49, 68, 48, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 7, 911023, 911024, 911002, 49, 68, 48, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 8, 911015, 911016, 911002, 49, 68, 48, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (45, 9, 911021, 911022, 911002, 49, 68, 48, 17, 21, 19, 21, 36, 38, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 0, 911005, 911006, 911002, 65, 70, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 1, 911009, 911010, 911002, 65, 70, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 2, 911003, 911004, 911002, 65, 70, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 3, 911007, 911008, 911002, 65, 70, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 4, 911011, 911012, 911002, 65, 70, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 5, 911019, 911020, 911002, 50, 70, 51, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 6, 911017, 911018, 911002, 50, 70, 51, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 7, 911023, 911024, 911002, 50, 70, 51, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 8, 911015, 911016, 911002, 50, 70, 51, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (46, 9, 911021, 911022, 911002, 50, 70, 51, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 0, 911005, 911006, 911002, 66, 72, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 1, 911009, 911010, 911002, 66, 72, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 2, 911003, 911004, 911002, 66, 72, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 3, 911007, 911008, 911002, 66, 72, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 4, 911011, 911012, 911002, 66, 72, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 5, 911019, 911020, 911002, 51, 72, 54, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 6, 911017, 911018, 911002, 51, 72, 54, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 7, 911023, 911024, 911002, 51, 72, 54, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 8, 911015, 911016, 911002, 51, 72, 54, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (47, 9, 911021, 911022, 911002, 51, 72, 54, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 0, 911005, 911006, 911002, 67, 74, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 1, 911009, 911010, 911002, 67, 74, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 2, 911003, 911004, 911002, 67, 74, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 3, 911007, 911008, 911002, 67, 74, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 4, 911011, 911012, 911002, 67, 74, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 5, 911019, 911020, 911002, 52, 74, 57, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 6, 911017, 911018, 911002, 52, 74, 57, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 7, 911023, 911024, 911002, 52, 74, 57, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 8, 911015, 911016, 911002, 52, 74, 57, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (48, 9, 911021, 911022, 911002, 52, 74, 57, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 0, 911005, 911006, 911002, 68, 76, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 1, 911009, 911010, 911002, 68, 76, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 2, 911003, 911004, 911002, 68, 76, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 3, 911007, 911008, 911002, 68, 76, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 4, 911011, 911012, 911002, 68, 76, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 5, 911019, 911020, 911002, 53, 76, 60, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 6, 911017, 911018, 911002, 53, 76, 60, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 7, 911023, 911024, 911002, 53, 76, 60, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 8, 911015, 911016, 911002, 53, 76, 60, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (49, 9, 911021, 911022, 911002, 53, 76, 60, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 0, 911005, 911006, 911002, 68, 78, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 1, 911009, 911010, 911002, 68, 78, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 2, 911003, 911004, 911002, 68, 78, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 3, 911007, 911008, 911002, 68, 78, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 4, 911011, 911012, 911002, 68, 78, 15, 9, 18, 13, 18, 24, 27, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 5, 911019, 911020, 911002, 53, 78, 63, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 6, 911017, 911018, 911002, 53, 78, 63, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 7, 911023, 911024, 911002, 53, 78, 63, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 8, 911015, 911016, 911002, 53, 78, 63, 19, 23, 21, 23, 40, 42, 150, 175, 200);
REPLACE INTO acore_world.mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemEntry2, itemEntry3, itemCost1, itemCost2, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES (50, 9, 911021, 911022, 911002, 53, 78, 63, 19, 23, 21, 23, 40, 42, 150, 175, 200);

View File

@@ -0,0 +1,24 @@
REPLACE INTO acore_world.spell_script_names (spell_id, ScriptName) VALUES
('80000001','spell_mp_titans_strength_aura'),
('80000002','spell_mp_steel_forged_aura'),
('80000003','spell_mp_celestial_grace_aura'),
('80000004','spell_mp_forbidden_knowledge_aura'),
('80000005','spell_mp_spectral_reflexes_aura'),
('80000006','spell_mp_eldritch_barrier_aura'),
('80000007','spell_mp_hellfire_shielding_aura'),
('80000008','spell_mp_primal_endurance_aura'),
('80000009','spell_mp_lichs_bane_aura'),
('80000010','spell_mp_glacial_fortress_aura');
DELETE FROM `spell_dbc` WHERE `ID` IN (80000001, 80000002, 80000003, 80000004, 80000005, 80000006, 80000007, 80000008, 80000009, 80000010);
INSERT INTO `spell_dbc` (`ID`, `Attributes`, `AttributesEx`, `DispelType`, `Effect_1`, `EffectAura_1`,`EffectMiscValue_1`, `Name_Lang_enUS`, `Description_Lang_enUS`) VALUES
(80000001, 192, 0, 0, 6, 29, 0, 'Titan\'s Strength', 'Empowers you with the legendary strength of the Titans, enhancing your physical prowess.'),
(80000002, 192, 0, 0, 6, 29, 2, 'Steel Forged', 'Transforms your skin into an impenetrable steel armor, deflecting all but the mightiest blows.'),
(80000003, 192, 0, 0, 6, 29, 4,'Celestial Grace', 'Blessed with celestial wisdom, you inspire and uplift the spirits of allies around you.'),
(80000004, 192, 0, 0, 6, 29, 3,'Forbidden Knowledge', 'You have delved into the forbidden secrets of Azeroth, unlocking arcane mysteries and hidden powers.'),
(80000005, 192, 0, 0, 6, 29, 1,'Spectral Reflexes', 'You become a phantom, mastering the art of the blade and dagger with unparalleled precision.'),
(80000006, 192, 0, 0, 6, 22, 64,'Eldritch Barrier', 'Erects an eldritch barrier that halts arcane forces in their tracks, shielding you from magical harm.'),
(80000007, 192, 0, 0, 6, 22, 4,'Hellfire Shielding', 'You have learned to withstand the infernal flames of hell, emerging unscathed from fiery assaults.'),
(80000008, 192, 0, 0, 6, 22, 8,'Primal Endurance', 'Your endurance has been toughened to resist pestilence and plague, rendering you immune to their effects.'),
(80000009, 192, 0, 0, 6, 22, 32, 'Lich\'s Bane', 'You possess the knowledge to counter the shadows of the undead, protecting your flesh from their dark touch.'),
(80000010, 192, 0, 0, 6, 22, 16, 'Glacial Fortress', 'You can withstand temperatures far below freezing that no mere mortal can endure, encased in a glacial fortress.');

View File

@@ -0,0 +1,97 @@
-- Common dice for stat roles
DELETE FROM `item_template` WHERE (`entry` = 911000);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911000, 15, 4, -1, 'Ancient Dice', 52015, 3, 163840, 0, 1, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 'Ancient dice from an unknown origin, maybe someone or something is looking for them.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
-- Rare Item for reseting AA points
DELETE FROM `item_template` WHERE (`entry` = 911001);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911001, 0, 4, -1, 'Onyx Spike Relic', 33851, 4, 0, 0, 0, 0, 10000000, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 65082, 0, 10, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, 'This relic has a dangerous aura. Using this seems fatal', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
-- Legendary Veilstone for end game stat upgrades
DELETE FROM `item_template` WHERE (`entry` = 911002);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911002, 15, 4, -1, 'Veilstone', 270622, 5, 0, 0, 1, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, 'A gem that holds together the boundary between dimensions.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
-- mythical fusion items
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911003, 7, 1, -1, 'Fused Ore', '', 270620, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 1, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911004, 7, 1, -1, 'Moltenheart Core', 'Mythical ore from high level fusion', 270608, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 1, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911005, 7, 7, -1, 'Fused Cloth', '', 270613, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 7, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911006, 7, 7, -1, 'Soulthread Shroud', 'Mythical cloth from high level fusion', 270601, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 7, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911007, 7, 8, -1, 'Fused Leather', '', 270619, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 8, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911008, 7, 8, -1, 'Ashwild Pelt', 'Mythical leather from high level fusion', 270607, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 8, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911009, 7, 3, -1, 'Fused Compound', '', 270610, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 3, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911010, 7, 3, -1, 'Elixir of Chaos', 'Mythical alchemy component from high level fusion', 270599, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 3, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911011, 7, 4, -1, 'Fused Gem', '', 270616, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 4, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911012, 7, 4, -1, 'Starfused Prism', 'Mythical gemstone from high level fusion', 270604, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 4, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911013, 7, 0, -1, 'Fused Essence', '', 270615, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911014, 7, 0, -1, 'Crystalline Echo', 'Mythical enchanting component from high level fusion', 270603, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911015, 7, 0, -1, 'Fused Frostshard', 'Artifact that emits extreme cold', 270617, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911016, 7, 0, -1, 'Everfrost Crystal', 'Mythical frost component from high level fusion', 270605, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911017, 7, 0, -1, 'Fused Infernostone', 'Artifact that emits extreme heat', 270618, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911018, 7, 0, -1, 'Blazebound Ember', 'Mythical fire component from high level fusion', 270606, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911019, 7, 0, -1, 'Fused Arcane Crystal', 'Artifact of immense arcane power',270611, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911020, 7, 0, -1, 'Spellfire Prism', 'Mythical arcane component from high level fusion', 270600, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911021, 7, 0, -1, 'Fused Shadow Crystal', 'Artifact radiating dark energy', 270621, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911022, 7, 0, -1, 'Eternal Shadow Crystal', 'Mythical shadow component from high level fusion',270609, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911023, 7, 0, -1, 'Fused Earth Shard','Artifact emitting dangerously poisonous vapors',270614, 3, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
REPLACE INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `Description`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `bonding`, `Material`, `VerifiedBuild`) VALUES (911024, 7, 0, -1, 'Verdant Stoneheart', 'Mythical earth component from high level fusion',270602, 4, 262144, 0, 1, 0, 0, 0, -1, -1, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 1, 0, 12340);
-- Flavor Text
DELETE FROM `item_template` WHERE (`entry` = 2595);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(2595, 0, 5, -1, 'Jug of Badlands Bourbon', 7921, 1, 0, 0, 1, 50000, 500, 0, -1, -1, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11009, 0, -1, -1, 0, 59, 1000, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 'Mick''s Favorite Drink', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 12340);
-- Currency
DELETE FROM `item_template` WHERE (`entry` = 911050);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911050, 10, 0, -1, 'Badge of the Void', 270626, 4, 2048, 0, 1, 0, 0, 0, -1, -1, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
DELETE FROM `item_template` WHERE (`entry` = 911051);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911051, 10, 0, -1, 'Emblem of Undeath', 270628, 4, 2048, 0, 1, 0, 0, 0, -1, -1, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
DELETE FROM `item_template` WHERE (`entry` = 911052);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911052, 10, 0, -1, 'Emblem of Chaos', 270623, 4, 2048, 0, 1, 0, 0, 0, -1, -1, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
DELETE FROM `item_template` WHERE (`entry` = 911053);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911053, 10, 0, -1, 'Emblem Of Veil', 270632, 4, 2048, 0, 1, 0, 0, 0, -1, -1, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
DELETE FROM `item_template` WHERE (`entry` = 911054);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911054, 10, 0, -1, 'Mythic Badge', 270629, 4, 2048, 0, 1, 0, 0, 0, -1, -1, 80, 80, 0, 0, 0, 0, 0, 0, 0, 0, 500000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, '', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8192, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
-- Random loot where greens would drop.
DELETE FROM `item_template` WHERE (`entry` = 911100);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911100, 15, 0, -1, 'Shadowy Remains', 270634, 2, 4, 0, 1, 50000000, 12, 0, 32767, -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, '', 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 12340);
DELETE FROM `item_template` WHERE (`entry` = 911101);
INSERT INTO `item_template` (`entry`, `class`, `subclass`, `SoundOverrideSubclass`, `name`, `displayid`, `Quality`, `Flags`, `FlagsExtra`, `BuyCount`, `BuyPrice`, `SellPrice`, `InventoryType`, `AllowableClass`, `AllowableRace`, `ItemLevel`, `RequiredLevel`, `RequiredSkill`, `RequiredSkillRank`, `requiredspell`, `requiredhonorrank`, `RequiredCityRank`, `RequiredReputationFaction`, `RequiredReputationRank`, `maxcount`, `stackable`, `ContainerSlots`, `StatsCount`, `stat_type1`, `stat_value1`, `stat_type2`, `stat_value2`, `stat_type3`, `stat_value3`, `stat_type4`, `stat_value4`, `stat_type5`, `stat_value5`, `stat_type6`, `stat_value6`, `stat_type7`, `stat_value7`, `stat_type8`, `stat_value8`, `stat_type9`, `stat_value9`, `stat_type10`, `stat_value10`, `ScalingStatDistribution`, `ScalingStatValue`, `dmg_min1`, `dmg_max1`, `dmg_type1`, `dmg_min2`, `dmg_max2`, `dmg_type2`, `armor`, `holy_res`, `fire_res`, `nature_res`, `frost_res`, `shadow_res`, `arcane_res`, `delay`, `ammo_type`, `RangedModRange`, `spellid_1`, `spelltrigger_1`, `spellcharges_1`, `spellppmRate_1`, `spellcooldown_1`, `spellcategory_1`, `spellcategorycooldown_1`, `spellid_2`, `spelltrigger_2`, `spellcharges_2`, `spellppmRate_2`, `spellcooldown_2`, `spellcategory_2`, `spellcategorycooldown_2`, `spellid_3`, `spelltrigger_3`, `spellcharges_3`, `spellppmRate_3`, `spellcooldown_3`, `spellcategory_3`, `spellcategorycooldown_3`, `spellid_4`, `spelltrigger_4`, `spellcharges_4`, `spellppmRate_4`, `spellcooldown_4`, `spellcategory_4`, `spellcategorycooldown_4`, `spellid_5`, `spelltrigger_5`, `spellcharges_5`, `spellppmRate_5`, `spellcooldown_5`, `spellcategory_5`, `spellcategorycooldown_5`, `bonding`, `description`, `PageText`, `LanguageID`, `PageMaterial`, `startquest`, `lockid`, `Material`, `sheath`, `RandomProperty`, `RandomSuffix`, `block`, `itemset`, `MaxDurability`, `area`, `Map`, `BagFamily`, `TotemCategory`, `socketColor_1`, `socketContent_1`, `socketColor_2`, `socketContent_2`, `socketColor_3`, `socketContent_3`, `socketBonus`, `GemProperties`, `RequiredDisenchantSkill`, `ArmorDamageModifier`, `duration`, `ItemLimitCategory`, `HolidayId`, `ScriptName`, `DisenchantID`, `FoodType`, `minMoneyLoot`, `maxMoneyLoot`, `flagsCustom`, `VerifiedBuild`) VALUES
(911101, 15, 0, -1, 'Veil Fragments', 270635, 2, 0, 0, 1, 0, 0, 0, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1000, 0, 0, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 0, 0, 0, 0, -1, 0, -1, 1, 'valuable fragments of a veil stone.', 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, '', 0, 0, 0, 0, 0, 0);
-- Loot Templates
DELETE FROM `item_loot_template` WHERE (`Entry` = 911100);
INSERT INTO `item_loot_template` (`Entry`, `Item`, `Reference`, `Chance`, `QuestRequired`, `LootMode`, `GroupId`, `MinCount`, `MaxCount`, `Comment`) VALUES
(911100, 33447, 0, 20, 0, 1, 0, 1, 3, 'Runic Healing Potion'),
(911100, 33448, 0, 20, 0, 1, 0, 1, 3, 'Runic Mana Potion'),
(911100, 910001, 0, 10, 0, 1, 0, 1, 2, 'Araxia Tokens'),
(911100, 911000, 0, 10, 0, 1, 0, 1, 3, 'Ancient Dice'),
(911100, 911003, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Ore'),
(911100, 911005, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Cloth'),
(911100, 911007, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Leather'),
(911100, 911009, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Compound'),
(911100, 911011, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Gem'),
(911100, 911013, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Essence'),
(911100, 911015, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Frostshard'),
(911100, 911017, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Infernostone'),
(911100, 911019, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Arcane Crystal'),
(911100, 911021, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Shadow Crystal'),
(911100, 911023, 0, 0.5, 0, 1, 0, 1, 1, 'Fused Earth Shard'),
(911100, 911101, 0, 35.5, 0, 1, 0, 1, 5, 'Veil Fragments');

View File

@@ -0,0 +1,15 @@
REPLACE INTO
spell_ranks (first_spell_id, spell_id, `rank`)
VALUES
(150000, 150000, 1), (150000, 150011, 2), -- Ore Fusion
(150001, 150001, 1), (150001, 150012, 2), -- Cloth Fusion
(150002, 150002, 1), (150002, 150013, 2), -- Leather Fusion
(150003, 150003, 1), (150003, 150014, 2), -- Alchemy Fusion
(150004, 150004, 1), (150004, 150015, 2), -- Gem Fusion
(150005, 150005, 1), (150005, 150016, 2), -- Essence Fusion
(150006, 150006, 1), (150006, 150017, 2), -- Cold Fusion
(150007, 150007, 1), (150007, 150018, 2), -- Flame Fusion
(150008, 150008, 1), (150008, 150019, 2), -- Arcane Fusion
(150009, 150009, 1), (150009, 150020, 2), -- Dark Fusion
(150010, 150010, 1), (150010, 150021, 2) -- Earth Fusion
;

View File

@@ -0,0 +1,201 @@
-- Mick Ashwild
REPLACE INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500561, 0, 0, 0, 0, 0, 'Mick Ashwild', 'The Mug', NULL, 0, 85, 85, 2, 35, 1, 1, 1.14286, 1, 1, 20, 1, 0, 0, 1.35, 2000, 2000, 1, 1, 1, 33024, 2048, 0, 0, 0, 0, 0, 0, 7, 32, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 0.7, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 12340);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500561);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500561, 0, 9500561, 1, 1, 12340);
DELETE FROM `creature_equip_template` WHERE (`CreatureID` = 9500561);
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
(9500561, 1, 4090, 0, 0, 0);
-- Thorin Firehand
DELETE FROM `creature_template` WHERE (`entry` = 9500562);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500562, 0, 0, 0, 0, 0, 'Thorin Firehand', 'The Hammer', NULL, 0, 85, 85, 2, 35, 1, 0.85, 1.14286, 1, 1, 1, 1.1, 3, 0, 2, 1, 0, 2, 2.5, 1, 33024, 2048, 0, 0, 0, 0, 0, 0, 7, 32, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 3, 2, 10, 1, 0, 0, 1, 0, 0, 0, '', 0);
DELETE FROM `creature_equip_template` WHERE (`CreatureID` = 9500562);
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
(9500562, 1, 11684, 2565, 0, 0);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500562);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500562, 0, 9500562, 1, 1, 12340);
-- Elowyn Threadbinder
DELETE FROM `creature_template` WHERE (`entry` = 9500563);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500563, 0, 0, 0, 0, 0, 'Elowyn Threadbinder', 'Mystic Artisan', NULL, 0, 85, 85, 0, 35, 1, 1, 1.14286, 1, 1, 30, 1, 3, 0, 1, 2000, 2000, 1, 1, 8, 33024, 2048, 0, 0, 0, 0, 0, 0, 7, 32, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 0);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500563);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500563, 0, 9500563, 1, 1, 12340);
-- Shivey
DELETE FROM `creature_template` WHERE (`entry` = 9500564);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500564, 0, 0, 0, 0, 0, 'Shivey', 'Professional Arson', NULL, 0, 85, 85, 2, 35, 1, 1, 1.14286, 1, 1, 1, 1, 3, 0, 1, 2000, 2500, 1, 1, 4, 33024, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 0);
DELETE FROM `creature_equip_template` WHERE (`CreatureID` = 9500564);
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
(9500564, 1, 28648, 2200, 0, 0);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500564);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500564, 0, 9500564, 1, 1, 0);
-- Steve
DELETE FROM `creature_template` WHERE (`entry` = 9500565);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500565, 0, 0, 0, 0, 0, 'Steve', 'The Indestructible', NULL, 0, 85, 85, 2, 35, 1, 1, 1.14286, 1, 1, 1, 1.25, 3, 0, 100, 2000, 2500, 1, 1, 1, 33024, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 100, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 0);
DELETE FROM `creature_equip_template` WHERE (`CreatureID` = 9500565);
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
(9500565, 1, 51869, 38462, 0, 0);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500565);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500565, 0, 9500565, 1.25, 1, 0);
-- Vaeric
DELETE FROM `creature_template` WHERE (`entry` = 9500566);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500566, 0, 0, 0, 0, 0, 'Vaeric Bloodbane', '', NULL, 0, 85, 85, 2, 35, 1, 1, 1.14286, 1, 1, 1, 1.25, 3, 0, 100, 2000, 2500, 1, 1, 1, 33024, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 100, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 0);
DELETE FROM `creature_equip_template` WHERE (`CreatureID` = 9500566);
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
(9500566, 1, 38632, 0, 0, 0);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500566);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500566, 0, 9500566, 1.25, 1, 0);
-- Agatha
DELETE FROM `creature_template` WHERE (`entry` = 9500567);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500567, 0, 0, 0, 0, 0, 'Agatha Veil', 'The Wise', NULL, 0, 85, 85, 2, 35, 1, 1, 1.14286, 1, 1, 1, 1.25, 3, 0, 100, 2000, 2500, 1, 1, 1, 33024, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 100, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 0);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500567);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500567, 0, 9500567, 1.25, 1, 0);
-- Sylvia
DELETE FROM `creature_template` WHERE (`entry` = 9500568);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500568, 0, 0, 0, 0, 0, 'Sylvia Steelheart', 'Battle Maiden', NULL, 0, 85, 85, 2, 35, 1, 1, 1.14286, 1, 1, 1, 1.25, 3, 0, 100, 2000, 2500, 1, 1, 1, 33024, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 100, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 0);
DELETE FROM `creature_equip_template` WHERE (`CreatureID` = 9500568);
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
(9500568, 1, 38200, 16887, 0, 0);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500568);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500568, 0, 9500568, 1.25, 1, 0);
-- Model Info Updates
REPLACE INTO creature_model_info (DisplayID, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender)
VALUES (9500561, 0.35, 1.25, 0, 0);
REPLACE INTO creature_model_info (DisplayID, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender)
SELECT 9500562, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender
FROM creature_model_info
WHERE DisplayID = 9500561;
REPLACE INTO creature_model_info (DisplayID, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender)
SELECT 9500563, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender
FROM creature_model_info
WHERE DisplayID = 9500561;
REPLACE INTO creature_model_info (DisplayID, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender)
SELECT 9500564, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender
FROM creature_model_info
WHERE DisplayID = 9500561;
REPLACE INTO creature_model_info (DisplayID, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender)
VALUES (9500565, 0.35, 1.25, 0, 0);
REPLACE INTO creature_model_info (DisplayID, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender)
VALUES (9500566, 0.35, 1.25, 0, 0);
REPLACE INTO creature_model_info (DisplayID, BoundingRadius, CombatReach, Gender, DisplayID_Other_Gender)
VALUES (9500567, 0.35, 1.25, 1, 0);
-- Supporting Cast Spawns
-- Agatha
DELETE FROM `creature` WHERE (`id1` = 9500567);
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
(9001011, 9500567, 0, 0, 530, 0, 0, 1, 1, 0, -1990.6, 5214.14, -44.0752, 0.978763, 300, 0, 0, 1333900, 0, 0, 0, 0, 0, '', NULL, 0, NULL),
(9001014, 9500567, 0, 0, 571, 0, 0, 1, 1, 0, 5804.06, 639.865, 609.886, 5.98164, 300, 0, 0, 1333900, 0, 0, 0, 0, 0, '', NULL, 0, NULL);
-- Vaeric
DELETE FROM `creature` WHERE (`id1` = 9500566);
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
(9001013, 9500566, 0, 0, 530, 0, 0, 1, 1, 1, -1989.96, 5225.28, -44.6008, 5.71627, 300, 0, 0, 1333900, 0, 0, 0, 0, 0, '', NULL, 0, NULL),
(9001015, 9500566, 0, 0, 571, 0, 0, 1, 1, 1, 5826.64, 674.772, 609.885, 5.53385, 300, 0, 0, 1333900, 0, 0, 0, 0, 0, '', NULL, 0, NULL);
-- Slyvia
DELETE FROM `creature` WHERE (`id1` = 9500568);
INSERT INTO `creature` (`guid`, `id1`, `id2`, `id3`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `equipment_id`, `position_x`, `position_y`, `position_z`, `orientation`, `spawntimesecs`, `wander_distance`, `currentwaypoint`, `curhealth`, `curmana`, `MovementType`, `npcflag`, `unit_flags`, `dynamicflags`, `ScriptName`, `VerifiedBuild`, `CreateObject`, `Comment`) VALUES
(9001010, 9500568, 0, 0, 530, 0, 0, 1, 1, 1, -1994.38, 5219.83, -44.2111, 0.597826, 300, 0, 0, 1333900, 0, 0, 0, 0, 0, '', NULL, 0, NULL),
(9001016, 9500568, 0, 0, 571, 0, 0, 1, 1, 1, 5831.89, 678.204, 609.885, 5.0846, 300, 0, 0, 1333900, 0, 0, 0, 0, 0, '', NULL, 0, NULL);
-- Gossip Texts
-- Vaeric Starter Intro
DELETE FROM `npc_text` WHERE (`ID` = 60566);
INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `Probability0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`, `text1_0`, `text1_1`, `BroadcastTextID1`, `lang1`, `Probability1`, `em1_0`, `em1_1`, `em1_2`, `em1_3`, `em1_4`, `em1_5`, `text2_0`, `text2_1`, `BroadcastTextID2`, `lang2`, `Probability2`, `em2_0`, `em2_1`, `em2_2`, `em2_3`, `em2_4`, `em2_5`, `text3_0`, `text3_1`, `BroadcastTextID3`, `lang3`, `Probability3`, `em3_0`, `em3_1`, `em3_2`, `em3_3`, `em3_4`, `em3_5`, `text4_0`, `text4_1`, `BroadcastTextID4`, `lang4`, `Probability4`, `em4_0`, `em4_1`, `em4_2`, `em4_3`, `em4_4`, `em4_5`, `text5_0`, `text5_1`, `BroadcastTextID5`, `lang5`, `Probability5`, `em5_0`, `em5_1`, `em5_2`, `em5_3`, `em5_4`, `em5_5`, `text6_0`, `text6_1`, `BroadcastTextID6`, `lang6`, `Probability6`, `em6_0`, `em6_1`, `em6_2`, `em6_3`, `em6_4`, `em6_5`, `text7_0`, `text7_1`, `BroadcastTextID7`, `lang7`, `Probability7`, `em7_0`, `em7_1`, `em7_2`, `em7_3`, `em7_4`, `em7_5`, `VerifiedBuild`) VALUES
(60566, 'The Lich King is dead... but his shadow endures.
You led the final blow against Arthas.
You have strength but can grow stronger yet still.
Fragments of his power linger... You must stop KelThuzad.
$n, Return to the battles you thought were finished.
Face the darkness reborn. And return those once dead back
to dust. While we search for a way to end this.
How can I aid you?', '', 0, 0, 0, 1, 1, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
-- Agatha Starter Intro
DELETE FROM `npc_text` WHERE (`ID` = 60567);
INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `Probability0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`, `text1_0`, `text1_1`, `BroadcastTextID1`, `lang1`, `Probability1`, `em1_0`, `em1_1`, `em1_2`, `em1_3`, `em1_4`, `em1_5`, `text2_0`, `text2_1`, `BroadcastTextID2`, `lang2`, `Probability2`, `em2_0`, `em2_1`, `em2_2`, `em2_3`, `em2_4`, `em2_5`, `text3_0`, `text3_1`, `BroadcastTextID3`, `lang3`, `Probability3`, `em3_0`, `em3_1`, `em3_2`, `em3_3`, `em3_4`, `em3_5`, `text4_0`, `text4_1`, `BroadcastTextID4`, `lang4`, `Probability4`, `em4_0`, `em4_1`, `em4_2`, `em4_3`, `em4_4`, `em4_5`, `text5_0`, `text5_1`, `BroadcastTextID5`, `lang5`, `Probability5`, `em5_0`, `em5_1`, `em5_2`, `em5_3`, `em5_4`, `em5_5`, `text6_0`, `text6_1`, `BroadcastTextID6`, `lang6`, `Probability6`, `em6_0`, `em6_1`, `em6_2`, `em6_3`, `em6_4`, `em6_5`, `text7_0`, `text7_1`, `BroadcastTextID7`, `lang7`, `Probability7`, `em7_0`, `em7_1`, `em7_2`, `em7_3`, `em7_4`, `em7_5`, `VerifiedBuild`) VALUES
(60567, 'Kel\\Thuzad continues to tear through my domain.
He must be erased from existence.
I offer my knowledge —
ancient powers... forbidden relics...
to strengthen your kind against the unyielding shadows now pouring from my realm into yours.
Be quick, what do you need?', 'Kel\\Thuzad continues to tear through my domain.
He must be erased from existence.
I offer my knowledge —
ancient powers... forbidden relics...
to strengthen your kind against the unyielding shadows now pouring from my realm into yours.
Be quick, what do you need?', 0, 0, 0, 1, 1, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);
DELETE FROM `npc_text` WHERE (`ID` = 60568);
INSERT INTO `npc_text` (`ID`, `text0_0`, `text0_1`, `BroadcastTextID0`, `lang0`, `Probability0`, `em0_0`, `em0_1`, `em0_2`, `em0_3`, `em0_4`, `em0_5`, `text1_0`, `text1_1`, `BroadcastTextID1`, `lang1`, `Probability1`, `em1_0`, `em1_1`, `em1_2`, `em1_3`, `em1_4`, `em1_5`, `text2_0`, `text2_1`, `BroadcastTextID2`, `lang2`, `Probability2`, `em2_0`, `em2_1`, `em2_2`, `em2_3`, `em2_4`, `em2_5`, `text3_0`, `text3_1`, `BroadcastTextID3`, `lang3`, `Probability3`, `em3_0`, `em3_1`, `em3_2`, `em3_3`, `em3_4`, `em3_5`, `text4_0`, `text4_1`, `BroadcastTextID4`, `lang4`, `Probability4`, `em4_0`, `em4_1`, `em4_2`, `em4_3`, `em4_4`, `em4_5`, `text5_0`, `text5_1`, `BroadcastTextID5`, `lang5`, `Probability5`, `em5_0`, `em5_1`, `em5_2`, `em5_3`, `em5_4`, `em5_5`, `text6_0`, `text6_1`, `BroadcastTextID6`, `lang6`, `Probability6`, `em6_0`, `em6_1`, `em6_2`, `em6_3`, `em6_4`, `em6_5`, `text7_0`, `text7_1`, `BroadcastTextID7`, `lang7`, `Probability7`, `em7_0`, `em7_1`, `em7_2`, `em7_3`, `em7_4`, `em7_5`, `VerifiedBuild`) VALUES
(60568, 'You have bothered my Spirit Healer Goddess enough.
Besides, Vaeric trusts based on your deeds and I trust Vaeric.
I learned enough from Agatha to keep that face of yours upright — ancient powers... blah blah...
Just bring me some dices and fused materials and we can go from there.
', 'You have bothered my Spirit Healer Goddess enough.
Besides, Vaeric trusts based on your deeds and I trust Vaeric.
I learned enough from Agatha to keep that face of yours upright — ancient powers... blah blah...
Just bring me some dices and fused materials and we can go from there.
', 0, 0, 0, 1, 1, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL);

View File

@@ -0,0 +1,6 @@
UPDATE creature_template_npcbot_wander_nodes
SET maxlevel = 85
WHERE maxlevel = 80;
UPDATE battleground_template SET MaxLvl = 85 where MaxLvl = 80;

View File

@@ -0,0 +1,11 @@
-- Supporting Cast Environment items
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001043, 185002, 530, 0, 0, 1, 1, -1992.59, 5211.21, -44.239, 0.985043, -0, -0, -0.472849, -0.881143, 300, 0, 1, '', null, null);
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001046, 190213, 530, 0, 0, 1, 1, -1999.01, 5226.06, -44.2926, 5.86235, -0, -0, -0.20887, 0.977943, 300, 0, 1, '', null, null);
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001047, 182934, 530, 0, 0, 1, 1, -1992.11, 5207.81, -44.7864, 0.95047, -0, -0, -0.457548, -0.889185, 300, 0, 1, '', null, null);
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001050, 192935, 530, 0, 0, 1, 1, -1991.3, 5213.01, -44.0442, 1.02353, -0, -0, -0.489717, -0.871881, 300, 0, 1, '', null, null);
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001051, 194581, 530, 0, 0, 1, 1, -1993.03, 5220.23, -44.2068, 3.67347, -0, -0, -0.964847, 0.262813, 300, 0, 1, '', null, null);
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001052, 182483, 530, 0, 0, 1, 1, -1994.8, 5219.62, -44.2093, 0.71644, -0, -0, -0.350608, -0.936523, 300, 0, 1, '', null, null);
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001055, 179846, 530, 0, 0, 1, 1, -1986.62, 5222.6, -44.6557, 3.55485, -0, -0, -0.978728, 0.205163, 300, 0, 1, '', null, null);
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001057, 192935, 571, 0, 0, 1, 1, 5804.06, 639.865, 609.886, 5.84656, -0, -0, -0.216585, 0.976264, 300, 0, 1, '', null, null);
REPLACE INTO acore_world.gameobject (guid, id, map, zoneId, areaId, spawnMask, phaseMask, position_x, position_y, position_z, orientation, rotation0, rotation1, rotation2, rotation3, spawntimesecs, animprogress, state, ScriptName, VerifiedBuild, Comment) VALUES (8001059, 187082, 571, 0, 0, 1, 1, 5829.63, 674.817, 609.886, 5.36498, -0, -0, -0.443142, 0.896452, 300, 0, 1, '', null, null);

View File

@@ -0,0 +1,172 @@
-- This rebalances lower level iLevel gear
UPDATE item_template
SET
stat_value1 = CASE
WHEN stat_type1 IN (38, 45) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value1 * 0.75)
WHEN stat_type1 IN (38, 45) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value1 * 0.80)
WHEN stat_type1 IN (38, 45) AND ItemLevel > 315 AND ItemLevel <= 325 THEN FLOOR(stat_value1 * 0.90)
ELSE stat_value1
END,
stat_value2 = CASE
WHEN stat_type2 IN (38, 45) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value2 * 0.75)
WHEN stat_type2 IN (38, 45) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value2 * 0.80)
WHEN stat_type2 IN (38, 45) AND ItemLevel > 315 AND ItemLevel <= 325 THEN FLOOR(stat_value2 * 0.90)
ELSE stat_value2
END,
stat_value3 = CASE
WHEN stat_type3 IN (38, 45) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value3 * 0.75)
WHEN stat_type3 IN (38, 45) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value3 * 0.80)
WHEN stat_type3 IN (38, 45) AND ItemLevel > 315 AND ItemLevel <= 325 THEN FLOOR(stat_value3 * 0.90)
ELSE stat_value3
END,
stat_value4 = CASE
WHEN stat_type4 IN (38, 45) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value4 * 0.75)
WHEN stat_type4 IN (38, 45) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value4 * 0.80)
WHEN stat_type4 IN (38, 45) AND ItemLevel > 315 AND ItemLevel <= 325 THEN FLOOR(stat_value4 * 0.90)
ELSE stat_value4
END,
stat_value5 = CASE
WHEN stat_type5 IN (38, 45) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value5 * 0.75)
WHEN stat_type5 IN (38, 45) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value5 * 0.80)
WHEN stat_type5 IN (38, 45) AND ItemLevel > 315 AND ItemLevel <= 325 THEN FLOOR(stat_value5 * 0.90)
ELSE stat_value5
END,
stat_value6 = CASE
WHEN stat_type6 IN (38, 45) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value6 * 0.75)
WHEN stat_type6 IN (38, 45) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value6 * 0.80)
WHEN stat_type6 IN (38, 45) AND ItemLevel > 315 AND ItemLevel <= 325 THEN FLOOR(stat_value6 * 0.90)
ELSE stat_value6
END,
stat_value7 = CASE
WHEN stat_type7 IN (38, 45) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value7 * 0.75)
WHEN stat_type7 IN (38, 45) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value7 * 0.80)
WHEN stat_type7 IN (38, 45) AND ItemLevel > 315 AND ItemLevel <= 325 THEN FLOOR(stat_value7 * 0.90) ELSE stat_value7
END,
stat_value8 = CASE
WHEN stat_type8 IN (38, 45) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value8 * 0.75)
WHEN stat_type8 IN (38, 45) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value8 * 0.80)
WHEN stat_type8 IN (38, 45) AND ItemLevel > 315 AND ItemLevel <= 325 THEN FLOOR(stat_value8 * 0.90)
ELSE stat_value8
END
WHERE
entry BETWEEN 20000000 and 21000000;
-- Rebalance primary strength, agi, intellect down for lower ilvl items
UPDATE item_template
SET
stat_value1 = CASE
WHEN stat_type1 IN (3,4,5) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value1 * 0.85)
WHEN stat_type1 IN (3,4,5) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value1 * 0.90)
ELSE stat_value1
END,
stat_value2 = CASE
WHEN stat_type2 IN (3,4,5) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value2 * 0.85)
WHEN stat_type2 IN (3,4,5) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value2 * 0.90)
ELSE stat_value2
END,
stat_value3 = CASE
WHEN stat_type3 IN (3,4,5) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value3 * 0.85)
WHEN stat_type3 IN (3,4,5) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value3 * 0.90)
ELSE stat_value3
END,
stat_value4 = CASE
WHEN stat_type4 IN (3,4,5) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value4 * 0.85)
WHEN stat_type4 IN (3,4,5) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value4 * 0.90)
ELSE stat_value4
END,
stat_value5 = CASE
WHEN stat_type5 IN (3,4,5) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value5 * 0.85)
WHEN stat_type5 IN (3,4,5) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value5 * 0.90)
ELSE stat_value5
END,
stat_value6 = CASE
WHEN stat_type6 IN (3,4,5) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value6 * 0.85)
WHEN stat_type6 IN (3,4,5) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value6 * 0.90)
ELSE stat_value6
END,
stat_value7 = CASE
WHEN stat_type7 IN (3,4,5) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value7 * 0.85)
WHEN stat_type7 IN (3,4,5) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value7 * 0.90)
ELSE stat_value7
END,
stat_value8 = CASE
WHEN stat_type8 IN (3,4,5) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value8 * 0.85)
WHEN stat_type8 IN (3,4,5) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value8 * 0.90)
ELSE stat_value8
END
WHERE
entry BETWEEN 20000000 and 21000000;
-- Nerf hit / spell hit crit rating and others items 300-315 by 15% and 10%
UPDATE item_template
SET
stat_value1 = CASE
WHEN (stat_type1 BETWEEN 16 AND 37 OR stat_type1 = 44) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value1 * 0.85)
WHEN (stat_type1 BETWEEN 16 AND 37 OR stat_type1 = 44) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value1 * 0.90)
ELSE stat_value1
END,
stat_value2 = CASE
WHEN (stat_type2 BETWEEN 16 AND 37 OR stat_type2 = 44) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value2 * 0.85)
WHEN (stat_type2 BETWEEN 16 AND 37 OR stat_type2 = 44) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value2 * 0.90)
ELSE stat_value2
END,
stat_value3 = CASE
WHEN (stat_type3 BETWEEN 16 AND 37 OR stat_type3 = 44) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value3 * 0.85)
WHEN (stat_type3 BETWEEN 16 AND 37 OR stat_type3 = 44) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value3 * 0.90)
ELSE stat_value3
END,
stat_value4 = CASE
WHEN (stat_type4 BETWEEN 16 AND 37 OR stat_type4 = 44) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value4 * 0.85)
WHEN (stat_type4 BETWEEN 16 AND 37 OR stat_type4 = 44) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value4 * 0.90)
ELSE stat_value4
END,
stat_value5 = CASE
WHEN (stat_type5 BETWEEN 16 AND 37 OR stat_type5 = 44) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value5 * 0.85)
WHEN (stat_type5 BETWEEN 16 AND 37 OR stat_type5 = 44) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value5 * 0.90)
ELSE stat_value5
END,
stat_value6 = CASE
WHEN (stat_type6 BETWEEN 16 AND 37 OR stat_type6 = 44) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value6 * 0.85)
WHEN (stat_type6 BETWEEN 16 AND 37 OR stat_type6 = 44) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value6 * 0.90)
ELSE stat_value6
END,
stat_value7 = CASE
WHEN (stat_type7 BETWEEN 16 AND 37 OR stat_type7 = 44) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value7 * 0.85)
WHEN (stat_type7 BETWEEN 16 AND 37 OR stat_type7 = 44) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value7 * 0.90)
ELSE stat_value7
END,
stat_value8 = CASE
WHEN (stat_type8 BETWEEN 16 AND 37 OR stat_type8 = 44) AND ItemLevel BETWEEN 300 AND 305 THEN FLOOR(stat_value8 * 0.85)
WHEN (stat_type8 BETWEEN 16 AND 37 OR stat_type8 = 44) AND ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(stat_value8 * 0.90)
ELSE stat_value8
END
WHERE
entry BETWEEN 20000000 and 21000000;
-- reduce damage on lower level items
UPDATE item_template
SET
dmg_min1 = CASE
WHEN ItemLevel BETWEEN 300 AND 305 THEN FLOOR(dmg_min1 * 0.85)
WHEN ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(dmg_min1 * 0.90)
ELSE dmg_min1
END,
dmg_max1 = CASE
WHEN ItemLevel BETWEEN 300 AND 305 THEN FLOOR(dmg_max1 * 0.85)
WHEN ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(dmg_max1 * 0.90)
ELSE dmg_max1
END,
dmg_min2 = CASE
WHEN ItemLevel BETWEEN 300 AND 305 THEN FLOOR(dmg_min2 * 0.85)
WHEN ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(dmg_min2 * 0.90)
ELSE dmg_min2
END,
dmg_max2 = CASE
WHEN ItemLevel BETWEEN 300 AND 305 THEN FLOOR(dmg_max2 * 0.85)
WHEN ItemLevel > 305 AND ItemLevel <= 315 THEN FLOOR(dmg_max2 * 0.90)
ELSE dmg_max2
END
WHERE
entry BETWEEN 20000000 and 21000000;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,67 @@
-- Tier 1 and 2 Vendors
DELETE FROM `creature_template` WHERE (`entry` = 9500800);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500800, 0, 0, 0, 0, 0, 'Champion Miluria', 'Mythic I Weapons and Gear', '', 0, 80, 80, 2, 2027, 128, 1, 1.14286, 1, 1, 20, 1, 0, 0, 1, 2000, 2000, 1, 1, 8, 768, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 10314);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500800);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500800, 0, 29832, 1, 1, 10314);
DELETE FROM `creature_equip_template` WHERE (`CreatureID` = 9500800);
INSERT INTO `creature_equip_template` (`CreatureID`, `ID`, `ItemID1`, `ItemID2`, `ItemID3`, `VerifiedBuild`) VALUES
(9500800, 1, 29405, 6618, 0, 18019);
DELETE FROM `creature_template` WHERE (`entry` = 9500801);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500801, 0, 0, 0, 0, 0, 'Paldesse', 'Mythic I Cloth Armor', '', 0, 80, 80, 0, 2007, 4224, 1, 1.14286, 1, 1, 20, 1, 0, 0, 1, 2000, 2000, 1, 1, 8, 512, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 12340);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500801);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500801, 0, 25594, 1, 1, 12340);
DELETE FROM `creature_template` WHERE (`entry` = 9500802);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500802, 0, 0, 0, 0, 0, 'Griselda Hunderland', 'Mythic I Plate Armor', '', 0, 80, 80, 0, 2007, 4224, 1, 1.14286, 1, 1, 20, 1, 0, 0, 1, 2000, 2000, 1, 1, 1, 512, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'SmartAI', 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 12340);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500802);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500802, 0, 25881, 1, 1, 12340);
DELETE FROM `creature_template` WHERE (`entry` = 9500803);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500803, 0, 0, 0, 0, 0, 'Valerie Langrom', 'Mythic I Leather Armor', '', 0, 80, 80, 2, 2007, 4224, 1, 1.14286, 1, 1, 20, 1, 0, 0, 1, 2000, 2000, 1, 1, 1, 0, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 12340);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500803);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500803, 0, 25878, 1, 1, 12340);
DELETE FROM `creature_template` WHERE (`entry` = 9500804);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500804, 0, 0, 0, 0, 0, 'Bragund Brightlink', 'Mythic I Mail Armor', '', 0, 80, 80, 2, 2007, 4224, 1, 1.14286, 1, 1, 20, 1, 0, 0, 1, 2000, 2000, 1, 1, 1, 0, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'SmartAI', 0, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 12340);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500804);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500804, 0, 26321, 1, 1, 12340);
-- Tiers 3 and 4
DELETE FROM `creature_template` WHERE (`entry` = 9500805);
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `exp`, `faction`, `npcflag`, `speed_walk`, `speed_run`, `speed_swim`, `speed_flight`, `detection_range`, `scale`, `rank`, `dmgschool`, `DamageModifier`, `BaseAttackTime`, `RangeAttackTime`, `BaseVariance`, `RangeVariance`, `unit_class`, `unit_flags`, `unit_flags2`, `dynamicflags`, `family`, `trainer_type`, `trainer_spell`, `trainer_class`, `trainer_race`, `type`, `type_flags`, `lootid`, `pickpocketloot`, `skinloot`, `PetSpellDataId`, `VehicleId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `HoverHeight`, `HealthModifier`, `ManaModifier`, `ArmorModifier`, `ExperienceModifier`, `RacialLeader`, `movementId`, `RegenHealth`, `mechanic_immune_mask`, `spell_school_immune_mask`, `flags_extra`, `ScriptName`, `VerifiedBuild`) VALUES
(9500805, 0, 0, 0, 0, 0, 'Captain Dirgehammer', 'Mythic II Weapons and Gear ', NULL, 0, 65, 65, 1, 1078, 4224, 1, 1.14286, 1, 1, 18, 1, 0, 0, 1, 2000, 2000, 1, 1, 1, 4864, 2048, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 1, 2, 1, 1, 1, 0, 0, 1, 0, 0, 0, '', 12340);
DELETE FROM `creature_template_model` WHERE (`CreatureID` = 9500805);
INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES
(9500805, 0, 12917, 1, 1, 12340);
-- Tier 5
-- Spawns
REPLACE INTO acore_world.creature (guid, id1, id2, id3, map, zoneId, areaId, spawnMask, phaseMask, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, dynamicflags, ScriptName, VerifiedBuild, CreateObject, Comment) VALUES (9001025, 9500800, 0, 0, 571, 0, 0, 1, 1, 1, 5738.66, 741.002, 641.74, 4.1062, 300, 0, 0, 10080, 8814, 0, 0, 0, 0, '', null, 0, null);
REPLACE INTO acore_world.creature (guid, id1, id2, id3, map, zoneId, areaId, spawnMask, phaseMask, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, dynamicflags, ScriptName, VerifiedBuild, CreateObject, Comment) VALUES (9001026, 9500801, 0, 0, 571, 0, 0, 1, 1, 0, 5736.61, 742.711, 641.75, 4.04965, 300, 0, 0, 3739, 8814, 0, 0, 0, 0, '', null, 0, null);
REPLACE INTO acore_world.creature (guid, id1, id2, id3, map, zoneId, areaId, spawnMask, phaseMask, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, dynamicflags, ScriptName, VerifiedBuild, CreateObject, Comment) VALUES (9001027, 9500802, 0, 0, 571, 0, 0, 1, 1, 0, 5732.59, 746.182, 641.762, 4.01431, 300, 0, 0, 5342, 0, 0, 0, 0, 0, '', null, 0, null);
REPLACE INTO acore_world.creature (guid, id1, id2, id3, map, zoneId, areaId, spawnMask, phaseMask, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, dynamicflags, ScriptName, VerifiedBuild, CreateObject, Comment) VALUES (9001028, 9500803, 0, 0, 571, 0, 0, 1, 1, 0, 5730.76, 747.711, 641.761, 4.16746, 300, 0, 0, 12600, 0, 0, 0, 0, 0, '', null, 0, null);
REPLACE INTO acore_world.creature (guid, id1, id2, id3, map, zoneId, areaId, spawnMask, phaseMask, equipment_id, position_x, position_y, position_z, orientation, spawntimesecs, wander_distance, currentwaypoint, curhealth, curmana, MovementType, npcflag, unit_flags, dynamicflags, ScriptName, VerifiedBuild, CreateObject, Comment) VALUES (9001029, 9500804, 0, 0, 571, 0, 0, 1, 1, 0, 5725.58, 750.971, 641.768, 4.48476, 300, 0, 0, 12600, 0, 0, 0, 0, 0, '', null, 0, null);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,503 @@
-- SQL Script to Insert 50 Ranks for Each Stat
INSERT INTO mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemCost1, itemEntry2, itemCost2, itemEntry3, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES
(1, 0, 911005, 5, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 0, 911005, 8, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 0, 911005, 10, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 0, 911005, 13, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 0, 911005, 15, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 0, 911005, 18, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 0, 911005, 20, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 0, 911005, 23, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 0, 911005, 25, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 0, 911005, 28, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 0, 911005, 25, 911006, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 0, 911005, 27, 911006, 2, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 0, 911005, 28, 911006, 4, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 0, 911005, 29, 911006, 6, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 0, 911005, 30, 911006, 8, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 0, 911005, 32, 911006, 10, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 0, 911005, 33, 911006, 12, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 0, 911005, 34, 911006, 14, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 0, 911005, 35, 911006, 16, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 0, 911005, 37, 911006, 18, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 0, 911005, 38, 911006, 20, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 0, 911005, 39, 911006, 22, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 0, 911005, 40, 911006, 24, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 0, 911005, 42, 911006, 26, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 0, 911005, 43, 911006, 28, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 0, 911005, 44, 911006, 30, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 0, 911005, 45, 911006, 32, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 0, 911005, 47, 911006, 34, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 0, 911005, 48, 911006, 36, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 0, 911005, 50, 911006, 38, 911002, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 0, 911005, 51, 911006, 40, 911002, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 0, 911005, 52, 911006, 42, 911002, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 0, 911005, 53, 911006, 44, 911002, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 0, 911005, 54, 911006, 46, 911002, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 0, 911005, 55, 911006, 48, 911002, 15, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 0, 911005, 56, 911006, 50, 911002, 15, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 0, 911005, 57, 911006, 52, 911002, 15, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 0, 911005, 58, 911006, 54, 911002, 15, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 0, 911005, 59, 911006, 56, 911002, 15, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 0, 911005, 59, 911006, 58, 911002, 15, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 0, 911005, 60, 911006, 60, 911002, 15, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 0, 911005, 61, 911006, 62, 911002, 15, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 0, 911005, 62, 911006, 64, 911002, 15, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 0, 911005, 63, 911006, 66, 911002, 15, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 0, 911005, 64, 911006, 68, 911002, 15, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 0, 911005, 65, 911006, 70, 911002, 15, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 0, 911005, 66, 911006, 72, 911002, 15, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 0, 911005, 67, 911006, 74, 911002, 15, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 0, 911005, 68, 911006, 76, 911002, 15, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 0, 911005, 68, 911006, 78, 911002, 15, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 1, 911009, 5, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 1, 911009, 8, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 1, 911009, 10, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 1, 911009, 13, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 1, 911009, 15, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 1, 911009, 18, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 1, 911009, 20, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 1, 911009, 23, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 1, 911009, 25, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 1, 911009, 28, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 1, 911009, 25, 911010, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 1, 911009, 27, 911010, 2, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 1, 911009, 28, 911010, 4, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 1, 911009, 29, 911010, 6, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 1, 911009, 30, 911010, 8, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 1, 911009, 32, 911010, 10, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 1, 911009, 33, 911010, 12, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 1, 911009, 34, 911010, 14, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 1, 911009, 35, 911010, 16, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 1, 911009, 37, 911010, 18, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 1, 911009, 38, 911010, 20, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 1, 911009, 39, 911010, 22, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 1, 911009, 40, 911010, 24, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 1, 911009, 42, 911010, 26, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 1, 911009, 43, 911010, 28, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 1, 911009, 44, 911010, 30, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 1, 911009, 45, 911010, 32, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 1, 911009, 47, 911010, 34, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 1, 911009, 48, 911010, 36, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 1, 911009, 50, 911010, 38, 911002, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 1, 911009, 51, 911010, 40, 911002, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 1, 911009, 52, 911010, 42, 911002, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 1, 911009, 53, 911010, 44, 911002, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 1, 911009, 54, 911010, 46, 911002, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 1, 911009, 55, 911010, 48, 911002, 15, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 1, 911009, 56, 911010, 50, 911002, 15, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 1, 911009, 57, 911010, 52, 911002, 15, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 1, 911009, 58, 911010, 54, 911002, 15, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 1, 911009, 59, 911010, 56, 911002, 15, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 1, 911009, 59, 911010, 58, 911002, 15, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 1, 911009, 60, 911010, 60, 911002, 15, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 1, 911009, 61, 911010, 62, 911002, 15, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 1, 911009, 62, 911010, 64, 911002, 15, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 1, 911009, 63, 911010, 66, 911002, 15, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 1, 911009, 64, 911010, 68, 911002, 15, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 1, 911009, 65, 911010, 70, 911002, 15, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 1, 911009, 66, 911010, 72, 911002, 15, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 1, 911009, 67, 911010, 74, 911002, 15, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 1, 911009, 68, 911010, 76, 911002, 15, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 1, 911009, 68, 911010, 78, 911002, 15, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 2, 911003, 5, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 2, 911003, 8, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 2, 911003, 10, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 2, 911003, 13, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 2, 911003, 15, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 2, 911003, 18, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 2, 911003, 20, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 2, 911003, 23, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 2, 911003, 25, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 2, 911003, 28, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 2, 911003, 25, 911004, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 2, 911003, 27, 911004, 2, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 2, 911003, 28, 911004, 4, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 2, 911003, 29, 911004, 6, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 2, 911003, 30, 911004, 8, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 2, 911003, 32, 911004, 10, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 2, 911003, 33, 911004, 12, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 2, 911003, 34, 911004, 14, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 2, 911003, 35, 911004, 16, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 2, 911003, 37, 911004, 18, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 2, 911003, 38, 911004, 20, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 2, 911003, 39, 911004, 22, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 2, 911003, 40, 911004, 24, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 2, 911003, 42, 911004, 26, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 2, 911003, 43, 911004, 28, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 2, 911003, 44, 911004, 30, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 2, 911003, 45, 911004, 32, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 2, 911003, 47, 911004, 34, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 2, 911003, 48, 911004, 36, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 2, 911003, 50, 911004, 38, 911002, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 2, 911003, 51, 911004, 40, 911002, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 2, 911003, 52, 911004, 42, 911002, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 2, 911003, 53, 911004, 44, 911002, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 2, 911003, 54, 911004, 46, 911002, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 2, 911003, 55, 911004, 48, 911002, 15, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 2, 911003, 56, 911004, 50, 911002, 15, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 2, 911003, 57, 911004, 52, 911002, 15, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 2, 911003, 58, 911004, 54, 911002, 15, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 2, 911003, 59, 911004, 56, 911002, 15, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 2, 911003, 59, 911004, 58, 911002, 15, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 2, 911003, 60, 911004, 60, 911002, 15, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 2, 911003, 61, 911004, 62, 911002, 15, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 2, 911003, 62, 911004, 64, 911002, 15, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 2, 911003, 63, 911004, 66, 911002, 15, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 2, 911003, 64, 911004, 68, 911002, 15, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 2, 911003, 65, 911004, 70, 911002, 15, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 2, 911003, 66, 911004, 72, 911002, 15, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 2, 911003, 67, 911004, 74, 911002, 15, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 2, 911003, 68, 911004, 76, 911002, 15, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 2, 911003, 68, 911004, 78, 911002, 15, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 3, 911007, 5, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 3, 911007, 8, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 3, 911007, 10, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 3, 911007, 13, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 3, 911007, 15, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 3, 911007, 18, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 3, 911007, 20, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 3, 911007, 23, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 3, 911007, 25, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 3, 911007, 28, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 3, 911007, 25, 911008, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 3, 911007, 27, 911008, 2, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 3, 911007, 28, 911008, 4, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 3, 911007, 29, 911008, 6, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 3, 911007, 30, 911008, 8, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 3, 911007, 32, 911008, 10, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 3, 911007, 33, 911008, 12, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 3, 911007, 34, 911008, 14, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 3, 911007, 35, 911008, 16, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 3, 911007, 37, 911008, 18, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 3, 911007, 38, 911008, 20, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 3, 911007, 39, 911008, 22, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 3, 911007, 40, 911008, 24, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 3, 911007, 42, 911008, 26, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 3, 911007, 43, 911008, 28, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 3, 911007, 44, 911008, 30, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 3, 911007, 45, 911008, 32, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 3, 911007, 47, 911008, 34, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 3, 911007, 48, 911008, 36, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 3, 911007, 50, 911008, 38, 911002, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 3, 911007, 51, 911008, 40, 911002, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 3, 911007, 52, 911008, 42, 911002, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 3, 911007, 53, 911008, 44, 911002, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 3, 911007, 54, 911008, 46, 911002, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 3, 911007, 55, 911008, 48, 911002, 15, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 3, 911007, 56, 911008, 50, 911002, 15, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 3, 911007, 57, 911008, 52, 911002, 15, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 3, 911007, 58, 911008, 54, 911002, 15, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 3, 911007, 59, 911008, 56, 911002, 15, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 3, 911007, 59, 911008, 58, 911002, 15, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 3, 911007, 60, 911008, 60, 911002, 15, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 3, 911007, 61, 911008, 62, 911002, 15, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 3, 911007, 62, 911008, 64, 911002, 15, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 3, 911007, 63, 911008, 66, 911002, 15, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 3, 911007, 64, 911008, 68, 911002, 15, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 3, 911007, 65, 911008, 70, 911002, 15, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 3, 911007, 66, 911008, 72, 911002, 15, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 3, 911007, 67, 911008, 74, 911002, 15, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 3, 911007, 68, 911008, 76, 911002, 15, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 3, 911007, 68, 911008, 78, 911002, 15, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 4, 911011, 5, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 20, 50, 75),
(2, 4, 911011, 8, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 23, 53, 78),
(3, 4, 911011, 10, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 26, 56, 81),
(4, 4, 911011, 13, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 29, 59, 84),
(5, 4, 911011, 15, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 32, 62, 87),
(6, 4, 911011, 18, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 35, 65, 90),
(7, 4, 911011, 20, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 38, 68, 93),
(8, 4, 911011, 23, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 41, 71, 96),
(9, 4, 911011, 25, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 44, 74, 99),
(10, 4, 911011, 28, 0, 0, 0, 0, 1, 10, 5, 10, 8, 11, 47, 77, 102),
(11, 4, 911011, 25, 911012, 0, 0, 0, 3, 12, 7, 12, 12, 15, 50, 80, 105),
(12, 4, 911011, 27, 911012, 2, 0, 0, 3, 12, 7, 12, 12, 15, 53, 83, 108),
(13, 4, 911011, 28, 911012, 4, 0, 0, 3, 12, 7, 12, 12, 15, 56, 86, 111),
(14, 4, 911011, 29, 911012, 6, 0, 0, 3, 12, 7, 12, 12, 15, 59, 89, 114),
(15, 4, 911011, 30, 911012, 8, 0, 0, 3, 12, 7, 12, 12, 15, 62, 92, 117),
(16, 4, 911011, 32, 911012, 10, 0, 0, 3, 12, 7, 12, 12, 15, 65, 95, 120),
(17, 4, 911011, 33, 911012, 12, 0, 0, 3, 12, 7, 12, 12, 15, 68, 98, 123),
(18, 4, 911011, 34, 911012, 14, 0, 0, 3, 12, 7, 12, 12, 15, 71, 101, 126),
(19, 4, 911011, 35, 911012, 16, 0, 0, 3, 12, 7, 12, 12, 15, 74, 104, 129),
(20, 4, 911011, 37, 911012, 18, 0, 0, 3, 12, 7, 12, 12, 15, 77, 107, 132),
(21, 4, 911011, 38, 911012, 20, 0, 0, 5, 14, 9, 14, 16, 19, 80, 110, 135),
(22, 4, 911011, 39, 911012, 22, 0, 0, 5, 14, 9, 14, 16, 19, 83, 113, 138),
(23, 4, 911011, 40, 911012, 24, 0, 0, 5, 14, 9, 14, 16, 19, 86, 116, 141),
(24, 4, 911011, 42, 911012, 26, 0, 0, 5, 14, 9, 14, 16, 19, 89, 119, 144),
(25, 4, 911011, 43, 911012, 28, 0, 0, 5, 14, 9, 14, 16, 19, 92, 122, 147),
(26, 4, 911011, 44, 911012, 30, 0, 0, 5, 14, 9, 14, 16, 19, 95, 125, 150),
(27, 4, 911011, 45, 911012, 32, 0, 0, 5, 14, 9, 14, 16, 19, 98, 128, 153),
(28, 4, 911011, 47, 911012, 34, 0, 0, 5, 14, 9, 14, 16, 19, 101, 131, 156),
(29, 4, 911011, 48, 911012, 36, 0, 0, 5, 14, 9, 14, 16, 19, 104, 134, 159),
(30, 4, 911011, 50, 911012, 38, 911002, 3, 5, 14, 9, 14, 16, 19, 107, 137, 162),
(31, 4, 911011, 51, 911012, 40, 911002, 6, 7, 16, 11, 16, 20, 23, 110, 140, 165),
(32, 4, 911011, 52, 911012, 42, 911002, 9, 7, 16, 11, 16, 20, 23, 113, 143, 168),
(33, 4, 911011, 53, 911012, 44, 911002, 12, 7, 16, 11, 16, 20, 23, 116, 146, 171),
(34, 4, 911011, 54, 911012, 46, 911002, 15, 7, 16, 11, 16, 20, 23, 119, 149, 174),
(35, 4, 911011, 55, 911012, 48, 911002, 15, 7, 16, 11, 16, 20, 23, 122, 152, 177),
(36, 4, 911011, 56, 911012, 50, 911002, 15, 7, 16, 11, 16, 20, 23, 125, 155, 180),
(37, 4, 911011, 57, 911012, 52, 911002, 15, 7, 16, 11, 16, 20, 23, 128, 158, 183),
(38, 4, 911011, 58, 911012, 54, 911002, 15, 7, 16, 11, 16, 20, 23, 131, 161, 186),
(39, 4, 911011, 59, 911012, 56, 911002, 15, 7, 16, 11, 16, 20, 23, 134, 164, 189),
(40, 4, 911011, 59, 911012, 58, 911002, 15, 7, 16, 11, 16, 20, 23, 137, 167, 192),
(41, 4, 911011, 60, 911012, 60, 911002, 15, 9, 18, 13, 18, 24, 27, 140, 170, 195),
(42, 4, 911011, 61, 911012, 62, 911002, 15, 9, 18, 13, 18, 24, 27, 143, 173, 198),
(43, 4, 911011, 62, 911012, 64, 911002, 15, 9, 18, 13, 18, 24, 27, 146, 176, 201),
(44, 4, 911011, 63, 911012, 66, 911002, 15, 9, 18, 13, 18, 24, 27, 149, 179, 204),
(45, 4, 911011, 64, 911012, 68, 911002, 15, 9, 18, 13, 18, 24, 27, 152, 182, 207),
(46, 4, 911011, 65, 911012, 70, 911002, 15, 9, 18, 13, 18, 24, 27, 155, 185, 210),
(47, 4, 911011, 66, 911012, 72, 911002, 15, 9, 18, 13, 18, 24, 27, 158, 188, 213),
(48, 4, 911011, 67, 911012, 74, 911002, 15, 9, 18, 13, 18, 24, 27, 161, 191, 216),
(49, 4, 911011, 68, 911012, 76, 911002, 15, 9, 18, 13, 18, 24, 27, 164, 194, 219),
(50, 4, 911011, 68, 911012, 78, 911002, 15, 9, 18, 13, 18, 24, 27, 167, 197, 222),
(1, 5, 911019, 4, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 20, 50, 75),
(2, 5, 911019, 6, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 23, 53, 78),
(3, 5, 911019, 8, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 26, 56, 81),
(4, 5, 911019, 9, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 29, 59, 84),
(5, 5, 911019, 11, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 32, 62, 87),
(6, 5, 911019, 13, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 35, 65, 90),
(7, 5, 911019, 15, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 38, 68, 93),
(8, 5, 911019, 16, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 41, 71, 96),
(9, 5, 911019, 18, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 44, 74, 99),
(10, 5, 911019, 20, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 47, 77, 102),
(11, 5, 911019, 18, 911020, 0, 0, 0, 5, 9, 7, 9, 12, 14, 50, 80, 105),
(12, 5, 911019, 19, 911020, 2, 0, 0, 5, 9, 7, 9, 12, 14, 53, 83, 108),
(13, 5, 911019, 20, 911020, 4, 0, 0, 5, 9, 7, 9, 12, 14, 56, 86, 111),
(14, 5, 911019, 22, 911020, 6, 0, 0, 5, 9, 7, 9, 12, 14, 59, 89, 114),
(15, 5, 911019, 23, 911020, 8, 0, 0, 5, 9, 7, 9, 12, 14, 62, 92, 117),
(16, 5, 911019, 24, 911020, 10, 0, 0, 7, 11, 9, 11, 16, 18, 65, 95, 120),
(17, 5, 911019, 25, 911020, 12, 0, 0, 7, 11, 9, 11, 16, 18, 68, 98, 123),
(18, 5, 911019, 27, 911020, 14, 0, 0, 7, 11, 9, 11, 16, 18, 71, 101, 126),
(19, 5, 911019, 28, 911020, 16, 0, 0, 7, 11, 9, 11, 16, 18, 74, 104, 129),
(20, 5, 911019, 29, 911020, 18, 0, 0, 7, 11, 9, 11, 16, 18, 77, 107, 132),
(21, 5, 911019, 30, 911020, 20, 0, 0, 9, 13, 11, 13, 20, 22, 80, 110, 135),
(22, 5, 911019, 32, 911020, 22, 0, 0, 9, 13, 11, 13, 20, 22, 83, 113, 138),
(23, 5, 911019, 33, 911020, 24, 0, 0, 9, 13, 11, 13, 20, 22, 86, 116, 141),
(24, 5, 911019, 34, 911020, 26, 0, 0, 9, 13, 11, 13, 20, 22, 89, 119, 144),
(25, 5, 911019, 35, 911020, 28, 0, 0, 9, 13, 11, 13, 20, 22, 92, 122, 147),
(26, 5, 911019, 37, 911020, 30, 0, 0, 11, 15, 13, 15, 24, 26, 95, 125, 150),
(27, 5, 911019, 38, 911020, 32, 0, 0, 11, 15, 13, 15, 24, 26, 98, 128, 153),
(28, 5, 911019, 39, 911020, 34, 0, 0, 11, 15, 13, 15, 24, 26, 101, 131, 156),
(29, 5, 911019, 40, 911020, 36, 0, 0, 11, 15, 13, 15, 24, 26, 104, 134, 159),
(30, 5, 911019, 35, 911020, 38, 911002, 3, 11, 15, 13, 15, 24, 26, 107, 137, 162),
(31, 5, 911019, 36, 911020, 40, 911002, 6, 13, 17, 15, 17, 28, 30, 110, 140, 165),
(32, 5, 911019, 37, 911020, 42, 911002, 9, 13, 17, 15, 17, 28, 30, 113, 143, 168),
(33, 5, 911019, 38, 911020, 44, 911002, 12, 13, 17, 15, 17, 28, 30, 116, 146, 171),
(34, 5, 911019, 39, 911020, 46, 911002, 15, 13, 17, 15, 17, 28, 30, 119, 149, 174),
(35, 5, 911019, 40, 911020, 48, 911002, 18, 13, 17, 15, 17, 28, 30, 122, 152, 177),
(36, 5, 911019, 41, 911020, 50, 911002, 21, 15, 19, 17, 19, 32, 34, 125, 155, 180),
(37, 5, 911019, 42, 911020, 52, 911002, 24, 15, 19, 17, 19, 32, 34, 128, 158, 183),
(38, 5, 911019, 43, 911020, 54, 911002, 27, 15, 19, 17, 19, 32, 34, 131, 161, 186),
(39, 5, 911019, 44, 911020, 56, 911002, 30, 15, 19, 17, 19, 32, 34, 134, 164, 189),
(40, 5, 911019, 44, 911020, 58, 911002, 33, 15, 19, 17, 19, 32, 34, 137, 167, 192),
(41, 5, 911019, 45, 911020, 60, 911002, 36, 17, 21, 19, 21, 36, 38, 140, 170, 195),
(42, 5, 911019, 46, 911020, 62, 911002, 39, 17, 21, 19, 21, 36, 38, 143, 173, 198),
(43, 5, 911019, 47, 911020, 64, 911002, 42, 17, 21, 19, 21, 36, 38, 146, 176, 201),
(44, 5, 911019, 48, 911020, 66, 911002, 45, 17, 21, 19, 21, 36, 38, 149, 179, 204),
(45, 5, 911019, 49, 911020, 68, 911002, 48, 17, 21, 19, 21, 36, 38, 152, 182, 207),
(46, 5, 911019, 50, 911020, 70, 911002, 51, 19, 23, 21, 23, 40, 42, 155, 185, 210),
(47, 5, 911019, 51, 911020, 72, 911002, 54, 19, 23, 21, 23, 40, 42, 158, 188, 213),
(48, 5, 911019, 52, 911020, 74, 911002, 57, 19, 23, 21, 23, 40, 42, 161, 191, 216),
(49, 5, 911019, 53, 911020, 76, 911002, 60, 19, 23, 21, 23, 40, 42, 164, 194, 219),
(50, 5, 911019, 53, 911020, 78, 911002, 63, 19, 23, 21, 23, 40, 42, 167, 197, 222)
(1, 6, 911017, 4, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 20, 50, 75),
(2, 6, 911017, 6, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 23, 53, 78),
(3, 6, 911017, 8, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 26, 56, 81),
(4, 6, 911017, 9, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 29, 59, 84),
(5, 6, 911017, 11, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 32, 62, 87),
(6, 6, 911017, 13, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 35, 65, 90),
(7, 6, 911017, 15, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 38, 68, 93),
(8, 6, 911017, 16, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 41, 71, 96),
(9, 6, 911017, 18, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 44, 74, 99),
(10, 6, 911017, 20, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 47, 77, 102),
(11, 6, 911017, 18, 911018, 0, 0, 0, 5, 9, 7, 9, 12, 14, 50, 80, 105),
(12, 6, 911017, 19, 911018, 2, 0, 0, 5, 9, 7, 9, 12, 14, 53, 83, 108),
(13, 6, 911017, 20, 911018, 4, 0, 0, 5, 9, 7, 9, 12, 14, 56, 86, 111),
(14, 6, 911017, 22, 911018, 6, 0, 0, 5, 9, 7, 9, 12, 14, 59, 89, 114),
(15, 6, 911017, 23, 911018, 8, 0, 0, 5, 9, 7, 9, 12, 14, 62, 92, 117),
(16, 6, 911017, 24, 911018, 10, 0, 0, 7, 11, 9, 11, 16, 18, 65, 95, 120),
(17, 6, 911017, 25, 911018, 12, 0, 0, 7, 11, 9, 11, 16, 18, 68, 98, 123),
(18, 6, 911017, 27, 911018, 14, 0, 0, 7, 11, 9, 11, 16, 18, 71, 101, 126),
(19, 6, 911017, 28, 911018, 16, 0, 0, 7, 11, 9, 11, 16, 18, 74, 104, 129),
(20, 6, 911017, 29, 911018, 18, 0, 0, 7, 11, 9, 11, 16, 18, 77, 107, 132),
(21, 6, 911017, 30, 911018, 20, 0, 0, 9, 13, 11, 13, 20, 22, 80, 110, 135),
(22, 6, 911017, 32, 911018, 22, 0, 0, 9, 13, 11, 13, 20, 22, 83, 113, 138),
(23, 6, 911017, 33, 911018, 24, 0, 0, 9, 13, 11, 13, 20, 22, 86, 116, 141),
(24, 6, 911017, 34, 911018, 26, 0, 0, 9, 13, 11, 13, 20, 22, 89, 119, 144),
(25, 6, 911017, 35, 911018, 28, 0, 0, 9, 13, 11, 13, 20, 22, 92, 122, 147),
(26, 6, 911017, 37, 911018, 30, 0, 0, 11, 15, 13, 15, 24, 26, 95, 125, 150),
(27, 6, 911017, 38, 911018, 32, 0, 0, 11, 15, 13, 15, 24, 26, 98, 128, 153),
(28, 6, 911017, 39, 911018, 34, 0, 0, 11, 15, 13, 15, 24, 26, 101, 131, 156),
(29, 6, 911017, 40, 911018, 36, 0, 0, 11, 15, 13, 15, 24, 26, 104, 134, 159),
(30, 6, 911017, 35, 911018, 38, 911002, 3, 11, 15, 13, 15, 24, 26, 107, 137, 162),
(31, 6, 911017, 36, 911018, 40, 911002, 6, 13, 17, 15, 17, 28, 30, 110, 140, 165),
(32, 6, 911017, 37, 911018, 42, 911002, 9, 13, 17, 15, 17, 28, 30, 113, 143, 168),
(33, 6, 911017, 38, 911018, 44, 911002, 12, 13, 17, 15, 17, 28, 30, 116, 146, 171),
(34, 6, 911017, 39, 911018, 46, 911002, 15, 13, 17, 15, 17, 28, 30, 119, 149, 174),
(35, 6, 911017, 40, 911018, 48, 911002, 18, 13, 17, 15, 17, 28, 30, 122, 152, 177),
(36, 6, 911017, 41, 911018, 50, 911002, 21, 15, 19, 17, 19, 32, 34, 125, 155, 180),
(37, 6, 911017, 42, 911018, 52, 911002, 24, 15, 19, 17, 19, 32, 34, 128, 158, 183),
(38, 6, 911017, 43, 911018, 54, 911002, 27, 15, 19, 17, 19, 32, 34, 131, 161, 186),
(39, 6, 911017, 44, 911018, 56, 911002, 30, 15, 19, 17, 19, 32, 34, 134, 164, 189),
(40, 6, 911017, 44, 911018, 58, 911002, 33, 15, 19, 17, 19, 32, 34, 137, 167, 192),
(41, 6, 911017, 45, 911018, 60, 911002, 36, 17, 21, 19, 21, 36, 38, 140, 170, 195),
(42, 6, 911017, 46, 911018, 62, 911002, 39, 17, 21, 19, 21, 36, 38, 143, 173, 198),
(43, 6, 911017, 47, 911018, 64, 911002, 42, 17, 21, 19, 21, 36, 38, 146, 176, 201),
(44, 6, 911017, 48, 911018, 66, 911002, 45, 17, 21, 19, 21, 36, 38, 149, 179, 204),
(45, 6, 911017, 49, 911018, 68, 911002, 48, 17, 21, 19, 21, 36, 38, 152, 182, 207),
(46, 6, 911017, 50, 911018, 70, 911002, 51, 19, 23, 21, 23, 40, 42, 155, 185, 210),
(47, 6, 911017, 51, 911018, 72, 911002, 54, 19, 23, 21, 23, 40, 42, 158, 188, 213),
(48, 6, 911017, 52, 911018, 74, 911002, 57, 19, 23, 21, 23, 40, 42, 161, 191, 216),
(49, 6, 911017, 53, 911018, 76, 911002, 60, 19, 23, 21, 23, 40, 42, 164, 194, 219),
(50, 6, 911017, 53, 911018, 78, 911002, 63, 19, 23, 21, 23, 40, 42, 167, 197, 222),
(1, 7, 911023, 4, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 20, 50, 75),
(2, 7, 911023, 6, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 23, 53, 78),
(3, 7, 911023, 8, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 26, 56, 81),
(4, 7, 911023, 9, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 29, 59, 84),
(5, 7, 911023, 11, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 32, 62, 87),
(6, 7, 911023, 13, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 35, 65, 90),
(7, 7, 911023, 15, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 38, 68, 93),
(8, 7, 911023, 16, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 41, 71, 96),
(9, 7, 911023, 18, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 44, 74, 99),
(10, 7, 911023, 20, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 47, 77, 102),
(11, 7, 911023, 18, 911024, 0, 0, 0, 5, 9, 7, 9, 12, 14, 50, 80, 105),
(12, 7, 911023, 19, 911024, 2, 0, 0, 5, 9, 7, 9, 12, 14, 53, 83, 108),
(13, 7, 911023, 20, 911024, 4, 0, 0, 5, 9, 7, 9, 12, 14, 56, 86, 111),
(14, 7, 911023, 22, 911024, 6, 0, 0, 5, 9, 7, 9, 12, 14, 59, 89, 114),
(15, 7, 911023, 23, 911024, 8, 0, 0, 5, 9, 7, 9, 12, 14, 62, 92, 117),
(16, 7, 911023, 24, 911024, 10, 0, 0, 7, 11, 9, 11, 16, 18, 65, 95, 120),
(17, 7, 911023, 25, 911024, 12, 0, 0, 7, 11, 9, 11, 16, 18, 68, 98, 123),
(18, 7, 911023, 27, 911024, 14, 0, 0, 7, 11, 9, 11, 16, 18, 71, 101, 126),
(19, 7, 911023, 28, 911024, 16, 0, 0, 7, 11, 9, 11, 16, 18, 74, 104, 129),
(20, 7, 911023, 29, 911024, 18, 0, 0, 7, 11, 9, 11, 16, 18, 77, 107, 132),
(21, 7, 911023, 30, 911024, 20, 0, 0, 9, 13, 11, 13, 20, 22, 80, 110, 135),
(22, 7, 911023, 32, 911024, 22, 0, 0, 9, 13, 11, 13, 20, 22, 83, 113, 138),
(23, 7, 911023, 33, 911024, 24, 0, 0, 9, 13, 11, 13, 20, 22, 86, 116, 141),
(24, 7, 911023, 34, 911024, 26, 0, 0, 9, 13, 11, 13, 20, 22, 89, 119, 144),
(25, 7, 911023, 35, 911024, 28, 0, 0, 9, 13, 11, 13, 20, 22, 92, 122, 147),
(26, 7, 911023, 37, 911024, 30, 0, 0, 11, 15, 13, 15, 24, 26, 95, 125, 150),
(27, 7, 911023, 38, 911024, 32, 0, 0, 11, 15, 13, 15, 24, 26, 98, 128, 153),
(28, 7, 911023, 39, 911024, 34, 0, 0, 11, 15, 13, 15, 24, 26, 101, 131, 156),
(29, 7, 911023, 40, 911024, 36, 0, 0, 11, 15, 13, 15, 24, 26, 104, 134, 159),
(30, 7, 911023, 35, 911024, 38, 911002, 3, 11, 15, 13, 15, 24, 26, 107, 137, 162),
(31, 7, 911023, 36, 911024, 40, 911002, 6, 13, 17, 15, 17, 28, 30, 110, 140, 165),
(32, 7, 911023, 37, 911024, 42, 911002, 9, 13, 17, 15, 17, 28, 30, 113, 143, 168),
(33, 7, 911023, 38, 911024, 44, 911002, 12, 13, 17, 15, 17, 28, 30, 116, 146, 171),
(34, 7, 911023, 39, 911024, 46, 911002, 15, 13, 17, 15, 17, 28, 30, 119, 149, 174),
(35, 7, 911023, 40, 911024, 48, 911002, 18, 13, 17, 15, 17, 28, 30, 122, 152, 177),
(36, 7, 911023, 41, 911024, 50, 911002, 21, 15, 19, 17, 19, 32, 34, 125, 155, 180),
(37, 7, 911023, 42, 911024, 52, 911002, 24, 15, 19, 17, 19, 32, 34, 128, 158, 183),
(38, 7, 911023, 43, 911024, 54, 911002, 27, 15, 19, 17, 19, 32, 34, 131, 161, 186),
(39, 7, 911023, 44, 911024, 56, 911002, 30, 15, 19, 17, 19, 32, 34, 134, 164, 189),
(40, 7, 911023, 44, 911024, 58, 911002, 33, 15, 19, 17, 19, 32, 34, 137, 167, 192),
(41, 7, 911023, 45, 911024, 60, 911002, 36, 17, 21, 19, 21, 36, 38, 140, 170, 195),
(42, 7, 911023, 46, 911024, 62, 911002, 39, 17, 21, 19, 21, 36, 38, 143, 173, 198),
(43, 7, 911023, 47, 911024, 64, 911002, 42, 17, 21, 19, 21, 36, 38, 146, 176, 201),
(44, 7, 911023, 48, 911024, 66, 911002, 45, 17, 21, 19, 21, 36, 38, 149, 179, 204),
(45, 7, 911023, 49, 911024, 68, 911002, 48, 17, 21, 19, 21, 36, 38, 152, 182, 207),
(46, 7, 911023, 50, 911024, 70, 911002, 51, 19, 23, 21, 23, 40, 42, 155, 185, 210),
(47, 7, 911023, 51, 911024, 72, 911002, 54, 19, 23, 21, 23, 40, 42, 158, 188, 213),
(48, 7, 911023, 52, 911024, 74, 911002, 57, 19, 23, 21, 23, 40, 42, 161, 191, 216),
(49, 7, 911023, 53, 911024, 76, 911002, 60, 19, 23, 21, 23, 40, 42, 164, 194, 219),
(50, 7, 911023, 53, 911024, 78, 911002, 63, 19, 23, 21, 23, 40, 42, 167, 197, 222),
(1, 8, 911015, 4, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 20, 50, 75),
(2, 8, 911015, 6, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 23, 53, 78),
(3, 8, 911015, 8, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 26, 56, 81),
(4, 8, 911015, 9, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 29, 59, 84),
(5, 8, 911015, 11, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 32, 62, 87),
(6, 8, 911015, 13, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 35, 65, 90),
(7, 8, 911015, 15, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 38, 68, 93),
(8, 8, 911015, 16, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 41, 71, 96),
(9, 8, 911015, 18, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 44, 74, 99),
(10, 8, 911015, 20, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 47, 77, 102),
(11, 8, 911015, 18, 911016, 0, 0, 0, 5, 9, 7, 9, 12, 14, 50, 80, 105),
(12, 8, 911015, 19, 911016, 2, 0, 0, 5, 9, 7, 9, 12, 14, 53, 83, 108),
(13, 8, 911015, 20, 911016, 4, 0, 0, 5, 9, 7, 9, 12, 14, 56, 86, 111),
(14, 8, 911015, 22, 911016, 6, 0, 0, 5, 9, 7, 9, 12, 14, 59, 89, 114),
(15, 8, 911015, 23, 911016, 8, 0, 0, 5, 9, 7, 9, 12, 14, 62, 92, 117),
(16, 8, 911015, 24, 911016, 10, 0, 0, 7, 11, 9, 11, 16, 18, 65, 95, 120),
(17, 8, 911015, 25, 911016, 12, 0, 0, 7, 11, 9, 11, 16, 18, 68, 98, 123),
(18, 8, 911015, 27, 911016, 14, 0, 0, 7, 11, 9, 11, 16, 18, 71, 101, 126),
(19, 8, 911015, 28, 911016, 16, 0, 0, 7, 11, 9, 11, 16, 18, 74, 104, 129),
(20, 8, 911015, 29, 911016, 18, 0, 0, 7, 11, 9, 11, 16, 18, 77, 107, 132),
(21, 8, 911015, 30, 911016, 20, 0, 0, 9, 13, 11, 13, 20, 22, 80, 110, 135),
(22, 8, 911015, 32, 911016, 22, 0, 0, 9, 13, 11, 13, 20, 22, 83, 113, 138),
(23, 8, 911015, 33, 911016, 24, 0, 0, 9, 13, 11, 13, 20, 22, 86, 116, 141),
(24, 8, 911015, 34, 911016, 26, 0, 0, 9, 13, 11, 13, 20, 22, 89, 119, 144),
(25, 8, 911015, 35, 911016, 28, 0, 0, 9, 13, 11, 13, 20, 22, 92, 122, 147),
(26, 8, 911015, 37, 911016, 30, 0, 0, 11, 15, 13, 15, 24, 26, 95, 125, 150),
(27, 8, 911015, 38, 911016, 32, 0, 0, 11, 15, 13, 15, 24, 26, 98, 128, 153),
(28, 8, 911015, 39, 911016, 34, 0, 0, 11, 15, 13, 15, 24, 26, 101, 131, 156),
(29, 8, 911015, 40, 911016, 36, 0, 0, 11, 15, 13, 15, 24, 26, 104, 134, 159),
(30, 8, 911015, 35, 911016, 38, 911002, 3, 11, 15, 13, 15, 24, 26, 107, 137, 162),
(31, 8, 911015, 36, 911016, 40, 911002, 6, 13, 17, 15, 17, 28, 30, 110, 140, 165),
(32, 8, 911015, 37, 911016, 42, 911002, 9, 13, 17, 15, 17, 28, 30, 113, 143, 168),
(33, 8, 911015, 38, 911016, 44, 911002, 12, 13, 17, 15, 17, 28, 30, 116, 146, 171),
(34, 8, 911015, 39, 911016, 46, 911002, 15, 13, 17, 15, 17, 28, 30, 119, 149, 174),
(35, 8, 911015, 40, 911016, 48, 911002, 18, 13, 17, 15, 17, 28, 30, 122, 152, 177),
(36, 8, 911015, 41, 911016, 50, 911002, 21, 15, 19, 17, 19, 32, 34, 125, 155, 180),
(37, 8, 911015, 42, 911016, 52, 911002, 24, 15, 19, 17, 19, 32, 34, 128, 158, 183),
(38, 8, 911015, 43, 911016, 54, 911002, 27, 15, 19, 17, 19, 32, 34, 131, 161, 186),
(39, 8, 911015, 44, 911016, 56, 911002, 30, 15, 19, 17, 19, 32, 34, 134, 164, 189),
(40, 8, 911015, 44, 911016, 58, 911002, 33, 15, 19, 17, 19, 32, 34, 137, 167, 192),
(41, 8, 911015, 45, 911016, 60, 911002, 36, 17, 21, 19, 21, 36, 38, 140, 170, 195),
(42, 8, 911015, 46, 911016, 62, 911002, 39, 17, 21, 19, 21, 36, 38, 143, 173, 198),
(43, 8, 911015, 47, 911016, 64, 911002, 42, 17, 21, 19, 21, 36, 38, 146, 176, 201),
(44, 8, 911015, 48, 911016, 66, 911002, 45, 17, 21, 19, 21, 36, 38, 149, 179, 204),
(45, 8, 911015, 49, 911016, 68, 911002, 48, 17, 21, 19, 21, 36, 38, 152, 182, 207),
(46, 8, 911015, 50, 911016, 70, 911002, 51, 19, 23, 21, 23, 40, 42, 155, 185, 210),
(47, 8, 911015, 51, 911016, 72, 911002, 54, 19, 23, 21, 23, 40, 42, 158, 188, 213),
(48, 8, 911015, 52, 911016, 74, 911002, 57, 19, 23, 21, 23, 40, 42, 161, 191, 216),
(49, 8, 911015, 53, 911016, 76, 911002, 60, 19, 23, 21, 23, 40, 42, 164, 194, 219),
(50, 8, 911015, 53, 911016, 78, 911002, 63, 19, 23, 21, 23, 40, 42, 167, 197, 222),
(1, 9, 911021, 4, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 20, 50, 75),
(2, 9, 911021, 6, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 23, 53, 78),
(3, 9, 911021, 8, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 26, 56, 81),
(4, 9, 911021, 9, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 29, 59, 84),
(5, 9, 911021, 11, 0, 0, 0, 0, 1, 5, 3, 5, 4, 6, 32, 62, 87),
(6, 9, 911021, 13, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 35, 65, 90),
(7, 9, 911021, 15, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 38, 68, 93),
(8, 9, 911021, 16, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 41, 71, 96),
(9, 9, 911021, 18, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 44, 74, 99),
(10, 9, 911021, 20, 0, 0, 0, 0, 3, 7, 5, 7, 8, 10, 47, 77, 102),
(11, 9, 911021, 18, 911022, 0, 0, 0, 5, 9, 7, 9, 12, 14, 50, 80, 105),
(12, 9, 911021, 19, 911022, 2, 0, 0, 5, 9, 7, 9, 12, 14, 53, 83, 108),
(13, 9, 911021, 20, 911022, 4, 0, 0, 5, 9, 7, 9, 12, 14, 56, 86, 111),
(14, 9, 911021, 22, 911022, 6, 0, 0, 5, 9, 7, 9, 12, 14, 59, 89, 114),
(15, 9, 911021, 23, 911022, 8, 0, 0, 5, 9, 7, 9, 12, 14, 62, 92, 117),
(16, 9, 911021, 24, 911022, 10, 0, 0, 7, 11, 9, 11, 16, 18, 65, 95, 120),
(17, 9, 911021, 25, 911022, 12, 0, 0, 7, 11, 9, 11, 16, 18, 68, 98, 123),
(18, 9, 911021, 27, 911022, 14, 0, 0, 7, 11, 9, 11, 16, 18, 71, 101, 126),
(19, 9, 911021, 28, 911022, 16, 0, 0, 7, 11, 9, 11, 16, 18, 74, 104, 129),
(20, 9, 911021, 29, 911022, 18, 0, 0, 7, 11, 9, 11, 16, 18, 77, 107, 132),
(21, 9, 911021, 30, 911022, 20, 0, 0, 9, 13, 11, 13, 20, 22, 80, 110, 135),
(22, 9, 911021, 32, 911022, 22, 0, 0, 9, 13, 11, 13, 20, 22, 83, 113, 138),
(23, 9, 911021, 33, 911022, 24, 0, 0, 9, 13, 11, 13, 20, 22, 86, 116, 141),
(24, 9, 911021, 34, 911022, 26, 0, 0, 9, 13, 11, 13, 20, 22, 89, 119, 144),
(25, 9, 911021, 35, 911022, 28, 0, 0, 9, 13, 11, 13, 20, 22, 92, 122, 147),
(26, 9, 911021, 37, 911022, 30, 0, 0, 11, 15, 13, 15, 24, 26, 95, 125, 150),
(27, 9, 911021, 38, 911022, 32, 0, 0, 11, 15, 13, 15, 24, 26, 98, 128, 153),
(28, 9, 911021, 39, 911022, 34, 0, 0, 11, 15, 13, 15, 24, 26, 101, 131, 156),
(29, 9, 911021, 40, 911022, 36, 0, 0, 11, 15, 13, 15, 24, 26, 104, 134, 159),
(30, 9, 911021, 35, 911022, 38, 911002, 3, 11, 15, 13, 15, 24, 26, 107, 137, 162),
(31, 9, 911021, 36, 911022, 40, 911002, 6, 13, 17, 15, 17, 28, 30, 110, 140, 165),
(32, 9, 911021, 37, 911022, 42, 911002, 9, 13, 17, 15, 17, 28, 30, 113, 143, 168),
(33, 9, 911021, 38, 911022, 44, 911002, 12, 13, 17, 15, 17, 28, 30, 116, 146, 171),
(34, 9, 911021, 39, 911022, 46, 911002, 15, 13, 17, 15, 17, 28, 30, 119, 149, 174),
(35, 9, 911021, 40, 911022, 48, 911002, 18, 13, 17, 15, 17, 28, 30, 122, 152, 177),
(36, 9, 911021, 41, 911022, 50, 911002, 21, 15, 19, 17, 19, 32, 34, 125, 155, 180),
(37, 9, 911021, 42, 911022, 52, 911002, 24, 15, 19, 17, 19, 32, 34, 128, 158, 183),
(38, 9, 911021, 43, 911022, 54, 911002, 27, 15, 19, 17, 19, 32, 34, 131, 161, 186),
(39, 9, 911021, 44, 911022, 56, 911002, 30, 15, 19, 17, 19, 32, 34, 134, 164, 189),
(40, 9, 911021, 44, 911022, 58, 911002, 33, 15, 19, 17, 19, 32, 34, 137, 167, 192),
(41, 9, 911021, 45, 911022, 60, 911002, 36, 17, 21, 19, 21, 36, 38, 140, 170, 195),
(42, 9, 911021, 46, 911022, 62, 911002, 39, 17, 21, 19, 21, 36, 38, 143, 173, 198),
(43, 9, 911021, 47, 911022, 64, 911002, 42, 17, 21, 19, 21, 36, 38, 146, 176, 201),
(44, 9, 911021, 48, 911022, 66, 911002, 45, 17, 21, 19, 21, 36, 38, 149, 179, 204),
(45, 9, 911021, 49, 911022, 68, 911002, 48, 17, 21, 19, 21, 36, 38, 152, 182, 207),
(46, 9, 911021, 50, 911022, 70, 911002, 51, 19, 23, 21, 23, 40, 42, 155, 185, 210),
(47, 9, 911021, 51, 911022, 72, 911002, 54, 19, 23, 21, 23, 40, 42, 158, 188, 213),
(48, 9, 911021, 52, 911022, 74, 911002, 57, 19, 23, 21, 23, 40, 42, 161, 191, 216),
(49, 9, 911021, 53, 911022, 76, 911002, 60, 19, 23, 21, 23, 40, 42, 164, 194, 219),
(50, 9, 911021, 53, 911022, 78, 911002, 63, 19, 23, 21, 23, 40, 42, 167, 197, 222),
;

View File

@@ -2,6 +2,7 @@ package main
import (
"fmt"
"math"
"os"
)
@@ -15,13 +16,80 @@ const (
)
const (
RESIST_FROST = iota
RESIST_ARCANE = iota
RESIST_FIRE
RESIST_NATURE
RESIST_FROST
RESIST_SHADOW
RESIST_ARCANE
)
// Return the itemEntry for a state item and based on quality (3 - rare, 4 - epic)
func getStatItemEntry(statID int, quality int) int {
switch statID {
case STAT_INTELLECT:
if quality == 3 {
return 911005
}
return 911006
case STAT_SPIRIT:
if quality == 3 {
return 911009
}
return 911010
case STAT_STRENGTH:
if quality == 3 {
return 911003
}
return 911004
case STAT_AGILITY:
if quality == 3 {
return 911007
}
return 911008
case STAT_STAMINA:
if quality == 3 {
return 911011
}
return 911012
default:
return 0
}
}
func getResistItemEntry(resistID int, quality int) int {
switch resistID {
case RESIST_FROST:
if quality == 3 {
return 911015
}
return 911016
case RESIST_FIRE:
if quality == 3 {
return 911017
}
return 911018
case RESIST_NATURE:
if quality == 3 {
return 911023
}
return 911024
case RESIST_SHADOW:
if quality == 3 {
return 911021
}
return 911022
case RESIST_ARCANE:
if quality == 3 {
return 911019
}
return 911020
default:
return 0
}
}
func main() {
// Output file for the SQL script
outputFile, err := os.Create("generate_stat_upgrades.sql")
@@ -40,9 +108,17 @@ func main() {
STAT_STAMINA: "Stamina",
}
resistTypes := map[int]string{
RESIST_ARCANE: "Arcane",
RESIST_FIRE: "Fire",
RESIST_NATURE: "Nature",
RESIST_FROST: "Frost",
RESIST_SHADOW: "Shadow",
}
// Start writing the SQL script
fmt.Fprintln(outputFile, "-- SQL Script to Insert 50 Ranks for Each Stat")
fmt.Fprintln(outputFile, "INSERT INTO mp_upgrade_ranks (upgradeRank, advancementId, materialId1, materialCost1, materialId2, materialCost2, materialId3, materialCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES")
fmt.Fprintln(outputFile, "INSERT INTO mp_upgrade_ranks (upgradeRank, advancementId, itemEntry1, itemCost1, itemEntry2, itemCost2, itemEntry3, itemCost3, minIncrease1, maxIncrease1, minIncrease2, maxIncrease2, minIncrease3, maxIncrease3, chanceCost1, chanceCost2, chanceCost3) VALUES")
// Iterate over stats
for statID := range stats {
@@ -59,6 +135,9 @@ func main() {
materialCost = 1000 + (rank-30)*18
}
// Make adjustment for new fusion core types
itemCost1 := int(math.Ceil(float64(materialCost) / 20))
// Stat growth
minIncrease1 := 1 + (rank-1)/10*2
maxIncrease1 := 10 + (rank-1)/10*2
@@ -74,31 +153,112 @@ func main() {
chanceCost3 := 75 + (rank-1)*3
// use material ids from the mp_material_types table material1 should be common stuff.
materialId1 := statID*2 + 1
itemEntry1 := getStatItemEntry(statID, 3)
// material2 should be rare stuff only required after rank 10 at growth rate of 5 per rank
materialId2, materialCost2 := 0, 0
itemEntry2, itemCost2 := 0, 0
if rank > 10 {
materialId2 = statID*2 + 2
materialCost2 = (rank - 11) * 10
itemEntry2 = getStatItemEntry(statID, 4)
itemCost2 = (rank - 11) * 10
}
materialId3, materialCost3 := 0, 0
// Adjust from old formula to new mythic fusion core types
itemCost2 = int(math.Ceil(float64(itemCost2) / 5))
itemEntry3, itemCost3 := 0, 0
if rank >= 30 {
materialId3 = 20 // Group lot of raid only items
materialCost3 = (rank - 29) * 3
itemEntry3 = 911002 // veilstones
itemCost3 = (rank - 29) * 3
if itemCost3 > 15 {
itemCost3 = 15
}
}
// Write SQL insert statement for this rank
sql := fmt.Sprintf(
"(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",
rank, statID, materialId1, materialCost, materialId2, materialCost2, materialId3, materialCost3,
rank, statID, itemEntry1, itemCost1, itemEntry2, itemCost2, itemEntry3, itemCost3,
minIncrease1, maxIncrease1, minIncrease2, maxIncrease1, minIncrease3, maxIncrease3,
chanceCost1, chanceCost2, chanceCost3,
)
// Add a comma for all but the last line
if !(statID == STAT_SPIRIT && rank == 50) {
isLastStat := statID == STAT_STAMINA && rank == 50
isLastResist := false
isLast := isLastStat && len(resistTypes) == 0 || isLastResist
if !isLast {
sql += ","
}
fmt.Fprintln(outputFile, sql)
}
}
// Iterate over resists
for resistId := range resistTypes {
resistIdbump := resistId + 5
for rank := 1; rank <= 50; rank++ {
// Material cost increases by 50 per rank
materialCost := 50
if rank < 11 {
materialCost = 75 + (rank-1)*35
}
if rank >= 11 && rank < 30 {
materialCost = 350 + (rank-11)*25
}
if rank >= 30 {
materialCost = 700 + (rank-30)*18
}
// Make adjustment for new fusion core types
itemCost1 := int(math.Ceil(float64(materialCost) / 20))
// Stat growth
minIncrease1 := 1 + (rank-1)/5*2
maxIncrease1 := 5 + (rank-1)/5*2
minIncrease2 := (minIncrease1 + maxIncrease1) / 2
maxIncrease3Bonus := (rank-1)/5*2 + 1
maxIncrease3 := maxIncrease1 + maxIncrease3Bonus
minIncrease3 := maxIncrease3 - 2
// Dice costs
chanceCost1 := 20 + (rank-1)*3
chanceCost2 := 50 + (rank-1)*3
chanceCost3 := 75 + (rank-1)*3
// use material ids from the mp_material_types table material1 should be common stuff.
itemEntry1 := getResistItemEntry(resistId, 3)
// material2 should be rare stuff only required after rank 10 at growth rate of 5 per rank
itemEntry2, itemCost2 := 0, 0
if rank > 10 {
itemEntry2 = getResistItemEntry(resistId, 4)
itemCost2 = (rank - 11) * 10
}
// Adjust from old formula to new mythic fusion core types
itemCost2 = int(math.Ceil(float64(itemCost2) / 5))
itemEntry3, itemCost3 := 0, 0
if rank >= 30 {
itemEntry3 = 911002 // veilstones
itemCost3 = (rank - 29) * 3
}
// Write SQL insert statement for this rank
sql := fmt.Sprintf(
"(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)",
rank, resistIdbump, itemEntry1, itemCost1, itemEntry2, itemCost2, itemEntry3, itemCost3,
minIncrease1, maxIncrease1, minIncrease2, maxIncrease1, minIncrease3, maxIncrease3,
chanceCost1, chanceCost2, chanceCost3,
)
// Add a comma for all but the last line
isLast := resistId == RESIST_ARCANE && rank == 50
if !isLast {
sql += ","
}
fmt.Fprintln(outputFile, sql)

View File

@@ -9,18 +9,37 @@
#include <string_view>
#include <tuple>
#include <mutex>
#include <exception>
std::string MpAdvancementsToString(MpAdvancements advancement)
{
switch (advancement)
{
case MP_ADV_INTELLECT: return "Intellect";
case MP_ADV_SPIRIT: return "Spirit";
case MP_ADV_STRENGTH: return "Strength";
case MP_ADV_AGILITY: return "Agility";
case MP_ADV_STAMINA: return "Stamina";
case MP_ADV_RESIST_ARCANE: return "Arcane Resistance";
case MP_ADV_RESIST_FIRE: return "Fire Resistance";
case MP_ADV_RESIST_NATURE: return "Nature Resistance";
case MP_ADV_RESIST_FROST: return "Frost Resistance";
case MP_ADV_RESIST_SHADOW: return "Shadow Resistance";
default: return "Unknown Advancement";
}
}
/**
* Table schema for upgrade ranks populated by go script:
*
* upgradeRank INT UNSIGNED NOT NULL,
* advancementId INT UNSIGNED NOT NULL,
* materialId1 INT UNSIGNED NOT NULL,
* materialId2 INT UNSIGNED NOT NULL,
* materialId3 INT UNSIGNED NOT NULL,
* materialCost INT UNSIGNED NOT NULL,
* materialCost2 INT UNSIGNED NOT NULL,
* materialCost3 INT UNSIGNED NOT NULL,
* itemEntry1 INT UNSIGNED NOT NULL,
* itemEntry2 INT UNSIGNED NOT NULL,
* itemEntry3 INT UNSIGNED NOT NULL,
* itemCost1 INT UNSIGNED NOT NULL,
* itemCost2 INT UNSIGNED NOT NULL,
* itemCost3 INT UNSIGNED NOT NULL,
* minIncrease1 INT UNSIGNED NOT NULL,
* maxIncrease1 INT UNSIGNED NOT NULL,
* minIncrease2 INT UNSIGNED NOT NULL,
@@ -45,12 +64,12 @@ int32 AdvancementMgr::LoadAdvancementRanks() {
SELECT
upgradeRank,
advancementId,
materialId1,
materialId2,
materialId3,
materialCost1,
materialCost2,
materialCost3,
itemEntry1,
itemEntry2,
itemEntry3,
itemCost1,
itemCost2,
itemCost3,
minIncrease1,
maxIncrease1,
minIncrease2,
@@ -65,20 +84,24 @@ int32 AdvancementMgr::LoadAdvancementRanks() {
QueryResult result = WorldDatabase.Query(query);
if (!result) {
MpLogger::error("Failed to load mythic scale factors from database");
MpLogger::error("Failed to load advancement ranks from database");
return 0;
}
// Load all the material types into memory for reference
do {
Field* fields = result->Fetch();
uint32 upgradeRank = fields[0].Get<uint32>();
uint32 advancementId = fields[1].Get<uint32>();
uint32 materialId1 = fields[2].Get<uint32>();
uint32 materialId2 = fields[3].Get<uint32>();
uint32 materialId3 = fields[4].Get<uint32>();
uint32 materialCost1 = fields[5].Get<uint32>();
uint32 materialCost2 = fields[6].Get<uint32>();
uint32 materialCost3 = fields[7].Get<uint32>();
uint32 itemEntry1 = fields[2].Get<uint32>();
uint32 itemEntry2 = fields[3].Get<uint32>();
uint32 itemEntry3 = fields[4].Get<uint32>();
uint32 itemCost1 = fields[5].Get<uint32>();
uint32 itemCost2 = fields[6].Get<uint32>();
uint32 itemCost3 = fields[7].Get<uint32>();
uint32 minIncrease1 = fields[8].Get<uint32>();
uint32 maxIncrease1 = fields[9].Get<uint32>();
uint32 minIncrease2 = fields[10].Get<uint32>();
@@ -100,13 +123,12 @@ int32 AdvancementMgr::LoadAdvancementRanks() {
.rollCost = {chanceCost1, chanceCost2, chanceCost3},
.lowRange = std::make_pair(minIncrease1, maxIncrease1),
.midRange = std::make_pair(minIncrease2, maxIncrease2),
.highRange = std::make_pair(minIncrease3, maxIncrease3)
.highRange = std::make_pair(minIncrease3, maxIncrease3),
.material1 = std::make_pair(itemEntry1, itemCost1),
.material2 = std::make_pair(itemEntry2, itemCost2),
.material3 = std::make_pair(itemEntry3, itemCost3)
};
rank.materialCost.emplace(materialId1, materialCost1);
rank.materialCost.emplace(materialId2, materialCost2);
rank.materialCost.emplace(materialId3, materialCost3);
_advancementRanks.try_emplace(std::make_pair(upgradeRank, advancement), rank);
} while (result->NextRow());
@@ -126,7 +148,7 @@ int32 AdvancementMgr::LoadAdvancementRanks() {
* This loads the player advancements when a player logs in stores it into memory for access by spell scripts that
* are applied to the player on login to apply the bonuses.
*/
int32 AdvancementMgr::LoadPlayerAdvancements(Player* player) {
void AdvancementMgr::LoadPlayerAdvancements(Player* player) {
std::lock_guard<std::mutex> lock(_playerAdvancementMutex);
@@ -144,13 +166,18 @@ int32 AdvancementMgr::LoadPlayerAdvancements(Player* player) {
QueryResult result = CharacterDatabase.Query(query, player->GetGUID().GetCounter());
// If the player does not have any upgrades just return perfectly fine not a problem until they purchase one.
if(!result) {
return 0;
MpLogger::info("Player {} has no advancements", player->GetName());
return;
}
uint32 count = 0;
uint32 guid = player->GetGUID().GetCounter();
// Loop through all results to load all advancements for this player
do {
Field* fields = result->Fetch();
uint32 guid = fields[0].Get<uint32>();
uint32 advancementId = fields[1].Get<uint32>();
float bonus = fields[2].Get<float>();
uint32 upgradeRank = fields[3].Get<uint32>();
@@ -166,9 +193,13 @@ int32 AdvancementMgr::LoadPlayerAdvancements(Player* player) {
// List of all ranks keyed by rank, advancementId
_playerAdvancements[guid][advancement] = playerRank;
MpLogger::debug("Loaded player {} advancement {} rank {} with bonus {}",
player->GetName(), static_cast<int>(advancement), upgradeRank, bonus);
count++;
} while (result->NextRow());
return result->GetRowCount();
MpLogger::info("Loaded {} advancements for player {}", count, player->GetName());
}
/**
@@ -183,21 +214,25 @@ int32 AdvancementMgr::LoadMaterialTypes() {
FROM mp_material_types
)";
QueryResult result = WorldDatabase.Query(query);
if(QueryResult result = WorldDatabase.Query(query)) {
do {
Field* fields = result->Fetch();
uint32 materialId = fields[0].Get<uint32>();
uint32 entry = fields[1].Get<uint32>();
do {
Field* fields = result->Fetch();
uint32 materialId = fields[0].Get<uint32>();
uint32 entry = fields[1].Get<uint32>();
if(!_materialTypes.contains(materialId)) {
_materialTypes.emplace(materialId,std::vector<uint32>());
}
_materialTypes.at(materialId).push_back(entry);
if(!_materialTypes.contains(materialId)) {
_materialTypes.emplace(materialId,std::vector<uint32>());
}
_materialTypes.at(materialId).push_back(entry);
} while (result->NextRow());
} while (result->NextRow());
return result->GetRowCount();
return result->GetRowCount();
} else {
MpLogger::error("Query failed to load material types from database");
return 0;
}
}
MpAdvancementRank* AdvancementMgr::GetAdvancementRank(uint32 rank, MpAdvancements advancement)
@@ -229,22 +264,17 @@ MpPlayerRank* AdvancementMgr::GetPlayerAdvancementRank(Player* player, MpAdvance
return nullptr;
}
bool AdvancementMgr::UpgradeAdvancement(Player* player, MpAdvancements advancement, uint32 diceCostLevel, uint32 itemEntry1, uint32 itemEntry2, uint32 itemEntry3)
uint32 AdvancementMgr::UpgradeAdvancement(Player* player, MpAdvancements advancement, uint32 diceCostLevel)
{
std::lock_guard<std::mutex> lock(_playerAdvancementMutex);
// Validators to make sure inputs are correct to perform the upgrade
if(!player) {
MpLogger::error("Could not upgrade advancement for player, player was nullpointer");
return false;
throw new std::runtime_error("Could not upgrade advancement for player, player was nullpointer");
}
if(diceCostLevel < 1 || diceCostLevel > 3) {
MpLogger::error("Invalid dice cost level valid vales (1,2,3) received {} for player {}", diceCostLevel, player->GetName());
return false;
}
if(itemEntry1 == 0) {
MpLogger::error("Material1 can not be 0 can not perform advancement upgrade for player {} Advancement {}", player->GetName(), advancement);
return false;
throw new std::runtime_error(Acore::StringFormat("Invalid dice cost level valid vales (1,2,3) received {} for player {}", diceCostLevel, player->GetName()));
}
MpPlayerRank* playerRank = GetPlayerAdvancementRank(player, advancement);
@@ -260,35 +290,60 @@ bool AdvancementMgr::UpgradeAdvancement(Player* player, MpAdvancements advanceme
}
if(playerRank->rank == MP_MAX_ADVANCEMENT_RANK) {
MpLogger::error("Player {} has reached the maximum rank for advancement {}", player->GetName(), advancement);
return false;
MpLogger::debug("Player {} has reached the maximum rank for advancement {}", player->GetName(), advancement);
return 0;
}
uint32 newRank = playerRank->rank + 1;
MpAdvancementRank* advancementRank = GetAdvancementRank(newRank, advancement);
if(!advancementRank->IsValid()) {
MpLogger::error("Advancement {} rank {} could not be found", advancement, newRank);
return false;
if(advancementRank == nullptr || !advancementRank->IsValid()) {
MpLogger::error("Advancement rank could not be found. Rank: {} Advancement: {}", newRank, static_cast<int>(advancement));
return 0;
}
// Get the items needed to upgrade this advancement
uint32 itemEntry1 = advancementRank->material1.first;
uint32 itemEntry2 = advancementRank->material2.first;
uint32 itemEntry3 = advancementRank->material3.first;
// If the player has the items needed to upgrade this advancement, then remove the items from the player inventory and apply the upgrade
if(!_PlayerHasItems(player, advancementRank, diceCostLevel, itemEntry1, itemEntry2, itemEntry3)) {
MpLogger::info("Player {} does not have the required items to upgrade advancement {}", player->GetName(), advancement);
return false;
MpLogger::debug("Player {} does not have the required items to upgrade advancement {}", player->GetName(), advancement);
return 0;
}
// Charge the player the cost of the upgrade
_ChargeItemCost(player, advancementRank, diceCostLevel, itemEntry1, itemEntry2, itemEntry3);
MpLogger::debug("Player {} has upgraded advancement {} to rank {}", player->GetName(), advancement, newRank);
// Finally get the bonus to apply for the player
float roll = _RollAdvancement(advancementRank, diceCostLevel);
float roll = round(_RollAdvancement(advancementRank, diceCostLevel));
// Update the player advancement rank in memory and database
playerRank->rank = newRank;
playerRank->diceSpent += advancementRank->rollCost[diceCostLevel];
playerRank->diceSpent += advancementRank->rollCost[diceCostLevel-1];
// round the roll to a whole number and add to player rank
playerRank->bonus += roll;
return true;
MpLogger::debug("Player {} has upgraded advancement {} to rank {} with bonus {} to new total bonus of {}", player->GetName(), advancement, newRank, roll, playerRank->bonus);
// Save the advancement to the database
_SaveAdvancement(player, advancementRank, playerRank, advancementRank->rollCost[diceCostLevel-1], roll, itemEntry1, itemEntry2, itemEntry3);
// Remove and reapply the aura to refresh the spell with the latest bonuses
uint32 spellId = MpConstants::GetAdvancementAura(advancement);
if (spellId > 0)
{
MpLogger::info("Refreshing advancement aura {} for player {}", spellId, player->GetName());
// First remove the aura completely
player->RemoveAura(spellId);
player->AddAura(spellId, player);
}
return roll;
}
bool AdvancementMgr::ResetPlayerAdvancements(Player* /*player*/)
@@ -298,7 +353,7 @@ bool AdvancementMgr::ResetPlayerAdvancements(Player* /*player*/)
return true;
}
void AdvancementMgr::_ResetPlayerAdvancement(Player* player, MpAdvancements advancement)
void AdvancementMgr::_ResetPlayerAdvancement(Player* /*player*/, MpAdvancements /*advancement*/)
{
std::lock_guard<std::mutex> lock(_playerAdvancementMutex);
return;
@@ -308,6 +363,7 @@ void AdvancementMgr::_ResetPlayerAdvancement(Player* player, MpAdvancements adva
float AdvancementMgr::_RollAdvancement(MpAdvancementRank* advancementRank, uint32 diceCostLevel)
{
uint32 min, max;
min = max = 0;
switch (diceCostLevel)
{
@@ -324,92 +380,186 @@ float AdvancementMgr::_RollAdvancement(MpAdvancementRank* advancementRank, uint3
max = advancementRank->highRange.second;
break;
default:
MpLogger::error("Invalid dice cost level valid vales (1,2,3) received {} for rank roll", diceCostLevel, advancementRank->rank);
MpLogger::error("Invalid dice cost level valid vales (1,2,3) received {} for rank roll {}", diceCostLevel, advancementRank->rank);
break;
}
MpLogger::debug("Rolling for rank {} dice level {} min {} max {}", advancementRank->rank, diceCostLevel, min, max);
return frand(min, max);
}
// Checks the players inventory to validate they have the required items to perform an upgrade based on the set cost for the passed in level.
/**
* Checks the players inventory to validate they have the required items to perform an upgrade based on the set cost for the passed in level.
* @todo refactor this to be more generic
*/
bool AdvancementMgr::_PlayerHasItems(Player* player, MpAdvancementRank* advancementRank, uint32 diceCostLevel, uint32 itemEntry1, uint32 itemEntry2, uint32 itemEntry3)
{
// Check if player has the required dice to upgrade the advancement if not do nothing.
uint32 diceCost = advancementRank->materialCost.at(diceCostLevel);
MpLogger::debug("Checking items for player {} dice level {} item1 {} item2 {} item3 {}",
player->GetName(), diceCostLevel, itemEntry1, itemEntry2, itemEntry3);
// Check if player has the required dice to upgrade the advancement
uint32 diceCost = advancementRank->rollCost[diceCostLevel-1];
if(!player->HasItemCount(MpConstants::ANCIENT_DICE, diceCost)) {
MpLogger::info("Player {} does not have enough dice to upgrade advancement {}", player->GetName(), advancementRank->advancementId);
MpLogger::info("Player {} does not have enough dice to upgrade advancement {}",
player->GetName(), advancementRank->advancementId);
return false;
}
// Validate the passed in item for materialId 1 is valid and the player has enough to purchase.
if(itemEntry1 > 0) {
if(!advancementRank->HasMaterial(itemEntry1)) {
MpLogger::error("Material1 {} is not a valid material for advancement {}", itemEntry1, advancementRank->advancementId);
return false;
// Check material 1 (required)
if (advancementRank->material1.first > 0) {
if (itemEntry1 == 0) {
throw std::runtime_error("Primary material entry is required but was not provided");
}
if(!player->HasItemCount(itemEntry1, advancementRank->materialCost[itemEntry1])) {
MpLogger::info("Player {} does not have enough material {} to upgrade advancement {}", player->GetName(), itemEntry1, advancementRank->advancementId);
uint32 requiredCount = advancementRank->material1.second;
if (!player->HasItemCount(itemEntry1, requiredCount)) {
MpLogger::info("Player {} does not have enough of item {} for advancement {}, requires: {}",
player->GetName(), itemEntry1, advancementRank->advancementId, requiredCount);
return false;
}
}
if(itemEntry2 > 0) {
if(!advancementRank->HasMaterial(itemEntry2)) {
MpLogger::error("Material1 {} is not a valid material for advancement {}", itemEntry2, advancementRank->advancementId);
// Check material 2 (optional)
if (advancementRank->material2.first > 0) {
if (itemEntry2 == 0) {
MpLogger::debug("Secondary material is required but not provided");
return false;
}
if(!player->HasItemCount(itemEntry2, advancementRank->materialCost[itemEntry2])) {
MpLogger::info("Player {} does not have enough material {} to upgrade advancement {}", player->GetName(), itemEntry2, advancementRank->advancementId);
uint32 requiredCount = advancementRank->material2.second;
if (!player->HasItemCount(itemEntry2, requiredCount)) {
MpLogger::info("Player {} does not have enough of item {} for advancement {}, requires: {}",
player->GetName(), itemEntry2, advancementRank->advancementId, requiredCount);
return false;
}
}
if(itemEntry3 > 0) {
if(!advancementRank->HasMaterial(itemEntry3)) {
MpLogger::error("Material1 {} is not a valid material for advancement {}", itemEntry3, advancementRank->advancementId);
// Check material 3 (optional)
if (advancementRank->material3.first > 0) {
if (itemEntry3 == 0) {
MpLogger::debug("Tertiary material is required but not provided");
return false;
}
if(!player->HasItemCount(itemEntry3, advancementRank->materialCost[itemEntry3])) {
MpLogger::info("Player {} does not have enough material {} to upgrade advancement {}", player->GetName(), itemEntry3, advancementRank->advancementId);
uint32 requiredCount = advancementRank->material3.second;
if (!player->HasItemCount(itemEntry3, requiredCount)) {
MpLogger::info("Player {} does not have enough of item {} for advancement {}, requires: {}",
player->GetName(), itemEntry3, advancementRank->advancementId, requiredCount);
return false;
}
}
MpLogger::debug("Player {} has all required materials to upgrade advancement {}",
player->GetName(), advancementRank->advancementId);
return true;
}
// Remove all items required for the upgrade.
void AdvancementMgr::_ChargeItemCost(Player *player, MpAdvancementRank* advancementRank, uint32 diceCostLevel, uint32 itemEntry1, uint32 itemEntry2, uint32 itemEntry3)
{
uint32 diceCost = advancementRank->materialCost[diceCostLevel];
Item* item = player->GetItemByEntry(MpConstants::ANCIENT_DICE);
item->SetCount(item->GetCount() - diceCost);
item->SendUpdateToPlayer(player);
MpLogger::debug("Charging player {} dice level {} item1 {} item2 {} item3 {}",
player->GetName(), diceCostLevel, itemEntry1, itemEntry2, itemEntry3);
// Remove the material from the player inventory
if(itemEntry1 > 0) {
item = player->GetItemByEntry(itemEntry1);
item->SetCount(item->GetCount() - advancementRank->materialCost[itemEntry1]);
item->SendUpdateToPlayer(player); // Update the client with the new dice count
// Remove the dice cost
uint32 diceCost = advancementRank->rollCost[diceCostLevel-1];
player->DestroyItemCount(MpConstants::ANCIENT_DICE, diceCost, true);
// Remove material 1 if it exists
if (itemEntry1 > 0 && advancementRank->material1.first > 0) {
player->DestroyItemCount(itemEntry1, advancementRank->material1.second, true);
}
if(itemEntry2 > 0) {
item = player->GetItemByEntry(itemEntry2);
item->SetCount(item->GetCount() - advancementRank->materialCost[itemEntry2]);
item->SendUpdateToPlayer(player); // Update the client with the new dice count
// Remove material 2 if it exists
if (itemEntry2 > 0 && advancementRank->material2.first > 0) {
player->DestroyItemCount(itemEntry2, advancementRank->material2.second, true);
}
if(itemEntry3 > 0) {
item = player->GetItemByEntry(itemEntry3);
item->SetCount(item->GetCount() - advancementRank->materialCost[itemEntry3]);
item->SendUpdateToPlayer(player); // Update the client with the new dice count
// Remove material 3 if it exists
if (itemEntry3 > 0 && advancementRank->material3.first > 0) {
player->DestroyItemCount(itemEntry3, advancementRank->material3.second, true);
}
return;
MpLogger::debug("Successfully charged player {} for advancement upgrade", player->GetName());
}
void AdvancementMgr::_SaveAdvancement(Player* player, MpAdvancementRank* advancementRank, MpPlayerRank* playerRank, uint32 diceCost, float roll, uint32 itemEntry1, uint32 itemEntry2, uint32 itemEntry3)
{
// Save the advancement to the database
try {
constexpr std::string_view insert = R"(
INSERT INTO mp_player_advancements (guid, advancementId, bonus, upgradeRank, diceSpent)
VALUES ({}, {}, {}, {}, {})
ON DUPLICATE KEY UPDATE
bonus = {},
upgradeRank = {},
diceSpent = {}
)";
MpLogger::debug("Saving advancement for player {} bonus {} advancement {} rank {}", player->GetName(), playerRank->bonus, advancementRank->advancementId, playerRank->rank);
CharacterDatabase.DirectExecute(insert,
player->GetGUID().GetCounter(),
advancementRank->advancementId,
playerRank->bonus,
playerRank->rank,
playerRank->diceSpent,
playerRank->bonus,
playerRank->rank,
playerRank->diceSpent
);
} catch (const std::exception& e) {
MpLogger::error("Failed to save advancement for player {}: {}", player->GetName(), e.what());
} catch (...) {
MpLogger::error("Failed to save advancement for player {}: unknown error", player->GetName());
}
try {
constexpr std::string_view insertHistory = R"(
INSERT INTO mp_player_advancement_history (guid, advancementId, bonus, upgradeRank, diceSpent, entryId1, entryId2, entryId3, itemCost1, itemCost2, itemCost3)
VALUES ({}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {})
)";
MpLogger::debug("Saving advancement history for player {} advancement {} rank {}", player->GetName(), advancementRank->advancementId, playerRank->rank);
CharacterDatabase.Execute(insertHistory,
player->GetGUID().GetCounter(),
advancementRank->advancementId,
roll,
playerRank->rank,
diceCost,
itemEntry1,
itemEntry2,
itemEntry3,
advancementRank->material1.second,
advancementRank->material2.second,
advancementRank->material3.second
);
} catch (const std::exception& e) {
MpLogger::error("Failed to save advancement history for player {}: {}", player->GetName(), e.what());
} catch (...) {
MpLogger::error("Failed to save advancement history for player {}: unknown error", player->GetName());
}
}
// void _DBSaveAdvancement(Player* player, MpAdvancementRank* advancementRank, MpPlayerRank* playerRank)
// {
// // Save the advancement to the database
// constexpr std::string_view query = R"(
// INSERT INTO mp_player_advancements (guid, advancementId, bonus, upgradeRank, diceSpent)
// VALUES ({}, {}, {}, {}, {})
// ON DUPLICATE KEY UPDATE
// bonus = {},
// upgradeRank = {},
// diceSpent = {}
// )";
// CharacterDatabase.Execute(query,
// player->GetGUID().GetCounter(),
// advancementRank->advancementId,
// roll,
// playerRank->rank,
// playerRank->diceSpent,
// roll,
// playerRank->rank,
// playerRank->diceSpent
// );
// }

View File

@@ -11,19 +11,21 @@
enum MpAdvancements
{
MP_ADV_STRENGTH = 0,
MP_ADV_AGILITY = 1,
MP_ADV_STAMINA = 2,
MP_ADV_INTELLECT = 3,
MP_ADV_SPIRIT = 4,
MP_ADV_RESIST_FIRE = 5,
MP_ADV_RESIST_NATURE = 6,
MP_ADV_RESIST_FROST = 7,
MP_ADV_RESIST_SHADOW = 8,
MP_ADV_RESIST_ARCANE = 9,
MP_ADV_INTELLECT = 0,
MP_ADV_SPIRIT = 1,
MP_ADV_STRENGTH = 2,
MP_ADV_AGILITY = 3,
MP_ADV_STAMINA = 4,
MP_ADV_RESIST_ARCANE = 5,
MP_ADV_RESIST_FIRE = 6,
MP_ADV_RESIST_NATURE = 7,
MP_ADV_RESIST_FROST = 8,
MP_ADV_RESIST_SHADOW = 9,
MP_ADV_MAX = 10
};
std::string MpAdvancementsToString(MpAdvancements advancement);
/**
* Advancement Rank represents each level for a stat increase that has can be purchases.
* It includes materials, type, and range of successful roll.
@@ -41,6 +43,11 @@ struct MpAdvancementRank
std::pair<uint32 /*min*/, uint32 /*max*/> midRange;
std::pair<uint32 /*min*/, uint32 /*max*/> highRange;
// materialId levels
std::pair<uint32 /*materialId*/, uint32 /*quantity*/> material1;
std::pair<uint32 /*materialId*/, uint32 /*quantity*/> material2;
std::pair<uint32 /*materialId*/, uint32 /*quantity*/> material3;
// Used to validate this struct is set correctly
bool IsValid() {
return (rank > 0 && advancementId >= 0 && advancementId < MP_ADV_MAX);
@@ -95,7 +102,7 @@ public:
// Loads advancement information from the database into memory when players are logged in or server starts.
int32 LoadAdvancementRanks();
int32 LoadMaterialTypes();
int32 LoadPlayerAdvancements(Player* player);
void LoadPlayerAdvancements(Player* player);
// Methods for looking up advancement rank data
MpAdvancementRank* GetAdvancementRank(uint32 rank, MpAdvancements advancement);
@@ -114,7 +121,7 @@ public:
* mixed materials is more complicated and the UI to support it is much more complex, while this is not as nice it is much simpler to implement.
* That means all materials have to be selected and passed in at the time of making this call.
*/
bool UpgradeAdvancement(Player* player, MpAdvancements advancement, uint32 diceCostLevel, uint32 itemEntry1, uint32 itemEntry2, uint32 itemEntry3);
uint32 UpgradeAdvancement(Player* player, MpAdvancements advancement, uint32 diceCostLevel);
// Used to reset all advancements for a specific player
bool ResetPlayerAdvancements(Player* player);
@@ -135,8 +142,11 @@ private:
// Removes items from player inventory based on the required advancement rank.
void _ChargeItemCost(Player* player, MpAdvancementRank* advancementRank, uint32 diceCostLevel, uint32 itemEntry1, uint32 itemEntry2, uint32 itemEntry3);
// This will save the advancement for the player advancement in memory and database
void _SaveAdvancement(Player* player, MpAdvancementRank* advancementRank, MpPlayerRank* playerRank, uint32 diceCost, float roll, uint32 itemEntry1, uint32 itemEntry2 = 0, uint32 itemEntry3 = 0);
// This will save the advancement purchase to the history database
void _DBSaveAdvancement(Player* player, MpAdvancementRank* advancementRank, MpPlayerRank* playerRank, uint32 diceCost, float roll);
// void _DBSaveAdvancement(Player* player, MpAdvancementRank* advancementRank, MpPlayerRank* playerRank, uint32 diceCost, float roll);
};

View File

@@ -21,7 +21,8 @@ bool MpClientDispatcher::Dispatch(MpClientEvent event, Player* player, std::vect
// Build the message string in same format to send to the client.
std::string_view eventName = MpClientEventNames.at(event);
std::string message = std::to_string(player->GetGUID().GetCounter()) + "|" + eventName.data();
uint32 playerGuid = player->GetGUID().GetCounter();
std::string message = "s|" + std::to_string(playerGuid) + "|" + std::string(eventName);
for(auto& arg : args) {
message += "|" + arg;
}
@@ -29,17 +30,19 @@ bool MpClientDispatcher::Dispatch(MpClientEvent event, Player* player, std::vect
std::string prefix = std::string(MP_DATA_CHAT_CHANNEL);
std::string fullmsg = prefix + "\t" + message;
MpLogger::debug("Dispatching client event: {} length {} for event {}", fullmsg, fullmsg.length(), std::string(eventName));
WorldPacket data(SMSG_MESSAGECHAT, 100);
data << uint8(CHAT_MSG_ADDON);
data << uint8(ChatMsg::CHAT_MSG_WHISPER);
data << int32(LANG_ADDON);
data << player->GetGUID().GetCounter();
data << player->GetGUID();
data << uint32(0);
data << player->GetGUID().GetCounter();
data << player->GetGUID();
data << uint32(fullmsg.length() + 1);
data << fullmsg;
data << uint8(0);
player->GetSession()->SendPacket(&data);
return 0;
return true;
}

View File

@@ -14,6 +14,7 @@ enum class MpEvent
UpgradeAdvancement, // Upgrades a player advancement 1 level
ResetAdvancement, // Resets a player Advancement back to 0
ResetAllAdvancements, // Resets all player advancements
GetPlayerRank, // Get the rank requirements for an advancement to the next levels
GetAdvancementRank // Get the details about the rank of a specific advancement (cost, bonus, etc)
};
@@ -24,6 +25,7 @@ enum class MpClientEvent
UpgradeAdvancement,
ResetAdvancement,
ResetAllAdvancements,
GetPlayerRank,
GetAdvancementRank
};
@@ -32,7 +34,8 @@ inline std::unordered_map<std::string_view, MpEvent> MpEventMap = {{
{"UpgradeAdvancement", MpEvent::UpgradeAdvancement},
{"ResetAdvancement", MpEvent::ResetAdvancement},
{"ResetAllAdvancements", MpEvent::ResetAllAdvancements},
{"GetAdvancementRank", MpEvent::ResetAllAdvancements}
{"GetPlayerRank", MpEvent::GetPlayerRank},
{"GetAdvancementRank", MpEvent::GetAdvancementRank}
}};
inline std::unordered_map<MpClientEvent, std::string_view> MpClientEventNames = {{
@@ -40,6 +43,7 @@ inline std::unordered_map<MpClientEvent, std::string_view> MpClientEventNames =
{MpClientEvent::UpgradeAdvancement, "UpgradeAdvancement"},
{MpClientEvent::ResetAdvancement, "ResetAdvancement"},
{MpClientEvent::ResetAllAdvancements, "ResetAllAdvancements"},
{MpClientEvent::GetPlayerRank, "GetPlayerRank"},
{MpClientEvent::GetAdvancementRank, "GetAdvancementRank"}
}};

View File

@@ -1,6 +1,6 @@
#include "MpEvent.h"
#include "MpLogger.h"
#include "AdvancementMgr.h"
#include "../AdvancementMgr.h"
#include "MpEventProcessor.h"
#include "MpClientDispatcher.h"
#include "Player.h"
@@ -15,28 +15,55 @@
/**
* Handles Updates to a players advancement system
* Event format
* p|playerGuid|UpgradeAdvancement|advancementId|rank|diceSpent|bonus
*/
enum class MP_EVENT_CODE
{
SUCCESS = 0,
// Message Errors
INVALID_EVENT = 100,
INVALID_ARGUMENT_SIZE = 201,
INVALID_ARGUMENT = 202,
INVALID_ARGUMENT_TYPE = 203,
// Game Response Codes
FAILED_UPGRADE_ADV = 300,
// Unknown Error
UNKNOWN_ERROR = 400,
NO_HANDLER = 401
};
std::string EventCodeToString(MP_EVENT_CODE code)
{
switch(code) {
case MP_EVENT_CODE::SUCCESS: return "Success";
case MP_EVENT_CODE::INVALID_EVENT: return "Invalid event";
case MP_EVENT_CODE::INVALID_ARGUMENT_SIZE: return "Invalid argument size";
case MP_EVENT_CODE::INVALID_ARGUMENT: return "Invalid argument";
case MP_EVENT_CODE::INVALID_ARGUMENT_TYPE: return "Invalid argument type";
case MP_EVENT_CODE::FAILED_UPGRADE_ADV: return "Failed to upgrade advancement";
case MP_EVENT_CODE::NO_HANDLER: return "No handler for event";
default: return "Unknown error";
}
}
// Send an error event to the client
bool SendEventError(Player* player, const std::string& method, MP_EVENT_CODE code, std::string message)
bool SendEventError(Player* player, const std::string& /* method*/, MP_EVENT_CODE code, std::string message)
{
std::vector<std::string> clientError = { std::to_string(static_cast<int>(code)), message };
MpLogger::error("Event Processor) Sending client error: {} {}", code, message);
MpLogger::error("(Event Processor) Sending client error: {} {}", code, message);
sMpClientDispatcher->Dispatch(MpClientEvent::Error, player, clientError);
return false;
}
class UpdateAdvancements : public MpEventInterface
/**
* Upgrade a Player Advancement
* Message Format:
* p|playerGuid|UpgradeAdvancement|advancementId|diceLevel|itemEntry1|itemEntry2|itemEntry3
*/
class UpgradeAdvancements : public MpEventInterface
{
public:
const std::string EventName() const override
@@ -44,44 +71,66 @@ class UpdateAdvancements : public MpEventInterface
return "UpgradeAdvancement";
}
bool Execute(Player* player, std::vector<std::string>& args)
bool Execute(Player* player, std::vector<std::string>& args) override
{
// Store the event data to send back to the client for parsing
std::vector<std::string> eventData;
MpLogger::info("(EventProcessor) Executing {}}", EventName());
std::string eventName = EventName();
MpLogger::info("(EventProcessor) Executing {}", eventName.c_str());
for(auto& arg : args) {
MpLogger::info("{} Arg: {}", EventName(), arg);
}
// Validate the message is int he right format
if(args.size() != 5) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT_SIZE, "Invalid number of arguments expected 5, found " + std::to_string(args.size()));
// Validate the message is in the right format
if(args.size() != 2) {
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT_SIZE, "Invalid number of arguments expected 2, found " + std::to_string(args.size()));
}
uint32 advancementId = std::stoi(args[0]);
uint32 advancementId, diceLevel;
try {
advancementId = std::stoi(args[0]);
} catch (const std::exception& e) {
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid advancement id format: " + args[0]);
}
if(advancementId >= MpAdvancements::MP_ADV_MAX) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid advancement id " + args[0] + " max is " + std::to_string(MpAdvancements::MP_ADV_MAX));
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid advancement id " + args[0] + " max valid id is " + std::to_string(MpAdvancements::MP_ADV_MAX - 1));
}
uint32 diceLevel = std::stoi(args[1]);
try {
diceLevel = std::stoi(args[1]);
} catch (const std::exception& e) {
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid dice level format: " + args[1]);
}
if(diceLevel < 1 || diceLevel > 3) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid dice level " + args[1] + " valid values are 1,2,3");
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid dice level " + args[1] + " valid values are 1,2,3");
}
uint32 itemEntry1 = std::stoi(args[2]);
if(itemEntry1 == 0) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid item entry1 can not be empty " + args[2]);
uint32 increase;
try {
increase = sAdvancementMgr->UpgradeAdvancement(player, static_cast<MpAdvancements>(advancementId), diceLevel);
if(increase == 0) {
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Failed to upgrade advancement invalid request see error logs for player " + player->GetName());
}
} catch(const std::exception& e) {
return SendEventError(player, EventName(), MP_EVENT_CODE::FAILED_UPGRADE_ADV, "Failed to upgrade: " + std::string(e.what()) + " for player " + player->GetName());
}
uint32 itemEntry2 = std::stoi(args[3]);
uint32 itemEntry3 = std::stoi(args[4]);
// Upgrade the advancement for the player!
if(! sAdvancementMgr->UpgradeAdvancement(player, static_cast<MpAdvancements>(advancementId), diceLevel, itemEntry1, itemEntry2, itemEntry3)) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Failed to upgrade advancement for player " + player->GetName());
// Only proceed to here if no errors occurred
MpPlayerRank* playerRank = sAdvancementMgr->GetPlayerAdvancementRank(player, static_cast<MpAdvancements>(advancementId));
if (!playerRank) {
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Failed to get advancement rank for player " + player->GetName());
}
eventData = {"0", "success"};
// Format the success event data for client increase|newrank|bonus
eventData = {
EventCodeToString(MP_EVENT_CODE::SUCCESS),
std::to_string(increase),
std::to_string(playerRank->rank),
std::to_string(playerRank->bonus)
};
// Send response back to the client
sMpClientDispatcher->Dispatch(MpClientEvent::UpgradeAdvancement, player, eventData);
@@ -90,15 +139,24 @@ class UpdateAdvancements : public MpEventInterface
}
};
class GetAdvancementRank : public MpEventInterface
/**
* @brief Event is used to get the rank requirements for an advancement to the next levels
*
* Message Format:
* p|playerGuid|GetPlayerRank|advancementId
*
* Returns:
* p|playerGuid|GetPlayerRank|rank|bonus|spentDice
*/
class GetPlayerRank : public MpEventInterface
{
public:
const std::string EventName() const override
{
return "GetAdvancementRank";
return "GetPlayerRank";
}
bool Execute(Player* player, std::vector<std::string>& args)
bool Execute(Player* player, std::vector<std::string>& args) override
{
// Store the event data to send back to the client for parsing
std::vector<std::string> eventData;
@@ -113,27 +171,111 @@ class GetAdvancementRank : public MpEventInterface
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT_SIZE, "Invalid number of arguments expected 1, found " + std::to_string(args.size()));
}
uint32 advancementId = std::stoi(args[0]);
uint32 advancementId;
try {
advancementId = std::stoi(args[0]);
} catch (const std::exception& e) {
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid advancement id format: " + args[0]);
}
if(advancementId >= MpAdvancements::MP_ADV_MAX) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid advancement id " + args[0] + " max is " + std::to_string(MpAdvancements::MP_ADV_MAX));
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid advancement id " + args[0] + " max valid id is " + std::to_string(MpAdvancements::MP_ADV_MAX - 1));
}
MpAdvancementRank* rank = sAdvancementMgr->GetAdvancementRank(1, static_cast<MpAdvancements>(advancementId));
if(!rank) {
MpPlayerRank* playerRank = sAdvancementMgr->GetPlayerAdvancementRank(player, static_cast<MpAdvancements>(advancementId));
if(!playerRank) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Failed to get advancement rank for player " + player->GetName());
}
eventData = {std::to_string(rank->rank), std::to_string(rank->advancementId)};
eventData = {
EventCodeToString(MP_EVENT_CODE::SUCCESS),
std::to_string(playerRank->rank),
std::to_string(playerRank->bonus),
std::to_string(playerRank->diceSpent)
};
// Send response back to the client
sMpClientDispatcher->Dispatch(MpClientEvent::GetPlayerRank, player, eventData);
return true;
}
};
/**
* @brief Event is used to get the rank requirements for an advancement to the next levels
*
* Message Format:
* p|playerGuid|GetAdvancmentRank|advancementId|rank
*
* Returns:
* p|playerGuid|GetAdvancementRank|advancementId|rank|min1|max1|min2|max2|min3|max3|itemEntry1|itemEntryCost1|itemEntry2|itemEntryCost2|itemEntry3|itemEntryCost3
*/
class GetAdvancementRank : public MpEventInterface {
public:
const std::string EventName() const override
{
return "GetAdvancementRank";
}
bool Execute(Player* player, std::vector<std::string>& args) override
{
if(args.size() != 2) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT_SIZE, "Invalid number of arguments expected 2, found " + std::to_string(args.size()));
}
uint32 advancementId, rank;
try {
advancementId = std::stoi(args[0]);
} catch (const std::exception& e) {
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid advancement id format: " + args[0]);
}
if(advancementId >= MpAdvancements::MP_ADV_MAX) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid advancement id " + args[0] + " max valid id is " + std::to_string(MpAdvancements::MP_ADV_MAX - 1));
}
try {
rank = std::stoi(args[1]);
} catch (const std::exception& e) {
return SendEventError(player, EventName(), MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid rank format: " + args[1]);
}
if(rank == 0) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Invalid rank " + args[1] + " can not be empty");
}
MpAdvancementRank* advRank = sAdvancementMgr->GetAdvancementRank(rank, static_cast<MpAdvancements>(advancementId));
if(!advRank) {
return SendEventError(player, EventName(),MP_EVENT_CODE::INVALID_ARGUMENT, "Failed to get advancement rank for player " + player->GetName());
}
std::vector<std::string> eventData = {
EventCodeToString(MP_EVENT_CODE::SUCCESS),
std::to_string(advRank->advancementId),
std::to_string(advRank->rank),
std::to_string(advRank->lowRange.first),
std::to_string(advRank->lowRange.second),
std::to_string(advRank->midRange.first),
std::to_string(advRank->midRange.second),
std::to_string(advRank->highRange.first),
std::to_string(advRank->highRange.second),
std::to_string(advRank->material1.first),
std::to_string(advRank->material1.second),
std::to_string(advRank->material2.first),
std::to_string(advRank->material2.second),
std::to_string(advRank->material3.first),
std::to_string(advRank->material3.second)
};
// Send response back to the client
sMpClientDispatcher->Dispatch(MpClientEvent::GetAdvancementRank, player, eventData);
return true;
}
};
void MP_Register_EventHandlers()
{
auto updateAdvancements = std::make_shared<UpdateAdvancements>();
sMpEventProcessor->RegisterHandler(MpEvent::UpgradeAdvancement, updateAdvancements);
sMpEventProcessor->RegisterHandler(MpEvent::UpgradeAdvancement, std::make_shared<UpgradeAdvancements>());
sMpEventProcessor->RegisterHandler(MpEvent::GetPlayerRank, std::make_shared<GetPlayerRank>());
sMpEventProcessor->RegisterHandler(MpEvent::GetAdvancementRank, std::make_shared<GetAdvancementRank>());
}

View File

@@ -2,6 +2,7 @@
#include "MpEventProcessor.h"
#include "MythicPlus.h"
#include "MpLogger.h"
#include "MpClientDispatcher.h"
#include "Player.h"
#include <boost/algorithm/string/replace.hpp>
@@ -65,6 +66,10 @@ void MpEventProcessor::RegisterHandler(MpEvent event, std::shared_ptr<MpEventInt
// This fires the execution to the actual event.
bool MpEventProcessor::Dispatch(MpEvent event, Player* player, std::vector<std::string>& args) {
if(!_eventHandlers.contains(event)) {
// Send a client message back also to the player
std::vector<std::string> clientError = { "Error", "No handler registered for event: " + std::to_string(static_cast<int>(event)) };
sMpClientDispatcher->Dispatch(MpClientEvent::Error, player, clientError);
MpLogger::warn("No handler registered for event: {}", event);
return false;
}

View File

@@ -1,11 +1,112 @@
#ifndef MP_CONSTANTS_H
#define MP_CONSTANTS_H
#include "AdvancementMgr.h"
namespace MpConstants
{
// Spell IDs for passive stat and resist bonuses
constexpr int TITANS_STRENGTH_AURA = 80000001; // strength
constexpr int STEEL_FORGED_AURA = 80000002; // stamina
constexpr int CELESTIAL_GRACE_AURA = 80000003; // spirit
constexpr int FORBIDDEN_KNOWLEDGE_AURA = 80000004; // intellect
constexpr int SPECTRAL_REFLEXES_AURA = 80000005; // agility
constexpr int ELDRITCH_BARRIER_AURA = 80000006; // arcane resistance
constexpr int HELLFIRE_SHIELDING_AURA = 80000007; // fire resistance
constexpr int PRIMAL_ENDURACE_AURA = 80000008; // nature resistance
constexpr int LICHS_BANE_AURA = 80000009; // shadow resistance
constexpr int GLACIAL_FORTRESS_AURA = 80000010; // frost resistance
/**
* @brief Adds a static method for looking up the corect advancement aura based on the advancement type.
*
* @param advancement
* @return int
*/
static int GetAdvancementAura(MpAdvancements advancement)
{
switch (advancement)
{
case MpAdvancements::MP_ADV_INTELLECT:
return MpConstants::FORBIDDEN_KNOWLEDGE_AURA;
case MpAdvancements::MP_ADV_SPIRIT:
return MpConstants::CELESTIAL_GRACE_AURA;
case MpAdvancements::MP_ADV_STRENGTH:
return MpConstants::TITANS_STRENGTH_AURA;
case MpAdvancements::MP_ADV_AGILITY:
return MpConstants::SPECTRAL_REFLEXES_AURA;
case MpAdvancements::MP_ADV_STAMINA:
return MpConstants::STEEL_FORGED_AURA;
case MpAdvancements::MP_ADV_RESIST_ARCANE:
return MpConstants::ELDRITCH_BARRIER_AURA;
case MpAdvancements::MP_ADV_RESIST_FIRE:
return MpConstants::HELLFIRE_SHIELDING_AURA;
case MpAdvancements::MP_ADV_RESIST_NATURE:
return MpConstants::PRIMAL_ENDURACE_AURA;
case MpAdvancements::MP_ADV_RESIST_FROST:
return MpConstants::GLACIAL_FORTRESS_AURA;
case MpAdvancements::MP_ADV_RESIST_SHADOW:
return MpConstants::LICHS_BANE_AURA;
default:
return 0;
}
}
// Spells used for learning how to make items used for advancement.
constexpr int SPELL_ORE_FUSION = 150000;
constexpr int SPELL_CLOTH_FUSION = 150001;
constexpr int SPELL_LEATHER_FUSION = 150002;
constexpr int SPELL_ALCHEMY_FUSION = 150003;
constexpr int SPELL_GEM_FUSION = 150004;
constexpr int SPELL_ESSENCE_FUSION = 150005;
constexpr int SPELL_COLD_FUSION = 150006;
constexpr int SPELL_FLAME_FUSION = 150007;
constexpr int SPELL_ARCANE_FUSION = 150008;
constexpr int SPELL_DARK_FUSION = 150009;
constexpr int SPELL_EARTH_FUSION = 150010;
constexpr int SPELL_ORE_FUSION_RANK_2 = 150011;
constexpr int SPELL_CLOTH_FUSION_RANK_2 = 150012;
constexpr int SPELL_LEATHER_FUSION_RANK_2 = 150013;
constexpr int SPELL_ALCHEMY_FUSION_RANK_2 = 150014;
constexpr int SPELL_GEM_FUSION_RANK_2 = 150015;
constexpr int SPELL_ESSENCE_FUSION_RANK_2 = 150016;
constexpr int SPELL_COLD_FUSION_RANK_2 = 150017;
constexpr int SPELL_FLAME_FUSION_RANK_2 = 150018;
constexpr int SPELL_ARCANE_FUSION_RANK_2 = 150019;
constexpr int SPELL_DARK_FUSION_RANK_2 = 150020;
constexpr int SPELL_EARTH_FUSION_RANK_2 = 150021;
// New dropping unique items for mythic plus
constexpr int ANCIENT_DICE = 911000;
constexpr int DARK_SPIKE = 911001;
constexpr int DARK_SPIKE = 911001;
constexpr int VEILSTONE = 911002;
// Item IDs for fused materials used in advancement crafting
constexpr int FUSED_RARE_ORE = 911003;
constexpr int FUSED_MYTHIC_ORE = 911004;
constexpr int FUSED_RARE_CLOTH = 911005;
constexpr int FUSED_MYTHIC_CLOTH = 911006;
constexpr int FUSED_RARE_LEATHER = 911007;
constexpr int FUSED_MYTHIC_LEATHER = 911008;
constexpr int FUSED_RARE_ALCHEMY = 911009;
constexpr int FUSED_MYTHIC_ALCHEMY = 911010;
constexpr int FUSED_RARE_GEM = 911011;
constexpr int FUSED_MYTHIC_GEM = 911012;
constexpr int FUSED_RARE_ESSENCE = 911013;
constexpr int FUSED_MYTHIC_ESSENCE = 911014;
constexpr int FUSED_RARE_ICE_STONE = 911015;
constexpr int FUSED_MYTHIC_ICE_STONE = 911016;
constexpr int FUSED_RARE_INFERNAL_STONE = 911017;
constexpr int FUSED_MYTHIC_INFERNAL_STONE = 911018;
constexpr int FUSED_RARE_ARCANE_CRYSTAL = 911019;
constexpr int FUSED_MYTHIC_ARCANE_CRYSTAL = 911020;
constexpr int FUSED_RARE_DARK_CRYSTAL = 911021;
constexpr int FUSED_MYTHIC_DARK_CRYSTAL = 911022;
constexpr int FUSED_RARE_EARTH_STONE = 911023;
constexpr int FUSED_MYTHIC_EARTH_STONE = 911024;
// Shadowy Remains
constexpr int SHADOWY_REMAINS = 911100;
}
#endif

View File

@@ -3,6 +3,7 @@
#include "Chat.h"
#include "Group.h"
#include "MpLogger.h"
#include "Chat.h"
// Adds an entry for the group difficult to memory and updats database
void MpDataStore::AddGroupData(Group *group, MpGroupData groupData) {
@@ -55,9 +56,8 @@ void MpDataStore::AddGroupData(Group *group, MpGroupData groupData) {
if(!player) {
MpLogger::error("AddGroupData called with null player in instance");
}
ChatHandler(player->GetSession()).SendSysMessage("The group leader has changed the difficulty setting. You have been removed from the instance.");
//("The group leader has changed the difficulty setting. You have been removed from the instance.");
// player->GetSession()->SendNotification("The group leader has changed the difficulty setting. You have been removed from the instance.");
ChatHandler(player->GetSession()).SendNotification("The group leader has changed the difficulty setting. You have been removed from the instance.");
}
}
@@ -79,10 +79,7 @@ void MpDataStore::AddGroupData(Group *group, MpGroupData groupData) {
MpLogger::error("AddGroupData called with null player in instance");
}
if(player) {
ChatHandler(player->GetSession()).SendSysMessage("The group leader has changed the difficulty setting. You have been removed from the instance.");
// player->GetSession()->SendNotification("The group leader has changed the difficulty setting. You have been removed from the instance."); -- previous implementation for older core users
}
ChatHandler(player->GetSession()).SendNotification("The group leader has changed the difficulty setting. You have been removed from the instance.");
}
}
@@ -138,7 +135,7 @@ void MpDataStore::RemoveGroupData(Group *group) {
MpLogger::debug("RemoveGroupData for group {}", group->GetGUID().GetCounter());
_groupData->erase(group->GetGUID());
CharacterDatabase.Execute("DELETE FROM group_difficulty WHERE guid = {}) ", group->GetGUID().GetCounter());
CharacterDatabase.Execute("DELETE FROM group_difficulty WHERE guid = {}", group->GetGUID().GetCounter());
}
// Adds PlayerData related to MythicRun Status to map
@@ -176,7 +173,7 @@ void MpDataStore::RemoveInstanceData(uint32 mapId, uint32 instanceId) {
void MpDataStore::AddCreatureData(ObjectGuid guid, MpCreatureData creatureData) {
// MpLogger::debug("AddInstanceCreatureData for creature {}", guid.GetCounter());
_instanceCreatureData->emplace(guid, creatureData);
_instanceCreatureData->insert_or_assign(guid, std::move(creatureData));
}
MpCreatureData* MpDataStore::GetCreatureData(ObjectGuid guid) {
@@ -223,45 +220,61 @@ MpScaleFactor MpDataStore::GetScaleFactor(int32 mapId, int32 difficulty) const {
return _scaleFactors->at(key);
}
// Just send back untouched bonus database will override.
return MpScaleFactor{
.dmgBonus = 3,
.healthBonus = 2,
.maxDamageBonus = 30
.meleeBonus = 1.0f,
.spellBonus = 1.0f,
.healBonus = 1.0f,
.healthBonus = 1.0f
};
}
int32 MpDataStore::GetHealthScaleFactor(int32 mapId, int32 difficulty) const {
float MpDataStore::GetHealthScaleFactor(int32 mapId, int32 difficulty) const {
return GetScaleFactor(mapId, difficulty).healthBonus;
}
int32 MpDataStore::GetDamageScaleFactor(int32 mapId, int32 difficulty) const {
return GetScaleFactor(mapId, difficulty).dmgBonus;
float MpDataStore::GetMeleeScaleFactor(int32 mapId, int32 difficulty) const {
return GetScaleFactor(mapId, difficulty).meleeBonus;
}
int32 MpDataStore::GetSpellScaleFactor(int32 mapId, int32 difficulty) const {
float MpDataStore::GetSpellScaleFactor(int32 mapId, int32 difficulty) const {
return GetScaleFactor(mapId, difficulty).spellBonus;
}
int32 MpDataStore::GetMaxDamageScaleFactor(int32 mapId, int32 difficulty) const {
return GetScaleFactor(mapId, difficulty).maxDamageBonus;
float MpDataStore::GetHealScaleFactor(int32 mapId, int32 difficulty) const {
return GetScaleFactor(mapId, difficulty).healBonus;
}
void MpDataStore::SetHealthScaleFactor(int32 mapId, int32 difficulty, int32 newValue) {
uint32 MpDataStore::GetPlayerHealthAvg(uint32 level) const {
if (_playerHealthAvg.contains(level)) {
return _playerHealthAvg.at(level);
}
return 0;
}
void MpDataStore::SetHealScaleFactor(int32 mapId, int32 difficulty, float newValue) {
auto key = GetScaleFactorKey(mapId, difficulty);
if (_scaleFactors && _scaleFactors->contains(key)) {
_scaleFactors->at(key).healBonus = newValue;
}
}
void MpDataStore::SetHealthScaleFactor(int32 mapId, int32 difficulty, float newValue) {
auto key = GetScaleFactorKey(mapId, difficulty);
if (_scaleFactors && _scaleFactors->contains(key)) {
_scaleFactors->at(key).healthBonus = newValue;
}
}
void MpDataStore::SetDamageScaleFactor(int32 mapId, int32 difficulty, int32 newValue) {
void MpDataStore::SetMeleeScaleFactor(int32 mapId, int32 difficulty, float newValue) {
auto key = GetScaleFactorKey(mapId, difficulty);
if (_scaleFactors && _scaleFactors->contains(key)) {
_scaleFactors->at(key).dmgBonus = newValue;
_scaleFactors->at(key).meleeBonus = newValue;
}
}
void MpDataStore::SetSpellScaleFactor(int32 mapId, int32 difficulty, int32 newValue) {
void MpDataStore::SetSpellScaleFactor(int32 mapId, int32 difficulty, float newValue) {
auto key = GetScaleFactorKey(mapId, difficulty);
if (_scaleFactors && _scaleFactors->contains(key)) {
_scaleFactors->at(key).spellBonus = newValue;
@@ -272,7 +285,7 @@ int32 MpDataStore::LoadScaleFactors() {
_scaleFactors->clear();
// 0 1 2 3 4 5
QueryResult result = WorldDatabase.Query("SELECT mapId, dmg_bonus, spell_bonus, hp_bonus, difficulty, max FROM mp_scale_factors");
QueryResult result = WorldDatabase.Query("SELECT mapId, melee_bonus, spell_bonus, heal_bonus, hp_bonus, difficulty FROM mp_scale_factors");
if (!result) {
MpLogger::error("Failed to load mythic scale factors from database");
return 0;
@@ -281,17 +294,17 @@ int32 MpDataStore::LoadScaleFactors() {
do {
Field* fields = result->Fetch();
uint32 mapId = fields[0].Get<uint32>();
int32 damageBonus = fields[1].Get<int32>();
int32 spellBonus = fields[2].Get<int32>();
int32 healthBonus = fields[3].Get<int32>();
int32 difficulty = fields[4].Get<int32>();
int32 maxDamageBonus = fields[5].Get<int32>();
float meleeBonus = fields[1].Get<float>();
float spellBonus = fields[2].Get<float>();
float healBonus = fields[3].Get<float>();
float healthBonus = fields[4].Get<float>();
int32 difficulty = fields[5].Get<int32>();
MpScaleFactor scaleFactor = {
.dmgBonus = damageBonus,
.healthBonus = healthBonus,
.meleeBonus = meleeBonus,
.spellBonus = spellBonus,
.maxDamageBonus = maxDamageBonus
.healBonus = healBonus,
.healthBonus = healthBonus
};
_scaleFactors->emplace(GetScaleFactorKey(mapId, difficulty), scaleFactor);
@@ -301,6 +314,45 @@ int32 MpDataStore::LoadScaleFactors() {
return int32(_scaleFactors->size());
}
void MpDataStore::LoadPlayerHealthAvg() {
_playerHealthAvg.clear();
std::string_view query = R"(
SELECT
Level,
ROUND(CASE
WHEN Level BETWEEN 1 AND 30 THEN ((AVG(Stamina) - 20) * 10 + AVG(BaseHP) + 20) * 1.5
WHEN Level BETWEEN 31 AND 50 THEN ((AVG(Stamina) - 20) * 10 + AVG(BaseHP) + 20) * 1.7
WHEN Level BETWEEN 51 AND 59 THEN ((AVG(Stamina) - 20) * 10 + AVG(BaseHP) + 20) * 2.0
WHEN Level BETWEEN 60 AND 69 THEN ((AVG(Stamina) - 20) * 10 + AVG(BaseHP) + 20) * 2.3
WHEN Level BETWEEN 70 AND 79 THEN ((AVG(Stamina) - 20) * 10 + AVG(BaseHP) + 20) * 2.6
WHEN Level BETWEEN 80 AND 84 THEN ((AVG(Stamina) - 20) * 10 + AVG(BaseHP) + 20) * 3.0
WHEN Level >= 85 THEN ((AVG(Stamina) - 20) * 10 + AVG(BaseHP) + 20) * 4.0
ELSE ((AVG(Stamina) - 20) * 10 + AVG(BaseHP) + 20)
END) AS BaseHealth
FROM
player_class_stats
GROUP BY
Level
ORDER BY
Level;
)";
if (QueryResult result = WorldDatabase.Query(query.data())) {
do {
Field* fields = result->Fetch();
uint32 level = fields[0].Get<uint32>();
uint32 baseHealth = fields[1].Get<uint32>();
_playerHealthAvg[level] = baseHealth;
} while (result->NextRow());
} else {
MpLogger::error("Failed to load player health averages from database");
}
}
/**
* Database Calls below for storing player data.
* @todo refactor to use prepared statements

View File

@@ -143,17 +143,22 @@ struct MpGroupData
};
/**
* @brief Struct used for internal scaling of mythic+ difficulty. Fine-tuned in
* database.
*/
struct MpScaleFactor
{
int32 dmgBonus;
int32 healthBonus;
int32 spellBonus;
int32 maxDamageBonus;
float meleeBonus;
float spellBonus;
float healBonus;
float healthBonus;
std::string ToString() const {
return "MpScaleFactor: { dmgBonus: " + std::to_string(dmgBonus) +
return "MpScaleFactor: { meleeBonus: " + std::to_string(meleeBonus) +
", healthBonus: " + std::to_string(healthBonus) +
", spellBonus: " + std::to_string(spellBonus) + "}";
", spellBonus: " + std::to_string(spellBonus) +
", healBonus: " + std::to_string(healBonus) + "}";
}
};
@@ -211,6 +216,7 @@ struct MpCreatureData
{
Creature* creature;
bool scaled;
DeathState lastDeathState; // used to determine if a creature has been respawned
// AttackPower calculated based on settings
uint32 NewAttackPower;
@@ -220,6 +226,7 @@ struct MpCreatureData
// Original information about the creature that was altered.
uint8 originalLevel;
uint32 originalInstanceHealth; // Health the creature would have in instance before Mythic+ scaling
CreatureBaseStats const* originalStats;
MpDifficulty difficulty;
@@ -229,7 +236,7 @@ struct MpCreatureData
std::vector<std::string> affixes;
MpCreatureData(Creature* creature)
: creature(creature), scaled(false)
: creature(creature), scaled(false), originalInstanceHealth(0)
{
if(creature) {
originalLevel = creature->GetLevel();
@@ -237,6 +244,9 @@ struct MpCreatureData
originalLevel,
creature->GetCreatureTemplate()->unit_class
);
originalInstanceHealth = creature->GetMaxHealth();
}
auras.reserve(3);
@@ -259,7 +269,7 @@ struct MpCreatureData
std::string origStatsStr;
if(originalStats) {
uint32 health = *originalStats->BaseHealth;
uint32 health = originalInstanceHealth;
uint32 mana = originalStats->BaseMana;
uint32 armor = originalStats->BaseArmor;
uint32 ap = originalStats->AttackPower;
@@ -323,6 +333,10 @@ private:
// use to mimic pattern normals scale to heroic (loaded at server start)
std::unique_ptr<std::map<std::pair<int32,int32>,MpScaleFactor>> _scaleFactors; // {mapId,difficulty}
// Player mapping of level to average amount of health for that level, this is used for scaling against
// percentages to more consistently scale damage from spells and healing from creatures.
std::unordered_map<uint32, uint32> _playerHealthAvg; // level -> avg health
// Single creature multipliers used to scale creatures individually that may need tuned up or down.
// std::unique_ptr<std::unordered_map<uint32, CreatureOverride>> _creatureOverrides;
@@ -377,15 +391,19 @@ public:
std::vector<MpCreatureData*> GetUnscaledCreatures(uint32 mapId, uint32 instanceId);
// Scale factors are used to determine a base bonus for enemies base on the instance difficulty
int32 GetHealthScaleFactor(int32 mapId, int32 difficulty) const;
int32 GetDamageScaleFactor(int32 mapId, int32 difficulty) const;
int32 GetMaxDamageScaleFactor(int32 mapId, int32 difficulty) const;
int32 GetSpellScaleFactor(int32 mapId, int32 difficulty) const;
float GetHealthScaleFactor(int32 mapId, int32 difficulty) const;
float GetMeleeScaleFactor(int32 mapId, int32 difficulty) const;
float GetSpellScaleFactor(int32 mapId, int32 difficulty) const;
float GetHealScaleFactor(int32 mapId, int32 difficulty) const;
MpScaleFactor GetScaleFactor(int32 mapId, int32 difficulty) const;
void SetDamageScaleFactor(int32 mapId, int32 difficulty, int32 value);
void SetHealthScaleFactor(int32 mapId, int32 difficulty, int32 value);
void SetSpellScaleFactor(int32 mapId, int32 difficulty, int32 value);
void SetMeleeScaleFactor(int32 mapId, int32 difficulty, float value);
void SetHealthScaleFactor(int32 mapId, int32 difficulty, float value);
void SetSpellScaleFactor(int32 mapId, int32 difficulty, float value);
void SetHealScaleFactor(int32 mapId, int32 difficulty, float value);
// Retrieves the average players hp pool for a player level
uint32 GetPlayerHealthAvg(uint32 level) const;
// Individual Creature Scaling Multipliers
// void AddCreatureOverride(uint32 entry, CreatureOverride* override);
@@ -401,6 +419,9 @@ public:
// Used at initial server load
int32 LoadScaleFactors();
// Load the player health average from the database
void LoadPlayerHealthAvg();
// Database API calls
void DBUpdatePlayerInstanceData(ObjectGuid playerGuid, MpDifficulty difficulty, uint32 mapId = 0, uint32 instanceId = 0, uint32 deaths = 0);

View File

@@ -2,35 +2,74 @@
#define MP_LOGGER_H
#include "Log.h"
#include <exception>
#include <iostream>
#include <boost/stacktrace.hpp>
class MpLogger
{
public:
template<typename... Args>
static void debug(const char* fmt, Args&&... args) {
LOG_DEBUG("module.MythicPlus", "[MythicPlus] DEBUG " + std::string(fmt), std::forward<Args>(args)...);
try {
LOG_DEBUG("module.MythicPlus", "[MythicPlus] DEBUG " + std::string(fmt), std::forward<Args>(args)...);
} catch (const std::exception& e) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] DEBUG EXCEPTION: " + std::string(e.what()) +
"\nStack trace: " + boost::stacktrace::to_string(boost::stacktrace::stacktrace()));
} catch (...) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] DEBUG NON-STANDARD EXCEPTION");
}
}
template<typename... Args>
static void error(const char* fmt, Args&&... args) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] ERROR " + std::string(fmt), std::forward<Args>(args)...);
try {
LOG_ERROR("module.MythicPlus", "[MythicPlus] ERROR " + std::string(fmt), std::forward<Args>(args)...);
} catch (const std::exception& e) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] ERROR EXCEPTION: " + std::string(e.what()) +
"\nStack trace: " + boost::stacktrace::to_string(boost::stacktrace::stacktrace()));
} catch (...) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] ERROR NON-STANDARD EXCEPTION");
}
}
template<typename... Args>
static void info(const char* fmt, Args&&... args) {
LOG_INFO("module.MythicPlus", "[MythicPlus] INFO " + std::string(fmt), std::forward<Args>(args)...);
try {
LOG_INFO("module.MythicPlus", "[MythicPlus] INFO " + std::string(fmt), std::forward<Args>(args)...);
} catch (const std::exception& e) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] INFO EXCEPTION: " + std::string(e.what()) +
"\nStack trace: " + boost::stacktrace::to_string(boost::stacktrace::stacktrace()));
} catch (...) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] INFO NON-STANDARD EXCEPTION");
}
}
template<typename... Args>
static void warn(const char* fmt, Args&&... args) {
LOG_WARN("module.MythicPlus", "[MythicPlus] WARN " + std::string(fmt), std::forward<Args>(args)...);
try {
LOG_WARN("module.MythicPlus", "[MythicPlus] WARN " + std::string(fmt), std::forward<Args>(args)...);
} catch (const std::exception& e) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] WARN EXCEPTION: " + std::string(e.what()) +
"\nStack trace: " + boost::stacktrace::to_string(boost::stacktrace::stacktrace()));
} catch (...) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] WARN NON-STANDARD EXCEPTION");
}
}
template<typename... Args>
static void trace(const char* fmt, Args&&... args) {
LOG_TRACE("module.MythicPlus", "[MythicPlus] TRACE " + std::string(fmt), std::forward<Args>(args)...);
try {
LOG_TRACE("module.MythicPlus", "[MythicPlus] TRACE " + std::string(fmt), std::forward<Args>(args)...);
} catch (const std::exception& e) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] TRACE EXCEPTION: " + std::string(e.what()) +
"\nStack trace: " + boost::stacktrace::to_string(boost::stacktrace::stacktrace()));
} catch (...) {
LOG_ERROR("module.MythicPlus", "[MythicPlus] TRACE NON-STANDARD EXCEPTION");
}
}
};
#endif // MP_LOGGER_H

View File

@@ -143,9 +143,13 @@ bool MythicPlus::IsCreatureEligible(Creature* creature)
#if defined(MOD_PRESENT_NPCBOTS)
// Safely check if the creature is an NPC Bot
if (creature->IsNPCBot()) {
MpLogger::debug("Creature {} is an NPC Bot, do not scale", creature->GetName());
return false;
}
if(creature->GetBotOwner()) {
return false;
}
#endif
// Check for NPC-related flags (vendor, gossip, quest giver, trainer, etc.)
@@ -181,6 +185,10 @@ void MythicPlus::AddCreatureForScaling(Creature* creature)
void MythicPlus::AddScaledCreature(Creature* creature, MpInstanceData* instanceData)
{
MpCreatureData creatureData = MpCreatureData(creature);
creatureData.SetScaled(true);
creatureData.SetDifficulty(instanceData->difficulty);
creatureData.lastDeathState = creature->getDeathState();
sMpDataStore->AddCreatureData(creature->GetGUID(), creatureData);
// allow small variance in level for non-boss creatures
@@ -197,24 +205,7 @@ void MythicPlus::AddScaledCreature(Creature* creature, MpInstanceData* instanceD
// We know the creature is scaled and in the instance to fire the event.
// sCreatureHooks->AddToInstance(creature);
std::string name = creature->GetName();
// Assign random affix for now.
if (roll_chance_i(50)) {
uint32 irand = urand(0, 2);
if(irand == 0) {
creature->AddAura(23341, creature);
} else if(irand == 1) {
creature->AddAura(34711, creature);
} else {
creature->AddAura(774, creature);
}
}
creatureData.SetScaled(true);
creatureData.SetDifficulty(instanceData->difficulty);
// MpLogger::debug("Scaled Creature {} Entry {} Id {} level from {} to {}",
// creature->GetName(),
@@ -237,7 +228,10 @@ void MythicPlus::ScaleAll(Player* player, MpInstanceData* instanceData)
{
std::vector<MpCreatureData*> creatures = sMpDataStore->GetInstanceCreatures(player->GetMapId(), player->GetInstanceId());
for (MpCreatureData* creatureData : creatures) {
ScaleCreature(creatureData->creature->GetLevel(), creatureData->creature, &instanceData->creature, instanceData->difficulty);
// Only scale living creatures
if (creatureData->creature && creatureData->creature->IsAlive()) {
ScaleCreature(creatureData->creature->GetLevel(), creatureData->creature, &instanceData->creature, instanceData->difficulty);
}
}
}
@@ -254,16 +248,23 @@ void MythicPlus::RemoveCreature(Creature* creature)
void MythicPlus::ScaleCreature(uint8 level, Creature* creature, MpMultipliers* multipliers, MpDifficulty difficulty)
{
uint32 origLevel = creature->GetLevel();
CreatureTemplate const* cInfo = creature->GetCreatureTemplate();
uint32 mapId = creature->GetMapId();
// get the map difficulty from the map instance to see if it is a heroic or normal set instance
InstanceMap *instanceMap = creature->GetMap()->ToInstanceMap();
if (!instanceMap) {
MpLogger::error("Invalid instance map ScaleCreature()");
return;
}
creature->SetLevel(level);
CreatureBaseStats const* stats = sObjectMgr->GetCreatureBaseStats(
level,
cInfo->unit_class
);
// Scale the creatures base health
uint32 basehp = stats->BaseHealth[EXPANSION_WRATH_OF_THE_LICH_KING];
uint32 health = CalculateNewHealth(creature, cInfo, mapId, difficulty, basehp, multipliers->health);
@@ -276,6 +277,7 @@ void MythicPlus::ScaleCreature(uint8 level, Creature* creature, MpMultipliers* m
/**
* @TODO: Figure out mana later for unit_types 2 and 8
*/
// Scale the creatures mana pool
uint32 mana = uint32(std::ceil(stats->BaseMana * cInfo->ModMana));
creature->SetCreateMana(mana);
creature->SetMaxPower(POWER_MANA, mana);
@@ -290,29 +292,31 @@ void MythicPlus::ScaleCreature(uint8 level, Creature* creature, MpMultipliers* m
}
MpInstanceData *instanceData = sMpDataStore->GetInstanceData(creature->GetMapId(), creature->GetInstanceId());
int32 meleeDamage = sMpDataStore->GetDamageScaleFactor(creature->GetMapId(), instanceData->difficulty);
if(creature->IsDungeonBoss() || creature->GetEntry() == 23682) {
// Give the boss an increase in casting speed.
creature->SetFloatValue(UNIT_MOD_CAST_SPEED, 1.20f);
// Handle new melee/range scaling with simple formula (for simplicity range will just be 80% of melee bonus)
float meleeMultiplier = sMpDataStore->GetMeleeScaleFactor(creature->GetMapId(), instanceData->difficulty);
// Since Heroic Scaling can get out of hand. Reduce the instance multiplier by way too much 10%
if(instanceMap->IsHeroic() || instanceMap->Is25ManRaid()) {
// if the enemy is a boss reduce it by less
meleeMultiplier *= 0.9f;
}
// Calculate the level difference
float levelDifference = creature->GetLevel() - origLevel;
// Scale up the attack power based on the instance set in the database difficulty table.
uint32 ap = std::ceil(stats->AttackPower * meleeMultiplier);
uint32 rangeAp = std::ceil(stats->RangedAttackPower * meleeMultiplier * 0.4f);
// New formula with adjusted divisor for smoother scaling
float scalingFactor;
uint32 ap = uint32(sMythicPlus->meleeAttackPowerStart - sMythicPlus->meleeAttackPowerDampener);
uint32 rangeAp = irand(215, 357);
scalingFactor = CalculateScaling(levelDifference, meleeDamage);
ap = uint32(stats->AttackPower * scalingFactor);
rangeAp = uint32(rangeAp * scalingFactor);
// Additionally need to add in a decrease in attack power for normal non elite enemies
if (creature->GetCreatureTemplate()->rank == CREATURE_ELITE_NORMAL) {
// Reduced scaling for elite/boss spells to prevent them from hitting too hard
ap *= normalEnemyReducer;
rangeAp *= normalEnemyReducer;
}
MpCreatureData* creatureData = sMpDataStore->GetCreatureData(creature->GetGUID());
if(creatureData) {
creatureData->NewAttackPower = ap;
creatureData->AttackPowerScaleMultiplier = scalingFactor;
creatureData->AttackPowerScaleMultiplier = meleeMultiplier;
}
// Set scaled attack power
@@ -321,7 +325,10 @@ void MythicPlus::ScaleCreature(uint8 level, Creature* creature, MpMultipliers* m
// set the base weapon damage
creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, stats->BaseDamage[EXPANSION_WRATH_OF_THE_LICH_KING], 0);
creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, stats->BaseDamage[EXPANSION_WRATH_OF_THE_LICH_KING], 0);
creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, stats->BaseDamage[EXPANSION_WRATH_OF_THE_LICH_KING] * 1.5f, 0);
creature->SetBaseWeaponDamage(RANGED_ATTACK, MINDAMAGE, stats->BaseDamage[EXPANSION_WRATH_OF_THE_LICH_KING] * 0.5f, 0);
creature->SetBaseWeaponDamage(RANGED_ATTACK, MAXDAMAGE, stats->BaseDamage[EXPANSION_WRATH_OF_THE_LICH_KING] * 0.8f, 0);
// Update all stats to apply the new damage values
creature->UpdateAllStats();
@@ -330,154 +337,311 @@ void MythicPlus::ScaleCreature(uint8 level, Creature* creature, MpMultipliers* m
uint32 armor = uint32(std::ceil(stats->BaseArmor * multipliers->armor * cInfo->ModArmor));
creature->SetArmor(armor);
float updatedAp = creature->GetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE);
float updatedRangeAp = creature->GetModifierValue(UNIT_MOD_ATTACK_POWER_RANGED, BASE_VALUE);
MpLogger::debug("Updated Attack Powers: {} {}", updatedAp, updatedRangeAp);
}
int32 MythicPlus::ScaleDamageSpell(SpellInfo const * spellInfo, uint32 damage, MpCreatureData* creatureData, Creature* creature, Unit* target, float damageMultiplier)
{
int32 MythicPlus::CalculateSpellDamage(uint32 baseDamage, int originalLevel, int targetLevel) {
float origHpPool = sMpDataStore->GetPlayerHealthAvg(originalLevel);
float targetHpPool = sMpDataStore->GetPlayerHealthAvg(targetLevel);
// Using a % of expected damage of the average player pool creates a better consistent experience when scaling spells
float percentDamage = baseDamage / origHpPool;
// If the percentage damage is less than 2% cap it at 2% to prevent spells from being too powerful
if(percentDamage < 0.02f) {
percentDamage = 0.02f;
}
MpLogger::debug("OrigHpPool: {} TargetHpPool: {} Percent Damage: {}", origHpPool, targetHpPool, percentDamage);
MpLogger::debug("Original Damage: {} Scaled Damage: {}", baseDamage, static_cast<int32>(std::ceil(percentDamage * targetHpPool)));
int32 scaledDamage = static_cast<int32>(std::ceil(percentDamage * targetHpPool));
return scaledDamage;
}
int32 MythicPlus::CalculateHealScaling(uint32 baseHeal, uint32 originalTargetHealth, uint32 targetMaxHealth) {
if (originalTargetHealth == 0) {
MpLogger::debug("Original target health is 0, returning base heal: {}", baseHeal);
return baseHeal;
}
// Calculate the percentage of the original heal relative to original creature health
float percentHeal = static_cast<float>(baseHeal) / static_cast<float>(originalTargetHealth);
if (percentHeal < 0.01f) {
percentHeal = 0.01f;
}
// Cap the percentage at 100% aka full heal of current max health of caster
if (percentHeal > 1.0f) {
percentHeal = 1.0f;
}
// Scale the heal based on the current creature's max health
int32 scaledHeal = static_cast<int32>(std::ceil(percentHeal * targetMaxHealth));
MpLogger::debug("HEALING: >>> OrigHealth: {} CurrentMaxHealth: {} Percent Heal: {} Original Heal: {} Scaled Heal: {}",
originalTargetHealth, targetMaxHealth, percentHeal, baseHeal, scaledHeal);
return scaledHeal;
}
int32 MythicPlus::ScaleDamageSpell(SpellInfo const * spellInfo, uint32 damage, MpCreatureData* creatureData, Creature* creature, Unit* /* target */, float damageMultiplier)
{
if (!spellInfo) {
MpLogger::error("Invalid spell info ScaleDamageSpell()");
return damage;
}
if(!creatureData) {
// this is probably a summoned object or totem so going to cheat here and just use the flat modifer
// Handle totems that do some nasty things to us Slave Pens anyone
if(creature->IsTotem()) {
Unit* owner = creature->GetOwner();
if(owner) {
float lvlDmgBonus = float(85 - owner->GetLevel() / 10.0f);
return int32(damage * lvlDmgBonus * damageMultiplier);
} else {
return damage * damageMultiplier;
}
}
MpLogger::error("Invalid creature data ScaleDamageSpell()");
return damage * damageMultiplier;
}
if(!creature) {
MpLogger::error("Invalid creature ScaleDamageSpell()");
return damage * damageMultiplier;
}
int32 originalLevel = creatureData->originalLevel;
MpInstanceData *instanceData = sMpDataStore->GetInstanceData(creature->GetMapId(), creature->GetInstanceId());
int32 spellBonus = sMpDataStore->GetSpellScaleFactor(creature->GetMapId(), instanceData->difficulty);
// if((creature->IsDungeonBoss() && creature->isElite()) || creature->GetEntry() == 23682) {
// spellBonus *= 1.15;
// }
// Calculate the level difference
float levelDifference = creature->GetLevel() - originalLevel;
// New formula with adjusted divisor for smoother scaling
// float scalingFactor = 1 + (std::log2(levelDifference + 1) * (float(spellBonus)));
float scalingFactor = CalculateScaling(levelDifference, spellBonus);
// float scalingFactor = pow(float((creature->GetLevel() - originalLevel) / 10.0f ), float(spellBonus) / 5.0f);
// MpLogger::debug("Creature {} original level: {} New Level{} and Scaling level {}", creature->GetName(), originalLevel, creature->GetLevel(), scalingFactor);
int32 totalDamage = 0;
auto effects = spellInfo->GetEffects();
for (uint8 i = 0; i < effects.size(); ++i)
{
SpellEffectInfo effect = effects[i];
if(effect.IsAura()) {
switch(spellInfo->Effects[i].ApplyAuraName) {
case SPELL_AURA_PERIODIC_DAMAGE:
case SPELL_AURA_PERIODIC_DAMAGE_PERCENT:
case SPELL_AURA_POWER_BURN:
case SPELL_AURA_PERIODIC_LEECH:
case SPELL_AURA_PERIODIC_TRIGGER_SPELL:
case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE:
case SPELL_AURA_PERIODIC_DUMMY:
case SPELL_AURA_DUMMY:
totalDamage += effect.CalcValue(creature, nullptr, target);
break;
default:
break;
}
} else {
switch(effect.Effect)
{
case SPELL_EFFECT_WEAPON_PERCENT_DAMAGE:
case SPELL_EFFECT_WEAPON_DAMAGE:
case SPELL_EFFECT_NORMALIZED_WEAPON_DMG:
return damage;
case SPELL_EFFECT_SCHOOL_DAMAGE:
case SPELL_EFFECT_ENVIRONMENTAL_DAMAGE:
case SPELL_EFFECT_POWER_BURN:
case SPELL_EFFECT_HEALTH_LEECH:
case SPELL_EFFECT_TRIGGER_SPELL:
case SPELL_EFFECT_TRIGGER_SPELL_WITH_VALUE:
case SPELL_EFFECT_DUMMY:
totalDamage += effect.CalcValue(creature, nullptr, target);
break;
default:
break;
}
}
}
if(totalDamage == 0) {
if (!instanceData) {
MpLogger::debug("No instance data found for spell scaling, using original damage");
return damage;
}
MpLogger::debug(" >>> Spell {} damage scaled from for spell New Damage: {} using: scaling Factor: {} and damage Multi: {}",spellInfo->SpellName[0], totalDamage, scalingFactor, damageMultiplier);
float scaleFactor = sMpDataStore->GetSpellScaleFactor(creature->GetMapId(), instanceData->difficulty);
// Apply scaling factor and the set multiplier from the instance data
totalDamage = int32(totalDamage * scalingFactor * damageMultiplier);
MpLogger::debug("DAMAGE SPELL: >> ScaleFactor: {} DamageMultiplier: {}", scaleFactor, damageMultiplier);
// MpLogger::debug("Spell {} damage scaled from for spell New Damage: {} using: scaling Factor: {} and damage Multi: {}",spellInfo->SpellName[0], totalDamage, scalingFactor, damageMultiplier);
return totalDamage;
// calculate the global modifier x instance modifier
float totalModifier = damageMultiplier * scaleFactor;
// If for some reason there is not a creature, just use the global modifier x instance modifier
if(!creature) {
MpLogger::error("Invalid creature ScaleDamageSpell()");
return damage * totalModifier;
}
// Use the already calculated damage as the base for scaling
int32 newDamage = damage;
// Handle Summoned unit modifiers as
if(!creatureData) {
// handle if bot pets if NPCBot is installed.
#ifdef NPCBOT
if(creature->IsNPCBotOrPet()) {
return damage;
}
#endif
// Handle totems and summons - scale based on owner's details because they will not have creature data
if(creature->IsTotem() || creature->IsSummon()) {
Unit* owner = creature->GetOwner();
if(owner && owner->IsCreature()) {
Creature* ownerCreature = owner->ToCreature();
// Look up the owner creature's original level from MpDataStore
MpCreatureData* ownerCreatureData = sMpDataStore->GetCreatureData(ownerCreature->GetGUID());
if (ownerCreatureData) {
MpLogger::debug("DAMAGE SPELL: >> Creature is a totem or summon Creature Name {} and owner {} owner original level {} owner level {}", creature->GetName(), ownerCreature->GetName(), ownerCreatureData->originalLevel, ownerCreature->GetLevel());
int32 ownerOriginalLevel = ownerCreatureData->originalLevel;
if (ownerCreature->GetCreatureTemplate()->rank == CREATURE_ELITE_NORMAL) {
totalModifier = totalModifier * normalEnemyReducer;
}
newDamage = CalculateSpellDamage(damage, ownerOriginalLevel, ownerCreature->GetLevel());
} else {
// Fallback if no creature data found - use current level
if(ownerCreature->GetCreatureTemplate()->rank == CREATURE_ELITE_NORMAL) {
totalModifier = totalModifier * normalEnemyReducer;
}
newDamage = CalculateSpellDamage(damage, ownerCreature->GetLevel(), ownerCreature->GetLevel());
MpLogger::debug("No creature data found for owner {}, using current level for scaling", ownerCreature->GetGUID().ToString());
}
}
}
else {
MpLogger::error("Invalid creature data ScaleDamageSpell()");
return damage * totalModifier;
}
} else {
newDamage = CalculateSpellDamage(damage, creatureData->originalLevel, creature->GetLevel());
if (creature->GetCreatureTemplate()->rank == CREATURE_ELITE_NORMAL) {
// Reduced scaling for elite/boss spells to prevent them from hitting too hard
totalModifier = totalModifier * 0.85f;
}
}
// Calculate the additional damage from scaling (scaled damage - original damage)
int32 additionalDamage = newDamage - damage;
// Apply the scaling modifier to the additional damage only
int32 scaledAdditionalDamage = additionalDamage * totalModifier;
// Use the diminishing return values from the configuration
uint32 threshold = sMythicPlus->diminishingThresholds[instanceData->difficulty];
float diminishingExponent = sMythicPlus->diminishingExponent;
// Apply diminishing returns only to the additional scaled damage if it exceeds threshold
if (static_cast<uint32>(scaledAdditionalDamage) > threshold) {
// Calculate the diminished excess additional damage
float excess = scaledAdditionalDamage - threshold;
float diminishedExcess = pow(excess, diminishingExponent);
scaledAdditionalDamage = threshold + diminishedExcess;
MpLogger::debug("DAMAGE SPELL: >> Above Diminishing Threshold for Spell {} - Original: {}, Additional: {}, Diminished Additional: {}, Final: {}",
spellInfo->SpellName[0], damage, additionalDamage * totalModifier, scaledAdditionalDamage, damage + scaledAdditionalDamage);
} else {
MpLogger::debug("DAMAGE SPELL: >> Below Diminishing Threshold for Spell {} - Original: {}, Additional: {}, Final: {}",
spellInfo->SpellName[0], damage, scaledAdditionalDamage, damage + scaledAdditionalDamage);
}
// If this is a heroic instance the additional spell damage should be increased by 50%
InstanceMap* instanceMap = creature->GetMap()->ToInstanceMap();
if (instanceMap && (instanceMap->IsHeroic() || instanceMap->Is25ManRaid())) {
scaledAdditionalDamage = scaledAdditionalDamage * 1.5f;
}
// Return original damage + scaled additional damage (with potential diminishing returns)
return damage + scaledAdditionalDamage;
}
int32 MythicPlus::ScaleHealSpell(SpellInfo const * spellInfo, uint32 heal, MpCreatureData* creatureData, Creature* creature, Creature* /* target */, float healMultiplier)
int32 MythicPlus::ScaleHealSpell(SpellInfo const * spellInfo, uint32 heal, MpCreatureData* creatureData, Creature* creature, Creature* target, float healMultiplier)
{
if (!spellInfo) {
MpLogger::error("Invalid spell info ScaleHealSpell()");
return 0;
return heal;
}
if(!creatureData) {
MpLogger::error("Invalid creature data ScaleHealSpell()");
return 0;
MpInstanceData *instanceData = sMpDataStore->GetInstanceData(creature->GetMapId(), creature->GetInstanceId());
if (!instanceData) {
MpLogger::debug("No instance data found for heal scaling, using original heal");
return heal;
}
float scaleFactor = sMpDataStore->GetHealScaleFactor(creature->GetMapId(), instanceData->difficulty);
MpLogger::debug("HEALING: >>> HealScaleFactor: {} HealMultiplier: {}", scaleFactor, healMultiplier);
// calculate the global modifier x instance modifier
float totalModifier = healMultiplier * scaleFactor;
// If for some reason there is not a creature, just use the global modifier x instance modifier
if(!creature) {
MpLogger::error("Invalid creature ScaleHealSpell()");
return 0;
return heal * totalModifier;
}
auto effects = spellInfo->GetEffects();
for (uint8 i = 0; i < effects.size(); ++i)
{
MpLogger::debug(" >>> Spell {} effect {} value: {} by creature {}", spellInfo->SpellName[i], effects[i].Effect, heal, creature->GetName());
// Use the already calculated heal as the base for scaling
int32 newHeal = heal;
// Handle Summoned unit modifiers
if(!creatureData) {
// handle if bot pets if NPCBot is installed.
#ifdef NPCBOT
if(creature->IsNPCBotOrPet()) {
return heal;
}
#endif
MpLogger::debug("HEALING: >>> Scaling heal to target: {} with spell: {}", target->GetName(), spellInfo->SpellName[0]);
// Handle totems and summons - scale based on owner's details because they will not have creature data
if(creature->IsTotem() || creature->IsSummon()) {
Unit* owner = creature->GetOwner();
if(owner && owner->IsCreature()) {
Creature* ownerCreature = owner->ToCreature();
// Look up the owner creature's original level from MpDataStore
MpCreatureData* ownerCreatureData = sMpDataStore->GetCreatureData(ownerCreature->GetGUID());
if (ownerCreatureData) {
if (ownerCreature->GetCreatureTemplate()->rank == CREATURE_ELITE_NORMAL) {
totalModifier = totalModifier * normalEnemyReducer; // Less reduction for heals than damage
}
// Scale heal based on target's health, not caster's health
if (target) {
MpCreatureData* targetCreatureData = sMpDataStore->GetCreatureData(target->GetGUID());
uint32 targetOriginalHealth = targetCreatureData && targetCreatureData->originalInstanceHealth > 0 ?
targetCreatureData->originalInstanceHealth : target->GetMaxHealth();
MpLogger::debug("HEALING: >>> Scaling heal to target: {} Original Instance Health: {} New Health: {}", target->GetName(), targetOriginalHealth, target->GetMaxHealth());
newHeal = CalculateHealScaling(heal, targetOriginalHealth, target->GetMaxHealth());
} else {
newHeal = heal;
}
} else {
// Fallback if no creature data found - use current level
if(ownerCreature->GetCreatureTemplate()->rank == CREATURE_ELITE_NORMAL) {
totalModifier = totalModifier * normalEnemyReducer; // Less reduction for heals than damage
}
// Scale heal based on target's health, not caster's health
if (target) {
MpCreatureData* targetCreatureData = sMpDataStore->GetCreatureData(target->GetGUID());
uint32 targetOriginalHealth = targetCreatureData && targetCreatureData->originalInstanceHealth > 0 ?
targetCreatureData->originalInstanceHealth : target->GetMaxHealth();
MpLogger::debug("HEALING: >>> Scaling heal to target: {} Original Instance Health: {} New Health: {}", target->GetName(), targetOriginalHealth, target->GetMaxHealth());
newHeal = CalculateHealScaling(heal, targetOriginalHealth, target->GetMaxHealth());
} else {
newHeal = heal;
}
MpLogger::debug("No creature data found for owner {}, using current level for scaling", ownerCreature->GetGUID().ToString());
}
}
}
else {
MpLogger::error("Invalid creature data ScaleHealSpell()");
return heal * totalModifier;
}
} else {
// Scale heal based on target's health, not caster's health
if (target) {
// Get target's original instance health for scaling comparison
MpCreatureData* targetCreatureData = sMpDataStore->GetCreatureData(target->GetGUID());
uint32 targetOriginalHealth = targetCreatureData && targetCreatureData->originalInstanceHealth > 0 ?
targetCreatureData->originalInstanceHealth : target->GetMaxHealth();
MpLogger::debug("HEALING: >>> Scaling heal to target: {} Original Instance Health: {} New Health: {}", target->GetName(), targetOriginalHealth, target->GetMaxHealth());
newHeal = CalculateHealScaling(heal, targetOriginalHealth, target->GetMaxHealth());
} else {
// No target available, use original heal
newHeal = heal;
}
}
int32 originalLevel = creatureData->originalLevel;
// Calculate the additional heal from scaling (scaled heal - original heal)
int32 additionalHeal = newHeal - heal;
float levelDifference = creature->GetLevel() - originalLevel;
float spellBonus = sMpDataStore->GetSpellScaleFactor(creature->GetMapId(), creature->GetInstanceId());
// Apply the scaling modifier to the additional heal only
int32 scaledAdditionalHeal = additionalHeal * totalModifier;
float scalingFactor = CalculateScaling(levelDifference, spellBonus, 2.5f);
// Use the diminishing return values from the configuration (same as damage)
uint32 threshold = sMythicPlus->diminishingThresholds[instanceData->difficulty];
float diminishingExponent = sMythicPlus->diminishingExponent;
MpLogger::debug(" >>> Spell {} healed scaled from for spell New Heal: {} using: scaling Factor: {} and damage Multi: {}",spellInfo->SpellName[0], heal, scalingFactor, healMultiplier);
return int32(heal * scalingFactor * healMultiplier);
// Apply diminishing returns only to the additional scaled heal if it exceeds threshold * 2 since enemies have much more health.
if (scaledAdditionalHeal > threshold * 2.0f) {
// Calculate the diminished excess additional heal
float excess = scaledAdditionalHeal - threshold;
float diminishedExcess = pow(excess, diminishingExponent * 0.95f); // slightly reduce the diminishing returns for heals
scaledAdditionalHeal = threshold + diminishedExcess;
MpLogger::debug("HEALING: >>> Above Diminishing Threshold for Heal Spell {} - Original: {}, Additional: {}, Diminished Additional: {}, Final: {}",
spellInfo->SpellName[0], heal, additionalHeal * totalModifier, scaledAdditionalHeal, heal + scaledAdditionalHeal);
} else {
MpLogger::debug("HEALING: >>> Below Diminishing Threshold for Heal Spell {} - Original: {}, Additional: {}, Final: {}",
spellInfo->SpellName[0], heal, scaledAdditionalHeal, heal + scaledAdditionalHeal);
}
// If this is a heroic instance the additional heal be only slightly increased
InstanceMap* instanceMap = creature->GetMap()->ToInstanceMap();
if (instanceMap && (instanceMap->IsHeroic() || instanceMap->Is25ManRaid())) {
scaledAdditionalHeal = scaledAdditionalHeal * 1.15f;
}
// Return original heal + scaled additional heal (with potential diminishing returns)
return heal + scaledAdditionalHeal;
}
void MythicPlus::GroupReset(Group* /*group*/, Map* /* map */) {
// Stubbed out for later implementation
}
bool MythicPlus::IsFinalBoss(Creature* creature) {
std::array<uint32, 128> finalBosses = {
// --- WoW Classic Dungeons ---
@@ -638,46 +802,87 @@ float GetTypeHealthModifier(int32 Rank)
// This takes the orignal health and scales flat based on the factor then applies the configuration modifier from the conf file
uint32 CalculateNewHealth(Creature* creature, CreatureTemplate const* cInfo, uint32 mapId, MpDifficulty difficulty, uint32 origHealth, float confHPMod)
{
//
int32 rank = 0;
if(cInfo && cInfo->rank > 0) {
rank = cInfo->rank;
}
// These Factors that increase or decrease health based on different settings applied to the creature
// Health Variation is used to create some random element to HP so not all creatures of the same level
// have the same HP for more variety.
float healthVariation;
// if(creature->IsPet() || creature->IsSummon() || creature->IsTotem()) {
// return origHealth;
// }
// This is the fine grained hpScaleFactor set for the instance (and/or) creature overrides in the database.
int32 hpScaleFactor = sMpDataStore->GetHealthScaleFactor(mapId, difficulty);
// Add some variance to the healthpool so enemies are not all the same
if(creature->IsDungeonBoss() || creature->GetEntry() == HEADLESS_HORSEMAN || creature->isWorldBoss()) { // Is a boss of some kind
healthVariation = frand(1.1f, 1.2f);
} else if(creature->isElite() || cInfo->rank == CREATURE_ELITE_RARE) { // Is Elite Mob
healthVariation = frand(1.0f, 1.10f);
hpScaleFactor *= 0.90;
} else if(creature->IsSummon() || creature->IsPet() || creature->IsTotem()) { // Is a pet or summon
if(creature->IsDungeonBoss() || creature->isWorldBoss() || creature->isElite() || cInfo->rank == CREATURE_ELITE_RARE) {
healthVariation = frand(1.0f, 1.15f);
} else { // This addresses Normals and other trash from getting to big a HP bonus
healthVariation = frand(1.0f, 1.05f);
hpScaleFactor *= 0.65;
} else {
hpScaleFactor *= 0.50;
}
// Add in special overrides here as necessary:
if(creature->GetEntry() == HEADLESS_HORSEMAN) {
healthVariation = frand(1.0f, 1.1f);
hpScaleFactor *= 0.55;
}
float unitTypeMod = GetTypeHealthModifier(rank);
uint32 basehp = uint32(std::ceil(origHealth * unitTypeMod * healthVariation));
uint32 basehp;
// Only apply unitTypeMod for non-normal enemies
if (rank != CREATURE_ELITE_NORMAL) {
basehp = uint32(std::ceil(origHealth * healthVariation * unitTypeMod));
} else {
basehp = uint32(std::ceil(origHealth * healthVariation));
}
// if it is a heroic instance give the enemy an additional 20% boost
InstanceMap* instanceMap = creature->GetMap()->ToInstanceMap();
if (instanceMap && instanceMap->IsRaidOrHeroicDungeon()) {
basehp *= 1.25f;
}
/**
* @brief Calculating the final creature health encompasses all the potential modifiers
* CreatureTemplate.HealthModifier (ModHealth) - Creatures that are capable of being in a Heroic instance get a boost here
* even though they are the same. In this case we allow
*
* hpScaleFactor: allows to tweak the bonus modifier more directly at a creature or instance level, since
* you can not override it in cInfo directly as it is loaded statically from database
*
* confHPMod: is from the mythic settings directly.
*/
if(cInfo->ModHealth > 0.0f) {
return uint32(basehp * (cInfo->ModHealth + hpScaleFactor) * confHPMod);
} else {
return uint32(basehp * (hpScaleFactor) * confHPMod);
return uint32(basehp * hpScaleFactor * confHPMod);
}
}
// Calculates a logarithmic growth curve using scaling factor of percentages increase 50 = 1.5, 100 = 2.0,... this allows for fine grain tuning per instance.
float CalculateScaling(int levelDifference, float scaleFactor, float constant, float growthFactor) {
float scaling = constant * std::pow(2.0f, levelDifference / growthFactor) * (1 + (scaleFactor / 100.0f));
// Calculates a balanced growth curve that provides good scaling across all level ranges
float CalculateScaling(int levelDifference, float scaleFactor, float constant, float /*growthFactor*/) {
float levelMultiplier;
if (levelDifference <= 0) {
// High-level creatures need a minimum boost
levelMultiplier = 1.5f; // Minimum 50% boost for near-level or higher creatures
} else if (levelDifference <= 10) {
// Moderate scaling for small level differences
levelMultiplier = 1.5f + (levelDifference * 0.2f); // 1.5x to 3.5x
} else if (levelDifference <= 30) {
// Higher scaling for medium level differences
levelMultiplier = 3.5f + ((levelDifference - 10) * 0.15f); // 3.5x to 6.5x
} else {
// Cap extreme scaling for very low level creatures
levelMultiplier = 6.5f + std::min((levelDifference - 30) * 0.05f, 3.5f); // Cap at 10x
}
float scaling = constant * levelMultiplier * (1 + (scaleFactor / 100.0f));
return scaling;
}
@@ -699,4 +904,3 @@ float GetTypeDamageModifier(int32 Rank)
return sWorld->getRate(RATE_CREATURE_ELITE_ELITE_DAMAGE);
}
}

View File

@@ -69,10 +69,20 @@ public:
uint32 legendaryItemOffset;
uint32 ascendantItemOffset;
// Scaling modifiers
// Scaling modifiers (Deprecated)
uint32 meleeAttackPowerDampener;
uint32 meleeAttackPowerStart;
// Spell Damage Diminishing Returns
float diminishingExponent;
std::unordered_map<MpDifficulty, uint32> diminishingThresholds;
// Specialized variables used in calculations
float elementalMeleeReducer;
float normalEnemyReducer;
float nonCreatureSpellReducer;
enum MP_UNIT_EVENT_TYPE
{
UNIT_EVENT_MELEE,
@@ -132,6 +142,12 @@ public:
// This scales a heal spell up based on the how much % the original heal spell was
int32 ScaleHealSpell(SpellInfo const * spellInfo, uint32 heal, MpCreatureData* creatureData, Creature* creature, Creature* target, float healMultiplier);
// Calculate spell damage based on player health pools
int32 CalculateSpellDamage(uint32 baseDamage, int originalLevel, int targetLevel);
// Calculate heal scaling based on creature health percentages
int32 CalculateHealScaling(uint32 baseHeal, uint32 originalHealth, uint32 currentMaxHealth);
static bool IsFinalBoss(Creature* creature);
static void GroupReset(Group* group, Map* map);
@@ -146,6 +162,8 @@ float CalculateScaling(int levelDifference, float scaleFactor, float constant =
uint32 CalculateNewHealth(Creature* creature, CreatureTemplate const* cInfo, uint32 mapId, MpDifficulty difficulty, uint32 origHealth, float confHPMod);
float CalculateNewBaseDamage(CreatureTemplate const* cInfo, uint32 mapId, MpDifficulty difficulty, float origDamage);
#define sMythicPlus MythicPlus::instance()
#endif // MYTHICPLUS_H

View File

@@ -1,5 +1,6 @@
#include "MpScheduler.h"
#include "MpLogger.h"
#include "Spells/AdvancmentSpells.cpp"
// Creature Overrides
enum {
@@ -8,7 +9,6 @@ enum {
// This adds schedulers for use across scripts scoped to MythicPlus
void Add_MP_Schedulers() {
MpLogger::debug("Add_MP_Schedulers()");
new MpScheduler_WorldScript();
}
@@ -23,20 +23,25 @@ void Add_MP_UnitScripts();
void Add_MP_WorldScripts();
void Add_MP_PlayerMessageEvents();
// Spell Scripts
void AddSC_AdvancementSpells();
void Addmod_mythic_plusScripts() {
Add_MP_AllCreatureScripts();
Add_MP_AllMapScripts();
Add_MP_CommandScripts();
Add_MP_GlobalScripts();
// Add_MP_GroupScripts();
Add_MP_PlayerScripts();
Add_MP_UnitScripts();
Add_MP_WorldScripts();
Add_MP_Schedulers();
Add_MP_PlayerMessageEvents();
// new Ragefire_Bazzalan_Mythic();
// Spell Scripts
AddSC_AdvancementSpells();
// new Ragefire_Bazzalan_Mythic();
// Add_MP_GroupScripts();
// list of boss / creature event handlers
// new Ragefire_Bazzalan_Mythic(RAGEFIRE_BAZZALAN);

View File

@@ -7,6 +7,9 @@
class MythicPlus_AllCreatureScript : public AllCreatureScript
{
private:
std::unordered_map<ObjectGuid, uint32> m_creatureUpdateTimers;
public:
MythicPlus_AllCreatureScript() : AllCreatureScript("MythicPlus_AllCreatureScript") {}
@@ -14,9 +17,89 @@ public:
// {
// }
// void OnAllCreatureUpdate(Creature* creature, uint32 diff) override
// {
// }
void OnCreatureRespawn(Creature* creature)
{
Map* map = creature->GetMap();
if (!sMythicPlus->IsMapEligible(map)) {
return;
}
if (!sMythicPlus->IsCreatureEligible(creature)) {
return;
}
// If we have instance data, scale the creature, otherwise add it to be scaled later
if (MpInstanceData* instanceData = sMpDataStore->GetInstanceData(map->GetId(), map->GetInstanceId())) {
sMythicPlus->AddScaledCreature(creature, instanceData);
} else {
sMythicPlus->AddCreatureForScaling(creature);
}
}
/**
* @brief This hook runs every update for all creatures in the world.
* We only need to concern ourselves with creatures in the scope of our mythic+ instances.
* Need to detect the following changes:
* - Creature Death State - to trigger respawn scaling.
* - Other events where a creature enters the instance that is not scaled, then should be scaled up. Some special events normal enemies will be scripted
* to show up in encounters these will not trigger the OnCreatureAddWorld, because they were not during the initial load of the instance. (Though sometimes summons do trigger this?)
*
* @param creature
* @param diff
*/
void OnAllCreatureUpdate(Creature* creature, uint32 diff) override
{
// Skip any creatures not in an instance we are scaling first to avoid unnecessary work
if (!sMythicPlus->IsMapEligible(creature->GetMap())) {
return;
}
if (!sMythicPlus->IsCreatureEligible(creature)) {
return;
}
// throttle this check per creature to only run if more than 20ms has passed since last check
ObjectGuid creatureGuid = creature->GetGUID();
m_creatureUpdateTimers[creatureGuid] += diff;
if(m_creatureUpdateTimers[creatureGuid] < 20) {
return;
}
m_creatureUpdateTimers[creatureGuid] = 0;
auto instanceData = sMpDataStore->GetInstanceData(creature->GetMapId(), creature->GetInstanceId());
// no instance data yet means dont scale.
if(!instanceData) {
return;
}
MpCreatureData* creatureData = sMpDataStore->GetCreatureData(creature->GetGUID());
// this is a creature that was not scaled at instance load time, we need to scale it now.
if(!creatureData) {
MpLogger::debug("OnAllCreatureUpdate: Unknown Creature Add event scaling creature: {}", creature->GetName());
sMythicPlus->AddScaledCreature(creature, sMpDataStore->GetInstanceData(creature->GetMap()->GetId(), creature->GetMap()->GetInstanceId()));
return;
}
DeathState currentState = creature->getDeathState();
// record the death of our scaled creature
if(currentState == DeathState::Corpse && creatureData->lastDeathState != DeathState::Corpse) {
creatureData->lastDeathState = currentState;
return;
}
if(currentState == DeathState::Alive && creatureData->lastDeathState == DeathState::Corpse) {
MpLogger::debug("OnAllCreatureUpdate: Creature Death event scaling creature: {} level: {} guid: {} event: {}", creature->GetName(), creatureData->creature->GetLevel(), creature->GetGUID().ToString(), creature->getDeathState());
if(creature->IsDungeonBoss() || creature->GetEntry() == 23682) {
sMythicPlus->AddScaledCreature(creature, instanceData);
} else {
sMythicPlus->AddScaledCreature(creature, instanceData);
}
}
}
// When a new creature is added into a mythic+ map add it to the list of creatures to scale later.
void OnCreatureAddWorld(Creature* creature) override
@@ -32,6 +115,7 @@ public:
// if we have instance data about zone then just scale the creature otherwise add to be scaled once we do.
MpInstanceData* instanceData = sMpDataStore->GetInstanceData(map->GetId(), map->GetInstanceId());
if(instanceData) {
sMythicPlus->AddScaledCreature(creature, instanceData);
} else {

View File

@@ -1,5 +1,6 @@
#include "Chat.h"
#include "AdvancementMgr.h"
#include "MpDataStore.h"
#include "MythicPlus.h"
#include "MpDataStore.h"
@@ -38,7 +39,8 @@ public:
{"mp", commandTableMain},
{"mythicplus", commandTableMain},
{"mp debug", HandleDebug, SEC_PLAYER, Console::No},
{"mp reload", HandleReload, SEC_GAMEMASTER, Console::No}
{"mp reload", HandleReload, SEC_GAMEMASTER, Console::No},
{"advancement", HandleAdvancement, SEC_PLAYER, Console::No}
};
return commandTable;
@@ -155,7 +157,7 @@ public:
group->SetDungeonDifficulty(DUNGEON_DIFFICULTY_NORMAL);
}
else {
handler->PSendSysMessage("|cFFFF0000 Invalid difficulty level. Expected values are 'mythic', 'legendary', or 'ascendant'.");
handler->PSendSysMessage("|cFFFF0000 Invalid difficulty level. Expected values are 'normal', 'heroic', 'mythic', 'legendary', or 'ascendant'.");
return true;
}
@@ -186,14 +188,11 @@ public:
Map* map = player->GetMap();
uint32 mapId = player->GetMapId();
std::string status = Acore::StringFormat(
"Mythic+ Status:\n"
" Mythic+ Enabled: %s\n"
" Mythic+ Item Rewards: %s\n"
" Mythic+ DeathLimits: %s\n",
sMythicPlus->Enabled ? "Yes" : "No",
sMythicPlus->EnableItemRewards ? "Yes" : "No",
sMythicPlus->EnableDeathLimits ? "Yes" : "No");
std::string status = Acore::StringFormat("Mythic+ Status:\n Mythic+ Enabled: {}\n Mythic+ Item Rewards: {}\n Mythic+ DeathLimits: {}\n",
std::string((sMythicPlus->Enabled) ? "Yes" : "No"),
std::string((sMythicPlus->EnableItemRewards) ? "Yes" : "No"),
std::string((sMythicPlus->EnableDeathLimits) ? "Yes" : "No")
);
if (player->GetGroup()) {
auto groupData = sMpDataStore->GetGroupData(player->GetGroup()->GetGUID());
@@ -204,10 +203,7 @@ public:
scaleFactors = sMpDataStore->GetScaleFactor(mapId, groupData->difficulty);
}
status += Acore::StringFormat(
" Group Difficulty: %u\n"
" Group Deaths: %u\n"
" Scale FactorStr %s\n",
status += Acore::StringFormat(" Group Difficulty: {}\n Group Deaths: {}\n Scale FactorStr {}\n",
(groupData->difficulty) ? groupData->difficulty : 0,
(groupData->GetDeaths(player->GetMapId(), player->GetInstanceId())),
scaleFactors.ToString()
@@ -315,9 +311,9 @@ public:
auto groupData = sMpDataStore->GetGroupData(player->GetGroup()->GetGUID());
if(groupData) {
uint32 value = std::stoi(args[0]);
sMpDataStore->SetDamageScaleFactor(player->GetMapId(), groupData->difficulty, value);
handler->PSendSysMessage(Acore::StringFormat("Melee scale factor set to: %u", value));
float value = std::stof(args[0]);
sMpDataStore->SetMeleeScaleFactor(player->GetMapId(), groupData->difficulty, value);
handler->PSendSysMessage(Acore::StringFormat("Melee scale factor set to: {}", value));
return true;
}
}
@@ -343,9 +339,9 @@ public:
auto groupData = sMpDataStore->GetGroupData(player->GetGroup()->GetGUID());
if(groupData) {
uint32 value = std::stoi(args[0]);
float value = std::stof(args[0]);
sMpDataStore->SetSpellScaleFactor(player->GetMapId(), groupData->difficulty, value);
handler->PSendSysMessage(Acore::StringFormat("Spell scale factor set to: %u", value));
handler->PSendSysMessage(Acore::StringFormat("Spell scale factor set to: {}", value));
return true;
}
}
@@ -371,9 +367,9 @@ public:
auto groupData = sMpDataStore->GetGroupData(player->GetGroup()->GetGUID());
if(groupData) {
uint32 value = std::stoi(args[0]);
float value = std::stof(args[0]);
sMpDataStore->SetHealthScaleFactor(player->GetMapId(), groupData->difficulty, value);
handler->PSendSysMessage(Acore::StringFormat("Health scale factor set to: %u", value));
handler->PSendSysMessage(Acore::StringFormat("Health scale factor set to: {}", value));
return true;
}
}
@@ -382,6 +378,29 @@ public:
return true;
}
static bool HandleAdvancement(ChatHandler* handler)
{
Player* player = handler->GetSession()->GetPlayer();
std::string message = "";
for(int i =0; i < MpAdvancements::MP_ADV_MAX; i++) {
MpPlayerRank* playerRank = sAdvancementMgr->GetPlayerAdvancementRank(player, static_cast<MpAdvancements>(i));
if(!playerRank) {
continue;
}
message += Acore::StringFormat("Your Advancement Bonuses: \n {}: {} bonus: {}", MpAdvancementsToString(static_cast<MpAdvancements>(i)), playerRank->rank, playerRank->bonus);
}
if(message.empty()) {
message = "You have no advancements.";
}
handler->PSendSysMessage(message);
return true;
}
};
void Add_MP_CommandScripts()

View File

@@ -1,5 +1,6 @@
#include "MpLogger.h"
#include "MythicPlus.h"
#include "MpConstants.h"
#include "ScriptMgr.h"
#include "Player.h"
#include "Map.h"
@@ -11,7 +12,7 @@ public:
MythicPlus_GlobalScript() : GlobalScript("MythicPlus_GlobalScript") { }
// This adds the mythic+ item scaling to the loot table for enemies
void OnBeforeDropAddItem(Player const* player, Loot& /*loot*/, bool /*canRate*/, uint16 /*lootMode*/, LootStoreItem* LootStoreItem, LootStore const& store) override {
void OnBeforeDropAddItem(Player const* player, Loot& loot, bool /*canRate*/, uint16 /*lootMode*/, LootStoreItem* LootStoreItem, LootStore const& store) override {
if(LootStoreItem->itemid == 0) {
return;
@@ -44,8 +45,30 @@ public:
// get the item to scale up
ItemTemplate const* origItem = sObjectMgr->GetItemTemplate(LootStoreItem->itemid);
if (!origItem) {
MpLogger::warn("Item not found for itemid {} in OnBeforeDropAddItem()", LootStoreItem->itemid);
return;
// If there is not a scaled up item and the item is a below quality green then set an invalid item_id so it is not added to loot
ItemTemplate const* nonMythicItem = sObjectMgr->GetItemTemplate(LootStoreItem->itemid);
if (nonMythicItem->Quality < 2) {
LootStoreItem->itemid = 0;
return;
}
// otherwise roll a chance to see a shadowy remains item is provided instead only if there is not already a shadowy remains item on the corpse
bool hasShadowyRemains = false;
for (auto& item : loot.items) {
if(item.itemid == MpConstants::SHADOWY_REMAINS) {
hasShadowyRemains = true;
break;
}
}
if (!hasShadowyRemains) {
LootStoreItem->itemid = MpConstants::SHADOWY_REMAINS;
return;
} else {
LootStoreItem->itemid = 0;
return;
}
}
uint32 newItemId = origItem->ItemId + mythicSettings->itemOffset;

View File

@@ -7,6 +7,7 @@
#include "ScriptMgr.h"
#include "TaskScheduler.h"
#include "AdvancementMgr.h"
#include "Formulas.h"
class MythicPlus_PlayerScript : public PlayerScript
{
@@ -39,13 +40,13 @@ public:
MpGroupData *data = sMpDataStore->GetGroupData(player->GetGroup());
if (!data) {
MpLogger::warn("Missin group data for player {}", player->GetName());
MpLogger::warn("Missing group data for player {}", player->GetName());
return;
}
MpPlayerData *playerData = sMpDataStore->GetPlayerData(player->GetGUID());
if (!playerData) {
MpLogger::warn("Missin player data for player {}", player->GetName());
MpLogger::warn("Missing player data for player {}", player->GetName());
return;
}
@@ -108,17 +109,107 @@ public:
// // ChatHandler::BuildChatPacket(data, CHAT_MSG_RAID_BOSS_EMOTE, LANG_UNIVERSAL, nullptr, player, message);
// // player->GetSession()->SendPacket(&data);
// }
// map->ToInstanceMap()->Reset(0);
// );
// }
}
void OnBeforeLootMoney(Player* player, Loot* loot) override
{
if (!loot->sourceWorldObjectGUID.IsCreature()) return;
Creature* creature = player->GetMap()->GetCreature(loot->sourceWorldObjectGUID);
if (!creature) return;
#ifdef NPC_BOT
if(creature->IsNPCBotOrPet()) {
return;
}
#endif
// Check if this is a Mythic+ scaled creature
MpCreatureData* creatureData = sMpDataStore->GetCreatureData(creature->GetGUID());
if (!creatureData || !creatureData->IsScaled()) return;
// Different gold ranges based on creature rank
uint32 bossMinGold = 10000;
uint32 bossMaxGold = 13500;
uint32 minGold, maxGold;
// Determine gold range based on creature rank
if (creature->isWorldBoss() || creature->IsDungeonBoss())
{
// Boss: full range
minGold = bossMinGold;
maxGold = bossMaxGold;
}
else if (creature->GetCreatureTemplate()->rank == CREATURE_ELITE_RARE ||
creature->GetCreatureTemplate()->rank == CREATURE_ELITE_ELITE)
{
// Elite: 70% of boss range
minGold = uint32(bossMinGold * 0.7f);
maxGold = uint32(bossMaxGold * 0.7f);
}
else
{
// Normal: 40% of boss range
minGold = uint32(bossMinGold * 0.4f);
maxGold = uint32(bossMaxGold * 0.4f);
}
// Generate random gold amount in appropriate range
uint32 newGold = urand(minGold, maxGold);
// Apply server money rate
newGold = uint32(newGold * sWorld->getRate(RATE_DROP_MONEY));
loot->gold = newGold;
}
void OnGiveXP(Player* player, uint32& amount, Unit* victim, uint8 xpSource) override
{
if (xpSource != XPSOURCE_KILL || !victim) return;
Creature* creature = victim->ToCreature();
if (!creature) return;
#ifdef NPC_BOT
if(creature->IsNPCBotOrPet()) {
return;
}
#endif
// Check if this is a Mythic+ scaled creature
MpCreatureData* creatureData = sMpDataStore->GetCreatureData(creature->GetGUID());
if (!creatureData || !creatureData->IsScaled()) return;
// Recalculate XP using scaled level instead of original level
uint32 newBaseXP = Acore::XP::BaseGain(
player->GetLevel(),
creature->GetLevel(), // This is now the scaled level
GetContentLevelsForMapAndZone(creature->GetMapId(), creature->GetZoneId())
);
// Apply same modifiers as original calculation
float xpMod = 1.0f;
if (creature->isElite()) {
xpMod *= creature->GetMap()->IsDungeon() ? 2.75f : 2.0f;
}
xpMod *= creature->GetCreatureTemplate()->ModExperience;
amount = uint32(newBaseXP * xpMod * 1.5f); // flat bonus modifier for mythic dungeons
}
void OnLogin(Player* player) override
{
MpLogger::info("Player {} logged in", player->GetName());
// Load the player advancement data for the player when they login
int32 size = sAdvancementMgr->LoadPlayerAdvancements(player);
MpLogger::info("Loaded {} player advancements for player {}", size, player->GetName());
sAdvancementMgr->LoadPlayerAdvancements(player);
// Cast all unique advancement spells
for(uint32 i = 1; i <= 10; ++i) {
uint32 spellId = 80000000 + i;
MpLogger::info("Casting spell {} to player {}", spellId, player->GetName());
player->AddAura(spellId, player);
}
}
// When a player is bound to an instance need to make sure they are saved in the data soure to retrieve later.

View File

@@ -2,12 +2,251 @@
#include "Player.h"
#include "MythicPlus.h"
#include "ScriptMgr.h"
#include "SpellAuraEffects.h"
class MythicPlus_UnitScript : public UnitScript
{
public:
MythicPlus_UnitScript() : UnitScript("MythicPlus_UnitScript", true) { }
private:
/**
* Handles damage from non-creature sources (GameObjects, Players, etc.)
* @tparam DamageType Type of damage (int32/float)
* @param target Target of the damage
* @param attacker The non-creature attacker (passed by reference and may be modified)
* @param damage Reference to damage value (will be modified)
* @param spellInfo The spell being cast
* @param eventType Type of event (spell/melee/etc)
*/
template<typename DamageType>
void HandleNonCreatureAttacker(Unit* target, Unit*& attacker, DamageType& damage,
SpellInfo const* spellInfo, MythicPlus::MP_UNIT_EVENT_TYPE eventType)
{
Map* map = target ? target->GetMap() : nullptr;
std::string attackerType = "nullptr";
std::string attackerName = "unknown";
uint32 entry = 0;
if (attacker) {
if (attacker->GetTypeId() == TYPEID_GAMEOBJECT) {
attackerType = "GameObject";
if (GameObject* go = attacker->ToGameObject()) {
entry = go->GetEntry();
if (GameObjectTemplate const* goInfo = go->GetGOInfo()) {
attackerName = goInfo->name;
}
}
} else if (attacker->GetTypeId() == TYPEID_PLAYER) {
attackerType = "Player";
attackerName = attacker->GetName();
} else if (attacker->GetTypeId() == TYPEID_UNIT) {
attackerType = "Unit (non-creature)";
attackerName = attacker->GetName();
} else {
attackerType = "Unknown Type";
}
}
// Try to find a creature attacker from target's attackers list if we have one use it for scaling
Unit::AttackerSet const& attackers = target ? target->getAttackers() : Unit::AttackerSet();
if (!attackers.empty()) {
attacker = *attackers.begin();
if (Creature* creatureAttacker = attacker->ToCreature()) {
if (MpCreatureData* creatureData = sMpDataStore->GetCreatureData(creatureAttacker->GetGUID())) {
damage = static_cast<DamageType>(modifyIncomingDmgHeal(eventType, target, creatureAttacker,
static_cast<uint32>(damage), spellInfo)) * sMythicPlus->nonCreatureSpellReducer;
return;
}
} else {
MpLogger::debug("====== SPELL SCALING: Non-Creature attacker - Name: {}, Spell: {}({}), Damage: {}",
attackerName,
spellInfo ? spellInfo->SpellName[0] : "No Spell",
spellInfo ? spellInfo->Id : 0,
damage);
if (map) {
if (MpInstanceData* instanceData = sMpDataStore->GetInstanceData(map->GetId(), map->GetInstanceId())) {
damage = static_cast<DamageType>(damage * instanceData->creature.spell * sMythicPlus->nonCreatureSpellReducer);
return;
}
}
}
}
// Fallback to instance-based scaling if we can't find a nearest creature
else if (map) {
if (MpInstanceData* instanceData = sMpDataStore->GetInstanceData(map->GetId(), map->GetInstanceId())) {
damage = static_cast<DamageType>(damage * instanceData->creature.spell * sMythicPlus->nonCreatureSpellReducer);
return;
}
}
// Default scaling if no specific handler applied
return;
}
// Helper function to determine if a spell scales with Attack Power
bool IsAttackPowerScalingSpell(SpellInfo const* spellInfo) {
if (!spellInfo || spellInfo->Effects.empty()) {
return false;
}
auto mainEffect = spellInfo->Effects[0];
// Check 1: Direct weapon damage effects
bool isWeaponEffect = (mainEffect.Effect == SPELL_EFFECT_WEAPON_DAMAGE ||
mainEffect.Effect == SPELL_EFFECT_WEAPON_DAMAGE_NOSCHOOL ||
mainEffect.Effect == SPELL_EFFECT_NORMALIZED_WEAPON_DMG ||
mainEffect.Effect == SPELL_EFFECT_WEAPON_PERCENT_DAMAGE);
// Check 2: Damage class indicates melee/ranged (scales with AP)
bool isMeleeOrRanged = (spellInfo->DmgClass == SPELL_DAMAGE_CLASS_MELEE ||
spellInfo->DmgClass == SPELL_DAMAGE_CLASS_RANGED);
// Check 3: Requires weapon equipment
bool requiresWeapon = (spellInfo->EquippedItemClass == ITEM_CLASS_WEAPON);
// Check 4: Specific spell families known to scale with AP
bool isKnownAPSpell = false;
if (spellInfo->SpellFamilyName == SPELLFAMILY_ROGUE) {
// Rogue poisons and weapon-based abilities
isKnownAPSpell = (spellInfo->SpellFamilyFlags[0] & 0x10000) || // Deadly Poison flag
(spellInfo->SpellFamilyFlags[1] & 0x80000); // Other poison flags
}
// Return true if any indicator suggests AP scaling
return (isWeaponEffect || isMeleeOrRanged || requiresWeapon || isKnownAPSpell);
}
/**
* @brief This functions processes spell damage for DOTs and Direct Damage Spells it
* handles special cases for Melee scaling spells and AP scaling spells also so they
* are not scaled up twice and murder all my friends
*
* @tparam DamageType
* @param target
* @param attacker
* @param damage
* @param spellInfo
* @param eventType
* @param logPrefix
*/
template<typename DamageType>
void ProcessSpellDamage(Unit* target, Unit* attacker, DamageType& damage, SpellInfo const* spellInfo, MythicPlus::MP_UNIT_EVENT_TYPE eventType, const std::string& logPrefix) {
if(damage == 0) {
return;
}
// If this is a special case where the attacker is not a creature
if (!attacker || !attacker->ToCreature()) {
return HandleNonCreatureAttacker(target, attacker, damage, spellInfo, eventType);
}
Creature* creatureCaster = attacker->ToCreature();
MpCreatureData* creatureData = sMpDataStore->GetCreatureData(creatureCaster->GetGUID());
if (!creatureCaster) {
MpLogger::error("Creature caster is null in map {}", attacker ? attacker->GetMap()->GetId() : 0);
return;
}
if (!creatureData) {
MpLogger::error("Failed to get creature data for {} in map {}", creatureCaster->GetName(), attacker ? attacker->GetMap()->GetId() : 0);
return;
}
// Check if this spell scales with Attack Power
if (IsAttackPowerScalingSpell(spellInfo)) {
// need another special case here to determine if a spell was not scaled up by AP meaning the incoming damage is close to the
// original effect of the spell and therefore should instead use spell effect scaling it should be no more than 15% of the original effect
bool notScaledByAP = false;
if (spellInfo && !spellInfo->Effects.empty()) {
int32 baseEffect = spellInfo->Effects[0].CalcValue(attacker, nullptr, nullptr);
if (damage <= (baseEffect * 1.15f)) {
// MpLogger::debug(">>>> MELEE SPELL SCALING: Spell {} (ID: {}) is not scaled by AP damage: {} vs originalEffect: {}",
// spellInfo->SpellName[0], spellInfo->Id, damage, baseEffect);
notScaledByAP = true;
}
} else {
// If we can't determine the base effect, default to treating it as not AP-scaled
notScaledByAP = true;
// MpLogger::debug(">>>> MELEE SPELL SCALING: Could not determine base effect for spell, defaulting to spell scaling");
}
// if the effect type of the spell is not physical (aka not mitigated by armor/defense) then it needs to instead have the typical
// spell damage multiplier applied instead of melee damage scaling
if (! notScaledByAP && (spellInfo->SchoolMask == SPELL_SCHOOL_NORMAL || spellInfo->SchoolMask == SPELL_SCHOOL_MASK_NORMAL)) {
uint32 meleeDamage = static_cast<uint32>(std::max(0, static_cast<int32>(damage)));
damage = modifyIncomingDmgHeal(MythicPlus::UNIT_EVENT_MELEE, target, attacker, meleeDamage);
// MpLogger::debug(">>MELEE SPELL SCALING: {} hits with spell: {} ID: {} meleeDamage: {} damage: {}", attacker->GetName(), spellInfo->SpellName[0], spellInfo->Id, meleeDamage, damage);
} else {
// get the creatures original attack power
SpellEffectInfo const& effect = spellInfo->Effects[0];
uint32 spellDmg = static_cast<uint32>(effect.CalcValue(attacker, nullptr, nullptr) * effect.CalcDamageMultiplier(attacker, nullptr));
// now take the original attack power * 0.08 and add it to the spell damage
uint32 apDmg = static_cast<uint32>(creatureData->originalStats->AttackPower * 0.10f);
uint32 finalDmg = spellDmg + apDmg;
// MpLogger::debug(">> AP BASED DAMAGE Scaledown: origDamage: {} | spellDmg: {} | apDmg: {} | finalDmg: {}", static_cast<int32>(damage), spellDmg, apDmg, finalDmg);
damage = modifyIncomingDmgHeal(MythicPlus::UNIT_EVENT_SPELL, target, attacker, finalDmg, spellInfo);
// need to take into consideration if this is a stacking spell and multiply the final damage by the number of stacks
if(spellInfo->AttributesEx3 & SPELL_ATTR3_DOT_STACKING_RULE) {
Aura* aura = target->GetAura(spellInfo->Id, attacker->GetGUID());
uint32 stacks = aura ? aura->GetStackAmount() : 1;
if(aura) {
damage *= stacks;
}
}
}
return;
}
// Reverse the CalcValue scaling to get original base damage
int32 originalDamage = static_cast<int32>(damage);
if (creatureCaster && creatureData && creatureData->originalLevel < 70) {
CreatureTemplate const* cInfo = creatureCaster->GetCreatureTemplate();
// Get the scaling factors used in CalcValue
CreatureBaseStats const* pCBS = sObjectMgr->GetCreatureBaseStats(creatureCaster->GetLevel(), creatureCaster->getClass());
float CBSPowerCreature = pCBS->BaseDamage[cInfo->expansion];
uint32 tempLevel = spellInfo->SpellLevel;
if(tempLevel == 0) {
tempLevel = creatureData->originalLevel;
}
CreatureBaseStats const* spellCBS = sObjectMgr->GetCreatureBaseStats(tempLevel, creatureCaster->getClass());
float CBSPowerSpell = spellCBS->BaseDamage[cInfo->expansion];
// MpLogger::debug("SPELL SCALING: Creature Lvl {} -> {} | Spell Lvl {} | tempLevel: {} | CBSPowerCreature: {} CBSPowerSpell: {}",
// creatureData->originalLevel, creatureCaster->GetLevel(), tempLevel, CBSPowerCreature, CBSPowerSpell);
// Reverse the CalcValue scaling: originalDamage = scaledDamage / (CBSPowerCreature / CBSPowerSpell)
if (CBSPowerCreature > 0.0f) {
originalDamage = static_cast<int32>(static_cast<int32>(damage) * (CBSPowerSpell / CBSPowerCreature));
// MpLogger::debug("SPELL SCALING: Reversed CalcValue scaling - Scaled: {} -> Original: {} (Factor: {:.2f})",
// damage, originalDamage, CBSPowerSpell / CBSPowerCreature);
}
}
// Apply Mythic+ scaling to the original base damage
damage = static_cast<DamageType>(modifyIncomingDmgHeal(eventType, target, attacker, static_cast<uint32>(originalDamage), spellInfo));
}
public:
void ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage, SpellInfo const* spellInfo) override {
if (!target && !attacker) {
return;
@@ -32,16 +271,20 @@ public:
}
}
if(isHot) {
damage = modifyIncomingDmgHeal(MythicPlus::UNIT_EVENT_HOT, target, attacker, damage, spellInfo);
} else {
damage = modifyIncomingDmgHeal(MythicPlus::UNIT_EVENT_DOT, target, attacker, damage, spellInfo);
ProcessSpellDamage(target, attacker, damage, spellInfo, MythicPlus::UNIT_EVENT_DOT, "DOT DAMAGE");
}
}
void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage, SpellInfo const* spellInfo) override {
if (!target && !attacker) {
if(spellInfo) {
// MpLogger::info("ModifySpellDamageTaken: Target and attacker are null for spell: {} ID: {}", spellInfo->SpellName[0], spellInfo->Id);
}
return;
}
@@ -50,11 +293,17 @@ public:
return;
}
if(sMythicPlus->EligibleDamageTarget(target)) {
MpLogger::debug("ModifySpellDamageTaken: {} hits {} with spell: {}", attacker->GetName(), target->GetName(), spellInfo->SpellName[0]);
if(!sMythicPlus->EligibleDamageTarget(target)) {
if(spellInfo) {
// MpLogger::info("ModifySpellDamageTaken: Target is not eligible for spell: {} ID: {}", spellInfo->SpellName[0], spellInfo->Id);
}
return;
}
damage = modifyIncomingDmgHeal(MythicPlus::UNIT_EVENT_SPELL, target, attacker, damage, spellInfo);
// MpLogger::debug("ModifySpellDamageTaken: {} hits {} with spell: {} ID: {}", attacker ? attacker->GetName() : "[null]", target ? target->GetName() : "[null]", spellInfo ? spellInfo->SpellName[0] : "[no spell]", spellInfo ? spellInfo->Id : 0);
// Use the generic ProcessSpellDamage function
ProcessSpellDamage(target, attacker, damage, spellInfo, MythicPlus::UNIT_EVENT_SPELL, "SPELL DAMAGE");
}
/**
@@ -90,6 +339,7 @@ public:
uint32 modifyIncomingDmgHeal(MythicPlus::MP_UNIT_EVENT_TYPE eventType,Unit* target, Unit* attacker, uint32 damageOrHeal, SpellInfo const* spellInfo = nullptr) {
if (!target && !attacker) {
// MpLogger::info("modifyIncomingDmgHeal: Target and attacker are null for event {}", eventType);
return damageOrHeal;
}
@@ -105,7 +355,7 @@ public:
}
#if defined(MOD_PRESENT_NPCBOTS)
if (attacker && attacker->IsNPCBot()) {
if (attacker && attacker->IsNPCBotOrPet()) {
return damageOrHeal;
}
#endif
@@ -148,34 +398,42 @@ public:
*/
switch (eventType) {
case MythicPlus::UNIT_EVENT_MELEE:
if(creature->IsDungeonBoss() || creature->GetEntry() == 23682) {
// Damage that is not mitigated by armor needs to be debuffed as it hits too hard and without resists
// it hits too hard give everyone a benefit of 30% armor reduction
MpLogger::debug(">>> Modify Melee Damage: Creature Name: {} alteredDmgHeal: {} School Mask: {}", creature->GetName(), alteredDmgHeal, creature->GetMeleeDamageSchoolMask());
if(creature->GetMeleeDamageSchoolMask() != SPELL_SCHOOL_MASK_NORMAL && creature->GetMeleeDamageSchoolMask() != SPELL_SCHOOL_MASK_NONE) {
damageOrHeal = damageOrHeal * 0.50f;
}
if(creature->IsDungeonBoss() || creature->isWorldBoss() || creature->GetEntry() == 23682) {
alteredDmgHeal = damageOrHeal * instanceData->boss.melee;
} else {
alteredDmgHeal = damageOrHeal * instanceData->creature.melee;
}
MpLogger::debug("Incoming Melee New Damage: {}({}) {} hits {}", alteredDmgHeal, damageOrHeal, attacker->GetName(), target->GetName());
// MpLogger::debug(">>>>>>>>>>>> Incoming Melee New Damage: {}({}) {} hits {}", alteredDmgHeal, damageOrHeal, attacker->GetName(), target->GetName());
break;
case MythicPlus::UNIT_EVENT_DOT:
case MythicPlus::UNIT_EVENT_SPELL:
if(creature->IsDungeonBoss() || creature->GetEntry() == 23682) {
if(creature->IsDungeonBoss() || creature->isWorldBoss() || creature->GetEntry() == 23682) {
if(spellInfo) {
// MpLogger::debug("Scaling spell {} using ScaleDamageSpell() Original Damage: {} New Damage: {}", spellInfo->SpellName[0], damageOrHeal, alteredDmgHeal);
alteredDmgHeal = sMythicPlus->ScaleDamageSpell(spellInfo, damageOrHeal, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, target, instanceData->boss.spell);
} else {
alteredDmgHeal = damageOrHeal * instanceData->boss.spell;
// MpLogger::debug("Scaling spell {} using flat modifier Original Damage: {} New Damage: {}", spellInfo->SpellName[0], damageOrHeal, alteredDmgHeal);
}
} else {
if(spellInfo) {
// MpLogger::debug("Scaling spell {} using ScaleDamageSpell() Original Damage: {} New Damage: {}", spellInfo->SpellName[0], damageOrHeal, alteredDmgHeal);
alteredDmgHeal = sMythicPlus->ScaleDamageSpell(spellInfo, damageOrHeal, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, target, instanceData->creature.spell);
} else {
// MpLogger::debug("Scaling spell {} using flat modifier Original Damage: {} New Damage: {}", spellInfo->SpellName[0], damageOrHeal, alteredDmgHeal);
alteredDmgHeal = damageOrHeal * instanceData->creature.spell;
}
}
if(spellInfo) {
MpLogger::debug("Incoming spell New Damage: {}({}) {} hits {} spell: {} ID: {}", alteredDmgHeal, damageOrHeal, attacker->GetName(), target->GetName(), spellInfo->SpellName[0], spellInfo->Id);
} else {
MpLogger::debug("Incoming spell New Damage: {}({}) {} hits {}", alteredDmgHeal, damageOrHeal, attacker->GetName(), target->GetName());
}
break;
case MythicPlus::UNIT_EVENT_HEAL:
case MythicPlus::UNIT_EVENT_HOT:
@@ -189,18 +447,22 @@ public:
if(sMythicPlus->EligibleHealTarget(target) && (eventType == MythicPlus::UNIT_EVENT_HEAL || eventType == MythicPlus::UNIT_EVENT_HOT)) {
if(creature->IsDungeonBoss()) {
if(spellInfo) {
alteredDmgHeal = sMythicPlus->ScaleHealSpell(spellInfo, damageOrHeal, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, attacker->ToCreature(), instanceData->boss.spell);
alteredDmgHeal = sMythicPlus->ScaleHealSpell(spellInfo, damageOrHeal, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, attacker->ToCreature(), instanceData->boss.spell * 0.7f);
} else {
alteredDmgHeal = damageOrHeal * instanceData->boss.spell;
alteredDmgHeal = damageOrHeal * instanceData->boss.spell * 0.7f;
}
} else {
if(spellInfo) {
alteredDmgHeal = sMythicPlus->ScaleHealSpell(spellInfo, damageOrHeal, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, attacker->ToCreature(), instanceData->creature.spell);
alteredDmgHeal = sMythicPlus->ScaleHealSpell(spellInfo, damageOrHeal, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, attacker->ToCreature(), instanceData->creature.spell * 0.7f);
} else {
alteredDmgHeal = damageOrHeal * instanceData->creature.spell;
alteredDmgHeal = damageOrHeal * instanceData->creature.spell * 0.70f;
}
}
MpLogger::debug("Incoming heal: {}({}) {} hits {}", alteredDmgHeal, damageOrHeal, attacker->GetName(), target->GetName());
MpLogger::debug("Incoming heal: {}({}) {} hits {}",
alteredDmgHeal,
damageOrHeal,
attacker ? attacker->GetName() : "[null]",
target ? target->GetName() : "[null]");
}
return alteredDmgHeal > 0 ? alteredDmgHeal : damageOrHeal;

View File

@@ -89,8 +89,17 @@ public:
sMythicPlus->legendaryItemOffset = sConfigMgr->GetOption<uint32>("MythicPlus.Legendary.ItemOffset", 21000000);
sMythicPlus->ascendantItemOffset = sConfigMgr->GetOption<uint32>("MythicPlus.Ascendant.ItemOffset", 22000000);
sMythicPlus->meleeAttackPowerDampener = sConfigMgr->GetOption<uint32>("MythicPlus.MeleeAttackPowerDampener", 2000);
sMythicPlus->meleeAttackPowerStart = sConfigMgr->GetOption<uint32>("MythicPlus.MeleeAttackPowerStart", 10000);
// Get diminishing returns from configuration
sMythicPlus->diminishingExponent = sConfigMgr->GetOption<float>("MythicPlus.DiminishingExponent", 0.975f);
sMythicPlus->diminishingThresholds = {
{MpDifficulty::MP_DIFFICULTY_MYTHIC, sConfigMgr->GetOption<uint32>("MythicPlus.DiminishingThreshold.Mythic", 10000)},
{MpDifficulty::MP_DIFFICULTY_LEGENDARY, sConfigMgr->GetOption<uint32>("MythicPlus.DiminishingThreshold.Legendary", 20000)},
{MpDifficulty::MP_DIFFICULTY_ASCENDANT, sConfigMgr->GetOption<uint32>("MythicPlus.DiminishingThreshold.Ascendant", 40000)}
};
sMythicPlus->elementalMeleeReducer = sConfigMgr->GetOption<float>("MythicPlus.ElementalMeleeReducer", 0.50f);
sMythicPlus->normalEnemyReducer = sConfigMgr->GetOption<float>("MythicPlus.NormalEnemyReducer", 0.50f);
sMythicPlus->nonCreatureSpellReducer = sConfigMgr->GetOption<float>("MythicPlus.NonCreatureSpellReducer", 0.50f);
}
void OnStartup() override
@@ -104,6 +113,9 @@ public:
size = sAdvancementMgr->LoadMaterialTypes();
MpLogger::info("Loaded {} material types...", size);
sMpDataStore->LoadPlayerHealthAvg();
MpLogger::info("Loaded player health averages used for scaling calculations...");
// Registering event handlers for the Mythic+ events from client
MP_Register_EventHandlers();
MpLogger::info("Registered Mythic+ Event Handlers...");

View File

@@ -0,0 +1,277 @@
#include "CreatureScript.h"
#include "MpConstants.h"
#include "PetDefines.h"
#include "Player.h"
#include "AdvancementMgr.h"
#include "MpLogger.h"
#include "SpellAuraEffects.h"
#include "SpellInfo.h"
#include "SpellMgr.h"
#include "SpellScript.h"
#include "SpellScriptLoader.h"
#include "UnitAI.h"
#include "World.h"
class spell_mp_titans_strength_aura : public AuraScript
{
PrepareAuraScript(spell_mp_titans_strength_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_STRENGTH);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Titans Strength to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_titans_strength_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_titans_strength_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
}
};
class spell_mp_steel_forged_aura : public AuraScript
{
PrepareAuraScript(spell_mp_steel_forged_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_STAMINA);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Steel Forged to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_steel_forged_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_steel_forged_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
}
};
class spell_mp_celestial_grace_aura : public AuraScript
{
PrepareAuraScript(spell_mp_celestial_grace_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_SPIRIT);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Celestial Grace to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_celestial_grace_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_celestial_grace_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
}
};
class spell_mp_forbidden_knowledge_aura : public AuraScript
{
PrepareAuraScript(spell_mp_forbidden_knowledge_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_INTELLECT);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Forbidden Knowledge to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_forbidden_knowledge_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_forbidden_knowledge_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
}
};
class spell_mp_spectral_reflexes_aura : public AuraScript
{
PrepareAuraScript(spell_mp_spectral_reflexes_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_AGILITY);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Spectral Reflexes to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_spectral_reflexes_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_spectral_reflexes_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_STAT);
}
};
class spell_mp_eldritch_barrier_aura : public AuraScript
{
PrepareAuraScript(spell_mp_eldritch_barrier_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_RESIST_ARCANE);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Eldritch Barrier to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_eldritch_barrier_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_eldritch_barrier_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
}
};
class spell_mp_hellfire_shielding_aura : public AuraScript
{
PrepareAuraScript(spell_mp_hellfire_shielding_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_RESIST_FIRE);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Hellfire Shielding to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_hellfire_shielding_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_hellfire_shielding_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
}
};
class spell_mp_primal_endurance_aura : public AuraScript
{
PrepareAuraScript(spell_mp_primal_endurance_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_RESIST_NATURE);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Primal Endurance to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_primal_endurance_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_primal_endurance_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
}
};
class spell_mp_lichs_bane_aura : public AuraScript
{
PrepareAuraScript(spell_mp_lichs_bane_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_RESIST_SHADOW);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Lich's Bane to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_lichs_bane_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_lichs_bane_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
}
};
class spell_mp_glacial_fortress_aura : public AuraScript
{
PrepareAuraScript(spell_mp_glacial_fortress_aura);
void HandleEffectCalcAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
Player* player = GetCaster()->ToPlayer();
auto rank = sAdvancementMgr->GetPlayerAdvancementRank(player, MpAdvancements::MP_ADV_RESIST_FROST);
if(!rank) {
amount = 0; // player does not have an advancement
return;
}
amount = static_cast<int32>(rank->bonus);
MpLogger::info("In Calc Amount Advancement Glacial Fortress to Player {} bonus {}", player->GetName(), amount);
}
void Register() override
{
MpLogger::info("Registering spell_mp_glacial_fortress_aura");
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_mp_glacial_fortress_aura::HandleEffectCalcAmount, EFFECT_0, SPELL_AURA_MOD_RESISTANCE);
}
};
void AddSC_AdvancementSpells()
{
RegisterSpellScript(spell_mp_titans_strength_aura);
RegisterSpellScript(spell_mp_steel_forged_aura);
RegisterSpellScript(spell_mp_celestial_grace_aura);
RegisterSpellScript(spell_mp_forbidden_knowledge_aura);
RegisterSpellScript(spell_mp_spectral_reflexes_aura);
RegisterSpellScript(spell_mp_eldritch_barrier_aura);
RegisterSpellScript(spell_mp_hellfire_shielding_aura);
RegisterSpellScript(spell_mp_primal_endurance_aura);
RegisterSpellScript(spell_mp_lichs_bane_aura);
RegisterSpellScript(spell_mp_glacial_fortress_aura);
}

View File

@@ -1,70 +0,0 @@
// #include "CreatureScript.h"
// #include "PetDefines.h"
// #include "Player.h"
// #include "MpLogger.h"
// #include "SpellAuraEffects.h"
// #include "SpellInfo.h"
// #include "SpellMgr.h"
// #include "SpellScript.h"
// #include "SpellScriptLoader.h"
// #include "UnitAI.h"
// #include "World.h"
// class spell_mp_toughness_aura : public AuraScript
// {
// PrepareAuraScript(spell_mp_toughness_aura);
// void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
// {
// Player* player = GetTarget()->ToPlayer();
// if (!player)
// return;
// MpLogger::info("Applying Advancement Toughness to Player {}", player->GetName());
// if (Unit* caster = GetCaster())
// {
// if (caster->IsPlayer())
// {
// Player* player = caster->ToPlayer();
// // Add 500 Strength
// player->HandleStatModifier(UNIT_MOD_STAT_STRENGTH, TOTAL_VALUE, 500, true);
// // Apply red glow visual effect
// caster->SendPlaySpellVisual(11674); // Visual ID 11674 for red glow
// }
// }
// }
// void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
// {
// LOG_INFO("server.worldserver", "spell_custom_red_glow_strength_aura::HandleEffectRemove");
// if (Unit* caster = GetCaster())
// {
// if (caster->IsPlayer())
// {
// Player* player = caster->ToPlayer();
// // Remove 500 Strength
// player->HandleStatModifier(UNIT_MOD_STAT_STRENGTH, TOTAL_VALUE, 500, false);
// }
// }
// }
// void Register() override
// {
// LOG_INFO("server.worldserver", "spell_custom_red_glow_strength_aura::Register");
// OnEffectApply += AuraEffectApplyFn(spell_custom_red_glow_strength_aura::HandleEffectApply, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_REAL);
// OnEffectRemove += AuraEffectRemoveFn(spell_custom_red_glow_strength_aura::HandleEffectRemove, EFFECT_0, SPELL_AURA_MOD_STAT, AURA_EFFECT_HANDLE_REAL);
// }
// };
// void AddSC_spell_custom_red_glow_strength_aura()
// {
// // LOG_INFO("server.loading", "Registering spell custom_red_glow_strength_aura");
// RegisterSpellScript(spell_custom_red_glow_strength_aura);
// }