aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Spells
diff options
context:
space:
mode:
authorTraesh <traesh@farahlon.com>2022-04-14 23:31:16 +0200
committerShauren <shauren.trinity@gmail.com>2022-04-16 12:15:37 +0200
commit87723e32e24f03ac1d062e33edcbe935e4e59421 (patch)
tree9c7c655929ee19dd827c6ee48eee6c7438592e6e /src/server/game/Spells
parentc4ef231e2a25234099391f574942f6490d400f15 (diff)
Core/Battlegrounds: Implement mercenary system
Diffstat (limited to 'src/server/game/Spells')
-rw-r--r--src/server/game/Spells/Auras/SpellAuraDefines.h6
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp13
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
-rw-r--r--src/server/game/Spells/SpellMgr.cpp17
4 files changed, 33 insertions, 4 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 90c3f3ebc45..7ec70366e36 100644
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -580,9 +580,9 @@ enum AuraType : uint32
SPELL_AURA_486 = 486,
SPELL_AURA_COSMETIC_MOUNTED = 487,
SPELL_AURA_488 = 488,
- SPELL_AURA_MOD_ALTERNATIVE_DEFAULT_LANGUAGE = 489,
- SPELL_AURA_490 = 490,
- SPELL_AURA_491 = 491,
+ SPELL_AURA_MOD_ALTERNATIVE_DEFAULT_LANGUAGE = 489, // NYI
+ SPELL_AURA_SWITCH_TEAM = 490,
+ SPELL_AURA_491 = 491, // NYI
SPELL_AURA_492 = 492,
SPELL_AURA_493 = 493, // 1 spell, 267116 - Animal Companion (modifies Call Pet)
SPELL_AURA_SET_POWER_POINT_CHARGE = 494, // NYI
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 51bcda8d306..c0e88613e1c 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -556,7 +556,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleCosmeticMounted, //487 SPELL_AURA_COSMETIC_MOUNTED
&AuraEffect::HandleNULL, //488
&AuraEffect::HandleNULL, //489 SPELL_AURA_MOD_ALTERNATIVE_DEFAULT_LANGUAGE
- &AuraEffect::HandleNULL, //490
+ &AuraEffect::HandleSwitchTeam, //490 SPELL_AURA_SWITCH_TEAM
&AuraEffect::HandleNULL, //491
&AuraEffect::HandleNULL, //492
&AuraEffect::HandleNULL, //493
@@ -6011,6 +6011,17 @@ void AuraEffect::HandleLinkedSummon(AuraApplication const* aurApp, uint8 mode, b
}
}
+void AuraEffect::HandleSwitchTeam(AuraApplication const* aurApp, uint8 mode, bool apply) const
+{
+ if (!(mode & AURA_EFFECT_HANDLE_REAL))
+ return;
+
+ Unit* target = aurApp->GetTarget();
+
+ if (Player* player = target->ToPlayer())
+ player->SwitchToOppositeTeam(apply);
+}
+
void AuraEffect::HandleSetFFAPvP(AuraApplication const* aurApp, uint8 mode, bool /*apply*/) const
{
if (!(mode & AURA_EFFECT_HANDLE_REAL))
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 8ed3ef13e41..0ba6283c94b 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -317,6 +317,7 @@ class TC_GAME_API AuraEffect
void HandlePlayScene(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleCreateAreaTrigger(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleLinkedSummon(AuraApplication const* aurApp, uint8 mode, bool apply) const;
+ void HandleSwitchTeam(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleSetFFAPvP(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleModOverrideZonePVPType(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleBattlegroundPlayerPosition(AuraApplication const* aurApp, uint8 mode, bool apply) const;
diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp
index 55fd950d129..c6d34d035ec 100644
--- a/src/server/game/Spells/SpellMgr.cpp
+++ b/src/server/game/Spells/SpellMgr.cpp
@@ -4658,6 +4658,23 @@ void SpellMgr::LoadSpellInfoCorrections()
spellInfo->Attributes |= SPELL_ATTR0_UNAFFECTED_BY_INVULNERABILITY;
});
+ // Horde / Alliance switch (BG mercenary system)
+ ApplySpellFix({ 195838, 195843 }, [](SpellInfo* spellInfo)
+ {
+ ApplySpellEffectFix(spellInfo, EFFECT_0, [](SpellEffectInfo* spellEffectInfo)
+ {
+ spellEffectInfo->Effect = SPELL_EFFECT_APPLY_AURA;
+ });
+ ApplySpellEffectFix(spellInfo, EFFECT_1, [](SpellEffectInfo* spellEffectInfo)
+ {
+ spellEffectInfo->Effect = SPELL_EFFECT_APPLY_AURA;
+ });
+ ApplySpellEffectFix(spellInfo, EFFECT_2, [](SpellEffectInfo* spellEffectInfo)
+ {
+ spellEffectInfo->Effect = SPELL_EFFECT_APPLY_AURA;
+ });
+ });
+
for (SpellInfo const& s : mSpellInfoMap)
{
SpellInfo* spellInfo = &const_cast<SpellInfo&>(s);