diff options
-rw-r--r-- | src/common/Utilities/Util.cpp | 9 | ||||
-rw-r--r-- | src/common/Utilities/Util.h | 1 | ||||
-rw-r--r-- | src/server/game/Handlers/CalendarHandler.cpp | 6 |
3 files changed, 16 insertions, 0 deletions
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index 668b1a9dce7..53365373eb4 100644 --- a/src/common/Utilities/Util.cpp +++ b/src/common/Utilities/Util.cpp @@ -77,6 +77,15 @@ struct tm* localtime_r(time_t const* time, struct tm *result) } #endif +time_t LocalTimeToUTCTime(time_t time) +{ +#if (defined(WIN32) || defined(_WIN32) || defined(__WIN32__)) + return time + _timezone; +#else + return time + timezone; +#endif +} + std::string secsToTimeString(uint64 timeInSecs, bool shortText, bool hoursOnly) { uint64 secs = timeInSecs % MINUTE; diff --git a/src/common/Utilities/Util.h b/src/common/Utilities/Util.h index 78019885d99..193981e31ae 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -58,6 +58,7 @@ private: TC_COMMON_API int32 MoneyStringToMoney(std::string const& moneyString); TC_COMMON_API struct tm* localtime_r(time_t const* time, struct tm *result); +TC_COMMON_API time_t LocalTimeToUTCTime(time_t time); TC_COMMON_API std::string secsToTimeString(uint64 timeInSecs, bool shortText = false, bool hoursOnly = false); TC_COMMON_API uint32 TimeStringToSecs(std::string const& timestring); diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index 9fb058dff0d..45afefda920 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -238,6 +238,8 @@ void WorldSession::HandleCalendarAddEvent(WorldPacket& recvData) recvData.ReadPackedTime(unkPackedTime); recvData >> flags; + eventPackedTime = uint32(LocalTimeToUTCTime(eventPackedTime)); + // prevent events in the past // To Do: properly handle timezones and remove the "- time_t(86400L)" hack if (time_t(eventPackedTime) < (GameTime::GetGameTime() - time_t(86400L))) @@ -331,6 +333,8 @@ void WorldSession::HandleCalendarUpdateEvent(WorldPacket& recvData) recvData.ReadPackedTime(timeZoneTime); recvData >> flags; + eventPackedTime = uint32(LocalTimeToUTCTime(eventPackedTime)); + // prevent events in the past // To Do: properly handle timezones and remove the "- time_t(86400L)" hack if (time_t(eventPackedTime) < (GameTime::GetGameTime() - time_t(86400L))) @@ -388,6 +392,8 @@ void WorldSession::HandleCalendarCopyEvent(WorldPacket& recvData) TC_LOG_DEBUG("network", "CMSG_CALENDAR_COPY_EVENT [%s], EventId [" UI64FMTD "] inviteId [" UI64FMTD "] Time: %u", guid.ToString().c_str(), eventId, inviteId, eventTime); + eventTime = uint32(LocalTimeToUTCTime(eventTime)); + // prevent events in the past // To Do: properly handle timezones and remove the "- time_t(86400L)" hack if (time_t(eventTime) < (GameTime::GetGameTime() - time_t(86400L))) |