1
0

anticheat.pwn 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. stock ExecuteNOPAction(playerid)
  2. {
  3. new string[128];
  4. new newcar = GetPlayerVehicleID(playerid);
  5. if(NOPTrigger[playerid] >= MAX_NOP_WARNINGS) { return 1; }
  6. NOPTrigger[playerid]++;
  7. RemovePlayerFromVehicle(playerid);
  8. new Float:X, Float:Y, Float:Z;
  9. GetPlayerPos(playerid, X, Y, Z);
  10. SetPlayerPos(playerid, X, Y, Z+2);
  11. defer NOPCheck(playerid);
  12. if(NOPTrigger[playerid] > 1)
  13. {
  14. new sec = (NOPTrigger[playerid] * 5000)/1000-1;
  15. format(string, sizeof(string), "{AA3333}AdmWarning{FFFF00}: %s (ID %d) may be NOP hacking - restricted vehicle (model %d) for %d seconds.", GetPlayerNameEx(playerid), playerid, GetVehicleModel(newcar),sec);
  16. ABroadCast(COLOR_YELLOW, string, 2);
  17. }
  18. return 1;
  19. }
  20. stock ExecuteHackerAction( playerid, weaponid )
  21. {
  22. if(!gPlayerLogged{playerid}) { return 1; }
  23. if(PlayerInfo[playerid][pTut] == 0) { return 1; }
  24. if(playerTabbed[playerid] >= 1) { return 1; }
  25. if(GetPVarType(playerid, "IsInArena")) { return 1; }
  26. new String[ 128 ], WeaponName[ 128 ];
  27. GetWeaponName( weaponid, WeaponName, sizeof( WeaponName ) );
  28. format( String, sizeof( String ), "{AA3333}AdmWarning{FFFF00}: %s (ID %d) may possibly be weapon hacking (%s).", GetPlayerNameEx(playerid), playerid, WeaponName );
  29. ABroadCast( COLOR_YELLOW, String, 2 );
  30. format(String, sizeof(String), "%s(%d) (ID %d) may possibly be weapon hacking (%s)", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), playerid, WeaponName);
  31. Log("logs/hack.log", String);
  32. return 1;
  33. }
  34. forward sobeitCheck(playerid);
  35. public sobeitCheck(playerid)
  36. {
  37. if(GetPVarInt(playerid, "JailDelay") == 0)
  38. {
  39. if(PlayerInfo[playerid][pJailTime] > 0)
  40. {
  41. SetTimerEx("sobeitCheck", 1000, 0, "i", playerid);
  42. SetPVarInt(playerid, "JailDelay", 1);
  43. return 1;
  44. }
  45. }
  46. DeletePVar(playerid, "JailDelay");
  47. if(IsPlayerFrozen[playerid] == 1)
  48. {
  49. new Float:hX, Float:hY, Float:hZ, Float:pX, Float:pY, Float:pZ, Float:cX, Float:cY, Float:cZ, Float:cX1, Float:cY1, Float:cZ1;
  50. GetPlayerCameraFrontVector(playerid, cX1, cY1, cZ1);
  51. GetPlayerPos(playerid, cX, cY, cZ);
  52. hX = GetPVarFloat(playerid, "FrontVectorX");
  53. hY = GetPVarFloat(playerid, "FrontVectorY");
  54. hZ = GetPVarFloat(playerid, "FrontVectorZ");
  55. pX = GetPVarFloat(playerid, "PlayerPositionX");
  56. pY = GetPVarFloat(playerid, "PlayerPositionY");
  57. pZ = GetPVarFloat(playerid, "PlayerPositionZ");
  58. if(pX != cX && pY != cY && pZ != cZ && hX != cX1 && hY != cY1 && hZ != cZ1)
  59. {
  60. SendClientMessageEx(playerid, COLOR_RED, "You have failed the player account check, please relog and try again!");
  61. IsPlayerFrozen[playerid] = 0;
  62. DeletePVar(playerid,"FrontVectorX");
  63. DeletePVar(playerid,"FrontVectorY");
  64. DeletePVar(playerid,"FrontVectorZ");
  65. DeletePVar(playerid,"PlayerPositionX");
  66. DeletePVar(playerid,"PlayerPositionY");
  67. DeletePVar(playerid,"PlayerPositionZ");
  68. SetTimerEx("KickEx", 1000, 0, "i", playerid);
  69. return 1;
  70. }
  71. }
  72. new Float:aX, Float:aY, Float:aZ, szString[128];
  73. GetPlayerCameraFrontVector(playerid, aX, aY, aZ);
  74. #pragma unused aX
  75. #pragma unused aY
  76. if(aZ < -0.7)
  77. {
  78. new IP[32];
  79. GetPlayerIp(playerid, IP, sizeof(IP));
  80. TogglePlayerControllable(playerid, true);
  81. if(PlayerInfo[playerid][pSMod] == 1 || PlayerInfo[playerid][pAdmin] == 1)
  82. {
  83. mysql_format(MainPipeline, szString, sizeof(szString), "SELECT `Username` FROM `accounts` WHERE `AdminLevel` > 1 AND `Disabled` = 0 AND `IP` = '%s'", GetPlayerIpEx(playerid));
  84. mysql_tquery(MainPipeline, szString, "CheckAccounts", "i", playerid);
  85. }
  86. else {
  87. mysql_format(MainPipeline, szString, sizeof(szString), "INSERT INTO `sobeitkicks` (sqlID, Kicks) VALUES (%d, 1) ON DUPLICATE KEY UPDATE Kicks = Kicks + 1", GetPlayerSQLId(playerid));
  88. mysql_tquery(MainPipeline, szString, "OnQueryFinish", "ii", SENDDATA_THREAD, playerid);
  89. SendClientMessageEx(playerid, COLOR_RED, "The hacking tool 's0beit' is not allowed on this server, please uninstall it.");
  90. format(szString, sizeof(szString), "%s(%d) (IP: %s) has logged into the server with s0beit installed.", GetPlayerNameEx(playerid), GetPlayerSQLId(playerid), IP);
  91. Log("logs/sobeit.log", szString);
  92. IsPlayerFrozen[playerid] = 0;
  93. SetTimerEx("KickEx", 1000, 0, "i", playerid);
  94. }
  95. }
  96. if(playerTabbed[playerid] > 2) { SendClientMessageEx(playerid, COLOR_RED, "You have failed the account check, please relog."), SetTimerEx("KickEx", 1000, 0, "i", playerid); }
  97. if(PlayerInfo[playerid][pVW] > 0 || PlayerInfo[playerid][pInt] > 0) HideNoticeGUIFrame(playerid);
  98. sobeitCheckvar[playerid] = 1;
  99. sobeitCheckIsDone[playerid] = 1;
  100. IsPlayerFrozen[playerid] = 0;
  101. TogglePlayerControllable(playerid, true);
  102. return 1;
  103. }
  104. //Dom - Adjusted to account for latest rapid fire exploits - Rothschild.
  105. ptask Anti_Rapidfire[1000](i)
  106. {
  107. new weaponid = GetPlayerWeapon(i);
  108. if(((weaponid == 24 || weaponid == 25 || weaponid == 26) && PlayerShots[i] > 10) || ((weaponid == 34) && PlayerSniperShots[i] > 10)) // Updated to a higher value due to high rate of false positives.
  109. {
  110. format(szMiscArray, sizeof(szMiscArray), "%s(%d) (%d): %d shots in 1 second -- Weapon ID: %d", GetPlayerNameEx(i), i, GetPVarInt(i, "pSQLID"), PlayerShots[i], weaponid);
  111. Log("logs/rapid.log", szMiscArray);
  112. SetPVarInt(i, "MaxRFWarn", GetPVarInt(i, "MaxRFWarn")+1);
  113. format(szMiscArray, sizeof(szMiscArray), "{AA3333}AdmWarning{FFFF00}: %s (ID: %d) may be rapidfire hacking. %d/%d warnings", GetPlayerNameEx(i), i, GetPVarInt(i, "MaxRFWarn"), MAX_RF_WARNS);
  114. ABroadCast(COLOR_YELLOW, szMiscArray, 2);
  115. if(GetPVarInt(i, "MaxRFWarn") >= MAX_RF_WARNS)
  116. {
  117. if(GetPVarType(i, "Autoban")) return 1;
  118. SetPVarInt(i, "Autoban", 1);
  119. DeletePVar(i, "MaxRFWarn");
  120. CreateBan(INVALID_PLAYER_ID, PlayerInfo[i][pId], i, PlayerInfo[i][pIP], "Anti-Cheat: RapidFire Hacking", 180);
  121. TotalAutoBan++;
  122. }
  123. }
  124. PlayerShots[i] = 0;
  125. PlayerSniperShots[i] = 0;
  126. return 1;
  127. }
  128. ptask Anti_Invisibility[5000](i)
  129. {
  130. if(GetPlayerState(i) == PLAYER_STATE_SPECTATING && Spectating[i] == INVALID_PLAYER_ID && PlayerInfo[i][pAdmin] < 2)
  131. {
  132. format(szMiscArray, sizeof(szMiscArray), "{AA3333}AdmWarning{FFFF00}: %s (ID: %d) is using Invisibility CLEOs.", GetPlayerNameEx(i), i);
  133. ABroadCast(COLOR_YELLOW, szMiscArray, 2);
  134. }
  135. }
  136. ptask Anti_RapidKill[5000](i)
  137. {
  138. if(PlayerKills[i] >= 5 && PlayerInfo[i][pAdmin] < 2)
  139. {
  140. CreateBan(INVALID_PLAYER_ID, PlayerInfo[i][pId], i, PlayerInfo[i][pIP], "Anti-Cheat: Ghost Hacking", 180);
  141. }
  142. PlayerKills[i] = 0;
  143. return 1;
  144. }
  145. forward LoginCheckEx(i);
  146. public LoginCheckEx(i)
  147. {
  148. new Float: pos[3], string[128];
  149. if(gPlayerLogged{i} == 0 && IsPlayerConnected(i))
  150. {
  151. /* INFORMATION REGARDING COORDS
  152. 1093.000000 | -2036.000000 | 90.000000 // Start view of beach (Sometimes triggers via delay)
  153. 0.000000 | 0.000000 | 0.000000 // Default location normally triggered first if above doesn't
  154. 50.000000 | 50.000000 | 50.000000 // 2-3 timer check your at these coords unsure why you move to all 50.
  155. */
  156. GetPlayerPos(i, pos[0], pos[1], pos[2]);
  157. if((pos[0] != 1093.000000 && pos[0] != 0.000000 && pos[0] != 50.000000) && (pos[1] != -2036.000000 && pos[1] != 0.000000 && pos[1] != 50.000000) && (pos[2] != 90.000000 && pos[2] != 0.000000 && pos[2] != 50.000000))
  158. {
  159. format(string, sizeof(string), "%s(%d) [%s] has moved from the login screen position.", GetPlayerNameEx(i), GetPlayerSQLId(i), GetPlayerIpEx(i));
  160. Log("logs/security.log", string);
  161. SendClientMessage(i, COLOR_WHITE, "SERVER: You have moved while being in the login screen!");
  162. ShowPlayerDialogEx(i, -1, DIALOG_STYLE_MSGBOX, "", "", "", "");
  163. SetTimerEx("KickEx", 1000, 0, "i", i);
  164. }
  165. SetTimerEx("LoginCheckEx", 5000, 0, "i", i);
  166. }
  167. return true;
  168. }
  169. stock CheckServerAd(szInput[]) {
  170. new
  171. iCount,
  172. iPeriod,
  173. iPos,
  174. iChar,
  175. iColon;
  176. while((iChar = szInput[iPos++])) {
  177. if('0' <= iChar <= '9') iCount++;
  178. else if(iChar == '.') iPeriod++;
  179. else if(iChar == ':') iColon++;
  180. }
  181. if(iCount >= 7 && iPeriod >= 3 && iColon >= 1) {
  182. return 1;
  183. }
  184. return 0;
  185. }
  186. CMD:hackwarnings(playerid, params[])
  187. {
  188. if(PlayerInfo[playerid][pAdmin] < 2) return 1;
  189. new Float: health,
  190. Float: rhealth,
  191. Float: armor,
  192. Float: rarmor;
  193. szMiscArray[0] = 0;
  194. foreach(Player, i)
  195. {
  196. if(playerTabbed[i] != 0) continue;
  197. GetPlayerHealth(i, health);
  198. GetHealth(i, rhealth);
  199. GetPlayerArmour(i, armor);
  200. GetArmour(i, rarmor);
  201. if(health > rhealth)
  202. {
  203. format(szMiscArray, sizeof(szMiscArray), "%s (ID: %i, Level: %d) - Health - Recorded: %f - Current: %f", GetPlayerNameEx(i), i, PlayerInfo[i][pLevel], rhealth, health);
  204. SendClientMessage(playerid, COLOR_WHITE, szMiscArray);
  205. }
  206. if(armor > rarmor)
  207. {
  208. format(szMiscArray, sizeof(szMiscArray), "%s (ID: %i, Level: %d) - Armor - Recorded: %f - Current: %f", GetPlayerNameEx(i), i, PlayerInfo[i][pLevel], rarmor, armor);
  209. SendClientMessage(playerid, COLOR_WHITE, szMiscArray);
  210. }
  211. }
  212. return 1;
  213. }