Advertisement
Seregamil

SQLite

Aug 2nd, 2013
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 6.00 KB | None | 0 0
  1. /*
  2.  
  3. By Seregamil
  4.  
  5. */
  6. #include a_samp
  7.  
  8. main(){}
  9.  
  10. new DB: users_base;
  11. new DBResult: u_result;
  12.  
  13. #define database "users.db"
  14.  
  15. public OnGameModeInit(){
  16.     if(!fexist(database)){//если БД отсутствует
  17.         users_base = db_open(database);//функция 'db_open(base[])' при отсутствии нужной нам базы данных создает пустую БД
  18.         db_query(users_base,"CREATE TABLE USERS(NAME varchar, PASSWORD varchar, MONEY int, KILLS int)");//ну и как итог - заполним базу данных со столбцами "Name, Password, Money, Kills"
  19.     }
  20.     else{//если БД присутствует
  21.         users_base = db_open(database);//тупо откроем ее
  22.     }
  23.     return 1;
  24. }
  25.  
  26. public OnGameModeExit(){
  27.     for(new i;i!=GetMaxPlayers();i++){
  28.         if(IsPlayerConnected(i) && GetPVarInt(i,"logged") == 1 && !IsPlayerNPC(i)){
  29.             save_user(i);
  30.         }
  31.     }
  32.     db_close(users_base);//при окончании работы сервера - закроем базу данных
  33.     return 1;
  34. }
  35.  
  36. public OnPlayerConnect(playerid){
  37.     new str[500];
  38.     format(str,sizeof str,"SELECT NAME, PASSWORD FROM USERS WHERE NAME = '%s'",p_name(playerid));//отправим запрос в таблицу на поиск нужного нам игрока
  39.     u_result = db_query(users_base,str);
  40.     if(!db_num_rows(u_result)){//если строки по нужному нам запросы отсутствуют в таблице - значит игрок незарегестрирован на сервере
  41.         ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "  ","Зарегестрируйтесь","Вход","Кик");
  42.     }
  43.     else{//нужная нам строка присутствует
  44.         ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "  ","Войдите в систему","Вход","Кик");
  45.     }
  46.     return 1;
  47. }
  48.  
  49. p_name(playerid){
  50.     new name[24];
  51.     GetPlayerName(playerid,name,24);
  52.     return name;
  53. }
  54.  
  55. public OnPlayerDisconnect(playerid, reason){
  56.     if(GetPVarInt(playerid,"logged") == 1) save_user(playerid);//при выходе игрока - сохраним его, при условии, что он уже вошел в систему
  57.     return 1;
  58. }
  59.  
  60. public OnPlayerSpawn(playerid){
  61.     if(GetPVarInt(playerid,"logged") == 0) return Kick(playerid);//если игрок решил обойти регистрацию - обломаем его
  62.     return 1;
  63. }
  64.  
  65. public OnPlayerText(playerid, text[]){
  66.     if(GetPVarInt(playerid,"logged") == 0) return false;//если игрок решил написать сообщение в чат, то сломаем систему
  67.     return 1;
  68. }
  69.  
  70. public OnPlayerCommandText(playerid, cmdtext[]){
  71.     if(GetPVarInt(playerid,"logged") == 0) return false;//тоже самое, что и с текстом
  72.     return 0;
  73. }
  74.  
  75. public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){
  76.     if(dialogid == 0){
  77.         if(!response) return Kick(playerid);//если игрок нажал 'ESC' или нажал на вторую кнопку - пошлем его к чертям
  78.         if(!valid_password(inputtext)){//если введен некорректный пароль
  79.             return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, "  ","Зарегестрируйтесь","Вход","Кик");
  80.         }
  81.         new str[500];
  82.         format(str,500,"INSERT INTO `USERS` (`NAME`, `PASSWORD`, `MONEY`, `KILLS`) VALUES ('%s', '%s', '0', '0')", p_name(playerid), inputtext);
  83.         db_query(users_base, str);//добавим игрока в таблицу ко всем бабушкам
  84.         SetPVarInt(playerid,"logged",1);//установим пивоварку на 1, т.е. игрок вошел в систему
  85.         SendClientMessage(playerid,-1,"Вы успешно зарегестрировались на сервере!");
  86.         return true;
  87.     }
  88.     if(dialogid == 1){
  89.         if(!response) return Kick(playerid);//если игрок нажал 'ESC' или нажал на вторую кнопку - пошлем его к чертям
  90.         if(!valid_password(inputtext)){//если введен некорректный пароль
  91.             return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "  ","Войдите в систему","Вход","Кик");
  92.         }
  93.         new str[500];
  94.         format(str,500,"SELECT * FROM USERS WHERE NAME = '%s'",p_name(playerid));
  95.         u_result = db_query(users_base, str);
  96.        
  97.         new Field[100];
  98.         db_get_field_assoc( u_result, "PASSWORD", Field, sizeof( Field ) );//запишем пароль из строки в переменную Field
  99.  
  100.         if(strcmp(Field, inputtext, true) == 0){//если пароли совпали
  101.             db_get_field_assoc( u_result, "MONEY", Field, sizeof( Field ) ), GivePlayerMoney(playerid, strval(Field));
  102.             db_get_field_assoc( u_result, "KILLS", Field, sizeof( Field ) ), SetPlayerScore(playerid, strval(Field));
  103.             SetPVarInt(playerid,"logged",1);//установим пивоварку на 1, т.е. игрок вошел в систему
  104.             SendClientMessage(playerid,-1,"Вы успешно вернулись в систему!");
  105.         }
  106.         else ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "  ","Войдите в систему","Вход","Кик");
  107.         return true;
  108.     }
  109.     return 1;
  110. }
  111.  
  112. valid_password(password[]){
  113.     if(!strlen(password)) return false;//пароль тупо пустой
  114.     for(new i;i!=strlen(password);i++){
  115.         switch(password[i]){
  116.             case 'a'..'z','A'..'Z','0'..'9': continue;//допустимые символы: английская расскладка и цифры
  117.             default: return false;//во всех остальных случаях пароль некорректный
  118.         }
  119.     }
  120.     return true;
  121. }
  122.  
  123. save_user(userid){
  124.     new str[500];
  125.     format(str,500,"UPDATE USERS SET MONEY = '%d', KILLS = '%d' WHERE NAME = '%s'",GetPlayerMoney(userid),GetPlayerScore(userid),p_name(userid));
  126.     db_query(users_base, str);//обновим значения денег и убийств в базе для игрока %s
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement