Разобрался уже. Оказалось что если строки равны, strcmp вернет NULL:monkey:strcmp
Разобрался уже. Оказалось что если строки равны, strcmp вернет NULL:monkey:strcmp
Оказалось или это в документации написано?Разобрался уже. Оказалось что если строки равны, strcmp вернет NULL:monkey:
void *pNeck; /* 1164 - void* pNeck
(pChest?)
- 4 unknown
- float height
- float front/back
- float left/right
- void* pObject
(same struct for the following body-part-pointers [except pLeft/RightArm])
*/
void *pHead; /* 1168 */
void *pLeftArm; /* 1172 */
void *pRightArm; /* 1176 */
void *pLeftLowArm; /* 1180 */
void *pRightLowArm; /* 1184 */
void *pLeftLeg; /* 1188 */
void *pRightLeg; /* 1192 */
void *pLeftLowLeg; /* 1196 */
void *pRightLowLeg; /* 1200 */
void *pRightMidLeg; /* 1204 */
void *pLeftMidLeg; /* 1208 */
void *pLeftMidArm; /* 1212 */
void *pRightMidArm; /* 1216 */
void *pLeftShoulder; /* 1220 */
void *pRightShoulder; /* 1224 */
void *pChest; /* 1228 */
void *pMouth; /* 1232 */
struct stBodyPart
{
BYTE bIgnore[0x10];
CObject* pObject;
};
Скорей всего нет, там другая структура для костей:то через pObject можно будет получить инфу о конкретных частях тела игрока, хранящуюся в полях структур CPhysical, CEntity, CPlaceable (т.к. наследование), включая позицию костей, без использования функи? И какая это будет позиция, настоящия, или это какие-то дефолтные оффсеты, необходимые для построения модели? Или я вообще не правильно это понял? Поясните крч плз
А что ты с ним собрался делать то?как задать путь до файла, который не имеет расширения?
получается так, что он принимает файл без расширения за папку.
strcat_s(path, "\\тут какой то путь\\файл");
решил данную проблему путём копирования файла и изменения его названия.
не знаю насколько это хорошо, мб кто то подскажет.
pD3DHook->pRender->DrawLine(v[0], v[1], 0xffff0000);
pD3DHook->pRender->DrawLine(xy[0], xy[1], 0xff00ff00);
bool CD3DRender::DrawLine(const D3DXVECTOR3 &a, const D3DXVECTOR3 &b, DWORD dwColor)
{
if (FAILED(CD3DBaseRender::BeginRender()))
return false;
////////////////////////////////////////////////////
// Make sure we have a valid vertex buffer.
if (m_pD3Dbuf == NULL)
{
return false;
}
m_pD3Ddev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG2);
m_pD3Ddev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2);
//m_pD3Ddev->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
//m_pD3Ddev->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );
m_pD3Ddev->SetRenderState(D3DRS_CLIPPING, false);
m_pD3Ddev->SetRenderState(D3DRS_ZENABLE, false);
//m_pD3Ddev->SetRenderState ( D3DRS_LIGHTING, false );
D3DLVERTEX lineList[2];
//////////////////////////////////////////////////
// Lock the vertex buffer and copy in the verts.
m_pD3Dbuf->Lock(0, 0, (void **)&lineList, D3DLOCK_DISCARD | D3DLOCK_NOSYSLOCK); // flogs: D3DLOCK_NOSYSLOCK, D3DLOCK_DISCARD
{
lineList[0].x = a.x;
lineList[0].y = a.y;
lineList[0].z = a.z;
lineList[0].color = dwColor;
lineList[0].specular = dwColor;
lineList[1].x = b.x;
lineList[1].y = b.y;
lineList[1].z = b.z;
lineList[1].color = dwColor;
lineList[1].specular = dwColor;
}
m_pD3Dbuf->Unlock();
// store FVF to restore original at the end of this function
DWORD fvf;
m_pD3Ddev->GetFVF(&fvf);
m_pD3Ddev->SetFVF(D3DFVF_LVERTEX);
//m_pD3Ddev->SetFVF( D3DFVF_PRIMITIVES );
////////////////////////////////////////////////////
// Draw!
p1c->addMessageToChat(0xFFe1e1e1, "1) %.1f %.1f %.1f %.1f | %x", a.x, a.y, b.x, b.y, dwColor);
p1c->addMessageToChat(0xFFc1c1c1, "2) %.1f %.1f %.1f %.1f | %x", lineList[0].x, lineList[0].y, lineList[1].x, lineList[1].y, dwColor);
m_pD3Ddev->DrawPrimitiveUP(D3DPT_LINESTRIP, 1, lineList, sizeof(lineList) / 2);
// reset states
m_pD3Ddev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);
m_pD3Ddev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
m_pD3Ddev->SetRenderState(D3DRS_ZENABLE, true);
m_pD3Ddev->SetRenderState(D3DRS_CLIPPING, true);
// restore FVF
m_pD3Ddev->SetFVF(fvf);
CD3DBaseRender::EndRender();
return true;
}
Была такая проблема. Пизди линии из antTweakBarХук DirectX, работают все функи, коме DrawLine. Спиздил ее отсюда: https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/d3drender.cpp
Вот вызовы:где v[2] и xy[2] имеют тип D3DXVECTOR3C++:pD3DHook->pRender->DrawLine(v[0], v[1], 0xffff0000); pD3DHook->pRender->DrawLine(xy[0], xy[1], 0xff00ff00);
v заполнил вручную (1.0;1.0 ... 500.0, 500.0)
xy содержит 2д координаты (мои и таргета)
В результате должно быть две линии - красная(диагональ с левого верхнего угла экрана) и зеленая - от меня до цели.
Но нихуя. Рисует непонятно что (квадраты мои, на них внимание не обращайте):
Если целюсь в педа с другой стороны - рисует вообще в другом месте:
Если стать по другому. То ее вообще не видно будет.
Прямо внутри функи CD3DRender:: DrawLine сделал вывод координат в чат, так же отрендерил доп. инфу (слева). Числа правильные. Почему зеленая линия рисуется вообще не там, где мне нужно, а красной вообще нет?
Вот функция из соба(из сурса, ссылка на который в начале сообщения), в ней абсолютно ничего не менял, только добавил вывод в чат
C++:bool CD3DRender::DrawLine(const D3DXVECTOR3 &a, const D3DXVECTOR3 &b, DWORD dwColor) { if (FAILED(CD3DBaseRender::BeginRender())) return false; //////////////////////////////////////////////////// // Make sure we have a valid vertex buffer. if (m_pD3Dbuf == NULL) { return false; } m_pD3Ddev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG2); m_pD3Ddev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG2); //m_pD3Ddev->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE ); //m_pD3Ddev->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE ); m_pD3Ddev->SetRenderState(D3DRS_CLIPPING, false); m_pD3Ddev->SetRenderState(D3DRS_ZENABLE, false); //m_pD3Ddev->SetRenderState ( D3DRS_LIGHTING, false ); D3DLVERTEX lineList[2]; ////////////////////////////////////////////////// // Lock the vertex buffer and copy in the verts. m_pD3Dbuf->Lock(0, 0, (void **)&lineList, D3DLOCK_DISCARD | D3DLOCK_NOSYSLOCK); // flogs: D3DLOCK_NOSYSLOCK, D3DLOCK_DISCARD { lineList[0].x = a.x; lineList[0].y = a.y; lineList[0].z = a.z; lineList[0].color = dwColor; lineList[0].specular = dwColor; lineList[1].x = b.x; lineList[1].y = b.y; lineList[1].z = b.z; lineList[1].color = dwColor; lineList[1].specular = dwColor; } m_pD3Dbuf->Unlock(); // store FVF to restore original at the end of this function DWORD fvf; m_pD3Ddev->GetFVF(&fvf); m_pD3Ddev->SetFVF(D3DFVF_LVERTEX); //m_pD3Ddev->SetFVF( D3DFVF_PRIMITIVES ); //////////////////////////////////////////////////// // Draw! p1c->addMessageToChat(0xFFe1e1e1, "1) %.1f %.1f %.1f %.1f | %x", a.x, a.y, b.x, b.y, dwColor); p1c->addMessageToChat(0xFFc1c1c1, "2) %.1f %.1f %.1f %.1f | %x", lineList[0].x, lineList[0].y, lineList[1].x, lineList[1].y, dwColor); m_pD3Ddev->DrawPrimitiveUP(D3DPT_LINESTRIP, 1, lineList, sizeof(lineList) / 2); // reset states m_pD3Ddev->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE); m_pD3Ddev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); m_pD3Ddev->SetRenderState(D3DRS_ZENABLE, true); m_pD3Ddev->SetRenderState(D3DRS_CLIPPING, true); // restore FVF m_pD3Ddev->SetFVF(fvf); CD3DBaseRender::EndRender(); return true; }
cerf)@Picador так это же функция рендера линии в мире. она принимает 3д координаты.
Может есть инфа минимальная хотя бы, VAC как-то будет палить, если я сделаю ReadProcessMemory с левого .exe? Ну просто с проверкой на наличие инжекнутых .dll библиотек я согласен, справедливо, VAC это изи палит. А что, если просто прочитать (!не записывать) что-либо через ReadProcessMemory, это вообще может палиться? Хотя бы в теории, оставит ли след где-то в игре сам факт того, что я просто прочитал значение? Просто я плохо шарю в том, как это все устроено и мне кажется, что в прочтении значения по опред. адресу не должно быть ничего серьезного, это вроде как просто в щелочку посмотреть :D Или всё-таки где-то эта операция будет оставлять след? Там регистры какие-нибудь, еще че, я хз(external) читы
Т.е. про наличие этого драйвера в кс го точно сказать не можешь?я особо не вдавался в работу VAC. отследить вызов ReadProcessMemory можно только с помощью драйвера.
В какую сторону гуглить?кроме ReadProcessMemory есть и другие способы прочитать память процесса, они сложнее.
Ну я подозревал, что это всетаки возможно. Это ж комп, тут, в теории возможно сделать что угодно, но для меня это рил слишком сложно будет. А вот про то, как прочитать значения безпалева, кроме ReadProcessMemory, я бы почитал. Что искать?есть и возможность скрытно загрузить dll в процесс и скрыть её вообще от всего, только это тоже сложно и сам процесс скрытия может детектироваться.
Но она же глобальная. Зачем передавать ссылку на неё?Вот есть у меня функция и есть глобальная переменная. Как мне передать в эту функцию переменную, чтобы саму эту переменную функция могла изменить (не переданную, а глобальную)? Указатель не помогает
не могу.Т.е. про наличие этого драйвера в кс го точно сказать не можешь?
в сторону обходов обнаружения вызовов Read/WriteProcessMemory.В какую сторону гуглить?