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

loganhackerdff

Известный
868
519
кроче хук 36 rpc create 3d text выводит в чат херню всякую
1631288399055.png
 

sc6ut

неизвестный
Модератор
382
1,089
кроче хук 36 rpc create 3d text выводит в чат херню всякую
Посмотреть вложение 113869
кусок кода который ты показал просто прелестен, идеален. но может всё же покажешь как хукаешь, какая версия самп, ну или на крайний случай дашь хоть какуе-то информацию, кроме того как ты читаешь непонятно еще правильный ли битстрим.
 

loganhackerdff

Известный
868
519
кусок кода который ты показал просто прелестен, идеален. но может всё же покажешь как хукаешь, какая версия самп, ну или на крайний случай дашь хоть какуе-то информацию, кроме того как ты читаешь непонятно еще правильный ли битстрим.
всё кароче,надо было bool на char заменить
 
У

Удалённый пользователь 448549

Гость
Помогите пожалуйста, нема курсора когда активна менюшка
213:
if (SF->getGame()->isKeyPressed(VK_HOME)) {
    renderW = !renderW;
    SF->getSAMP()->getMisc()->ToggleCursor(renderW);
}
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
Помогите пожалуйста, нема курсора когда активна менюшка
213:
if (SF->getGame()->isKeyPressed(VK_HOME)) {
    renderW = !renderW;
    SF->getSAMP()->getMisc()->ToggleCursor(renderW);
}
попробуй

C++:
if (SF->getGame()->isKeyPressed(VK_HOME)) {
    renderW = !renderW;
    SF->getSAMP()->getMisc()->ToggleCursor(renderW ? 2 : 0); // renderW << 1
}
 

vbg

Известный
41
17
Привет, хотел перевести на плюсы вот эту запись.
memory lua:
mem.setint8(0x969152, 1, false)

На с++ получилось что такое:
функция для записи в память:
template <typename T>
void writeMem(DWORD address, T value)
{
    DWORD oldProtect = 0;
    VirtualProtectEx(GetCurrentProcess(), (void*)address, sizeof(value), PAGE_EXECUTE_READWRITE, &oldProtect);
    WriteProcessMemory(GetCurrentProcess(), (void*)address, &value, sizeof(value), 0);
    VirtualProtectEx(GetCurrentProcess(), (void*)address, sizeof(value), oldProtect, NULL);
}

дальше вызываю в коде:
вызов функции в коде:
unsigned char driveOnWater = 1;
writeMem<unsigned char>(0x969152, driveOnWater);

Ну и не работает кароче. Изменяю память в цикле.
 

bottom_text

Известный
673
320
Привет, хотел перевести на плюсы вот эту запись.
memory lua:
mem.setint8(0x969152, 1, false)

На с++ получилось что такое:
функция для записи в память:
template <typename T>
void writeMem(DWORD address, T value)
{
    DWORD oldProtect = 0;
    VirtualProtectEx(GetCurrentProcess(), (void*)address, sizeof(value), PAGE_EXECUTE_READWRITE, &oldProtect);
    WriteProcessMemory(GetCurrentProcess(), (void*)address, &value, sizeof(value), 0);
    VirtualProtectEx(GetCurrentProcess(), (void*)address, sizeof(value), oldProtect, NULL);
}

дальше вызываю в коде:
вызов функции в коде:
unsigned char driveOnWater = 1;
writeMem<unsigned char>(0x969152, driveOnWater);

Ну и не работает кароче. Изменяю память в цикле.
unsigned char driveOnWater = 1;
*reinterpret_cast<unsigned char*>(0x969152) = driveOnWater;
попробуй
 

#Northn

Pears Project — уже запущен!
Всефорумный модератор
2,654
2,535
Привет, хотел перевести на плюсы вот эту запись.
memory lua:
mem.setint8(0x969152, 1, false)

На с++ получилось что такое:
функция для записи в память:
template <typename T>
void writeMem(DWORD address, T value)
{
    DWORD oldProtect = 0;
    VirtualProtectEx(GetCurrentProcess(), (void*)address, sizeof(value), PAGE_EXECUTE_READWRITE, &oldProtect);
    WriteProcessMemory(GetCurrentProcess(), (void*)address, &value, sizeof(value), 0);
    VirtualProtectEx(GetCurrentProcess(), (void*)address, sizeof(value), oldProtect, NULL);
}

дальше вызываю в коде:
вызов функции в коде:
unsigned char driveOnWater = 1;
writeMem<unsigned char>(0x969152, driveOnWater);

Ну и не работает кароче. Изменяю память в цикле.
mem.setint8(0x969152, 1, false)
последний аргумент -- false, соответственно протекцию снимать не нужно.
Значит, тебе достаточно просто использовать это:
C++:
*reinterpret_cast<uint8_t*>(0x969152) = 1;
А так, если ты хочешь повторить код как на луа:
C++:
template<typename T>
void writeMem(uintptr_t address, T value, bool unprotect = false)
{
    DWORD old_protection;
    auto address_ = reinterpret_cast<void*>(address);
    if (unprotect)
        VirtualProtect(address_, sizeof(value), PAGE_EXECUTE_READWRITE, &old_protection);
    memcpy(&value, address_, sizeof(value));
    if (unprotect)
        VirtualProtect(address_, sizeof(value), old_protection, &old_protection);
}
 
Последнее редактирование:
  • Нравится
Реакции: vbg, LaRossa и legendabrn

Musaigen

abobusnik
Проверенный
1,607
1,365
последний аргумент -- false, соответственно протекцию снимать не нужно.
Значит, тебе достаточно просто использовать это:
C++:
*reinterpret_cast<uint8_t*>(0x969152) = 1;
А так, если ты хочешь повторить код как на луа:
C++:
template<typename T>
void writeMem(uintptr_t address, T value, bool unprotect = false)
{
    DWORD old_protection;
    auto address_ = reinterpret_cast<void*>(address);
    if (unprotect)
        VirtualProtect(address_, sizeof(value), PAGE_EXECUTE_READWRITE, &old_protection);
    memcpy(&value, address_, sizeof(value));
    if (unprotect)
        VirtualProtect(address_, sizeof(value), old_protection, &old_protection);
}
Ты в value записуешь байты из _address?
 
  • Bug
  • Нравится
Реакции: vbg и #Northn

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
Привет, хотел перевести на плюсы вот эту запись.
memory lua:
mem.setint8(0x969152, 1, false)

На с++ получилось что такое:
функция для записи в память:
template <typename T>
void writeMem(DWORD address, T value)
{
    DWORD oldProtect = 0;
    VirtualProtectEx(GetCurrentProcess(), (void*)address, sizeof(value), PAGE_EXECUTE_READWRITE, &oldProtect);
    WriteProcessMemory(GetCurrentProcess(), (void*)address, &value, sizeof(value), 0);
    VirtualProtectEx(GetCurrentProcess(), (void*)address, sizeof(value), oldProtect, NULL);
}

дальше вызываю в коде:
вызов функции в коде:
unsigned char driveOnWater = 1;
writeMem<unsigned char>(0x969152, driveOnWater);

Ну и не работает кароче. Изменяю память в цикле.
C++:
template <typename T>
void WriteMemory(std::uintptr_t address, T value, bool protect = true) {
    unsigned long oldProt;
    if (protect) VirtualProtect(reinterpret_cast<void*>(address), sizeof(T), 0x04, &oldProt);
    *reinterpret_cast<T*>(address) = value;
    if (protect) VirtualProtect(reinterpret_cast<void*>(address), sizeof(T), oldProt, &oldProt);
}
Usage:
C++:
WriteMemory(0x969152, '\x01');
 
  • Нравится
Реакции: 0xFF и vbg

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
Всем ку, у кого-то есть аналог convertGameScreenCoordsToWindowScreenCoords из lua?

C++:
constexpr auto kRwEngineScreenW = 0x00C17044;
constexpr auto kRwEngineScreenH = 0x00C17048;

constexpr auto kGameScreenW = 640.f;
constexpr auto kGameScreenH = 448.f;

Vec2 gameScreenToWindow(Vec2 point) {
    const int sx = *reinterpret_cast<int*>(kRwEngineScreenW);
    const int sy = *reinterpret_cast<int*>(kRwEngineScreenH);
  
    Vec2 result{};
    result.x = (point.x / kGameScreenW) * sx;
    result.y = (point.y / kGameScreenH) * sy;
    return result;
}
 
Последнее редактирование:
  • Нравится
Реакции: PanSeek и loganhackerdff

loganhackerdff

Известный
868
519
C++:
constexpr auto kRwEngineScreenW = 0x00C17044;
constexpr auto kRwEngineScreenH = 0x00C17048;

constexpr auto kGameScreenW = 640.f;
constexpr auto kGameScreenH = 448.f;

Vec2 gameScreenToWindow(Vec2 point) {
    const int sx = *reinterpret_cast<int*>(kRwEngineScreenW);
    const int sy = *reinterpret_cast<int*>(kRwEngineScreenH);
 
    Vec2 result{};
    result.x = (point.x / kGameScreenW) * sx;
    result.x = (point.y / kGameScreenH) * sy;
    return result;
}
id текстдравов улетают в лево вверх
C++:
                auto onScreenPos{ gameScreenToWindow({ pTextdraw->m_data.m_fX,pTextdraw->m_data.m_fY }) };

                ImGui::GetForegroundDrawList()->AddText({ onScreenPos.x ,onScreenPos.y}, 0xFFFFFFFF, tos(i));


kGameScreenW и kGameScreenH попробовал заменить, не помогли
 
Последнее редактирование:

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,744
4,809
id текстдравов улетают в лево вверх
C++:
                auto onScreenPos{ gameScreenToWindow({ pTextdraw->m_data.m_fX,pTextdraw->m_data.m_fY }) };

                ImGui::GetForegroundDrawList()->AddText({ onScreenPos.x ,onScreenPos.y}, 0xFFFFFFFF, tos(i));


kGameScreenW и kGameScreenH попробовал заменить, не помогли
как минимум там мой проеб в том, что result.x два раза подряд(уже исправил)