aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/world/2014_10_18_03_world.sql83
-rw-r--r--src/server/scripts/Spells/spell_generic.cpp309
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();
}