aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/game/CalendarHandler.cpp87
-rw-r--r--src/game/DBCStructure.h2
-rw-r--r--src/game/DBCfmt.h2
-rw-r--r--src/game/InstanceSaveMgr.h7
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();