1. signed int __cdecl sub_8A6E70(int a1, int a2, int a3, int a4)
  2. {
  3. void *v4; // eax@1
  4. int v5; // esi@1
  5. int v6; // eax@3
  6. int v7; // eax@4
  7. int v9; // eax@7
  8. int v10; // edi@7
  9. int v11; // eax@11
  10. int v12; // eax@12
  11. QWORD v13; // [sp+64h] [bp-8h]@1
  12. CDataStore::GetWowGUID(a4, &v13);
  13. v4 = ClntObjMgrObjectPtr(v13, 8, "Unit_C.cpp", 1620);
  14. v5 = (int)v4;
  15. if ( v4 && *((_DWORD *)v4 + 732) )
  16. {
  17. v6 = *((_DWORD *)v4 + 1157);
  18. if ( v6 )
  19. {
  20. v7 = *(_DWORD *)(v6 + 396);
  21. if ( !(v7 & 1) )
  22. {
  23. if ( v7 )
  24. {
  25. *(_DWORD *)(v5 + 3008) |= 0x200000u;
  26. return 1;
  27. }
  28. }
  29. }
  30. *(_DWORD *)(v5 + 3008) &= 0xFFDFFFFFu;
  31. sub_898D50(1);
  32. *(_DWORD *)(v5 + 2928) = 0;
  33. v9 = CGUnit_C::IsMountSelf(0);
  34. v10 = v9 == 0;
  35. if ( *(_DWORD *)(v5 + 2928) )
  36. {
  37. CGUnit_C::CreateUnitMount(v5);
  38. if ( v10 )
  39. sub_881890(v5);
  40. }
  41. else
  42. {
  43. if ( v9 == 0 )
  44. {
  45. v11 = sub_6DFCD0(*(_DWORD *)(v5 + 3212));
  46. if ( v11 )
  47. {
  48. v12 = sub_7D4410(0, 0, v11, 8);
  49. sub_8B5A50(v12);
  50. }
  51. *(_DWORD *)(v5 + 3212) = 0;
  52. }
  53. }
  54. sub_8E61C0(v5, 0);
  55. CGUnit_C::CheckLoopSound(v5);
  56. (*(void (__thiscall **)(int))(*(_DWORD *)v5 + 272))(v5);
  57. PlayerNameTriggerNameRegenerate(*(_DWORD *)(*(_DWORD *)(v5 + 188) + 84));
  58. CGUnit_C::CreateOrDestroyObjectEffectManager(v5);
  59. sub_8E6700(v5);
  60. }
  61. return 1;
  62. }