Гость Mr.Injector Опубликовано 21 сентября, 2014 Поделиться Опубликовано 21 сентября, 2014 Привет всем, нужна помощь с текстурами в 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;} Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 21 сентября, 2014 Поделиться Опубликовано 21 сентября, 2014 Попробуй выполнять вначале оригинальную DrawIndexedPrimitive, а потом свою.HRESULT DrawIndexedPrimitive(LPDIRECT3DDEVICE9 pDevice, ...){ HRESULT hr = pOrigDrawIndexedPrimitive(pDevice, ...); // твой код здесь return hr;} Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Mr.Injector Опубликовано 21 сентября, 2014 Поделиться Опубликовано 21 сентября, 2014 Теперь игроки всегда красные, даже если за стеной (за стеной должны быть зеленые) и на них влияет свет, то есть если игрок выйдет на солнце, то и цвет текстуры станет ярче. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 21 сентября, 2014 Поделиться Опубликовано 21 сентября, 2014 По аналогии посмотри тему форума /* 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] }//... Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Mr.Injector Опубликовано 23 сентября, 2014 Поделиться Опубликовано 23 сентября, 2014 Спасибо всем за помощь, я разобрался с проблемой Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 23 сентября, 2014 Поделиться Опубликовано 23 сентября, 2014 Спасибо всем за помощь, я разобрался с проблемой Раз разобрался, так отпиши решение всем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения