Matteo987

OPH/AH V1.4

Feb 23rd, 2018
500
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.41 KB | None | 0 0
  1. /*
  2. Health And Armour Detection
  3. - Sunehildeep
  4. V1.4
  5. */
  6.  
  7. #if defined ACHEALTH_Included
  8. #endinput
  9. #endif
  10.  
  11. #define ACHEALTH_Included
  12.  
  13. #include <a_samp>
  14.  
  15. #if !defined FILTERSCRIPT //It's a gamemode
  16. /*============================================
  17. *** DEFINES
  18. ==============================================*/
  19. #define IsPlayerPaused(%1) GetTickCount() > (hcInfo[%1][pTick]+2000)
  20.  
  21. /*============================================
  22. *** INCLUDE FUNCTIONS
  23. ==============================================
  24. 1.) OnPlayerHealthHack(playerid, Float:original, Float:anticheat);
  25. 2.) OnPlayerArmourHack(playerid, Float:original, Float:anticheat);
  26. */
  27.  
  28. /*============================================
  29. *** VARIABLES
  30. ==============================================*/
  31. enum healthHack
  32. {
  33. Float:acHealth,
  34. bool:hImmune,
  35. bool:aImmune,
  36. Float:acArmour,
  37. hcTimer,
  38. pTick,
  39. bool:afkImmune,
  40. bool:hisSpawned
  41. };
  42.  
  43. new hcInfo[MAX_PLAYERS][healthHack];
  44.  
  45. // Thanks to Emmet for the Vending Machines locations.
  46. static
  47. Float:s_aVendingMachines[][] = {
  48.  
  49. {2326.0273, -1645.9480, 14.8270},
  50.  
  51. {2060.1038, -1898.4542, 13.5538},
  52.  
  53. {1729.8389, -1943.8608, 13.5687},
  54.  
  55. {1929.5480, -1772.3799, 13.5469},
  56.  
  57. {1788.3971, -1369.2784, 15.7578},
  58.  
  59. {2352.9934, -1357.0977, 24.3984},
  60.  
  61. {1153.9095, -1460.9143, 15.7969},
  62.  
  63. {200.2008, -107.6411, 1.5513},
  64.  
  65. {1278.5946, 372.2171, 19.5547},
  66.  
  67. {2320.0242, 2532.0378, 10.8203},
  68.  
  69. {2086.5876, 2071.3574, 11.0579},
  70.  
  71. {1519.3347, 1055.2349, 10.8203},
  72.  
  73. {2503.1370, 1244.5089, 10.8203},
  74.  
  75. {373.8246, -178.9297, 1000.6328},
  76.  
  77. {2575.9084, -1284.4164, 1060.9844},
  78.  
  79. {495.9450, -23.5309, 1000.6797},
  80.  
  81. {501.8352, -2.2189, 1000.6797},
  82.  
  83. {2224.4141, -1153.4738, 1025.7969},
  84.  
  85. {2156.6990, 1606.7858, 999.9718},
  86.  
  87. {2209.1143, 1607.1713, 999.9691},
  88.  
  89. {2222.9924, 1606.8201, 999.9758},
  90.  
  91. {-14.7329, 1176.1732, 19.5634},
  92.  
  93. {-862.8334, 1537.4231, 22.5870},
  94.  
  95. {-252.9273, 2597.9426, 62.8582},
  96.  
  97. {-2419.5483, 985.9162, 45.2969},
  98.  
  99. {-2419.5837, 984.5789, 45.2969},
  100.  
  101. {-1349.3037, 492.3072, 11.1953},
  102.  
  103. {-1981.6035, 142.6650, 27.6875},
  104.  
  105. {-2005.6317, -490.8682, 35.5313},
  106.  
  107. {-2034.4124, -490.8690, 35.5313},
  108.  
  109. {-2063.2695, -490.8681, 35.5313},
  110.  
  111. {-2092.0920, -490.8683, 35.5313},
  112.  
  113. {-2119.7566, -423.4371, 35.5313},
  114.  
  115. {-2119.4058, -422.2168, 35.5313},
  116.  
  117. {-2097.2969, -397.5224, 35.5313},
  118.  
  119. {-2068.5955, -397.5209, 35.5313},
  120.  
  121. {-2039.8862, -397.5221, 35.5313},
  122.  
  123. {-2011.1857, -397.5218, 35.5313},
  124.  
  125. {-32.5050, -185.9060, 1003.5469},
  126.  
  127. {-16.1550, -90.8514, 1003.5469},
  128.  
  129. {-15.1533, -139.4374, 1003.5469},
  130.  
  131. {-35.7115, -139.4262, 1003.5469},
  132.  
  133. {-19.0527, -57.0465, 1003.5469},
  134.  
  135. {-75.2803, 1227.9558, 19.7359},
  136.  
  137. {-252.9929, 2599.7952, 62.8582},
  138.  
  139. {-1455.1244, 2592.4136, 55.8359},
  140.  
  141. {-1349.3669, 493.8326, 11.1953},
  142.  
  143. {-2229.1858, 287.1634, 35.3203},
  144.  
  145. {-33.9020, -186.0259, 1003.5469},
  146.  
  147. {-17.5500, -90.9689, 1003.5469},
  148.  
  149. {-16.4742, -139.5535, 1003.5469},
  150.  
  151. {-36.1270, -57.1352, 1003.5469},
  152.  
  153. {1634.0918, -2238.2810, 13.5078},
  154.  
  155. {2480.8667, -1958.5234, 13.5830},
  156.  
  157. {2140.2676, -1161.4753, 23.9922},
  158.  
  159. {2153.8462, -1015.7134, 62.8837},
  160.  
  161. {662.4010, -551.4146, 16.3359},
  162.  
  163. {2271.7383, -77.2105, 26.5812},
  164.  
  165. {2845.7246, 1294.2957, 11.3906},
  166.  
  167. {1398.8699, 2223.3665, 11.0234},
  168.  
  169. {1659.4425, 1722.1097, 10.8281},
  170.  
  171. {2647.6428, 1128.9147, 11.1797},
  172.  
  173. {374.8246, 188.2364, 1008.3893},
  174.  
  175. {361.5366, 159.3573, 1008.3828},
  176.  
  177. {351.6461, 206.0936, 1008.3828},
  178.  
  179. {371.5602, 177.7127, 1019.9844},
  180.  
  181. {331.9078, 177.7589, 1019.9912},
  182.  
  183. {330.6430, 177.7591, 1019.9912},
  184.  
  185. {378.2992, -178.8477, 1000.6328},
  186.  
  187. {316.2407, -140.3572, 999.6016},
  188.  
  189. {500.6049, -2.1070, 1000.6797},
  190.  
  191. {2156.5854, 1607.8103, 999.9692},
  192.  
  193. {2202.4285, 1617.7483, 999.9766},
  194.  
  195. {2209.2668, 1620.4711, 999.9827},
  196.  
  197. {2223.1074, 1602.5835, 999.9734}
  198.  
  199. };
  200.  
  201.  
  202.  
  203. /*============================================
  204. *** Forward Hooks
  205. ==============================================*/
  206. #if defined OnPlayerExitVehicleHealth
  207. forward OnPlayerExitVehicleHealth(playerid, vehicleid);
  208. #endif
  209.  
  210. #if defined OnPlayerUpdateHealth
  211. forward OnPlayerUpdateHealth(playerid);
  212. #endif
  213.  
  214. #if defined OnPlayerSpawnHealth
  215. forward OnPlayerSpawnHealth(playerid);
  216. #endif
  217.  
  218. #if defined OnPlayerDeathHealth
  219. forward OnPlayerDeathHealth(playerid, killerid, reason);
  220. #endif
  221.  
  222. #if defined OnPlayerDisconnectHealth
  223. forward OnPlayerDisconnectHealth(playerid, reason);
  224. #endif
  225.  
  226. #if defined OnPlayerConnectHealth
  227. forward OnPlayerConnectHealth(playerid);
  228. #endif
  229.  
  230. #if defined OnPlayerTakeDamageHealth
  231. forward OnPlayerTakeDamageHealth(playerid, issuerid, Float: amount, weaponid, bodypart);
  232. #endif
  233.  
  234. #if defined OnPlayerHealthHack
  235. forward OnPlayerHealthHack(playerid, Float:original, Float:anticheat);
  236. #endif
  237.  
  238. #if defined OnPlayerArmourHack
  239. forward OnPlayerArmourHack(playerid, Float:original, Float:anticheat);
  240. #endif
  241.  
  242. #if defined OnPlayerGiveDamageHealth
  243. forward OnPlayerGiveDamageHealth(playerid, damagedid, Float: amount, weaponid, bodypart);
  244. #endif
  245.  
  246. /*============================================
  247. *** Timers
  248. ==============================================*/
  249. forward health_ResetImmune(playerid);
  250. public health_ResetImmune(playerid)
  251. {
  252. hcInfo[playerid][hImmune] = false;
  253. return 1;
  254. }
  255.  
  256. forward sprunk_ResetImmune(playerid);
  257. public sprunk_ResetImmune(playerid)
  258. {
  259. hcInfo[playerid][hImmune] = false;
  260. new Float:health;
  261. GetPlayerHealth(playerid, health);
  262. if(health > 99) SetPlayerHealth(playerid, 99);
  263. hcInfo[playerid][acHealth] = health;
  264. return 1;
  265. }
  266.  
  267. forward armour_ResetImmune(playerid);
  268. public armour_ResetImmune(playerid)
  269. {
  270. hcInfo[playerid][aImmune] = false;
  271. return 1;
  272. }
  273.  
  274. forward checkHealthLoss(playerid);
  275. public checkHealthLoss(playerid)
  276. {
  277. new Float:health;
  278. GetPlayerHealth(playerid, health);
  279.  
  280. new currentHealth;
  281. currentHealth = floatround(health, floatround_round);
  282.  
  283. new oldHealth;
  284. oldHealth = floatround(hcInfo[playerid][acHealth], floatround_round);
  285.  
  286. if(oldHealth > currentHealth) hcInfo[playerid][acHealth] -= 10;
  287.  
  288. return 1;
  289. }
  290.  
  291. forward ResetAFKImmune(playerid);
  292. public ResetAFKImmune(playerid)
  293. {
  294. hcInfo[playerid][afkImmune] = false;
  295. return 1;
  296. }
  297.  
  298. forward CheckHealth(playerid);
  299. public CheckHealth(playerid)
  300. {
  301. if(IsPlayerPaused(playerid) && !hcInfo[playerid][afkImmune]) hcInfo[playerid][afkImmune] = true;
  302. else if(!IsPlayerPaused(playerid) && hcInfo[playerid][afkImmune]) {
  303. SetPlayerHealth(playerid, hcInfo[playerid][acHealth]);
  304. SetPlayerArmour(playerid, hcInfo[playerid][acArmour]);
  305. SetTimerEx("ResetAFKImmune", 3000, false, "i", playerid);
  306. }
  307.  
  308. if(!hcInfo[playerid][hisSpawned] || IsPlayerPaused(playerid) || hcInfo[playerid][afkImmune]) return 1;
  309.  
  310. // Thanks to Emmet for OnPlayerUseVending
  311. for(new i = 0; i < sizeof(s_aVendingMachines); i ++)
  312. {
  313. if(IsPlayerInRangeOfPoint(playerid, 2.0, s_aVendingMachines[i][0], s_aVendingMachines[i][1], s_aVendingMachines[i][2]))
  314. {
  315. if(GetPlayerAnimationIndex(playerid) == 1660)
  316. {
  317. OnPlayerUseVending(playerid);
  318. return 1;
  319. }
  320. }
  321. }
  322.  
  323. if(!hcInfo[playerid][hImmune])
  324. {
  325. if(hcInfo[playerid][acHealth] < 0) hcInfo[playerid][acHealth] = 0.0;
  326. new Float:health;
  327. GetPlayerHealth(playerid, health);
  328.  
  329. new healthOrg;
  330. healthOrg = floatround(health, floatround_round);
  331.  
  332. new healthAc;
  333. healthAc = floatround(hcInfo[playerid][acHealth], floatround_round);
  334.  
  335. if(healthOrg-healthAc > 10)
  336. {
  337. #if defined OnPlayerHealthHack
  338. OnPlayerHealthHack(playerid, healthOrg, healthAc);
  339. #endif
  340. }
  341. }
  342. if(!hcInfo[playerid][aImmune])
  343. {
  344. if(hcInfo[playerid][acArmour] < 0) hcInfo[playerid][acArmour] = 0.0;
  345.  
  346. new Float:armour;
  347. GetPlayerArmour(playerid, armour);
  348.  
  349. new armourOrg;
  350. armourOrg = floatround(armour, floatround_round);
  351.  
  352. new armourAc;
  353. armourAc = floatround(hcInfo[playerid][acArmour], floatround_round);
  354. if(armourOrg-armourAc > 10)
  355. {
  356. #if defined OnPlayerArmourHack
  357. OnPlayerArmourHack(playerid, armourOrg, armourAc);
  358. #endif
  359. }
  360. }
  361. return 1;
  362. }
  363.  
  364. /*============================================
  365. *** Hooked Callbacks
  366. ==============================================*/
  367. public OnPlayerDeath(playerid, killerid, reason)
  368. {
  369. hcInfo[playerid][hisSpawned] = false;
  370.  
  371. hcInfo[playerid][acArmour] = 0.0;
  372. hcInfo[playerid][acHealth] = 0.0;
  373.  
  374. #if defined OnPlayerDeathHealth
  375. return OnPlayerDeathHealth(playerid, killerid, reason);
  376. #else
  377. return 1;
  378. #endif
  379. }
  380.  
  381. public OnPlayerUpdate(playerid)
  382. {
  383. hcInfo[playerid][pTick] = GetTickCount();
  384. #if defined OnPlayerUpdateHealth
  385. return OnPlayerUpdateHealth(playerid);
  386. #else
  387. return 1;
  388. #endif
  389. }
  390.  
  391. public OnPlayerDisconnect(playerid, reason)
  392. {
  393. KillTimer(hcInfo[playerid][hcTimer]);
  394.  
  395. #if defined OnPlayerDisconnectHealth
  396. return OnPlayerDisconnectHealth(playerid, reason);
  397. #else
  398. return 1;
  399. #endif
  400. }
  401.  
  402. public OnPlayerConnect(playerid)
  403. {
  404. hcInfo[playerid][hisSpawned] = false;
  405. hcInfo[playerid][aImmune] = false;
  406. hcInfo[playerid][hImmune] = false;
  407.  
  408. hcInfo[playerid][acArmour] = 0.0;
  409. hcInfo[playerid][acHealth] = 99.0;
  410. hcInfo[playerid][afkImmune] = false;
  411. hcInfo[playerid][hcTimer] = SetTimerEx("CheckHealth", 1000, true, "i", playerid);
  412.  
  413. #if defined OnPlayerConnectHealth
  414. return OnPlayerConnectHealth(playerid);
  415. #else
  416. return 1;
  417. #endif
  418. }
  419.  
  420. public OnPlayerSpawn(playerid)
  421. {
  422. new health;
  423. health = floatround(hcInfo[playerid][acHealth], floatround_round);
  424. if(health == 0) {
  425. SetPlayerHealth(playerid, 99);
  426. }
  427. hcInfo[playerid][hisSpawned] = true;
  428. #if defined OnPlayerSpawnHealth
  429. return OnPlayerSpawnHealth(playerid);
  430. #else
  431. return 1;
  432. #endif
  433. }
  434.  
  435. public OnPlayerExitVehicle(playerid, vehicleid)
  436. {
  437. if(hcGetPlayerSpeed(playerid) >= 20) SetTimerEx("checkHealthLoss", 500, false, "i", playerid);
  438.  
  439. #if defined OnPlayerExitVehicleHealth
  440. return OnPlayerExitVehicleHealth(playerid, vehicleid);
  441. #else
  442. return 1;
  443. #endif
  444. }
  445.  
  446. public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
  447. {
  448. if(issuerid == INVALID_PLAYER_ID) hcInfo[playerid][acHealth] -= amount;
  449.  
  450. #if defined OnPlayerTakeDamageHealth
  451. return OnPlayerTakeDamageHealth(playerid, issuerid, Float: amount, weaponid, bodypart);
  452. #else
  453. return 1;
  454. #endif
  455. }
  456.  
  457. public OnPlayerGiveDamage(playerid, damagedid, Float: amount, weaponid, bodypart)
  458. {
  459. if(damagedid != INVALID_PLAYER_ID)
  460. {
  461. new Float:armour;
  462. GetPlayerArmour(damagedid, armour);
  463.  
  464. if(armour > 0.0) hcInfo[damagedid][acArmour] -= amount;
  465. else hcInfo[damagedid][acHealth] -= amount;
  466. }
  467.  
  468. #if defined OnPlayerGiveDamageHealth
  469. return OnPlayerGiveDamageHealth(playerid, damagedid, Float: amount, weaponid, bodypart);
  470. #else
  471. return 1;
  472. #endif
  473. }
  474. /*============================================
  475. *** Hooked Functions
  476. ==============================================*/
  477. static OnPlayerUseVending(playerid)
  478. {
  479. if(!hcInfo[playerid][hImmune]) SetTimerEx("sprunk_ResetImmune", 2500, false, "i", playerid);
  480. hcInfo[playerid][hImmune] = true;
  481. return 1;
  482. }
  483.  
  484. stock acSetPlayerHealth(playerid, Float:amount)
  485. {
  486. if(!hcInfo[playerid][hImmune]) SetTimerEx("health_ResetImmune", 3000, false, "i", playerid);
  487. printf("Old %f", amount);
  488. if(amount > 99.0) amount = 99.0;
  489. if(amount < 0.0) amount = 0.0;
  490. printf("New %f", amount);
  491. hcInfo[playerid][hImmune] = true;
  492. hcInfo[playerid][acHealth] = amount;
  493.  
  494. return SetPlayerHealth(playerid, amount);
  495. }
  496.  
  497. stock acSetPlayerArmour(playerid, Float:amount)
  498. {
  499. if(!hcInfo[playerid][aImmune]) SetTimerEx("armour_ResetImmune", 3000, false, "i", playerid);
  500. if(amount > 99.0) amount = 99.0;
  501. if(amount < 0.0) amount = 0.0;
  502.  
  503. hcInfo[playerid][aImmune] = true;
  504. hcInfo[playerid][acArmour] = amount;
  505.  
  506. return SetPlayerArmour(playerid, amount);
  507. }
  508.  
  509. static hcGetPlayerSpeed(playerid)
  510. {
  511. if(playerid != INVALID_PLAYER_ID)
  512. {
  513. new Float:Pos[3],Float:PS;
  514. GetPlayerVelocity(playerid, Pos[0], Pos[1], Pos[2]);
  515.  
  516. PS = floatsqroot(Pos[0]*Pos[0] + Pos[1]*Pos[1] + Pos[2]*Pos[2])*200;
  517. return floatround(PS,floatround_round);
  518. }
  519. return INVALID_PLAYER_ID;
  520. }
  521.  
  522. stock acTogglePlayerSpectating(playerid, bool:type)
  523. {
  524. if(!type) SetPlayerHealth(playerid, 99);
  525. return TogglePlayerSpectating(playerid, type);
  526. }
  527.  
  528. /*============================================
  529. *** Hookings
  530. ==============================================*/
  531. #if defined _ALS_SetPlayerArmour
  532. #undef SetPlayerArmour
  533. #else
  534. #define _ALS_SetPlayerArmour
  535. #endif
  536.  
  537. #define SetPlayerArmour acSetPlayerArmour
  538.  
  539. #if defined _ALS_SetPlayerHealth
  540. #undef SetPlayerHealth
  541. #else
  542. #define _ALS_SetPlayerHealth
  543. #endif
  544.  
  545. #define SetPlayerHealth acSetPlayerHealth
  546.  
  547. #if defined _ALS_OnPlayerGiveDamage
  548. #undef OnPlayerGiveDamage
  549. #else
  550. #define _ALS_OnPlayerGiveDamage
  551. #endif
  552.  
  553. #define OnPlayerGiveDamage OnPlayerGiveDamageHealth
  554.  
  555. #if defined _ALS_OnPlayerTakeDamage
  556. #undef OnPlayerTakeDamage
  557. #else
  558. #define _ALS_OnPlayerTakeDamage
  559. #endif
  560.  
  561. #define OnPlayerTakeDamage OnPlayerTakeDamageHealth
  562.  
  563. #if defined _ALS_OnPlayerExitVehicle
  564. #undef OnPlayerExitVehicle
  565. #else
  566. #define _ALS_OnPlayerExitVehicle
  567. #endif
  568.  
  569. #define OnPlayerExitVehicle OnPlayerExitVehicleHealth
  570.  
  571. #if defined _ALS_OnPlayerConnect
  572. #undef OnPlayerConnect
  573. #else
  574. #define _ALS_OnPlayerConnect
  575. #endif
  576.  
  577. #define OnPlayerConnect OnPlayerConnectHealth
  578.  
  579. #if defined _ALS_OnPlayerDeath
  580. #undef OnPlayerDeath
  581. #else
  582. #define _ALS_OnPlayerDeath
  583. #endif
  584.  
  585. #define OnPlayerDeath OnPlayerDeathHealth
  586.  
  587. #if defined _ALS_OnPlayerDisconnect
  588. #undef OnPlayerDisconnect
  589. #else
  590. #define _ALS_OnPlayerDisconnect
  591. #endif
  592.  
  593. #define OnPlayerDisconnect OnPlayerDisconnectHealth
  594.  
  595. #if defined _ALS_OnPlayerUpdate
  596. #undef OnPlayerUpdate
  597. #else
  598. #define _ALS_OnPlayerUpdate
  599. #endif
  600.  
  601. #define OnPlayerUpdate OnPlayerUpdateHealth
  602.  
  603. #if defined _ALS_OnPlayerSpawn
  604. #undef OnPlayerSpawn
  605. #else
  606. #define _ALS_OnPlayerSpawn
  607. #endif
  608.  
  609. #define OnPlayerSpawn OnPlayerSpawnHealth
  610.  
  611. #if defined _ALS_TogglePlayerSpectating
  612. #undef TogglePlayerSpectating
  613. #else
  614. #define _ALS_TogglePlayerSpectating
  615. #endif
  616.  
  617. #define TogglePlayerSpectating acTogglePlayerSpectating
  618.  
  619. #else // It's a filterscript
  620.  
  621. stock acTogglePlayerSpectatingFS(playerid, bool:type)
  622. return CallLocalFunction("acTogglePlayerSpectating", "ii", playerid, type);
  623.  
  624. stock acSetPlayerHealthFS(playerid, Float:amount)
  625. return CallLocalFunction("acSetPlayerHealth", "if", playerid, amount);
  626.  
  627. stock acSetPlayerArmourFS(playerid, Float:amount)
  628. return CallLocalFunction("acSetPlayerArmour", "if", playerid, amount);
  629.  
  630. #if defined _ALS_TogglePlayerSpectating
  631. #undef TogglePlayerSpectating
  632. #else
  633. #define _ALS_TogglePlayerSpectating
  634. #endif
  635.  
  636. #define TogglePlayerSpectating acTogglePlayerSpectatingFS
  637.  
  638. #if defined _ALS_SetPlayerArmour
  639. #undef SetPlayerArmour
  640. #else
  641. #define _ALS_SetPlayerArmour
  642. #endif
  643.  
  644. #define SetPlayerArmour acSetPlayerArmourFS
  645.  
  646. #if defined _ALS_SetPlayerHealth
  647. #undef SetPlayerHealth
  648. #else
  649. #define _ALS_SetPlayerHealth
  650. #endif
  651.  
  652. #define SetPlayerHealth acSetPlayerHealthFS
  653.  
  654. #endif
Add Comment
Please, Sign In to add comment