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

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,748
4,849
а почему инменно reinterept_cast а не static_cast и не простое разименование указателя?
Потому что reinterpret_cast буквально говорит: Видишь тут хранится float? Вот, считай что теперь это int
А static_cast пытается сохранить значение. Т.е. float 4.0f превратится в int 4, а не в миллион

И получается тебе надо взять тот же указатель, но чтобы процессор расценивал его как void*, Поэтому реинтерпрет каст

Тут более подробно распишу для тех кому интересно:
4 типа int хранится в памяти как 0x00000004, а 4 типа float хранится как 0x00008040
Если сделать reinterpret_cast 4 типа float к int, то получим 1082130432, а не как мы ожидали 4.
Static cast же сделает из 0x00008040 0x00000004
Да, я знаю что нельзя кастовать float к int, просто мне было удобно это для примера :D(Ограничение можно обойти через memcpy)
 
Последнее редактирование:

Const

Потрачен
28
54
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

Musaigen

shitposter
Проверенный
1,654
1,471
Нет. *reinterpret_cast<class CPed **>(0xB6F5F0). В данном случае ты сделал абсолютно бессмысленное кастование, одно и то же, что reinterpret_cast<uint32_t>(0xB6F5F0)
Я знаю что нужно именно так кастовать, только у @T4yz1e может не быть класса CPed, я и показал как нужно кастовать в этом случае.
Конечно можно ещё сделать класс пустышку, но зачем?
 

Const

Потрачен
28
54
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Я знаю что нужно именно так кастовать, только у @T4yz1e может не быть класса CPed, я и показал как нужно кастовать в этом случае.
Конечно можно ещё сделать класс пустышку, но зачем?
Ты даже в том случае написал неправильно, если использовать с void, правильно будет *reinterpret_cast<void **>(), а если написать class CPed не нужно объявлять класс-пустышку.
 
  • Нравится
Реакции: Musaigen

bab0n

Известный
95
10
3 вопроса:
1] Есть ли функция на то, имеет ли игрок у себя оружие под определённым id? lua:
hasCharGotWeapon(Ped ped, int weapon)
2] Можно ли как то делать изменение активации считывая нажатия с клавиатуры? Тип не так что id клавишы вводиться или её имя, а ты начал кнопку X, программа зарегала её id
3] Есть альтернатива на взятие ствола в руку? lua:
setCurrentCharWeapon(playerPed, id)
 

SR_team

like pancake
BH Team
4,807
6,491
3 вопроса:
1] Есть ли функция на то, имеет ли игрок у себя оружие под определённым id? lua:
hasCharGotWeapon(Ped ped, int weapon)
2] Можно ли как то делать изменение активации считывая нажатия с клавиатуры? Тип не так что id клавишы вводиться или её имя, а ты начал кнопку X, программа зарегала её id
3] Есть альтернатива на взятие ствола в руку? lua:
setCurrentCharWeapon(playerPed, id)
1. есть
2. можно
3. есть
 

Const

Потрачен
28
54
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
3 вопроса:
1] Есть ли функция на то, имеет ли игрок у себя оружие под определённым id? lua:
hasCharGotWeapon(Ped ped, int weapon)
2] Можно ли как то делать изменение активации считывая нажатия с клавиатуры? Тип не так что id клавишы вводиться или её имя, а ты начал кнопку X, программа зарегала её id
3] Есть альтернатива на взятие ствола в руку? lua:
setCurrentCharWeapon(playerPed, id)
1.
C++:
__int32 getCurrentWeapon() {
    return *reinterpret_cast<__int32 *>(0x00BAA410);
}

2. самый простой вариант, на скорую руку:
C++:
#include <vector>
#include <thread>

uint32_t cheat_key = 0;

