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

imring

Ride the Lightning
Всефорумный модератор
2,363
2,566
попробуй сначала получить CPhysical и читать его.
 

Some_Clever_Name

Новичок
13
0
Ваш вопрос:

Как можно получить скорость персонажа / машины?

Покапавшись в исходниках собейтов и прочего, нашёл такие адреса:

int[] point = new int[] {0x44};

int CVehiclePointer = mem.ReadMultiLevelPointer(0xBA18FC, 4, point); // получаем CVehicle

while (true){
System.Threading.Thread.Sleep(500);
float speed = mem.ReadFloat(CVehiclePointer+0x44); // прибавляем к нему 0x44
Console.WriteLine(speed);
}

Почему-то speed = 0. Почему?

В чем проблема?

P.S Пишу на Шарпе
 

Dark_Knight

Me, me and me.
Друг
4,080
2,112
Указатель в инте в шарпе хранится? ЛОЛ. Ты хоть поставил бы проверку, что поинтер существует.
 

Some_Clever_Name

Новичок
13
0
Указатель в инте в шарпе хранится? ЛОЛ. Ты хоть поставил бы проверку, что поинтер существует.

Просто.. Я ещё только начинаю во все это лезть. Можно ли как-то вообще вытащить по-другому скорость машины?
 

Some_Clever_Name

Новичок
13
0
Вообще скорость хранится там в CVector и по значения X, Y, Z надо считать скорость уже.

Хм.. Интересно. Просто недавно наткнулся на пост (размещённый тут же). Цитата -

"
Че сложного в спидхаке?
0xBA18FC // Vehicle CPED Pointer
0x44 // Vehicle Speed X
0x48 // Vehicle Speed Y

Читаешь значение из Vehicle CPED Pointer.
И это значение плюс Vehicle Speed X/Y - будет скорость т/c.
Плюсуешь к ним сколько-то или умножаешь.
И все это в цикле.
"

Вот и думаю, что типа " 0xBA18FC+0x44 " - должно выдавать скорость или что-то типа того по X'у. Тож самое, но с 0x48 - по Y'у Не?
 

memir

🇷🇺
Всефорумный модератор
342
615
Хм.. Интересно. Просто недавно наткнулся на пост (размещённый тут же). Цитата -

"
Че сложного в спидхаке?
0xBA18FC // Vehicle CPED Pointer
0x44 // Vehicle Speed X
0x48 // Vehicle Speed Y

Читаешь значение из Vehicle CPED Pointer.
И это значение плюс Vehicle Speed X/Y - будет скорость т/c.
Плюсуешь к ним сколько-то или умножаешь.
И все это в цикле.
"

Вот и думаю, что типа " 0xBA18FC+0x44 " - должно выдавать скорость или что-то типа того по X'у. Тож самое, но с 0x48 - по Y'у Не?
Читать надо именно по указателю. Берёшь значение, которое хранится в 0xBA18FC, и к нему прибавляешь 0x48.
И вообще, проще обращатся к полям через сишные структуры
C:
struct stVehicle
{
    unsigned char _bPad[0x44];
    float fSpeed[3]; // AKA CVector
};
/// -------------
stVehicle *pSelfVehicle = (*((stVehicle **)0xBA18FC))
 

Some_Clever_Name

Новичок
13
0
Читать надо именно по указателю. Берёшь значение, которое хранится в 0xBA18FC, и к нему прибавляешь 0x48.
И вообще, проще обращатся к полям через сишные структуры
C:
struct stVehicle
{
    unsigned char _bPad[0x44];
    float fSpeed[3]; // AKA CVector
};
/// -------------
stVehicle *pSelfVehicle = (*((stVehicle **)0xBA18FC))

Вроде сделал все по феншую, но значения такие:

Если ехать вперёд - то значение может увеличиваться, если развернуться - значение будет уходить в -, если влево - 0.00 с чем-то, если вправо - то -0.00 с чем-то. В чем может быть подвох?
 

ALF

Известный
Проверенный
320
545
Я спиздил отсюда (BlastHackNet/mod_s0beit_sa(https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src)) структуры чтобы получить IP сервера, но при попытке его отобразить (g_SAMP->szIP) игра тупо зависает. Шо делать?
ну эт, как его... чтоб получить какой то фидбэк, надо показать как ты делаешь
 

ЯedЯuM

Malware Maker
242
303
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Вроде сделал все по феншую, но значения такие:

Если ехать вперёд - то значение может увеличиваться, если развернуться - значение будет уходить в -, если влево - 0.00 с чем-то, если вправо - то -0.00 с чем-то. В чем может быть подвох?
это вектор в 3д пространстве к твоей будущей позиции, а не совсем просто скорость как ты думаешь
 

CleanLegend

Известный
Всефорумный модератор
495
948
C++:
#define SAMP_INFO_OFFSET    0x21A0F8

struct stSAMP
{
    void                    *pUnk0;
    struct stServerInfo            *pServerInfo;
    uint8_t                    byteSpace[24];
    char                    szIP[257];
    char                    szHostname[259];
    bool                    bNametagStatus; // changes by /nametagstatus
    uint32_t                ulPort;
    uint32_t                ulMapIcons[100];
    int                        iLanMode;
    int                        iGameState;
    uint32_t                ulConnectTick;
    struct stServerPresets    *pSettings;
    void                    *pRakClientInterface;
    struct stSAMPPools        *pPools;
};

stSAMP *g_SAMP = nullptr;

struct stServerInfo {
    uint32_t             uiIP;
    uint16_t             usPort;
};

template<typename T>
T GetSAMPPtrInfo(uint32_t offset)
{
    if (g_dwSAMP_Addr == NULL)
        return NULL;
    return *(T *)(g_dwSAMP_Addr + offset);
}

struct stSAMP *stGetSampInfo(void)
{
    return GetSAMPPtrInfo<stSAMP *>(SAMP_INFO_OFFSET);
}

extern struct stSAMP   *g_SAMP;

При попытке вывести куда нибудь g_SAMP->szIP, g_SAMP->szHostname, g_SAMP->ulPort игру фризит.
Покажи как инициализацию проводишь