diff options
author | kiper <kiperek@o2.pl> | 2011-09-21 10:02:30 +0200 |
---|---|---|
committer | QAston <qaston@gmail.com> | 2011-09-21 10:02:30 +0200 |
commit | cdb4f60a147b7d9a180eaa5e20ab898fda96a5c3 (patch) | |
tree | 9f1b46fed5c049b4db24a8ef385c1ced0afd9303 | |
parent | 82bc9172651e99db4d034ab1c88cf10e1369b926 (diff) |
Merge pull request #3040
Core/Spell: Fix spell related to reputation in Oracle and Frenzy faction
-rw-r--r-- | sql/updates/world/2011_09_15_00_world_spell_script_names.sql | 5 | ||||
-rw-r--r-- | src/server/scripts/Spells/spell_generic.cpp | 47 |
2 files changed, 52 insertions, 0 deletions
diff --git a/sql/updates/world/2011_09_15_00_world_spell_script_names.sql b/sql/updates/world/2011_09_15_00_world_spell_script_names.sql new file mode 100644 index 00000000000..d3c16bec947 --- /dev/null +++ b/sql/updates/world/2011_09_15_00_world_spell_script_names.sql @@ -0,0 +1,5 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (53475,53487,54015); +INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES +(53475, 'spell_gen_oracle_wolvar_reputation'), -- Set Oracle Faction Friendly +(53487, 'spell_gen_oracle_wolvar_reputation'), -- Set Wolvar Faction Honored +(54015, 'spell_gen_oracle_wolvar_reputation'); -- Set Oracle Faction Honored
\ No newline at end of file diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index dfdf03c421e..248dd31c2a8 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -1313,6 +1313,52 @@ class spell_gen_vehicle_scaling : public SpellScriptLoader } }; + +class spell_gen_oracle_wolvar_reputation: public SpellScriptLoader +{ +public: + spell_gen_oracle_wolvar_reputation() : SpellScriptLoader("spell_gen_oracle_wolvar_reputation") { } + + class spell_gen_oracle_wolvar_reputation_SpellScript : public SpellScript + { + PrepareSpellScript(spell_gen_oracle_wolvar_reputation_SpellScript) + + void HandleDummy(SpellEffIndex effIndex) + { + + if (Player* player = GetCaster()->ToPlayer()) + { + + uint32 factionId = GetSpellInfo()->Effects[effIndex].CalcValue(); + int32 repChange = GetSpellInfo()->Effects[EFFECT_1].CalcValue(); + + FactionEntry const* factionEntry = sFactionStore.LookupEntry(factionId); + + if (!factionEntry) + return; + + // Set rep to baserep + basepoints (expecting spillover for oposite faction -> become hated) + // Not when player already has equal or higher rep with this faction + if (player->GetReputationMgr().GetBaseReputation(factionEntry) < repChange) + player->GetReputationMgr().SetReputation(factionEntry, repChange); + + // EFFECT_INDEX_2 most likely update at war state, we already handle this in SetReputation + } + + } + + void Register() + { + OnEffect += SpellEffectFn(spell_gen_oracle_wolvar_reputation_SpellScript::HandleDummy, EFFECT_0, SPELL_EFFECT_DUMMY); + } + }; + + SpellScript* GetSpellScript() const + { + return new spell_gen_oracle_wolvar_reputation_SpellScript(); + } +}; + void AddSC_generic_spell_scripts() { new spell_gen_absorb0_hitlimit1(); @@ -1343,4 +1389,5 @@ void AddSC_generic_spell_scripts() new spell_gen_allow_cast_from_item_only(); new spell_gen_launch(); new spell_gen_vehicle_scaling(); + new spell_gen_oracle_wolvar_reputation(); } |