Ru-MaNGOS

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

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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.09.2010, 01:36   #1
Fmut
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
Fmut На верном пути
По умолчанию SMSG_COMBAT_LOG_MULTIPLE

Кто-нибудь разбирал следующий опкод?
Код:
SMSG_COMBAT_LOG_MULTIPLE                                 = 1300;  // $514
В 3.3.5 он заменил собой опкод SMSG_SPELLNONMELEEDAMAGELOG, собственно в него и входит полностью содержимое этого опкода, но не все параметры понятны, вот я привел дамп этого опкода:

Код:
01 00 00 00  - count
F3 35 1C F8 - timestamp

for i := 0 to count -1 do
  F3 35 1C F8 - timestamp 
  50 02 00 00 - OpCode (SMSG_SPELLNONMELEEDAMAGELOG)
  ----------------- далее блок аналогичный SMSG_SPELLNONMELEEDAMAGELOG
  XX XX E7 F6 02 07
  XX XX 06 F6 02 07
  85 00 00 00 
  13 00 00 00 
  00 00 00 00 
  04 
  00 00 00 00 
  00 00 00 00 
  00 
  00 
  00 00 00 00 
  05 00 00 00 
  00
  -------------------
end;

Последний раз редактировалось Fmut; 12.09.2010 в 02:09.
Fmut вне форума   Ответить с цитированием
Старый 12.09.2010, 01:58   #2
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Fmut Посмотреть сообщение
Код:
01 00 00 00  - count ?

F3 35 1C F8 - timestamp
F3 35 1C F8 - timestamp 
50 02 00 00 - opcode (SMSG_SPELLNONMELEEDAMAGELOG)

----------------- далее блок аналогичный SMSG_SPELLNONMELEEDAMAGELOG
XX XX E7 F6 02 07
XX XX 06 F6 02 07
85 00 00 00 
13 00 00 00 
00 00 00 00 
04 
00 00 00 00 
00 00 00 00 
00 
00 
00 00 00 00 
05 00 00 00 
00
-------------------
Код:
signed int __cdecl Packet_SMSG_COMBAT_LOG_MULTIPLE(int a1, int a2, int a3, int a4)
{
  int v4; // edi@1
  int v5; // edi@4
  unsigned __int8 v6; // sf@17
  unsigned __int8 v7; // of@17
  int opcode; // [sp+8h] [bp-14h]@4
  int count; // [sp+Ch] [bp-10h]@1
  int v11; // [sp+10h] [bp-Ch]@1
  int time2; // [sp+14h] [bp-8h]@4
  int time1; // [sp+18h] [bp-4h]@1

  CDataStore__GetInt32(a4, (int)&count);
  v4 = 0;
  time1 = 0;
  CDataStore__GetInt32(a4, (int)&time1);
  v11 = 0;
  if ( count > 0 )
  {
      while ( 1 )
      {
          time2 = v4;
          CDataStore__GetInt32(a4, (int)&time2);
          v5 = time1 - time2;
          CDataStore__GetInt32(a4, (int)&opcode);
          if ( opcode > SMSG_SPELLLOGMISS )
          {
              switch ( opcode )
              {
                  case SMSG_PERIODICAURALOG:
                      CombatLog__HandlePeriodicAuraLog(a4, v5);
                      break;
                  case SMSG_SPELLNONMELEEDAMAGELOG:
                      CombatLog__HandleSpellNonMeleeDamageLog(a4, v5);
                      break;
                  case SMSG_SPELLLOGEXECUTE:
                      CombatLog__HandleSpellLogExecute(a4, v5);
                      break;
                  case SMSG_SPELLDISPELLOG:
                  case SMSG_SPELLSTEALLOG:
                      goto LABEL_16;
                  default:
                      break;
              }
          }
          else
          {
              switch ( opcode )
              {
                  case SMSG_SPELLLOGMISS:
                      CombatLog__HandleSpellLogMiss(a4, v5);
                      break;
                  case SMSG_SPELLBREAKLOG:
LABEL_16:
                      CombatLog__HandleSpellRemoveLog(opcode, a4, v5);
                      break;
                  case SMSG_SPELLHEALLOG:
                      CombatLog__HandleSpellHealLog(a4, v5);
                      break;
                  case SMSG_SPELLENERGIZELOG:
                      CombatLog__HandleSpellLogEnergizeLog(a4, v5);
                      break;
              }
          }
          v7 = __SETO__(v11 + 1, count);
          v6 = v11++ + 1 - count < 0;
          if ( !(v6 ^ v7) )
              break;
          v4 = 0;
      }
  }
  return 1;
}

Последний раз редактировалось TOM_RUS; 12.09.2010 в 02:11.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Fmut (12.09.2010)
Старый 12.09.2010, 02:08   #3
Fmut
Пользователь
 
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
Fmut На верном пути
По умолчанию

хм, действительно это опкод, спасибо

Есть мысли почему сервер иногда шлет по старинке опкоды, а иногда (часто с одним опкодом) SMSG_COMBAT_LOG_MULTIPLE ?

Код:
№ 1072 : SMSG_COMBAT_LOG_MULTIPLE
opcode num. 1300 (in hex: $0514) size: 60
Версия клиента: 3.3.5 [12340], Дата изменения: 12.09.10

Count (uint) = 1
Timestamp (uint) = 4162596251
---------------------------------------------------------
 [0] Timestamp (uint) = 4162596251
 [0] OpCode (uint) = SMSG_SPELLNONMELEEDAMAGELOG (592)
 [0] TargetGUID (pint64) = $0700000002F6E7EB
 [0] CasterGUID (pint64) = $0700000002F6XXXX
 [0] SpellId (uint) = 133 / Fireball (Rank 1) - SPELLCLASS_MAGE
 [0] Damage (uint) = 18
 [0] OverDamage (uint) = 0
 [0] SchoolMask (byte) = 4
 [0] Absorbed (uint) = 0
 [0] Resisted (uint) = 0
 [0] SplitDamage (bool) = 0
 [0] unk_1 (byte) = 0
 [0] Blocked (uint) = 0
 [0] LogFlags (uint) = 5 ($00000001,$00000004)
 [0] unk_2 (byte) = 0
---------------------------------------------------------

Последний раз редактировалось Fmut; 12.09.2010 в 02:26.
Fmut вне форума   Ответить с цитированием
Ответ


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

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



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


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