diff options
-rw-r--r-- | src/game/CalendarHandler.cpp | 87 | ||||
-rw-r--r-- | src/game/DBCStructure.h | 2 | ||||
-rw-r--r-- | src/game/DBCfmt.h | 2 | ||||
-rw-r--r-- | src/game/InstanceSaveMgr.h | 7 |
4 files changed, 82 insertions, 16 deletions
diff --git a/src/game/CalendarHandler.cpp b/src/game/CalendarHandler.cpp index 5860f4acaec..d1a0b080561 100644 --- a/src/game/CalendarHandler.cpp +++ b/src/game/CalendarHandler.cpp @@ -33,13 +33,33 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket &recv_data) WorldPacket data(SMSG_CALENDAR_SEND_CALENDAR,4+4*0+4+4*0+4+4); - // TODO: calendar invite event output - data << (uint32) 0; //invite node count - // TODO: calendar event output - data << (uint32) 0; //event count + data << uint32(0); // invite count + /* + for (;;) + { + uint64 inviteId; + uint64 unkGuid0; + uint8 unk1, unk2, unk3; + uint64 creatorGuid; + } + */ + + data << uint32(0); // event count + /* + for (;;) + { + uint64 eventId; + std::string title; // 128 chars + uint32 type; + uint32 occurrenceTime; + uint32 flags; + uint32 unk4; -- possibly mapid for dungeon/raid + uint64 creatorGuid; + } + */ - data << (uint32) 0; //wtf?? - data << (uint32) secsToTimeBitFields(cur_time); // current time + data << uint32(0); // unk + data << uint32(secsToTimeBitFields(cur_time)); // current time uint32 counter = 0; size_t p_counter = data.wpos(); @@ -49,7 +69,7 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket &recv_data) { for (Player::BoundInstancesMap::const_iterator itr = _player->m_boundInstances[i].begin(); itr != _player->m_boundInstances[i].end(); ++itr) { - if(itr->second.perm) + if (itr->second.perm) { InstanceSave *save = itr->second.save; data << uint32(save->GetMapId()); @@ -60,13 +80,54 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket &recv_data) } } } - data.put<uint32>(p_counter,counter); - data << (uint32) 1135753200; //wtf?? (28.12.2005 12:00) - data << (uint32) 0; // unk counter 4 - data << (uint32) 0; // unk counter 5 - //sLog.outDebug("Sending calendar"); - //data.hexlike(); + data.put<uint32>(p_counter, counter); + + data << uint32(1135753200); // unk (28.12.2005 12:00) + + counter = 0; + p_counter = data.wpos(); + data << uint32(counter); // raid reset count + + ResetTimeByMapDifficultyMap const& resets = sInstanceSaveManager.GetResetTimeMap(); + for (ResetTimeByMapDifficultyMap::const_iterator itr = resets.begin(); itr != resets.end(); ++itr) + { + uint32 mapid = PAIR32_LOPART(itr->first); + MapEntry const* mapEnt = sMapStore.LookupEntry(mapid); + if (!mapEnt || !mapEnt->IsRaid()) + continue; + + data << uint32(mapid); + data << uint32(itr->second - cur_time); + data << uint32(mapEnt->unk_time); + ++counter; + } + + data.put<uint32>(p_counter, counter); + + data << uint32(0); // holiday count? + /* + for (;;) + { + uint32 unk5, unk6, unk7, unk8, unk9; + for (uint32 j = 0; j < 26; ++j) + { + uint32 unk10; + } + for (uint32 j = 0; j < 10; ++j) + { + uint32 unk11; + } + for (uint32 j = 0; j < 10; ++j) + { + uint32 unk12; + } + std::string holidayName; // 64 chars + } + */ + + sLog.outDebug("Sending calendar"); + data.hexlike(); SendPacket(&data); } diff --git a/src/game/DBCStructure.h b/src/game/DBCStructure.h index 2aab9970a18..48ba9c8ff44 100644 --- a/src/game/DBCStructure.h +++ b/src/game/DBCStructure.h @@ -1129,7 +1129,7 @@ struct MapEntry float entrance_y; // 60 entrance y coordinate (if exist single entry) // 61 -1, 0 and 720 uint32 addon; // 62 (0-original maps,1-tbc addon) - // 63 some kind of time? + uint32 unk_time; // 63 some kind of time? - for pre-bc raids //uint32 maxPlayers; // 64 max players // Helpers diff --git a/src/game/DBCfmt.h b/src/game/DBCfmt.h index 635de26a07d..6aa2dd23a77 100644 --- a/src/game/DBCfmt.h +++ b/src/game/DBCfmt.h @@ -75,7 +75,7 @@ const char ItemRandomSuffixfmt[]="nssssssssssssssssxxiiiiiiiiii"; const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii"; const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx"; const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxssssssssssssssssx"; -const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxixx"; +const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxiix"; const char MapDifficultyEntryfmt[]="diixxxxxxxxxxxxxxxxxiix"; const char MovieEntryfmt[]="nxx"; const char QuestSortEntryfmt[]="nxxxxxxxxxxxxxxxxx"; diff --git a/src/game/InstanceSaveMgr.h b/src/game/InstanceSaveMgr.h index 7f8a2a74e60..d185550764f 100644 --- a/src/game/InstanceSaveMgr.h +++ b/src/game/InstanceSaveMgr.h @@ -115,6 +115,8 @@ class InstanceSave bool m_canReset; }; +typedef UNORDERED_MAP<uint32 /*PAIR32(map,difficulty)*/,time_t /*resetTime*/> ResetTimeByMapDifficultyMap; + class TRINITY_DLL_DECL InstanceSaveManager : public Trinity::Singleton<InstanceSaveManager, Trinity::ClassLevelLockable<InstanceSaveManager, ACE_Thread_Mutex> > { friend class InstanceSave; @@ -140,7 +142,6 @@ class TRINITY_DLL_DECL InstanceSaveManager : public Trinity::Singleton<InstanceS bool operator == (const InstResetEvent& e) { return e.instanceId == instanceId; } }; typedef std::multimap<time_t /*resetTime*/, InstResetEvent> ResetTimeQueue; - typedef UNORDERED_MAP<uint32 /*PAIR32(map,difficulty)*/,time_t /*resetTime*/> ResetTimeByMapDifficultyMap; void CleanupInstances(); void PackInstances(); @@ -155,6 +156,10 @@ class TRINITY_DLL_DECL InstanceSaveManager : public Trinity::Singleton<InstanceS { m_resetTimeByMapDifficulty[MAKE_PAIR32(mapid,d)] = t; } + ResetTimeByMapDifficultyMap const& GetResetTimeMap() const + { + return m_resetTimeByMapDifficulty; + } void ScheduleReset(bool add, time_t time, InstResetEvent event); void Update(); |