* Update structure for SMSG_CALENDAR_SEND_CALENDAR and add support for sending raid reset times. Thanks to raczman for helping with the client research.
--HG-- branch : trunk
This commit is contained in:
@@ -33,13 +33,33 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket &recv_data)
|
|||||||
|
|
||||||
WorldPacket data(SMSG_CALENDAR_SEND_CALENDAR,4+4*0+4+4*0+4+4);
|
WorldPacket data(SMSG_CALENDAR_SEND_CALENDAR,4+4*0+4+4*0+4+4);
|
||||||
|
|
||||||
// TODO: calendar invite event output
|
data << uint32(0); // invite count
|
||||||
data << (uint32) 0; //invite node count
|
/*
|
||||||
// TODO: calendar event output
|
for (;;)
|
||||||
data << (uint32) 0; //event count
|
{
|
||||||
|
uint64 inviteId;
|
||||||
|
uint64 unkGuid0;
|
||||||
|
uint8 unk1, unk2, unk3;
|
||||||
|
uint64 creatorGuid;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
data << (uint32) 0; //wtf??
|
data << uint32(0); // event count
|
||||||
data << (uint32) secsToTimeBitFields(cur_time); // current time
|
/*
|
||||||
|
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); // unk
|
||||||
|
data << uint32(secsToTimeBitFields(cur_time)); // current time
|
||||||
|
|
||||||
uint32 counter = 0;
|
uint32 counter = 0;
|
||||||
size_t p_counter = data.wpos();
|
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)
|
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;
|
InstanceSave *save = itr->second.save;
|
||||||
data << uint32(save->GetMapId());
|
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.put<uint32>(p_counter, counter);
|
||||||
data << (uint32) 0; // unk counter 4
|
|
||||||
data << (uint32) 0; // unk counter 5
|
data << uint32(1135753200); // unk (28.12.2005 12:00)
|
||||||
//sLog.outDebug("Sending calendar");
|
|
||||||
//data.hexlike();
|
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);
|
SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1129,7 +1129,7 @@ struct MapEntry
|
|||||||
float entrance_y; // 60 entrance y coordinate (if exist single entry)
|
float entrance_y; // 60 entrance y coordinate (if exist single entry)
|
||||||
// 61 -1, 0 and 720
|
// 61 -1, 0 and 720
|
||||||
uint32 addon; // 62 (0-original maps,1-tbc addon)
|
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
|
//uint32 maxPlayers; // 64 max players
|
||||||
|
|
||||||
// Helpers
|
// Helpers
|
||||||
|
|||||||
+1
-1
@@ -75,7 +75,7 @@ const char ItemRandomSuffixfmt[]="nssssssssssssssssxxiiiiiiiiii";
|
|||||||
const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii";
|
const char ItemSetEntryfmt[]="dssssssssssssssssxxxxxxxxxxxxxxxxxxiiiiiiiiiiiiiiiiii";
|
||||||
const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx";
|
const char LockEntryfmt[]="niiiiiiiiiiiiiiiiiiiiiiiixxxxxxxx";
|
||||||
const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxssssssssssssssssx";
|
const char MailTemplateEntryfmt[]="nxxxxxxxxxxxxxxxxxssssssssssssssssx";
|
||||||
const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxixx";
|
const char MapEntryfmt[]="nxixssssssssssssssssxixxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxixiffxiix";
|
||||||
const char MapDifficultyEntryfmt[]="diixxxxxxxxxxxxxxxxxiix";
|
const char MapDifficultyEntryfmt[]="diixxxxxxxxxxxxxxxxxiix";
|
||||||
const char MovieEntryfmt[]="nxx";
|
const char MovieEntryfmt[]="nxx";
|
||||||
const char QuestSortEntryfmt[]="nxxxxxxxxxxxxxxxxx";
|
const char QuestSortEntryfmt[]="nxxxxxxxxxxxxxxxxx";
|
||||||
|
|||||||
@@ -115,6 +115,8 @@ class InstanceSave
|
|||||||
bool m_canReset;
|
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> >
|
class TRINITY_DLL_DECL InstanceSaveManager : public Trinity::Singleton<InstanceSaveManager, Trinity::ClassLevelLockable<InstanceSaveManager, ACE_Thread_Mutex> >
|
||||||
{
|
{
|
||||||
friend class InstanceSave;
|
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; }
|
bool operator == (const InstResetEvent& e) { return e.instanceId == instanceId; }
|
||||||
};
|
};
|
||||||
typedef std::multimap<time_t /*resetTime*/, InstResetEvent> ResetTimeQueue;
|
typedef std::multimap<time_t /*resetTime*/, InstResetEvent> ResetTimeQueue;
|
||||||
typedef UNORDERED_MAP<uint32 /*PAIR32(map,difficulty)*/,time_t /*resetTime*/> ResetTimeByMapDifficultyMap;
|
|
||||||
|
|
||||||
void CleanupInstances();
|
void CleanupInstances();
|
||||||
void PackInstances();
|
void PackInstances();
|
||||||
@@ -155,6 +156,10 @@ class TRINITY_DLL_DECL InstanceSaveManager : public Trinity::Singleton<InstanceS
|
|||||||
{
|
{
|
||||||
m_resetTimeByMapDifficulty[MAKE_PAIR32(mapid,d)] = t;
|
m_resetTimeByMapDifficulty[MAKE_PAIR32(mapid,d)] = t;
|
||||||
}
|
}
|
||||||
|
ResetTimeByMapDifficultyMap const& GetResetTimeMap() const
|
||||||
|
{
|
||||||
|
return m_resetTimeByMapDifficulty;
|
||||||
|
}
|
||||||
void ScheduleReset(bool add, time_t time, InstResetEvent event);
|
void ScheduleReset(bool add, time_t time, InstResetEvent event);
|
||||||
|
|
||||||
void Update();
|
void Update();
|
||||||
|
|||||||
Reference in New Issue
Block a user