Advertisement
Guest User

Untitled

a guest
May 13th, 2015
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. // Remove Building Crash fix for SA-MP 0.3.7 by MyU
  2. #define WIN32_LEAN_AND_MEAN
  3. #include <Windows.h>
  4. #include <vector>
  5. #include "BitStream.h"
  6. #include "RakNetStuff.h"
  7. #include "detours.h"
  8.  
  9. typedef struct _REMOVE_OBJECT {
  10. int iObjectID;
  11. float fPos[3];
  12. float fRange;
  13. } REMOVE_OBJECT;
  14.  
  15. DWORD dw_OrigJMP = NULL;
  16. DWORD dw_Base = NULL;
  17. std::vector<REMOVE_OBJECT> removed_objects;
  18.  
  19. bool HandleRemove(RPCParameters *rpcParams)
  20. {
  21. BitStream data ( rpcParams->input, rpcParams->numberOfBitsOfData / 8, false );
  22. REMOVE_OBJECT removed_obj;
  23. data.Read ( (char *)&removed_obj, sizeof(REMOVE_OBJECT) );
  24.  
  25. size_t size = removed_objects.size();
  26. for ( size_t it = 0; it != size; it ++ )
  27. if ( removed_obj.iObjectID == removed_objects[it].iObjectID && removed_obj.fRange == removed_objects[it].fRange && removed_obj.fPos[0] == removed_objects[it].fPos[0] && removed_obj.fPos[1] == removed_objects[it].fPos[1] && removed_obj.fPos[2] == removed_objects[it].fPos[2] )
  28. return false;
  29. removed_objects.push_back ( removed_obj );
  30.  
  31. return true;
  32. }
  33.  
  34.  
  35. void _declspec (naked) RemoveBuilding() // 19b00
  36. {
  37. static RPCParameters *rpc_params = NULL;
  38.  
  39. __asm pushad
  40. __asm mov rpc_params, esi
  41.  
  42. HandleRemove(rpc_params);
  43.  
  44. __asm test eax,eax
  45. __asm jmp emerged
  46.  
  47. __asm popad
  48.  
  49. emerged:
  50. __asm popad
  51. __asm retn
  52.  
  53. __asm jmp [dw_OrigJMP]
  54. }
  55.  
  56.  
  57. DWORD WINAPI MainThread (__in LPVOID lpParameter)
  58. {
  59. HMODULE hModSAMP;
  60. while ( true )
  61. {
  62. if ( (hModSAMP=GetModuleHandle("samp.dll")) != NULL )
  63. {
  64.  
  65. dw_Base = (DWORD)hModSAMP;
  66. DWORD dw_RemoveBuildingRPC = dw_Base+0x19b00;
  67. dw_OrigJMP = dw_Base+0x3017A1;
  68. DetourFunction ( (PBYTE)dw_RemoveBuildingRPC, (PBYTE)RemoveBuilding );
  69. break;
  70. }
  71. Sleep ( 1000 );
  72. }
  73.  
  74.  
  75. return 1;
  76. }
  77.  
  78. BOOL APIENTRY DllMain ( HMODULE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
  79. {
  80. UNREFERENCED_PARAMETER ( hinstDLL );
  81. UNREFERENCED_PARAMETER ( lpvReserved );
  82.  
  83.  
  84. if ( fdwReason == DLL_PROCESS_ATTACH )
  85. {
  86. DisableThreadLibraryCalls ( hinstDLL );
  87. CreateThread ( 0, 0, (LPTHREAD_START_ROUTINE)MainThread, 0, 0, NULL );
  88. }
  89.  
  90.  
  91. return TRUE;
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement