- ВойтиАвторизация через uNet
- РегистрацияРегистрация на сайте через uNet
Текущая версия SA-MP: 0.3.7
IP: 77.220.180.96:7777
Новые сообщения · Поиск |
|
|
Модератор форума: KaTacTpOqpa |
Форум Помощь по скриптингу SA-MP Вопросы по скриптингу Проблемы с регистрацией (Буду рад любой помощи) |
Проблемы с регистрацией | ||||
|
BJIADOKC | Сообщение # 2 | 20:07:58 27 Май 2011 |
Скриптеры
Сообщений: 601
Репутация: 161
|
ну вот простейшая регистрация: в начало добавляешь Code #define AccountWay "/players/%s.ini" //обозначаем путь к файлу (в данном случае в папке scriptfiles нужно создать папку players, в которой будут все аккаунты) #define REGISTER 5000 //это будет диалог регистрации #define LOGIN 5001 //это будет диалог логина #define CHANGEPASS 5002 //это будет диалог смены пароля enum Info //обозначаем количество переменных { Kills, //в этой переменной будут убийства Deaths, //в этой смерти AdminLevel, //в этой уровень администратора bool:LoggedIn //это логическая переменная, если игрок залогинился то = 1, иначе 0 } new Player[MAX_PLAYERS][Info]; //обьявляем все переменные в массив в OnPlayerConnect Code new file[128], name[24]; //берем путь к файлу с аккаунтами и переменную имени GetPlayerName(playerid,name,24); //записываем имя в переменную format(file,128,AccountWay,name); //обозначаем путь к файлу из дефайна if(dini_Exists(file)) ShowPlayerLoginDialog(playerid); //если аккаунт существует, то загружаем его else ShowPlayerRegisterDialog(playerid); //если аккаунта не существует то регистрируем его в OnPlayerDisconnect Code new file[128], name[24]; //берем путь к файлу с аккаунтами и переменную имени GetPlayerName(playerid,name,24); //записываем имя в переменную format(file,128,AccountWay,name); //обозначаем путь к файлу из дефайна if(dini_Exists(file)) SaveAccount(playerid); //если аккаунт существует, то сохраняем его в OnPlayerDeath Code Player[playerid][Deaths]++; //прибавляем тому кто умер +1 смерть Player[killerid][Kills]++; //прибавляем тому кто убил +1 убийство SetPlayerScore(killerid,Player[killerid][Kills]); //ставим тому кто убил его фраги new file[2][128], name[2][24]; //берем по 2 переменных для файла и для имени GetPlayerName(playerid,name[0],24); //берем имя умершего GetPlayerName(killerid,name[1],24); //берем имя убийцы format(file[0],128,AccountWay,name[0]); //файл умершего format(file[1],128,AccountWay,name[1]); //файл убийцы dini_IntSet(file[0],"Deaths",Player[playerid][Deaths]); //записываем в файл умершему его новый показатель смертей dini_IntSet(file[1],"Kills",Player[playerid][Kills]); //записываем в файл убийце новый показатель его убийств в OnDialogResponse Code switch(dialogid) { case REGISTER: { switch(response) { case 0: {SendClientMessage(playerid,0xAFAFAFAA,"Вы отказались от регистрации"); /*Kick(playerid);*/} case 1: CreateAccount(playerid,inputtext); } } case LOGIN: { switch(response) { case 0: {SendClientMessage(playerid,0xAFAFAFAA,"Вы отказались от входа"); Kick(playerid);} case 1: Login(playerid,inputtext); } } case CHANGEPASS: { switch(response) { case 0: return SendClientMessage(playerid,0xAFAFAFAA,"Вы отказались от смены пароля"); case 1: ChangePassword(playerid,inputtext); } } } в OnPlayerCommandText Code if(!strcmp(cmdtext,"/changepass",true)) { if(!IsPlayerConnected(playerid)) return 1; //если игрока нет на сервере то завершаем функцию new file[128], name[24]; GetPlayerName(playerid,name,24); format(file,128,AccountWay,name); if(!dini_Exists(file)) return 1; ShowPlayerDialog(playerid,CHANGEPASS,DIALOG_STYLE_INPUT,"Смена пароля","Вы хотите сменить пароль от аккаунта\nВведите новый пароль в поле снизу\nПароль должен быть не меньше 4 и не больше 20 символов","Сменить","Отмена"); return 1; } и в конец вставь Code stock ShowPlayerRegisterDialog(playerid) { if(!IsPlayerConnected(playerid)) return 1; new str[128], name[24]; GetPlayerName(playerid,name,24); format(str,128,"Регистрация аккаунта %s",name); return ShowPlayerDialog(playerid,REGISTER,DIALOG_STYLE_INPUT,str,"Зарегистрируйте свой аккаунт\nВведите свой будущий пароль\nОн должен быть не менее 4 и не более 20 символов","Ок","Отмена"); } stock ShowPlayerLoginDialog(playerid) { if(!IsPlayerConnected(playerid)) return 1; new str[128], name[24]; GetPlayerName(playerid,name,24); format(str,128,"Аккаунт %s зарегистрирован на сервере",name); return ShowPlayerDialog(playerid,LOGIN,DIALOG_STYLE_INPUT,str,"Войдите в свой аккаунт\nВведите пароль от аккаунта","Ок","Отмена"); } stock CreateAccount(playerid,password[]) { if(!IsPlayerConnected(playerid)) return 1; //если игрока нет на сервере то завершаем функцию new file[128], name[24]; GetPlayerName(playerid,name,24); format(file,128,AccountWay,name); if(dini_Exists(file)) return 1; dini_Create(file); dini_IntSet(file,"Kills",0); dini_IntSet(file,"Deaths",0); dini_Set(file,"Password",password); dini_IntSet(file,"AdminLevel",0); dini_IntSet(file,"LoggedIn",1); SendClientMessage(playerid,0xFF0000AA,"Вы успешно зарегистрировались и автоматически залогинелись"); Player[playerid][Kills] = 0; Player[playerid][Deaths] = 0; Player[playerid][LoggedIn] = true; Player[playerid][AdminLevel] = 0; return 1; } stock Login(playerid,password[]) { if(!IsPlayerConnected(playerid)) return 1; //если игрока нет на сервере то завершаем функцию new file[128], name[24]; GetPlayerName(playerid,name,24); format(file,128,AccountWay,name); if(!dini_Exists(file)) return 1; new tmp[256]; tmp = dini_Get(file,"Password"); if(!strlen(password) || strlen(password) < 4 || strlen(password) > 20 || strlen(password) < 0) {SendClientMessage(playerid,0xAFAFAFAA,"Неверный пароль"); return ShowPlayerLoginDialog(playerid);} if(strcmp(password,tmp,false) != 0) {SendClientMessage(playerid,0xAFAFAFAA,"Неверный пароль"); return ShowPlayerLoginDialog(playerid);} return LoadAccount(playerid); } stock ChangePassword(playerid,newpass[]) { if(!IsPlayerConnected(playerid)) return 1; //если игрока нет на сервере то завершаем функцию new file[128], name[24]; GetPlayerName(playerid,name,24); format(file,128,AccountWay,name); if(!dini_Exists(file)) return 1; if(!strlen(newpass) || strlen(newpass) < 4 || strlen(newpass) < 0 || strlen(newpass) > 20) return SendClientMessage(playerid,0xAFAFAFAA,"Неверная длина нового пароля"); dini_Set(file,"Password",newpass); return SendClientMessage(playerid,0xFF0000AA,"Вы успешно сменили пароль от аккаунта"); } stock LoadAccount(playerid) { if(!IsPlayerConnected(playerid)) return 1; //если игрока нет на сервере то завершаем функцию new file[128], name[24]; GetPlayerName(playerid,name,24); format(file,128,AccountWay,name); if(!dini_Exists(file)) return 1; Player[playerid][Kills] = dini_Int(file,"Kills"); Player[playerid][Deaths] = dini_Int(file,"Deaths"); Player[playerid][AdminLevel] = dini_Int(file,"AdminLevel"); dini_IntSet(file,"LoggedIn",1); Player[playerid][LoggedIn] = true; return 1; } stock SaveAccount(playerid) { new file[128], name[24]; GetPlayerName(playerid,name,24); format(file,128,AccountWay,name); if(!dini_Exists(file)) return 1; dini_IntSet(file,"Kills",Player[playerid][Kills]); dini_IntSet(file,"Deaths",Player[playerid][Deaths]); dini_IntSet(file,"AdminLevel",Player[playerid][AdminLevel]); dini_IntSet(file,"LoggedIn",0); Player[playerid][Kills] = 0; Player[playerid][Deaths] = 0; Player[playerid][AdminLevel] = 0; Player[playerid][LoggedIn] = false; return 1; } тут больше не сижу... открыл свой проект |
Demetrius | Сообщение # 3 | 22:37:41 27 Май 2011 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
Quote (BJIADOKC) bool:LoggedIn //это логическая переменная, если игрок залогинился то = 1, иначе 0 а зачем bool, если она имеет значения 1 или 0? Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
BJIADOKC | Сообщение # 4 | 01:26:13 28 Май 2011 |
Скриптеры
Сообщений: 601
Репутация: 161
|
1 = true, 0 = false
тут больше не сижу... открыл свой проект |
Demetrius | Сообщение # 5 | 13:03:21 28 Май 2011 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
Quote (BJIADOKC) 1 = true, 0 = false дык такбы и сказал, что true/false, а я думал она просто число содержит Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
BJIADOKC | Сообщение # 6 | 20:26:51 28 Май 2011 |
Скриптеры
Сообщений: 601
Репутация: 161
|
sorry, снаркоманил
тут больше не сижу... открыл свой проект |
Norman | Сообщение # 7 | 21:20:00 28 Май 2011 |
Пользователи
Сообщений: 7
Репутация: 0
|
Во большое спасибо! Очень ценная информация. Будуд дальше пробывать! Спасибо. |
FAMAS | Сообщение # 8 | 00:44:03 29 Май 2011 |
Фанат Владокса :D
Скриптеры
Сообщений: 84
Репутация: 44
|
ВЛАДОКС - наркоманчтоле (без обид) Переписывал твой код, потом сидел ошибки исправлял 2 часа (так долго потмоу что новичек в PAWNO) А так за регистрацию спасибо большое |
Demetrius | Сообщение # 9 | 11:52:27 29 Май 2011 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
[off] Quote (FAMAS) ВЛАДОКС - наркоманчтоле (без обид) он еще и пьяница :DD[/off] Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
FAMAS | Сообщение # 10 | 12:16:44 29 Май 2011 |
Фанат Владокса :D
Скриптеры
Сообщений: 84
Репутация: 44
|
Armin, Это пичально =З |
Jin | Сообщение # 11 | 12:23:28 20 Июн 2011 |
Забаненые
Сообщений: 84
Репутация: -23
|
А там фраги будут сохр. Добавлено (20.06.2011, 12:23) |
Norman | Сообщение # 12 | 12:20:53 25 Июл 2011 |
Пользователи
Сообщений: 7
Репутация: 0
|
[spoiler]new.pwn(7) : fatal error 100: cannot read from file: "dini" Compilation aborted.Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase 1 Error. Всем спасибо за помощь, но вот еще вопрос по этой теме. Не находит в папке с инклудами инклуд Dini. Но он имеется в этой папке и прописан в моде, не пойму в чем проблема, может у кого была подобная? |
Demetrius | Сообщение # 13 | 00:46:59 26 Июл 2011 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
Quote (Norman) Всем спасибо за помощь, но вот еще вопрос по этой теме. Не находит в папке с инклудами инклуд Dini. Но он имеется в этой папке и прописан в моде, не пойму в чем проблема, может у кого была подобная? в сервере есть 2 папки include засунь дини в обе папки может поможет Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
BJIADOKC | Сообщение # 14 | 16:18:41 26 Июл 2011 |
Скриптеры
Сообщений: 601
Репутация: 161
|
Quote (Armin) в сервере есть 2 папки include наркоманштоле? в самом сервере она по идее нах не нужна, просто у самп тим руки криворукие и им лень запилить 2 инклуда в папку с инклудами павно тут больше не сижу... открыл свой проект |
VERGIL | Сообщение # 15 | 22:01:36 26 Июл 2011 |
Пользователи
Сообщений: 82
Репутация: 28
|
[off]НарКоманИЩе - BJIADOKC,[/off]
THIS IS POLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! I your friend ;D Редактировано VERGIL - Вторник, 26 Июл 2011, 22:01:53 |
BJIADOKC | Сообщение # 16 | 22:24:49 26 Июл 2011 |
Скриптеры
Сообщений: 601
Репутация: 161
|
Quote (VERGIL) НарКоманИЩе - BJIADOKC,[/off] а ну цыц оффтопить в моих разделах тут больше не сижу... открыл свой проект |
Demetrius | Сообщение # 17 | 22:26:43 26 Июл 2011 |
VIP-пользователи
Сообщений: 1192
Репутация: 158
|
Quote (BJIADOKC) наркоманштоле? не я **** такое счастье Quote (BJIADOKC) в самом сервере она по идее нах не нужна, просто у самп тим руки криворукие и им лень запилить 2 инклуда в папку с инклудами павно аааа Quote (BJIADOKC) у самп тим руки криворукие это я пропалил с выходом 0.3c Sweet >>> Armin >>> Demetrius SA:MP >> MTA:SA >> IRL |
BJIADOKC | Сообщение # 18 | 22:28:43 26 Июл 2011 |
Скриптеры
Сообщений: 601
Репутация: 161
|
Quote (Armin) это я пропалил с выходом 0.3c это было видно еще перед выходом 0.2.2 если даже хотябы вспомнить баг airwalk тут больше не сижу... открыл свой проект |
VIRUS8308 | Сообщение # 19 | 20:24:55 11 Авг 2011 |
Пользователи
Сообщений: 4
Репутация: 0
|
а чё с этим делать? error 017: undefined symbol "AccountWay" error 017: undefined symbol "Player" warning 215: expression has no effect error 001: expected token: ";", but found "]" error 001: expected token: ";", but found "]" |
| |||
| |||