Shrooms

CUserLocal_TryDoingTeleport

Jan 11th, 2013
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.80 KB | None | 0 0
  1. 83 EC ?? 53 55 56 57 8B F1 E8 ?? ?? ?? ?? 8B D8 8D BE ?? ?? ?? ?? 8D 4F
  2.  
  3. ___:00932C00
  4. ___:00932C00 ; =============== S U B R O U T I N E =======================================
  5. ___:00932C00
  6. ___:00932C00
  7. ___:00932C00 CUserLocal__TryDoingTeleport proc near ; CODE XREF: CUserLocal__Update+227Ep
  8. ___:00932C00
  9. ___:00932C00 var_C = dword ptr -0Ch
  10. ___:00932C00 var_8 = byte ptr -8
  11. ___:00932C00
  12. ___:00932C00 sub esp, 0Ch
  13. ___:00932C03 push esi
  14. ___:00932C04 mov esi, ecx
  15. ___:00932C06 call get_update_time
  16. ___:00932C0B cmp dword ptr [esi+3B24h], 0
  17. ___:00932C12 mov [esp+10h+var_C], eax
  18. ___:00932C16 jz loc_932D4E
  19. ___:00932C1C mov ecx, [esi+3B34h]
  20. ___:00932C22 sub ecx, eax
  21. ___:00932C24 test ecx, ecx
  22. ___:00932C26 jg loc_932D4E
  23. ___:00932C2C mov eax, [esi+19E4h]
  24. ___:00932C32 test eax, eax
  25. ___:00932C34 jz short loc_932C3B
  26. ___:00932C36 lea edx, [eax-0Ch]
  27. ___:00932C39 jmp short loc_932C3D
  28. ___:00932C3B ; ---------------------------------------------------------------------------
  29. ___:00932C3B
  30. ___:00932C3B loc_932C3B: ; CODE XREF: CUserLocal__TryDoingTeleport+34j
  31. ___:00932C3B xor edx, edx
  32. ___:00932C3D
  33. ___:00932C3D loc_932C3D: ; CODE XREF: CUserLocal__TryDoingTeleport+39j
  34. ___:00932C3D mov eax, [esi+3B30h]
  35. ___:00932C43 mov ecx, [esi+3B2Ch]
  36. ___:00932C49 push ebx
  37. ___:00932C4A push ebp
  38. ___:00932C4B push edi
  39. ___:00932C4C lea edi, [edx+0Ch]
  40. ___:00932C4F mov edx, [edi]
  41. ___:00932C51 push eax
  42. ___:00932C52 mov eax, [edx+40h]
  43. ___:00932C55 push ecx
  44. ___:00932C56 push edi
  45. ___:00932C57 call eax
  46. ___:00932C59 test eax, eax
  47. ___:00932C5B jge short loc_932C69
  48. ___:00932C5D push offset dword_B4692C
  49. ___:00932C62 push edi
  50. ___:00932C63 push eax
  51. ___:00932C64 call _com_issue_errorex
  52. ___:00932C69 ; ---------------------------------------------------------------------------
  53. ___:00932C69
  54. ___:00932C69 loc_932C69: ; CODE XREF: CUserLocal__TryDoingTeleport+5Bj
  55. ___:00932C69 mov ecx, [esi+3B2Ch]
  56. ___:00932C6F lea edi, [esi+199Ch]
  57. ___:00932C75 lea ebx, [edi+0Ch]
  58. ___:00932C78 push ecx
  59. ___:00932C79 mov ecx, ebx
  60. ___:00932C7B call TSecType_long___SetData
  61. ___:00932C80 mov edx, [esi+3B30h]
  62. ___:00932C86 push edx
  63. ___:00932C87 mov ecx, edi
  64. ___:00932C89 call TSecType_long___SetData
  65. ___:00932C8E mov ecx, ebx
  66. ___:00932C90 lea ebp, [esi+1984h]
  67. ___:00932C96 call TSecType_long___GetData
  68. ___:00932C9B push eax
  69. ___:00932C9C lea ecx, [ebp+0Ch]
  70. ___:00932C9F call TSecType_long___SetData
  71. ___:00932CA4 mov ecx, edi
  72. ___:00932CA6 call TSecType_long___GetData
  73. ___:00932CAB push eax
  74. ___:00932CAC mov ecx, ebp
  75. ___:00932CAE call TSecType_long___SetData
  76. ___:00932CB3 mov eax, [esp+1Ch+var_C]
  77. ___:00932CB7 xor ebx, ebx
  78. ___:00932CB9 mov [esi+3B34h], eax
  79. ___:00932CBF add eax, 258h
  80. ___:00932CC4 mov [esi+3B24h], ebx
  81. ___:00932CCA mov [esi+3B38h], eax
  82. ___:00932CD0 cmp [esi+3B3Ch], ebx
  83. ___:00932CD6 jz short loc_932D3F
  84. ___:00932CD8 mov eax, [esi+3B40h]
  85. ___:00932CDE push eax
  86. ___:00932CDF call is_teleport_mastery_skill
  87. ___:00932CE4 add esp, 4
  88. ___:00932CE7 test eax, eax
  89. ___:00932CE9 jz short loc_932D3F
  90. ___:00932CEB lea ecx, [esp+1Ch+var_8]
  91. ___:00932CEF push ecx
  92. ___:00932CF0 mov ecx, off_C64068
  93. ___:00932CF6 call CWvsContext__GetCharacterData
  94. ___:00932CFB mov edi, [eax+4]
  95. ___:00932CFE lea ecx, [esp+1Ch+var_8]
  96. ___:00932D02 call ZRef_CharacterData____ZRef_CharacterData_
  97. ___:00932D07 mov eax, [esi+3B40h]
  98. ___:00932D0D mov ecx, dword_C63EA8
  99. ___:00932D13 lea edx, [esp+1Ch+var_C]
  100. ___:00932D17 push edx
  101. ___:00932D18 push eax
  102. ___:00932D19 push edi
  103. ___:00932D1A mov [esp+28h+var_C], ebx
  104. ___:00932D1E call CSkillInfo__GetSkillLevel
  105. ___:00932D23 cmp eax, ebx
  106. ___:00932D25 jle short loc_932D3F
  107. ___:00932D27 mov edi, [esp+1Ch+var_C]
  108. ___:00932D2B cmp edi, ebx
  109. ___:00932D2D jz short loc_932D3F
  110. ___:00932D2F xor edx, edx
  111. ___:00932D31 push edx
  112. ___:00932D32 xor ecx, ecx
  113. ___:00932D34 push ecx
  114. ___:00932D35 push ebx
  115. ___:00932D36 push eax
  116. ___:00932D37 push edi
  117. ___:00932D38 mov ecx, esi
  118. ___:00932D3A call CUserLocal__TryDoingBodyAttack
  119. ___:00932D3F
  120. ___:00932D3F loc_932D3F: ; CODE XREF: CUserLocal__TryDoingTeleport+D6j
  121. ___:00932D3F ; CUserLocal__TryDoingTeleport+E9j ...
  122. ___:00932D3F pop edi
  123. ___:00932D40 pop ebp
  124. ___:00932D41 mov [esi+3B3Ch], ebx
  125. ___:00932D47 mov [esi+3B40h], ebx
  126. ___:00932D4D pop ebx
  127. ___:00932D4E
  128. ___:00932D4E loc_932D4E: ; CODE XREF: CUserLocal__TryDoingTeleport+16j
  129. ___:00932D4E ; CUserLocal__TryDoingTeleport+26j
  130. ___:00932D4E pop esi
  131. ___:00932D4F add esp, 0Ch
  132. ___:00932D52 retn
  133. ___:00932D52 CUserLocal__TryDoingTeleport endp
  134.  
  135. // Pseudocode (Benny stated this may be wrong due to no debug symbols)
  136.  
  137. int __thiscall CUserLocal__TryDoingTeleport(void *this)
  138. {
  139. int result; // eax@1
  140. void *v2; // esi@1
  141. char v3; // zf@1
  142. int v4; // eax@3
  143. int v5; // edx@4
  144. int v6; // eax@6
  145. int v7; // edi@6
  146. char v8; // al@8
  147. char v9; // al@8
  148. int v10; // eax@8
  149. int v11; // edi@10
  150. int v12; // ST0C_4@10
  151. int v13; // [sp+Ch] [bp-Ch]@1
  152. char v14; // [sp+10h] [bp-8h]@10
  153.  
  154. v2 = this;
  155. result = get_update_time();
  156. v3 = *((_DWORD *)v2 + 3785) == 0;
  157. v13 = result;
  158. if ( !v3 )
  159. {
  160. if ( *((_DWORD *)v2 + 3789) - result <= 0 )
  161. {
  162. v4 = *((_DWORD *)v2 + 1657);
  163. if ( v4 )
  164. v5 = v4 - 12;
  165. else
  166. v5 = 0;
  167. v7 = v5 + 12;
  168. v6 = (*(int (__stdcall **)(int, _DWORD, _DWORD))(*(_DWORD *)(v5 + 12) + 64))(
  169. v5 + 12,
  170. *((_DWORD *)v2 + 3787),
  171. *((_DWORD *)v2 + 3788));
  172. if ( v6 < 0 )
  173. com_issue_errorex(v6, v7, dword_B4692C);
  174. TSecType_long___SetData(*((_DWORD *)v2 + 3787));
  175. TSecType_long___SetData(*((_DWORD *)v2 + 3788));
  176. v8 = TSecType_long___GetData((char *)v2 + 6568);
  177. TSecType_long___SetData(v8);
  178. v9 = TSecType_long___GetData((char *)v2 + 6556);
  179. TSecType_long___SetData(v9);
  180. v10 = v13;
  181. *((_DWORD *)v2 + 3789) = v13;
  182. result = v10 + 600;
  183. *((_DWORD *)v2 + 3785) = 0;
  184. *((_DWORD *)v2 + 3790) = result;
  185. if ( *((_DWORD *)v2 + 3791) )
  186. {
  187. result = is_teleport_mastery_skill(*((_DWORD *)v2 + 3792));
  188. if ( result )
  189. {
  190. v11 = *(_DWORD *)(CWvsContext__GetCharacterData(&v14) + 4);
  191. ZRef_CharacterData____ZRef_CharacterData_(&v14);
  192. v12 = *((_DWORD *)v2 + 3792);
  193. v13 = 0;
  194. result = CSkillInfo__GetSkillLevel(v11, v12, &v13);
  195. if ( result > 0 )
  196. {
  197. if ( v13 )
  198. result = CUserLocal__TryDoingBodyAttack(v13, result, 0, 0, 0);
  199. }
  200. }
  201. }
  202. *((_DWORD *)v2 + 3791) = 0;
  203. *((_DWORD *)v2 + 3792) = 0;
  204. }
  205. }
  206. return result;
  207. }
Advertisement
Add Comment
Please, Sign In to add comment