Форум Pawn.Wiki - Воплоти мечту в реальность!: Полноценная система регистрации для new.pwn - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

  • (3 Страниц) +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ GF ]
Полноценная система регистрации для new.pwn На mxini
Оценка: ***** 2 Голосов

#1
Пользователь офлайн   mizzy526 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Всем привет с вами Mizzy, сегодня я выложу действительно хорошую регистрацию
Такая регистрация подойдет для новичков которые не знают как сделать регистрацию и так, начнем.
Ко всем 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

0

#2
Пользователь офлайн   krutoy.krosch 

  • Banned
  • Вставить ник
  • Раскрыть информацию
Я думал mxINI уже не кто не использует.... Оказывается еще есть такие люди

#3
Пользователь офлайн   Brimx 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Да почему же, используют) Я лично все еще юзаю :laugh:
0

#4
Пользователь офлайн   krutoy.krosch 

  • Banned
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияBrimx (26 мая 2016 - 19:54) писал:

Да почему же, используют) Я лично все еще юзаю :laugh:


Молодец.

#5
Пользователь офлайн   Brimx 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Ну как использую, туплю в нем по малому еще :happy:
Кстати,
C:\Users\Weyn\Desktop\??????\gamemodes\Untitled.pwn(516) : error 002: only a single statement (or expression) can follow each "case"
cобсна ссылочка с этими строками, я вот понял что это выходит из-за того что у нас после case идет if..., но при чем тут эта строка, хелпани.
А то я не так давно в этой теме, пока осваиваю все по малому
http://www.upload.ee.../__________.png

Сообщение отредактировал Brimx: 26 мая 2016 - 20:38

0

#6
Пользователь офлайн   m1n1vv 

  • Профессионал
  • Вставить ник
  • Раскрыть информацию
Нет. Из-за того, что case вне switch или он отсутствует.
0

#7
Пользователь офлайн   Charil007 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияkrutoy.krosch (26 мая 2016 - 19:45) писал:

Я думал mxINI уже не кто не использует.... Оказывается еще есть такие люди

Я думал такие как вы уже вымерли
2

#8
Пользователь офлайн   .evoxxx 

  • Liberty Inc.
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияCharil007 (26 мая 2016 - 21:56) писал:

Я думал такие как вы уже вымерли

меньше раздумий, больше действий
0

#9
Пользователь офлайн   krutoy.krosch 

  • Banned
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияCharil007 (26 мая 2016 - 21:56) писал:

Я думал такие как вы уже вымерли


Мы не динозаврики что бы вымирать :DDD

#10
Пользователь офлайн   Romzes 

  • ( ^_^ )
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияkrutoy.krosch (26 мая 2016 - 19:45) писал:

Я думал mxINI уже не кто не использует.... Оказывается еще есть такие люди


Это самый нормальный инклуд для работы с файлами, я иногда использую.
0

Поделиться темой:


  • (3 Страниц) +
  • 1
  • 2
  • 3
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика