Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент > Опкоды

Важная информация

Опкоды Опкоды

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.09.2010, 00:13   #1
Fmut
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
Fmut На верном пути
По умолчанию 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
}
Fmut вне форума   Ответить с цитированием
Старый 22.09.2010, 06:58   #2
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

В моем репо на github есть частичная реализация календаря с использованием этого пакета, полную я все никак не решусь выложить.
LordJZ вне форума   Ответить с цитированием
Старый 22.09.2010, 11:23   #3
Fmut
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
Fmut На верном пути
По умолчанию

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
-------------------------------------------
Вот это уже не правильно - InstanceSaveCount (uint) = 2
Т.к сейвов всего одна штука и они идут чуть дальше.
Fmut вне форума   Ответить с цитированием
Старый 22.09.2010, 18:32   #4
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Мм... в какой версии менялся? Вы с катаклизмом не путаете?
LordJZ вне форума   Ответить с цитированием
Старый 22.09.2010, 19:36   #5
Fmut
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
Fmut На верном пути
По умолчанию

Вон выше опкод и его парсинг, который сбивается из-за неправильной структуры.
Версия клиента там тоже указана.
Fmut вне форума   Ответить с цитированием
Старый 22.09.2010, 20:05   #6
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Ну так возьмите для 3.3.5, он в исходниках мангоса лежит.
LordJZ вне форума   Ответить с цитированием
Старый 22.09.2010, 20:41   #7
Fmut
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
Fmut На верном пути
По умолчанию

А что в исходниках смотреть? там заглушка.
Если прочитаете внимательно мои предыдущие посты, поймете в каком месте идет несоответсвие снифам.
Дамп опкода со снифа я тоже выложил, можете проверить сами, что разбор кривой.

Код:
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.
Fmut вне форума   Ответить с цитированием
Старый 22.09.2010, 20:53   #8
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

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>
Правда он тут неточно разобран.
LordJZ вне форума   Ответить с цитированием
Старый 22.09.2010, 21:19   #9
Fmut
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
Fmut На верном пути
По умолчанию

Тут структура как в 1 посте, она неподходит к тому, что шлет сервер 3.3.5!
PS
XML то еще извращение...

Последний раз редактировалось Fmut; 22.09.2010 в 21:25.
Fmut вне форума   Ответить с цитированием
Старый 22.09.2010, 21:31   #10
Fmut
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
Fmut На верном пути
По умолчанию

все, нашел свой косяк в первом перечислении добавилось поле 8-и битовое
Fmut вне форума   Ответить с цитированием
Старый 22.09.2010, 22:00   #11
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Цитата:
XML то еще извращение...
Не вижу тут ничего извращенного...
__________________
Konctantin вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 17:53. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot