Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <a_samp>
- /**
- 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;
- }
Add Comment
Please, Sign In to add comment