Guest User

Untitled

a guest
May 28th, 2015
298
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.12 KB | None | 0 0
  1. // BW FMA in their gay-ass teaser lmfao nice leech kids you took it from me now selling haha
  2. #include <Windows.h>
  3.  
  4. #include <intrin.h>
  5. #pragma  intrinsic(_ReturnAddress)
  6.  
  7. #include <detours.h>
  8. #pragma comment(lib, "detours")
  9.  
  10. #define Padding(x) struct { unsigned char __padding##x[(x)]; };
  11. #define FASTCALL __fastcall
  12. #define STDCALL __stdcall
  13.  
  14. //
  15. BOOL bFullMapAttack = FALSE;
  16. BOOL bFullMapAttack2 = FALSE;
  17. BOOL bItemVac = FALSE;
  18.  
  19. DWORD dwFireWizardFMA = 0x0084F3BA;
  20. //
  21. template<class T>
  22. struct TSecType
  23. {
  24.         Padding(0x0C);
  25. };
  26.  
  27. template <typename T>
  28. struct ZRef
  29. {
  30.         Padding(0x04);
  31.         T *data;
  32. };
  33.  
  34. struct DROP
  35. {
  36.         Padding(0x40);
  37.         BOOL bMeso;
  38.         INT iItemId;
  39.         Padding(0x30);
  40.         TSecType<long> y;
  41.         TSecType<long> x;
  42. };
  43.  
  44. struct CDropPool
  45. {
  46.         Padding(0x2C);
  47.         LPVOID z;
  48. };
  49.  
  50. struct CUserLocal
  51. {
  52.         Padding(0x04);
  53.         LPVOID z;
  54.         Padding(0x00000604);
  55.         INT iAnimation;
  56. };
  57.  
  58. struct CWvsPhysicalSpace2D
  59. {
  60.         Padding(0x1C);
  61.         RECT rect;
  62. };
  63.  
  64. struct CMob
  65. {
  66.         Padding(0x04);
  67.         LPVOID z;
  68.         Padding(0x00000718);
  69.         INT iAnimation; // ?
  70. };
  71.  
  72. struct CMobPool
  73. {
  74.         Padding(0x28);
  75.         LPVOID z;
  76. };
  77.  
  78. DWORD getDistance(__in POINT *pp1, __in POINT *pp2)
  79. {
  80.         return ((pp1->x - pp2->x) * (pp1->x - pp2->x)) + ((pp1->y - pp2->y) * (pp1->y - pp2->y)); // sqrt sucks..
  81. }
  82.  
  83. BOOL DetourFunction(BOOL fStatus, LPVOID* lppvFunction, LPVOID lpvRedirection)
  84. {
  85.         if (DetourTransactionBegin() != NO_ERROR)
  86.                 return FALSE;
  87.  
  88.         if (DetourUpdateThread(GetCurrentThread()) == NO_ERROR)
  89.                 if ((fStatus ? DetourAttach : DetourDetach)(lppvFunction, lpvRedirection) == NO_ERROR)
  90.                         if (DetourTransactionCommit() == NO_ERROR)
  91.                                 return TRUE;
  92.  
  93.         DetourTransactionAbort();
  94.         return FALSE;
  95. }
  96.  
  97. // functions
  98. CMobPool*(CDECL * TSingleton_CMobPool___GetInstance)() = NULL;
  99. CWvsPhysicalSpace2D*(CDECL * TSingleton_CWvsPhysicalSpace2D___GetInstance)() = NULL;
  100. CUserLocal*(CDECL * TSingleton_CUserLocal___GetInstance)() = NULL;
  101. CDropPool*(CDECL * TSingleton_CDropPool___GetInstance)() = NULL;
  102.  
  103. ZRef<CMob>*(CDECL * ZList_ZRef_CMob_____GetNext)(LPVOID lpv) = NULL;
  104. ZRef<DROP>*(CDECL * ZList_ZRef_DROP_____GetNext)(LPVOID lpv) = NULL;
  105. DWORD(FASTCALL * TSecType_long___GetData)(LPVOID lpvEcx, LPVOID lpvEdx) = NULL;
  106.  
  107. // hooks
  108. POINT*(FASTCALL * CMob__GetPos)(__in LPVOID lpvEcx, __in LPVOID lpvEdx, __out POINT *pos) = NULL;
  109. POINT*(FASTCALL * CUser__GetPos)(__in LPVOID lpvEcx, __in LPVOID lpvEdx, __out POINT *pos) = NULL;
  110.  
  111. POINT* FASTCALL CUser__GetPos__Hook(LPVOID lpvEcx, LPVOID lpvEdx, __out POINT *pos)
  112. {
  113.         DWORD dwReturnAddress = (DWORD)_ReturnAddress();
  114.  
  115.         if (bFullMapAttack)
  116.         {
  117.                 POINT pUserPos, pMobPos;
  118.                 CMob *Mob;
  119.  
  120.                 CUser__GetPos(lpvEcx, lpvEdx, &pUserPos);
  121.                 CUser__GetPos(lpvEcx, lpvEdx, pos); // o_O for no mob
  122.  
  123.                 LPVOID lpvList = TSingleton_CMobPool___GetInstance()->z;
  124.  
  125.                 DWORD dwClosestDistance = 0x7FFFFFFF, dwCurrentDistance;
  126.  
  127.                 while (lpvList)
  128.                 {
  129.                         Mob = ZList_ZRef_CMob_____GetNext(&lpvList)->data;
  130.  
  131.                         if (Mob->iAnimation == 0)
  132.                                 continue;
  133.  
  134.                         CMob__GetPos(&Mob->z, 0, &pMobPos);
  135.  
  136.                         dwCurrentDistance = getDistance(&pUserPos, &pMobPos);
  137.                         if (dwCurrentDistance < dwClosestDistance)
  138.                         {
  139.                                 dwClosestDistance = dwCurrentDistance;
  140.  
  141.                                 //
  142.                                 if (TSingleton_CUserLocal___GetInstance()->iAnimation % 2 == 0)
  143.                                 {
  144.                                         // 右向き
  145.                                         pMobPos.x -= 25;
  146.                                 }
  147.                                 else
  148.                                 {
  149.                                         // 左向き
  150.                                         pMobPos.x += 25;
  151.                                 }
  152.  
  153.                                 pos->x = pMobPos.x;
  154.                                 pos->y = pMobPos.y;
  155.                         }
  156.                 }
  157.  
  158.                 return pos;
  159.         }
  160.         else if (bItemVac)
  161.         {
  162.                 DROP *Drop;
  163.  
  164.                 LPVOID lpvList = TSingleton_CDropPool___GetInstance()->z;
  165.  
  166.                 while (lpvList)
  167.                 {
  168.                         Drop = ZList_ZRef_DROP_____GetNext(&lpvList)->data;
  169.                         if (Drop->iItemId)
  170.                         {
  171.                                 pos->x = TSecType_long___GetData(&Drop->x, 0);
  172.                                 pos->y = TSecType_long___GetData(&Drop->y, 0);
  173.                                 break;
  174.                         }
  175.                 }
  176.  
  177.                 return pos;
  178.         }
  179.  
  180.         return CUser__GetPos(lpvEcx, lpvEdx, pos);
  181. }
  182.  
  183. BOOL(FASTCALL * CUserLocal__TryDoingShootAttack)(LPVOID lpvEcx, LPVOID lpvEdx, LPVOID lpv4, LPVOID lpv8, LPVOID lpvC, LPVOID lpv10, LPVOID lpv14,
  184.         LPVOID lpv18, LPVOID lpv1C, LPVOID lpv20, LPVOID lpv24) = NULL;
  185. BOOL FASTCALL CUserLocal__TryDoingShootAttack__Hook(LPVOID lpvEcx, LPVOID lpvEdx, LPVOID lpv4, LPVOID lpv8, LPVOID lpvC, LPVOID lpv10, LPVOID lpv14,
  186.         LPVOID lpv18, LPVOID lpv1C, LPVOID lpv20, LPVOID lpv24)
  187. {
  188.         bFullMapAttack = TRUE;
  189.  
  190.         BOOL bRet = CUserLocal__TryDoingShootAttack(lpvEcx, lpvEdx, lpv4, lpv8, lpvC, lpv10, lpv14, lpv18, lpv1C, lpv20, lpv24);
  191.  
  192.         bFullMapAttack = FALSE;
  193.  
  194.         return bRet;
  195. }
  196.  
  197. BOOL(FASTCALL * CUserLocal__TryDoingMagicAttack)(LPVOID lpvEcx, LPVOID lpvEdx, LPVOID lpv4, LPVOID lpv8, LPVOID lpvC, LPVOID lpv10, LPVOID lpv14,
  198.         LPVOID lpv18, LPVOID lpv1C, LPVOID lpv20, LPVOID lpv24) = NULL;
  199. BOOL FASTCALL CUserLocal__TryDoingMagicAttack__Hook(LPVOID lpvEcx, LPVOID lpvEdx, LPVOID lpv4, LPVOID lpv8, LPVOID lpvC, LPVOID lpv10, LPVOID lpv14,
  200.         LPVOID lpv18, LPVOID lpv1C, LPVOID lpv20, LPVOID lpv24)
  201. {
  202.         bFullMapAttack = TRUE;
  203.  
  204.         BOOL bRet = CUserLocal__TryDoingMagicAttack(lpvEcx, lpvEdx, lpv4, lpv8, lpvC, lpv10, lpv14, lpv18, lpv1C, lpv20, lpv24);
  205.  
  206.         bFullMapAttack = FALSE;
  207.  
  208.         return bRet;
  209. }
  210.  
  211. BOOL(FASTCALL * CUserLocal__TryDoingMeleeAttack)(LPVOID lpvEcx, LPVOID lpvEdx, LPVOID lpv4, LPVOID lpv8, LPVOID lpvC, LPVOID lpv10, LPVOID lpv14,
  212.         LPVOID lpv18, LPVOID lpv1C, LPVOID lpv20, LPVOID lpv24, LPVOID lpv28, LPVOID lpv2C, LPVOID lpv30, LPVOID lpv34, LPVOID lpv38) = NULL;
  213. BOOL FASTCALL CUserLocal__TryDoingMeleeAttack__Hook(LPVOID lpvEcx, LPVOID lpvEdx, LPVOID lpv4, LPVOID lpv8, LPVOID lpvC, LPVOID lpv10, LPVOID lpv14,
  214.         LPVOID lpv18, LPVOID lpv1C, LPVOID lpv20, LPVOID lpv24, LPVOID lpv28, LPVOID lpv2C, LPVOID lpv30, LPVOID lpv34, LPVOID lpv38)
  215. {
  216.         bFullMapAttack = TRUE;
  217.  
  218.         BOOL bRet = CUserLocal__TryDoingMeleeAttack(lpvEcx, lpvEdx, lpv4, lpv8, lpvC, lpv10, lpv14, lpv18, lpv1C, lpv20, lpv24, lpv28, lpv2C, lpv30, lpv34, lpv38);
  219.  
  220.         bFullMapAttack = FALSE;
  221.  
  222.         return bRet;
  223. }
  224.  
  225. LPVOID(FASTCALL * CUserLocal__TryDoingFWAttack)(LPVOID lpvEcx, LPVOID lpvEdx, LPVOID lpv4) = NULL;
  226. LPVOID FASTCALL CUserLocal__TryDoingFWAttack__Hook(LPVOID lpvEcx, LPVOID lpvEdx, LPVOID lpv4)
  227. {
  228.         bFullMapAttack2 = TRUE;
  229.  
  230.         LPVOID lpvRet = CUserLocal__TryDoingFWAttack(lpvEcx, lpvEdx, lpv4);
  231.  
  232.         bFullMapAttack2 = FALSE;
  233.  
  234.         return lpvRet;
  235. }
  236.  
  237. POINT* FASTCALL CMob__GetPos__Hook(LPVOID lpvEcx, LPVOID lpvEdx, __out POINT *pos)
  238. {
  239.         if (bFullMapAttack2)
  240.                 return CUser__GetPos(&TSingleton_CUserLocal___GetInstance()->z, lpvEdx, pos);
  241.  
  242.         return CMob__GetPos(lpvEcx, lpvEdx, pos);
  243. }
  244.  
  245. //
  246. INT(FASTCALL * CMobPool__FindHitMobInRect)(LPVOID lpvEcx, LPVOID lpvEdx, RECT* rect, LPVOID lpv8, LPVOID lpvC, LPVOID lpv10, LPVOID lpv14,
  247.         LPVOID lpv18, LPVOID lpv1C, LPVOID lpv20, LPVOID lpv24, LPVOID lpv28, LPVOID lpv2C, LPVOID lpv30, LPVOID lpv34, LPVOID lpv38) = NULL;
  248. INT FASTCALL CMobPool__FindHitMobInRect__Hook(LPVOID lpvEcx, LPVOID lpvEdx, RECT* rect, LPVOID lpv8, LPVOID lpvC, LPVOID lpv10, LPVOID lpv14,
  249.         LPVOID lpv18, LPVOID lpv1C, LPVOID lpv20, LPVOID lpv24, LPVOID lpv28, LPVOID lpv2C, LPVOID lpv30, LPVOID lpv34, LPVOID lpv38)
  250. {
  251.         DWORD dwReturnAddress = (DWORD)_ReturnAddress();
  252.  
  253.         if (dwReturnAddress == dwFireWizardFMA)
  254.                 rect = &TSingleton_CWvsPhysicalSpace2D___GetInstance()->rect;
  255.  
  256.         return CMobPool__FindHitMobInRect(lpvEcx, lpvEdx, rect, lpv8, lpvC, lpv10, lpv14, lpv18, lpv1C, lpv20, lpv24, lpv28, lpv2C, lpv30, lpv34, lpv38);
  257. }
  258.  
  259. //
  260. VOID(FASTCALL * CDropPool__TryPickUpDrop)(CDropPool *lpvEcx, LPVOID lpvEdx, POINT *point) = NULL;
  261. VOID FASTCALL CDropPool__TryPickUpDrop__Hook(CDropPool *lpvEcx, LPVOID lpvEdx, POINT *point)
  262. {
  263.         DROP *Drop;
  264.  
  265.         LPVOID lpvList = lpvEcx->z;
  266.  
  267.         while (lpvList)
  268.         {
  269.                 Drop = ZList_ZRef_DROP_____GetNext(&lpvList)->data;
  270.                 if (Drop->iItemId)
  271.                 {
  272.                         point->x = TSecType_long___GetData(&Drop->x, 0);
  273.                         point->y = TSecType_long___GetData(&Drop->y, 0);
  274.                         break;
  275.                 }
  276.         }
  277.  
  278.         bItemVac = TRUE;
  279.  
  280.         CDropPool__TryPickUpDrop(lpvEcx, lpvEdx, point);
  281.  
  282.         bItemVac = FALSE;
  283. }
  284.  
  285. VOID Toggle(BOOL fEnable)
  286. {
  287.  
  288.         *(LPVOID*)&ZList_ZRef_CMob_____GetNext = reinterpret_cast<LPVOID>(0x00A77D30); // 337.01
  289.         *(LPVOID*)&CMob__GetPos = reinterpret_cast<LPVOID>(0x00A218F0); // 337.01
  290.         *(LPVOID*)&CUser__GetPos = reinterpret_cast<LPVOID>(0x00625CB0); // 337.01
  291.  
  292.         // Normal FMA
  293.         *(LPVOID*)&CUserLocal__TryDoingMeleeAttack = reinterpret_cast<LPVOID>(0x013DEF60); // 337.01
  294.         *(LPVOID*)&CUserLocal__TryDoingShootAttack = reinterpret_cast<LPVOID>(0x013F2C80); // 337.01
  295.         *(LPVOID*)&CUserLocal__TryDoingMagicAttack = reinterpret_cast<LPVOID>(0x013FBB70); // 337.01
  296.         *(LPVOID*)&CUserLocal__TryDoingFWAttack = reinterpret_cast<LPVOID>(0x014170A0); // 337.01
  297.  
  298.         // TSingleton
  299.         *(LPVOID*)&TSingleton_CMobPool___GetInstance = reinterpret_cast<LPVOID>(0x004AD7B0); // 337.01
  300.         *(LPVOID*)&TSingleton_CWvsPhysicalSpace2D___GetInstance = reinterpret_cast<LPVOID>(0x004ADAE0); // 337.01
  301.         *(LPVOID*)&TSingleton_CUserLocal___GetInstance = reinterpret_cast<LPVOID>(0x0049CA30); // 337.01
  302.         *(LPVOID*)&TSingleton_CDropPool___GetInstance = reinterpret_cast<LPVOID>(0x0071CC00); // 337.01
  303.         //
  304.         *(LPVOID*)&CMobPool__FindHitMobInRect = reinterpret_cast<LPVOID>(0x00A79F50); // 337.01
  305.  
  306.         // ItemVac
  307.         *(LPVOID*)&CDropPool__TryPickUpDrop = reinterpret_cast<LPVOID>(0x006C2E60); // 337.01
  308.         *(LPVOID*)&TSecType_long___GetData = reinterpret_cast<LPVOID>(0x0047B310); // 337.01
  309.         *(LPVOID*)&ZList_ZRef_DROP_____GetNext = reinterpret_cast<LPVOID>(0x006C0FD0); // 337.01
  310.  
  311.         DetourFunction(fEnable, reinterpret_cast<LPVOID*>(&CUser__GetPos), &CUser__GetPos__Hook);
  312.         DetourFunction(fEnable, reinterpret_cast<LPVOID*>(&CMob__GetPos), &CMob__GetPos__Hook);
  313.  
  314.         DetourFunction(fEnable, reinterpret_cast<LPVOID*>(&CUserLocal__TryDoingMeleeAttack), &CUserLocal__TryDoingMeleeAttack__Hook);
  315.         DetourFunction(fEnable, reinterpret_cast<LPVOID*>(&CUserLocal__TryDoingShootAttack), &CUserLocal__TryDoingShootAttack__Hook);
  316.         DetourFunction(fEnable, reinterpret_cast<LPVOID*>(&CUserLocal__TryDoingMagicAttack), &CUserLocal__TryDoingMagicAttack__Hook);
  317.         DetourFunction(fEnable, reinterpret_cast<LPVOID*>(&CUserLocal__TryDoingFWAttack), &CUserLocal__TryDoingFWAttack__Hook);
  318.  
  319.         // Fire Wizard
  320.         DetourFunction(fEnable, reinterpret_cast<LPVOID*>(&CMobPool__FindHitMobInRect), &CMobPool__FindHitMobInRect__Hook);
  321.  
  322.         // Item Vac A/B
  323.         // DetourFunction(fEnable, reinterpret_cast<LPVOID*>(&CDropPool__TryPickUpDrop), &CDropPool__TryPickUpDrop__Hook);
  324. }
Add Comment
Please, Sign In to add comment