Такая регистрация подойдет для новичков которые не знают как сделать регистрацию и так, начнем.
Ко всем include добавляем
#include <mxINI>
Далее ко всем переменным добавляем это
new PAccount[MAX_PLAYERS];
enum pInfo
{
pPass[64],
pLevel,
pAdmin,
pSex,
pSkin,
pMoney,
pMail
}
new PlayerInfo[MAX_PLAYERS][pInfo];
new playername[MAX_PLAYER_NAME];// Массив для получения имени игрока
new stringREG[300];
new RulesMSG[17][] = {
{"1. Игровой процесс\n"},
{"Запрещено:\n"},
{"Использование любых программ скриптов читов и.т.п. дающие нечестное преимущество в игре.\n"},
{"Использование багов (Ошибок, Неисправностей мода).\n"},
{"Использовать ESC в целях ухода от погони/смерти.\n"},
{"Убивать игроков на спавне (Место возрождения, базы организаций).\n"},
{"Убивать игроков при помощи транспорта (Давить, Стрелять с водительского места).\n"},
{"Убийство/нанесение физического вреда игрокам без причины (ДМ - Death Match).\n"},
{"Злоупотребление игровыми возможностями для создания неудобств игрокам.\n\n"},
{"2. Ник в игре\n"},
{"(сменить ник можно через /mm >> Сменить ник)\n"},
{"Ник должен состоять из Имени_Фамилии с заглавных букв.\n"},
{"Запрещено:\n"},
{"Запрещено использовать чужие (уже кем-то занятые) ники.\n"},
{"Запрещено использовать ники, содержащие нецензурные или оскорбительные слова.\n"},
{"Отправлять более одной заявки в час (Исключение: Просьба Администрации).\n"},
{"Если вам отказали в смене ника, Значит нельзя.\n"}
};
new RulesMSGG[22][] = {
{"3. Чат\n"},
{"OOC (Out Of Charter) - это всё, что касается реального мира.\n"},
{"IC (In Charter) - это всё, что касается виртульного мира, то есть игры.\n"},
{"Запрещено:\n"},
{"Ругательство, оскорбления или нецензурная речь.\n"},
{"Угрозы игрокам (Не относящиеся к игровому процессу).\n"},
{"Писать сообщения в верхнем регистре (Caps Lock).\n"},
{"Писать в чат объявлений сообщения не относящихся к Role Play.\n"},
{"Писать одно и тоже сообщение слишком часто.\n"},
{"Обсуждать, критиковать действия администрации.\n"},
{"Реклама сторонних ресурсов.\n\n"},
{"4. Администрация сервера\n"},
{"Необходимо сообщать администрации о каких либо нарушениях из данных правил (/mm > Репорт).\n"},
{"Администрация самостоятельно выбирает штрафные санкции для каждого из случаев.\n"},
{"Запрещено препятствовать администрации в работе.\n"},
{"Решение администрации является окончательным и не подлежит обсуждению.\n\n"},
{"5. Торговля.\n"},
{"Запрещены любые денежные махинации.\n"},
{"Запрещена продажа / покупка чего либо, за реальные деньги.\n"},
{"Запрещен обмен вне игровых предметов в любой форме, на игровые.\n"},
{"Запрещен обмен чего либо между игровыми серверами.\n"},
{"Запрещена продажа / передача аккаунтов.\n"}
};
К форвардам добавим
forward OnPlayerRegister(playerid, password[]); forward OnPlayerLogin(playerid,password[]);
В public OnPlayerRequestClass вставим
if(PAccount[playerid] == 1)
{
GetPlayerName(playerid, playername, sizeof(playername));
format(stringREG, sizeof(stringREG), "Здравствуйте уважаемый игрок!\nВы зашли на сервер \nДля авторизации введи пароль в окошко\nЛогин: %s\nПароль: ", playername);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", stringREG, "Принять", "");
}
else
{
GetPlayerName(playerid, playername, sizeof(playername));
format(stringREG, sizeof(stringREG), "Здравствуйте уважаемый игрок!\nВы зашли на сервер \nДля регистрации введи пароль в окошко\n -Пароль должен быть не менее 6-ти и не более 20-ти символов\n -Пароль должен состоять из латинских букв", playername);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Регистрация", stringREG, "Принять", "");
}
В public OnPlayerConnect вставляем
PlayerInfo[playerid][pAdmin] = 0;
if(PlayerInfo[playerid][pLevel] == 0) PlayerInfo[playerid][pLevel] = 1;
new string[128];
GetPlayerName(playerid,playername,sizeof(playername));
format(string,sizeof(string),"users/%s.ini", playername);
if(fexist(string))
{
PAccount[playerid] = 1;
}
else
{
PAccount[playerid] = 0;
}
SendClientMessage(playerid,0xFF00000,"Добро пожаловать на сервер ");// Выводим игрок сообщение
И так, теперь самое сложное
В public OnDialogResponse вставим
switch(dialogid)
{
case 1:
{
if(!strlen(inputtext)) ShowPlayerDialog(playerid, 3, DIALOG_STYLE_MSGBOX, "Ошибка", "Поле ввода не может быть пустым", "Назад", "");
for(new i = strlen(inputtext); i != 0; --i)
switch(inputtext[i])
{
case 'А'..'Я', 'а'..'я': return ShowPlayerDialog(playerid, 4, DIALOG_STYLE_MSGBOX, "Ошибка", "Пароль не должен состоять из русских символов\nПожалуйста смените раскладку клавиатуры!", "Назад", "");
}
new pass[64];// Массив с паролем
strmid(pass, inputtext, 0, strlen(inputtext), 64);// Считываем текст с диалога
OnPlayerLogin(playerid, pass);// Запускаем паблик входа
}
case 2:
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 4, DIALOG_STYLE_MSGBOX, "Ошибка", "Поле ввода не может быть пустым", "Назад", "");
if(strlen(inputtext) < 6 || strlen(inputtext) > 20) return ShowPlayerDialog(playerid, 4, DIALOG_STYLE_MSGBOX, "Ошибка", "Пароль должен состоять не менее 6-ти и не более 20-ти символов", "Назад", "");
for(new i = strlen(inputtext); i != 0; --i)
switch(inputtext[i])
{
case 'А'..'Я', 'а'..'я': return ShowPlayerDialog(playerid, 4, DIALOG_STYLE_MSGBOX, "Ошибка", "Пароль не должен состоять из русских символов\nПожалуйста смените раскладку клавиатуры!", "Назад", "");
}
new pass[64];// Массив с паролем
strmid(pass, inputtext, 0, strlen(inputtext), 64);// Считываем текст с диалога
OnPlayerRegister(playerid, pass);// Запускаем паблик регистрации
new string[1200];
format(string, sizeof(string), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", RulesMSG[0], RulesMSG[1], RulesMSG[2], RulesMSG[3], RulesMSG[4], RulesMSG[5], RulesMSG[6], RulesMSG[7], RulesMSG[8], RulesMSG[9], RulesMSG[10], RulesMSG[11], RulesMSG[12], RulesMSG[13], RulesMSG[14], RulesMSG[15], RulesMSG[16]);
ShowPlayerDialog(playerid, 5, DIALOG_STYLE_MSGBOX, "Правила сервера", string, "Принять", "");
}
case 3:
{
GetPlayerName(playerid, playername, sizeof(playername));
format(stringREG, sizeof(stringREG), "Здравствуйте уважаемый игрок!\nВы зашли на сервер \nДля авторизации введи пароль в окошко\nЛогин: %s\nПароль: ", playername);
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_PASSWORD, "Авторизация", stringREG, "Принять", "");
}
case 4:
{
GetPlayerName(playerid, playername, sizeof(playername));
format(stringREG, sizeof(stringREG), "Здравствуйте уважаемый игрок!\nВы зашли на сервер \nДля регистрации введи пароль в окошко\n -Пароль должен быть не менее 6-ти и не более 20-ти символов\n -Пароль должен состоять из латинских букв", playername);
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Регистрация", stringREG, "Принять", "");
}
case 5:
{
new string[1200];
format(string, sizeof(string), "%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s", RulesMSGG[0], RulesMSGG[1], RulesMSGG[2], RulesMSGG[3], RulesMSGG[4], RulesMSGG[5], RulesMSGG[6], RulesMSGG[7], RulesMSGG[8], RulesMSGG[9], RulesMSGG[10], RulesMSGG[11], RulesMSGG[12], RulesMSGG[13], RulesMSGG[14], RulesMSGG[15], RulesMSGG[16], RulesMSGG[17], RulesMSGG[18], RulesMSGG[19], RulesMSGG[20], RulesMSGG[21]);
ShowPlayerDialog(playerid, 6, DIALOG_STYLE_MSGBOX, "Правила сервера", string, "Принять", "");
}
case 6:
{
new string[50];
format(string, sizeof(string), "Введите свою почту mail:");
ShowPlayerDialog(playerid, 7, DIALOG_STYLE_INPUT, "Подтверждение почты", string, "Принять", "");
new stringmail = strlen(inputtext);
PlayerInfo[playerid][pMail] = stringmail;
}
case 7:
{
ShowPlayerDialog(playerid, 8, DIALOG_STYLE_MSGBOX, "Выбор пола", "Выберите свой пол: ", "Мужской", "Женский");
}
case 8:
{
if(response)
{
PlayerInfo[playerid][pSex] = 1;
ShowPlayerDialog(playerid, 9, DIALOG_STYLE_LIST, "Выбор скина", "1) Бомж Василий\n2) Бомж Петя\n3) Бомж Шмыга\n4) Бомж Кеша\n5) Бомж Афанасий", "Выбрать", "");
}
else
{
PlayerInfo[playerid][pSex] = 2;
ShowPlayerDialog(playerid, 9, DIALOG_STYLE_LIST, "Выбор скина", "1) Бомжиха Алёна\n2) Бомжиха Валентина\n3) Бомжиха Анастасия\n4) Бомжиха Петровна", "Выбрать", "");
}
}
case 9:
{
if(PlayerInfo[playerid][pSex] == 1)
{
switch(listitem)
{
case 0: { SetPlayerSkin(playerid, 78); PlayerInfo[playerid][pSkin] = 78; SpawnPlayer(playerid); }
case 1: { SetPlayerSkin(playerid, 79); PlayerInfo[playerid][pSkin] = 79; SpawnPlayer(playerid); }
case 2: { SetPlayerSkin(playerid, 134); PlayerInfo[playerid][pSkin] = 134; SpawnPlayer(playerid); }
case 3: { SetPlayerSkin(playerid, 200); PlayerInfo[playerid][pSkin] = 200; SpawnPlayer(playerid); }
case 4: { SetPlayerSkin(playerid, 230); PlayerInfo[playerid][pSkin] = 230; SpawnPlayer(playerid); }
}
}
else
{
switch(listitem)
{
case 0: { SetPlayerSkin(playerid, 10); PlayerInfo[playerid][pSkin] = 10; SpawnPlayer(playerid); }
case 1: { SetPlayerSkin(playerid, 39); PlayerInfo[playerid][pSkin] = 39; SpawnPlayer(playerid); }
case 2: { SetPlayerSkin(playerid, 54); PlayerInfo[playerid][pSkin] = 54; SpawnPlayer(playerid); }
case 3: { SetPlayerSkin(playerid, 77); PlayerInfo[playerid][pSkin] = 77; SpawnPlayer(playerid); }
}
}
}
В конец мода добавляем
public OnPlayerRegister(playerid, password[])// Паблик регистрации
{
if(IsPlayerConnected(playerid))// Проверка на подключение игрока
{
new string[64];// Массив с путём для файла
GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
format(string,sizeof(string), "users/%s.ini", playername);// Добавляем имя игрока, в путь для сохранения
new iniFile = ini_createFile(string);// Создаём файл с именем игрока в папке players
if(iniFile < 0)// Если Файла нет
{
iniFile = ini_openFile(string);// Открываем
}
if(iniFile >= 0)// Если файл есть
{
strmid(PlayerInfo[playerid][pPass],password,0,strlen(password),255);// Присваиваем массиву pPass, значение password[]
ini_setString(iniFile,"Pass",PlayerInfo[playerid][pPass]);
ini_setInteger(iniFile,"Level",PlayerInfo[playerid][pLevel]);
ini_setInteger(iniFile,"Admin",PlayerInfo[playerid][pAdmin]);
ini_setInteger(iniFile,"Sex",PlayerInfo[playerid][pSex]);
ini_setInteger(iniFile,"Skin",PlayerInfo[playerid][pSkin]);
ini_setInteger(iniFile,"Money",PlayerInfo[playerid][pMoney]);
ini_setString(iniFile,"Mail",PlayerInfo[playerid][pMail]);
ini_closeFile(iniFile);// Закрываем файл
}
}
return 1;
}
public OnPlayerLogin(playerid,password[])
{
if(IsPlayerConnected(playerid))// Проверка на подключение игрока
{
new string[64];// Массив с путём для файла
new pass[64];// Массив с паролем
GetPlayerName(playerid, playername, sizeof(playername));// Получаем Имя игрока
format(string,sizeof(string), "users/%s.ini", playername);// Добавляем имя игрока, в путь для загрузки
new iniFile = ini_openFile(string);// Открываем файл
ini_getString(iniFile, "Pass", pass, 64);// Загружаем пароль
if(strcmp(pass, password, true) == 0)// Если введёный пароль, соответсвует паролю при регистрации, то загружаем акк
{
ini_getString(iniFile,"Pass",PlayerInfo[playerid][pPass]);
ini_getInteger(iniFile,"Level",PlayerInfo[playerid][pLevel]);
ini_getInteger(iniFile,"Admin",PlayerInfo[playerid][pAdmin]);
ini_getInteger(iniFile,"Sex",PlayerInfo[playerid][pSex]);
ini_getInteger(iniFile,"Skin",PlayerInfo[playerid][pSkin]);
ini_getInteger(iniFile,"Money",PlayerInfo[playerid][pMoney]);
ini_getString(iniFile,"Mail",PlayerInfo[playerid][pMail]);
ini_closeFile(iniFile);// Закрываем файл
SpawnPlayer(playerid);
}
else// Если пароль не верен..
{
ini_closeFile(iniFile);// Закрываем файл
return 1;
}
}
return 1;
}
И теперь стоки
stock SavePlayer(playerid)
{
new string[64];
GetPlayerName(playerid, playername, sizeof(playername));
format(string, sizeof(string), "users/%s.ini", playername);
new iniFile = ini_openFile(string);
ini_setString(iniFile,"Pass",PlayerInfo[playerid][pPass]);
ini_setInteger(iniFile,"Level",PlayerInfo[playerid][pLevel]);
ini_setInteger(iniFile,"Admin",PlayerInfo[playerid][pAdmin]);
ini_setInteger(iniFile,"Sex",PlayerInfo[playerid][pSex]);
ini_setInteger(iniFile,"Skin",PlayerInfo[playerid][pSkin]);
ini_setInteger(iniFile,"Money",PlayerInfo[playerid][pMoney]);
ini_setString(iniFile,"Mail",PlayerInfo[playerid][pMail]);
ini_closeFile(iniFile);
}
и в паблик OnPlayerDisconnect добавим
SavePlayer(playerid);
Сохранение почты еще не работает, до делаю в скором времени
Сделал все для новичков, опытные ребята могут и сами сделать)))
И еще, в папке scriptfiles создайте папку users для хранения аккаунтов
Сообщение отредактировал mizzy526: 26 мая 2016 - 19:32
Вход
Регистрация
Помощь















