diff options
author | Shocker <shocker@freakz.ro> | 2012-09-21 02:24:02 +0300 |
---|---|---|
committer | Shocker <shocker@freakz.ro> | 2012-09-21 02:24:02 +0300 |
commit | 6d2a74a20192f7ccc8bcfa07e476ce4fbd55941b (patch) | |
tree | 66d1e638696f93c1019a2eff8db74e8cc582de4c | |
parent | 5a9d3e90f2e80261a0004c2e0c17eb3f5eaacc3f (diff) |
Core/Spells: Fix SPELL_AURA_FORCE_WEATHER
-rwxr-xr-x | src/server/game/Spells/Auras/SpellAuraDefines.h | 2 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 36 | ||||
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 |
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; |