12.09.2010, 01:36 | #1 |
Пользователь
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
|
SMSG_COMBAT_LOG_MULTIPLE
Кто-нибудь разбирал следующий опкод?
Код:
SMSG_COMBAT_LOG_MULTIPLE = 1300; // $514 Код:
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. |
12.09.2010, 01:58 | #2 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
Код:
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. |
|
Пользователь сказал cпасибо: | Fmut (12.09.2010) |
12.09.2010, 02:08 | #3 |
Пользователь
Регистрация: 20.06.2010
Сообщений: 42
Сказал(а) спасибо: 4
Поблагодарили 5 раз(а) в 5 сообщениях
|
хм, действительно это опкод, спасибо
Есть мысли почему сервер иногда шлет по старинке опкоды, а иногда (часто с одним опкодом) 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. |