Advertisement
Guest User

Untitled

a guest
Jul 5th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.37 KB | None | 0 0
  1. //////////////////////////////////////////////
  2. // ** Copyright (c) Cartman# ** //
  3. // ** All right reserved! ** //
  4. // ** Please not remove this credits. ** //
  5. //////////////////////////////////////////////
  6. // ============> INCLUDES <============ //
  7. #include <a_samp>
  8. #define CARTMAN# COPYRITGHT_CREATOR
  9. #define VERSION Y
  10. #include <cartman#_protection>
  11. #include <sscanf>
  12. #pragma unused iForbiddenVehicles
  13.  
  14. // ============> ANTI-CHEAT <============ //
  15. // SETARI: 1 -> ON; 0 -> OFF !
  16. #define AC_WEAPONHACK 1
  17. #define AC_MONEYHACK 1
  18. #define AC_TELEPORTHACK 1
  19. #define AC_SPEEDHACK 1
  20. #define AC_HEALTHHACK 1
  21. #define AC_ARMOURHACK 1
  22. #define AC_VEHICLEHEALTHHACK 1
  23. #define AC_FAKEKILLHACK 1
  24. #define AC_AIRBREAKHACK 1
  25. #define AC_CARSPAWNHACK 0
  26.  
  27. // ============> MAX_PING <============ //
  28.  
  29. //new MAX_PING = 300; // Il poti schimba de aici daca este nevoie.
  30.  
  31. // ============> NEWS & ENUMS <============ //
  32. new Same_IP=0,Join_Stamp,ban_s[25],exceed=0;
  33. new var[MAX_PLAYERS] = {-1,...}, warns[MAX_PLAYERS] = {0,...}, bool:npc[MAX_PLAYERS] = {false,...}, MAX_PLAYERS_ = MAX_PLAYERS;
  34.  
  35. enum LIST_ANTIFLOOD
  36. {
  37. lastCheck,
  38. floodRate
  39. }
  40. new AntiFlood_Data[MAX_PLAYERS][LIST_ANTIFLOOD];
  41.  
  42. // ============> PUBLICS & FUNCTIONS <============ //
  43. public OnFilterScriptInit()
  44. {
  45. for ( new playerid; playerid < MAX_PLAYERS; playerid++ )
  46. {
  47. if ( IsPlayerConnected( playerid ) )
  48. AntiFlood_InitPlayer( playerid );
  49. }
  50. SetTimer("PingCheck", 10000, true);
  51. tmrAntiCheat_01 = SetTimer("DCAntiCheat_Thread01", 100, true);
  52. tmrAntiCheat_02 = SetTimer("DCAntiCheat_Thread02", 2000, true);
  53. return 1;
  54. }
  55.  
  56.  
  57. public OnFilterScriptExit()
  58. {
  59. KillTimer(tmrAntiCheat_01);
  60. KillTimer(tmrAntiCheat_02);
  61. return 1;
  62. }
  63.  
  64. public OnPlayerRequestClass(playerid, classid)
  65. {
  66. if(!PlayerSelecting[playerid])
  67. PlayerSelecting[playerid] = 1;
  68.  
  69. return 1;
  70. }
  71.  
  72. public OnPlayerSpawn(playerid)
  73. {
  74. if(PlayerSelecting[playerid])
  75. PlayerSelecting[playerid] = 0;
  76.  
  77. return 1;
  78. }
  79.  
  80. stock Float:GetPlayerSpeedXY(playerid)
  81. {
  82. new Float:SpeedX, Float:SpeedY, Float:SpeedZ;
  83. new Float:Speed;
  84.  
  85. if(IsPlayerInAnyVehicle(playerid)) GetVehicleVelocity(GetPlayerVehicleID(playerid), SpeedX, SpeedY, SpeedZ);
  86. else GetPlayerVelocity(playerid, SpeedX, SpeedY, SpeedZ);
  87.  
  88. Speed = floatsqroot(floatadd(floatpower(SpeedX, 2.0), floatpower(SpeedY, 2.0)));
  89.  
  90. return floatmul(Speed, 200.0);
  91. }
  92.  
  93. forward PlayerHasMoved(playerid);
  94. public PlayerHasMoved(playerid)
  95. {
  96. if(fCurrentPos[playerid][0] == fOldPos[playerid][0] &&
  97. fCurrentPos[playerid][1] == fOldPos[playerid][1] &&
  98. fCurrentPos[playerid][2] == fOldPos[playerid][2])
  99. return 0;
  100.  
  101. return 1;
  102. }
  103.  
  104. HandlePlayer_Message(playerid)
  105. {
  106. new Name[MAX_PLAYER_NAME+1];
  107. new string[256];
  108.  
  109. GetPlayerName(playerid, Name, sizeof(Name));
  110.  
  111. dini_IntSet(szServerFile, "anticheat_killed", (dini_Int(szServerFile, "anticheat_killed") + 1));
  112.  
  113. format(string, sizeof(string), "%s (%d) a fost omorat deoarece folosea coduri. Acum are %s morti cauzate de coduri.", Name, playerid, dini_Get(szServerFile, "anticheat_killed"));
  114. SendClientMessageToAll(COLOR_DARKRED, string);
  115.  
  116. format(string, sizeof(string), "* %s (%d) a parasit servereul. (Kicked)", Name, playerid);
  117. SendClientMessage(playerid, COLOR_GREY, string);
  118. }
  119.  
  120. HandlePlayer(playerid, reason)
  121. {
  122. new Name[MAX_PLAYER_NAME+1];
  123. new string[128];
  124.  
  125. ResetPlayerWeapons(playerid);
  126. ResetPlayerMoney(playerid);
  127.  
  128. SetPlayerInterior(playerid, 6);
  129. SetPlayerFacingAngle(playerid, 260);
  130. GetPlayerName(playerid, Name, sizeof(Name));
  131. SetPlayerPos(playerid , 264.2752, 81.9539, 1001.0391);
  132.  
  133. switch(reason) {
  134. case WEAPON_HACK: {
  135. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Weapon Hack)", Name, playerid);
  136. SendClientMessageToAll(COLOR_PINK, string);
  137.  
  138. HandlePlayer_Message(playerid);
  139. BanEx(playerid, "Weapon Hack");
  140. }
  141. case MONEY_HACK: {
  142. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Money Hack)", Name, playerid);
  143. SendClientMessageToAll(COLOR_PINK, string);
  144.  
  145. HandlePlayer_Message(playerid);
  146. BanEx(playerid, "Money Hack");
  147. }
  148. case TELEPORT_HACK: {
  149. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Teleport Hack)", Name, playerid);
  150. SendClientMessageToAll(COLOR_PINK, string);
  151.  
  152. HandlePlayer_Message(playerid);
  153. BanEx(playerid, "Teleport Hack");
  154. }
  155. case SPEED_HACK: {
  156. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Speed Hack)", Name, playerid);
  157. SendClientMessageToAll(COLOR_PINK, string);
  158.  
  159. HandlePlayer_Message(playerid);
  160. BanEx(playerid, "Speed Hack");
  161. }
  162. case HEALTH_HACK: {
  163. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Health Hack)", Name, playerid);
  164. SendClientMessageToAll(COLOR_PINK, string);
  165.  
  166. HandlePlayer_Message(playerid);
  167. BanEx(playerid, "Health Hack");
  168. }
  169. case ARMOUR_HACK: {
  170. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Armour Hack)", Name, playerid);
  171. SendClientMessageToAll(COLOR_PINK, string);
  172.  
  173. HandlePlayer_Message(playerid);
  174. BanEx(playerid, "Armour Hack");
  175. }
  176. case VEHICLEHEALTH_HACK: {
  177. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Vehicle Health Hack)", Name, playerid);
  178. SendClientMessageToAll(COLOR_PINK, string);
  179.  
  180. HandlePlayer_Message(playerid);
  181. BanEx(playerid, "Vehicle Health Hack");
  182. }
  183. case FAKEKILL_HACK: {
  184. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Fake-kill Hack)", Name, playerid);
  185. SendClientMessageToAll(COLOR_PINK, string);
  186.  
  187. HandlePlayer_Message(playerid);
  188. BanEx(playerid, "Fake-kill Hack");
  189. }
  190. case AIRBREAK_HACK: {
  191. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Airbreak Hack)", Name, playerid);
  192. SendClientMessageToAll(COLOR_PINK, string);
  193.  
  194. HandlePlayer_Message(playerid);
  195. BanEx(playerid, "Airbreak Hack");
  196. }
  197. case CARSPAWN_HACK: {
  198. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri! (Car Spawn Hack)", Name, playerid);
  199. SendClientMessageToAll(COLOR_PINK, string);
  200.  
  201. HandlePlayer_Message(playerid);
  202. BanEx(playerid, "Car Spawn Hack");
  203. }
  204. default: {
  205. format(string, sizeof(string), "SERVER: %s (%d)a primit ban deoarece a fost prins cu coduri!", Name, playerid);
  206. SendClientMessageToAll(COLOR_PINK, string);
  207.  
  208. HandlePlayer_Message(playerid);
  209. BanEx(playerid, "Unknown Hack");
  210. }
  211. }
  212. }
  213.  
  214. public OnPlayerText(playerid, text[])
  215. {
  216. assert( AntiFlood_Check( playerid ) );
  217.  
  218. if(strfind(text, "samp.", true) != -1 || strfind(text, "gta.", true) != -1 || strfind(text, "samp,", true) != -1 || strfind(text, "gta,", true) != -1 || strfind(text, "s-a-m-p.", true) != -1 || strfind(text, "g-t-a.", true) != -1 ||
  219. strfind(text, "s-a-m-p,", true) != -1 || strfind(text, "g-t-a,", true) != -1 || strfind(text, "[s][a][m][p].", true) != -1 || strfind(text, "[g][t][a].", true) != -1 || strfind(text, "sampx.", true) != -1 || strfind(text, "gtax", true) != -1 ||
  220. strfind(text, ".ro", true) != -1 || strfind(text, ".com", true) != -1 || strfind(text, ".net", true) != -1 || strfind(text, ".org", true) != -1 || strfind(text, ".tk", true) != -1 ||
  221. strfind(text, ",ro", true) != -1 || strfind(text, ",com", true) != -1 || strfind(text, ",net", true) != -1 || strfind(text, ",org", true) != -1 || strfind(text, ",tk", true) != -1 ||
  222. strfind(text, ".-r-o", true) != -1 || strfind(text, ".-c-o-m", true) != -1 || strfind(text, ".-n-e-t", true) != -1 || strfind(text, ".-o-r-g", true) != -1 || strfind(text, ".-t-k", true) != -1 || strfind(text, ":7777", true) != -1)
  223. {
  224. new sendername[MAX_PLAYER_NAME];
  225. new string[256];
  226. GetPlayerName(playerid, sendername, 24);
  227. format(string, sizeof(string), "SERVER: %s a fost deconectat, motiv: Reclama.", sendername);
  228. SendClientMessageToAll(COLOR_LIGHTRED, string);
  229. TogglePlayerControllable(playerid, 0);
  230. Kick(playerid);
  231. return 0;
  232. }
  233. return 1;
  234. }
  235.  
  236. public OnPlayerConnect(playerid)
  237. {
  238. new name[MAX_PLAYER_NAME];
  239. new string[32];
  240. GetPlayerName(playerid, name, sizeof(name));
  241. if(!strfind("samp.", name, true) || !strfind("gta.", name, true) || !strfind("samp,", name, true) || !strfind("gta,", name, true) || !strfind("s-a-m-p.", name, true) || !strfind("g-t-a.", name, true) ||
  242. !strfind("s-a-m-p,", name, true) || !strfind("g-t-a,", name, true) || !strfind("[s][a][m][p].", name, true) || !strfind("[g][t][a].", name, true) || !strfind("sampx.", name, true) || !strfind("gtax", name, true) ||
  243. !strfind(".ro", name, true) || !strfind(".com", name, true) || !strfind(".net", name, true) || !strfind(".org", name, true) || !strfind(".tk", name, true) ||
  244. !strfind(",ro", name, true) || !strfind(",com", name, true) || !strfind(",net", name, true) || !strfind(",org", name, true) || !strfind(",tk", name, true) ||
  245. !strfind(".-r-o", name, true) || !strfind(".-c-o-m", name, true) || !strfind(".-n-e-t", name, true) || !strfind(".-o-r-g", name, true) || !strfind(".-t-k", name, true) || !strfind(":7777", name, true))
  246. {
  247. SendClientMessage(playerid, 0xFF0000FF, "* Ai primit ban ip pe acest server.");
  248. format(string, sizeof(string), "banip %s", name);
  249. SendRconCommand(string);
  250. Ban(playerid);
  251. }
  252. if(CountIP(GetIP(playerid)) >= 6) return BanAll(playerid), 0;
  253. MAX_PLAYERS_ = playerid > MAX_PLAYERS_ ? playerid : GetHighestID(),
  254. npc[playerid] = bool:IsPlayerNPC(playerid),
  255. var[playerid] = SetTimerEx("BSS",2500,false,"i",playerid),
  256. warns[playerid] = 0;
  257. AntiFlood_InitPlayer( playerid );
  258. new ConnIP[16];
  259. GetPlayerIp(playerid,ConnIP,16);
  260. new compare_IP[16];
  261. new number_IP = 0;
  262. for(new i=0; i<MAX_PLAYERS; i++) {
  263. if(IsPlayerConnected(i)) {
  264. GetPlayerIp(i,compare_IP,16);
  265. if(!strcmp(compare_IP,ConnIP)) number_IP++;
  266. }
  267. }
  268. if((GetTickCount() - Join_Stamp) < Time_Limit)
  269. exceed=1;
  270. else
  271. exceed=0;
  272. if(strcmp(ban_s, ConnIP, false) == 0 && exceed == 1 )
  273. {
  274. Same_IP++;
  275. if(Same_IP > SAME_IP_CONNECT)
  276. {
  277. Ban(playerid);
  278. Same_IP=0;
  279. }
  280. }
  281. else
  282. {
  283. Same_IP=0;
  284. }
  285. if(number_IP > IP_LIMIT)
  286. Kick(playerid);
  287. GetStampIP(playerid);
  288. Warning[playerid] = 0;
  289. return 1;
  290.  
  291. }
  292.  
  293. public OnPlayerDisconnect(playerid, reason)
  294. {
  295. MAX_PLAYERS_ = GetHighestID(playerid);
  296. if(npc[playerid]) npc[playerid] = false;
  297. if(var[playerid] != -1)
  298. {
  299. KillTimer(var[playerid]);
  300. var[playerid] = -1;
  301. }
  302. warns[playerid] = 0;
  303. ServerCash[playerid] = 0;
  304. ClientCash[playerid] = 0;
  305. Difference[playerid] = 0;
  306. PlayerSelecting[playerid] = 0;
  307.  
  308. fCurrentPos[playerid][0] = 0;
  309. fCurrentPos[playerid][1] = 0;
  310. fCurrentPos[playerid][2] = 0;
  311.  
  312. fOldPos[playerid][0] = 0;
  313. fOldPos[playerid][1] = 0;
  314. fOldPos[playerid][2] = 0;
  315.  
  316. PlayerUsedVehicle[playerid] = 0;
  317. return 1;
  318. }
  319.  
  320. public OnPlayerCommandText( playerid, cmdtext[] )
  321. {
  322. assert( AntiFlood_Check( playerid ) );
  323. return 0;
  324. }
  325.  
  326. public OnPlayerDeath( playerid, killerid, reason )
  327. {
  328. assert( AntiFlood_Check( playerid ) );
  329. if(!reason)
  330. return 1;
  331.  
  332. #if defined AC_FAKEKILLHACK
  333. // Anti Fake-Kill
  334. if(killerid == INVALID_PLAYER_ID)
  335. return 1;
  336.  
  337. if(!IsPlayerStreamedIn(playerid, killerid)) {
  338. if(GetPlayerWeapon(killerid) != reason) {
  339. HandlePlayer(killerid, FAKEKILL_HACK);
  340. return 1;
  341. }
  342. }
  343. #endif
  344. return 1;
  345. }
  346.  
  347. AntiFlood_Check( playerid, bool:inc=true )
  348. {
  349. AntiFlood_Data[playerid][floodRate] += inc ? RATE_INC : 0;
  350. AntiFlood_Data[playerid][floodRate] = AntiFlood_Data[playerid][floodRate] - ( GetTickCount() - AntiFlood_Data[playerid][lastCheck] );
  351. AntiFlood_Data[playerid][lastCheck] = GetTickCount();
  352. AntiFlood_Data[playerid][floodRate] = AntiFlood_Data[playerid][floodRate] < 0 ? 0 : AntiFlood_Data[playerid][floodRate];
  353.  
  354. if ( AntiFlood_Data[playerid][floodRate] >= RATE_MAX )
  355. {
  356. #if THRESOLD_ACTION == 1
  357. new msg[64], name[MAX_PLAYER_NAME];
  358.  
  359. GetPlayerName( playerid, name, sizeof( name ) );
  360.  
  361. format( msg, sizeof( msg ), "SERVER: %s a primit ban pentru tentativa de flood.", name );
  362.  
  363. SendClientMessageToAll( 0xEE9911FF, msg );
  364.  
  365. Ban( playerid );
  366. #elseif THRESOLD_ACTION == 2
  367. new msg[64], name[MAX_PLAYER_NAME];
  368.  
  369. GetPlayerName( playerid, name, sizeof( name ) );
  370.  
  371. format( msg, sizeof( msg ), "SERVER: %s a primit ban pentru tentativa de flood.", name );
  372.  
  373. SendClientMessageToAll( 0xEE9911FF, msg );
  374.  
  375. Kick( playerid );
  376. #else
  377. SendClientMessage( playerid, 0xC00000FF, "Stop flooding." );
  378. #endif
  379.  
  380. return false;
  381. }
  382.  
  383. return true;
  384. }
  385.  
  386. AntiFlood_InitPlayer( playerid )
  387. {
  388. AntiFlood_Data[playerid][lastCheck] = GetTickCount();
  389. AntiFlood_Data[playerid][floodRate] = 0;
  390. }
  391.  
  392.  
  393. forward OnPlayerTeamPrivmsg( playerid, text[] );
  394. public OnPlayerTeamPrivmsg( playerid, text[] )
  395. {
  396. assert( AntiFlood_Check( playerid ) );
  397. return 1;
  398. }
  399.  
  400. stock GetStampIP(playerid){
  401. new S_IP[16];
  402. Join_Stamp=GetTickCount();
  403. GetPlayerIp(playerid,S_IP,16);
  404. format(ban_s, 16, "%s", S_IP);
  405. }
  406.  
  407. stock CountIP(ip[])
  408. {
  409. new c = 0;
  410. for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && !strcmp(GetIP(i),ip)) c++;
  411. return c;
  412. }
  413.  
  414. forward BSS(playerid);
  415. public BSS(playerid)
  416. {
  417. new i = GetPlayerPing(playerid);
  418. if(i <= 0 || i >= 50000)
  419. {
  420. if(warns[playerid] >= 1) BanAll(playerid);
  421. else warns[playerid]++, var[playerid] = SetTimerEx("BSS",1500,false,"i",playerid);
  422. }
  423. return 0;
  424. }
  425. stock GetIP(playerid)
  426. {
  427. new ip[16];
  428. GetPlayerIp(playerid,ip,sizeof(ip));
  429. return ip;
  430. }
  431.  
  432. stock BanAll(playerid)
  433. {
  434. new ip[32];
  435. GetPlayerIp(playerid,ip,sizeof(ip));
  436. for(new i = 0, p = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && !npc[i])
  437. {
  438. p = GetPlayerPing(i);
  439. if(i == playerid || !strcmp(ip,GetIP(i)) || p <= 0 || p >= 50000)
  440. {
  441. BanEx(i,"Bot");
  442. if(var[i] != -1)
  443. {
  444. KillTimer(var[i]);
  445. var[i] = -1;
  446. }
  447. }
  448. }
  449. format(ip,sizeof(ip),"banip %s",ip);
  450. return SendRconCommand(ip);
  451. }
  452.  
  453. stock GetHighestID(exceptof = INVALID_PLAYER_ID)
  454. {
  455. new h = 0;
  456. for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i) && i != exceptof && i > h) h = i;
  457. return h;
  458. }
  459.  
  460. /*forward PingCheck();
  461. public PingCheck()
  462. {
  463. for(new i=0;i < MAX_PLAYERS;i++)
  464. {
  465. if(IsPlayerConnected(i))
  466. {
  467. OnPlayerPingUpdate(i);
  468. }
  469. }
  470. return 1;
  471. }*/
  472.  
  473. /*OnPlayerPingUpdate(playerid)
  474. {
  475. new String[128], PlayerName[MAX_PLAYER_NAME];
  476. GetPlayerName(playerid, PlayerName, MAX_PLAYER_NAME);
  477. if(GetPlayerPing(playerid) < MAX_PING - 300)
  478. {
  479. return 1;
  480. }
  481. if(GetPlayerPing(playerid) < MAX_PING)
  482. {
  483. switch(Warning[playerid])
  484. {
  485. case 0:
  486. {
  487. format(String, sizeof(String), "{FF0000}SERVER:{FFFFFF} Ping-ul tau este: %d.", GetPlayerPing(playerid));
  488. SendClientMessage(playerid, -1, String);
  489. SendClientMessage(playerid, -1, "{FF0000}SERVER:{FFFFFF} Te rog redu acest lag, altfel vei fi deconectat. (ai 1/3 avertizari)");
  490. Warning[playerid] ++;
  491. }
  492. case 1:
  493. {
  494. format(String, sizeof(String), "{FF0000}SERVER:{FFFFFF} Ping-ul tau este: %d.", GetPlayerPing(playerid));
  495. SendClientMessage(playerid, -1, String);
  496. SendClientMessage(playerid, -1, "{FF0000}SERVER:{FFFFFF} Te rog redu acest lag, altfel vei fi deconectat. (ai 2/3 avertizari)");
  497. Warning[playerid] ++;
  498. }
  499. case 2:
  500. {
  501. format(String, sizeof(String), "{FF0000}SERVER:{FFFFFF} Ping-ul tau este: %d.", GetPlayerPing(playerid));
  502. SendClientMessage(playerid, -1, String);
  503. SendClientMessage(playerid, -1, "{FF0000}SERVER:{FFFFFF} Ai fost deconectat deoarece ai pingul prea mare.");
  504. format(String, sizeof(String), "{FF0000}SERVER{FFFFFF} %s a fost deconecat. Motiv: Lag. (%d)", PlayerName, MAX_PING);
  505. SendClientMessageToAll(-1, String);
  506. Warning[playerid] = 0;
  507. Kick(playerid);
  508. }
  509. }
  510. }
  511. return 1;
  512. }*/
  513.  
  514.  
  515. forward AntiCheat_Thread01();
  516. public AntiCheat_Thread01()
  517. {
  518. new Weapons[13][2];
  519. new Name[MAX_PLAYER_NAME+1];
  520. new szPlayerFile[128];
  521.  
  522. for (new i = 0; i < MAX_PLAYERS; i++) {
  523. if(!IsPlayerConnected(i) || IsPlayerAdmin(i) || PlayerSelecting[i])
  524. continue;
  525.  
  526. #if defined AC_WEAPONHACK
  527. // Weapon hack
  528. for (new y = 0; y < 13; y++) {
  529. GetPlayerWeaponData(i, y, Weapons[y][0], Weapons[y][1]);
  530.  
  531. for (new x = 0; x < sizeof(iForbiddenWeapons); x++) {
  532. if(Weapons[y][0] == iForbiddenWeapons[x]) {
  533. HandlePlayer(i, WEAPON_HACK);
  534. break;
  535. }
  536. }
  537. }
  538.  
  539. if(GetPlayerSpecialAction(i) == SPECIAL_ACTION_USEJETPACK) {
  540. HandlePlayer(i, WEAPON_HACK);
  541. break;
  542. }
  543. #endif
  544.  
  545. #if defined AC_TELEPORTHACK
  546. // Teleport hack
  547. new iPlayerInterior = GetPlayerInterior(i);
  548.  
  549. if(iPlayerInterior > 3 && iPlayerInterior != 15) {
  550. HandlePlayer(i, TELEPORT_HACK);
  551. break;
  552. }
  553. #endif
  554.  
  555. #if defined AC_MONEYHACK
  556. // Money hack
  557. GetPlayerName(i, Name, sizeof(Name));
  558. format(szPlayerFile, sizeof(szPlayerFile), "%s.ini", Name);
  559.  
  560. ServerCash[i] = dini_Int(szPlayerFile, "money");
  561. ClientCash[i] = GetPlayerMoney(i);
  562. Difference[i] = ClientCash[i] - ServerCash[i];
  563.  
  564. if(Difference[i] > 5000) {
  565. HandlePlayer(i, MONEY_HACK);
  566. break;
  567. }
  568. #endif
  569.  
  570. // Health and armour hack
  571. #if defined AC_HEALTHHACK
  572. new Float:PlayerHealth;
  573. GetPlayerHealth(i, PlayerHealth);
  574.  
  575. if(PlayerHealth > 100) { HandlePlayer(i, HEALTH_HACK); break; }
  576. #endif
  577.  
  578. #if defined AC_ARMOURHACK
  579. new Float:PlayerArmour;
  580. GetPlayerArmour(i, PlayerArmour);
  581.  
  582. if(PlayerArmour > 100) { HandlePlayer(i, ARMOUR_HACK); break; }
  583. #endif
  584.  
  585. // Speed hack (on foot & vehicle) and vehicle health hack
  586. new Float:VehicleHealth;
  587.  
  588. if(IsPlayerInAnyVehicle(i) && GetPlayerState(i) == PLAYER_STATE_DRIVER) {
  589. #if defined AC_VEHICLEHEALTHHACK
  590. GetVehicleHealth(GetPlayerVehicleID(i), VehicleHealth);
  591.  
  592. // Vehicle health hack
  593. if(VehicleHealth > 1000.0) {
  594. HandlePlayer(i, VEHICLEHEALTH_HACK);
  595. break;
  596. }
  597. #endif
  598.  
  599. #if defined AC_SPEEDHACK
  600. // Speed hack
  601. if(GetPlayerSpeedXY(i) > 260.0) {
  602. HandlePlayer(i, SPEED_HACK);
  603. break;
  604. }
  605. #endif
  606. }
  607. }
  608. return 1;
  609. }
  610.  
  611. forward AntiCheat_Thread02();
  612. public AntiCheat_Thread02()
  613. {
  614. #if defined AC_AIRBREAKHACK
  615. for (new i = 0; i < MAX_PLAYERS; i++) {
  616. if(!IsPlayerConnected(i) || IsPlayerAdmin(i) || PlayerSelecting[i])
  617. continue;
  618.  
  619. if(!IsPlayerInAnyVehicle(i) && GetPlayerState(i) != PLAYER_STATE_DRIVER) {
  620. // Airbreak detection
  621. GetPlayerPos(i, fCurrentPos[i][0], fCurrentPos[i][1], fCurrentPos[i][2]);
  622.  
  623. if(!fOldPos[i][0] && !fOldPos[i][1] && !fOldPos[i][2]) {
  624. GetPlayerPos(i, fOldPos[i][0], fOldPos[i][1], fOldPos[i][2]);
  625. continue;
  626. }
  627.  
  628. if(!PlayerHasMoved(i))
  629. continue;
  630.  
  631. new Float:fPosDiff_X = fCurrentPos[i][0] - fOldPos[i][0];
  632. new Float:fPosDiff_Y = fCurrentPos[i][1] - fOldPos[i][1];
  633. new Float:fPosDiff_Z = fCurrentPos[i][2] - fOldPos[i][2];
  634.  
  635. GetPlayerPos(i, fOldPos[i][0], fOldPos[i][1], fOldPos[i][2]);
  636.  
  637. if(fPosDiff_X >= MAX_SPEED_INCREASE || fPosDiff_X <= -MAX_SPEED_INCREASE ||
  638. fPosDiff_Y >= MAX_SPEED_INCREASE || fPosDiff_Y <= -MAX_SPEED_INCREASE ||
  639. fPosDiff_Z >= MAX_SPEED_INCREASE || fPosDiff_Z <= -MAX_SPEED_INCREASE) {
  640.  
  641. HandlePlayer(i, AIRBREAK_HACK);
  642. break;
  643. }
  644. }
  645. }
  646. #endif
  647. return 1;
  648. }
  649.  
  650. public OnPlayerUpdate(playerid)
  651. {
  652. if(IsPlayerInAnyVehicle(playerid)) {
  653. #if defined AC_AIRBREAKHACK
  654. if(!PlayerUsedVehicle[playerid])
  655. PlayerUsedVehicle[playerid] = 1;
  656. #endif
  657. } else {
  658. #if defined AC_AIRBREAKHACK
  659. if(PlayerUsedVehicle[playerid]) {
  660. PlayerUsedVehicle[playerid] = 0;
  661. GetPlayerPos(playerid, fOldPos[playerid][0], fOldPos[playerid][1], fOldPos[playerid][2]);
  662. }
  663. GetPlayerPos(playerid, fCurrentPos[playerid][0], fCurrentPos[playerid][1], fCurrentPos[playerid][2]);
  664.  
  665. if(!PlayerHasMoved(playerid))
  666. return 1;
  667.  
  668. #endif
  669. }
  670.  
  671. return 1;
  672. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement