Текущая версия SA-MP: 0.3.7


IP: 77.220.180.96:7777
  Новые сообщения · Поиск
  • Страница 1 из 1
  • 1
Модератор форума: KaTacTpOqpa  
Проблемы с регистрацией
Norman Сообщение # 1  | 17:51:04
Пользователи
Сообщений: 7
Репутация: 0
Всем привет. Вот начал изучать pawno, немного поработал с объектами, пикапами, и т.д., по мелочи, теперь хочу залесть в ту ступень изучения, которая немного посложнее. Хочу попробывать написать регистрацию для ДМ мода, самую простую, изучил свойства инлуида Dini, PolCar все очень удобно и понятно изложил на форуме, большое спсп за это. Так вот, может у кого есть пример регистрации с этим инлудом. Или может кто то владеет какой то информацией где можно просмотреть урок. Буду рад помощи.
BJIADOKC Сообщение # 2  | 20:07:58
Скриптеры
Сообщений: 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
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
Скриптеры
Сообщений: 601
Репутация: 161
1 = true, 0 = false wink

тут больше не сижу... открыл свой проект
Demetrius Сообщение # 5  | 13:03:21
VIP-пользователи
Сообщений: 1192
Репутация: 158
Quote (BJIADOKC)
1 = true, 0 = false

дык такбы и сказал, что true/false, а я думал она просто число содержит


Sweet >>> Armin >>> Demetrius

SA:MP >> MTA:SA >> IRL
BJIADOKC Сообщение # 6  | 20:26:51
Скриптеры
Сообщений: 601
Репутация: 161
sorry, снаркоманил biggrin

тут больше не сижу... открыл свой проект
Norman Сообщение # 7  | 21:20:00
Пользователи
Сообщений: 7
Репутация: 0
Во большое спасибо! Очень ценная информация. Будуд дальше пробывать! Спасибо.
FAMAS Сообщение # 8  | 00:44:03
Фанат Владокса :D
Скриптеры
Сообщений: 84
Репутация: 44
biggrin ВЛАДОКС - наркоманчтоле (без обид)
Переписывал твой код, потом сидел ошибки исправлял 2 часа (так долго потмоу что новичек в PAWNO)
А так за регистрацию спасибо большое
Demetrius Сообщение # 9  | 11:52:27
VIP-пользователи
Сообщений: 1192
Репутация: 158
[off]
Quote (FAMAS)
ВЛАДОКС - наркоманчтоле (без обид)

он еще и пьяница :DD[/off]


Sweet >>> Armin >>> Demetrius

SA:MP >> MTA:SA >> IRL
FAMAS Сообщение # 10  | 12:16:44
Фанат Владокса :D
Скриптеры
Сообщений: 84
Репутация: 44
Armin, Это пичально =З
Jin Сообщение # 11  | 12:23:28
Забаненые
Сообщений: 84
Репутация: -23
А там фраги будут сохр.

Добавлено (20.06.2011, 12:23)
---------------------------------------------
или скажите как в LAdmin сделать регу в диалоге

Norman Сообщение # 12  | 12:20:53
Пользователи
Сообщений: 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
VIP-пользователи
Сообщений: 1192
Репутация: 158
Quote (Norman)
Всем спасибо за помощь, но вот еще вопрос по этой теме. Не находит в папке с инклудами инклуд Dini. Но он имеется в этой папке и прописан в моде, не пойму в чем проблема, может у кого была подобная?

в сервере есть 2 папки include
засунь дини в обе папки
может поможет


Sweet >>> Armin >>> Demetrius

SA:MP >> MTA:SA >> IRL
BJIADOKC Сообщение # 14  | 16:18:41
Скриптеры
Сообщений: 601
Репутация: 161
Quote (Armin)
в сервере есть 2 папки include

наркоманштоле? в самом сервере она по идее нах не нужна, просто у самп тим руки криворукие и им лень запилить 2 инклуда в папку с инклудами павно


тут больше не сижу... открыл свой проект
VERGIL Сообщение # 15  | 22:01:36
Пользователи
Сообщений: 82
Репутация: 28
[off]НарКоманИЩе - BJIADOKC,[/off]

THIS IS POLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
I your friend ;D



Редактировано VERGIL - Вторник, 26 Июл 2011, 22:01:53
BJIADOKC Сообщение # 16  | 22:24:49
Скриптеры
Сообщений: 601
Репутация: 161
Quote (VERGIL)
НарКоманИЩе - BJIADOKC,[/off]

а ну цыц оффтопить в моих разделах biggrin


тут больше не сижу... открыл свой проект
Demetrius Сообщение # 17  | 22:26:43
VIP-пользователи
Сообщений: 1192
Репутация: 158
Quote (BJIADOKC)
наркоманштоле?

не biggrin я **** такое счастье
Quote (BJIADOKC)
в самом сервере она по идее нах не нужна, просто у самп тим руки криворукие и им лень запилить 2 инклуда в папку с инклудами павно

аааа
Quote (BJIADOKC)
у самп тим руки криворукие

это я пропалил с выходом 0.3c


Sweet >>> Armin >>> Demetrius

SA:MP >> MTA:SA >> IRL
BJIADOKC Сообщение # 18  | 22:28:43
Скриптеры
Сообщений: 601
Репутация: 161
Quote (Armin)
это я пропалил с выходом 0.3c

это было видно еще перед выходом 0.2.2
если даже хотябы вспомнить баг airwalk dry


тут больше не сижу... открыл свой проект
VIRUS8308 Сообщение # 19  | 20:24:55
Пользователи
Сообщений: 4
Репутация: 0
а чё с этим делать? wacko

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 "]"
  • Страница 1 из 1
  • 1
Поиск: