Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Celownik D3D
#1
Cześć chłopaki. Próbuję napisać pomoc dla gry World of Warships (gry oparte na silniku BigWorld). Znalazłem przykład prostego celu d3d, używając rejestratora d3d, który znalazł właściwy krok / liczba / primitecounts, skompilowany, wtryśnięty, sprawdzony z eksploratorem procesów, który załadował dll, ale w grze właśnie dodano parę czerwonych kwadratów. Może na podstawie gier BW jest coś konkretnego lub coś zrobiłem źle? Jest kod źródłowy.     Kod:   // dzięki lickemu @ [ocenzurowanemu] #include <Windows.h> #include "detours.h" # comment komentarz (lib, "detours.lib") #include <d3d9.h> #include <d3dx9.h> # pragma comment (lib, "d3d9.lib") #pragma comment (lib, "d3dx9.lib") #include <vector> using namespace std; // ================================================ ================================================== ======================== podpisano int __stdcall hkDrawIndexedPrimitive (urządzenie LPDIRECT3DDEVICE9, typ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinIndex, numery UINT, UINT StartIndex, UINT primeCount) ; typedef HRESULT (__stdcall * DrawIndexedPrimitive_t) (LPDIRECT3DDEVICE9, D3DPRIMITIVETYPE, INT, UINT, UINT, UINT, UINT); DrawIndexedPrimitive_t OrigDrawIndexedPrimitive; podpisano int __stdcall hkEndScene (urządzenie LPDIRECT3DDEVICE9); typedef HRESULT (__stdcall * EndScene_t) (LPDIRECT3DDEVICE9); EndScene_t OrigEndScene; // ================================================ ================================================== ========================= // ustawienia DWORD aimkey = VK_CTRL; // aimkey int aimfov = 90; // cel fov w% int aimheight = 0; // wyreguluj wysokość celu, 0 = stopy int aimsmooth = 2; // celuj gładko (mouse accel messes with aiming) // pobierz krok IDirect3DVertexBuffer9 * pStreamData; UINT XOffset = 0; UINT Stride = 0; // pobierz pshader IDirect3DPixelShader9 * pShader; UINT psData; // pobierz vshader IDirect3DVertexShader9 * vShader; UINT vsData; // get viewport D3DVIEWPORT9 viewport; // modele bool MODELE; // ================================================ ================================================== ======================== void DrawPoint (urządzenie LPDIRECT3DDEVICE9, int baseX, int baseY, int baseW, int baseH, D3DCOLOR Cor) {D3DRECT BarRect = { baseX, baseY, baseX + baseW, baseY + baseH}; Device -> Clear (1, & BarRect, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, Cor, 0, 0); } Struct ModelInfo_t {D3DXVECTOR3 Position2D; D3DXVECTOR3 Position3D; pływak CrosshairDistance; }; wektor <ModelInfo_t *> ModelInfo; float GetDistance (float Xx, float Yy, float xX, float yY) {return sqrt ((yY - Yy) * (yY - Yy) + (xX - Xx) * (xX - Xx)); } // w2s void AddModel (LPDIRECT3DDEVICE9 Device) {ModelInfo_t * pModel = new ModelInfo_t; Macierz D3DXMATRIX, m1; Pozycja D3DXVECTOR4; Wejście D3DXVECTOR4; Urządzenie -> GetViewport (& viewport); Urządzenie -> GetVertexShaderConstantF (0, macierz, 4); // wiele gier używa 0 danych wejściowych. y = (float) aimheight; D3DXMatrixTranspose (macierz i macierz); D3DXVec4Transform (& position, & input & matrix); // lub to (w zależności od gry) // D3DXMatrixTranspose (& m1, & matrix); // D3DXVec4Transform (& position, & input & m1); pozycja. x = wejście. x * macierz. _11 + wejście. matryca y *. _21 + wejście. z * matrix. Macierz _31 +. _41; pozycja. y = wejście. x * macierz. _12 + wejście. matryca y *. _22 + wejście. z * matrix. Macierz _32 +. _42; pozycja. z = wejście. x * macierz. _13 + wejście. matryca y *. _23 + wejście. z * matrix. Macierz _33 +. _43; pozycja. w = wejście. x * macierz. _14 + wejście. matryca y *. _24 + wejście. z * matrix. Macierz _34 +. _44; pModel -> Position2D. x = ((pozycja x / pozycja. w) * (szerokość ekranu / 2)) + rzutnia. X + (szerokość ekranu / szerokość / 2); pModel -> Position2D. y = widok. Y + (wysokość ekranu / 2) - ((pozycja y / położenie w) * (wysokość ekranu / 2)); ModelInfo. push_back (pModel); } HRESULT __stdcall myDrawIndexedPrimitive (urządzenie LPDIRECT3DDEVICE9, typ D3DPRIMITIVETYPE, INT BaseVertexIndex, UINT MinIndex, UINT nVertices, UINT sIndex, UINT pCount) {// wykonaj krok, jeśli (Urządzenie -> GetStreamSource (0, & pStreamData, & XOffset i Stride) = = D3D_OK) if (pStreamData! = NULL) {pStreamData -> Release (); pStreamData = NULL; } // pobierz psdata, jeśli (SUCCEEDED (Urządzenie -> GetPixelShader (&
Reply
#2
Dzięki
Reply
#3
O ile mogę powiedzieć. Rysuje czerwone kwadraty na każdym celu. Jeśli na ekranie są dwa cele (statki?), Ale kwadraty nie znajdują się na nich. Następnie świat do ekranu jest błędny "AddModel ()". Inaczej zakładam, że krok to nie tylko 28.
Reply
#4
Tak, trzy kwadraty na ekranie i nie ruszają się. Użyłem d3dprologger przez XTheBuckMasterX - pokazuje krok 28. Myślę, że ta funkcja W2S (AddModel) nie jest odpowiednia dla tego silnika. Może ktoś ma W2S na silnik BigWorld?
Reply
#5
DWORD aimkey = VK_CTRL; nie istnieje, spróbuj VK_CONTROL, to powinno działać
Reply
#6
Tak, znam wirtualne kody. Wydaje się, że funkcja w2s jest w porządku, źle jest parametrem kroku, w weekend spróbuję złapać prawy krok / liczby / primcount.
Reply
#7
Testuję twój scrip, mój bot był celem wyspy, były tylko czerwone kwadraty .. Myślę, że to jest błąd // pobierz modele if (Stride == 28) // model rec MODELE = true;
Reply
#8
skompilowałem twój kod, celbot działa, ale nadal koncentruje się na błędnych punktach, jeśli próbuję zalogować się, itp., moje gry zawieszają się ...
Reply
#9
krok pokazuje mi 28, ale jak się odseparowujesz, myślę, że potrzebujesz silnika bigworld, może przerobisz skrypt Pythona?
Reply
#10
Powodzenia w wydaniu ur, nie możemy się doczekać, aby spróbować samemu
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)