aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-06-04 21:47:43 +0200
committerShauren <shauren.trinity@gmail.com>2021-06-04 21:47:43 +0200
commit8aaf750be1ee16a299016cf038bd84bd9b387544 (patch)
tree593d1044e318ec5d904ffcad4caee8a2a5a2f8d4 /src
parent9542d221cb359f6dfd67aa1432877e19b942b619 (diff)
Core/Conditions: Implemented missing PlayerCondition columns - time and weather
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Conditions/ConditionMgr.cpp18
-rw-r--r--src/server/game/Maps/Map.cpp15
-rw-r--r--src/server/game/Maps/Map.h1
-rw-r--r--src/server/game/Weather/Weather.h3
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;