diff options
Diffstat (limited to 'src')
-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 | 7 |
3 files changed, 17 insertions, 0 deletions
diff --git a/src/common/Utilities/Util.cpp b/src/common/Utilities/Util.cpp index f787edd13ea..5123636f6a0 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 a858a44b556..1ed9c344765 100644 --- a/src/common/Utilities/Util.h +++ b/src/common/Utilities/Util.h @@ -59,6 +59,7 @@ private: TC_COMMON_API int64 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 54a67a67e91..37118477dca 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -50,6 +50,7 @@ Copied events should probably have a new owner #include "Opcodes.h" #include "Player.h" #include "SocialMgr.h" +#include "Util.h" #include "World.h" void WorldSession::HandleCalendarGetCalendar(WorldPackets::Calendar::CalendarGetCalendar& /*calendarGetCalendar*/) @@ -135,6 +136,8 @@ void WorldSession::HandleCalendarAddEvent(WorldPackets::Calendar::CalendarAddEve { ObjectGuid guid = _player->GetGUID(); + calendarAddEvent.EventInfo.Time = uint32(LocalTimeToUTCTime(calendarAddEvent.EventInfo.Time)); + // prevent events in the past // To Do: properly handle timezones and remove the "- time_t(86400L)" hack if (calendarAddEvent.EventInfo.Time < (GameTime::GetGameTime() - time_t(86400L))) @@ -180,6 +183,8 @@ void WorldSession::HandleCalendarUpdateEvent(WorldPackets::Calendar::CalendarUpd ObjectGuid guid = _player->GetGUID(); time_t oldEventTime = time_t(0); + calendarUpdateEvent.EventInfo.Time = uint32(LocalTimeToUTCTime(calendarUpdateEvent.EventInfo.Time)); + // prevent events in the past // To Do: properly handle timezones and remove the "- time_t(86400L)" hack if (calendarUpdateEvent.EventInfo.Time < (GameTime::GetGameTime() - time_t(86400L))) @@ -213,6 +218,8 @@ void WorldSession::HandleCalendarCopyEvent(WorldPackets::Calendar::CalendarCopyE { ObjectGuid guid = _player->GetGUID(); + calendarCopyEvent.Date = uint32(LocalTimeToUTCTime(calendarCopyEvent.Date)); + // prevent events in the past // To Do: properly handle timezones and remove the "- time_t(86400L)" hack if (calendarCopyEvent.Date < (GameTime::GetGameTime() - time_t(86400L))) |