Advertisement
Guest User

Untitled

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