Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Entwickler: agrippa1994
- */
- #include <a_samp>
- /* AntiCheat - Defines */
- #define MAX_AC_CLIENTS 2048
- #define INVALID_AC_ID (-1)
- /* AntiCheat - Enumerationen */
- enum eWindowState{ WS_Failed = -1, WS_Closed, WS_Open };
- enum ePlayerInfo { PI_ACID = 0};
- /* Spielerinformationen */
- new g_pInfo[MAX_PLAYERS][ePlayerInfo];
- main()
- {
- print("\n====================================================\n");
- printf("\t\tAntiCheat Test Version 0.4");
- print("\n====================================================\n\n");
- }
- /* Exportierte Funktionen des AntiCheat-Plugins */
- native IsACClientConnected(acid);
- native InitACServer(port);
- native GetACClientCount();
- native GetACClientWindowState(acid);
- native GetACClientName(acid,name[],len = sizeof(name));
- native GetACClientIP(acid,ip[], len = sizeof(ip));
- native ACTimer();
- native HasACClientForbiddenFiles(acid);
- native HasACClientScanFinished(acid);
- /* AntiCheat - Forwards */
- forward OnACClientConnect(acid,ip[]);
- forward OnACClientDisconnect(acid);
- forward OnACClientCheat(acid,hackinfo[]);
- /* Script - Forwards */
- forward OnACTimer();
- /* Aufruf, wenn AntiCheat-Client die Verbindung zum Server herstellt */
- public OnACClientConnect(acid,ip[])
- {
- printf("Momentan verbundene AC Clienten: %d",GetACClientCount());
- return 1;
- }
- /* Wird aufgerufen, wenn ein AntiCheat-Client die Verbindung zum Server trennt / verliert */
- public OnACClientDisconnect(acid)
- {
- new playerid = GetPlayerIDByACID(acid);
- if(!IsPlayerConnected(playerid))
- return 0;
- SendClientMessage(playerid,0xFFFFFFFF,"Du hast die Verbindung zum AC-Server verloren...");
- return 1;
- }
- /*
- Diese Funktion wird aufgerufen, wenn ein AntiCheatClient gecheatet hat.
- ACID ist nicht die playerid, sondern die TCP-ClientID!
- */
- public OnACClientCheat(acid,hackinfo[])
- {
- new playerid = GetPlayerIDByACID(acid);
- if(!IsPlayerConnected(playerid))
- return 0;
- SendClientMessage(playerid,0xFFFFFFFF,hackinfo);
- return 1;
- }
- public OnGameModeInit()
- {
- /* Setzen der Standardwerte */
- for(new i=0;i<MAX_PLAYERS;i++) g_pInfo[i][PI_ACID] = INVALID_AC_ID;
- /* Initialisieren des AntiCheat-Servers und Timers */
- InitACServer(7777);
- SetTimer("OnACTimer",10 * 1000, true);
- /* SA:MP Bullshit */
- AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
- return 1;
- }
- /* Gibt die AntiCheat-ClientID von einem Spieler zurück */
- stock GetACIDByPlayerID(playerid)
- {
- return g_pInfo[playerid][PI_ACID];
- }
- /* Rückgabe der Spielerid über die AntiCheat-ClientID */
- stock GetPlayerIDByACID(acid)
- {
- for(new i=0;i<MAX_PLAYERS;i++)
- if(IsPlayerConnected(i))
- if(g_pInfo[i][PI_ACID] == acid)
- return i;
- return INVALID_PLAYER_ID;
- }
- public OnPlayerRequestClass(playerid, classid)
- {
- SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
- SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
- SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
- return 1;
- }
- public OnPlayerConnect(playerid)
- {
- /* Lokale Stack-Variablen */
- new szName[MAX_PLAYER_NAME],
- szTMP[MAX_PLAYER_NAME],
- bool:bConnected=false;
- GetPlayerName(playerid,szName,MAX_PLAYER_NAME);
- /* Abfragen, ob Spieler mit AC verbunden ist, wenn ja, dann wird die AC-ID gespeichert */
- for(new i=0;i<MAX_AC_CLIENTS;i++)
- if(IsACClientConnected(i))
- if(GetACClientName(i,szTMP,MAX_PLAYER_NAME))
- if((!strcmp(szTMP,szName,true)) && strlen(szTMP)){
- bConnected=true; g_pInfo[playerid][PI_ACID] = i;
- break;
- }
- /* Wenn der Spieler nicht mit dem AC verbunden ist... */
- if(!bConnected || g_pInfo[playerid][PI_ACID] == INVALID_AC_ID)
- {
- SendClientMessage(playerid,0xFFFFFFFF,"Es wird ein AC benötigt...");
- }
- /* Wenn der Spieler verbunden ist, dann muss auch der Status des Fensters abgefragt werden*/
- /* Der Spieler könnte sonst einen Fakeclienten wie RAKSAMP oder sowas benutzen */
- else
- {
- switch(GetACClientWindowState(g_pInfo[playerid][PI_ACID]))
- {
- /* Abfrage fehlerhaft */
- case WS_Failed:
- return SendClientMessage(playerid,0xFFFFFFFF,"Abfrage fehlerhaft");
- /* Fenster offen, im Vordergrund */
- case WS_Open:
- {
- /* Wenn der Spieler den Dateicheck nicht durchgeführt hat... */
- if(!HasACClientScanFinished(g_pInfo[playerid][PI_ACID]))
- return SendClientMessage(playerid,0xFFFFFFFF,"Du kannst hier nicht spielen, da du keinen Dateiscan durchgeführt hast!");
- /* Wenn Spieler verbotene Dateien hat... */
- if(HasACClientForbiddenFiles(g_pInfo[playerid][PI_ACID]))
- return SendClientMessage(playerid,0xFFFFFFFF,"Du kannst hier nicht spielen, da du verbotene Dateien in deinem GTA Verzeichnis hast!");
- }
- /* Fenster existiert, aber nicht im Vordergrund */
- case WS_Closed:
- return SendClientMessage(playerid,0xFFFFFFFF,"Fakeclient!");
- }
- }
- /* Alles in Ordnung! */
- return SendClientMessage(playerid,0xFFFFFFFF,"Viel Spaß beim Zocken ;)");
- }
- public OnPlayerCommandText(playerid, cmdtext[])
- {
- /* Zeigt dem Spieler die Informationen aller AntiCheat-ClientID's */
- if (strcmp("/list acusers", cmdtext, true, 10) == 0)
- {
- new acid=0;
- new ip[20];
- new str[100];
- for(new i=0;i<MAX_PLAYERS;i++)
- {
- if(IsPlayerConnected(i))
- {
- if((acid=GetACIDByPlayerID(i)) != INVALID_AC_ID)
- {
- GetACClientIP(acid,ip,sizeof(ip));
- format(str,sizeof(str),"ID: %d ACID: %d WindowState: %d IP: %s ForbiddenFiles: %d HasScanned: %d",
- i,
- acid,
- GetACClientWindowState(acid),
- ip,
- HasACClientForbiddenFiles(acid),
- HasACClientScanFinished(acid)
- );
- SendClientMessage(playerid,0xFFFFFFFF,str);
- }
- }
- }
- return 1;
- }
- return 0;
- }
- /* Interner Timer für das AntiCheat (benötigt für das Aktualisieren der Hashes */
- public OnACTimer()
- {
- ACTimer();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement