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

Shaoron321

Новичок
5
0
Вроде все сработало, спасибо. Теперь вопрос: почему этот скрипт не работает в игре?) Это из уроков взято
1616057246508.png
 

checkdasound

Известный
Проверенный
963
410
if (taim)
{
*(DWORD*)(0xB70153) = timeset;
}

Игра возвращает значение, не могу изменить время в игре, покажите пример пожалуйста
Чтобы закрепить определенное время суток, тебе надо в цикле проверять на соответствие рез-тат чтения адреса и переменную timeset. Если не равны - пиши timeset в адрес. Если установить только один раз, то работать не будет.
 
  • Нравится
Реакции: frosjkee

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,749
4,845
Чтобы закрепить определенное время суток, тебе надо в цикле проверять на соответствие рез-тат чтения адреса и переменную timeset. Если не равны - пиши timeset в адрес. Если установить только один раз, то работать не будет.
А можно просто запретить сампу его менять
 

bottom_text

Известный
673
323
Добрый вечер. Как возможно реализовать перебор всех игроков в зоне стрима без использования SF? По типу
Lua:
 for k, v in ipairs(getAllChars()) do 
-- something
end
в луа
 

imring

Ride the Lightning
Всефорумный модератор
2,366
2,556
Добрый вечер. Как возможно реализовать перебор всех игроков в зоне стрима без использования SF? По типу
Lua:
for k, v in ipairs(getAllChars()) do
-- something
end
в луа
с использованием plugin-sdk: https://github.com/DK22Pac/plugin-sdk/blob/master/plugin_sa/game_sa/CPools.h#L28
пример: https://github.com/THE-FYP/MoonAdditions/blob/master/src/lua_general.cpp#L441
 
  • Нравится
Реакции: bottom_text

waffelo

Новичок
27
7
Пишу инжектор, столкнулся с проблемой
getprocid:
DWORD GetProcId(const char* procName)
{
    DWORD procId = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 procEntry;
        procEntry.dwSize = sizeof(procEntry);

        if (Process32First(hSnap, &procEntry))
        {
            do
            {
                if (!_stricmp(procEntry.szExeFile, procName))
                {
                    procId = procEntry.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnap, &procEntry));
        }
    }
    CloseHandle(hSnap);
    return procId;
}
Я понимаю, что char нужно изменять параметр procname, и передавать его wcscmp(), но после того как я делаю появляется другая ошибка
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,749
4,845
Пишу инжектор, столкнулся с проблемой
getprocid:
DWORD GetProcId(const char* procName)
{
    DWORD procId = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 procEntry;
        procEntry.dwSize = sizeof(procEntry);

        if (Process32First(hSnap, &procEntry))
        {
            do
            {
                if (!_stricmp(procEntry.szExeFile, procName))
                {
                    procId = procEntry.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnap, &procEntry));
        }
    }
    CloseHandle(hSnap);
    return procId;
}
Я понимаю, что char нужно изменять параметр procname, и передавать его wcscmp(), но после того как я делаю появляется другая ошибка
C++:
DWORD GetProcId(std::wstring_view procName)
{
    DWORD procId = 0;
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if (hSnap != INVALID_HANDLE_VALUE)
    {
        PROCESSENTRY32 procEntry;
        procEntry.dwSize = sizeof(procEntry);

        if (Process32First(hSnap, &procEntry))
        {
            do
            {
                if (procEntry.szExeFile == procName)
                {
                    procId = procEntry.th32ProcessID;
                    break;
                }
            } while (Process32Next(hSnap, &procEntry));
        }
    }
    CloseHandle(hSnap);
    return procId;
}
 

waffelo

Новичок
27
7
Как убить процесс, если он запущен по функе

C++:
DWORD GetProcId(std::string procname)
{
    PROCESSENTRY32 pe;
    HANDLE hSnap;

    pe.dwSize = sizeof(PROCESSENTRY32);
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if (Process32First(hSnap, &pe)) {
        do {
            if (std::wstring(pe.szExeFile) == std::wstring(procname.begin(), procname.end()))
                break;
        } while (Process32Next(hSnap, &pe));
    }
    return pe.th32ProcessID;
}
 

kin4stat

mq-team · kin4@naebalovo.team
Всефорумный модератор
2,749
4,845
Как убить процесс, если он запущен по функе

C++:
DWORD GetProcId(std::string procname)
{
    PROCESSENTRY32 pe;
    HANDLE hSnap;

    pe.dwSize = sizeof(PROCESSENTRY32);
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if (Process32First(hSnap, &pe)) {
        do {
            if (std::wstring(pe.szExeFile) == std::wstring(procname.begin(), procname.end()))
                break;
        } while (Process32Next(hSnap, &pe));
    }
    return pe.th32ProcessID;
}
Эта функция получается ID процесса, а не создает его
Да и выше же кидали нормальный вариант, зачем ты вызываешь 2 конструктора строки в цикле?
к тому же этот код работать нормально не будет
 
Последнее редактирование:
D

deleted-user-204957

Гость
Как убить процесс, если он запущен по функе

C++:
DWORD GetProcId(std::string procname)
{
    PROCESSENTRY32 pe;
    HANDLE hSnap;

    pe.dwSize = sizeof(PROCESSENTRY32);
    hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    if (Process32First(hSnap, &pe)) {
        do {
            if (std::wstring(pe.szExeFile) == std::wstring(procname.begin(), procname.end()))
                break;
        } while (Process32Next(hSnap, &pe));
    }
    return pe.th32ProcessID;
}
C++:
void GetProcId(std::wstring_view procName) {
    HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (hSnap != INVALID_HANDLE_VALUE) {
        PROCESSENTRY32 procEntry;
        procEntry.dwSize = sizeof(procEntry);
        if (Process32First(hSnap, &procEntry)) {
            do {
                if (procEntry.szExeFile == procName) {
                    TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, FALSE, procEntry.th32ProcessID), 0);
                    break;
                }
            } while (Process32Next(hSnap, &procEntry));
        }
    }
}
 
  • Нравится
Реакции: waffelo
У

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

Гость
Как проверить, что самп инициализирован без проверки структур?