void new_key(uint32_t &cheat_key) {
    std::vector<uint32_t> virtual_keys = {
        VK_INSERT,
        VK_DELETE,
        VK_HOME,
        // добавляешь сюда все айдишники клавиш, из которых будет осуществляться выбор
    };

    while (true) {
        for (auto key : virtual_keys) {
            if (GetAsyncKeyState(key)) {
                cheat_key = key;
                return;
            }
        }
    }
}

std::thread thr([&]() {
    new_key(cheat_key);
});
thr.detach();
 
  • Нравится
Реакции: bab0n

loganhackerdff

Известный
868
518
1.
C++:
__int32 getCurrentWeapon() {
    return *reinterpret_cast<__int32 *>(0x00BAA410);
}

2. самый простой вариант, на скорую руку:
C++:
#include <vector>
#include <thread>

uint32_t cheat_key = 0;

void new_key(uint32_t &cheat_key) {
    std::vector<uint32_t> virtual_keys = {
        VK_INSERT,
        VK_DELETE,
        VK_HOME,
        // добавляешь сюда все айдишники клавиш, из которых будет осуществляться выбор
    };

    while (true) {
        for (auto key : virtual_keys) {
            if (GetAsyncKeyState(key)) {
                cheat_key = key;
                return;
            }
        }
    }
}

std::thread thr([&]() {
    new_key(cheat_key);
});
thr.detach();
C++:
bool KeyButton(uint16_t& key, char cSpliter)
{
    char szKey[32];
    if (key != 0)
    {
        GetKeyNameTextA((MapVirtualKeyA(key, MAPVK_VK_TO_VSC) << 16), szKey, 32);
        sprintf(szKey, "%s###%c", szKey, cSpliter);
    }

    else
        sprintf(szKey, "...###%c", cSpliter);
    if (ImGui::Button(szKey))
        key = 0;
    if (key == 0)
        for (uint16_t i = 4; i < 255; i++)
        {
            if (ImGui::IsKeyPressed(i))
            {
                key = i;
                return true;
            }
        }
    return false;
}
 
  • Нравится
Реакции: bab0n

loganhackerdff

Известный
868
518
Почему когда я использую метод push_back у класса vector который состоит из class ChatBuble игра крашит? тоже самое и с указателями на класс
C++:
class ChatBubble
{
public:
    UINT16 PlayerID = 0;
    UINT32 color = 0;
    UINT32 expiretime = 0;
    float drawDistance = 0.f;
    string message = 0;
    ChatBubble()
    {

    }
    ~ChatBubble()
    {

    }
    void InIt(UINT16 PlayerIDC,
    UINT32 colorC,
    UINT32 expiretimeC,
    float drawDistanceC,
    string messageC)
    {
        PlayerID = PlayerIDC;
        color = colorC;
        expiretime = expiretimeC;
        drawDistance = drawDistanceC;
        message = messageC;
    }
};
 

loganhackerdff

Известный
868
518
1596476011293.png

Попробовал с структурой и в консольном приложении, тоже что-то не так
вроде нащёл проблему
 
Последнее редактирование:

bab0n

Известный
95
10
Можете описать пару способов экспорта и импорта значений переменных?
Вот подобный код на LUA:
Lua:
local defaults = {sets ={arg1 = 113,arg2 = 1,arg3 = 50, notification = true}}

local ini = inicfg.load(defaults, 'Kavo.ini')
local sets = ini.sets

function arg3(arg)
    if type(tonumber(arg)) == 'number' then
        sets.arg3 = arg
        inicfg.save(ini, 'Kavo.ini')
        printString('~y~ updated', 1000)
        addOneOffSound(0, 0, 0, 1150)
    else
        printString('~r~ error', 1000)
        addOneOffSound(0, 0, 0, 1055)
    end
end

-- пример использования
if wasKeyPressed(sets.arg1) then
        work = not work
         if work then
             printString('~p~ON', 1000)
         else
             printString('OFF', 1000)
          end
end

Я не настаиваю на текстовике, может есть какие то ещё варианты? Реестр может, или какие-то ещё файлы/директории
 
Последнее редактирование: