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

[Counter Strike Source] и поддержка DirectX


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

Примерная реализация DirectX в dll такая :

  Показать контент

функция GiveMeLineStandart :

  Показать контент

функция FindClientModule :

  Показать контент

функция World_To_Screen :

  Показать контент

и глобальные переменные :

DWORD client_dll;
D3DXVECTOR2 treangle[2];//для рисования
D3DCOLOR cool = D3DCOLOR_ARGB(255, 255, 0, 0);
ID3DXLine *line;
const DWORD player_onl_coordX = 0x1a0;
const DWORD player_onl_coordY = 0x1a4;
const DWORD player_onl_coordZ = 0x1a8;

кто знает , примерно, почему ничего не рисует на экране ?

я предполагаю , что не так нашел видовую матрицу или vievport,  ещё возможно ошибка в функции World_To_Screen:

 

D3DXMATRIX v_m;
dev->GetTransform(D3DTS_VIEW, &v_m);//view_matrix - видовая матрица
D3DVIEWPORT9 viewport;
dev->GetViewport(&viewport);//для размеров окна игры 

// еще возможно  client_dll не так нашел (где-нибудь ошибка)

MODULEINFO moduleinfo = { 0 };
HMODULE hModule = GetModuleHandle("client.dll");
GetModuleInformation(GetCurrentProcess(), hModule, &moduleinfo, sizeof(MODULEINFO));
client_dll = (DWORD)moduleinfo.lpBaseOfDll;

dll находится в процессе игры(inject through СЕ)!

 

 

 

Благодарю за ответы 

// Заголовок поправил, на первый раз без предупреждений. Garik66 1. Нарушения правила оформления заголовка тем. Общие правила форума Пункт 1.3 

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

  В 16.07.2017 в 16:00, uhx сказал:

По моему это так не работает. Лучше сам найди матрицу.

Показать  

Если я начал , то попробую уже через DirectX доделать, самому интересно как сделать правильно через DirectX

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

  В 16.07.2017 в 16:03, IzerodayI сказал:

Если я начал , то попробую уже через DirectX доделать, самому интересно как сделать правильно через DirectX

Показать  

Флаг тебе в руки. Но ты хотя бы пробовал посмотреть, что тебе выдает GetTransform на выходе?

 

Я не знаю почему так, не знаток DX и все такое, но через GetTransform ты не достанешь видовую матрицу. Ты думаешь всем по приколу мучаться и искать оффсет на нее? Типа все так делают, потому что оффсеты - это круто?)

Через DX можно разве что при помощи GetVertexShaderConstantF достать ее, но там тоже придется танцы с бубном устраивать, поэтому какого-то уникального решения нет, потому что в каждой игре по своему хранится эта видовая матрица, и приходится постоянно ее выискивать.

Тут пару дней назад до тебя тоже человечек один писал по этому поводу, тык. Дело в том, что GetTransform возвращает единичные матрицы, а при помощи них ты никаких преобразований не получишь)

Сам только что проверил в CS:GO. Слева GetTransform, справа - через оффсет. 

Wg2OtEF.png

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

  В 16.07.2017 в 16:06, uhx сказал:

какого-то уникального решения нет,

Показать  

А я думал , что этот способ универсален...

Что-то типа правил или этикета всех программистов пишущих игры делать матрицу в одном месте для удобства(другим людям):D 

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

  В 16.07.2017 в 16:06, uhx сказал:

через оффсет

Показать  

не подскажешь как получить (оптимально)оффсет матрицы через dll,

если через exe Кенг делал так :

  Показать контент

один из параметров это 64 байта , и это разумное решение , но в dll я не могу пользоваться ReadProcessMemory , 

и как это лучше провернуть. Должна же быть какая-нибудь функция вытаскивающая сразу все оффсеты (через dll)?

 

Просто я координаты тоже криво нахожу:

  Показать контент

 

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

  В 16.07.2017 в 17:41, IzerodayI сказал:

но в dll я не могу пользоваться ReadProcessMemory

Показать  

Структура из 16 значений

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

  В 16.07.2017 в 16:06, uhx сказал:

что тебе выдает GetTransform на выходе?

Показать  

как ты её отобразил через DirectX?

мне интересно все проверить самому(насчет других параметров).

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

Я тоже долго мучался с поиском матрицы через D3D, но uhx подсказал, что лучше ручками найти. Так и сделал, теперь всё нормально рисуется. Спасибо ему ;) Так что лучше не трать время на это, и найди сам матрицу.

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

  В 16.07.2017 в 17:41, IzerodayI сказал:

но в dll я не могу пользоваться ReadProcessMemory

Показать  

А зачем тебе ReadProcessMemory, если ты уже в процессе игры?

  В 16.07.2017 в 17:45, IzerodayI сказал:

как ты её отобразил через DirectX?

 

Показать  

Взял и нарисовал все значения на экране.

ID3DXFont->DrawTextA

 

  В 16.07.2017 в 17:30, IzerodayI сказал:

