|
22.09.2010, 00:13 | #1 |
Пользователь
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
|
SMSG_CALENDAR_SEND_CALENDAR
В календарь были добавлены изменения и текущая реализация и разбор не актуальны, после поля secsToBitTime и до списка сейвов добавлены новые данные, кто может вытащить из клиента помогайте
Вот старый разбор от TOM_RUS: Код:
SMSG_CALENDAR_SEND_CALENDAR = 0x436, // updated to 3.0.8 uint32 count for(count) { // Pending invite node? uint64 uint64 uint8 uint8 PGUID } uint32 count2 (may be count?) if(count2) { for(count2) { uint64 string(128) uint32 uint32 uint32 flags uint32 PGUID } } uint32 uint32 secsToBitTime? uint32 count3 for(count3) { uint32 uint32 uint32 uint64 } uint32 // raid resetnode uint32 count4 for(count4) // calendar raid reset node? { uint32 uint32 uint32 } uint32 count5 for(count5) // calendar holiday node? { uint32 uint32 uint32 uint32 uint32 26 x uint32 10 x uint32 10 x uint32 string } |
22.09.2010, 06:58 | #2 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
В моем репо на github есть частичная реализация календаря с использованием этого пакета, полную я все никак не решусь выложить.
|
22.09.2010, 11:23 | #3 |
Пользователь
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
|
LordJZ я видел твой патч, там вроде только следующий блок после сейвов разобран, а по снифам перед сейвами что-то добавили.
Код:
01 CA 36 04 02 00 00 00 CC 52 1C 00 00 00 00 00 .Ê6.....ÌR...... 79 0A 8A 01 00 00 00 00 01 00 00 8F DD 81 CE 02 y...........Ý.Î. 07 48 96 1C 00 00 00 00 00 7D 39 8A 01 00 00 00 .H........9..... 00 00 00 00 8F DD 81 CE 02 07 02 00 00 00 CC 52 .....Ý.Î......ÌR 1C 00 00 00 00 00 D0 A6 D0 9B D0 9A 32 35 00 00 ......Ð.Ð.Ð.25.. 00 00 00 80 73 84 0A 01 00 00 00 18 01 00 00 8F ....s........... DD 81 CE 02 07 48 96 1C 00 00 00 00 00 D0 A6 D0 Ý.Î..H.......Ð.Ð 9B D0 9A 32 35 00 00 00 00 00 80 33 86 0A 01 00 .Ð.25......3.... 00 00 18 01 00 00 8F DD 81 CE 02 07 70 EE 98 4C .......Ý.Î..pî.L EA 14 85 0A 01 00 00 00 77 02 00 00 01 00 00 00 ê.......w....... 00 BB 00 00 69 0B 91 02 00 00 47 1F F0 37 B2 43 ....i.....G.ð7.C 17 00 00 00 70 02 00 00 80 3A 09 00 00 00 00 00 ....p........... 15 02 00 00 80 3A 09 00 00 00 00 00 68 02 00 00 ............h... 80 3A 09 00 00 00 00 00 D5 01 00 00 80 3A 09 00 ........Õ....... 00 00 00 00 35 02 00 00 80 3A 09 00 00 00 00 00 ....5........... 67 02 00 00 80 3A 09 00 00 00 00 00 26 02 00 00 g............... 80 3A 09 00 00 00 00 00 34 02 00 00 80 3A 09 00 ........4....... 00 00 00 00 FD 01 00 00 80 F4 03 00 30 0B 01 00 ....ý....ô..0... 13 02 00 00 80 3A 09 00 00 00 00 00 38 02 00 00 ............8... 80 F4 03 00 00 00 00 00 F9 00 00 00 80 3A 09 00 .ô......ù....... 00 00 00 00 99 01 00 00 80 3A 09 00 00 00 00 00 ................ 44 02 00 00 80 3A 09 00 00 00 00 00 24 02 00 00 D............... 80 3A 09 00 00 00 00 00 5B 02 00 00 80 3A 09 00 ................ 00 00 00 00 20 02 00 00 80 3A 09 00 00 00 00 00 ................ 35 01 00 00 80 F4 03 00 30 0B 01 00 14 02 00 00 5....ô..0....... 80 3A 09 00 00 00 00 00 16 02 00 00 80 3A 09 00 ................ 00 00 00 00 D4 02 00 00 80 3A 09 00 00 00 00 00 ....Ô........... 77 02 00 00 80 3A 09 00 00 00 00 00 89 02 00 00 w............... 80 3A 09 00 00 00 00 00 00 00 00 00 ............ Код:
№ 3997 : SMSG_CALENDAR_SEND_CALENDAR opcode num. 1078 (in hex: $0436) size: 456 Версия клиента: 3.3.5 [12340], Дата изменения: 21.09.10 Count_1 (uint) = 2 ------------------------------------------- [0] unk_1 (int64) = $00000000001C52CC [0] unk_2 (int64) = $00000000018A0A79 [0] unk_3 (byte) = 1 [0] unk_4 (byte) = 0 [0] unk_5 (pint64) = $0000000000000000 ------------------------------------------- [1] unk_1 (int64) = $96480702CE81DD8F [1] unk_2 (int64) = $397D00000000001C [1] unk_3 (byte) = 138 [1] unk_4 (byte) = 1 [1] unk_5 (pint64) = $0000000000000000 ------------------------------------------- Count_2 (uint) = 0 ------------------------------------------- CurUnixTime (uint) = 3717136384 CompressedDTime (uint) = 117624449 InstanceSaveCount (uint) = 2 ------------------------------------------- [0] MapId (uint) = 1856204 [0] Difficulty (uint) = 0 [0] ResetTime (uint) = 2614142672 [0] InstanceId (int64) = $0000000035329AD0 ------------------------------------------- [1] MapId (uint) = 2222161920 [1] Difficulty (uint) = 266 [1] ResetTime (uint) = 71680 [1] InstanceId (int64) = $480702CE81DD8F00 ------------------------------------------- unk_18 (uint) = 7318 Count_4 (uint) = 3489660928 ------------------------------------------- Count_5 (uint) = 3499872422 ------------------------------------------- Т.к сейвов всего одна штука и они идут чуть дальше. |
22.09.2010, 18:32 | #4 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Мм... в какой версии менялся? Вы с катаклизмом не путаете?
|
22.09.2010, 19:36 | #5 |
Пользователь
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
|
Вон выше опкод и его парсинг, который сбивается из-за неправильной структуры.
Версия клиента там тоже указана. |
22.09.2010, 20:05 | #6 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Ну так возьмите для 3.3.5, он в исходниках мангоса лежит.
|
22.09.2010, 20:41 | #7 |
Пользователь
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
|
А что в исходниках смотреть? там заглушка.
Если прочитаете внимательно мои предыдущие посты, поймете в каком месте идет несоответсвие снифам. Дамп опкода со снифа я тоже выложил, можете проверить сами, что разбор кривой. Код:
void WorldSession::HandleCalendarGetCalendar(WorldPacket &/*recv_data*/) { DEBUG_LOG("WORLD: CMSG_CALENDAR_GET_CALENDAR"); // empty time_t cur_time = time(NULL); 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; //wtf?? data << (uint32) secsToTimeBitFields(cur_time); // current time uint32 counter = 0; size_t p_counter = data.wpos(); data << uint32(counter); // instance save count for(int i = 0; i < MAX_DIFFICULTY; ++i) { for (Player::BoundInstancesMap::const_iterator itr = _player->m_boundInstances[i].begin(); itr != _player->m_boundInstances[i].end(); ++itr) { if(itr->second.perm) { InstanceSave *save = itr->second.save; data << uint32(save->GetMapId()); data << uint32(save->GetDifficulty()); data << uint32(save->GetResetTime() - cur_time); data << uint64(save->GetInstanceId()); // instance save id as unique instance copy id ++counter; } } } 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 //DEBUG_LOG("Sending calendar"); //data.hexlike(); SendPacket(&data); } Последний раз редактировалось Fmut; 22.09.2010 в 20:51. |
22.09.2010, 20:53 | #8 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
http://github.com/WCell/WCell/raw/ma...s/Calendar.xml
Код:
<RealmPacket OpCode="SMSG_CALENDAR_SEND_CALENDAR"> <!-- 1078 --> <Simple> <Name>InviteCount</Name> <Type>Int</Type> </Simple> <List LengthSegment="InviteCount"> <Name>Invite</Name> <Simple> <Name>Event Id</Name> <Type>ULong</Type> </Simple> <Simple> <Name>Invitation Id</Name> <Type>ULong</Type> </Simple> <Simple> <Name>Invite Status</Name> <Type>Byte</Type> <SegmentType>CalendarInviteStatus</SegmentType> </Simple> <Simple> <Name>Mod Type</Name> <Type>Byte</Type> <SegmentType>CalendarModType</SegmentType> </Simple> <Simple> <Name>Invite Type</Name> <!--Gotta test--> <Type>Byte</Type> <SegmentType>CalendarInviteType</SegmentType> </Simple> <Simple> <Name>Invited by</Name> <Type>PackedGuid</Type> </Simple> </List> <Simple> <Name>EventCount</Name> <Type>Int</Type> </Simple> <List LengthSegment="EventCount"> <Name>Event</Name> <Simple> <Name>Event Id</Name> <Type>ULong</Type> </Simple> <Simple> <Name>Event name</Name> <Type>CString</Type> </Simple> <Simple> <Name>CalendarEventModFlags</Name> <Type>Int</Type> </Simple> <Simple> <Name>Event Date</Name> <Type>PackedDate</Type> </Simple> <Simple> <Name>Event Flags</Name> <Type>Int</Type> <SegmentType>WCell.Constants.CalendarEventFlags</SegmentType> </Simple> <Simple> <Name>LFG Dungeon Id</Name> <Type>Int</Type> </Simple> <Simple> <Name>Invited by</Name> <Type>PackedGuid</Type> </Simple> </List> <Simple> <Name>Current Unix Time</Name> <Type>UnixTime</Type> </Simple> <Simple> <Name>Current packet time</Name> <Type>PackedDate</Type> </Simple> <Simple> <Name>InstanceResetCount</Name> <Type>Int</Type> </Simple> <List LengthSegment="InstanceResetCount"> <Name>Instance Save</Name> <Simple> <Name>Map Id</Name> <Type>Int</Type> <SegmentType>World.MapId</SegmentType> </Simple> <Simple> <Name>Difficulty</Name> <Type>Int</Type> </Simple> <Simple> <Name>Time until reset</Name> <Type>Int</Type> </Simple> <Simple> <Name>Raid Id</Name> <Type>ULong</Type> </Simple> </List> <Simple> <Name>Base Date</Name> <Type>UnixTime</Type> </Simple> <Simple> <Name>RaidResetCount</Name> <Type>Int</Type> </Simple> <List LengthSegment="RaidResetCount"> <Name>Raid Reset</Name> <Simple> <Name>Map Id</Name> <Type>UInt</Type> <SegmentType>World.MapId</SegmentType> </Simple> <Simple> <Name>Reset Time (in seconds)</Name> <Type>UInt</Type> </Simple> <Simple> <Name>Negative Offset (in seconds)</Name> <Type>UInt</Type> <!--86400-Negative Offset = - offset--> </Simple> </List> <Simple> <Name>Count5</Name> <Type>Int</Type> </Simple> <List LengthSegment="Count5"> <Name>Unknown Value</Name> <Simple> <Name>Unknown 1</Name> <Type>Int</Type> </Simple> <Simple> <Name>Unknown 2</Name> <Type>Int</Type> </Simple> <Simple> <Name>Unknown 3</Name> <Type>Int</Type> </Simple> <Simple> <Name>Unknown 4</Name> <Type>Int</Type> </Simple> <Simple> <Name>Unknown 5</Name> <Type>Int</Type> </Simple> <StaticList Length="26"> <Name>Unknown 26 values</Name> <Simple> <Name>Unknown</Name> <Type>Int</Type> </Simple> </StaticList> <StaticList Length="10"> <Name>Unknown 10 values</Name> <Simple> <Name>Unknown</Name> <Type>Int</Type> </Simple> </StaticList> <StaticList Length="10"> <Name>Unknown 10 values</Name> <Simple> <Name>Unknown</Name> <Type>Int</Type> </Simple> </StaticList> <Simple> <Name>Unknown CString</Name> <Type>CString</Type> </Simple> </List> </RealmPacket> |
22.09.2010, 21:19 | #9 |
Пользователь
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
|
Тут структура как в 1 посте, она неподходит к тому, что шлет сервер 3.3.5!
PS XML то еще извращение... Последний раз редактировалось Fmut; 22.09.2010 в 21:25. |
22.09.2010, 21:31 | #10 |
Пользователь
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
|
все, нашел свой косяк в первом перечислении добавилось поле 8-и битовое
|