- 84
- 27
- Версия SA-MP
-
- 0.3.7 (R1)
Позволяет видеть невидимых игроков на радаре (обычно это предусматривается для тех, кто в маске, для тех, кто работает в ФБР (на Diamond RP), и тем подобных на других серверах)
Активация/деактивация: /ms (по умолчанию плагин активен)
Исходный код:
Активация/деактивация: /ms (по умолчанию плагин активен)
Исходный код:
C++:
#include "pch.h"
#include <Windows.h>
#include <process.h>
DWORD returnPoint;
bool status = true;
void* chatpool;
DWORD sampAddress;
unsigned char forcompare[9] = { 0xC2, 0x04, 0x00, 0x3D, 0xED, 0x03, 0x00, 0x00 };
void AddChatMessage(const char* text, DWORD color)
{
((void(__thiscall*)(void* _this, DWORD type, const char* string, DWORD unknown, DWORD color, DWORD unknown1))(sampAddress + 0x64010))(chatpool, 4, text, 0, color, 0);
}
void __cdecl switcher(const char* param)
{
status = !status;
AddChatMessage(status ? "antimask has been enabled" : "antimask has been disabled", -1);
}
DWORD __cdecl SetPlayerColor(DWORD color)
{
if (status) {
unsigned char* AColor = (unsigned char*)(&color);
if (!(*AColor)) {
*AColor = 0xAA;
}
}
return color;
}
_declspec(naked) void caller()
{
_asm
{
push eax
call SetPlayerColor
pop eax
jmp returnPoint
}
}
void __stdcall mainloop(void*)
{
sampAddress = (DWORD)GetModuleHandle(L"samp.dll");
while (!sampAddress) {
sampAddress = (DWORD)GetModuleHandle(L"samp.dll");
Sleep(300);
}
if (memcmp((void*)(sampAddress + 0xAD580), (void*)forcompare, sizeof(forcompare) - 1)) return;
DWORD address = sampAddress + 0xAD554;
chatpool = *(void**)(sampAddress + 0x21A0E4);
while (chatpool == nullptr) {
chatpool = *(void**)(sampAddress + 0x21A0E4);
Sleep(300);
}
void* commandpool = *(void**)(sampAddress + 0x21A0E8);
while (commandpool == nullptr) {
commandpool = *(void**)(sampAddress + 0x21A0E8);
Sleep(300);
}
returnPoint = sampAddress + 0xAD5AF + 5;
DWORD protection;
VirtualProtect((void*)(sampAddress + 0xAD5A6), 14, PAGE_EXECUTE_READWRITE, &protection);
memcpy((void*)(sampAddress + 0xAD5AF + 5), (void*)(sampAddress + 0xAD5AF), 3);
*(char*)(sampAddress + 0xAD5AF) = 0xE9;
*(DWORD*)(sampAddress + 0xAD5AF + 1) = (DWORD)caller - (sampAddress + 0xAD5AF + 5);
*(char*)(sampAddress + 0xAD5A7) = *(char*)(sampAddress + 0xAD5A7) + 5;
VirtualProtect((void*)(sampAddress + 0xAD5A6), 14, protection, NULL);
((void(__thiscall*)(void* _this, const char* command, void(__cdecl*)(const char*)))(sampAddress + 0x65AD0))(commandpool, "ms", switcher);
}
BOOL APIENTRY DllMain(HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
_beginthread((_beginthread_proc_type)mainloop, 0, nullptr);
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
Вложения
Последнее редактирование: