|
Форум Программирование в Pawno Стандартные функции SendClientCheck, OnClientCheckResponse |
SendClientCheck, OnClientCheckResponse |
Две скрытые функции SA-MP
Вычисляет контрольную сумму для массива байтов в указанный адрес в gta_sa.exe памяти, поэтому каждый чит можно обнаружить: Cleos, s0beit и т.д. Говоря о RakNet слоя, при подключении к серверу. которая призывает SendClientCheck, он посылает RPC (содержит адрес) действий для клиента и клиент также отвечает с RPC (содержит контрольную сумму). Функция: Код native SendClientCheck(playerid, actionid, memaddr, memOffset, bytesCount); Колбэк: Код forward OnClientCheckResponse(playerid, actionid, memaddr, retndata); Пример (Работает или нет не знаю): Код #include <a_samp> #define NULL 0 #define function%0(%1) forward%0(%1); public%0(%1) native SendClientCheck(playerid, actionid, memaddr, memOffset, bytesCount); main() { new playerid; CallLocalFunction("OnPlayerConnect", "d", playerid); return false; } stock PlayerName(playerid) { new Name[MAX_PLAYER_NAME]; GetPlayerName(playerid, Name, sizeof(Name)); return Name; } public OnPlayerConnect(playerid) { printf("%s подключенный к серверу", PlayerName(playerid)); new actionid = 0x5, memaddr = 0x5E8606, retndata = 4; SendClientCheck(playerid, actionid, memaddr, NULL, retndata); printf("Проверка клиента %s:\n%d\n%d\n%d\n%d\n%d", PlayerName(playerid), playerid, actionid, memaddr, NULL, retndata); switch(retndata) {case 10: { printf("Игрок %s вероятно имеет собейт или d3d9.dll файл в директории GTA San Andreas", PlayerName(playerid)); }} return true; } function OnClientCheckResponse(playerid, actionid, memaddr, retndata) { switch(retndata) { case 0xA: printf("Использует читы"); } return true || false; } Ещё нашёл вот это, не знаю пробуйте и гуглите: Код #include <a_samp> forward OnClientCheckResponse(playerid, actionid, memaddr, retndata); native SendClientCheck(playerid, actionid, memaddr, memOffset, bytesCount); enum(<<= 1) { NULL = 0, SOBEIT = 0x5E8606 }; public OnPlayerConnect(playerid) { new actionid = 0x5, memaddr = SOBEIT, retndata = 0x4; SendClientCheck(playerid, actionid, memaddr, NULL, retndata); return 1; } public OnClientCheckResponse(playerid, actionid, memaddr, retndata) { switch(retndata) { case 0xA0: printf("Player has clear GTA."); default: { printf("Player has some files installed."); } } return 1; } Программист любитель :) |
| |||
| |||