aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuraDefines.h2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp36
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
3 files changed, 37 insertions, 2 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraDefines.h b/src/server/game/Spells/Auras/SpellAuraDefines.h
index 9a8ed98df7a..0eb197d203b 100755
--- a/src/server/game/Spells/Auras/SpellAuraDefines.h
+++ b/src/server/game/Spells/Auras/SpellAuraDefines.h
@@ -390,7 +390,7 @@ enum AuraType
SPELL_AURA_PROC_ON_POWER_AMOUNT = 328,
SPELL_AURA_MOD_RUNE_REGEN_SPEED = 329, // NYI
SPELL_AURA_CAST_WHILE_WALKING = 330,
- SPELL_AURA_FORCE_WEATHER = 331, // NYI
+ SPELL_AURA_FORCE_WEATHER = 331,
SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS = 332,
SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2 = 333,
SPELL_AURA_MOD_BLIND = 334, // NYI
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 0aa599baae3..f468bab187d 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -38,6 +38,7 @@
#include "Vehicle.h"
#include "Battlefield.h"
#include "BattlefieldMgr.h"
+#include "WeatherMgr.h"
class Aura;
//
@@ -386,7 +387,7 @@ pAuraEffectHandler AuraEffectHandler[TOTAL_AURAS]=
&AuraEffect::HandleNoImmediateEffect, //328 SPELL_AURA_PROC_ON_POWER_AMOUNT implemented in Unit::HandleAuraProcOnPowerAmount
&AuraEffect::HandleNULL, //329 SPELL_AURA_MOD_RUNE_REGEN_SPEED
&AuraEffect::HandleNoImmediateEffect, //330 SPELL_AURA_CAST_WHILE_WALKING
- &AuraEffect::HandleNULL, //331 SPELL_AURA_331
+ &AuraEffect::HandleAuraForceWeather, //331 SPELL_AURA_FORCE_WEATHER
&AuraEffect::HandleNoImmediateEffect, //332 SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS implemented in WorldSession::HandleCastSpellOpcode
&AuraEffect::HandleNoImmediateEffect, //333 SPELL_AURA_OVERRIDE_ACTIONBAR_SPELLS_2 implemented in WorldSession::HandleCastSpellOpcode
&AuraEffect::HandleNULL, //334 SPELL_AURA_334
@@ -6714,3 +6715,36 @@ void AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(AuraApplication* aurA
sLog->outDebug(LOG_FILTER_SPELLS_AURAS, "AuraEffect::HandleRaidProcFromChargeWithValueAuraProc: Triggering spell %u from aura %u proc", triggerSpellId, GetId());
target->CastCustomSpell(target, triggerSpellId, &value, NULL, NULL, true, NULL, this, GetCasterGUID());
}
+
+void AuraEffect::HandleAuraForceWeather(AuraApplication const* aurApp, uint8 mode, bool apply) const
+{
+ if (!(mode & AURA_EFFECT_HANDLE_REAL))
+ return;
+
+ Player* target = aurApp->GetTarget()->ToPlayer();
+
+ if (!target)
+ return;
+
+ if (apply)
+ {
+ WorldPacket data(SMSG_WEATHER, (4 + 4 + 1));
+
+ data << uint32(GetMiscValue()) << 1.0f << uint8(0);
+ target->GetSession()->SendPacket(&data);
+ }
+ else
+ {
+ // send weather for current zone
+ if (Weather* weather = WeatherMgr::FindWeather(target->GetZoneId()))
+ weather->SendWeatherUpdateToPlayer(target);
+ else
+ {
+ if (!WeatherMgr::AddWeather(target->GetZoneId()))
+ {
+ // send fine weather packet to remove old weather
+ WeatherMgr::SendFineWeatherUpdateToPlayer(target);
+ }
+ }
+ }
+}
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 6d29035b9e3..d5ee96ade5e 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -277,6 +277,7 @@ class AuraEffect
void HandleAuraOverrideSpells(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandleAuraSetVehicle(AuraApplication const* aurApp, uint8 mode, bool apply) const;
void HandlePreventResurrection(AuraApplication const* aurApp, uint8 mode, bool apply) const;
+ void HandleAuraForceWeather(AuraApplication const* aurApp, uint8 mode, bool apply) const;
// aura effect periodic tick handlers
void HandlePeriodicDummyAuraTick(Unit* target, Unit* caster) const;