- Версия SA-MP
-
- 0.3.7 (R1)
ку! сделал для себя патч ненужных функций в лаунчере эвольв рп и решил опубликовать сюда.
список функций:
список функций:
- NoBinds - отключение биндов (например m - /menu и др..)
- NoCustomRadar - отключение кастомного радара (вместо него будет дефолтный, также можно поставить raddarect.asi и прочее)
- NoEscTransparency = отключение прозрачного меню паузы (теперь если нажать esc, то игра правда уйдет в афк😱)
ни звуков игры при альт-табе, ничего, все как в обычном самп клиенте
а еще по-моему благодаря патчу NoEscTransparency заработал анти-афк
C++:
class evolve_patch {
public:
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) {
binds = ini.ReadBoolean("patch", "NoBinds", binds);
radar = ini.ReadBoolean("patch", "NoCustomRadar", radar);
esc = ini.ReadBoolean("patch", "NoEscTransparency", esc);
}
else {
ini.WriteString("patch", "NoBinds", "true", true);
ini.WriteString("patch", "NoCustomRadar", "true", true);
ini.WriteString("patch", "NoEscTransparency", "true", true);
}
}
private:
std::string evolve = "evolveprocessing.asi";
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;