admin | Дата: Воскресенье, 25.09.2011, 00:46:33 | Сообщение # 1 |
Группа: Администраторы
Сообщений: 3869
| В этом уроке мы сделаем анти-чит на 1.анти-дб 2.анти-жизни 3.анти брони 4.анти денег Верху мода: Code #define Anticheat true #define function%1(%2) forward%1(%2);public%1(%2) #define ConnectionCheck(%1); if(!IsPlayerConnected(%1)) { return 1; } #define ConnectionBreakCheck(%1); if(!IsPlayerConnected(%1)) { break; } #define PlayerName(%1,%2); new %2[MAX_PLAYER_NAME]; GetPlayerName(%1, %2, sizeof(%2)); #define Log(%1,%2); { new _string[128]; format(_string, 128, %1, %2); _ANTICHEAT_Log(_string); } #define KickPlayer(%1,%2,%3); { new _string[128]; format(_string, 128, %1, %2); SendClientMessageToAll(0xFFFF00AA, _string); Kick(%3); } #define WarnPlayer(%1,%2,%3); { new _string[128]; format(_string, 128, %2, %3); SendClientMessage(%1, 0xFFFF00AA, _string); } new timer;
enum PlayerInfos { bool: GatMoney, pMoney, bool: GatHealth, Float: pHealth, bool: GatArmour, Float: pArmour, bool: PlayerLooseMoney, pDriveBys }
new Player[MAX_PLAYERS][PlayerInfos];
enum AnticheatInfos { aName[128], aValue }
new AnticheatInfo[4][AnticheatInfos] = { {"Moneycheat", 1}, {"Healhack", 1}, {"Armourhack", 1}, {"DriveBy", 1} };
enum PickupInfos { bool: pUsed, pID, pModel, pType, Float:pX, Float:pY, Float:pZ, pVirtualworld }
new PickupInfo[MAX_PICKUPS][PickupInfos]; После этого ищем public OnGameModeInit() и туда вставляем: Code timer = SetTimer("_ANTICHEAT_Main", 2000, true); Примерно так должен быть public: Code public OnGameModeInit() { timer = SetTimer("_ANTICHEAT_Main", 2000, true); return true; } После этого ищем public OnGameModeExit() и туда вставляем: Примерно так должен быть public: Code public OnGameModeExit() { KillTimer(timer); return true; } После этого ищем public OnPlayerDeath и туда вставляем: Code new vehicleid; new vehiclemodel; if(GetPlayerState(killerid) == PLAYER_STATE_DRIVER) { vehicleid = GetPlayerVehicleID(killerid); vehiclemodel = GetVehicleModel(vehicleid); if(IsPlayerInAnyVehicle(playerid)) { return true; } if(vehiclemodel == 425) { return true; } if(vehiclemodel == 432) { return true; } if(vehiclemodel == 447) { return true; } if(vehiclemodel == 472) { return true; } if(vehiclemodel == 520) { return true; } if(AnticheatInfo[3][aValue] == 1) { Player[killerid][pDriveBys]++; if(Player[killerid][pDriveBys] > 3) { PlayerName(killerid, Name); KickPlayer("Анти-чит: %s обнаружен дб. Кик", Name, killerid); Player[killerid][pDriveBys] = 0; } else { WarnPlayer(killerid, "Анти-чит: дб предопреждения - %d", Player[killerid][pDriveBys]); } } } Примерно так должен быть public: Code public OnPlayerDeath(playerid, killerid, reason) { new vehicleid; new vehiclemodel; if(GetPlayerState(killerid) == PLAYER_STATE_DRIVER) { vehicleid = GetPlayerVehicleID(killerid); vehiclemodel = GetVehicleModel(vehicleid); if(IsPlayerInAnyVehicle(playerid)) { return true; } if(vehiclemodel == 425) { return true; } if(vehiclemodel == 432) { return true; } if(vehiclemodel == 447) { return true; } if(vehiclemodel == 472) { return true; } if(vehiclemodel == 520) { return true; } if(AnticheatInfo[3][aValue] == 1) { Player[killerid][pDriveBys]++; if(Player[killerid][pDriveBys] > 3) { PlayerName(killerid, Name); KickPlayer("Анти-чит: %s обнаружен дб. Кик", Name, killerid); Player[killerid][pDriveBys] = 0; } else { WarnPlayer(killerid, "Анти-чит: дб предопреждения - %d", Player[killerid][pDriveBys]); } } } return 1; } После этого ищем public OnPlayerConnect и туда вставляем: Code Player[playerid][GatMoney] = false; Player[playerid][pMoney] = 10000; Player[playerid][GatHealth] = false; Player[playerid][pHealth] = 100; Player[playerid][GatArmour] = false; Player[playerid][pArmour] = 0; Player[playerid][PlayerLooseMoney] = false; Player[playerid][pDriveBys] = 0; Примерно так должен быть public: Code public OnPlayerConnect(playerid) { Player[playerid][GatMoney] = false; Player[playerid][pMoney] = 10000; Player[playerid][GatHealth] = false; Player[playerid][pHealth] = 100; Player[playerid][GatArmour] = false; Player[playerid][pArmour] = 0; Player[playerid][PlayerLooseMoney] = false; Player[playerid][pDriveBys] = 0; return true; } После этого ищем public OnPlayerPickUpPickup и туда вставляем: Code for(new i = 0; i < MAX_PICKUPS; i++) { if((PickupInfo[i][pUsed] == true) && (pickupid == PickupInfo[i][pID])) { if(PickupInfo[i][pModel] == 1240) { Player[playerid][GatHealth] = true; _ANTICHEAT_SetPlayerHealth(playerid, 100); } if(PickupInfo[i][pModel] == 1242) { Player[playerid][GatArmour] = true; _ANTICHEAT_SetPlayerArmour(playerid, 100); } } } Примерно так должен быть public: Code public OnPlayerPickUpPickup(playerid, pickupid) { for(new i = 0; i < MAX_PICKUPS; i++) { if((PickupInfo[i][pUsed] == true) && (pickupid == PickupInfo[i][pID])) { if(PickupInfo[i][pModel] == 1240) { Player[playerid][GatHealth] = true; _ANTICHEAT_SetPlayerHealth(playerid, 100); } if(PickupInfo[i][pModel] == 1242) { Player[playerid][GatArmour] = true; _ANTICHEAT_SetPlayerArmour(playerid, 100); } } } } И после этого все добавляем сами функции анти-чита в любое место! Code function _ANTICHEAT_GivePlayerMoney(playerid, money) { ConnectionCheck(playerid); Player[playerid][GatMoney] = true; Player[playerid][pMoney] += money; GivePlayerMoney(playerid, money); return true; }
function _ANTICHEAT_ResetPlayerMoney(playerid) { ConnectionCheck(playerid); Player[playerid][pMoney] = 0; ResetPlayerMoney(playerid); return true; }
function _ANTICHEAT_GetPlayerMoney(playerid) { ConnectionCheck(playerid); return Player[playerid][pMoney]; }
function _ANTICHEAT_SetPlayerHealth(playerid, Float: health) { Player[playerid][GatHealth] = true; Player[playerid][pHealth] = health; SetPlayerHealth(playerid, health); return true; }
function _ANTICHEAT_GetPlayerHealth(playerid, &Float: health) { health = Player[playerid][pHealth]; return true; }
function _ANTICHEAT_SetPlayerArmour(playerid, Float: armour) { Player[playerid][GatArmour] = true; Player[playerid][pArmour] = armour; SetPlayerArmour(playerid, armour); return true; }
function _ANTICHEAT_GetPlayerArmour(playerid, &Float: armour) { armour = Player[playerid][pArmour]; return true; }
function _ANTICHEAT_CreatePickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld) { for(new i = 0; i < MAX_PICKUPS; i++) { if(PickupInfo[i][pUsed] == false) { PickupInfo[i][pUsed] = true; PickupInfo[i][pType] = type; PickupInfo[i][pX] = X; PickupInfo[i][pY] = X; PickupInfo[i][pZ] = Z; PickupInfo[i][pVirtualworld] = Virtualworld; PickupInfo[i][pID] = CreatePickup(model, type, X, Y, Z, Virtualworld); return PickupInfo[i][pID]; } } return -1; }
function _ANTICHEAT_AddStaticPickup(model, type, Float:X, Float:Y, Float:Z, Virtualworld) { for(new i = 0; i < MAX_PICKUPS; i++) { if(PickupInfo[i][pUsed] == false) { PickupInfo[i][pUsed] = true; PickupInfo[i][pType] = type; PickupInfo[i][pX] = X; PickupInfo[i][pY] = X; PickupInfo[i][pZ] = Z; PickupInfo[i][pVirtualworld] = Virtualworld; PickupInfo[i][pID] = CreatePickup(model, type, X, Y, Z, Virtualworld); return true; } } return false; }
function _ANTICHEAT_DestroyPickup(pickup) { for(new i = 0; i < MAX_PICKUPS; i++) { if(pickup == PickupInfo[i][pID]) { DestroyPickup(PickupInfo[i][pID]); PickupInfo[i][pUsed] = false; return true; } } return false; }
function _ANTICHEAT_Main() { new Float: PlayerHealth, Float: PlayerArmour; for(new i = 0; i < MAX_PLAYERS; i++) { ConnectionBreakCheck(i); PlayerName(i, Name); // анти-хак if(AnticheatInfo[0][aValue] == 1) { if(Player[i][GatMoney] == false) { if(GetPlayerMoney(i) > Player[i][pMoney]) { ResetPlayerMoney(i); GivePlayerMoney(i, Player[i][pMoney]); Log("%s Moneycheat", Name); } if(GetPlayerMoney(i) < Player[i][pMoney]) { _ANTICHEAT_GivePlayerMoney(i, -(Player[i][pMoney] - GetPlayerMoney(i))); Player[i][PlayerLooseMoney] = true; } } Player[i][GatMoney] = false; } else { _ANTICHEAT_ResetPlayerMoney(i); _ANTICHEAT_GivePlayerMoney(i, GetPlayerMoney(i)); } // анти жизни if(AnticheatInfo[1][aValue] == 1) { if(Player[i][GatHealth] == false) { GetPlayerHealth(i, PlayerHealth); if(PlayerHealth > Player[i][pHealth] && Player[i][PlayerLooseMoney] == false) { Log("%s heal", Name); KickPlayer("Анти-чит: %s обнаружен чит на жизни, кик", Name, i); } if(PlayerHealth > Player[i][pHealth] && Player[i][PlayerLooseMoney] == true) { _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); } if(PlayerHealth < Player[i][pHealth]) { _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); } } Player[i][PlayerLooseMoney] = false; Player[i][GatHealth] = false; } else { GetPlayerHealth(i, PlayerHealth); _ANTICHEAT_SetPlayerHealth(i, PlayerHealth); } // анти брони if(AnticheatInfo[2][aValue] == 1) { if(Player[i][GatArmour] == false) { GetPlayerArmour(i, PlayerArmour); if(PlayerArmour > Player[i][pArmour]) { Log("%s armor", Name); KickPlayer("Анти-чит: %s обнаружен чит на броню, кик", Name, i); } if(PlayerArmour < Player[i][pArmour]) { _ANTICHEAT_SetPlayerArmour(i, PlayerArmour); } } Player[i][GatArmour] = false; } else { GetPlayerArmour(i, PlayerArmour); _ANTICHEAT_SetPlayerArmour(i, PlayerArmour); } } return true; }
function _ANTICHEAT_ChangeAnticheatTimer(interval) { KillTimer(timer); timer = SetTimer("_ANTICHEAT_Main", interval * 1000, true); return true; }
{ new log[256]; new _ANTICHEAT_Year, _ANTICHEAT_Month, _ANTICHEAT_Day; getdate(_ANTICHEAT_Year, _ANTICHEAT_Month, _ANTICHEAT_Day); format(log, sizeof(log), "%d.%d.%d: %s\n", _ANTICHEAT_Day, _ANTICHEAT_Month, _ANTICHEAT_Year, string); new File:_ANTICHEAT_file = fopen("Anticheat.log", io_append); fwrite(_ANTICHEAT_file, log); fclose(_ANTICHEAT_file); } урок by - 26_RUSSS
zm-jail.ru Разработка сайта samp-pawno.ru
|
|
|
|