1. char __userpurge NetClient__ProcessMessage<al>(void *this<ecx>, double st6_0<st1>, double st7_0<st0>, int a2, int a3, int a4)
  2. {
  3. int v6; // ebx@1
  4. unsigned int v7; // edi@1
  5. int v8; // esi@1
  6. char result; // al@2
  7. unsigned int v10; // eax@11
  8. int v11; // ecx@12
  9. unsigned int v12; // [sp+Ch] [bp-4h]@1
  10. ++packetCounter;
  11. v8 = (int)this;
  12. CDataStore__GetInt32(a3, (int)&v12);
  13. v6 = v12 & 0x244;
  14. v7 = v12;
  15. if ( (v12 & 0x244) == 4 )
  16. {
  17. result = NetClient__JamClientDispatch(v8, v8, st6_0, st7_0, 0, a2, v12, a3);
  18. }
  19. else
  20. {
  21. if ( (v12 & 0x276) == 80 )
  22. {
  23. result = NetClient__JamClientGuildDispatch(v8, v8, 0, a2, v12, a3);
  24. }
  25. else
  26. {
  27. if ( (v12 & 0x1240) == 512 )
  28. {
  29. result = NetClient__JamClientMovementDispatch(v8, 0, a2, v12, a3);
  30. }
  31. else
  32. {
  33. if ( (v12 & 0x1244) == 580 )
  34. {
  35. result = NetClient__JamClientQuestDispatch(v8, 0, a2, v12, a3);
  36. }
  37. else
  38. {
  39. if ( (v12 & 0x252) == 64 )
  40. {
  41. result = NetClient__JamClientSpellDispatch(v8, st6_0, st7_0, 0, a2, v12, a3);
  42. }
  43. else
  44. {
  45. (*(void (__thiscall **)(int, unsigned int))(*(_DWORD *)v8 + 68))(v8, v12);
  46. v10 = v7 & 3 | ((v7 & 0x38 | ((v7 & 0x180 | (v7 >> 1) & 0x7E00) >> 1)) >> 1);
  47. if ( v6 || (v11 = *(_DWORD *)(v8 + 4 * v10 + 0x550), !v11) )
  48. result = (*(int (**)(void))(*(_DWORD *)a3 + 0x18))();
  49. else
  50. result = ((int (__cdecl *)(_DWORD, unsigned int, int, int))(v11 - ((v7 | (v7 << 16)) ^ 0x62A3A31D)))(
  51. *(_DWORD *)(v8 + 4 * v10 + 0x2550),
  52. v7,
  53. a2,
  54. a3);
  55. }
  56. }
  57. }
  58. }
  59. }
  60. return result;
  61. }