- Версия SA-MP
-
- 0.3.7 (R1)
ку! сделал для себя патч ненужных функций в лаунчере эвольв рп и решил опубликовать сюда.
плагин поддерживает все обновления лаунчера до объемных изменений в коде плагина, отвечающего за функции лаунчера - EvolveProcessing.asi (он может называться по разному)
как раз таки по причине изменчивого названия плагина обработчика я добавил пункт в конфиге "evolve_processing_name", по дефолту он "evolve_processing_name = __EvolveProcessing.asi" (название на момент 05.06.2024)
список функций:
плагин поддерживает все обновления лаунчера до объемных изменений в коде плагина, отвечающего за функции лаунчера - EvolveProcessing.asi (он может называться по разному)
как раз таки по причине изменчивого названия плагина обработчика я добавил пункт в конфиге "evolve_processing_name", по дефолту он "evolve_processing_name = __EvolveProcessing.asi" (название на момент 05.06.2024)
список функций:
- NoBinds - отключение биндов (например m - /menu и др..)
- NoCustomRadar - отключение кастомного радара (вместо него будет дефолтный, также можно поставить raddarect.asi и прочее)
- NoEscTransparency = отключение прозрачного меню паузы (теперь если нажать esc, то игра правда уйдет в афк😱)
ни звуков игры при альт-табе, ничего, все как в обычном самп клиенте
а еще по-моему благодаря патчу NoEscTransparency заработал анти-афк
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();
}
Вложения
Последнее редактирование: