diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-06-04 21:47:43 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-06-04 21:47:43 +0200 |
commit | 8aaf750be1ee16a299016cf038bd84bd9b387544 (patch) | |
tree | 593d1044e318ec5d904ffcad4caee8a2a5a2f8d4 /src | |
parent | 9542d221cb359f6dfd67aa1432877e19b942b619 (diff) |
Core/Conditions: Implemented missing PlayerCondition columns - time and weather
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Conditions/ConditionMgr.cpp | 18 | ||||
-rw-r--r-- | src/server/game/Maps/Map.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 1 | ||||
-rw-r--r-- | src/server/game/Weather/Weather.h | 3 |
4 files changed, 33 insertions, 4 deletions
diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 0a328e20fa6..10717ff302d 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -2855,7 +2855,19 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio return false; } - // TODO: time condition + if (condition->Time[0]) + { + ByteBuffer unpacker; + unpacker << condition->Time[0]; + time_t from = unpacker.ReadPackedTime(); + unpacker.rpos(0); + unpacker.wpos(0); + unpacker << condition->Time[1]; + time_t to = unpacker.ReadPackedTime(); + + if (GameTime::GetGameTime() < from || GameTime::GetGameTime() > to) + return false; + } if (condition->WorldStateExpressionID) { @@ -2867,7 +2879,9 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio return false; } - // TODO: weather condition + if (condition->WeatherID) + if (player->GetMap()->GetZoneWeather(player->GetZoneId()) != WeatherState(condition->WeatherID)) + return false; if (condition->Achievement[0]) { diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 671292fe479..2fda273c57f 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -4847,6 +4847,21 @@ Weather* Map::GetOrGenerateZoneDefaultWeather(uint32 zoneId) return info.DefaultWeather.get(); } +WeatherState Map::GetZoneWeather(uint32 zoneId) const +{ + ZoneDynamicInfo const* zoneDynamicInfo = Trinity::Containers::MapGetValuePtr(_zoneDynamicInfo, zoneId); + if (zoneDynamicInfo) + { + if (WeatherState weatherId = zoneDynamicInfo->WeatherId) + return weatherId; + + if (zoneDynamicInfo->DefaultWeather) + return zoneDynamicInfo->DefaultWeather->GetWeatherState(); + } + + return WEATHER_STATE_FINE; +} + void Map::SetZoneWeather(uint32 zoneId, WeatherState weatherId, float weatherGrade) { ZoneDynamicInfo& info = _zoneDynamicInfo[zoneId]; diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index c3f87671069..174520be8a0 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -552,6 +552,7 @@ class TC_GAME_API Map : public GridRefManager<NGridType> void SetZoneMusic(uint32 zoneId, uint32 musicId); Weather* GetOrGenerateZoneDefaultWeather(uint32 zoneId); + WeatherState GetZoneWeather(uint32 zoneId) const; void SetZoneWeather(uint32 zoneId, WeatherState weatherId, float weatherGrade); void SetZoneOverrideLight(uint32 zoneId, uint32 lightId, uint32 fadeInTime); diff --git a/src/server/game/Weather/Weather.h b/src/server/game/Weather/Weather.h index ceea2db14ed..d460fe70af8 100644 --- a/src/server/game/Weather/Weather.h +++ b/src/server/game/Weather/Weather.h @@ -76,13 +76,12 @@ class TC_GAME_API Weather static void SendFineWeatherUpdateToPlayer(Player* player); void SetWeather(WeatherType type, float grade); + WeatherState GetWeatherState() const; /// For which zone is this weather? uint32 GetZone() const { return m_zone; }; uint32 GetScriptId() const { return m_weatherChances->ScriptId; } private: - - WeatherState GetWeatherState() const; uint32 m_zone; WeatherType m_type; float m_grade; |