Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- By Seregamil
- */
- #include a_samp
- main(){}
- new DB: users_base;
- new DBResult: u_result;
- #define database "users.db"
- public OnGameModeInit(){
- if(!fexist(database)){//если БД отсутствует
- users_base = db_open(database);//функция 'db_open(base[])' при отсутствии нужной нам базы данных создает пустую БД
- db_query(users_base,"CREATE TABLE USERS(NAME varchar, PASSWORD varchar, MONEY int, KILLS int)");//ну и как итог - заполним базу данных со столбцами "Name, Password, Money, Kills"
- }
- else{//если БД присутствует
- users_base = db_open(database);//тупо откроем ее
- }
- return 1;
- }
- public OnGameModeExit(){
- for(new i;i!=GetMaxPlayers();i++){
- if(IsPlayerConnected(i) && GetPVarInt(i,"logged") == 1 && !IsPlayerNPC(i)){
- save_user(i);
- }
- }
- db_close(users_base);//при окончании работы сервера - закроем базу данных
- return 1;
- }
- public OnPlayerConnect(playerid){
- new str[500];
- format(str,sizeof str,"SELECT NAME, PASSWORD FROM USERS WHERE NAME = '%s'",p_name(playerid));//отправим запрос в таблицу на поиск нужного нам игрока
- u_result = db_query(users_base,str);
- if(!db_num_rows(u_result)){//если строки по нужному нам запросы отсутствуют в таблице - значит игрок незарегестрирован на сервере
- ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, " ","Зарегестрируйтесь","Вход","Кик");
- }
- else{//нужная нам строка присутствует
- ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, " ","Войдите в систему","Вход","Кик");
- }
- return 1;
- }
- p_name(playerid){
- new name[24];
- GetPlayerName(playerid,name,24);
- return name;
- }
- public OnPlayerDisconnect(playerid, reason){
- if(GetPVarInt(playerid,"logged") == 1) save_user(playerid);//при выходе игрока - сохраним его, при условии, что он уже вошел в систему
- return 1;
- }
- public OnPlayerSpawn(playerid){
- if(GetPVarInt(playerid,"logged") == 0) return Kick(playerid);//если игрок решил обойти регистрацию - обломаем его
- return 1;
- }
- public OnPlayerText(playerid, text[]){
- if(GetPVarInt(playerid,"logged") == 0) return false;//если игрок решил написать сообщение в чат, то сломаем систему
- return 1;
- }
- public OnPlayerCommandText(playerid, cmdtext[]){
- if(GetPVarInt(playerid,"logged") == 0) return false;//тоже самое, что и с текстом
- return 0;
- }
- public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]){
- if(dialogid == 0){
- if(!response) return Kick(playerid);//если игрок нажал 'ESC' или нажал на вторую кнопку - пошлем его к чертям
- if(!valid_password(inputtext)){//если введен некорректный пароль
- return ShowPlayerDialog(playerid, 0, DIALOG_STYLE_INPUT, " ","Зарегестрируйтесь","Вход","Кик");
- }
- new str[500];
- format(str,500,"INSERT INTO `USERS` (`NAME`, `PASSWORD`, `MONEY`, `KILLS`) VALUES ('%s', '%s', '0', '0')", p_name(playerid), inputtext);
- db_query(users_base, str);//добавим игрока в таблицу ко всем бабушкам
- SetPVarInt(playerid,"logged",1);//установим пивоварку на 1, т.е. игрок вошел в систему
- SendClientMessage(playerid,-1,"Вы успешно зарегестрировались на сервере!");
- return true;
- }
- if(dialogid == 1){
- if(!response) return Kick(playerid);//если игрок нажал 'ESC' или нажал на вторую кнопку - пошлем его к чертям
- if(!valid_password(inputtext)){//если введен некорректный пароль
- return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, " ","Войдите в систему","Вход","Кик");
- }
- new str[500];
- format(str,500,"SELECT * FROM USERS WHERE NAME = '%s'",p_name(playerid));
- u_result = db_query(users_base, str);
- new Field[100];
- db_get_field_assoc( u_result, "PASSWORD", Field, sizeof( Field ) );//запишем пароль из строки в переменную Field
- if(strcmp(Field, inputtext, true) == 0){//если пароли совпали
- db_get_field_assoc( u_result, "MONEY", Field, sizeof( Field ) ), GivePlayerMoney(playerid, strval(Field));
- db_get_field_assoc( u_result, "KILLS", Field, sizeof( Field ) ), SetPlayerScore(playerid, strval(Field));
- SetPVarInt(playerid,"logged",1);//установим пивоварку на 1, т.е. игрок вошел в систему
- SendClientMessage(playerid,-1,"Вы успешно вернулись в систему!");
- }
- else ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, " ","Войдите в систему","Вход","Кик");
- return true;
- }
- return 1;
- }
- valid_password(password[]){
- if(!strlen(password)) return false;//пароль тупо пустой
- for(new i;i!=strlen(password);i++){
- switch(password[i]){
- case 'a'..'z','A'..'Z','0'..'9': continue;//допустимые символы: английская расскладка и цифры
- default: return false;//во всех остальных случаях пароль некорректный
- }
- }
- return true;
- }
- save_user(userid){
- new str[500];
- format(str,500,"UPDATE USERS SET MONEY = '%d', KILLS = '%d' WHERE NAME = '%s'",GetPlayerMoney(userid),GetPlayerScore(userid),p_name(userid));
- db_query(users_base, str);//обновим значения денег и убийств в базе для игрока %s
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement