Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2011, 02:35   #1
D1kiy
Новичок
Джуниор
 
Регистрация: 13.04.2011
Сообщений: 2
Сообщение Dll библиотека на Microsoft Visual Studio

Пишу dll для инжекта в игру и понадобилась помощь опытных программистов.. Знаний в этой области мало, поэтому делаю по гайду.. Хочу выложить вам этот гайд, а потом задать вопросы, чтоб вы поняли чего я от вас хочу.. =)

Используемые инструменты:
Цитата:
DirectX SDK
Логгер текстур
Direct3D StarterKit v3.0b
Microsoft Visual Studio

1.Настройка D3D StarterKit:


Цитата:
Первым делом устанавливаем Microsoft Visual Studio и DirectX SDK
Запускаем программу и идём в Tools->Options->Projects and Solutions>VC++ Directories

Во вкладке Show directories for: Выбираем Include files и добавляем путь к нашему DirectX SD K к папке \Include
Делаем тоже самое для Library Files (..\Lib\x86), Executable files(..\)
Всё, теперь мы сможем откомпилить наш Direct3D StarterKit v3.0b
2. Настройка Injector'а:

Цитата:
В main.cpp нужно изменить только 1 строчку:

Код:

#define APP_EXE "target_application.exe"

Где target_application.exe прописываем название вашей игры

Например:
xrEngine.exe, FarCry2.exe, iw3mp.exe.

Важно!
Название .dll файла и инжектора должны быть одинаковыми.

3. Первая функция dll-ки на Num1.

Цитата:
1. Ищем текстуры которые нам нужны используя логгер текстур.

2. Прописываем их в нашем Direct3D StarterKit v3.0b в d3d9dev.cpp в начале файла


Пример:
Код:

#define MyWallhack ((NumVertices == xx && primCount == xx) || (NumVertices == xx && primCount == xx))

bool bWallHack = false;

3. Теперь идём в DrawIndexedPrimitive

и добавляем:
Код:

if (bWallHack)
{
if (MyWallhack)
{
DWORD dwOldZEnable;
m_pD3Ddev->GetRenderState(D3DRS_ZENABLE,&dwOl dZEnable);
m_pD3Ddev->SetRenderState(D3DRS_ZENABLE,D3DZB _FALSE);
m_pD3Ddev->DrawIndexedPrimitive(Type,BaseVert exIndex,MinVert exIndex,NumVertices,startIndex,prim Count);
m_pD3Ddev->SetRenderState(D3DRS_ZENABLE,dwOld ZEnable);
}
}

4. Идём в EndScene и ставим валлхак на кнопку включить\выключить:
Код:

if(GetAsyncKeyState( VK_NUMPAD1 ) &1 )
bWallHack = !bWallHack;
4. Вторая функция на Num2.
Цитата:
С верху файла добавляем:
Код:

bool bFog = false;

Код:

Идём в DrawIndexedPrimitive и добавляем такую строчку:
if(bFog)
{
m_pD3Ddev->SetRenderState( D3DRS_FOGENABLE , false );
}

Теперь в EndScene
Код:

if(GetAsyncKeyState( VK_NUMPAD2 ) &1 )
bFog = !bFog;[/color]
5. Третья функция, не поставлена на кнопку.
Цитата:
С верху прописываем

Код:

bool bXhair = false;

ID3DXLine *pLine;
D3DVIEWPORT9 Viewport;
D3DXVECTOR2 CrosshairX[2], CrosshairY[2];



В BeginScene пишем:


Код:

m_pD3Ddev->GetViewport(&Viewport); // Вычисляем середину экрана:
float ScreenCenterX = (float)Viewport.Width / 2 + Viewport.X +1; //Делаем +1 поскольку центр экрана немного смещён
float ScreenCenterY = (float)Viewport.Height / 2 + Viewport.Y;

//создаём линии:
CrosshairX[0].x = ScreenCenterX-1-7;
CrosshairX[0].y = ScreenCenterY;
CrosshairX[1].x = ScreenCenterX-1+8;
CrosshairX[1].y = ScreenCenterY;
CrosshairY[0].x = ScreenCenterX-1;
CrosshairY[0].y = ScreenCenterY-7;
CrosshairY[1].x = ScreenCenterX-1;
CrosshairY[1].y = ScreenCenterY+8;




И прорисовываем сам прицел в игре из EndScene:


Код:



if(pLine == NULL)
D3DXCreateLine( m_pD3Ddev , &pLine); //создаём линию
pLine->SetWidth(1.0); //толщина
pLine->SetAntialias(true);
pLine->SetGLLines(true);

if (bXhair)
{
pLine->Begin();
pLine->Draw(CrosshairX, 2, D3DCOLOR_RGBA(255, 0, 255, 255)); // цвет линии по Х
pLine->End();

pLine->Begin();
pLine->Draw(CrosshairY, 2, D3DCOLOR_RGBA(255, 0, 255, 255)); // цвет линии по Y
pLine->End();
}
D1kiy вне форума Ответить с цитированием
Старый 13.04.2011, 02:37   #2
D1kiy
Новичок
Джуниор
 
Регистрация: 13.04.2011
Сообщений: 2
Сообщение продолжение...

6. Четвертая функция, добавочная. Так как первая функция делала видимыми некоторые текстуры, эта функция добавляет к ним подсветку цветом.
Цитата:
В начале d3d9dev.cpp прописываем:
Код:

int a=1;

Далее после всех bool'ов вставляем этот код:
Код:

LPDIRECT3DTEXTURE9 Pink;
const BYTE bPink[58] =
{
0x42, 0x4D, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x80, 0x00, 0xFF, 0x00
};
LPDIRECT3DTEXTURE9 Blue;
const BYTE bBlue[60] =
{
0x42, 0x4D, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01,
0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x12, 0x0B, 0x00, 0x00, 0x12, 0x0B, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
};

Можно использовать и другие цвета, на ваш вкус, байты которых можно найти в гугле, в частности, они есть здесь:
http://forum.ghbsys.net/index.php?sh...&mode=threaded … e=threaded
Идём в BeginScene() и вставляем такие строки перед return m_pD3Ddev->BeginScene(); :
Код:

if (a==1)
{
D3DXCreateTextureFromFileInMemory(m _pD3Ddev,(LPCVO ID)&bPink,58,&Pink);
D3DXCreateTextureFromFileInMemory(m _pD3Ddev,(LPCVO ID)&bBlue,60,&Blue);
a=0;
}

Теперь идем в DrawIndexedPrimitive, к нашему волхаку и после строчки m_pD3Ddev->SetRenderState(D3DRS_ZENABLE,D3DZB _FALSE); вставляем такую:
Код:

m_pD3Ddev->SetTexture(0,Pink);

А после m_pD3Ddev->SetRenderState(D3DRS_ZENABLE,dwOld ZEnable2); такую:
Код:

m_pD3Ddev->SetTexture(0,Blue);
Теперь мои вопросы, пожалуйста ответьте хотя бы на некоторые из них, мне очень надо.
1. Что добавить чтоб третья функция тоже включалась по кнопке, например Num 3, а не работала постоянно?
2. Когда я добавляю четвертую функцию, то кнопка Num 1 уже показывает не просто текстуры, а подсвеченные цветом.. Как можно сделать чтоб Num 1 показывал просто текстуры, а Num 4 уже подсвеченные?
3. Как задать четвертой функции параметр, чтоб она одни текстуры подсвечивала красным, другие синим, третьи желтым, и как я уже сказал чтоб подсветка включалась отдельно по Num 4, а пара текстур все таки таки должны включаться вместе c первой функцией Num 1, но они уже подсвечиваться будут зеленным?
4. Как можно добавить меню в библиотеку? Тоесть после добавление dll через реестр в игру, в игре в углу появиться маленькое меню и функции можно будет активировать не кнопками Num, а кликом мышки или лучше просто сделать управление в меня стрелочками на клавиатуре...

Я знаю многие вопросы нубские, просто знаний в этой области почти нет, а сделать эту библиотеку мне очень надо.. Очень надеюсь на вашу помощь..

У меня есть еще пара вопросов, но их задавать уже не стану, так как они очень сложные и вряд ли мне кто нибудь согласиться помочь..
D1kiy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Microsoft Visual Studio 9 и Qt Николай Палыч Visual C++ 14 02.04.2011 10:48
Microsoft Visual Studio.NET Hom2 Софт 8 12.12.2010 10:23
Visual J# from Microsoft Visual Studio .NET Flash_ Общие вопросы по Java, Java SE, Kotlin 2 28.12.2006 10:16