anticheat.inc 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819
  1. /*
  2. * Noble Roleplay Anticheat
  3. * Last Update: 09/25/2016 @ 06:48 AM
  4. */
  5. enum {
  6. CHEAT_WEAPON,
  7. CHEAT_AMMO,
  8. CHEAT_HEALTH,
  9. CHEAT_ARMOUR,
  10. CHEAT_NORELOAD,
  11. CHEAT_TELEPORT,
  12. CHEAT_AIRBREAK,
  13. CHEAT_VEHICLEWARP,
  14. CHEAT_VEHICLEHEALTH
  15. };
  16. enum E_ANTICHEAT_ENUM {
  17. acTimer,
  18. acWeapons[13],
  19. acAmmo[13],
  20. acImmunity,
  21. acAirbreakTime,
  22. acFired,
  23. Float:acHealth,
  24. Float:acArmour,
  25. Float:acSpawnX,
  26. Float:acSpawnY,
  27. Float:acSpawnZ,
  28. Float:acPosX,
  29. Float:acPosY,
  30. Float:acPosZ,
  31. acCurrentWeapon,
  32. acCurrentVehicle,
  33. acVehicleTime,
  34. acVehicleSpam
  35. };
  36. static
  37. Anticheat[MAX_PLAYERS][E_ANTICHEAT_ENUM],
  38. Float:VehicleHealth[MAX_VEHICLES] = {1000.0, ...},
  39. VehicleDamage[MAX_VEHICLES][4]
  40. ;
  41. static const acWeaponSlotIDs[] = {
  42. 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 10, 10, 10, 10, 8, 8, 8, 0,
  43. 0, 0, 2, 2, 2, 3, 3, 3, 4, 4, 5, 5, 4, 6, 6, 7, 7, 7, 7, 8, 12,
  44. 9, 9, 9, 11, 11, 11
  45. };
  46. static const Float:acRepairShops[][] = {
  47. {2065.1960, -1831.4946, 13.5469},
  48. {1025.0665, -1024.4612, 32.1016},
  49. {720.1285, -457.2187, 16.3359},
  50. {-100.0488, 1117.3574, 19.7417},
  51. {-1420.5437, 2585.5051, 55.8433},
  52. {-2425.8203, 1022.0131, 50.3977},
  53. {-1904.3649, 284.2363, 41.0469},
  54. {1974.4723, 2162.3350, 11.0703}
  55. };
  56. forward OnPlayerCheatDetected(playerid, type);
  57. stock AC_PutPlayerInVehicle(playerid, vehicleid, seatid)
  58. {
  59. if(IsPlayerConnected(playerid))
  60. {
  61. if(GetVehicleModel(vehicleid))
  62. {
  63. GetVehiclePos(vehicleid, Anticheat[playerid][acPosX], Anticheat[playerid][acPosY], Anticheat[playerid][acPosZ]);
  64. Anticheat[playerid][acCurrentVehicle] = vehicleid;
  65. }
  66. else
  67. {
  68. Anticheat[playerid][acCurrentVehicle] = 0;
  69. }
  70. Anticheat[playerid][acImmunity] = gettime() + 1;
  71. }
  72. return PutPlayerInVehicle(playerid, vehicleid, seatid);
  73. }
  74. stock AC_SetPlayerHealth(playerid, Float:value)
  75. {
  76. if(IsPlayerConnected(playerid))
  77. {
  78. Anticheat[playerid][acHealth] = value;
  79. Anticheat[playerid][acImmunity] = gettime() + 1;
  80. }
  81. return SetPlayerHealth(playerid, value);
  82. }
  83. stock AC_SetPlayerArmour(playerid, Float:value)
  84. {
  85. if(IsPlayerConnected(playerid))
  86. {
  87. Anticheat[playerid][acArmour] = value;
  88. Anticheat[playerid][acImmunity] = gettime() + 1;
  89. }
  90. return SetPlayerArmour(playerid, value);
  91. }
  92. stock AC_SetPlayerAmmo(playerid, weaponid, ammo)
  93. {
  94. if(Anticheat[playerid][acWeapons][acWeaponSlotIDs[weaponid]] == weaponid)
  95. {
  96. Anticheat[playerid][acAmmo][acWeaponSlotIDs[weaponid]] = ammo;
  97. Anticheat[playerid][acImmunity] = gettime() + 1;
  98. }
  99. return SetPlayerAmmo(playerid, weaponid, ammo);
  100. }
  101. stock AC_GivePlayerWeapon(playerid, weaponid, ammo)
  102. {
  103. if(IsPlayerConnected(playerid))
  104. {
  105. Anticheat[playerid][acWeapons][acWeaponSlotIDs[weaponid]] = weaponid;
  106. Anticheat[playerid][acAmmo][acWeaponSlotIDs[weaponid]] += ammo;
  107. Anticheat[playerid][acImmunity] = gettime() + 1;
  108. }
  109. return GivePlayerWeapon(playerid, weaponid, ammo);
  110. }
  111. stock AC_ResetPlayerWeapons(playerid)
  112. {
  113. new
  114. ret = ResetPlayerWeapons(playerid);
  115. if(ret)
  116. {
  117. for(new i = 0; i < 13; i ++)
  118. {
  119. Anticheat[playerid][acWeapons][i] = 0;
  120. Anticheat[playerid][acAmmo][i] = 0;
  121. }
  122. Anticheat[playerid][acImmunity] = gettime() + 1;
  123. }
  124. return ret;
  125. }
  126. stock AC_SetPlayerArmedWeapon(playerid, weaponid)
  127. {
  128. new
  129. ret = SetPlayerArmedWeapon(playerid, weaponid);
  130. if(ret)
  131. {
  132. Anticheat[playerid][acCurrentWeapon] = weaponid;
  133. Anticheat[playerid][acFired] = 0;
  134. Anticheat[playerid][acImmunity] = gettime() + 1;
  135. }
  136. return ret;
  137. }
  138. stock AC_SetPlayerPos(playerid, Float:x, Float:y, Float:z)
  139. {
  140. new
  141. ret = SetPlayerPos(playerid, x, y, z);
  142. if(ret)
  143. {
  144. Anticheat[playerid][acPosX] = x;
  145. Anticheat[playerid][acPosY] = y;
  146. Anticheat[playerid][acPosZ] = z;
  147. Anticheat[playerid][acImmunity] = gettime() + 1;
  148. }
  149. return ret;
  150. }
  151. stock AC_SetVehiclePos(vehicleid, Float:x, Float:y, Float:z)
  152. {
  153. new
  154. ret = SetVehiclePos(vehicleid, x, y, z);
  155. if(ret)
  156. {
  157. for(new i = 0, l = GetPlayerPoolSize(); i <= l; i ++)
  158. {
  159. if(GetPlayerState(i) == PLAYER_STATE_DRIVER && IsPlayerInVehicle(i, vehicleid))
  160. {
  161. Anticheat[i][acPosX] = x;
  162. Anticheat[i][acPosY] = y;
  163. Anticheat[i][acPosZ] = z;
  164. Anticheat[i][acImmunity] = gettime() + 1;
  165. break;
  166. }
  167. }
  168. }
  169. return ret;
  170. }
  171. stock AC_SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
  172. {
  173. if(IsPlayerConnected(playerid))
  174. {
  175. Anticheat[playerid][acSpawnX] = x;
  176. Anticheat[playerid][acSpawnY] = y;
  177. Anticheat[playerid][acSpawnZ] = z;
  178. }
  179. return SetSpawnInfo(playerid, team, skin, x, y, z, rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
  180. }
  181. stock AC_SetVehicleHealth(vehicleid, Float:health)
  182. {
  183. if(GetVehicleModel(vehicleid))
  184. {
  185. VehicleHealth[vehicleid] = health;
  186. }
  187. for(new i = 0; i <= GetPlayerPoolSize(); i ++)
  188. {
  189. if(GetPlayerState(i) == PLAYER_STATE_DRIVER && IsPlayerInVehicle(i, vehicleid))
  190. {
  191. Anticheat[i][acImmunity] = gettime() + 1;
  192. break;
  193. }
  194. }
  195. return SetVehicleHealth(vehicleid, health);
  196. }
  197. stock AC_RepairVehicle(vehicleid)
  198. {
  199. if(GetVehicleModel(vehicleid))
  200. {
  201. VehicleHealth[vehicleid] = 1000.0;
  202. VehicleDamage[vehicleid][0] = 0;
  203. VehicleDamage[vehicleid][1] = 0;
  204. VehicleDamage[vehicleid][2] = 0;
  205. VehicleDamage[vehicleid][3] = 0;
  206. }
  207. for(new i = 0; i <= GetPlayerPoolSize(); i ++)
  208. {
  209. if(GetPlayerState(i) == PLAYER_STATE_DRIVER && IsPlayerInVehicle(i, vehicleid))
  210. {
  211. Anticheat[i][acImmunity] = gettime() + 1;
  212. break;
  213. }
  214. }
  215. return RepairVehicle(vehicleid);
  216. }
  217. stock AC_UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires)
  218. {
  219. if(GetVehicleModel(vehicleid))
  220. {
  221. VehicleDamage[vehicleid][0] = panels;
  222. VehicleDamage[vehicleid][1] = doors;
  223. VehicleDamage[vehicleid][2] = lights;
  224. VehicleDamage[vehicleid][3] = tires;
  225. }
  226. return UpdateVehicleDamageStatus(vehicleid, panels, doors, lights, tires);
  227. }
  228. static AC_PlayerHasWeapon(playerid, weaponid)
  229. {
  230. switch(weaponid)
  231. {
  232. case 0, 2, 40, 46:
  233. {
  234. return 1;
  235. }
  236. }
  237. for(new i = 0; i < 13; i ++)
  238. {
  239. if(Anticheat[playerid][acWeapons][i] == weaponid)
  240. {
  241. return 1;
  242. }
  243. }
  244. return 0;
  245. }
  246. static AC_IsVehicleBoat(vehicleid)
  247. {
  248. switch(GetVehicleModel(vehicleid))
  249. {
  250. case 430, 446, 452, 453, 454, 472, 473, 484, 493, 595:
  251. {
  252. return 1;
  253. }
  254. }
  255. return 0;
  256. }
  257. static AC_IsPlayerAtRepairShop(playerid)
  258. {
  259. for(new i = 0; i < sizeof(acRepairShops); i ++)
  260. {
  261. if(IsPlayerInRangeOfPoint(playerid, 5.0, acRepairShops[i][0], acRepairShops[i][1], acRepairShops[i][2]))
  262. {
  263. return 1;
  264. }
  265. }
  266. return 0;
  267. }
  268. static AC_RangeCheck(Float:x1, Float:y1, Float:z1, Float:radius, Float:x2, Float:y2, Float:z2)
  269. {
  270. x1 -= x2;
  271. y1 -= y2;
  272. z1 -= z2;
  273. return ((x1 * x1) + (y1 * y1) + (z1 * z1)) < (radius * radius);
  274. }
  275. static Float:AC_GetSpeed(playerid)
  276. {
  277. new
  278. Float:vx,
  279. Float:vy,
  280. Float:vz;
  281. if(IsPlayerInAnyVehicle(playerid))
  282. {
  283. GetVehicleVelocity(GetPlayerVehicleID(playerid), vx, vy, vz);
  284. }
  285. else
  286. {
  287. GetPlayerVelocity(playerid, vx, vy, vz);
  288. }
  289. return floatsqroot((vx * vx) + (vy * vy) + (vz * vz));
  290. }
  291. forward AC_UpdateTimer(playerid);
  292. public AC_UpdateTimer(playerid)
  293. {
  294. new
  295. vehicleid = GetPlayerVehicleID(playerid),
  296. weapon,
  297. ammo;
  298. if(GetPlayerState(playerid) == PLAYER_STATE_SPECTATING)
  299. {
  300. return 0;
  301. }
  302. for(new i = 0; i < 13; i ++)
  303. {
  304. GetPlayerWeaponData(playerid, i, weapon, ammo);
  305. if(weapon > 0 && AC_PlayerHasWeapon(playerid, weapon))
  306. {
  307. if(Anticheat[playerid][acAmmo][i] != ammo && Anticheat[playerid][acAmmo][i] != 0)
  308. {
  309. if(ammo > Anticheat[playerid][acAmmo][i] && gettime() > Anticheat[playerid][acImmunity])
  310. {
  311. if(!(1 <= weapon <= 15) && !(43 <= weapon <= 46) && weapon != 40)
  312. {
  313. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_AMMO);
  314. SetPlayerAmmo(playerid, weapon, Anticheat[playerid][acAmmo][i]);
  315. }
  316. }
  317. }
  318. Anticheat[playerid][acWeapons][i] = weapon;
  319. Anticheat[playerid][acAmmo][i] = ammo;
  320. }
  321. }
  322. if(Anticheat[playerid][acCurrentVehicle] != vehicleid)
  323. {
  324. if((vehicleid != 0 && Anticheat[playerid][acCurrentVehicle] != 0) && Anticheat[playerid][acVehicleTime] > gettime())
  325. {
  326. if(!(AC_IsVehicleBoat(vehicleid) && AC_IsVehicleBoat(Anticheat[playerid][acCurrentVehicle]) && GetVehicleModel(vehicleid) == Anticheat[playerid][acCurrentVehicle]))
  327. {
  328. Anticheat[playerid][acVehicleSpam]++;
  329. if(Anticheat[playerid][acVehicleSpam] >= 2)
  330. {
  331. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_VEHICLEWARP);
  332. Anticheat[playerid][acVehicleSpam] = 0;
  333. }
  334. }
  335. }
  336. Anticheat[playerid][acCurrentVehicle] = vehicleid;
  337. Anticheat[playerid][acVehicleTime] = gettime() + 1;
  338. }
  339. GetPlayerPos(playerid, Anticheat[playerid][acPosX], Anticheat[playerid][acPosY], Anticheat[playerid][acPosZ]);
  340. return 1;
  341. }
  342. public OnPlayerConnect(playerid)
  343. {
  344. for(new i = 0; i < 13; i ++)
  345. {
  346. Anticheat[playerid][acWeapons][i] = 0;
  347. Anticheat[playerid][acAmmo][i] = 0;
  348. }
  349. Anticheat[playerid][acTimer] = SetTimerEx("AC_UpdateTimer", 500, true, "i", playerid);
  350. Anticheat[playerid][acImmunity] = 0;
  351. Anticheat[playerid][acAirbreakTime] = 0;
  352. Anticheat[playerid][acFired] = 0;
  353. Anticheat[playerid][acHealth] = 100.0;
  354. Anticheat[playerid][acArmour] = 0.0;
  355. Anticheat[playerid][acPosX] = 0.0;
  356. Anticheat[playerid][acPosY] = 0.0;
  357. Anticheat[playerid][acPosZ] = 0.0;
  358. Anticheat[playerid][acSpawnX] = 0.0;
  359. Anticheat[playerid][acSpawnY] = 0.0;
  360. Anticheat[playerid][acSpawnZ] = 0.0;
  361. Anticheat[playerid][acCurrentWeapon] = 0;
  362. Anticheat[playerid][acCurrentVehicle] = 0;
  363. Anticheat[playerid][acVehicleTime] = 0;
  364. Anticheat[playerid][acVehicleSpam] = 0;
  365. #if defined AC_OnPlayerConnect
  366. return AC_OnPlayerConnect(playerid);
  367. #else
  368. return 1;
  369. #endif
  370. }
  371. public OnPlayerDisconnect(playerid, reason)
  372. {
  373. KillTimer(Anticheat[playerid][acTimer]);
  374. #if defined AC_OnPlayerDisconnect
  375. return AC_OnPlayerDisconnect(playerid, reason);
  376. #else
  377. return 1;
  378. #endif
  379. }
  380. public OnPlayerSpawn(playerid)
  381. {
  382. Anticheat[playerid][acImmunity] = gettime() + 5;
  383. Anticheat[playerid][acHealth] = 100.0;
  384. Anticheat[playerid][acArmour] = 0.0;
  385. #if defined AC_OnPlayerSpawn
  386. return AC_OnPlayerSpawn(playerid);
  387. #else
  388. return 1;
  389. #endif
  390. }
  391. public OnPlayerUpdate(playerid)
  392. {
  393. if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING && GetPlayerState(playerid) != PLAYER_STATE_NONE)
  394. {
  395. new
  396. Float:health,
  397. Float:armour,
  398. weaponid = GetPlayerWeapon(playerid),
  399. vehicleid = GetPlayerVehicleID(playerid);
  400. GetPlayerHealth(playerid, health);
  401. GetPlayerArmour(playerid, armour);
  402. if(gettime() > Anticheat[playerid][acImmunity])
  403. {
  404. if(!IsPlayerInRangeOfPoint(playerid, 75.0, Anticheat[playerid][acPosX], Anticheat[playerid][acPosY], Anticheat[playerid][acPosZ]) && !IsPlayerInRangeOfPoint(playerid, 5.0, Anticheat[playerid][acSpawnX], Anticheat[playerid][acSpawnY], Anticheat[playerid][acSpawnZ]))
  405. {
  406. new
  407. Float:x,
  408. Float:y,
  409. Float:z;
  410. GetPlayerPos(playerid, x, y, z);
  411. if(!AC_RangeCheck(Anticheat[playerid][acPosX], Anticheat[playerid][acPosY], Anticheat[playerid][acPosZ], 3.0, Anticheat[playerid][acSpawnX], Anticheat[playerid][acSpawnY], Anticheat[playerid][acSpawnZ]) && x != 0.0 && y != 0.0 && z != 0.0 && GetPlayerState(playerid) != PLAYER_STATE_PASSENGER)
  412. {
  413. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_TELEPORT);
  414. }
  415. }
  416. else if(gettime() > Anticheat[playerid][acAirbreakTime] && !IsPlayerInRangeOfPoint(playerid, 10.0, Anticheat[playerid][acPosX], Anticheat[playerid][acPosY], Anticheat[playerid][acPosZ]))
  417. {
  418. if((GetPlayerState(playerid) == PLAYER_STATE_ONFOOT || GetPlayerState(playerid) == PLAYER_STATE_DRIVER) && GetPlayerSurfingVehicleID(playerid) == INVALID_VEHICLE_ID && GetPlayerSurfingObjectID(playerid) == INVALID_OBJECT_ID)
  419. {
  420. // Player is 10.0 meters away from their position. Let's check their velocity!
  421. new
  422. Float:px,
  423. Float:py,
  424. Float:pz;
  425. GetPlayerPos(playerid, px, py, pz);
  426. px = floatabs(Anticheat[playerid][acPosX] - px);
  427. py = floatabs(Anticheat[playerid][acPosY] - py);
  428. pz = floatabs(Anticheat[playerid][acPosZ] - pz);
  429. // Player seems to have moved a great distance. Let's do more checking.
  430. if(((0.5 <= px < 13.9) && (0.5 <= py <= 13.9)) || (4.2 <= pz <= 19.2))
  431. {
  432. new
  433. Float:speed = AC_GetSpeed(playerid);
  434. if((0.082 <= speed <= 0.129 && GetPlayerState(playerid) == PLAYER_STATE_ONFOOT) || (0.0009 <= speed <= 0.0013 && GetPlayerState(playerid) == PLAYER_STATE_DRIVER))
  435. {
  436. // When airbreaking in the air, a player's velocity levels tend to stay at a regular speed, as they were moving onfoot.
  437. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_AIRBREAK);
  438. Anticheat[playerid][acAirbreakTime] = gettime() + 1;
  439. }
  440. }
  441. }
  442. }
  443. if(floatround(health) > floatround(Anticheat[playerid][acHealth]))
  444. {
  445. if(!(Anticheat[playerid][acHealth] == 0.0 && health == 100.0) && health != 0.0)
  446. {
  447. SetPlayerHealth(playerid, Anticheat[playerid][acHealth]);
  448. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_HEALTH);
  449. }
  450. }
  451. if(floatround(armour) > floatround(Anticheat[playerid][acArmour]))
  452. {
  453. SetPlayerArmour(playerid, Anticheat[playerid][acArmour]);
  454. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_ARMOUR);
  455. }
  456. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  457. {
  458. GetVehicleHealth(vehicleid, health);
  459. if(floatround(health) > floatround(VehicleHealth[vehicleid]) && !AC_IsPlayerAtRepairShop(playerid))
  460. {
  461. SetVehicleHealth(vehicleid, VehicleHealth[vehicleid]);
  462. UpdateVehicleDamageStatus(vehicleid, VehicleDamage[vehicleid][0], VehicleDamage[vehicleid][1], VehicleDamage[vehicleid][2], VehicleDamage[vehicleid][3]);
  463. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_VEHICLEHEALTH);
  464. }
  465. }
  466. }
  467. if(Anticheat[playerid][acCurrentWeapon] != weaponid)
  468. {
  469. if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT && !AC_PlayerHasWeapon(playerid, weaponid) && gettime() > Anticheat[playerid][acImmunity])
  470. {
  471. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_WEAPON);
  472. SetPlayerArmedWeapon(playerid, 0);
  473. }
  474. Anticheat[playerid][acCurrentWeapon] = weaponid;
  475. Anticheat[playerid][acFired] = 0;
  476. }
  477. if(GetPlayerWeaponState(playerid) == WEAPONSTATE_RELOADING)
  478. {
  479. Anticheat[playerid][acFired] = 0;
  480. }
  481. GetPlayerPos(playerid, Anticheat[playerid][acPosX], Anticheat[playerid][acPosY], Anticheat[playerid][acPosZ]);
  482. if(gettime() > Anticheat[playerid][acImmunity])
  483. {
  484. if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
  485. {
  486. GetVehicleHealth(vehicleid, VehicleHealth[vehicleid]);
  487. GetVehicleDamageStatus(vehicleid, VehicleDamage[vehicleid][0], VehicleDamage[vehicleid][1], VehicleDamage[vehicleid][2], VehicleDamage[vehicleid][3]);
  488. }
  489. GetPlayerHealth(playerid, Anticheat[playerid][acHealth]);
  490. GetPlayerArmour(playerid, Anticheat[playerid][acArmour]);
  491. }
  492. }
  493. #if defined AC_OnPlayerUpdate
  494. return AC_OnPlayerUpdate(playerid);
  495. #else
  496. return 1;
  497. #endif
  498. }
  499. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  500. {
  501. if(GetPlayerState(playerid) == PLAYER_STATE_ONFOOT)
  502. {
  503. new
  504. ammo = 0;
  505. switch(weaponid)
  506. {
  507. case 22:
  508. ammo = 40;
  509. case 23:
  510. ammo = 22;
  511. case 26:
  512. ammo = 8;
  513. case 24, 27:
  514. ammo = 12;
  515. case 28, 32:
  516. ammo = 115;
  517. case 29, 30:
  518. ammo = 40;
  519. case 31:
  520. ammo = 60;
  521. }
  522. if(ammo > 0)
  523. {
  524. Anticheat[playerid][acFired]++;
  525. if(Anticheat[playerid][acFired] >= ammo)
  526. {
  527. CallLocalFunction("OnPlayerCheatDetected", "ii", playerid, CHEAT_NORELOAD);
  528. Anticheat[playerid][acFired] = 0;
  529. }
  530. }
  531. }
  532. #if defined AC_OnPlayerWeaponShot
  533. return AC_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, fX, fY, fZ);
  534. #else
  535. return 1;
  536. #endif
  537. }
  538. public OnVehicleSpawn(vehicleid)
  539. {
  540. VehicleHealth[vehicleid] = 1000.0;
  541. VehicleDamage[vehicleid][0] = 0;
  542. VehicleDamage[vehicleid][1] = 0;
  543. VehicleDamage[vehicleid][2] = 0;
  544. VehicleDamage[vehicleid][3] = 0;
  545. #if defined AC_OnVehicleSpawn
  546. return AC_OnVehicleSpawn(vehicleid);
  547. #else
  548. return 1;
  549. #endif
  550. }
  551. public OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z)
  552. {
  553. GetVehicleHealth(vehicleid, VehicleHealth[vehicleid]);
  554. GetVehicleDamageStatus(vehicleid, VehicleDamage[vehicleid][0], VehicleDamage[vehicleid][1], VehicleDamage[vehicleid][2], VehicleDamage[vehicleid][3]);
  555. #if defined AC_OnUnoccupiedVehicleUpdate
  556. return AC_OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, new_x, new_y, new_z, vel_x, vel_y, vel_z);
  557. #else
  558. return 1;
  559. #endif
  560. }
  561. #if defined _ALS_PutPlayerInVehicle
  562. #undef PutPlayerInVehicle
  563. #else
  564. #define _ALS_PutPlayerInVehicle
  565. #endif
  566. #if defined _ALS_SetPlayerHealth
  567. #undef SetPlayerHealth
  568. #else
  569. #define _ALS_SetPlayerHealth
  570. #endif
  571. #if defined _ALS_SetPlayerArmour
  572. #undef SetPlayerArmour
  573. #else
  574. #define _ALS_SetPlayerArmour
  575. #endif
  576. #if defined _ALS_SetPlayerAmmo
  577. #undef SetPlayerAmmo
  578. #else
  579. #define _ALS_SetPlayerAmmo
  580. #endif
  581. #if defined _ALS_GivePlayerWeapon
  582. #undef GivePlayerWeapon
  583. #else
  584. #define _ALS_GivePlayerWeapon
  585. #endif
  586. #if defined _ALS_ResetPlayerWeapons
  587. #undef ResetPlayerWeapons
  588. #else
  589. #define _ALS_ResetPlayerWeapons
  590. #endif
  591. #if defined _ALS_SetPlayerArmedWeapon
  592. #undef SetPlayerArmedWeapon
  593. #else
  594. #define _ALS_SetPlayerArmedWeapon
  595. #endif
  596. #if defined _ALS_SetPlayerPos
  597. #undef SetPlayerPos
  598. #else
  599. #define _ALS_SetPlayerPos
  600. #endif
  601. #if defined _ALS_SetVehiclePos
  602. #undef SetVehiclePos
  603. #else
  604. #define _ALS_SetVehiclePos
  605. #endif
  606. #if defined _ALS_SetSpawnInfo
  607. #undef SetSpawnInfo
  608. #else
  609. #define _ALS_SetSpawnInfo
  610. #endif
  611. #if defined _ALS_SetVehicleHealth
  612. #undef SetVehicleHealth
  613. #else
  614. #define _ALS_SetVehicleHealth
  615. #endif
  616. #if defined _ALS_RepairVehicle
  617. #undef RepairVehicle
  618. #else
  619. #define _ALS_RepairVehicle
  620. #endif
  621. #if defined _ALS_UpdateVehicleDamageStatus
  622. #undef UpdateVehicleDamageStatus
  623. #else
  624. #define _ALS_UpdateVehicleDamageStatus
  625. #endif
  626. #if defined _ALS_OnPlayerConnect
  627. #undef OnPlayerConnect
  628. #else
  629. #define _ALS_OnPlayerConnect
  630. #endif
  631. #if defined _ALS_OnPlayerDisconnect
  632. #undef OnPlayerDisconnect
  633. #else
  634. #define _ALS_OnPlayerDisconnect
  635. #endif
  636. #if defined _ALS_OnPlayerSpawn
  637. #undef OnPlayerSpawn
  638. #else
  639. #define _ALS_OnPlayerSpawn
  640. #endif
  641. #if defined _ALS_OnPlayerUpdate
  642. #undef OnPlayerUpdate
  643. #else
  644. #define _ALS_OnPlayerUpdate
  645. #endif
  646. #if defined _ALS_OnVehicleSpawn
  647. #undef OnVehicleSpawn
  648. #else
  649. #define _ALS_OnVehicleSpawn
  650. #endif
  651. #if defined _ALS_OnUnoccupiedVehicleUpdate
  652. #undef OnUnoccupiedVehicleUpdate
  653. #else
  654. #define _ALS_OnUnoccupiedVehicleUpdate
  655. #endif
  656. #define PutPlayerInVehicle AC_PutPlayerInVehicle
  657. #define SetPlayerHealth AC_SetPlayerHealth
  658. #define SetPlayerArmour AC_SetPlayerArmour
  659. #define SetPlayerAmmo AC_SetPlayerAmmo
  660. #define GivePlayerWeapon AC_GivePlayerWeapon
  661. #define ResetPlayerWeapons AC_ResetPlayerWeapons
  662. #define SetPlayerArmedWeapon AC_SetPlayerArmedWeapon
  663. #define SetPlayerPos AC_SetPlayerPos
  664. #define SetVehiclePos AC_SetVehiclePos
  665. #define SetSpawnInfo AC_SetSpawnInfo
  666. #define SetVehicleHealth AC_SetVehicleHealth
  667. #define RepairVehicle AC_RepairVehicle
  668. #define UpdateVehicleDamageStatus AC_UpdateVehicleDamageStatus
  669. #define OnPlayerConnect AC_OnPlayerConnect
  670. #define OnPlayerDisconnect AC_OnPlayerDisconnect
  671. #define OnPlayerSpawn AC_OnPlayerSpawn
  672. #define OnPlayerUpdate AC_OnPlayerUpdate
  673. #define OnPlayerWeaponShot AC_OnPlayerWeaponShot
  674. #define OnVehicleSpawn AC_OnVehicleSpawn
  675. #define OnUnoccupiedVehicleUpdate AC_OnUnoccupiedVehicleUpdate
  676. #if defined AC_OnPlayerConnect
  677. forward AC_OnPlayerConnect(playerid);
  678. #endif
  679. #if defined AC_OnPlayerDisconnect
  680. forward AC_OnPlayerDisconnect(playerid, reason);
  681. #endif
  682. #if defined AC_OnPlayerSpawn
  683. forward AC_OnPlayerSpawn(playerid);
  684. #endif
  685. #if defined AC_OnPlayerUpdate
  686. forward AC_OnPlayerUpdate(playerid);
  687. #endif
  688. #if defined AC_OnPlayerWeaponShot
  689. forward AC_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  690. #endif
  691. #if defined AC_OnVehicleSpawn
  692. forward AC_OnVehicleSpawn(vehicleid);
  693. #endif
  694. #if defined AC_OnUnoccupiedVehicleUpdate
  695. forward AC_OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z);
  696. #endif