diff options
-rw-r--r-- | sql/updates/world/2014_10_18_03_world.sql | 83 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 309 |
2 files changed, 392 insertions, 0 deletions
diff --git a/sql/updates/world/2014_10_18_03_world.sql b/sql/updates/world/2014_10_18_03_world.sql new file mode 100644 index 00000000000..708dd3295c9 --- /dev/null +++ b/sql/updates/world/2014_10_18_03_world.sql @@ -0,0 +1,83 @@ +DELETE FROM `spell_script_names` WHERE `ScriptName` = 'spell_gen_mixology_bonus'; +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(53755,'spell_gen_mixology_bonus'), +(53758,'spell_gen_mixology_bonus'), +(53760,'spell_gen_mixology_bonus'), +(54212,'spell_gen_mixology_bonus'), +(62380,'spell_gen_mixology_bonus'), +(53752,'spell_gen_mixology_bonus'), +(28521,'spell_gen_mixology_bonus'), +(42735,'spell_gen_mixology_bonus'), +(28518,'spell_gen_mixology_bonus'), +(28519,'spell_gen_mixology_bonus'), +(28540,'spell_gen_mixology_bonus'), +(28520,'spell_gen_mixology_bonus'), +(17629,'spell_gen_mixology_bonus'), +(17627,'spell_gen_mixology_bonus'), +(17628,'spell_gen_mixology_bonus'), +(17626,'spell_gen_mixology_bonus'), +(28497,'spell_gen_mixology_bonus'), +(60340,'spell_gen_mixology_bonus'), +(60341,'spell_gen_mixology_bonus'), +(60343,'spell_gen_mixology_bonus'), +(60344,'spell_gen_mixology_bonus'), +(60345,'spell_gen_mixology_bonus'), +(60346,'spell_gen_mixology_bonus'), +(53751,'spell_gen_mixology_bonus'), +(53764,'spell_gen_mixology_bonus'), +(53748,'spell_gen_mixology_bonus'), +(60347,'spell_gen_mixology_bonus'), +(53763,'spell_gen_mixology_bonus'), +(53747,'spell_gen_mixology_bonus'), +(53749,'spell_gen_mixology_bonus'), +(33721,'spell_gen_mixology_bonus'), +(53746,'spell_gen_mixology_bonus'), +(28514,'spell_gen_mixology_bonus'), +(28509,'spell_gen_mixology_bonus'), +(28503,'spell_gen_mixology_bonus'), +(28502,'spell_gen_mixology_bonus'), +(38954,'spell_gen_mixology_bonus'), +(39628,'spell_gen_mixology_bonus'), +(54494,'spell_gen_mixology_bonus'), +(39627,'spell_gen_mixology_bonus'), +(28501,'spell_gen_mixology_bonus'), +(28493,'spell_gen_mixology_bonus'), +(39626,'spell_gen_mixology_bonus'), +(33726,'spell_gen_mixology_bonus'), +(28491,'spell_gen_mixology_bonus'), +(39625,'spell_gen_mixology_bonus'), +(28490,'spell_gen_mixology_bonus'), +(54452,'spell_gen_mixology_bonus'), +(33720,'spell_gen_mixology_bonus'), +(24361,'spell_gen_mixology_bonus'), +(17539,'spell_gen_mixology_bonus'), +(17538,'spell_gen_mixology_bonus'), +(17537,'spell_gen_mixology_bonus'), +(17535,'spell_gen_mixology_bonus'), +(11348,'spell_gen_mixology_bonus'), +(11406,'spell_gen_mixology_bonus'), +(26276,'spell_gen_mixology_bonus'), +(11474,'spell_gen_mixology_bonus'), +(24363,'spell_gen_mixology_bonus'), +(11405,'spell_gen_mixology_bonus'), +(11334,'spell_gen_mixology_bonus'), +(11390,'spell_gen_mixology_bonus'), +(11396,'spell_gen_mixology_bonus'), +(11349,'spell_gen_mixology_bonus'), +(21920,'spell_gen_mixology_bonus'), +(11328,'spell_gen_mixology_bonus'), +(3223,'spell_gen_mixology_bonus'), +(3593,'spell_gen_mixology_bonus'), +(3164,'spell_gen_mixology_bonus'), +(7844,'spell_gen_mixology_bonus'), +(3160,'spell_gen_mixology_bonus'), +(3220,'spell_gen_mixology_bonus'), +(3222,'spell_gen_mixology_bonus'), +(63729,'spell_gen_mixology_bonus'), +(3166,'spell_gen_mixology_bonus'), +(8212,'spell_gen_mixology_bonus'), +(2374,'spell_gen_mixology_bonus'), +(2378,'spell_gen_mixology_bonus'), +(3219,'spell_gen_mixology_bonus'), +(2367,'spell_gen_mixology_bonus'), +(673,'spell_gen_mixology_bonus'); diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index b2efa1052e8..93f9519993e 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3733,6 +3733,314 @@ public: } }; +enum RequiredMixologySpells +{ + SPELL_MIXOLOGY = 53042, + // Flasks + SPELL_FLASK_OF_THE_FROST_WYRM = 53755, + SPELL_FLASK_OF_STONEBLOOD = 53758, + SPELL_FLASK_OF_ENDLESS_RAGE = 53760, + SPELL_FLASK_OF_PURE_MOJO = 54212, + SPELL_LESSER_FLASK_OF_RESISTANCE = 62380, + SPELL_LESSER_FLASK_OF_TOUGHNESS = 53752, + SPELL_FLASK_OF_BLINDING_LIGHT = 28521, + SPELL_FLASK_OF_CHROMATIC_WONDER = 42735, + SPELL_FLASK_OF_FORTIFICATION = 28518, + SPELL_FLASK_OF_MIGHTY_RESTORATION = 28519, + SPELL_FLASK_OF_PURE_DEATH = 28540, + SPELL_FLASK_OF_RELENTLESS_ASSAULT = 28520, + SPELL_FLASK_OF_CHROMATIC_RESISTANCE = 17629, + SPELL_FLASK_OF_DISTILLED_WISDOM = 17627, + SPELL_FLASK_OF_SUPREME_POWER = 17628, + SPELL_FLASK_OF_THE_TITANS = 17626, + // Elixirs + SPELL_ELIXIR_OF_MIGHTY_AGILITY = 28497, + SPELL_ELIXIR_OF_ACCURACY = 60340, + SPELL_ELIXIR_OF_DEADLY_STRIKES = 60341, + SPELL_ELIXIR_OF_MIGHTY_DEFENSE = 60343, + SPELL_ELIXIR_OF_EXPERTISE = 60344, + SPELL_ELIXIR_OF_ARMOR_PIERCING = 60345, + SPELL_ELIXIR_OF_LIGHTNING_SPEED = 60346, + SPELL_ELIXIR_OF_MIGHTY_FORTITUDE = 53751, + SPELL_ELIXIR_OF_MIGHTY_MAGEBLOOD = 53764, + SPELL_ELIXIR_OF_MIGHTY_STRENGTH = 53748, + SPELL_ELIXIR_OF_MIGHTY_TOUGHTS = 60347, + SPELL_ELIXIR_OF_PROTECTION = 53763, + SPELL_ELIXIR_OF_SPIRIT = 53747, + SPELL_GURUS_ELIXIR = 53749, + SPELL_SHADOWPOWER_ELIXIR = 33721, + SPELL_WRATH_ELIXIR = 53746, + SPELL_ELIXIR_OF_EMPOWERMENT = 28514, + SPELL_ELIXIR_OF_MAJOR_MAGEBLOOD = 28509, + SPELL_ELIXIR_OF_MAJOR_SHADOW_POWER = 28503, + SPELL_ELIXIR_OF_MAJOR_DEFENSE = 28502, + SPELL_FEL_STRENGTH_ELIXIR = 38954, + SPELL_ELIXIR_OF_IRONSKIN = 39628, + SPELL_ELIXIR_OF_MAJOR_AGILITY = 54494, + SPELL_ELIXIR_OF_DRAENIC_WISDOM = 39627, + SPELL_ELIXIR_OF_MAJOR_FIREPOWER = 28501, + SPELL_ELIXIR_OF_MAJOR_FROST_POWER = 28493, + SPELL_EARTHEN_ELIXIR = 39626, + SPELL_ELIXIR_OF_MASTERY = 33726, + SPELL_ELIXIR_OF_HEALING_POWER = 28491, + SPELL_ELIXIR_OF_MAJOR_FORTITUDE = 39625, + SPELL_ELIXIR_OF_MAJOR_STRENGTH = 28490, + SPELL_ADEPTS_ELIXIR = 54452, + SPELL_ONSLAUGHT_ELIXIR = 33720, + SPELL_MIGHTY_TROLLS_BLOOD_ELIXIR = 24361, + SPELL_GREATER_ARCANE_ELIXIR = 17539, + SPELL_ELIXIR_OF_THE_MONGOOSE = 17538, + SPELL_ELIXIR_OF_BRUTE_FORCE = 17537, + SPELL_ELIXIR_OF_SAGES = 17535, + SPELL_ELIXIR_OF_SUPERIOR_DEFENSE = 11348, + SPELL_ELIXIR_OF_DEMONSLAYING = 11406, + SPELL_ELIXIR_OF_GREATER_FIREPOWER = 26276, + SPELL_ELIXIR_OF_SHADOW_POWER = 11474, + SPELL_MAGEBLOOD_ELIXIR = 24363, + SPELL_ELIXIR_OF_GIANTS = 11405, + SPELL_ELIXIR_OF_GREATER_AGILITY = 11334, + SPELL_ARCANE_ELIXIR = 11390, + SPELL_ELIXIR_OF_GREATER_INTELLECT = 11396, + SPELL_ELIXIR_OF_GREATER_DEFENSE = 11349, + SPELL_ELIXIR_OF_FROST_POWER = 21920, + SPELL_ELIXIR_OF_AGILITY = 11328, + SPELL_MAJOR_TROLLS_BLLOOD_ELIXIR = 3223, + SPELL_ELIXIR_OF_FORTITUDE = 3593, + SPELL_ELIXIR_OF_OGRES_STRENGTH = 3164, + SPELL_ELIXIR_OF_FIREPOWER = 7844, + SPELL_ELIXIR_OF_LESSER_AGILITY = 3160, + SPELL_ELIXIR_OF_DEFENSE = 3220, + SPELL_STRONG_TROLLS_BLOOD_ELIXIR = 3222, + SPELL_ELIXIR_OF_MINOR_ACCURACY = 63729, + SPELL_ELIXIR_OF_WISDOM = 3166, + SPELL_ELIXIR_OF_GIANTH_GROWTH = 8212, + SPELL_ELIXIR_OF_MINOR_AGILITY = 2374, + SPELL_ELIXIR_OF_MINOR_FORTITUDE = 2378, + SPELL_WEAK_TROLLS_BLOOD_ELIXIR = 3219, + SPELL_ELIXIR_OF_LIONS_STRENGTH = 2367, + SPELL_ELIXIR_OF_MINOR_DEFENSE = 673 +}; + +class spell_gen_mixology_bonus : public SpellScriptLoader +{ +public: + spell_gen_mixology_bonus() : SpellScriptLoader("spell_gen_mixology_bonus") { } + + class spell_gen_mixology_bonus_AuraScript : public AuraScript + { + PrepareAuraScript(spell_gen_mixology_bonus_AuraScript); + + public: + spell_gen_mixology_bonus_AuraScript() + { + bonus = 0; + } + + private: + bool Validate(SpellInfo const* /*spellInfo*/) override + { + if (!sSpellMgr->GetSpellInfo(SPELL_MIXOLOGY)) + return false; + return true; + } + + bool Load() override + { + return GetCaster() && GetCaster()->GetTypeId() == TYPEID_PLAYER; + } + + void SetBonusValueForEffect(SpellEffIndex effIndex, int32 value, AuraEffect const* aurEff) + { + if (aurEff->GetEffIndex() == uint32(effIndex)) + bonus = value; + } + + void CalculateAmount(AuraEffect const* aurEff, int32& amount, bool& /*canBeRecalculated*/) + { + if (GetCaster()->HasAura(SPELL_MIXOLOGY) && GetCaster()->HasSpell(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell)) + { + switch (GetId()) + { + case SPELL_WEAK_TROLLS_BLOOD_ELIXIR: + case SPELL_MAGEBLOOD_ELIXIR: + bonus = amount; + break; + case SPELL_ELIXIR_OF_FROST_POWER: + case SPELL_LESSER_FLASK_OF_TOUGHNESS: + case SPELL_LESSER_FLASK_OF_RESISTANCE: + bonus = CalculatePct(amount, 80); + break; + case SPELL_ELIXIR_OF_MINOR_DEFENSE: + case SPELL_ELIXIR_OF_LIONS_STRENGTH: + case SPELL_ELIXIR_OF_MINOR_AGILITY: + case SPELL_MAJOR_TROLLS_BLLOOD_ELIXIR: + case SPELL_ELIXIR_OF_SHADOW_POWER: + case SPELL_ELIXIR_OF_BRUTE_FORCE: + case SPELL_MIGHTY_TROLLS_BLOOD_ELIXIR: + case SPELL_ELIXIR_OF_GREATER_FIREPOWER: + case SPELL_ONSLAUGHT_ELIXIR: + case SPELL_EARTHEN_ELIXIR: + case SPELL_ELIXIR_OF_MAJOR_AGILITY: + case SPELL_FLASK_OF_THE_TITANS: + case SPELL_FLASK_OF_RELENTLESS_ASSAULT: + case SPELL_FLASK_OF_STONEBLOOD: + case SPELL_ELIXIR_OF_MINOR_ACCURACY: + bonus = CalculatePct(amount, 50); + break; + case SPELL_ELIXIR_OF_PROTECTION: + bonus = 280; + break; + case SPELL_ELIXIR_OF_MAJOR_DEFENSE: + bonus = 200; + break; + case SPELL_ELIXIR_OF_GREATER_DEFENSE: + case SPELL_ELIXIR_OF_SUPERIOR_DEFENSE: + bonus = 140; + break; + case SPELL_ELIXIR_OF_FORTITUDE: + bonus = 100; + break; + case SPELL_FLASK_OF_ENDLESS_RAGE: + bonus = 82; + break; + case SPELL_ELIXIR_OF_DEFENSE: + bonus = 70; + break; + case SPELL_ELIXIR_OF_DEMONSLAYING: + bonus = 50; + break; + case SPELL_FLASK_OF_THE_FROST_WYRM: + bonus = 47; + break; + case SPELL_WRATH_ELIXIR: + bonus = 32; + break; + case SPELL_ELIXIR_OF_MAJOR_FROST_POWER: + case SPELL_ELIXIR_OF_MAJOR_FIREPOWER: + case SPELL_ELIXIR_OF_MAJOR_SHADOW_POWER: + bonus = 29; + break; + case SPELL_ELIXIR_OF_MIGHTY_TOUGHTS: + bonus = 27; + break; + case SPELL_FLASK_OF_SUPREME_POWER: + case SPELL_FLASK_OF_BLINDING_LIGHT: + case SPELL_FLASK_OF_PURE_DEATH: + case SPELL_SHADOWPOWER_ELIXIR: + bonus = 23; + break; + case SPELL_ELIXIR_OF_MIGHTY_AGILITY: + case SPELL_FLASK_OF_DISTILLED_WISDOM: + case SPELL_ELIXIR_OF_SPIRIT: + case SPELL_ELIXIR_OF_MIGHTY_STRENGTH: + case SPELL_FLASK_OF_PURE_MOJO: + case SPELL_ELIXIR_OF_ACCURACY: + case SPELL_ELIXIR_OF_DEADLY_STRIKES: + case SPELL_ELIXIR_OF_MIGHTY_DEFENSE: + case SPELL_ELIXIR_OF_EXPERTISE: + case SPELL_ELIXIR_OF_ARMOR_PIERCING: + case SPELL_ELIXIR_OF_LIGHTNING_SPEED: + bonus = 20; + break; + case SPELL_FLASK_OF_CHROMATIC_RESISTANCE: + bonus = 17; + break; + case SPELL_ELIXIR_OF_MINOR_FORTITUDE: + case SPELL_ELIXIR_OF_MAJOR_STRENGTH: + bonus = 15; + break; + case SPELL_FLASK_OF_MIGHTY_RESTORATION: + bonus = 13; + break; + case SPELL_ARCANE_ELIXIR: + bonus = 12; + break; + case SPELL_ELIXIR_OF_GREATER_AGILITY: + case SPELL_ELIXIR_OF_GIANTS: + bonus = 11; + break; + case SPELL_ELIXIR_OF_AGILITY: + case SPELL_ELIXIR_OF_GREATER_INTELLECT: + case SPELL_ELIXIR_OF_SAGES: + case SPELL_ELIXIR_OF_IRONSKIN: + case SPELL_ELIXIR_OF_MIGHTY_MAGEBLOOD: + bonus = 10; + break; + case SPELL_ELIXIR_OF_HEALING_POWER: + bonus = 9; + break; + case SPELL_ELIXIR_OF_DRAENIC_WISDOM: + case SPELL_GURUS_ELIXIR: + bonus = 8; + break; + case SPELL_ELIXIR_OF_FIREPOWER: + case SPELL_ELIXIR_OF_MAJOR_MAGEBLOOD: + case SPELL_ELIXIR_OF_MASTERY: + bonus = 6; + break; + case SPELL_ELIXIR_OF_LESSER_AGILITY: + case SPELL_ELIXIR_OF_OGRES_STRENGTH: + case SPELL_ELIXIR_OF_WISDOM: + case SPELL_ELIXIR_OF_THE_MONGOOSE: + bonus = 5; + break; + case SPELL_STRONG_TROLLS_BLOOD_ELIXIR: + case SPELL_FLASK_OF_CHROMATIC_WONDER: + bonus = 4; + break; + case SPELL_ELIXIR_OF_EMPOWERMENT: + bonus = -10; + break; + case SPELL_ADEPTS_ELIXIR: + SetBonusValueForEffect(EFFECT_0, 13, aurEff); + SetBonusValueForEffect(EFFECT_1, 13, aurEff); + SetBonusValueForEffect(EFFECT_2, 8, aurEff); + break; + case SPELL_ELIXIR_OF_MIGHTY_FORTITUDE: + SetBonusValueForEffect(EFFECT_0, 160, aurEff); + break; + case SPELL_ELIXIR_OF_MAJOR_FORTITUDE: + SetBonusValueForEffect(EFFECT_0, 116, aurEff); + SetBonusValueForEffect(EFFECT_1, 6, aurEff); + break; + case SPELL_FEL_STRENGTH_ELIXIR: + SetBonusValueForEffect(EFFECT_0, 40, aurEff); + SetBonusValueForEffect(EFFECT_1, 40, aurEff); + break; + case SPELL_FLASK_OF_FORTIFICATION: + SetBonusValueForEffect(EFFECT_0, 210, aurEff); + SetBonusValueForEffect(EFFECT_1, 5, aurEff); + break; + case SPELL_GREATER_ARCANE_ELIXIR: + SetBonusValueForEffect(EFFECT_0, 19, aurEff); + SetBonusValueForEffect(EFFECT_1, 19, aurEff); + SetBonusValueForEffect(EFFECT_2, 5, aurEff); + break; + case SPELL_ELIXIR_OF_GIANTH_GROWTH: + SetBonusValueForEffect(EFFECT_0, 5, aurEff); + break; + default: + TC_LOG_ERROR("spells", "SpellId %d couldn't be processed in spell_gen_mixology_bonus", GetId()); + break; + } + amount += bonus; + } + } + + int32 bonus; + + void Register() override + { + DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_gen_mixology_bonus_AuraScript::CalculateAmount, EFFECT_ALL, SPELL_AURA_ANY); + } + }; + + AuraScript* GetAuraScript() const override + { + return new spell_gen_mixology_bonus_AuraScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -3815,4 +4123,5 @@ void AddSC_generic_spell_scripts() new spell_gen_eject_all_passengers(); new spell_gen_gm_freeze(); new spell_gen_stand(); + new spell_gen_mixology_bonus(); } |