From d9633dfee47dfa4970d1b76894a0268432cd9749 Mon Sep 17 00:00:00 2001 From: Uleat Date: Mon, 20 Feb 2017 21:41:15 -0500 Subject: [PATCH] Bard bot song twisting update --- changelog.txt | 3 + common/spdat.h | 4 +- common/version.h | 2 +- .../sql/git/bots/bots_db_update_manifest.txt | 1 + .../2017_02_20_bots_bard_spell_update.sql | 153 + zone/bot.cpp | 24 +- zone/bot.h | 15 +- zone/bot_command.cpp | 1 - zone/bot_structs.h | 4 + zone/botspellsai.cpp | 4458 ++++++++++++----- zone/groups.cpp | 25 +- 11 files changed, 3482 insertions(+), 1208 deletions(-) create mode 100644 utils/sql/git/bots/required/2017_02_20_bots_bard_spell_update.sql diff --git a/changelog.txt b/changelog.txt index 390c45cd9..23700766c 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,8 @@ EQEMu Changelog (Started on Sept 24, 2003 15:50) ------------------------------------------------------- +== 02/20/2017 == +Uleat: Reworked bard bot spell twisting and updated their spell (song) list + == 01/31/2017 == Uleat: Modifed bot movement behavior in an attempt to 'normalize' it. This is a hack fix and will be revisited at some point. (Probably just need a follow function rather than use movement, when the leader of the follow chain is moving.) diff --git a/common/spdat.h b/common/spdat.h index ba275f933..d4ccd9456 100644 --- a/common/spdat.h +++ b/common/spdat.h @@ -65,8 +65,8 @@ enum SpellTypes : uint32 SpellType_Cure = (1 << 15), SpellType_Resurrect = (1 << 16), SpellType_HateRedux = (1 << 17), - SpellType_InCombatBuffSong = (1 << 18), - SpellType_OutOfCombatBuffSong = (1 << 19), + SpellType_InCombatBuffSong = (1 << 18), // bard in-combat group/ae buffs + SpellType_OutOfCombatBuffSong = (1 << 19), // bard out-of-combat group/ae buffs SpellTypes_Detrimental = (SpellType_Nuke | SpellType_Root | SpellType_Lifetap | SpellType_Snare | SpellType_DOT | SpellType_Dispel | SpellType_Mez | SpellType_Charm | SpellType_Debuff | SpellType_Slow), SpellTypes_Beneficial = (SpellType_Heal | SpellType_Buff | SpellType_Escape | SpellType_Pet | SpellType_InCombatBuff | SpellType_Cure | SpellType_HateRedux | SpellType_InCombatBuffSong | SpellType_OutOfCombatBuffSong), diff --git a/common/version.h b/common/version.h index bda89dd8c..40e50a0ac 100644 --- a/common/version.h +++ b/common/version.h @@ -32,7 +32,7 @@ #define CURRENT_BINARY_DATABASE_VERSION 9105 #ifdef BOTS - #define CURRENT_BINARY_BOTS_DATABASE_VERSION 9009 + #define CURRENT_BINARY_BOTS_DATABASE_VERSION 9010 #else #define CURRENT_BINARY_BOTS_DATABASE_VERSION 0 // must be 0 #endif diff --git a/utils/sql/git/bots/bots_db_update_manifest.txt b/utils/sql/git/bots/bots_db_update_manifest.txt index d63c142c8..44e68f037 100644 --- a/utils/sql/git/bots/bots_db_update_manifest.txt +++ b/utils/sql/git/bots/bots_db_update_manifest.txt @@ -8,6 +8,7 @@ 9007|2016_06_23_bots_camel_case_name_rule.sql|SELECT * FROM `rule_values` WHERE `rule_name` LIKE 'Bots:AllowCamelCaseNames'|empty| 9008|2016_06_28_bots_inventory_charges_update.sql|SELECT * FROM `information_schema`.`COLUMNS` isc WHERE isc.`TABLE_SCHEMA` = DATABASE() AND isc.`TABLE_NAME` = 'bot_inventories' AND isc.`COLUMN_NAME` = 'inst_charges' AND isc.`DATA_TYPE` = 'tinyint'|not_empty| 9009|2017_02_15_bots_bot_spells_entries.sql|SELECT `id` FROM `npc_spells_entries` WHERE `npc_spells_id` >= 701 AND `npc_spells_id` <= 712|not_empty| +9010|2017_02_20_bots_bard_spell_update.sql|SELECT * FROM `bot_spells_entries` WHERE (`type` & 0xFFFF0000) = 0xFFFF0000|empty| # Upgrade conditions: # This won't be needed after this system is implemented, but it is used database that are not diff --git a/utils/sql/git/bots/required/2017_02_20_bots_bard_spell_update.sql b/utils/sql/git/bots/required/2017_02_20_bots_bard_spell_update.sql new file mode 100644 index 000000000..b0161209a --- /dev/null +++ b/utils/sql/git/bots/required/2017_02_20_bots_bard_spell_update.sql @@ -0,0 +1,153 @@ +DELETE FROM `bot_spells_entries` WHERE `npc_spells_id` = '711'; + +INSERT INTO `bot_spells_entries`(`npc_spells_id`,`spellid`,`type`,`minlevel`,`maxlevel`,`manacost`,`recast_delay`,`priority`,`resist_adjust`) VALUES + +-- versioning entry +('711', '0', '4294901760', '0', '0', '-1', '-1', '0', NULL), -- 0xFFFF0000 + +-- nuke +('711', '704', '1', '12', '54', '-1', '-1', '1', NULL), +('711', '1747', '1', '55', '127', '-1', '-1', '1', NULL), + +-- escape +('711', '1749', '16', '60', '127', '-1', '-1', '1', NULL), + +-- dot +('711', '743', '256', '38', '64', '-1', '-1', '1', NULL), +('711', '3367', '256', '65', '69', '-1', '-1', '1', NULL), +('711', '5385', '256', '70', '79', '-1', '-1', '1', NULL), +('711', '14074', '256', '80', '84', '-1', '-1', '1', NULL), +('711', '18059', '256', '85', '89', '-1', '-1', '1', NULL), +('711', '26084', '256', '90', '94', '-1', '-1', '1', NULL), +('711', '29182', '256', '95', '127', '-1', '-1', '1', NULL), +('711', '3566', '256', '50', '62', '-1', '-1', '2', NULL), +('711', '3370', '256', '63', '67', '-1', '-1', '2', NULL), +('711', '5378', '256', '68', '77', '-1', '-1', '2', NULL), +('711', '14071', '256', '78', '82', '-1', '-1', '2', NULL), +('711', '18056', '256', '83', '87', '-1', '-1', '2', NULL), +('711', '26033', '256', '88', '92', '-1', '-1', '2', NULL), +('711', '29128', '256', '93', '127', '-1', '-1', '2', NULL), +('711', '744', '256', '46', '62', '-1', '-1', '3', NULL), +('711', '3373', '256', '63', '66', '-1', '-1', '3', NULL), +('711', '5379', '256', '67', '76', '-1', '-1', '3', NULL), +('711', '14068', '256', '77', '81', '-1', '-1', '3', NULL), +('711', '18053', '256', '82', '86', '-1', '-1', '3', NULL), +('711', '26003', '256', '87', '91', '-1', '-1', '3', NULL), +('711', '29101', '256', '92', '127', '-1', '-1', '3', NULL), +('711', '3567', '256', '42', '60', '-1', '-1', '4', NULL), +('711', '3363', '256', '61', '65', '-1', '-1', '4', NULL), +('711', '5371', '256', '66', '75', '-1', '-1', '4', NULL), +('711', '14065', '256', '76', '80', '-1', '-1', '4', NULL), +('711', '18050', '256', '81', '85', '-1', '-1', '4', NULL), +('711', '25976', '256', '86', '90', '-1', '-1', '4', NULL), +('711', '29077', '256', '91', '127', '-1', '-1', '4', NULL), +('711', '707', '256', '30', '59', '-1', '-1', '5', NULL), +('711', '4210', '256', '60', '127', '-1', '-1', '5', NULL), + +-- slow +('711', '738', '8192', '23', '50', '-1', '-1', '1', NULL), +('711', '1751', '8192', '51', '59', '-1', '-1', '1', NULL), +('711', '1748', '8192', '60', '63', '-1', '-1', '1', NULL), +('711', '3066', '8192', '64', '127', '-1', '-1', '1', NULL), +('711', '738', '8192', '51', '63', '-1', '-1', '2', NULL), +('711', '1751', '8192', '64', '127', '-1', '-1', '2', NULL), +('711', '738', '8192', '64', '127', '-1', '-1', '3', NULL), + +-- cure +('711', '3682', '32768', '45', '85', '-1', '-1', '1', NULL), +('711', '25958', '32768', '86', '90', '-1', '-1', '1', NULL), +('711', '29059', '32768', '91', '127', '-1', '-1', '1', NULL), +('711', '3681', '32768', '52', '127', '-1', '-1', '2', NULL), +('711', '10448', '32768', '74', '78', '-1', '-1', '3', NULL), +('711', '14029', '32768', '79', '83', '-1', '-1', '3', NULL), +('711', '18023', '32768', '84', '127', '-1', '-1', '3', NULL), + +-- hate redux +('711', '1754', '131072', '53', '127', '-1', '-1', '1', NULL), +('711', '10436', '131072', '73', '127', '-1', '-1', '2', NULL), + +-- in-combat buff songs +('711', '2606', '262144', '52', '59', '-1', '-1', '1', NULL), +('711', '2610', '262144', '60', '127', '-1', '-1', '1', NULL), +('711', '700', '262144', '1', '9', '-1', '-1', '2', NULL), +('711', '701', '262144', '10', '35', '-1', '-1', '2', NULL), +('711', '740', '262144', '36', '41', '-1', '-1', '2', NULL), +('711', '702', '262144', '42', '49', '-1', '-1', '2', NULL), +('711', '747', '262144', '50', '61', '-1', '-1', '2', NULL), +('711', '3374', '262144', '62', '64', '-1', '-1', '2', NULL), +('711', '4871', '262144', '65', '67', '-1', '-1', '2', NULL), +('711', '5376', '262144', '68', '78', '-1', '-1', '2', NULL), +('711', '14080', '262144', '79', '83', '-1', '-1', '2', NULL), +('711', '18065', '262144', '84', '88', '-1', '-1', '2', NULL), +('711', '26042', '262144', '89', '93', '-1', '-1', '2', NULL), +('711', '29143', '262144', '94', '127', '-1', '-1', '2', NULL), +('711', '7', '262144', '6', '19', '-1', '-1', '2', NULL), +('711', '1287', '262144', '20', '31', '-1', '-1', '3', NULL), +('711', '723', '262144', '32', '33', '-1', '-1', '3', NULL), +('711', '1448', '262144', '34', '54', '-1', '-1', '3', NULL), +('711', '1759', '262144', '55', '61', '-1', '-1', '3', NULL), +('711', '3651', '262144', '62', '66', '-1', '-1', '3', NULL), +('711', '5377', '262144', '67', '70', '-1', '-1', '3', NULL), +('711', '10421', '262144', '71', '75', '-1', '-1', '3', NULL), +('711', '14008', '262144', '76', '80', '-1', '-1', '3', NULL), +('711', '18008', '262144', '81', '87', '-1', '-1', '3', NULL), +('711', '26015', '262144', '88', '92', '-1', '-1', '3', NULL), +('711', '29107', '262144', '93', '127', '-1', '-1', '3', NULL), +('711', '734', '262144', '7', '8', '-1', '-1', '4', NULL), +('711', '710', '262144', '9', '12', '-1', '-1', '4', NULL), +('711', '711', '262144', '13', '16', '-1', '-1', '4', NULL), +('711', '709', '262144', '17', '40', '-1', '-1', '4', NULL), +('711', '714', '262144', '41', '46', '-1', '-1', '4', NULL), +('711', '748', '262144', '47', '57', '-1', '-1', '4', NULL), +('711', '1763', '262144', '58', '72', '-1', '-1', '4', NULL), +('711', '11881', '262144', '73', '77', '-1', '-1', '4', NULL), +('711', '14056', '262144', '78', '82', '-1', '-1', '4', NULL), +('711', '18041', '262144', '83', '87', '-1', '-1', '4', NULL), +('711', '26027', '262144', '88', '92', '-1', '-1', '4', NULL), +('711', '29122', '262144', '93', '127', '-1', '-1', '4', NULL), +('711', '734', '262144', '9', '24', '-1', '-1', '5', NULL), +('711', '712', '262144', '25', '28', '-1', '-1', '5', NULL), +('711', '715', '262144', '29', '32', '-1', '-1', '5', NULL), +('711', '713', '262144', '33', '36', '-1', '-1', '5', NULL), +('711', '716', '262144', '37', '44', '-1', '-1', '5', NULL), +('711', '4083', '262144', '45', '52', '-1', '-1', '5', NULL), +('711', '4084', '262144', '53', '63', '-1', '-1', '5', NULL), +('711', '3362', '262144', '64', '64', '-1', '-1', '5', NULL), +('711', '4872', '262144', '65', '68', '-1', '-1', '5', NULL), +('711', '5382', '262144', '69', '75', '-1', '-1', '5', NULL), +('711', '14062', '262144', '76', '80', '-1', '-1', '5', NULL), +('711', '18047', '262144', '81', '85', '-1', '-1', '5', NULL), +('711', '25961', '262144', '86', '90', '-1', '-1', '5', NULL), +('711', '29062', '262144', '91', '127', '-1', '-1', '5', NULL), +('711', '734', '262144', '25', '43', '-1', '-1', '6', NULL), +('711', '4085', '262144', '44', '51', '-1', '-1', '6', NULL), +('711', '4086', '262144', '52', '62', '-1', '-1', '6', NULL), +('711', '4087', '262144', '63', '68', '-1', '-1', '6', NULL), +('711', '5374', '262144', '69', '71', '-1', '-1', '6', NULL), +('711', '10439', '262144', '72', '76', '-1', '-1', '6', NULL), +('711', '14020', '262144', '77', '81', '-1', '-1', '6', NULL), +('711', '18014', '262144', '82', '86', '-1', '-1', '6', NULL), +('711', '25991', '262144', '87', '127', '-1', '-1', '6', NULL), +('711', '734', '262144', '30', '82', '-1', '-1', '7', NULL), +('711', '18020', '262144', '83', '127', '-1', '-1', '7', NULL), +('711', '734', '262144', '83', '127', '-1', '-1', '8', NULL), +('711', '2603', '262144', '30', '127', '-1', '-1', '9', NULL), + +-- out-of-combat buff songs +('711', '7', '524288', '6', '19', '-1', '-1', '1', NULL), +('711', '1287', '524288', '20', '31', '-1', '-1', '1', NULL), +('711', '723', '524288', '32', '33', '-1', '-1', '1', NULL), +('711', '1448', '524288', '34', '54', '-1', '-1', '1', NULL), +('711', '1759', '524288', '55', '61', '-1', '-1', '1', NULL), +('711', '3651', '524288', '62', '66', '-1', '-1', '1', NULL), +('711', '5377', '524288', '67', '70', '-1', '-1', '1', NULL), +('711', '10421', '524288', '71', '75', '-1', '-1', '1', NULL), +('711', '14008', '524288', '76', '80', '-1', '-1', '1', NULL), +('711', '18008', '524288', '81', '87', '-1', '-1', '1', NULL), +('711', '26015', '524288', '88', '92', '-1', '-1', '1', NULL), +('711', '29107', '524288', '93', '127', '-1', '-1', '1', NULL), +('711', '717', '524288', '5', '29', '-1', '-1','2', NULL), +('711', '2603', '524288', '30', '127', '-1', '-1','2', NULL), +('711', '717', '524288', '30', '48', '-1', '-1','3', NULL), +('711', '2605', '524288', '49', '127', '-1', '-1','3', NULL), +('711', '2602', '524288', '15', '127', '-1', '-1','4', NULL); diff --git a/zone/bot.cpp b/zone/bot.cpp index 56d8fd5d1..240530237 100644 --- a/zone/bot.cpp +++ b/zone/bot.cpp @@ -76,7 +76,6 @@ Bot::Bot(NPCType npcTypeData, Client* botOwner) : NPC(&npcTypeData, nullptr, glm SetAltOutOfCombatBehavior(GetClass() == BARD); // will need to be updated if more classes make use of this flag SetShowHelm(true); SetPauseAI(false); - CalcChanceToCast(); rest_timer.Disable(); SetFollowDistance(BOT_DEFAULT_FOLLOW_DISTANCE); // Do this once and only in this constructor @@ -151,7 +150,6 @@ Bot::Bot(uint32 botID, uint32 botOwnerCharacterID, uint32 botSpellsID, double to SetTaunting((GetClass() == WARRIOR || GetClass() == PALADIN || GetClass() == SHADOWKNIGHT) && (GetBotStance() == BotStanceAggressive)); SetPauseAI(false); - CalcChanceToCast(); rest_timer.Disable(); SetFollowDistance(BOT_DEFAULT_FOLLOW_DISTANCE); strcpy(this->name, this->GetCleanName()); @@ -7639,6 +7637,24 @@ bool EntityList::Bot_AICheckCloseBeneficialSpells(Bot* caster, uint8 iChance, fl } } } + + if (iSpellTypes == SpellType_HateRedux) { + if (!caster->IsEngaged()) + return false; + + if (caster->HasGroup()) { + Group *g = caster->GetGroup(); + if (g) { + for (int i = 0; i < MAX_GROUP_MEMBERS; i++) { + if (g->members[i] && caster->GetNeedsHateRedux(g->members[i])) { + if (caster->AICastSpell(g->members[i], caster->GetChanceToCastBySpellType(SpellType_HateRedux), SpellType_HateRedux)) + return true; + } + } + } + } + } + return false; } @@ -8017,7 +8033,7 @@ bool Bot::GetNeedsHateRedux(Mob *tar) { // This really should be a scalar function based in class Mob that returns 'this' state..but, is inline with current Bot coding... // TODO: Good starting point..but, can be refined.. // TODO: Still awaiting bot spell rework.. - if (!tar || !tar->HasTargetReflection()) + if (!tar || !tar->IsEngaged() || !tar->HasTargetReflection() || !tar->GetTarget()->IsNPC()) return false; if (tar->IsClient()) { @@ -8031,7 +8047,7 @@ bool Bot::GetNeedsHateRedux(Mob *tar) { else if (tar->IsBot()) { switch (tar->GetClass()) { case ROGUE: - if (tar->CastToBot()->evade_timer.Check(false)) + if (tar->CanFacestab() || tar->CastToBot()->evade_timer.Check(false)) return false; case CLERIC: case DRUID: diff --git a/zone/bot.h b/zone/bot.h index dda1c5f0e..97bf9fc1f 100644 --- a/zone/bot.h +++ b/zone/bot.h @@ -47,8 +47,6 @@ const int MaxSpellTimer = 15; const int MaxDisciplineTimer = 10; const int DisciplineReuseStart = MaxSpellTimer + 1; const int MaxTimer = MaxSpellTimer + MaxDisciplineTimer; -const int MaxStances = 7; -const int MaxSpellTypes = 16; enum BotStanceType { BotStancePassive, @@ -58,7 +56,8 @@ enum BotStanceType { BotStanceAggressive, BotStanceBurn, BotStanceBurnAE, - BotStanceUnknown + BotStanceUnknown, + MaxStances = BotStanceUnknown }; #define BOT_STANCE_COUNT 8 @@ -125,7 +124,12 @@ enum SpellTypeIndex { SpellType_CharmIndex, SpellType_SlowIndex, SpellType_DebuffIndex, - SpellType_CureIndex + SpellType_CureIndex, + SpellType_ResurrectIndex, + SpellType_HateReduxIndex, + SpellType_InCombatBuffSongIndex, + SpellType_OutOfCombatBuffSongIndex, + MaxSpellTypes }; class Bot : public NPC { @@ -296,7 +300,6 @@ public: bool GetNeedsHateRedux(Mob *tar); bool HasOrMayGetAggro(); void SetDefaultBotStance(); - void CalcChanceToCast(); inline virtual int32 GetMaxStat(); inline virtual int32 GetMaxResist(); @@ -417,6 +420,7 @@ public: static std::list GetBotSpellsForSpellEffect(Bot* botCaster, int spellEffect); static std::list GetBotSpellsForSpellEffectAndTargetType(Bot* botCaster, int spellEffect, SpellTargetType targetType); static std::list GetBotSpellsBySpellType(Bot* botCaster, uint32 spellType); + static std::list GetPrioritizedBotSpellsBySpellType(Bot* botCaster, uint32 spellType); static BotSpell GetFirstBotSpellBySpellType(Bot* botCaster, uint32 spellType); static BotSpell GetBestBotSpellForFastHeal(Bot* botCaster); static BotSpell GetBestBotSpellForHealOverTime(Bot* botCaster); @@ -669,7 +673,6 @@ private: uint32 timers[MaxTimer]; bool _hasBeenSummoned; glm::vec3 m_PreSummonLocation; - uint8 _spellCastingChances[MaxStances][MaxSpellTypes]; Timer evade_timer; diff --git a/zone/bot_command.cpp b/zone/bot_command.cpp index fa15dc7d2..ef995ce69 100644 --- a/zone/bot_command.cpp +++ b/zone/bot_command.cpp @@ -5117,7 +5117,6 @@ void bot_subcommand_bot_stance(Client *c, const Seperator *sep) if (!current_flag) { bot_iter->SetBotStance(bst); - bot_iter->CalcChanceToCast(); bot_iter->Save(); } diff --git a/zone/bot_structs.h b/zone/bot_structs.h index 996fbff41..a774bad70 100644 --- a/zone/bot_structs.h +++ b/zone/bot_structs.h @@ -56,6 +56,10 @@ struct BotSpell { int16 ManaCost; }; +struct BotSpell_wPriority : public BotSpell { + uint8 Priority; +}; + struct BotAA { uint32 aa_id; uint8 req_level; diff --git a/zone/botspellsai.cpp b/zone/botspellsai.cpp index c36e928bb..74870fed3 100644 --- a/zone/botspellsai.cpp +++ b/zone/botspellsai.cpp @@ -96,14 +96,8 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { castedSpell = AIDoSpellCast(botSpell.SpellIndex, addMob, botSpell.ManaCost); - if(castedSpell) { - char* gmsg = 0; - - MakeAnyLenString(&gmsg, "Attempting to mez %s.", addMob->GetCleanName()); - - if(gmsg) - BotGroupSay(this, gmsg); - } + if(castedSpell) + BotGroupSay(this, "Attempting to mez %s.", addMob->GetCleanName()); } break; } @@ -248,7 +242,6 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { castedSpell = AIDoSpellCast(botSpell.SpellIndex, tar, botSpell.ManaCost, &TempDontHealMeBeforeTime); if(castedSpell) { - char* gmsg = 0; /*if(TempDontHealMeBeforeTime != tar->DontHealMeBefore()) tar->SetDontHealMeBefore(TempDontHealMeBeforeTime); @@ -270,7 +263,7 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { Group *g = this->GetGroup(); if(g) { - MakeAnyLenString(&gmsg, "Casting %s.", spells[botSpell.SpellId].name); + BotGroupSay(this, "Casting %s.", spells[botSpell.SpellId].name); for( int i = 0; imembers[i] && !g->members[i]->qglobal) { @@ -282,14 +275,11 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { } else { if(tar != this) //we don't need spam of bots healing themselves - MakeAnyLenString(&gmsg, "Casting %s on %s", spells[botSpell.SpellId].name, tar->GetCleanName()); + BotGroupSay(this, "Casting %s on %s", spells[botSpell.SpellId].name, tar->GetCleanName()); tar->SetDontHealMeBefore(Timer::GetCurrentTime() + 2000); } } - - if(gmsg) - BotGroupSay(this, gmsg); } } } @@ -748,35 +738,69 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { checked_los = true; } - std::list dotList = GetBotSpellsBySpellType(this, SpellType_DOT); + if (GetClass() == BARD) { + std::list dotList = GetPrioritizedBotSpellsBySpellType(this, SpellType_DOT); - const int maxDotSelect = 5; - int dotSelectCounter = 0; + const int maxDotSelect = 5; + int dotSelectCounter = 0; - for(std::list::iterator itr = dotList.begin(); itr != dotList.end(); ++itr) { - BotSpell selectedBotSpell = *itr; + for (std::list::iterator itr = dotList.begin(); itr != dotList.end(); ++itr) { + BotSpell selectedBotSpell = *itr; - if(selectedBotSpell.SpellId == 0) - continue; - - if(CheckSpellRecastTimers(this, itr->SpellIndex)) - { - - if(!(!tar->IsImmuneToSpell(selectedBotSpell.SpellId, this) && tar->CanBuffStack(selectedBotSpell.SpellId, botLevel, true) >= 0)) + if (selectedBotSpell.SpellId == 0) continue; - uint32 TempDontDotMeBefore = tar->DontDotMeBefore(); + if (CheckSpellRecastTimers(this, itr->SpellIndex)) + { - castedSpell = AIDoSpellCast(selectedBotSpell.SpellIndex, tar, selectedBotSpell.ManaCost, &TempDontDotMeBefore); + if (!(!tar->IsImmuneToSpell(selectedBotSpell.SpellId, this) && tar->CanBuffStack(selectedBotSpell.SpellId, botLevel, true) >= 0)) + continue; - if(TempDontDotMeBefore != tar->DontDotMeBefore()) - tar->SetDontDotMeBefore(TempDontDotMeBefore); + uint32 TempDontDotMeBefore = tar->DontDotMeBefore(); + + castedSpell = AIDoSpellCast(selectedBotSpell.SpellIndex, tar, selectedBotSpell.ManaCost, &TempDontDotMeBefore); + + if (TempDontDotMeBefore != tar->DontDotMeBefore()) + tar->SetDontDotMeBefore(TempDontDotMeBefore); + } + + dotSelectCounter++; + + if ((dotSelectCounter == maxDotSelect) || castedSpell) + break; } + } + else { + std::list dotList = GetBotSpellsBySpellType(this, SpellType_DOT); - dotSelectCounter++; + const int maxDotSelect = 5; + int dotSelectCounter = 0; - if((dotSelectCounter == maxDotSelect) || castedSpell) - break; + for (std::list::iterator itr = dotList.begin(); itr != dotList.end(); ++itr) { + BotSpell selectedBotSpell = *itr; + + if (selectedBotSpell.SpellId == 0) + continue; + + if (CheckSpellRecastTimers(this, itr->SpellIndex)) + { + + if (!(!tar->IsImmuneToSpell(selectedBotSpell.SpellId, this) && tar->CanBuffStack(selectedBotSpell.SpellId, botLevel, true) >= 0)) + continue; + + uint32 TempDontDotMeBefore = tar->DontDotMeBefore(); + + castedSpell = AIDoSpellCast(selectedBotSpell.SpellIndex, tar, selectedBotSpell.ManaCost, &TempDontDotMeBefore); + + if (TempDontDotMeBefore != tar->DontDotMeBefore()) + tar->SetDontDotMeBefore(TempDontDotMeBefore); + } + + dotSelectCounter++; + + if ((dotSelectCounter == maxDotSelect) || castedSpell) + break; + } } } break; @@ -792,6 +816,28 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { } switch (botClass) { + case BARD: { + // probably needs attackable check + std::list botSongList = GetPrioritizedBotSpellsBySpellType(this, SpellType_Slow); + for (auto iter : botSongList) { + if (!iter.SpellId) + continue; + if (!CheckSpellRecastTimers(this, iter.SpellIndex)) + continue; + if (spells[iter.SpellId].zonetype != -1 && zone->GetZoneType() != -1 && spells[iter.SpellId].zonetype != zone->GetZoneType()) // is this bit or index? + continue; + if (spells[iter.SpellId].targettype != ST_Target) + continue; + if (tar->CanBuffStack(iter.SpellId, botLevel, true) < 0) + continue; + + castedSpell = AIDoSpellCast(iter.SpellIndex, tar, iter.ManaCost); + if (castedSpell) + break; + } + + break; + } case ENCHANTER: { botSpell = GetBestBotSpellForMagicBasedSlow(this); break; @@ -814,14 +860,8 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { castedSpell = AIDoSpellCast(botSpell.SpellIndex, tar, botSpell.ManaCost); - if(castedSpell) { - char* gmsg = 0; - - MakeAnyLenString(&gmsg, "Attempting to slow %s.", tar->GetCleanName()); - - if(gmsg) - BotGroupSay(this, gmsg); - } + if(castedSpell && GetClass() != BARD) + BotGroupSay(this, "Attempting to slow %s.", tar->GetCleanName()); } break; } @@ -889,6 +929,100 @@ bool Bot::AICastSpell(Mob* tar, uint8 iChance, uint32 iSpellTypes) { } break; } + case SpellType_Resurrect: + break; + case SpellType_HateRedux: { + // assumed group member at this point + if (GetClass() == BARD) { + std::list botSongList = GetPrioritizedBotSpellsBySpellType(this, SpellType_HateRedux); + for (auto iter : botSongList) { + if (!iter.SpellId) + continue; + if (!CheckSpellRecastTimers(this, iter.SpellIndex)) + continue; + if (spells[iter.SpellId].zonetype != -1 && zone->GetZoneType() != -1 && spells[iter.SpellId].zonetype != zone->GetZoneType()) // is this bit or index? + continue; + if (spells[iter.SpellId].targettype != ST_Target) + continue; + if (tar->CanBuffStack(iter.SpellId, botLevel, true) < 0) + continue; + + castedSpell = AIDoSpellCast(iter.SpellIndex, tar, iter.ManaCost); + if (castedSpell) { + BotGroupSay(this, "Attempting to reduce hate on %s.", tar->GetCleanName()); + break; + } + } + } + + break; + } + case SpellType_InCombatBuffSong: { + if (GetClass() != BARD || tar != this) // In-Combat songs can be cast Out-of-Combat in preparation for battle + break; + + std::list botSongList = GetPrioritizedBotSpellsBySpellType(this, SpellType_InCombatBuffSong); + for (auto iter : botSongList) { + if (!iter.SpellId) + continue; + if (!CheckSpellRecastTimers(this, iter.SpellIndex)) + continue; + if (spells[iter.SpellId].zonetype != -1 && zone->GetZoneType() != -1 && spells[iter.SpellId].zonetype != zone->GetZoneType()) // is this bit or index? + continue; + switch (spells[iter.SpellId].targettype) { + case ST_AEBard: + case ST_AECaster: + case ST_GroupTeleport: + case ST_Group: + case ST_Self: + break; + default: + continue; + } + if (tar->CanBuffStack(iter.SpellId, botLevel, true) < 0) + continue; + + castedSpell = AIDoSpellCast(iter.SpellIndex, tar, iter.ManaCost); + if (castedSpell) + break; + } + + break; + } + case SpellType_OutOfCombatBuffSong: { + if (GetClass() != BARD || tar != this || IsEngaged()) // Out-of-Combat songs can not be cast in combat + break; + + std::list botSongList = GetPrioritizedBotSpellsBySpellType(this, SpellType_OutOfCombatBuffSong); + for (auto iter : botSongList) { + if (!iter.SpellId) + continue; + if (!CheckSpellRecastTimers(this, iter.SpellIndex)) + continue; + if (spells[iter.SpellId].zonetype != -1 && zone->GetZoneType() != -1 && spells[iter.SpellId].zonetype != zone->GetZoneType()) // is this bit or index? + continue; + switch (spells[iter.SpellId].targettype) { + case ST_AEBard: + case ST_AECaster: + case ST_GroupTeleport: + case ST_Group: + case ST_Self: + break; + default: + continue; + } + if (tar->CanBuffStack(iter.SpellId, botLevel, true) < 0) + continue; + + castedSpell = AIDoSpellCast(iter.SpellIndex, tar, iter.ManaCost); + if (castedSpell) + break; + } + + break; + } + default: + break; } return castedSpell; @@ -945,22 +1079,18 @@ bool Bot::AIDoSpellCast(uint8 i, Mob* tar, int32 mana_cost, uint32* oDontDoAgain extraMana = false; } else { //handle spell recast and recast timers - if(GetClass() == BARD && IsGroupSpell(AIspells[i].spellid)) { - // Bard Clarity songs (spellids: 723 & 1287) are recast_time = 0 and buffduration = 0. - // This translates to an insta-recast in the above check and is essentially locking all idle bard songs - // between levels 20 & 33 to one of the clarity songs. + //if(GetClass() == BARD && IsGroupSpell(AIspells[i].spellid)) { + // // Bard buff songs have been moved to their own npc spell type.. + // // Buff stacking is now checked as opposed to manipulating the timer to avoid rapid casting + + // //AIspells[i].time_cancast = (spells[AIspells[i].spellid].recast_time > (spells[AIspells[i].spellid].buffduration * 6000)) ? Timer::GetCurrentTime() + spells[AIspells[i].spellid].recast_time : Timer::GetCurrentTime() + spells[AIspells[i].spellid].buffduration * 6000; + // //spellend_timer.Start(spells[AIspells[i].spellid].cast_time); + //} + //else + // AIspells[i].time_cancast = Timer::GetCurrentTime() + spells[AIspells[i].spellid].recast_time; + + AIspells[i].time_cancast = Timer::GetCurrentTime() + spells[AIspells[i].spellid].recast_time; - // Hard-coded fix of '0/0' bard songs..watch for issues in other song lines - if(spells[AIspells[i].spellid].recast_time == 0 && spells[AIspells[i].spellid].buffduration == 0 && spells[AIspells[i].spellid].goodEffect > 0) { - AIspells[i].time_cancast = Timer::GetCurrentTime() + (3 * 6000); // pseudo 'buffduration' of 3 (value matches others in bard 'heal' song line) - } - else { - AIspells[i].time_cancast = (spells[AIspells[i].spellid].recast_time > (spells[AIspells[i].spellid].buffduration * 6000)) ? Timer::GetCurrentTime() + spells[AIspells[i].spellid].recast_time : Timer::GetCurrentTime() + spells[AIspells[i].spellid].buffduration * 6000; - } - //spellend_timer.Start(spells[AIspells[i].spellid].cast_time); - } - else - AIspells[i].time_cancast = Timer::GetCurrentTime() + spells[AIspells[i].spellid].recast_time; if(spells[AIspells[i].spellid].EndurTimerIndex > 0) { SetSpellRecastTimer(spells[AIspells[i].spellid].EndurTimerIndex, spells[AIspells[i].spellid].recast_time); } @@ -1049,13 +1179,27 @@ bool Bot::AI_IdleCastCheck() { } else if(botClass == BARD) { // bard bots - if(!AICastSpell(this, 100, SpellType_Cure)) { - if(!AICastSpell(this, 100, SpellType_Heal)) { - if((!RuleB(Bots, BotBardUseOutOfCombatSongs) || !GetAltOutOfCombatBehavior()) || !AICastSpell(this, 100, SpellType_Buff)) { // skips if rule is false - if(!AICastSpell(this, 100, SpellType_InCombatBuff)) { // this tries to keep some combat buffs on the group until engaged code can pick up the buffing - // - } - } + bool battle_prep = false; + Mob* prep_against = nullptr; + + if (HasGroup() && GetGroup()->GetLeader() && GetGroup()->GetLeader()->IsClient()) + prep_against = GetGroup()->GetLeader(); + else if (GetOwner() && GetOwner()->IsClient()) + prep_against = GetOwner(); + + if (prep_against && prep_against->GetTarget() && prep_against->GetTarget()->IsNPC() && !prep_against->GetTarget()->IsPet()) + battle_prep = true; + + if (battle_prep) { + if (!AICastSpell(this, 100, SpellType_InCombatBuffSong)) { + // + } + } + else { + if (!entity_list.Bot_AICheckCloseBeneficialSpells(this, 100, BotAISpellRange, SpellType_Cure)) { + if (!AICastSpell(this, 100, SpellType_OutOfCombatBuffSong)) { + // + } } } @@ -1063,7 +1207,7 @@ bool Bot::AI_IdleCastCheck() { } if(!AIautocastspell_timer->Enabled()) - AIautocastspell_timer->Start(RandomTimer(1000, 5000), false); + AIautocastspell_timer->Start(RandomTimer(500, 2000), false); // avg human response is much less than 5 seconds..even for non-combat situations... } return result; @@ -1256,13 +1400,15 @@ bool Bot::AI_EngagedCastCheck() { } } else if(botClass == BARD) { - if(!AICastSpell(this, GetChanceToCastBySpellType(SpellType_InCombatBuff), SpellType_InCombatBuff)) { - if(!AICastSpell(this, GetChanceToCastBySpellType(SpellType_Heal), SpellType_Heal)) { - if(!AICastSpell(GetTarget(), GetChanceToCastBySpellType(SpellType_Dispel), SpellType_Dispel)) {// Bards will use their dispel songs - if(!AICastSpell(GetTarget(), mayGetAggro?0:GetChanceToCastBySpellType(SpellType_Nuke), SpellType_Nuke)) {// Bards will use their nuke songs - if(!AICastSpell(GetTarget(), GetChanceToCastBySpellType(SpellType_Escape), SpellType_Escape)) {// Bards will use their escape songs - // - failedToCast = true; + if (!entity_list.Bot_AICheckCloseBeneficialSpells(this, GetChanceToCastBySpellType(SpellType_HateRedux), BotAISpellRange, SpellType_HateRedux)) { + if (!AICastSpell(this, GetChanceToCastBySpellType(SpellType_InCombatBuffSong), SpellType_InCombatBuffSong)) { + if (!AICastSpell(GetTarget(), GetChanceToCastBySpellType(SpellType_Slow), SpellType_Slow)) { + if (!AICastSpell(GetTarget(), mayGetAggro ? 0 : GetChanceToCastBySpellType(SpellType_DOT), SpellType_DOT)) {// Bards will use their dot songs + if (!AICastSpell(GetTarget(), mayGetAggro ? 0 : GetChanceToCastBySpellType(SpellType_Nuke), SpellType_Nuke)) {// Bards will use their nuke songs + if (!AICastSpell(GetTarget(), GetChanceToCastBySpellType(SpellType_Escape), SpellType_Escape)) {// Bards will use their escape songs + // + failedToCast = true; + } } } } @@ -1271,7 +1417,7 @@ bool Bot::AI_EngagedCastCheck() { } if(!AIautocastspell_timer->Enabled()) { - AIautocastspell_timer->Start(RandomTimer(100, 250), false); + AIautocastspell_timer->Start(RandomTimer(150, 300), false); } if(!failedToCast) @@ -1349,14 +1495,8 @@ bool Bot::AIHealRotation(Mob* tar, bool useFastHeals) { castedSpell = AIDoSpellCast(botSpell.SpellIndex, tar, botSpell.ManaCost, &TempDontHealMeBeforeTime); - if(castedSpell) { - char* gmsg = 0; - - MakeAnyLenString(&gmsg, "Casting %s on %s, please stay in range!", spells[botSpell.SpellId].name, tar->GetCleanName()); - - if(gmsg) - Say(gmsg); - } + if(castedSpell) + Say("Casting %s on %s, please stay in range!", spells[botSpell.SpellId].name, tar->GetCleanName()); return castedSpell; } @@ -1444,6 +1584,37 @@ std::list Bot::GetBotSpellsBySpellType(Bot* botCaster, uint32 spellTyp return result; } +std::list Bot::GetPrioritizedBotSpellsBySpellType(Bot* botCaster, uint32 spellType) { + std::list result; + + if (botCaster && botCaster->AI_HasSpells()) { + std::vector botSpellList = botCaster->GetBotSpells(); + + for (int i = botSpellList.size() - 1; i >= 0; i--) { + if (botSpellList[i].spellid <= 0 || botSpellList[i].spellid >= SPDAT_RECORDS) { + // this is both to quit early to save cpu and to avoid casting bad spells + // Bad info from database can trigger this incorrectly, but that should be fixed in DB, not here + continue; + } + + if (botSpellList[i].type & spellType) { + BotSpell_wPriority botSpell; + botSpell.SpellId = botSpellList[i].spellid; + botSpell.SpellIndex = i; + botSpell.ManaCost = botSpellList[i].manacost; + botSpell.Priority = botSpellList[i].priority; + + result.push_back(botSpell); + } + } + + if (result.size() > 1) + result.sort([](BotSpell_wPriority& l, BotSpell_wPriority& r) { return l.Priority < r.Priority; }); + } + + return result; +} + BotSpell Bot::GetFirstBotSpellBySpellType(Bot* botCaster, uint32 spellType) { BotSpell result; @@ -1738,9 +1909,9 @@ BotSpell Bot::GetBestBotSpellForMagicBasedSlow(Bot* botCaster) { if(botCaster) { std::list botSpellList = GetBotSpellsForSpellEffect(botCaster, SE_AttackSpeed); - for(std::list::iterator botSpellListItr = botSpellList.begin(); botSpellListItr != botSpellList.end(); ++botSpellListItr) { + for (std::list::iterator botSpellListItr = botSpellList.begin(); botSpellListItr != botSpellList.end(); ++botSpellListItr) { // Assuming all the spells have been loaded into this list by level and in descending order - if(IsSlowSpell(botSpellListItr->SpellId) && spells[botSpellListItr->SpellId].resisttype == RESIST_MAGIC && CheckSpellRecastTimers(botCaster, botSpellListItr->SpellIndex)) { + if (IsSlowSpell(botSpellListItr->SpellId) && spells[botSpellListItr->SpellId].resisttype == RESIST_MAGIC && CheckSpellRecastTimers(botCaster, botSpellListItr->SpellIndex)) { result.SpellId = botSpellListItr->SpellId; result.SpellIndex = botSpellListItr->SpellIndex; result.ManaCost = botSpellListItr->ManaCost; @@ -2139,7 +2310,7 @@ BotSpell Bot::GetBestBotSpellForResistDebuff(Bot* botCaster, Mob *tar) { } BotSpell Bot::GetBestBotSpellForCure(Bot* botCaster, Mob *tar) { - BotSpell result; + BotSpell_wPriority result; bool spellSelected = false; result.SpellId = 0; @@ -2156,7 +2327,7 @@ BotSpell Bot::GetBestBotSpellForCure(Bot* botCaster, Mob *tar) { bool isCorrupted = tar->FindType(SE_CorruptionCounter); if(botCaster && botCaster->AI_HasSpells()) { - std::list cureList = GetBotSpellsBySpellType(botCaster, SpellType_Cure); + std::list cureList = GetPrioritizedBotSpellsBySpellType(botCaster, SpellType_Cure); if(tar->HasGroup()) { Group *g = tar->GetGroup(); @@ -2173,7 +2344,7 @@ BotSpell Bot::GetBestBotSpellForCure(Bot* botCaster, Mob *tar) { //Check for group cure first if(countNeedsCured > 2) { - for(std::list::iterator itr = cureList.begin(); itr != cureList.end(); ++itr) { + for (std::list::iterator itr = cureList.begin(); itr != cureList.end(); ++itr) { BotSpell selectedBotSpell = *itr; if(IsGroupSpell(itr->SpellId) && CheckSpellRecastTimers(botCaster, itr->SpellIndex)) { @@ -2210,7 +2381,7 @@ BotSpell Bot::GetBestBotSpellForCure(Bot* botCaster, Mob *tar) { //no group cure for target- try to find single target spell if(!spellSelected) { - for(std::list::iterator itr = cureList.begin(); itr != cureList.end(); ++itr) { + for(std::list::iterator itr = cureList.begin(); itr != cureList.end(); ++itr) { BotSpell selectedBotSpell = *itr; if(CheckSpellRecastTimers(botCaster, itr->SpellIndex)) { @@ -2312,1099 +2483,3040 @@ bool Bot::CheckDisciplineRecastTimers(Bot *caster, int timer_index) { return false; } -void Bot::CalcChanceToCast() { - uint8 castChance = 0; - - for(int i=0; i < MaxStances; i++) { - for(int j=0; j < MaxSpellTypes; j++) { - _spellCastingChances[i][j] = 0; +uint8 Bot::GetChanceToCastBySpellType(uint32 spellType) +{ + enum : uint8 { nHS = 0, pH, pS, pHS, cntHS}; // negative Healer/Slower, positive Healer, postive Slower, positive Healer/Slower + + static const uint8 spell_casting_chances[MaxSpellTypes][PLAYER_CLASS_COUNT][MaxStances][cntHS] = { +// SpellType_NukeIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 15, 25, 15 }, // Balanced { nHS, pH, pS, pHS } + { 15, 0, 15, 0 }, // Efficient { nHS, pH, pS, pHS } + { 25, 15, 25, 15 }, // Reactive { nHS, pH, pS, pHS } + { 50, 15, 50, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 25, 50, 25 }, // Burn { nHS, pH, pS, pHS } + { 50, 25, 50, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 15, 25, 15 }, // Balanced { nHS, pH, pS, pHS } + { 15, 0, 15, 0 }, // Efficient { nHS, pH, pS, pHS } + { 25, 15, 25, 15 }, // Reactive { nHS, pH, pS, pHS } + { 50, 15, 50, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 25, 50, 25 }, // Burn { nHS, pH, pS, pHS } + { 50, 25, 50, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 5, 5, 5, 5 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 5, 5, 5, 5 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 15, 25, 15 }, // Balanced { nHS, pH, pS, pHS } + { 15, 0, 15, 0 }, // Efficient { nHS, pH, pS, pHS } + { 25, 15, 25, 15 }, // Reactive { nHS, pH, pS, pHS } + { 50, 15, 50, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 25, 50, 25 }, // Burn { nHS, pH, pS, pHS } + { 50, 25, 50, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 100, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 10, 5, 0 }, // Balanced { nHS, pH, pS, pHS } + { 10, 5, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 15, 10, 5, 0 }, // Reactive { nHS, pH, pS, pHS } + { 25, 15, 15, 5 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 25, 25, 15 }, // Burn { nHS, pH, pS, pHS } + { 50, 25, 25, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 5, 5, 5, 5 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Reactive { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 100, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Reactive { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 100, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 10, 5, 0 }, // Balanced { nHS, pH, pS, pHS } + { 10, 5, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 15, 10, 5, 0 }, // Reactive { nHS, pH, pS, pHS } + { 25, 15, 15, 5 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 25, 25, 15 }, // Burn { nHS, pH, pS, pHS } + { 50, 25, 25, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_HealIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Balanced { nHS, pH, pS, pHS } + { 15, 75, 15, 75 }, // Efficient { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Reactive { nHS, pH, pS, pHS } + { 15, 75, 15, 75 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 50, 0, 50 }, // Burn { nHS, pH, pS, pHS } + { 0, 50, 0, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Balanced { nHS, pH, pS, pHS } + { 15, 75, 15, 75 }, // Efficient { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Reactive { nHS, pH, pS, pHS } + { 15, 75, 15, 75 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 50, 0, 50 }, // Burn { nHS, pH, pS, pHS } + { 0, 50, 0, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 15, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Balanced { nHS, pH, pS, pHS } + { 15, 100, 15, 100 }, // Efficient { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Reactive { nHS, pH, pS, pHS } + { 25, 75, 25, 75 }, // Aggressive { nHS, pH, pS, pHS } + { 10, 50, 10, 50 }, // Burn { nHS, pH, pS, pHS } + { 10, 50, 10, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Balanced { nHS, pH, pS, pHS } + { 15, 100, 15, 100 }, // Efficient { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Reactive { nHS, pH, pS, pHS } + { 25, 75, 25, 75 }, // Aggressive { nHS, pH, pS, pHS } + { 10, 50, 10, 50 }, // Burn { nHS, pH, pS, pHS } + { 10, 50, 10, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Balanced { nHS, pH, pS, pHS } + { 15, 75, 15, 75 }, // Efficient { nHS, pH, pS, pHS } + { 25, 100, 25, 100 }, // Reactive { nHS, pH, pS, pHS } + { 15, 75, 15, 75 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 50, 0, 50 }, // Burn { nHS, pH, pS, pHS } + { 0, 50, 0, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_RootIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_BuffIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_EscapeIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 15, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 15, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 15, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 15, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 15, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 15, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_PetIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Aggressive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Burn { nHS, pH, pS, pHS } + { 10, 10, 10, 10 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Aggressive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Burn { nHS, pH, pS, pHS } + { 10, 10, 10, 10 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Aggressive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Burn { nHS, pH, pS, pHS } + { 10, 10, 10, 10 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Aggressive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Burn { nHS, pH, pS, pHS } + { 10, 10, 10, 10 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_LifetapIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 100, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 100, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_SnareIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_DOTIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 10, 10 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 10, 10 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 10, 10 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 10, 10 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 15, 50, 15 }, // Balanced { nHS, pH, pS, pHS } + { 25, 10, 25, 10 }, // Efficient { nHS, pH, pS, pHS } + { 50, 15, 50, 15 }, // Reactive { nHS, pH, pS, pHS } + { 50, 25, 50, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 25, 50, 25 }, // Burn { nHS, pH, pS, pHS } + { 50, 25, 50, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 25, 25, 15, 15 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 100, 100, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 15, 15, 0 }, // Balanced { nHS, pH, pS, pHS } + { 15, 10, 10, 0 }, // Efficient { nHS, pH, pS, pHS } + { 25, 15, 15, 0 }, // Reactive { nHS, pH, pS, pHS } + { 50, 25, 50, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 25, 50, 15 }, // Burn { nHS, pH, pS, pHS } + { 50, 25, 50, 15 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Balanced { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Burn { nHS, pH, pS, pHS } + { 75, 75, 75, 75 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 25, 25, 10, 10 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 10, 10 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 10, 10 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_DispelIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_InCombatBuffIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Aggressive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Burn { nHS, pH, pS, pHS } + { 25, 25, 25, 25 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 50, 50, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 75, 50, 75 }, // Balanced { nHS, pH, pS, pHS } + { 25, 50, 25, 50 }, // Efficient { nHS, pH, pS, pHS } + { 50, 75, 50, 75 }, // Reactive { nHS, pH, pS, pHS } + { 75, 100, 75, 100 }, // Aggressive { nHS, pH, pS, pHS } + { 75, 100, 75, 100 }, // Burn { nHS, pH, pS, pHS } + { 75, 100, 75, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_MezIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_CharmIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_SlowIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 100, 100 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 25, 25, 100, 100 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 50, 50, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 25, 25, 100, 100 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 15, 15, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 15, 15, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 100, 100 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 50, 50 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 50, 50 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_DebuffIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Efficient { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Reactive { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Balanced { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Efficient { nHS, pH, pS, pHS } + { 25, 25, 25, 25 }, // Reactive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Balanced { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Efficient { nHS, pH, pS, pHS } + { 15, 15, 15, 15 }, // Reactive { nHS, pH, pS, pHS } + { 10, 10, 10, 10 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_CureIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Balanced { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Efficient { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Reactive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 100, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_ResurrectIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_HateReduxIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_InCombatBuffSongIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Balanced { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Efficient { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Reactive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 100, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } + }, +// SpellType_OutOfCombatBuffSongIndex + { + {// WarriorIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ClericIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// PaladinIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RangerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShadowknightIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// DruidIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MonkIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Balanced { nHS, pH, pS, pHS } + { 50, 50, 50, 50 }, // Efficient { nHS, pH, pS, pHS } + { 75, 75, 75, 75 }, // Reactive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Aggressive { nHS, pH, pS, pHS } + { 100, 100, 100, 100 }, // Burn { nHS, pH, pS, pHS } + { 100, 100, 100, 100 } // BurnAE { nHS, pH, pS, pHS } + }, + {// RogueIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// ShamanIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// NecromancerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// WizardIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// MagicianIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// EnchanterIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BeastlordIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + }, + {// BerserkerIndex + { 0, 0, 0, 0 }, // Passive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Balanced { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Efficient { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Reactive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Aggressive { nHS, pH, pS, pHS } + { 0, 0, 0, 0 }, // Burn { nHS, pH, pS, pHS } + { 0, 0, 0, 0 } // BurnAE { nHS, pH, pS, pHS } + } } - } - - BotStanceType botStance = GetBotStance(); - uint8 botClass = GetClass(); - bool isPrimaryHealer = false; - bool isPrimarySlower = false; - - if(HasGroup()) { - isPrimaryHealer = IsGroupPrimaryHealer(); - isPrimarySlower = IsGroupPrimarySlower(); - } - - //Nuke - switch(botClass) - { - case WIZARD: - case MAGICIAN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - case BotStanceAggressive: - castChance = 75; - break; - case BotStanceEfficient: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 100; - break; - default: - castChance = 0; - break; - } - break; - case DRUID: - case CLERIC: - case PALADIN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimaryHealer?15:25; - break; - case BotStanceEfficient: - castChance = isPrimaryHealer?0:15; - break; - case BotStanceAggressive: - castChance = isPrimaryHealer?15:50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimaryHealer?25:50; - break; - default: - castChance = 0; - break; - } - break; - case ENCHANTER: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimarySlower?15:25; - break; - case BotStanceEfficient: - castChance = isPrimarySlower?0:15; - break; - case BotStanceAggressive: - castChance = isPrimarySlower?15:50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimarySlower?25:50; - break; - default: - castChance = 0; - break; - } - break; - case BEASTLORD: - case SHAMAN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimarySlower?isPrimaryHealer?0:5:isPrimaryHealer?10:15; - break; - case BotStanceEfficient: - castChance = isPrimarySlower?isPrimaryHealer?0:0:isPrimaryHealer?5:10; - break; - case BotStanceAggressive: - castChance = isPrimarySlower?isPrimaryHealer?5:15:isPrimaryHealer?15:25; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimarySlower?isPrimaryHealer?15:25:isPrimaryHealer?25:50; - break; - default: - castChance = 0; - break; - } - break; - case NECROMANCER: - case RANGER: - case SHADOWKNIGHT: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - case BotStanceAggressive: - castChance = 15; - break; - case BotStanceEfficient: - castChance = 5; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 50; - break; - default: - castChance = 0; - break; - } - break; - case BARD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceEfficient: - castChance = 25; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 100; - break; - default: - castChance = 0; - break; - } - break; - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_NukeIndex] = castChance; - - //Heal - switch(botClass) - { - case CLERIC: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceEfficient: - case BotStanceReactive: - castChance = 100; - break; - case BotStanceAggressive: - castChance = 75; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 50; - break; - default: - castChance = 0; - break; - } - break; - case DRUID: - case SHAMAN: - switch(botStance) - { - case BotStanceEfficient: - castChance = isPrimaryHealer?100:15; - break; - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimaryHealer?100:25; - break; - case BotStanceAggressive: - castChance = isPrimaryHealer?75:15; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimaryHealer?50:10; - break; - default: - castChance = 0; - break; - } - break; - case NECROMANCER: - case MAGICIAN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 100; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 25; - break; - default: - castChance = 0; - break; - } - break; - case SHADOWKNIGHT: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 50; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 25; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 15; - break; - default: - castChance = 0; - break; - } - break; - case BEASTLORD: - case PALADIN: - case RANGER: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimaryHealer?100:25; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = isPrimaryHealer?75:15; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimaryHealer?50:0; - break; - default: - castChance = 0; - break; - } - break; - case BARD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 100; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 25; - break; - default: - castChance = 0; - break; - } - break; - case ENCHANTER: - case WIZARD: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_HealIndex] = castChance; - - //Root - castChance = 0; - _spellCastingChances[botStance][SpellType_RootIndex] = castChance; - - //Buff - switch(botClass) - { - case BARD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 100; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 25; - break; - default: - castChance = 0; - break; - } - break; - case CLERIC: - case DRUID: - case SHAMAN: - case NECROMANCER: - case MAGICIAN: - case SHADOWKNIGHT: - case BEASTLORD: - case PALADIN: - case RANGER: - case ENCHANTER: - case WIZARD: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_BuffIndex] = castChance; - - //Escape - switch(botClass) - { - case ENCHANTER: - case WIZARD: - case RANGER: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - case BotStanceEfficient: - castChance = 100; - break; - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 25; - break; - default: - castChance = 0; - break; - } - break; - case CLERIC: - case DRUID: - case SHAMAN: - case NECROMANCER: - case MAGICIAN: - case BARD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - case BotStanceEfficient: - castChance = 50; - break; - case BotStanceAggressive: - castChance = 25; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 15; - break; - default: - castChance = 0; - break; - } - break; - case SHADOWKNIGHT: - case PALADIN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 25; - break; - case BotStanceEfficient: - castChance = 15; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - break; - case BEASTLORD: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_EscapeIndex] = castChance; - - //Pet - switch(botClass) - { - case MAGICIAN: - case NECROMANCER: - case BEASTLORD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 100; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 25; - break; - default: - castChance = 0; - break; - } - break; - case DRUID: - case SHAMAN: - case ENCHANTER: - case SHADOWKNIGHT: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 25; - break; - case BotStanceEfficient: - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 10; - break; - default: - castChance = 0; - break; - } - break; - case BARD: - case WIZARD: - case CLERIC: - case RANGER: - case PALADIN: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_PetIndex] = castChance; - - //Lifetap - switch(botClass) - { - case NECROMANCER: - case SHADOWKNIGHT: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 100; - break; - default: - castChance = 0; - break; - } - break; - case MAGICIAN: - case BEASTLORD: - case DRUID: - case SHAMAN: - case ENCHANTER: - case BARD: - case WIZARD: - case CLERIC: - case RANGER: - case PALADIN: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_LifetapIndex] = castChance; - - //Snare - castChance = 0; - _spellCastingChances[botStance][SpellType_SnareIndex] = castChance; - - //DOT - switch(botClass) - { - case NECROMANCER: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceEfficient: - castChance = 25; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 75; - break; - default: - castChance = 0; - break; - } - break; - case DRUID: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimaryHealer?15:50; - break; - case BotStanceEfficient: - castChance = isPrimaryHealer?10:25; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimaryHealer?25:50; - break; - default: - castChance = 0; - break; - } - break; - case ENCHANTER: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimarySlower?15:50; - break; - case BotStanceEfficient: - castChance = isPrimarySlower?10:25; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimarySlower?25:15; - break; - default: - castChance = 0; - break; - } - break; - case SHAMAN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimarySlower?isPrimaryHealer?0:15:isPrimaryHealer?15:25; - break; - case BotStanceEfficient: - castChance = isPrimarySlower?isPrimaryHealer?0:10:isPrimaryHealer?10:15; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimarySlower?isPrimaryHealer?15:50:isPrimaryHealer?25:50; - break; - default: - castChance = 0; - break; - } - break; - case BEASTLORD: - case RANGER: - case SHADOWKNIGHT: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimarySlower?10:15; - break; - case BotStanceEfficient: - castChance = isPrimarySlower?0:10; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimarySlower?25:50; - break; - default: - castChance = 0; - break; - } - break; - case BARD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimarySlower?25:50; - break; - case BotStanceEfficient: - castChance = isPrimarySlower?15:25; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimarySlower?50:100; - break; - default: - castChance = 0; - break; - } - break; - case MAGICIAN: - case PALADIN: - case CLERIC: - case WIZARD: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_DOTIndex] = castChance; - - //Dispel - switch(botClass) - { - case BARD: - case ENCHANTER: - case WIZARD: - case MAGICIAN: - case CLERIC: - case DRUID: - case SHAMAN: - case NECROMANCER: - case RANGER: - case SHADOWKNIGHT: - case PALADIN: - case BEASTLORD: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_DispelIndex] = castChance; - - //InCombatBuff - switch(botClass) - { - case CLERIC: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 15; - break; - case BotStanceEfficient: - castChance = 0; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 25; - break; - default: - castChance = 0; - break; - } - break; - case PALADIN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 25; - break; - case BotStanceEfficient: - castChance = 0; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 50; - break; - default: - castChance = 0; - break; - } - break; - case SHAMAN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimaryHealer?75:50; - break; - case BotStanceEfficient: - castChance = isPrimaryHealer?50:25; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimaryHealer?100:75; - break; - default: - castChance = 0; - break; - } - break; - case BARD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 100; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 25; - break; - default: - castChance = 0; - break; - } - break; - case BEASTLORD: - case MAGICIAN: - case DRUID: - case ENCHANTER: - case WIZARD: - case NECROMANCER: - case SHADOWKNIGHT: - case RANGER: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_InCombatBuffIndex] = castChance; - - //Mez - switch(botClass) - { - case ENCHANTER: - case BARD: - castChance = 100; - break; - case WIZARD: - case CLERIC: - case DRUID: - case SHAMAN: - case NECROMANCER: - case MAGICIAN: - case RANGER: - case SHADOWKNIGHT: - case PALADIN: - case BEASTLORD: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_MezIndex] = castChance; - - //Charm - castChance = 0; - _spellCastingChances[botStance][SpellType_CharmIndex] = castChance; - - //Slow - switch(botClass) - { - case ENCHANTER: - case SHAMAN: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimarySlower?100:50; - break; - case BotStanceEfficient: - castChance = isPrimarySlower?100:25; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimarySlower?50:15; - break; - default: - castChance = 0; - break; - } - break; - case BARD: - case BEASTLORD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = isPrimarySlower?100:25; - break; - case BotStanceEfficient: - castChance = isPrimarySlower?100:15; - break; - case BotStanceAggressive: - case BotStanceBurn: - case BotStanceBurnAE: - castChance = isPrimarySlower?50:0; - break; - default: - castChance = 0; - break; - } - break; - case MAGICIAN: - case DRUID: - case PALADIN: - case CLERIC: - case WIZARD: - case NECROMANCER: - case SHADOWKNIGHT: - case RANGER: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_SlowIndex] = castChance; - - //Debuff - switch(botClass) - { - case ENCHANTER: - case SHAMAN: - case MAGICIAN: - case DRUID: - case NECROMANCER: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 25; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 15; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - break; - case BEASTLORD: - case RANGER: - case SHADOWKNIGHT: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceReactive: - castChance = 15; - break; - case BotStanceEfficient: - case BotStanceAggressive: - castChance = 10; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - break; - case BARD: - switch(botStance) - { - case BotStanceBalanced: - case BotStanceEfficient: - castChance = 25; - break; - case BotStanceReactive: - case BotStanceAggressive: - castChance = 50; - break; - case BotStanceBurn: - case BotStanceBurnAE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - break; - case CLERIC: - case PALADIN: - case WIZARD: - case WARRIOR: - case BERSERKER: - case MONK: - case ROGUE: - castChance = 0; - break; - default: - castChance = 0; - break; - } - _spellCastingChances[botStance][SpellType_DebuffIndex] = castChance; - - //Cure - castChance = 0; - _spellCastingChances[botStance][SpellType_CureIndex] = castChance; -} - -uint8 Bot::GetChanceToCastBySpellType(uint32 spellType) { - int index = 0; - int botStance = (int)GetBotStance(); - uint8 chance = 0; - - if(GetBotStance() >= MaxStances) - return 0; - + }; + + uint8 spell_type_index = MaxSpellTypes; switch (spellType) { - case SpellType_Nuke: { - index = SpellType_NukeIndex; - break; - } - case SpellType_Heal: { - index = SpellType_HealIndex; - break; - } - case SpellType_Root: { - index = SpellType_RootIndex; - break; - } - case SpellType_Buff: { - index = SpellType_BuffIndex; - break; - } - case SpellType_Escape: { - index = SpellType_EscapeIndex; - break; - } - case SpellType_Pet: { - index = SpellType_PetIndex; - break; - } - case SpellType_Lifetap: { - index = SpellType_LifetapIndex; - break; - } - case SpellType_Snare: { - index = SpellType_SnareIndex; - break; - } - case SpellType_DOT: { - index = SpellType_DOTIndex; - break; - } - case SpellType_Dispel: { - index = SpellType_DispelIndex; - break; - } - case SpellType_InCombatBuff: { - index = SpellType_InCombatBuffIndex; - break; - } - case SpellType_Mez: { - index = SpellType_MezIndex; - break; - } - case SpellType_Charm: { - index = SpellType_CharmIndex; - break; - } - case SpellType_Slow: { - index = SpellType_SlowIndex; - break; - } - case SpellType_Debuff: { - index = SpellType_DebuffIndex; - break; - } - case SpellType_Cure: { - index = SpellType_CureIndex; - break; - } + case SpellType_Nuke: + spell_type_index = SpellType_NukeIndex; + break; + case SpellType_Heal: + spell_type_index = SpellType_HealIndex; + break; + case SpellType_Root: + spell_type_index = SpellType_RootIndex; + break; + case SpellType_Buff: + spell_type_index = SpellType_BuffIndex; + break; + case SpellType_Escape: + spell_type_index = SpellType_EscapeIndex; + break; + case SpellType_Pet: + spell_type_index = SpellType_PetIndex; + break; + case SpellType_Lifetap: + spell_type_index = SpellType_LifetapIndex; + break; + case SpellType_Snare: + spell_type_index = SpellType_SnareIndex; + break; + case SpellType_DOT: + spell_type_index = SpellType_DOTIndex; + break; + case SpellType_Dispel: + spell_type_index = SpellType_DispelIndex; + break; + case SpellType_InCombatBuff: + spell_type_index = SpellType_InCombatBuffIndex; + break; + case SpellType_Mez: + spell_type_index = SpellType_MezIndex; + break; + case SpellType_Charm: + spell_type_index = SpellType_CharmIndex; + break; + case SpellType_Slow: + spell_type_index = SpellType_SlowIndex; + break; + case SpellType_Debuff: + spell_type_index = SpellType_DebuffIndex; + break; + case SpellType_Cure: + spell_type_index = SpellType_CureIndex; + break; + case SpellType_Resurrect: + spell_type_index = SpellType_ResurrectIndex; + break; + case SpellType_HateRedux: + spell_type_index = SpellType_HateReduxIndex; + break; + case SpellType_InCombatBuffSong: + spell_type_index = SpellType_InCombatBuffSongIndex; + break; + case SpellType_OutOfCombatBuffSong: + spell_type_index = SpellType_OutOfCombatBuffSongIndex; + break; + default: + spell_type_index = MaxSpellTypes; + break; } - - if(index >= MaxSpellTypes) + if (spell_type_index >= MaxSpellTypes) return 0; - chance = _spellCastingChances[botStance][index]; + uint8 class_index = GetClass(); + if (class_index > BERSERKER || class_index < WARRIOR) + return 0; + --class_index; - return chance; + uint8 stance_index = (uint8)GetBotStance(); + if (stance_index >= MaxStances) + return 0; + + uint8 type_index = nHS; + if (HasGroup()) { + if (IsGroupPrimaryHealer()) + type_index |= pH; + if (IsGroupPrimarySlower()) + type_index |= pS; + } + + return spell_casting_chances[spell_type_index][class_index][stance_index][type_index]; } #endif diff --git a/zone/groups.cpp b/zone/groups.cpp index 2162e735e..37f1f9da1 100644 --- a/zone/groups.cpp +++ b/zone/groups.cpp @@ -333,13 +333,6 @@ bool Group::AddMember(Mob* newmember, const char *NewMemberName, uint32 Characte database.SetGroupID(NewMemberName, GetID(), owner->CharacterID(), true); } } -#ifdef BOTS - for (i = 0;i < MAX_GROUP_MEMBERS; i++) { - if (members[i] != nullptr && members[i]->IsBot()) { - members[i]->CastToBot()->CalcChanceToCast(); - } - } -#endif //BOTS } else { @@ -496,16 +489,11 @@ void Group::MemberZoned(Mob* removemob) { SetLeader(nullptr); for (i = 0; i < MAX_GROUP_MEMBERS; i++) { - if (members[i] == removemob) { - members[i] = nullptr; - //should NOT clear the name, it is used for world communication. - break; - } -#ifdef BOTS - if (members[i] != nullptr && members[i]->IsBot()) { - members[i]->CastToBot()->CalcChanceToCast(); + if (members[i] == removemob) { + members[i] = nullptr; + //should NOT clear the name, it is used for world communication. + break; } -#endif //BOTS } if(removemob->IsClient() && HasRole(removemob, RoleAssist)) @@ -661,11 +649,6 @@ bool Group::DelMember(Mob* oldmember, bool ignoresender) if(members[i]->IsClient()) members[i]->CastToClient()->QueuePacket(outapp); } -#ifdef BOTS - if (members[i] != nullptr && members[i]->IsBot()) { - members[i]->CastToBot()->CalcChanceToCast(); - } -#endif //BOTS } if (!ignoresender)