g305noobo

Известный
Автор темы
Модератор
304
475
Версия SA-MP
  1. 0.3.7 (R1)
ку! сделал для себя патч ненужных функций в лаунчере эвольв рп и решил опубликовать сюда.

плагин поддерживает все обновления лаунчера до объемных изменений в коде плагина, отвечающего за функции лаунчера - EvolveProcessing.asi (он может называться по разному)

как раз таки по причине изменчивого названия плагина обработчика я добавил пункт в конфиге "evolve_processing_name", по дефолту он "evolve_processing_name = __EvolveProcessing.asi" (название на момент 05.06.2024)

список функций:
  • NoBinds - отключение биндов (например m - /menu и др..)
  • NoCustomRadar - отключение кастомного радара (вместо него будет дефолтный, также можно поставить raddarect.asi и прочее)
  • NoEscTransparency = отключение прозрачного меню паузы (теперь если нажать esc, то игра правда уйдет в афк😱)
    ни звуков игры при альт-табе, ничего, все как в обычном самп клиенте

    а еще по-моему благодаря патчу NoEscTransparency заработал анти-афк
* все патчи настраиваются в ini файле, который создастся при первом запуске (по умолчанию все включено)
C++:
class evolve_patch {
public:
    std::string evolve = "__EvolveProcessing.asi";

    void enable() {
        for (const auto& patch : patchs) {
            if (patch.enabled) {
                std::uintptr_t call_instruction_address = mem::find_pattern(
                    evolve.c_str(),
                    patch.pattern,
                    patch.mask
                );
                std::uintptr_t function_address = mem::get_function_address_from_call(call_instruction_address);
                mem::patch_function(function_address, patch.new_bytes);
            }
        }
    }
    void load_settings() {
        std::string filename = "erp_patcher_kichiro.ini";
        CIniReader ini(filename);

        if (ini.data.size() > 0) {
            evolve = ini.ReadString("main", "evolve_processing_name", evolve);
            binds = ini.ReadBoolean("patch", "NoBinds", binds);
            radar = ini.ReadBoolean("patch", "NoCustomRadar", radar);
            esc = ini.ReadBoolean("patch", "NoEscTransparency", esc);
        }
        else {
            ini.WriteString("main", "evolve_processing_name", evolve, true);
            ini.WriteString("patch", "NoBinds", "true", true);
            ini.WriteString("patch", "NoCustomRadar", "true", true);
            ini.WriteString("patch", "NoEscTransparency", "true", true);
        }
    }
private:
    struct _patch {
        bool enabled;
        const char* pattern;
        const char* mask;
        std::vector<uint8_t> new_bytes;
    };
        std::vector<_patch> patchs = {
        // binds
        {
            true,
            "\xE8\x00\x00\x00\x00\x8D\x4D\xDC\xE8\x00\x00\x00\x00\x8B\x4D\xF4\x64\x89\x0D\x00\x00\x00\x00\x59\x5F",
            "x????xxxx????xxxxxx????xx",
            {0x6A, 0x00, 0x8B, 0xEC, 0xB8, 0x01, 0x00, 0x00, 0x00, 0x5D, 0xC2, 0x04, 0x00}
        },
        // radar
        {
            true,
            "\xE9\x00\x00\x00\x00\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\x55\x8B\xEC\x8B\x45\x08\xC7\x00\x00\x00\x00\x00\x5D\xC2\x04\x00\x55\x8B\xEC\x8B\x45\x08\xC7\x00\x00\x00\x00\x00\x5D\xC2\x04\x00\x55\x8B\xEC\x80\x7D\x08\x00\x74\x0B\x6A\x08\x51\xE8\x00\x00\x00\x00\x83\xC4\x08\x5D\xC2\x04\x00\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\x8D\x41\x04\xC3\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xB8\x00\x00\x00\x00\xC3\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xCC\xA1\x00\x00\x00\x00",
            "x????xxxxxxxxxxxxxxxxxxx????xxxxxxxxxxxx????xxxxxxxxxxxxxxxxx????xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx????xxxxxxxxxxxx????",
            {0xC3}
        },
        // esc
        {
            true,
            "\xE8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\xE8\x00\x00\x00\x00\x83\xFB\x0F",
            "x????x????x????x????xxx",
            {0xC3}
        }
    };

    bool& binds = patchs[0].enabled;
    bool& radar = patchs[1].enabled;
    bool& esc = patchs[2].enabled;
}patch;

plugin::plugin() {
    std::thread([&] {
        patch.load_settings();
        while (!GetModuleHandleA(patch.evolve.c_str())) {
            std::this_thread::sleep_for(std::chrono::milliseconds(10));
        }
        patch.enable();
        }).detach();
}
1710118032272.jpeg
 

Вложения

  • erp_patcher_kichiro.asi
    22 KB · Просмотры: 103
Последнее редактирование: