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

D

Deleted member 240777

Гость
как работать с ини файлами в сф? есть встроенные функции или самому перезаписывать?
 

Dark_Knight

Me, me and me.
Друг
4,067
2,081
В СФ нет никаких встроенных функций для работы с ини. Можно юзать винапи(а он не удобен) или же поискать для себя удобную либу для работы с ини. В нете их навалом. Ищи так "C++ ini wrapper"
Соберите из этого чит в Visual Studio https://yadi.sk/d/FX-O72F-J98EjQ
Это не стол заказов. Тебе в другой раздел под названием "Работа и услуги"
 
  • Нравится
Реакции: Deleted member 240777

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
595
808
ауе, почему при возврате оригинального wndproc крашит игру?)
C++:
if (reason == DLL_PROCESS_DETACH) {
    SetWindowLongA(gl.gameWindow, GWL_WNDPROC, reinterpret_cast<long>(gl.originalWndProc));
}
вызывается в DllMain
 

#Rin

Известный
Всефорумный модератор
1,214
1,037
ауе, почему при возврате оригинального wndproc крашит игру?)
C++:
if (reason == DLL_PROCESS_DETACH) {
    SetWindowLongA(gl.gameWindow, GWL_WNDPROC, reinterpret_cast<long>(gl.originalWndProc));
}
вызывается в DllMain
Любой плагин может установить до и после тебя свой WndProc.
Выгружая свой плагин, адрес на твой WndProc, который другие плагины считают за "оригинальный" становится невалидным, из-за чего они вызывают функцию которой уже нету в памяти. Вернув таким образом якобы "оригинальный" WndProc который тебе известен, ты ломаешь цепочку обработчиков.
Избежать этого можно оставив в памяти функцию пустышку для продолжения цепочки вызовов.
 
  • Нравится
Реакции: Receiver

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
595
808
Как отгрузить ASI плагин без краша?
 

Dark_Knight

Me, me and me.
Друг
4,067
2,081
Как? Молча. Найти из-за чего крашит при выходе и пофиксить это. Если ты думаешь, что у тебя нормальный код, то задай себе вопрос. Какого хера он крашит.
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
595
808
Как? Молча. Найти из-за чего крашит при выходе и пофиксить это. Если ты думаешь, что у тебя нормальный код, то задай себе вопрос. Какого хера он крашит.
Не при выходе крашит. Пытаюсь отгрузить через FreeLibraryAndExitThread – краш. Перед вызовом, я конечно же отгружаю всё что использую.
 

Dark_Knight

Me, me and me.
Друг
4,067
2,081
Не при выходе крашит. Пытаюсь отгрузить через FreeLibraryAndExitThread – краш. Перед вызовом, я конечно же отгружаю всё что использую.
Подключи отладку и посмотри на каком моменте крашит. Бывает, что забыл какую-то проверку сделать или что-то в таком духе. С отладкой ты сможешь посмотреть список вызовов до краша. И не забудь перед откладкой скомпилировать с /DEBUG
 

Receiver

🥩 Передай meat, всё в скип, я в темпе
Проверенный
595
808
Как рассчитать оффсет в bitStream, для SetReadOffset/SetWriteOffset?
1591166028797.png

Все аргументы:
1591166094106.png

Мне нужно сразу начинать читать с iClientVerLen. Попытался найти оффсет с помощью offsetof, результат не утешительный.
 

ufdhbi

Известный
Проверенный
1,455
861
Как рассчитать оффсет в bitStream, для SetReadOffset/SetWriteOffset?
Посмотреть вложение 58334
Все аргументы:
Посмотреть вложение 58335
Мне нужно сразу начинать читать с iClientVerLen. Попытался найти оффсет с помощью offsetof, результат не утешительный.
в ручную биты считать
 

barspinoff

Известный
126
33
Сделал внешний Антситан, как ток включаю игра сразу закрывается. Ни крашей, ничего. Тупо закрывается. Это потому-что проверку не сделал?

Интернал сурс по корому делал:
if (bAntiStun)
    {
        if (!pSAMP->getPlayers())
            return;
        if (!bAntiStunned)
        {
            // but it doesn't work only for sniper
            DWORD dwStunAddr = *(DWORD*)0x00B6F5F0;
            *(BYTE*)(dwStunAddr + 0x478) = 4;
        }

        // for sniper stun
        float fRate = 100.f;
        bAntiStunned = true;
    }
    else
    {
        if (bAntiStunned)
        {
            DWORD dwStunAddr = *(DWORD*)0x00B6F5F0;
            *(BYTE*)(dwStunAddr + 0x478) = 0;

            float fRate = 1.f;
            bAntiStunned = false;
        }
    }

Вот что я высрал:
    {
        if (materialCheckBox3->Checked)
        {
            DWORD dwStunAddr;
            WriteProcessMemory(hProcess, (LPVOID)0x00B6F5F0, &dwStunAddr, sizeof(dwStunAddr), 0);
            dwStunAddr = 4;
            WriteProcessMemory(hProcess, (LPVOID)(dwStunAddr + 0x478), &dwStunAddr, sizeof(dwStunAddr), nullptr);
            float fRate = 100.f;
        }

        else

        {
            DWORD dwStunAddr;
            WriteProcessMemory(hProcess, (LPVOID)0x00B6F5F0, &dwStunAddr, sizeof(dwStunAddr), 0);
            dwStunAddr = 0;
            WriteProcessMemory(hProcess, (LPVOID)(dwStunAddr + 0x478), &dwStunAddr, sizeof(dwStunAddr), nullptr);
            float fRate = 1.f;
        }
    }
@RTD
не хватает VirtualProtectEx