PDA

Просмотр полной версии : [Помогите!] D3D Menu помогите решить проблемку


Dimedrol1536
17.08.2011, 22:27
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
На скринах видно мою проблему.
Menu.cpp#include "Stdafx.h"
#include "Menu.h"
#include "detours.h"
#include <windows.h>


BOOL CarregaFonte = false;


typedef HRESULT(WINAPI* BeginScene_)(LPDIRECT3DDEVICE9 pDevice);
BeginScene_ pBeginScene;

typedef HRESULT ( WINAPI* Reset_t )( LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters );
Reset_t pReset;



HRESULT WINAPI nBeginScene(LPDIRECT3DDEVICE9 pDevice)
{
_asm NOP;
HRESULT hRet = pBeginScene(pDevice);

if(!CarregaFonte) {
CarregaFonte=true;

D3DXCreateFont( pDevice, 14, 0, FW_NORMAL, 0, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[0]);
D3DXCreateFont( pDevice, 14, 0, FW_BOLD, 0, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[1]);
D3DXCreateFont( pDevice, 14, 0, FW_BOLD, 0, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[2]);
D3DXCreateFont( pDevice, 14, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[3]);
D3DXCreateFont( pDevice, 14, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[4]);
D3DXCreateFont( pDevice, 14, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[5]);
D3DXCreateFont( pDevice, 14, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[6]);
D3DXCreateFont( pDevice, 14, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[7]);
D3DXCreateFont( pDevice, 12, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[8]);
D3DXCreateFont( pDevice, 14, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[9]);
D3DXCreateFont( pDevice, 8, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[10]);
D3DXCreateFont( pDevice, 38, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[11]);
D3DXCreateFont( pDevice, 16, 0, FW_BOLD, 1, FALSE,DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Times New Roman", &Fonte[12]);

}




BaseJanela.BaseX = 10;
BaseJanela.BaseY = 150;
BaseJanela.BaseW = 150;
BaseJanela.BaseH = (30 * MENU_ITEM_MAX);



if(GetAsyncKeyState(VK_HOME)&1)
{
BaseJanela.Mostrar = !BaseJanela.Mostrar;
}

if(BaseJanela.Mostrar)
{

if(GetAsyncKeyState(VK_LEFT)&1)
{
setadireita = true;
}
else
setadireita = false;

if(GetAsyncKeyState(VK_RIGHT)&1)
{
setaesquerda = true;
}
else
setaesquerda = false;


MenuEspaco = BaseJanela.BaseH / MENU_ITEM_MAX;


if(GetAsyncKeyState(VK_DOWN)&1){MenuSelecionado +=1;}
if(GetAsyncKeyState(VK_UP)&1){MenuSelecionado -=1;}

if(setadireita && MenuSelecionado == 1){Item1 -=1;}
if(setaesquerda && MenuSelecionado == 1){Item1 +=1;}

if(setadireita && MenuSelecionado == 2){Item2 -=1;}
if(setaesquerda && MenuSelecionado == 2){Item2 +=1;}

if(setadireita && MenuSelecionado == 3){Item3 -=1;}
if(setaesquerda && MenuSelecionado == 3){Item3 +=1;}

if(setadireita && MenuSelecionado == 4){Item4 -=1;}
if(setaesquerda && MenuSelecionado == 4){Item4 +=1;}


if(setadireita && MenuSelecionado == 5){Item5 -=1;}
if(setaesquerda && MenuSelecionado == 5){Item5 +=1;}

if(setadireita && MenuSelecionado == 6){Item6 -=1;}
if(setaesquerda && MenuSelecionado == 6){Item6 +=1;}

if(setadireita && MenuSelecionado == 7){Item7 -=1;}
if(setaesquerda && MenuSelecionado == 7){Item7 +=1;}


if(MenuSelecionado > MENU_ITEM_MAX){MenuSelecionado = MENU_ITEM_MIN;}
if(MenuSelecionado < MENU_ITEM_MIN){MenuSelecionado = MENU_ITEM_MAX;}

if(Item1 > ITEM1_MAX)
Item1 = ITEM1_MIN;
if(Item1 < ITEM1_MIN)
Item1 = ITEM1_MAX;

if(Item2 > ITEM2_MAX)
Item2 = ITEM2_MIN;
if(Item2 < ITEM2_MIN)
Item2 = ITEM2_MAX;

if(Item3 > ITEM3_MAX)
Item3 = ITEM3_MIN;
if(Item3 < ITEM3_MIN)
Item3 = ITEM3_MAX;

if(Item4 > ITEM4_MAX)
Item4 = ITEM4_MIN;
if(Item4 < ITEM4_MIN)
Item4 = ITEM4_MAX;

if(Item5 > ITEM5_MAX)
Item5 = ITEM5_MIN;
if(Item5 < ITEM5_MIN)
Item5 = ITEM5_MAX;

if(Item6 > ITEM6_MAX)
Item6 = ITEM6_MIN;
if(Item6 < ITEM6_MIN)
Item6 = ITEM6_MAX;

if(Item7 > ITEM7_MAX)
Item7 = ITEM7_MIN;
if(Item7 < ITEM7_MIN)
Item7 = ITEM7_MAX;

Menu(pDevice,"Menu Universal ",BaseJanela.BaseX,BaseJanela.BaseY-50,210,300,0x44FFFFFF,0x44FFFFFF,0xFF848484,"V0.5");

Botao(pDevice,BaseJanela.BaseX + 8,BaseJanela.BaseY-MenuEspaco + (MenuSelecionado * MenuEspaco) ,4,20,0xFF2E2E2E,0xFF2E2E2E,0xFFFF0000,"");

Botao(pDevice,BaseJanela.BaseX +15,BaseJanela.BaseY+ (MenuEspaco * 0),175,20,0xFF2E2E2E,0xFF2E2E2E,0xFF848484,"Names ESP");
Botao(pDevice,BaseJanela.BaseX +15,BaseJanela.BaseY+ (MenuEspaco * 1),175,20,0xFF2E2E2E,0xFF2E2E2E,0xFF848484,"Distance ESP");
Botao(pDevice,BaseJanela.BaseX +15,BaseJanela.BaseY+ (MenuEspaco * 2),175,20,0xFF2E2E2E,0xFF2E2E2E,0xFF848484,"Heath ESP");
Botao(pDevice,BaseJanela.BaseX +15,BaseJanela.BaseY+ (MenuEspaco * 3),175,20,0xFF2E2E2E,0xFF2E2E2E,0xFF848484,"Objects ESP");
Botao(pDevice,BaseJanela.BaseX +15,BaseJanela.BaseY+ (MenuEspaco * 4),175,20,0xFF2E2E2E,0xFF2E2E2E,0xFF848484,"Weapon ESP");
Botao(pDevice,BaseJanela.BaseX +15,BaseJanela.BaseY+ (MenuEspaco * 5),175,20,0xFF2E2E2E,0xFF2E2E2E,0xFF848484,"Box ESP");
Botao(pDevice,BaseJanela.BaseX +15,BaseJanela.BaseY+ (MenuEspaco * 6),175,20,0xFF2E2E2E,0xFF2E2E2E,0xFF848484,"Barrel ESP");

GravaTexto(BaseJanela.BaseX +(BaseJanela.BaseW+30) ,BaseJanela.BaseY+ (MenuEspaco * 0) , 0xFFFF9900, Fonte[12],"%d", Item1);
GravaTexto(BaseJanela.BaseX +(BaseJanela.BaseW+30) ,BaseJanela.BaseY+ (MenuEspaco * 1) , 0xFFFF9900, Fonte[12],"%d", Item2);
GravaTexto(BaseJanela.BaseX +(BaseJanela.BaseW+30) ,BaseJanela.BaseY+ (MenuEspaco * 2) , 0xFFFF9900, Fonte[12],"%d", Item3);
GravaTexto(BaseJanela.BaseX +(BaseJanela.BaseW+30) ,BaseJanela.BaseY+ (MenuEspaco * 3) , 0xFFFF9900, Fonte[12],"%d", Item4);
GravaTexto(BaseJanela.BaseX +(BaseJanela.BaseW+30) ,BaseJanela.BaseY+ (MenuEspaco * 4) , 0xFFFF9900, Fonte[12],"%d", Item5);
GravaTexto(BaseJanela.BaseX +(BaseJanela.BaseW+30) ,BaseJanela.BaseY+ (MenuEspaco * 5) , 0xFFFF9900, Fonte[12],"%d", Item6);
GravaTexto(BaseJanela.BaseX +(BaseJanela.BaseW+30) ,BaseJanela.BaseY+ (MenuEspaco * 6) , 0xFFFF9900, Fonte[12],"%d", Item7);

}



if(Item1==1)
//ON
if(Item1==0)
//OFF


//#define ITEM2_MAX 1 add ++

//if(Item==2) etc.....



return hRet;
}


HRESULT WINAPI nReset( LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters )
{
_asm NOP;

if( Fonte[12] )
Fonte[12]->OnLostDevice();

HRESULT hRet = pReset(pDevice, pPresentationParameters);

if(hRet == D3D_OK) {

if( Fonte[12] )
Fonte[12]->OnLostDevice();

}

return hRet;
}



int InicializarD3D(void)
{
DWORD D3DBase, ResultadoD3DBase, *vTable;

D3DBase=0;do {
D3DBase = (DWORD)GetModuleHandle("d3d9.dll");
Sleep(10);
}

while(!D3DBase);
ResultadoD3DBase = ProcurePattern(D3DBase, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x 89\x86", "xx????xx????xx");

if (ResultadoD3DBase) {
memcpy(&vTable,(void *)(ResultadoD3DBase+2),4);

pBeginScene = (BeginScene_)DetourFunction((PBYTE)vTable[42],(PBYTE)nBeginScene);
pReset = (Reset_t)DetourFunction((PBYTE)vTable[16],(PBYTE)nReset);
}

return 0;
}

BOOL WINAPI DllMain (HMODULE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{

switch (fdwReason)
{

case DLL_PROCESS_ATTACH:
{

CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE) InicializarD3D, NULL, NULL, NULL);

}
break;
}

return TRUE;
}



Menu.h#include "stdafx.h"
#include <d3dx9.h>
#include <vector>

#pragma comment(lib,"d3dx9.lib")

ID3DXFont * Fonte[13];
ID3DXFont * fonte;

int MenuSelecionado = 1;

bool setadireita;
bool setaesquerda;

#define MENU_ITEM_MAX 7
#define MENU_ITEM_MIN 1

#define ITEM1_MAX 1
#define ITEM1_MIN 0

#define ITEM2_MAX 1
#define ITEM2_MIN 0

#define ITEM3_MAX 1
#define ITEM3_MIN 0

#define ITEM4_MAX 1
#define ITEM4_MIN 0

#define ITEM5_MAX 1
#define ITEM5_MIN 0

#define ITEM6_MAX 1
#define ITEM6_MIN 0

#define ITEM7_MAX 1
#define ITEM7_MIN 0

int Item1 = 0;
int Item2 = 0;
int Item3 = 0;
int Item4 = 0;
int Item5 = 0;
int Item6 = 0;
int Item7 = 0;


struct Janela{
int BaseX;
int BaseY;
int BaseW;
int BaseH;
bool Mostrar;
} BaseJanela;

int MenuEspaco = 25;


void GravaTexto(int X, int Y, D3DCOLOR Cor, ID3DXFont *fonte, const char* sNome,...)
{
char sTexto[1024] = "";
va_list ap;

if( !sNome || *sNome == '\0' )
return;

va_start( ap, sNome );
_vsnprintf_s( sTexto, 1024, 1023, sNome, ap );
va_end( ap );

RECT Posicao = { X, Y, X+500, Y+50 };
fonte->DrawText( NULL, sTexto, -1, &Posicao, DT_LEFT | DT_WORDBREAK, Cor);
}

void DrawRect(IDirect3DDevice9* Unidade, int baseX, int baseY, int baseW, int baseH, D3DCOLOR Cor)
{
D3DRECT BarRect = { baseX, baseY, baseX + baseW, baseY + baseH };
Unidade->Clear(1, &BarRect, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, Cor, 0, 0);
}


void Base(IDirect3DDevice9* Unidade,int baseX, int baseY, int baseW, int baseH, D3DCOLOR Cor, D3DCOLOR Cor1, D3DCOLOR Cor2)
{
DrawRect(Unidade,baseX+1, baseY+1, baseW+1, baseH+1, Cor);
DrawRect(Unidade,baseX, baseY-1, baseW+1 , baseH, Cor1);
DrawRect(Unidade,baseX+1, baseY, baseW , baseH , Cor2);
}

void Menu(IDirect3DDevice9* Unidade,char *sTitulo, int baseX, int baseY, int baseW, int baseH, D3DCOLOR Cor, D3DCOLOR Cor1, D3DCOLOR Cor2,const char* sVersao,...)
{
DrawRect(Unidade,baseX+1, baseY+1, baseW+1, baseH+1, Cor);
DrawRect(Unidade,baseX, baseY-1, baseW+1 , baseH, Cor1);
DrawRect(Unidade,baseX+1, baseY, baseW , baseH , Cor2);
GravaTexto(baseX +5 ,baseY + 2 , 0x77FFFFFF, Fonte[12], sTitulo);
GravaTexto(baseX +5 ,baseY + baseH - 20 , 0x55FFFFFF, Fonte[12], sVersao);
Base(Unidade,baseX+5,baseY+30,baseW-10,baseH-60,0x44FFFFFF,0x44FFFFFF,0xFF2E2E2E);
}

void Botao(IDirect3DDevice9* Unidade,int baseX, int baseY, int baseW, int baseH, D3DCOLOR Cor, D3DCOLOR Cor1, D3DCOLOR Cor2,const char* sNome,...)
{
DrawRect(Unidade, baseX+1, baseY+1, baseW+1, baseH+1, Cor);
DrawRect(Unidade, baseX, baseY-1, baseW+1 , baseH, Cor1);
DrawRect(Unidade, baseX, baseY, baseW , baseH , Cor2);
GravaTexto(baseX + 10, baseY + 4, 0xFFFFFF00, Fonte[12], sNome);
}


bool Compare(const BYTE* pData, const BYTE* bMaskara, const char* szMaskara){

for(;*szMaskara;++szMaskara,++pData,++bMaskara)

if(*szMaskara=='x' && *pData!=*bMaskara )

return false;

return (*szMaskara) == NULL;
}

DWORD ProcurePattern(DWORD dValor,DWORD dLer,BYTE *bMaskara,char * szMaskara)
{

for(DWORD i=0; i < dLer; i++)

if( Compare( (BYTE*)( dValor+i ),bMaskara,szMaskara) )

return (DWORD)(dValor+i);

return 0;
}

Уже незнаю что делать.

Rakim
18.08.2011, 07:08
Dimedrol1536(2), У меня дак наоборот Хд На 3д текст под меню, а в игре над =)

Bygaga.PTS
18.08.2011, 11:14
знаешь что, дай кому-нибудь из друзей, мб это ток у тебя на компе так

Dimedrol1536
18.08.2011, 12:55
У меня дак наоборот Хд На 3д текст под меню, а в игре над =)
это тогда, когда используеш спрайты.

знаешь что, дай кому-нибудь из друзей, мб это ток у тебя на компе так
это у всех так.

_Mr.ToWa_
18.08.2011, 15:00
Дай ссыль в ЛС на эту прогу д3д ТЕСТ !!

warl0ck
18.08.2011, 21:31
сначала рисуй текст а потом спрайты

_Mr.ToWa_
19.08.2011, 12:47
Dimedrol1536(2) сорр за тупость но дай мне ссыль а эту прогу D3D TEST !!! пллз

warl0ck
19.08.2011, 23:39
Dimedrol1536(2) сорр за тупость но дай мне ссыль а эту прогу D3D TEST !!! пллз

[Ссылки могут видеть только зарегистрированные и активированные пользователи]*********/fd18236

Dimedrol1536
20.08.2011, 12:33
сначала рисуй текст а потом спрайты
Вроде нарисовал, в Д3Д тесте шрифт пропал, а в игре не появился.

*StiV*
20.08.2011, 22:19
У меня тоже такой исходник был и ошибка такая была...
Исправить ошибку на смог, и забил на него.

warl0ck
20.08.2011, 22:33
чем вам мой исходник не нравиться?, он ведь отлично настроен под пб

Dimedrol1536
28.08.2011, 18:51
чем вам мой исходник не нравиться?, он ведь отлично настроен под пб
Хочется чего-то другого, та и вид неплохой.

Лёха92
09.12.2011, 17:20
Кто нашёл ответ, напишите пожалуйста ответ.
Переделываю исходы под другую игру, та же проблема.

Meteor2142
17.01.2012, 18:47
Такая проблема у меня была с исходом Оверлорда!
Там были вот такие строчки
if(Font())
pFont1->OnLostDevice();
FPScheck(sFPS,"%d Fps"); //ФПС
GetTimeFormat(NULL,NULL,NULL,NULL,Timestruct,15);
sprintf(TimeString,"%s",Timestruct); //время
sprintf(Resolution,"%d x %d",Viewport.Width,Viewport.Height); //Разрешение
if(Mmax==0)DiamondMenu(pDevice);
//MenuShow(30,75,pDevice); //координаты меню x,y УБИРАЕТЕ палочки "//" если хотите что бы показывало в Д3Д_Тесте
MenuNav();
if(Mvisible)
{
spHeader->Begin(D3DXSPRITE_ALPHABLEND);
spHeader->Draw(txHeader, NULL, NULL, &pHeader, 0xFFFFFFFF);
spHeader->End();

spFooter->Begin(D3DXSPRITE_ALPHABLEND);
spFooter->Draw(txFooter, NULL, NULL, &pFooter, 0xFFFFFFFF);
spFooter->End();

spBody->Begin(D3DXSPRITE_ALPHABLEND);
spBody->Draw(txBody,0,0,&pBody,0xFFFFFFFF);
spBody->End();
}
//MenuShow(30,75,pDevice); //координаты меню x,y МОЖЕТЕ убрать тут, но там (чуть выше, где закоментированно) палочки нужно убрать... Если оставить две, то нагрузка будет. Если у вас полупрозрачный спрайт, то ничего не меняем.
Возможно у тебя что-то похожее, просто твой исход для меня УГ!