Advertisement
agrippa1994

SAMP AntiCheat Plugin

Mar 19th, 2013
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.85 KB | None | 0 0
  1. /*
  2.     Entwickler: agrippa1994
  3. */
  4.  
  5.  
  6. #include <a_samp>
  7.  
  8. /* AntiCheat - Defines */
  9. #define MAX_AC_CLIENTS 2048
  10. #define INVALID_AC_ID (-1)
  11.  
  12. /* AntiCheat - Enumerationen */
  13. enum eWindowState{ WS_Failed = -1, WS_Closed, WS_Open };
  14. enum ePlayerInfo { PI_ACID = 0};
  15.  
  16. /* Spielerinformationen */
  17. new g_pInfo[MAX_PLAYERS][ePlayerInfo];
  18.  
  19. main()
  20. {
  21.     print("\n====================================================\n");
  22.     printf("\t\tAntiCheat Test Version 0.4");
  23.     print("\n====================================================\n\n");
  24. }
  25.  
  26. /* Exportierte Funktionen des AntiCheat-Plugins */
  27. native IsACClientConnected(acid);
  28. native InitACServer(port);
  29. native GetACClientCount();
  30. native GetACClientWindowState(acid);
  31. native GetACClientName(acid,name[],len = sizeof(name));
  32. native GetACClientIP(acid,ip[], len = sizeof(ip));
  33. native ACTimer();
  34. native HasACClientForbiddenFiles(acid);
  35. native HasACClientScanFinished(acid);
  36.  
  37. /* AntiCheat - Forwards */
  38. forward OnACClientConnect(acid,ip[]);
  39. forward OnACClientDisconnect(acid);
  40. forward OnACClientCheat(acid,hackinfo[]);
  41.  
  42. /* Script - Forwards */
  43. forward OnACTimer();
  44.  
  45. /* Aufruf, wenn AntiCheat-Client die Verbindung zum Server herstellt */
  46. public OnACClientConnect(acid,ip[])
  47. {
  48.     printf("Momentan verbundene AC Clienten: %d",GetACClientCount());
  49.     return 1;
  50. }
  51.  
  52. /* Wird aufgerufen, wenn ein AntiCheat-Client die Verbindung zum Server trennt / verliert */
  53. public OnACClientDisconnect(acid)
  54. {
  55.     new playerid = GetPlayerIDByACID(acid);
  56.     if(!IsPlayerConnected(playerid))
  57.         return 0;
  58.    
  59.     SendClientMessage(playerid,0xFFFFFFFF,"Du hast die Verbindung zum AC-Server verloren...");
  60.     return 1;
  61. }
  62.  
  63. /*
  64.     Diese Funktion wird aufgerufen, wenn ein AntiCheatClient gecheatet hat.
  65.     ACID ist nicht die playerid, sondern die TCP-ClientID!
  66. */
  67. public OnACClientCheat(acid,hackinfo[])
  68. {
  69.     new playerid = GetPlayerIDByACID(acid);
  70.     if(!IsPlayerConnected(playerid))
  71.         return 0;
  72.  
  73.     SendClientMessage(playerid,0xFFFFFFFF,hackinfo);
  74.     return 1;
  75. }
  76.  
  77. public OnGameModeInit()
  78. {
  79.     /* Setzen der Standardwerte */
  80.     for(new i=0;i<MAX_PLAYERS;i++) g_pInfo[i][PI_ACID] = INVALID_AC_ID;
  81.  
  82.     /* Initialisieren des AntiCheat-Servers und Timers */
  83.     InitACServer(7777);
  84.     SetTimer("OnACTimer",10 * 1000, true);
  85.  
  86.     /* SA:MP Bullshit */
  87.     AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
  88.     return 1;
  89. }
  90.  
  91. /* Gibt die AntiCheat-ClientID von einem Spieler zurück */
  92. stock GetACIDByPlayerID(playerid)
  93. {
  94.     return g_pInfo[playerid][PI_ACID];
  95. }
  96.  
  97. /* Rückgabe der Spielerid über die AntiCheat-ClientID */
  98. stock GetPlayerIDByACID(acid)
  99. {
  100.     for(new i=0;i<MAX_PLAYERS;i++)
  101.         if(IsPlayerConnected(i))
  102.             if(g_pInfo[i][PI_ACID] == acid)
  103.                 return i;
  104.     return INVALID_PLAYER_ID;
  105. }
  106.  
  107. public OnPlayerRequestClass(playerid, classid)
  108. {
  109.     SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
  110.     SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
  111.     SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
  112.     return 1;
  113. }
  114.  
  115. public OnPlayerConnect(playerid)
  116. {
  117.     /* Lokale Stack-Variablen */
  118.     new szName[MAX_PLAYER_NAME],
  119.         szTMP[MAX_PLAYER_NAME],
  120.         bool:bConnected=false;
  121.  
  122.     GetPlayerName(playerid,szName,MAX_PLAYER_NAME);
  123.  
  124.     /* Abfragen, ob Spieler mit AC verbunden ist, wenn ja, dann wird die AC-ID gespeichert */
  125.     for(new i=0;i<MAX_AC_CLIENTS;i++)
  126.         if(IsACClientConnected(i))
  127.             if(GetACClientName(i,szTMP,MAX_PLAYER_NAME))
  128.                 if((!strcmp(szTMP,szName,true)) && strlen(szTMP)){
  129.                     bConnected=true; g_pInfo[playerid][PI_ACID] = i;
  130.                     break;
  131.                 }
  132.  
  133.     /* Wenn der Spieler nicht mit dem AC verbunden ist... */
  134.     if(!bConnected || g_pInfo[playerid][PI_ACID] == INVALID_AC_ID)
  135.     {
  136.         SendClientMessage(playerid,0xFFFFFFFF,"Es wird ein AC benötigt...");
  137.     }
  138.     /* Wenn der Spieler verbunden ist, dann muss auch der Status des Fensters abgefragt werden*/
  139.     /* Der Spieler könnte sonst einen Fakeclienten wie RAKSAMP oder sowas benutzen */
  140.     else
  141.     {
  142.         switch(GetACClientWindowState(g_pInfo[playerid][PI_ACID]))
  143.         {
  144.             /* Abfrage fehlerhaft */
  145.             case WS_Failed:
  146.                 return SendClientMessage(playerid,0xFFFFFFFF,"Abfrage fehlerhaft");
  147.             /* Fenster offen, im Vordergrund */
  148.             case WS_Open:
  149.             {
  150.                 /* Wenn der Spieler den Dateicheck nicht durchgeführt hat... */
  151.                 if(!HasACClientScanFinished(g_pInfo[playerid][PI_ACID]))
  152.                     return SendClientMessage(playerid,0xFFFFFFFF,"Du kannst hier nicht spielen, da du keinen Dateiscan durchgeführt hast!");
  153.                 /* Wenn Spieler verbotene Dateien hat... */
  154.                 if(HasACClientForbiddenFiles(g_pInfo[playerid][PI_ACID]))
  155.                     return SendClientMessage(playerid,0xFFFFFFFF,"Du kannst hier nicht spielen, da du verbotene Dateien in deinem GTA Verzeichnis hast!");
  156.             }
  157.             /* Fenster existiert, aber nicht im Vordergrund */
  158.             case WS_Closed:
  159.                 return SendClientMessage(playerid,0xFFFFFFFF,"Fakeclient!");
  160.         }
  161.     }
  162.     /* Alles in Ordnung! */
  163.     return SendClientMessage(playerid,0xFFFFFFFF,"Viel Spaß beim Zocken ;)");
  164. }
  165.  
  166. public OnPlayerCommandText(playerid, cmdtext[])
  167. {
  168.     /* Zeigt dem Spieler die Informationen aller AntiCheat-ClientID's */
  169.     if (strcmp("/list acusers", cmdtext, true, 10) == 0)
  170.     {
  171.         new acid=0;
  172.         new ip[20];
  173.         new str[100];
  174.         for(new i=0;i<MAX_PLAYERS;i++)
  175.         {
  176.             if(IsPlayerConnected(i))
  177.             {
  178.                 if((acid=GetACIDByPlayerID(i)) != INVALID_AC_ID)
  179.                 {
  180.                     GetACClientIP(acid,ip,sizeof(ip));
  181.                     format(str,sizeof(str),"ID: %d ACID: %d WindowState: %d IP: %s ForbiddenFiles: %d HasScanned: %d",
  182.                         i,
  183.                         acid,
  184.                         GetACClientWindowState(acid),
  185.                         ip,
  186.                         HasACClientForbiddenFiles(acid),
  187.                         HasACClientScanFinished(acid)
  188.                     );
  189.                    
  190.                     SendClientMessage(playerid,0xFFFFFFFF,str);
  191.                 }
  192.             }
  193.         }
  194.         return 1;
  195.     }
  196.     return 0;
  197. }
  198.  
  199. /* Interner Timer für das AntiCheat (benötigt für das Aktualisieren der Hashes */
  200. public OnACTimer()
  201. {
  202.     ACTimer();
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement