McBastard112

LA Whitelist System

Mar 18th, 2013
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 7.40 KB | None | 0 0
  1. #include <a_samp>
  2.  
  3. /**
  4.     LA Whitelist System
  5.     © by Logan 2013
  6. **/
  7.  
  8. #define AUTHNAME "ANPASSEN" /*
  9. Ä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.
  10. 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)
  11. */
  12. #define DATABASE "wdata.db" //Um den Namen der SQLite Datenbank zu verändern
  13. #define TABLE "whitelist" //Um den Namen der Tabelle zu verändern (wird im Scriptfiles Ordner erstellt)
  14. #define MAX_PLAYERS_ON_WHITELIST 20 //max. Spieler die auf die Whitelist können (damit die string Größe bei den Dialogen auch passt)
  15.  
  16. #define ROT 0xFF0019FF
  17.  
  18. new DB:la_database; //Um die ID der Datenbank zwischenspeichernzukönnen
  19. new gPlayerName[MAX_PLAYERS][MAX_PLAYER_NAME+1],gPlayerIP[MAX_PLAYERS][17];
  20.  
  21. enum
  22. {
  23.     DIALOG_WHITELIST = 300, //wenn Dialogid 300 schon belegt, dann abändern, aber nur die erste (anderen werden automatisch hochgezählt)
  24.     DIALOG_ADD,
  25.     DIALOG_REMOVE,
  26.     DIALOG_UEBERSICHT
  27. };
  28.  
  29. public OnFilterScriptInit()
  30. {
  31.     print("\n--------------------------------------");
  32.     print(" LA Dynamic Whitelist System by Logan successfully loaded");
  33.     print("--------------------------------------\n");
  34.     la_database = db_open(DATABASE); //Verbindung aufbauen
  35.     CreateTables(); //Tabelle wird automatisch erstellt, sofern Sie nicht existiert
  36.     return 1;
  37. }
  38.  
  39. public OnFilterScriptExit()
  40. {
  41.     print("\n--------------------------------------");
  42.     print(" LA Dynamic Whitelist System by Logan successfully unloaded");
  43.     print("--------------------------------------\n");
  44.     return 1;
  45. }
  46.  
  47. public OnPlayerConnect(playerid)
  48. {
  49.     GetPlayerName(playerid,gPlayerName[playerid],MAX_PLAYER_NAME);
  50.     GetPlayerIp(playerid,gPlayerIP[playerid],17);
  51.     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.
  52.     if(!strcmp(gPlayerName[playerid],""AUTHNAME"",false)) return 0;//wenn Spielername = AUTHNAME, dann soll er nicht gekickt werden
  53.     if(!IsOnWhitelist(playerid)) { //wenn Spieler nicht auf Whitelist ist
  54.         SetTimerEx("KickPlayer",200,false,"i",playerid); //Zeitverzögert Kicken wegen SAMP Bug
  55.     }
  56.     return 1;
  57. }
  58.  
  59. public OnPlayerCommandText(playerid,cmdtext[])
  60. {
  61.     if(!strcmp(cmdtext,"/whitelist",true)) {
  62.         if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,ROT,"Du bist nicht als RCON-Admin eingeloggt!");
  63.         ShowPlayerDialog(playerid,DIALOG_WHITELIST,DIALOG_STYLE_LIST,"LA Dynamic Whitelist","Spieler hinzufuegen\nSpieler entfernen\nSpieler einsehen","OK","Abbrechen");
  64.         return 1;
  65.     }
  66.     return 0;
  67. }
  68.  
  69. public OnDialogResponse(playerid,dialogid,response,listitem,inputtext[])
  70. {
  71.     if(response) {
  72.         switch(dialogid) {
  73.             case DIALOG_WHITELIST: {
  74.                 switch(listitem) {
  75.                     case 0: ShowPlayerDialog(playerid,DIALOG_ADD,DIALOG_STYLE_INPUT,"Spieler hinzufuegen","Gebe den exakten Namen des Spielers ein:","OK","Zurueck");
  76.                     case 1: ShowPlayerDialog(playerid,DIALOG_REMOVE,DIALOG_STYLE_INPUT,"Spieler entfernen","Gebe den exakten Namen des Spielers ein:","OK","Zurueck");
  77.                     case 2: {
  78.                         new anzeigestr[MAX_PLAYERS_ON_WHITELIST*MAX_PLAYER_NAME+1+20];
  79.                         new zwstr[MAX_PLAYER_NAME+1];
  80.                         new DBResult:ergebnis = db_query(la_database,"SELECT `Name` FROM `"TABLE"`");
  81.                         new rows = db_num_rows(ergebnis);
  82.                         if(rows == 0) {
  83.                             SendClientMessage(playerid,ROT,"Zurzeit steht noch kein Spieler auf der Whitelist!");
  84.                         }
  85.                         else if(rows == 1) {
  86.                             db_get_field_assoc(ergebnis,"Name",zwstr,MAX_PLAYER_NAME+1);
  87.                             strcat(anzeigestr,zwstr);
  88.                             ShowPlayerDialog(playerid,DIALOG_UEBERSICHT,DIALOG_STYLE_LIST,"Aktuelle Spieler auf Whitelist",anzeigestr,"OK","Zurueck");
  89.                         }
  90.                         else {
  91.                             db_get_field_assoc(ergebnis,"Name",zwstr,MAX_PLAYER_NAME+1);
  92.                             format(anzeigestr,sizeof anzeigestr,"%s\n%s",anzeigestr,zwstr);
  93.                             while(db_next_row(ergebnis)) {
  94.                                 db_get_field_assoc(ergebnis,"Name",zwstr,MAX_PLAYER_NAME+1);
  95.                                 format(anzeigestr,sizeof anzeigestr,"%s\n%s",anzeigestr,zwstr);
  96.                             }
  97.                             ShowPlayerDialog(playerid,DIALOG_UEBERSICHT,DIALOG_STYLE_LIST,"Aktuelle Spieler auf Whitelist",anzeigestr,"OK","Zurueck");
  98.                         }
  99.                     }
  100.                 }
  101.             }
  102.             case DIALOG_ADD: {
  103.                 if(!inputtext[0]) return ShowPlayerDialog(playerid,DIALOG_ADD,DIALOG_STYLE_INPUT,"Spieler hinzufuegen","Gebe den exakten Namen des Spielers ein:","OK","Zurueck");
  104.                 if(IsEingabeOnWhitelist(inputtext))return SendClientMessage(playerid,ROT,"Dieser Spielername steht bereits auf der Whitelist!");
  105.                 new query[128];
  106.                 format(query,sizeof query,"INSERT INTO `"TABLE"` (`Name`) VALUES ('%s')",inputtext);
  107.                 db_query(la_database,query);
  108.                 format(query,sizeof query,"Du hast %s erfolgreich zur Whitelist hinzugefuegt.",inputtext);
  109.                 SendClientMessage(playerid,ROT,query);
  110.             }
  111.             case DIALOG_REMOVE: {
  112.                 if(!inputtext[0]) return ShowPlayerDialog(playerid,DIALOG_REMOVE,DIALOG_STYLE_INPUT,"Spieler entfernen","Gebe den exakten Namen des Spielers ein:","OK","Zurueck");
  113.                 if(!IsEingabeOnWhitelist(inputtext))return SendClientMessage(playerid,ROT,"Dieser Spielername steht nicht auf der Whitelist!");
  114.                 new query[128];
  115.                 format(query,sizeof query,"DELETE FROM `"TABLE"` WHERE `Name` = '%s'",inputtext);
  116.                 db_query(la_database,query);
  117.                 format(query,sizeof query,"Du hast %s erfolgreich von der Whitelist geloescht.",inputtext);
  118.                 SendClientMessage(playerid,ROT,query);
  119.             }
  120.         }
  121.     }
  122.     else {
  123.         switch(dialogid) {
  124.             case DIALOG_ADD: ShowPlayerDialog(playerid,DIALOG_WHITELIST,DIALOG_STYLE_LIST,"LA Dynamic Whitelist","Spieler hinzufuegen\nSpieler entfernen\nSpieler einsehen","OK","Abbrechen");
  125.             case DIALOG_REMOVE: ShowPlayerDialog(playerid,DIALOG_WHITELIST,DIALOG_STYLE_LIST,"LA Dynamic Whitelist","Spieler hinzufuegen\nSpieler entfernen\nSpieler einsehen","OK","Abbrechen");
  126.             case DIALOG_UEBERSICHT: ShowPlayerDialog(playerid,DIALOG_WHITELIST,DIALOG_STYLE_LIST,"LA Dynamic Whitelist","Spieler hinzufuegen\nSpieler entfernen\nSpieler einsehen","OK","Abbrechen");
  127.         }
  128.     }
  129.     return 0;
  130. }
  131.  
  132. CreateTables()
  133. {
  134.     new query[150] = "CREATE TABLE IF NOT EXISTS `"TABLE"` (`ID` INTEGER PRIMARY KEY AUTOINCREMENT,`Name` TEXT(24));"; //Struktur für die Tabelle
  135.     db_query(la_database,query); //Ausführen des Querys
  136.     return 1;
  137. }
  138.  
  139. IsOnWhitelist(playerid)
  140. {
  141.     new query[128];
  142.     format(query,sizeof query,"SELECT `Name` FROM `"TABLE"` WHERE `Name` = '%s'",gPlayerName[playerid]); //Query formatieren
  143.     new DBResult:result = db_query(la_database,query); //Abschicken des Querys
  144.     new rows = db_num_rows(result);  //Anzahl der ausgelesenen Spalten zwischenspeichern
  145.     db_free_result(result); //Ergebnis wieder leeren
  146.     if(rows>= 1) return 1; //wenn Spalten gefunden wurden
  147.     return 0; //sonst nicht
  148. }
  149.  
  150. IsEingabeOnWhitelist(name[])
  151. {
  152.     new query[128];
  153.     format(query,sizeof query,"SELECT `Name` FROM `"TABLE"` WHERE `Name` = '%s'",name); //Query formatieren
  154.     new DBResult:result = db_query(la_database,query); //Abschicken des Querys
  155.     new rows = db_num_rows(result);  //Anzahl der ausgelesenen Spalten zwischenspeichern
  156.     db_free_result(result); //Ergebnis wieder leeren
  157.     if(rows >=1) return 1; //wenn Spalten gefunden wurden
  158.     return 0; //sonst nicht
  159. }
  160.  
  161. forward KickPlayer(playerid);
  162. public KickPlayer(playerid) {
  163.     SendClientMessage(playerid,ROT,"Du wurdest gekickt, weil dein Name nicht auf der Whitelist steht!");
  164.     Kick(playerid);
  165.     return 1;
  166. }
Add Comment
Please, Sign In to add comment