Advertisement
Guest User

Untitled

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