типа правил или этикета всех программистов пишущих игры делать матрицу в одном месте для удобства(другим людям)

Показать  

Нет, такого нет. У разработчиков и так все исходники перед лицом, они легко могут эту матрицу использовать, какая им разница в каком месте она лежит.

 

Вообще, тебе следовало бы взяться сначала за что-то одно: либо асм (реверс), либо цпп.

Судя по твоим вопросам ты ни там ни там не разбираешься, а учить тебя всем особенностям C++ вряд ли кто то захочет - информации и без того полно.

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

  В 17.07.2017 в 09:45, uhx сказал:

Взял и нарисовал все значения на экране

Показать  

как ты туда массив значений поместил ? там же второе значение у функции LPCTSTR

  В 17.07.2017 в 09:45, uhx сказал:

либо асм (реверс), либо цпп.

Показать  

можно по подробней?

 

PS

я примерно нашел видовую матрицу , но там только 15 значений изменяющихся от -0.99 до 0.99 (в ксс в34 максимум 89 градусов наклон)

почему 15 , потому что одно из них Double 

screen:

[img= https://cloud.mail.ru/public/GNMC/3jz33yKb5]

 

 

это и есть видовая матрица или я нашел не то?

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

Вот как она примерно выглядит:

GCziOaK.png

Она должна при прямых углах отображать твои координаты камеры, поэтому X и Y позиции должны быть видны в ней.

Как у меня: -113 в матрице и 113 в позиции. 159.38 в матрице и -159.38 ну и тд...

+ у нее статический адрес, но она слетает обычно после апдейтов. Практически всегда.

То, что у тебя - это похоже не то. Я сейчас буквально за 15 минут нашел матрицу + сигнатуру под нее, а то надоело что после апдейтов слетает.

Могу какой-то гайдец запилить, хотя об этом уже столько сказано было... шо капец

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

  В 17.07.2017 в 12:27, uhx сказал:

Могу какой-то гайдец запилить,

Показать  

Я был бы не против =)

 

PS ты её просто отсеивал от -1 до 1 и получил матрицу сразу в таком виде? то есть не так (допустим пример)[img=https://cloud.mail.ru/public/HACe/x1EjsZNnd] в буквенных непонятных значений, а сразу в цифрах?

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

  В 17.07.2017 в 12:57, IzerodayI сказал:

то есть не так (допустим пример)

Показать  

Хоспадее, да переключи ты режим отображения на Float. ПКМ -> Display Type -> Float. Ну или просто Ctrl + 9

  В 17.07.2017 в 12:57, IzerodayI сказал:

ты её просто отсеивал от -1 до 1 и получил матрицу сразу в таком виде

Показать  

Да, просто экраном вверх-вниз. Я искал значение между 0.9 и 1.1. Потом поднимал экран вверх и искал между -1.1 и -0.9, потому что там угол ~89 максимальный, проще промежуток искать, все равно левак отпадет на 2-3 скане.

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

  В 17.07.2017 в 13:02, uhx сказал:

Да, просто экраном вверх-вниз. Я искал значение между 0.9 и 1.1. Потом поднимал экран вверх и искал между -1.1 и -0.9, потому что там угол ~89 максимальный, проще промежуток искать, все равно левак отпадет на 2-3 скане.

Показать  

это она? , тут 16 уже =)

[img= https://cloud.mail.ru/public/3SiE/Yso3dmHte]

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

  В 17.07.2017 в 13:29, IzerodayI сказал:

это она? , тут 16 уже =)

[img= https://cloud.mail.ru/public/3SiE/Yso3dmHte]

Показать  

Просто посмотри какой-нибудь урок по нахождению видовой матрицы. Почему ты по столбцу только считаешь их? Как бы значения идут слева-направо.

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


setang 89 49


Ищешь 0.75 

 

Отсеиваешь

 

setang 0.0 5.0


Ищешь 0.08

 

Последний адрес в пространстве engine.dll будет видовой матрицей.

Чтобы каждое обновление не искать, делаешь сигнатуру и по ней получаешь адрес матрицы.

Изменено пользователем partoftheworlD
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

  В 17.07.2017 в 13:48, uhx сказал:

Но ведь он в client.dll :o

Показать  

Нет, это в csgo в client.dll, в css, l4d2, portal (на счет portal 2 не уверен) и прочих играх со старым движком в engine.dll

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

  В 17.07.2017 в 13:32, uhx сказал:

Как бы значения идут слева-направо.

Показать  

похоже ? [img= https://cloud.mail.ru/public/JnVD/a8BZyZdDw ]

 

её находил пока , без совета partoftheworlD

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

  В 17.07.2017 в 13:51, IzerodayI сказал:
Показать  

скорее всего она и есть, но смысла спрашивать "похоже" нет, когда будешь использовать узнаешь то нашел или нет.
если сделал так, как я написал выше, то значит нашел именно её.

 

и статейка
http://www.codinglabs.net/article_world_view_projection_matrix.aspx

Изменено пользователем partoftheworlD
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

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

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

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