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

Fuexie

Известный
108
30
Недавно задался вопросом возможно ли написать свой плагин Emergency Light'ов, как подобный модуль в ImVehFt. Просто у последнего ограничения давят (до 16 разных материалов+корон и только 1 конфигурация загораний, я искренне верю что можно больше 16 сделать собственно лайтов и больше одного конфига, но пока не знаю как это реализовать). И вопрос такой, возможно ли и вообще имеет смысл писать подобный плагин? Может это потолок возможностей пожилого сап идораса, а не самого дмитрия, прекрасного автора мода ImVehFt. Было бы хорошо если бы вышеупомянутый имел опенсурс, но его бл*ин нету, так что придется велосипед изобретать в случае положительном.
 

2Shae

Известный
149
8
Данный код постоянно выбирает первый пункт диалога, почему?
Код:
void SendDialogResponse(WORD wDialogID, BYTE bButtonID, WORD wListBoxItem = 65535, char* szInputResp = "")
{
    BitStream bs;
    bs.ResetWritePointer();
    bs.Write(wDialogID);
    bs.Write(bButtonID);
    bs.Write(wListBoxItem);
    bs.Write((BYTE)strlen(szInputResp));
    bs.Write(szInputResp, strlen(szInputResp));
    SF->getRakNet()->SendRPC(RPCEnumeration::RPC_DialogResponse, &bs);
}

SendDialogResponse(dialogID, 1, 4);
 

ucciModd

Новичок
18
2
Решил под себя подстроить ип ченжер от наруто, взяв его исходники, но в его исходниках отсутствовал urmem.h. Я нашел на гх urmem от urShadow, но там уже новая версия. Я адаптировал версию, но крашит при хуке.

C++:
bool test(unsigned short maxConnections, unsigned short localPort, int _threadSleepTimer, const char* forceHostAddress)
{
    return hook.call<urmem::calling_convention::cdeclcall, bool>(maxConnections, localPort, _threadSleepTimer, forceHostAddress);
}

void SetHook(const urmem::address_t addr)
{
    hook.install(addr, urmem::get_func_addr(&test));
}
 
D

Deleted member 240777

Гость
1. пытаюсь написать скрипт который будет читать и изменять участок памяти, при компиляции вылазят две ошибки линкера, хз как исправить
код:
#include <Windows.h>
#include <process.h>

void __cdecl MainThread(void* pArg)
{
    DWORD dwSAMPBase = (DWORD)GetModuleHandle("samp.dll");
    unsigned char settingsFpsLimitStatus = 0;
    if (dwSAMPBase)
    {
        while (true)
        {
            Sleep(500);
            settingsFpsLimitStatus = *reinterpret_cast<unsigned char*>(0xBA6794);
            if (settingsFpsLimitStatus)
                *reinterpret_cast<unsigned char*>(dwSAMPBase + 0x9D9D0) = 369054032;
            else
                *reinterpret_cast<unsigned char*>(dwSAMPBase + 0x9D9D0) = -392431617;
        }
    }
}

BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH) _beginthread(MainThread, NULL, nullptr);
        return TRUE;
}
1590224712344.png
 

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
1. пытаюсь написать скрипт который будет читать и изменять участок памяти, при компиляции вылазят две ошибки линкера, хз как исправить
код:
#include <Windows.h>
#include <process.h>

void __cdecl MainThread(void* pArg)
{
    DWORD dwSAMPBase = (DWORD)GetModuleHandle("samp.dll");
    unsigned char settingsFpsLimitStatus = 0;
    if (dwSAMPBase)
    {
        while (true)
        {
            Sleep(500);
            settingsFpsLimitStatus = *reinterpret_cast<unsigned char*>(0xBA6794);
            if (settingsFpsLimitStatus)
                *reinterpret_cast<unsigned char*>(dwSAMPBase + 0x9D9D0) = 369054032;
            else
                *reinterpret_cast<unsigned char*>(dwSAMPBase + 0x9D9D0) = -392431617;
        }
    }
}

BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH) _beginthread(MainThread, NULL, nullptr);
        return TRUE;
}
в свойстах выбери динамическая библиотека
1590226110534.png
 
  • Нравится
Реакции: Deleted member 240777
D

Deleted member 240777

Гость

imring

Ride the Lightning
Всефорумный модератор
2,355
2,516
спс большое. у меня получилось скомпилировать, но скрипт неработает. какой адресс памяти отвечает за анлок фпса? я слышал что samp.dll + 0x9D9D0, но не работает почимуто
ты в unsigned char пытаешься записать unsigned long
и вроде надо убрать защиту от перезаписи (virual protect)
 

loganhackerdff

Известный
868
517
Как зарегистрировать windproc handler без SF api
 
Последнее редактирование:
D

Deleted member 240777

Гость
пытаюсь написать фпс анлок который выключается при включение лимита в настройках.
код:
#include <Windows.h>
#include <process.h>
#include <stdint.h>

enum SA_Mem
{
    settingsFPSLimit = 0xBA6794,
    FPSLimit = 0x9D9D0
};

void WriteMemory(void* address, void* bytes, int byteSize)
{
    DWORD NewProtection;
    VirtualProtect(address, byteSize, PAGE_EXECUTE_READWRITE, &NewProtection);
    memcpy(address, bytes, byteSize);
    VirtualProtect(address, byteSize, NewProtection, &NewProtection);
}

void __cdecl MainThread(void* pArg)
{
    DWORD dwSamp = DWORD(GetModuleHandleA("samp.dll"));
    uint8_t* old = 0;
    unsigned char settingsFPSLimitStatus = 0, oldSettingsFPSLimitStatus = 120;
    if (dwSamp)
    {
        old = reinterpret_cast<uint8_t*>(dwSamp + SA_Mem::FPSLimit);
        while (true)
        {
            Sleep(500);
            settingsFPSLimitStatus = *reinterpret_cast<unsigned char*>(SA_Mem::settingsFPSLimit);
            if (settingsFPSLimitStatus != oldSettingsFPSLimitStatus)
            {
                if(settingsFPSLimitStatus == 1)
                    WriteMemory((void*)(dwSamp + SA_Mem::FPSLimit), old, 4);
                else
                    WriteMemory((void*)(dwSamp + SA_Mem::FPSLimit), (uint8_t*)"0x5051FF15", 4);
                oldSettingsFPSLimitStatus = settingsFPSLimitStatus;
            }
        }
    }
}

BOOL WINAPI DllMain(_In_ HINSTANCE hinstDLL, _In_ DWORD fdwReason, _In_ PVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH) _beginthread(MainThread, NULL, nullptr);
    return TRUE;
}
если захожу с включенным лимитом, то анлока нет и могу использовать /fpslimit (если выключаю лимит в настройках, то все как во втором случае).
если захожу с выключенным лимитом, то анлок есть. включая лимит в настройках, фпс анлок остаётся (проверял через чит енжин), соотвественном управление /fpslimit не работает. не могу понять в чем проблема.