mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-02-15 06:29:13 +01:00
* 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);
|
||||
|
||||
// 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; //wtf??
|
||||
data << (uint32) secsToTimeBitFields(cur_time); // current time
|
||||
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); // 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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user