diff options
author | Shauren <shauren.trinity@gmail.com> | 2020-03-06 17:44:10 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2020-03-06 17:44:10 +0100 |
commit | e10313b380c84dafde462bdb116827f2b8be1851 (patch) | |
tree | 8546839b373ad879606df4c84f48944d2ed9bf06 /src/server/game/Maps/Map.cpp | |
parent | 94147f24bf24db6a1741208a734facedd7f9c1f8 (diff) |
Core/Maps: Citizens of Dalaran! Raise your eyes to the skies and observe! Any non-map-default light can now be overriden!
Closes #24250
Diffstat (limited to 'src/server/game/Maps/Map.cpp')
-rw-r--r-- | src/server/game/Maps/Map.cpp | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 514e6bad159..2b2ba2e7f4a 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -66,7 +66,7 @@ GridState* si_GridStates[MAX_GRID_STATE]; ZoneDynamicInfo::ZoneDynamicInfo() : MusicId(0), DefaultWeather(nullptr), WeatherId(WEATHER_STATE_FINE), - Intensity(0.0f), OverrideLightId(0), TransitionMilliseconds(0) { } + Intensity(0.0f) { } Map::~Map() { @@ -270,7 +270,7 @@ m_unloadTimer(0), m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE), m_VisibilityNotifyPeriod(DEFAULT_VISIBILITY_NOTIFY_PERIOD), m_activeNonPlayersIter(m_activeNonPlayers.end()), _transportsUpdateIter(_transports.end()), i_gridExpiry(expiry), -i_scriptLock(false), _respawnCheckTimer(0), _defaultLight(GetDefaultMapLight(id)) +i_scriptLock(false), _respawnCheckTimer(0) { m_parentMap = (_parent ? _parent : this); for (unsigned int idx=0; idx < MAX_NUMBER_OF_GRIDS; ++idx) @@ -4565,12 +4565,12 @@ void Map::SendZoneDynamicInfo(uint32 zoneId, Player* player) const SendZoneWeather(itr->second, player); - if (uint32 overrideLightId = itr->second.OverrideLightId) + for (ZoneDynamicInfo::LightOverride const& lightOverride : itr->second.LightOverrides) { WorldPackets::Misc::OverrideLight overrideLight; - overrideLight.AreaLightID = _defaultLight; - overrideLight.OverrideLightID = overrideLightId; - overrideLight.TransitionMilliseconds = itr->second.TransitionMilliseconds; + overrideLight.AreaLightID = lightOverride.AreaLightId; + overrideLight.OverrideLightID = lightOverride.OverrideLightId; + overrideLight.TransitionMilliseconds = lightOverride.TransitionMilliseconds; player->SendDirectMessage(overrideLight.Write()); } } @@ -4652,17 +4652,29 @@ void Map::SetZoneWeather(uint32 zoneId, WeatherState weatherId, float intensity) } } -void Map::SetZoneOverrideLight(uint32 zoneId, uint32 overrideLightId, uint32 transitionMilliseconds) +void Map::SetZoneOverrideLight(uint32 zoneId, uint32 areaLightId, uint32 overrideLightId, uint32 transitionMilliseconds) { ZoneDynamicInfo& info = _zoneDynamicInfo[zoneId]; - info.OverrideLightId = overrideLightId; - info.TransitionMilliseconds = transitionMilliseconds; + // client can support only one override for each light (zone independent) + info.LightOverrides.erase(std::remove_if(info.LightOverrides.begin(), info.LightOverrides.end(), [areaLightId](ZoneDynamicInfo::LightOverride const& lightOverride) + { + return lightOverride.AreaLightId == areaLightId; + }), info.LightOverrides.end()); + + // set new override (if any) + if (overrideLightId) + { + ZoneDynamicInfo::LightOverride& lightOverride = info.LightOverrides.emplace_back(); + lightOverride.AreaLightId = areaLightId; + lightOverride.OverrideLightId = overrideLightId; + lightOverride.TransitionMilliseconds = transitionMilliseconds; + } Map::PlayerList const& players = GetPlayers(); if (!players.isEmpty()) { WorldPackets::Misc::OverrideLight overrideLight; - overrideLight.AreaLightID = _defaultLight; + overrideLight.AreaLightID = areaLightId; overrideLight.OverrideLightID = overrideLightId; overrideLight.TransitionMilliseconds = transitionMilliseconds; overrideLight.Write(); |