Перейти к содержанию

WallHack C++ (нужна помощь с текстурами)


Рекомендуемые сообщения

Привет всем, нужна помощь с текстурами в WallHack (C++), тут небольшая проблема в том, что цвет текстур в игре при включенном WH очень темный, так как в игре есть тень, или просто ночь в игре, и из-за этого цвет текстур так же становится темнее. Как текстуры которые я окрашиваю в какой-то цвет сделать ярче, или чтобы ничего на них не влияло и они всегда были одного (яркого) цвета?
 
Вот сам WallHack:

#include #include #include #include #include #include #include #pragma comment(lib, "d3d9.lib")#pragma comment(lib, "d3dx9.lib")using namespace std;#define WallHack (Stride == 28)typedef HRESULT(__stdcall* EndScene_t)(LPDIRECT3DDEVICE9);EndScene_t pEndScene;DWORD dwEndScene = NULL;typedef HRESULT(__stdcall* DrawIndexedPrimitive_t)(LPDIRECT3DDEVICE9, D3DPRIMITIVETYPE, INT, UINT, UINT, UINT, UINT);DrawIndexedPrimitive_t pDrawIndexedPrimitive;DWORD dwDrawIndexedPrimitive = NULL;bool Color = true;aLPDIRECT3DTEXTURE9 texRed, texYellow, texGreen, texBlue, texPurple, texPink, texOrange, texTurquoise;LPD3DXFONT pFont = NULL;D3DVIEWPORT9 Viewport;UINT Stride;IDirect3DVertexBuffer9 *pStreamData;UINT pOffsetInBytes;bool wallhack = false;D3DCOLOR Red = D3DCOLOR_ARGB(255, 255, 0, 0);D3DCOLOR Green = D3DCOLOR_ARGB(255, 0, 255, 0);D3DCOLOR Blue = D3DCOLOR_ARGB(255, 0, 42, 255);D3DCOLOR TransBlack = D3DCOLOR_ARGB(128, 0, 0, 0);D3DCOLOR White = D3DCOLOR_ARGB(255, 255, 255, 255);D3DCOLOR TransWhite = D3DCOLOR_ARGB(128, 255, 255, 255);D3DCOLOR Black = D3DCOLOR_ARGB(255, 0, 0, 0);D3DCOLOR LightBlue = D3DCOLOR_ARGB(255, 0, 191, 255);void RenderCross(LPDIRECT3DDEVICE9 pDev, DWORD color, int i){pDev->GetViewport(&Viewport);DWORD ScreenCenterX = (Viewport.Width / 2);DWORD ScreenCenterY = (Viewport.Height / 2);D3DRECT rec1 = { ScreenCenterX - i, ScreenCenterY, ScreenCenterX + i, ScreenCenterY + 1 };D3DRECT rec2 = { ScreenCenterX, ScreenCenterY - i, ScreenCenterX + 1, ScreenCenterY + i };pDev->Clear(1, &rec1, D3DCLEAR_TARGET, color, 0, 0);pDev->Clear(1, &rec2, D3DCLEAR_TARGET, color, 0, 0);}void RenderString(LPDIRECT3DDEVICE9 pDev, int x, int y, DWORD color, LPD3DXFONT g_pFont, const char *fmt, ...){if (!pFont)D3DXCreateFontA(pDev, 15, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &pFont);if (!g_pFont)return;RECT FontPos = { x, y, x + 50, y + 50 };char buf[1024] = { '\0' };va_list va_alist;va_start(va_alist, fmt);vsprintf_s(buf, fmt, va_alist);va_end(va_alist);pDev->SetRenderState(D3DRS_ZENABLE, false);pDev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);g_pFont->DrawTextA(NULL, buf, -1, &FontPos, DT_NOCLIP, color);pDev->SetRenderState(D3DRS_ZENABLE, true);pDev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);}bool bDataCompare(const BYTE* pData, const BYTE* bMask, const char* szMask){for (; *szMask; ++szMask, ++pData, ++bMask)if (*szMask == 'x' && *pData != *bMask)return false;return (*szMask) == NULL;}DWORD dwFindPattern(DWORD dwAddress, DWORD dwLen, BYTE *bMask, char * szMask){for (DWORD i = 0; i < dwLen; i++)if (bDataCompare((BYTE*)(dwAddress + i), bMask, szMask))return (DWORD)(dwAddress + i);return 0;}void *DetourFunc(BYTE *src, const BYTE *dst, const int len){BYTE *jmp = (BYTE*)malloc(len + 5);DWORD dwback;VirtualProtect(src, len, PAGE_READWRITE, &dwback);memcpy(jmp, src, len); jmp += len;jmp[0] = 0xE9;*(DWORD*)(jmp + 1) = (DWORD)(src + len - jmp) - 5;src[0] = 0xE9;*(DWORD*)(src + 1) = (DWORD)(dst - src) - 5;VirtualProtect(src, len, dwback, &dwback);return (jmp - len);}void SetModelColor(LPDIRECT3DDEVICE9 pDev, float r, float g, float b, float a, float glowr, float glowg, float glowb, float glowa){float lightValues[4] = { r, g, b, a };float glowValues[4] = { glowr, glowg, glowb, glowa };pDev->SetPixelShaderConstantF(1, lightValues, 1);pDev->SetPixelShaderConstantF(3, glowValues, 1);}static bool bCheckNum(int rec[], int vert){int i = 0;while (rec[i] != 0){if (rec[i] == vert){ return(true); }i++;}return(false);}HRESULT GenerateTexture(IDirect3DDevice9 *pD3Ddev, IDirect3DTexture9 **ppD3Dtex, DWORD colour32){if (FAILED(pD3Ddev->CreateTexture(8, 8, 1, 0, D3DFMT_A4R4G4B4, D3DPOOL_MANAGED, ppD3Dtex, NULL)))return E_FAIL;WORD colour16 = ((WORD)((colour32 >> 28) & 0xF) << 12) | (WORD)(((colour32 >> 20) & 0xF) << 8) | (WORD)(((colour32 >> 12) & 0xF) << 4) | (WORD)(((colour32 >> 4) & 0xF) << 0);D3DLOCKED_RECT d3dlr;(*ppD3Dtex)->LockRect(0, &d3dlr, 0, 0);WORD *pDst16 = (WORD*)d3dlr.pBits;for (int xy = 0; xy < 8 * 8; xy++)*pDst16++ = colour16;(*ppD3Dtex)->UnlockRect(0);return S_OK;}HRESULT __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDev){if (Color){GenerateTexture(pDev, &texRed, D3DCOLOR_ARGB(255, 255, 0, 0));GenerateTexture(pDev, &texYellow, D3DCOLOR_ARGB(255, 255, 255, 0));GenerateTexture(pDev, &texGreen, D3DCOLOR_ARGB(255, 0, 255, 0));GenerateTexture(pDev, &texBlue, D3DCOLOR_ARGB(255, 0, 0, 255));GenerateTexture(pDev, &texPurple, D3DCOLOR_ARGB(255, 102, 0, 153));GenerateTexture(pDev, &texPink, D3DCOLOR_ARGB(255, 255, 20, 147));GenerateTexture(pDev, &texOrange, D3DCOLOR_ARGB(255, 255, 165, 0));GenerateTexture(pDev, &texTurquoise, D3DCOLOR_ARGB(255, 64, 224, 208));Color = false;}/*RenderString(pDev, 14, 5, LightBlue, pFont, "by Mr.Injector");*/if (wallhack){RenderString(pDev, 15, 20, Green, pFont, "WallHack: ");RenderString(pDev, 100, 20, Blue, pFont, "ON");}else{RenderString(pDev, 15, 20, Green, pFont, "WallHack: ");RenderString(pDev, 100, 20, Red, pFont, "OFF");}if (wallhack)RenderCross(pDev, D3DCOLOR_ARGB(255, 0, 255, 0), 15);if ((GetAsyncKeyState(VK_DELETE) & 0x1))wallhack = !wallhack;return pEndScene(pDev);}HRESULT __stdcall hkDrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDev, D3DPRIMITIVETYPE Type, INT BaseVertexIndex, UINT MinVertexIndex, UINT NumVertices, UINT startIndex, UINT primCount){if (pDev->GetStreamSource(0, &pStreamData, &pOffsetInBytes, &Stride) == D3D_OK)pStreamData->Release();if (wallhack){pDev->SetRenderState(D3DRS_FOGENABLE, FALSE);pDev->SetRenderState(D3DRS_LIGHTING, FALSE);pDev->SetRenderState(D3DRS_AMBIENT, White);if WallHack{pDev->SetRenderState(D3DRS_ZENABLE, false);pDev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);pDev->SetTexture(0, texRed);pDrawIndexedPrimitive(pDev, Type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);pDev->SetRenderState(D3DRS_ZENABLE, true);pDev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID);pDev->SetTexture(0, texGreen);}}return pDrawIndexedPrimitive(pDev, Type, BaseVertexIndex, MinVertexIndex, NumVertices, startIndex, primCount);}void Init3d(){HMODULE hModule = NULL;while (!hModule){hModule = GetModuleHandleA("d3d9.dll");Sleep(200);}DWORD* VTableStart = 0;DWORD FoundByGordon = dwFindPattern((DWORD)hModule, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx");memcpy(&VTableStart, (void*)(FoundByGordon + 2), 4);dwDrawIndexedPrimitive = (DWORD)VTableStart[82];dwEndScene = (DWORD)VTableStart[42];pEndScene = (EndScene_t)DetourFunc((PBYTE)dwEndScene, (PBYTE)hkEndScene, 5);pDrawIndexedPrimitive = (DrawIndexedPrimitive_t)DetourFunc((PBYTE)dwDrawIndexedPrimitive, (PBYTE)hkDrawIndexedPrimitive, 5);}int APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved){if (dwReason == DLL_PROCESS_ATTACH){CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Init3d, NULL, NULL, NULL);}return 1;}
Ссылка на комментарий
Поделиться на другие сайты

Попробуй выполнять вначале оригинальную DrawIndexedPrimitive, а потом свою.

HRESULT DrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice, ...){   HRESULT hr = pOrigDrawIndexedPrimitive(pDevice, ...);   // твой код здесь   return hr;}
Ссылка на комментарий
Поделиться на другие сайты

Теперь игроки всегда красные, даже если за стеной (за стеной должны быть зеленые) и на них влияет свет, то есть если игрок выйдет на солнце, то и цвет текстуры станет ярче.

Ссылка на комментарий
Поделиться на другие сайты

По аналогии посмотри тему форума

 

post-3-0-32346100-1411331809_thumb.png

 

post-3-0-62088700-1411331838_thumb.png

    /*    How enemies will be shown     Close enemy:          - Red: In front          - Orange: Behind object     Far enemy:          - Lime Green: In front          - Dark Green: behind object     Very far enemy:          - Light Blue: in front          - Dark Blue: behind object    */     DWORD old_render;    if (ENEMY_1 || ENEMY_2 || ENEMY_3  && Stride == 56){        //pDevInter->GetTexture(0, &textC); //[option 2] -> to let very close enemies have their correct texture        pDevInter->SetRenderState(D3DRS_ZENABLE, false);        pDevInter->SetTexture(0,texOrange);        pDevInter->GetRenderState(D3DRS_ZFUNC, &old_render);        pDevInter->SetRenderState(D3DRS_ZFUNC, D3DCMP_NEVER);         ((pDrawIndexedPrimitive)api_DrawIndexedPrimitive.adr_new_api) (pDevInter, device, BaseVertexIndex,                                             MinVertexIndex, NumVertices, startIndex, primCount);               pDevInter->SetRenderState(D3DRS_ZENABLE, true);        pDevInter->SetRenderState( D3DRS_ZFUNC, old_render);        pDevInter->SetTexture(0,texRed); //[option 1]     //pDevInter->SetTexture(0,textC); [option 2]    }//...
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.