#include /** LA Whitelist System © by Logan 2013 **/ #define AUTHNAME "ANPASSEN" /* Ändere den obigen "AUTHNAME" auf den Namen, der nie gekickt werden soll. Du musst ja irgendwie auf den Server kommen können, ohne gleich gekickt zu werden. Danach kannst du dich auch so auf die Whitelist setzen. Oder du brauchst das gar nicht, wenn du die IP 127.0.0.1 besitzt (bei lokalem Server) */ #define DATABASE "wdata.db" //Um den Namen der SQLite Datenbank zu verändern #define TABLE "whitelist" //Um den Namen der Tabelle zu verändern (wird im Scriptfiles Ordner erstellt) #define MAX_PLAYERS_ON_WHITELIST 20 //max. Spieler die auf die Whitelist können (damit die string Größe bei den Dialogen auch passt) #define ROT 0xFF0019FF new DB:la_database; //Um die ID der Datenbank zwischenspeichernzukönnen new gPlayerName[MAX_PLAYERS][MAX_PLAYER_NAME+1],gPlayerIP[MAX_PLAYERS][17]; enum { DIALOG_WHITELIST = 300, //wenn Dialogid 300 schon belegt, dann abändern, aber nur die erste (anderen werden automatisch hochgezählt) DIALOG_ADD, DIALOG_REMOVE, DIALOG_UEBERSICHT }; public OnFilterScriptInit() { print("\n--------------------------------------"); print(" LA Dynamic Whitelist System by Logan successfully loaded"); print("--------------------------------------\n"); la_database = db_open(DATABASE); //Verbindung aufbauen CreateTables(); //Tabelle wird automatisch erstellt, sofern Sie nicht existiert return 1; } public OnFilterScriptExit() { print("\n--------------------------------------"); print(" LA Dynamic Whitelist System by Logan successfully unloaded"); print("--------------------------------------\n"); return 1; } public OnPlayerConnect(playerid) { GetPlayerName(playerid,gPlayerName[playerid],MAX_PLAYER_NAME); GetPlayerIp(playerid,gPlayerIP[playerid],17); if(!strcmp(gPlayerIP[playerid],"127.0.0.1",true)) return 0; //Falls der "Master" also mit der lokalen IP joint, soll er nicht gekickt werden. if(!strcmp(gPlayerName[playerid],""AUTHNAME"",false)) return 0;//wenn Spielername = AUTHNAME, dann soll er nicht gekickt werden if(!IsOnWhitelist(playerid)) { //wenn Spieler nicht auf Whitelist ist SetTimerEx("KickPlayer",200,false,"i",playerid); //Zeitverzögert Kicken wegen SAMP Bug } return 1; } public OnPlayerCommandText(playerid,cmdtext[]) { if(!strcmp(cmdtext,"/whitelist",true)) { if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,ROT,"Du bist nicht als RCON-Admin eingeloggt!"); ShowPlayerDialog(playerid,DIALOG_WHITELIST,DIALOG_STYLE_LIST,"LA Dynamic Whitelist","Spieler hinzufuegen\nSpieler entfernen\nSpieler einsehen","OK","Abbrechen"); return 1; } return 0; } public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[]) { if(response) { switch(dialogid) { case DIALOG_WHITELIST: { switch(listitem) { case 0: ShowPlayerDialog(playerid,DIALOG_ADD,DIALOG_STYLE_INPUT,"Spieler hinzufuegen","Gebe den exakten Namen des Spielers ein:","OK","Zurueck"); case 1: ShowPlayerDialog(playerid,DIALOG_REMOVE,DIALOG_STYLE_INPUT,"Spieler entfernen","Gebe den exakten Namen des Spielers ein:","OK","Zurueck"); case 2: { new anzeigestr[MAX_PLAYERS_ON_WHITELIST*MAX_PLAYER_NAME+1+20]; new zwstr[MAX_PLAYER_NAME+1]; new DBResult:ergebnis = db_query(la_database,"SELECT `Name` FROM `"TABLE"`"); new rows = db_num_rows(ergebnis); if(rows == 0) { SendClientMessage(playerid,ROT,"Zurzeit steht noch kein Spieler auf der Whitelist!"); } else if(rows == 1) { db_get_field_assoc(ergebnis,"Name",zwstr,MAX_PLAYER_NAME+1); strcat(anzeigestr,zwstr); ShowPlayerDialog(playerid,DIALOG_UEBERSICHT,DIALOG_STYLE_LIST,"Aktuelle Spieler auf Whitelist",anzeigestr,"OK","Zurueck"); } else { db_get_field_assoc(ergebnis,"Name",zwstr,MAX_PLAYER_NAME+1); format(anzeigestr,sizeof anzeigestr,"%s\n%s",anzeigestr,zwstr); while(db_next_row(ergebnis)) { db_get_field_assoc(ergebnis,"Name",zwstr,MAX_PLAYER_NAME+1); format(anzeigestr,sizeof anzeigestr,"%s\n%s",anzeigestr,zwstr); } ShowPlayerDialog(playerid,DIALOG_UEBERSICHT,DIALOG_STYLE_LIST,"Aktuelle Spieler auf Whitelist",anzeigestr,"OK","Zurueck"); } } } } case DIALOG_ADD: { if(!inputtext[0]) return ShowPlayerDialog(playerid,DIALOG_ADD,DIALOG_STYLE_INPUT,"Spieler hinzufuegen","Gebe den exakten Namen des Spielers ein:","OK","Zurueck"); if(IsEingabeOnWhitelist(inputtext))return SendClientMessage(playerid,ROT,"Dieser Spielername steht bereits auf der Whitelist!"); new query[128]; format(query,sizeof query,"INSERT INTO `"TABLE"` (`Name`) VALUES ('%s')",inputtext); db_query(la_database,query); format(query,sizeof query,"Du hast %s erfolgreich zur Whitelist hinzugefuegt.",inputtext); SendClientMessage(playerid,ROT,query); } case DIALOG_REMOVE: { if(!inputtext[0]) return ShowPlayerDialog(playerid,DIALOG_REMOVE,DIALOG_STYLE_INPUT,"Spieler entfernen","Gebe den exakten Namen des Spielers ein:","OK","Zurueck"); if(!IsEingabeOnWhitelist(inputtext))return SendClientMessage(playerid,ROT,"Dieser Spielername steht nicht auf der Whitelist!"); new query[128]; format(query,sizeof query,"DELETE FROM `"TABLE"` WHERE `Name` = '%s'",inputtext); db_query(la_database,query); format(query,sizeof query,"Du hast %s erfolgreich von der Whitelist geloescht.",inputtext); SendClientMessage(playerid,ROT,query); } } } else { switch(dialogid) { case DIALOG_ADD: ShowPlayerDialog(playerid,DIALOG_WHITELIST,DIALOG_STYLE_LIST,"LA Dynamic Whitelist","Spieler hinzufuegen\nSpieler entfernen\nSpieler einsehen","OK","Abbrechen"); case DIALOG_REMOVE: ShowPlayerDialog(playerid,DIALOG_WHITELIST,DIALOG_STYLE_LIST,"LA Dynamic Whitelist","Spieler hinzufuegen\nSpieler entfernen\nSpieler einsehen","OK","Abbrechen"); case DIALOG_UEBERSICHT: ShowPlayerDialog(playerid,DIALOG_WHITELIST,DIALOG_STYLE_LIST,"LA Dynamic Whitelist","Spieler hinzufuegen\nSpieler entfernen\nSpieler einsehen","OK","Abbrechen"); } } return 0; } CreateTables() { new query[150] = "CREATE TABLE IF NOT EXISTS `"TABLE"` (`ID` INTEGER PRIMARY KEY AUTOINCREMENT,`Name` TEXT(24));"; //Struktur für die Tabelle db_query(la_database,query); //Ausführen des Querys return 1; } IsOnWhitelist(playerid) { new query[128]; format(query,sizeof query,"SELECT `Name` FROM `"TABLE"` WHERE `Name` = '%s'",gPlayerName[playerid]); //Query formatieren new DBResult:result = db_query(la_database,query); //Abschicken des Querys new rows = db_num_rows(result); //Anzahl der ausgelesenen Spalten zwischenspeichern db_free_result(result); //Ergebnis wieder leeren if(rows>= 1) return 1; //wenn Spalten gefunden wurden return 0; //sonst nicht } IsEingabeOnWhitelist(name[]) { new query[128]; format(query,sizeof query,"SELECT `Name` FROM `"TABLE"` WHERE `Name` = '%s'",name); //Query formatieren new DBResult:result = db_query(la_database,query); //Abschicken des Querys new rows = db_num_rows(result); //Anzahl der ausgelesenen Spalten zwischenspeichern db_free_result(result); //Ergebnis wieder leeren if(rows >=1) return 1; //wenn Spalten gefunden wurden return 0; //sonst nicht } forward KickPlayer(playerid); public KickPlayer(playerid) { SendClientMessage(playerid,ROT,"Du wurdest gekickt, weil dein Name nicht auf der Whitelist steht!"); Kick(playerid); return 1; }