Показать сообщение отдельно
Старый 25.06.2012, 11:54   #13
Amaru
MaNGOS Dev
 
Регистрация: 16.01.2011
Сообщений: 262
Сказал(а) спасибо: 57
Поблагодарили 73 раз(а) в 59 сообщениях
Amaru На верном пути
По умолчанию

Вроде бы разобрался на основе 14333 с Jam и Auth опкодами, с ними все прозрачно.
Использовал Opcode Calculator от Chameleon.

Но не понятно, что делать с regular opcodes, согласно его гайду
Цитата:
So to find a client handler for a particular SMSG opcode you can convert it to an offset using tools and
then search full decompile for ‘+ 8080’ (replaced by correct offset).
Получены оффсет 4844 (0x12EC) и converted 867 на примере опкода SMSG_NOTIFICATION 30375.
Текстовый поиск по + 4844 или + 0x12EC ничего не дает, кроме
Код:
void __usercall ClientDestroyGame(int a1<ebx>, double a2<st6>, double a3<st5>, double a4<st4>, double a5<st3>, double a6<st2>, double a7<st1>, double a8<st0>, int a9, int a10, int a11)
{
  int v11; // eax@2
  int v12; // eax@2
  int v13; // eax@2
  int v14; // eax@2
  int v15; // eax@2
  int v16; // eax@2
  int v17; // eax@2
  int v18; // eax@2
  void *v19; // edi@3
  int v20; // ecx@4
  void *v21; // edi@9

  if ( dword_CFA6A4 )
  {
    EventUnregister(5, (int)ClientIdle);
    v11 = g_clientConnection;
    *(_DWORD *)(g_clientConnection + 4844) = 0;
    *(_DWORD *)(v11 + 13036) = 0;
    v12 = g_clientConnection;
    *(_DWORD *)(g_clientConnection + 2272) = 0;
    *(_DWORD *)(v12 + 10464) = 0;
    v13 = g_clientConnection;
    *(_DWORD *)(g_clientConnection + 1840) = 0;
    *(_DWORD *)(v13 + 10032) = 0;
    v14 = g_clientConnection;
    *(_DWORD *)(g_clientConnection + 3836) = 0;
    *(_DWORD *)(v14 + 12028) = 0;
    v15 = g_clientConnection;
    *(_DWORD *)(g_clientConnection + 1800) = 0;
    *(_DWORD *)(v15 + 9992) = 0;
    v16 = g_clientConnection;
    *(_DWORD *)(g_clientConnection + 5324) = 0;
    *(_DWORD *)(v16 + 13516) = 0;
    v17 = g_clientConnection;
    *(_DWORD *)(g_clientConnection + 7116) = 0;
    *(_DWORD *)(v17 + 15308) = 0;
    v18 = g_clientConnection;
    *(_DWORD *)(g_clientConnection + 6024) = 0;
    *(_DWORD *)(v18 + 14216) = 0;
    dword_E0C6CC = 0;
    dword_E0C650 = 0;
    dword_E0C600 = 0;
    dword_E0C864 = 0;
    if ( dword_CFA754 )
    {
      v19 = dword_CFA754;
      sub_4011F0((int)dword_CFA754);
      SMemFree(v19, (int)"delete", -1, 0);
      dword_CFA754 = 0;
    }
    FriendList__Destroy();
    AreaListShutdown();
    CGItem_C__Shutdown();
    CGPlayer_C__Shutdown();
    PlayerClientShutdown();
    LootDestroy();
    CGUnit_C__Shutdown(a2, a3, a4, a5, a6, a7, a8);
    CGGameObject_C__Shutdown();
    CGObject_C__Shutdown();
    MovementDestroy(v20, a2, a3, a4, a5, a6, a7, a8);
    LootRollDestroy();
    EventUnregister(5, (int)MovementIdleMoveUnits);
    Spell_C_StopTargeting(a2, a3, a4, a5, a6, a7, a8);
    ClntObjMgrDestroyStd(a2, a3, a4, a5, a6, a7, a8);
    CGUnit_C__PostShutdown();
    CGObject_C__PostShutdown();
    SpellVisualsClear(a2, a3, a4, a5, a6, a7, a8);
    CEffect__Destroy(a2, a3, a4, a5, a6, a7, a8);
    CGWorldFrame__SetScreenEffect(a7, a8, 0);
    if ( dword_E96728 )
      CGWorldFrame__UnitClear((void *)dword_E96728);
    World__UnloadMap();
    WeaponTrailsShutdown();
    PlayerNameShutdown();
    WorldTextShutdown();
    CGGameUI__ShutdownGame();
    ClientDestroyGameTime();
    SI3__ShutDownAmbienceFlavor();
    SI3__ShutdownZoneSoundsHandler();
    SI3__FreeZoneIntros();
    SE3__StopAllSounds(-2, 0);
    dword_DE74F0 = 0;
    ClntObjMgrDestroyShared();
    AccountDataDestroy(0);
    dword_CFA6A4 = 0;
    LoadingScreenDisable();
    if ( dword_CFA6B0 )
    {
      dword_CFA6B0 = 0;
      dword_CFA6AC = 0;
    }
    BattlenetUI_LeaveRealm();
    CAnimKitManager__UninitSystem();
    CAnimReplacementSetDef__UninitSystem();
    if ( dword_CFC8D0 )
    {
      v21 = dword_CFC8D0;
      CCameraManager___CCameraManager((int)dword_CFC8D0);
      SMemFree(v21, (int)"delete", -1, 0);
      dword_CFC8D0 = 0;
    }
    if ( !a9 )
      ClientDBDisconnect();
    if ( a10 )
    {
      CGlueMgr__Resume(a1, a9);
      if ( a11 )
        dword_E7A798 = 11;
      CGlueMgr__SetScreen();
    }
  }
}
Что я не так делаю?

Последний раз редактировалось Amaru; 25.06.2012 в 11:56.
Amaru вне форума   Ответить с цитированием