Ru-MaNGOS

Ru-MaNGOS (http://mangos.ytdb.ru/index.php)
-   Опкоды (http://mangos.ytdb.ru/forumdisplay.php?f=36)
-   -   SMSG_COMBAT_LOG_MULTIPLE (http://mangos.ytdb.ru/showthread.php?t=2392)

Fmut 12.09.2010 01:36

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;


TOM_RUS 12.09.2010 01:58

Цитата:

Сообщение от Fmut (Сообщение 13922)
Код:

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;
}


Fmut 12.09.2010 02:08

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

Есть мысли почему сервер иногда шлет по старинке опкоды, а иногда (часто с одним опкодом) 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
---------------------------------------------------------



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

ru-mangos.ru - Русское сообщество MaNGOS