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

loganhackerdff

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

sc6ut

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

loganhackerdff

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

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

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

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,748
4,849
Помогите пожалуйста, нема курсора когда активна менюшка
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
18
Привет, хотел перевести на плюсы вот эту запись.
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
323
Привет, хотел перевести на плюсы вот эту запись.
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,657
2,549
Привет, хотел перевести на плюсы вот эту запись.
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

shitposter
Проверенный
1,654
1,471
последний аргумент -- 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,748
4,849
Привет, хотел перевести на плюсы вот эту запись.
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,748
4,849
Всем ку, у кого-то есть аналог 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
518
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,748
4,849
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 два раза подряд(уже исправил)