aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Maps/Map.cpp26
-rw-r--r--src/server/game/Maps/Map.h11
-rw-r--r--src/server/game/Server/Packets/MiscPackets.cpp15
-rw-r--r--src/server/game/Server/Packets/MiscPackets.h14
-rw-r--r--src/server/game/Server/Packets/QueryPackets.h2
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp2
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.cpp7
-rw-r--r--src/server/game/Weather/Weather.cpp13
-rw-r--r--src/server/game/Weather/Weather.h2
-rw-r--r--src/server/game/Weather/WeatherMgr.cpp6
-rw-r--r--src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp6
11 files changed, 65 insertions, 39 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index 41594ad7d94..724d2a7eed4 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -29,6 +29,7 @@
#include "InstanceScript.h"
#include "MapInstanced.h"
#include "MapManager.h"
+#include "MiscPackets.h"
#include "ObjectAccessor.h"
#include "ObjectMgr.h"
#include "Pet.h"
@@ -36,6 +37,7 @@
#include "Transport.h"
#include "Vehicle.h"
#include "VMapFactory.h"
+#include "Weather.h"
u_map_magic MapMagic = { {'M','A','P','S'} };
u_map_magic MapVersionMagic = { {'v','1','.','4'} };
@@ -49,6 +51,10 @@ u_map_magic MapLiquidMagic = { {'M','L','I','Q'} };
GridState* si_GridStates[MAX_GRID_STATE];
+
+ZoneDynamicInfo::ZoneDynamicInfo() : MusicId(0), WeatherId(WEATHER_STATE_FINE),
+ WeatherGrade(0.0f), OverrideLightId(0), LightFadeInTime(0) { }
+
Map::~Map()
{
sScriptMgr->OnDestroyMap(this);
@@ -2706,7 +2712,7 @@ uint32 Map::GetPlayersCountExceptGMs() const
return count;
}
-void Map::SendToPlayers(WorldPacket* data) const
+void Map::SendToPlayers(WorldPacket const* data) const
{
for (MapRefManager::const_iterator itr = m_mapRefManager.begin(); itr != m_mapRefManager.end(); ++itr)
itr->GetSource()->GetSession()->SendPacket(data);
@@ -3491,13 +3497,10 @@ void Map::SendZoneDynamicInfo(Player* player)
player->SendDirectMessage(&data);
}
- if (uint32 weather = itr->second.WeatherId)
+ if (WeatherState weatherId = itr->second.WeatherId)
{
- WorldPacket data(SMSG_WEATHER, 4 + 4 + 1);
- data << uint32(weather);
- data << float(itr->second.WeatherGrade);
- data << uint8(0);
- player->SendDirectMessage(&data);
+ WorldPackets::Misc::Weather weather(weatherId, itr->second.WeatherGrade);
+ player->SendDirectMessage(weather.Write());
}
if (uint32 overrideLight = itr->second.OverrideLightId)
@@ -3532,7 +3535,7 @@ void Map::SetZoneMusic(uint32 zoneId, uint32 musicId)
}
}
-void Map::SetZoneWeather(uint32 zoneId, uint32 weatherId, float weatherGrade)
+void Map::SetZoneWeather(uint32 zoneId, WeatherState weatherId, float weatherGrade)
{
if (_zoneDynamicInfo.find(zoneId) == _zoneDynamicInfo.end())
_zoneDynamicInfo.insert(ZoneDynamicInfoMap::value_type(zoneId, ZoneDynamicInfo()));
@@ -3544,15 +3547,12 @@ void Map::SetZoneWeather(uint32 zoneId, uint32 weatherId, float weatherGrade)
if (!players.isEmpty())
{
- WorldPacket data(SMSG_WEATHER, 4 + 4 + 1);
- data << uint32(weatherId);
- data << float(weatherGrade);
- data << uint8(0);
+ WorldPackets::Misc::Weather weather(weatherId, weatherGrade);
for (Map::PlayerList::const_iterator itr = players.begin(); itr != players.end(); ++itr)
if (Player* player = itr->GetSource())
if (player->GetZoneId() == zoneId)
- player->SendDirectMessage(&data);
+ player->SendDirectMessage(weather.Write());
}
}
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index d38852e50c9..752953091f8 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -53,6 +53,8 @@ class MapInstanced;
class BattlegroundMap;
class InstanceMap;
class Transport;
+enum WeatherState : uint32;
+
namespace Trinity { struct ObjectUpdater; }
struct ScriptAction
@@ -231,11 +233,10 @@ enum LevelRequirementVsMode
struct ZoneDynamicInfo
{
- ZoneDynamicInfo() : MusicId(0), WeatherId(0), WeatherGrade(0.0f),
- OverrideLightId(0), LightFadeInTime(0) { }
+ ZoneDynamicInfo();
uint32 MusicId;
- uint32 WeatherId;
+ WeatherState WeatherId;
float WeatherGrade;
uint32 OverrideLightId;
uint32 LightFadeInTime;
@@ -424,7 +425,7 @@ class Map : public GridRefManager<NGridType>
void AddWorldObject(WorldObject* obj) { i_worldObjects.insert(obj); }
void RemoveWorldObject(WorldObject* obj) { i_worldObjects.erase(obj); }
- void SendToPlayers(WorldPacket* data) const;
+ void SendToPlayers(WorldPacket const* data) const;
typedef MapRefManager PlayerList;
PlayerList const& GetPlayers() const { return m_mapRefManager; }
@@ -513,7 +514,7 @@ class Map : public GridRefManager<NGridType>
void SendZoneDynamicInfo(Player* player);
void SetZoneMusic(uint32 zoneId, uint32 musicId);
- void SetZoneWeather(uint32 zoneId, uint32 weatherId, float weatherGrade);
+ void SetZoneWeather(uint32 zoneId, WeatherState weatherId, float weatherGrade);
void SetZoneOverrideLight(uint32 zoneId, uint32 lightId, uint32 fadeInTime);
void UpdateAreaDependentAuras();
diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp
index da92f65020a..28a5bbbdedf 100644
--- a/src/server/game/Server/Packets/MiscPackets.cpp
+++ b/src/server/game/Server/Packets/MiscPackets.cpp
@@ -259,3 +259,18 @@ void WorldPackets::Misc::ResurrectResponse::Read()
_worldPacket >> Resurrecter;
_worldPacket >> Response;
}
+
+WorldPackets::Misc::Weather::Weather() : ServerPacket(SMSG_WEATHER, 4 + 4 + 1) { }
+
+WorldPackets::Misc::Weather::Weather(WeatherState weatherID, float intensity /*= 0.0f*/, bool abrupt /*= false*/)
+ : ServerPacket(SMSG_WEATHER, 4 + 4 + 1), WeatherID(weatherID), Intensity(intensity), Abrupt(abrupt) { }
+
+WorldPacket const* WorldPackets::Misc::Weather::Write()
+{
+ _worldPacket << uint32(WeatherID);
+ _worldPacket << float(Intensity);
+ _worldPacket.WriteBit(Abrupt);
+
+ _worldPacket.FlushBits();
+ return &_worldPacket;
+}
diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h
index b46b0aed60a..62115a7de03 100644
--- a/src/server/game/Server/Packets/MiscPackets.h
+++ b/src/server/game/Server/Packets/MiscPackets.h
@@ -23,6 +23,7 @@
#include "WorldSession.h"
#include "G3D/Vector3.h"
#include "Object.h"
+#include "Weather.h"
namespace WorldPackets
{
@@ -368,6 +369,19 @@ namespace WorldPackets
WorldPacket const* Write() override { return &_worldPacket; }
};
+
+ class Weather : public ServerPacket
+ {
+ public:
+ Weather();
+ Weather(WeatherState weatherID, float intensity = 0.0f, bool abrupt = false);
+
+ WorldPacket const* Write() override;
+
+ bool Abrupt = false;
+ float Intensity = 0.0f;
+ WeatherState WeatherID = WEATHER_STATE_FINE;
+ };
}
}
diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h
index 9b131ae82be..5a48db610ca 100644
--- a/src/server/game/Server/Packets/QueryPackets.h
+++ b/src/server/game/Server/Packets/QueryPackets.h
@@ -314,7 +314,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
time_t CurrentTime = time_t(0);
- int32 TimeOutRequest;
+ int32 TimeOutRequest = 0;
};
}
}
diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp
index cb8cd23482f..2358d7f6a00 100644
--- a/src/server/game/Server/Protocol/Opcodes.cpp
+++ b/src/server/game/Server/Protocol/Opcodes.cpp
@@ -1885,7 +1885,7 @@ void OpcodeTable::Initialize()
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARGAME_CHECK_ENTRY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARGAME_REQUEST_SENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
- DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEATHER, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
+ DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEATHER, STATUS_NEVER, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_LAST_RESET, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_RESET_CURRENCY, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEEKLY_SPELL_USAGE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM);
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
index 819942901cb..9cf748ff912 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp
@@ -41,6 +41,7 @@
#include "WeatherMgr.h"
#include "Pet.h"
#include "ReputationMgr.h"
+#include "MiscPackets.h"
class Aura;
//
@@ -6633,10 +6634,8 @@ void AuraEffect::HandleAuraForceWeather(AuraApplication const* aurApp, uint8 mod
if (apply)
{
- WorldPacket data(SMSG_WEATHER, (4 + 4 + 1));
-
- data << uint32(GetMiscValue()) << 1.0f << uint8(0);
- target->GetSession()->SendPacket(&data);
+ WorldPackets::Misc::Weather weather(WeatherState(GetMiscValue()), 1.0f);
+ target->GetSession()->SendPacket(weather.Write());
}
else
{
diff --git a/src/server/game/Weather/Weather.cpp b/src/server/game/Weather/Weather.cpp
index 9ad77761123..ecceb0b102f 100644
--- a/src/server/game/Weather/Weather.cpp
+++ b/src/server/game/Weather/Weather.cpp
@@ -30,6 +30,7 @@
#include "ScriptMgr.h"
#include "Opcodes.h"
#include "WorldSession.h"
+#include "MiscPackets.h"
/// Create the Weather object
Weather::Weather(uint32 zone, WeatherData const* weatherChances)
@@ -194,9 +195,8 @@ bool Weather::ReGenerate()
void Weather::SendWeatherUpdateToPlayer(Player* player)
{
- WorldPacket data(SMSG_WEATHER, (4+4+4));
- data << uint32(GetWeatherState()) << (float)m_grade << uint8(0);
- player->GetSession()->SendPacket(&data);
+ WorldPackets::Misc::Weather weather(GetWeatherState(), m_grade);
+ player->GetSession()->SendPacket(weather.Write());
}
/// Send the new weather to all players in the zone
@@ -210,13 +210,10 @@ bool Weather::UpdateWeather()
WeatherState state = GetWeatherState();
- WorldPacket data(SMSG_WEATHER, (4+4+4));
- data << uint32(state);
- data << (float)m_grade;
- data << uint8(0);
+ WorldPackets::Misc::Weather weather(state, m_grade);
//- Returns false if there were no players found to update
- if (!sWorld->SendZoneMessage(m_zone, &data))
+ if (!sWorld->SendZoneMessage(m_zone, weather.Write()))
return false;
///- Log the event
diff --git a/src/server/game/Weather/Weather.h b/src/server/game/Weather/Weather.h
index 04d38b19c73..93a5ecd448f 100644
--- a/src/server/game/Weather/Weather.h
+++ b/src/server/game/Weather/Weather.h
@@ -43,7 +43,7 @@ struct WeatherData
uint32 ScriptId;
};
-enum WeatherState
+enum WeatherState : uint32
{
WEATHER_STATE_FINE = 0,
WEATHER_STATE_FOG = 1, // Used in some instance encounters.
diff --git a/src/server/game/Weather/WeatherMgr.cpp b/src/server/game/Weather/WeatherMgr.cpp
index 8f599b8514b..883e622bf50 100644
--- a/src/server/game/Weather/WeatherMgr.cpp
+++ b/src/server/game/Weather/WeatherMgr.cpp
@@ -28,6 +28,7 @@
#include "WorldPacket.h"
#include "Opcodes.h"
#include "WorldSession.h"
+#include "MiscPackets.h"
namespace WeatherMgr
{
@@ -144,9 +145,8 @@ void LoadWeatherData()
void SendFineWeatherUpdateToPlayer(Player* player)
{
- WorldPacket data(SMSG_WEATHER, (4+4+4));
- data << (uint32)WEATHER_STATE_FINE << (float)0.0f << uint8(0);
- player->GetSession()->SendPacket(&data);
+ WorldPackets::Misc::Weather weather(WEATHER_STATE_FINE);
+ player->GetSession()->SendPacket(weather.Write());
}
void Update(uint32 diff)
diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
index 463d1ee7e0b..3e9852ae909 100644
--- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
+++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp
@@ -22,6 +22,7 @@
#include "SpellInfo.h"
#include "WorldPacket.h"
#include "Opcodes.h"
+#include "Packets/MiscPackets.h"
enum Texts
{
@@ -146,9 +147,8 @@ class boss_ossirian : public CreatureScript
if (!map->IsDungeon())
return;
- WorldPacket data(SMSG_WEATHER, (4+4+4));
- data << uint32(WEATHER_STATE_HEAVY_SANDSTORM) << float(1) << uint8(0);
- map->SendToPlayers(&data);
+ WorldPackets::Misc::Weather weather(WEATHER_STATE_HEAVY_SANDSTORM, 1.0f);
+ map->SendToPlayers(weather.Write());
for (uint8 i = 0; i < NUM_TORNADOS; ++i)
{