Другое С/С++ Вопрос - Ответ

p1cador

cerf
Проверенный
220
359
Ковырял свой .asi, смотрел сурсы соба и сф сдк, нашел в actor_info такую штукенцию:
C++:
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 */

Указатели на некоторыечасти тела. Если создать соотв. стр-ру
C++:
struct stBodyPart
{
    BYTE bIgnore[0x10];
    CObject* pObject;
};
то через pObject можно будет получить инфу о конкретных частях тела игрока, хранящуюся в полях структур CPhysical, CEntity, CPlaceable (т.к. наследование), включая позицию костей, без использования функи? И какая это будет позиция, настоящия, или это какие-то дефолтные оффсеты, необходимые для построения модели? Или я вообще не правильно это понял? Поясните крч плз
 
  • Нравится
Реакции: RanGoo

NarutoUA

NarutoUA
BH Team
692
1,537
то через pObject можно будет получить инфу о конкретных частях тела игрока, хранящуюся в полях структур CPhysical, CEntity, CPlaceable (т.к. наследование), включая позицию костей, без использования функи? И какая это будет позиция, настоящия, или это какие-то дефолтные оффсеты, необходимые для построения модели? Или я вообще не правильно это понял? Поясните крч плз
Скорей всего нет, там другая структура для костей:
#pragma pack(push, 4)
class PLUGIN_API AnimBlendFrameData
{
public:
unsigned __int8 m_nFlags;
CVector m_vOffset;
class IFrame *m_pIFrame;
unsigned __int32 m_dwNodeId;
};
#pragma pack(pop)

Лучше не выебыватся и юзать функу (ну я думаю функа считает позицию игрока в мире + оффсет для кости, так что в теории ты можешь считать вручную)
 
  • Нравится
Реакции: RanGoo и p1cador

Skadi

Новичок
43
12
как задать путь до файла, который не имеет расширения?
получается так, что он принимает файл без расширения за папку.
strcat_s(path, "\\тут какой то путь\\файл");


решил данную проблему путём копирования файла и изменения его названия.
не знаю насколько это хорошо, мб кто то подскажет.
 
Последнее редактирование:
  • Нравится
Реакции: RanGoo

Woofing Giraffe

Активный
402
49
как задать путь до файла, который не имеет расширения?
получается так, что он принимает файл без расширения за папку.
strcat_s(path, "\\тут какой то путь\\файл");


решил данную проблему путём копирования файла и изменения его названия.
не знаю насколько это хорошо, мб кто то подскажет.
А что ты с ним собрался делать то?
 
  • Нравится
Реакции: RanGoo

p1cador

cerf
Проверенный
220
359
Хук DirectX, работают все функи, коме DrawLine. Спиздил ее отсюда: https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/d3drender.cpp

Вот вызовы:
C++:
pD3DHook->pRender->DrawLine(v[0], v[1], 0xffff0000);
pD3DHook->pRender->DrawLine(xy[0], xy[1], 0xff00ff00);
где v[2] и xy[2] имеют тип D3DXVECTOR3
v
заполнил вручную (1.0;1.0 ... 500.0, 500.0)
xy содержит 2д координаты (мои и таргета)
В результате должно быть две линии - красная(диагональ с левого верхнего угла экрана) и зеленая - от меня до цели.
Но нихуя. Рисует непонятно что (квадраты мои, на них внимание не обращайте):
Screenshot_4.png
Если целюсь в педа с другой стороны - рисует вообще в другом месте:
Screenshot_5.png
Если стать по другому. То ее вообще не видно будет.
Прямо внутри функи 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;
}
 
Последнее редактирование:
  • Нравится
Реакции: RanGoo

SR_team

like pancake
BH Team
4,719
6,362
Хук DirectX, работают все функи, коме DrawLine. Спиздил ее отсюда: https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/d3drender.cpp

Вот вызовы:
C++:
pD3DHook->pRender->DrawLine(v[0], v[1], 0xffff0000);
pD3DHook->pRender->DrawLine(xy[0], xy[1], 0xff00ff00);
где v[2] и xy[2] имеют тип D3DXVECTOR3
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;
}
Была такая проблема. Пизди линии из antTweakBar
 
  • Нравится
Реакции: RanGoo и p1cador

p1cador

cerf
Проверенный
220
359
@Picador так это же функция рендера линии в мире. она принимает 3д координаты.
cerf)
я еще думал, нахера там z
ну щас точно все на свои места стало) спс

Может есть инфа минимальная хотя бы, VAC как-то будет палить, если я сделаю ReadProcessMemory с левого .exe? Ну просто с проверкой на наличие инжекнутых .dll библиотек я согласен, справедливо, VAC это изи палит. А что, если просто прочитать (!не записывать) что-либо через ReadProcessMemory, это вообще может палиться? Хотя бы в теории, оставит ли след где-то в игре сам факт того, что я просто прочитал значение? Просто я плохо шарю в том, как это все устроено и мне кажется, что в прочтении значения по опред. адресу не должно быть ничего серьезного, это вроде как просто в щелочку посмотреть :D Или всё-таки где-то эта операция будет оставлять след? Там регистры какие-нибудь, еще че, я хз
А то у меня в бошке все как-то слишком изи получается, прочитал координаты игроков через стороннее приложение->отрендерил через него же поверх всех окон = изи вх. Или просто приаттачить к бандикаму там, или еще куда, что поверх всех окон висит и с ваком дружит. Но подозреваю, что я далеко не первый такой умник.
 
Последнее редактирование:
  • Нравится
Реакции: RanGoo

FYP

Известный
Администратор
1,758
5,719
@Picador я особо не вдавался в работу VAC. отследить вызов ReadProcessMemory можно только с помощью драйвера. в MTA, например, он есть. кроме ReadProcessMemory есть и другие способы прочитать память процесса, они сложнее. есть и возможность скрытно загрузить dll в процесс и скрыть её вообще от всего, только это тоже сложно и сам процесс скрытия может детектироваться.
 
  • Нравится
Реакции: RanGoo и p1cador

p1cador

cerf
Проверенный
220
359
я особо не вдавался в работу VAC. отследить вызов ReadProcessMemory можно только с помощью драйвера.
Т.е. про наличие этого драйвера в кс го точно сказать не можешь?

кроме ReadProcessMemory есть и другие способы прочитать память процесса, они сложнее.
В какую сторону гуглить?

есть и возможность скрытно загрузить dll в процесс и скрыть её вообще от всего, только это тоже сложно и сам процесс скрытия может детектироваться.
Ну я подозревал, что это всетаки возможно. Это ж комп, тут, в теории возможно сделать что угодно, но для меня это рил слишком сложно будет. А вот про то, как прочитать значения безпалева, кроме ReadProcessMemory, я бы почитал. Что искать?
П.С. спс за помощь, от души, хз где еще мне в этом помогут на таком уровне
 
  • Нравится
Реакции: RanGoo

Woofing Giraffe

Активный
402
49
Вот есть у меня функция и есть глобальная переменная. Как мне передать в эту функцию переменную, чтобы саму эту переменную функция могла изменить (не переданную, а глобальную)? Указатель не помогает
 
  • Нравится
Реакции: RanGoo

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,448
Вот есть у меня функция и есть глобальная переменная. Как мне передать в эту функцию переменную, чтобы саму эту переменную функция могла изменить (не переданную, а глобальную)? Указатель не помогает
Но она же глобальная. Зачем передавать ссылку на неё?
 
  • Нравится
Реакции: RanGoo

FYP

Известный
Администратор
1,758
5,719
  • Нравится
Реакции: RanGoo и p1cador