Форум Pawn.Wiki - Воплоти мечту в реальность!: Полноценная Регистрация На Mxini.inc - Форум Pawn.Wiki - Воплоти мечту в реальность!

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

  • (11 Страниц) +
  • « Первая
  • 8
  • 9
  • 10
  • 11
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ All ]
Полноценная Регистрация На Mxini.inc
Оценка: ***** 8 Голосов

#91
Пользователь офлайн   CounterBeach 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Автору большой + за урок. У самого стоит такая система регистрации, только она немного по другому(по другому сохраняет).
0

#92
Пользователь офлайн   Tuxter 

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

Просмотр сообщенияmxINI (26 августа 2014 - 18:39) писал:

Мой сервер уже месяца 3 стоит на этой реге, просто нужны ровные руки чтобы все было нормально

Вот не надо мне тут про руки заливать. Я все нормально делал, даже несколько раз просто перекопировал содержимое и раскидал куда надо.

Цитата

Чуууть-чууть не понял тебя,регистрация нормальная просто DateProp надо убрать и все.Создать папку accounts,туда будет сохраняться игрок.Почему она же полноценная?Потому что в отличие от других рег эта имеет большой набор функций для сервера(особенно для леенивых).Сам ставил себе(пока на мускл не перешел),все работало!

Папка с аккаунтами создана. А вот набор функций не предусмотрен.
  • Во-первых: не задана длина пароля при регистрации.
  • Во-вторых: при нажатии клавиши 'esc', игрока должно отключать от сервера, а не заново показывать диалог. Почему? Потому что диалог покажется всего один раз, если нажать еще раз, то диалог больше доставать не будет.
  • В-третьих: распространенная проблема: игрок при спавне умирает. Конечно, если переподключиться, здоровье игрока сохраниться.
  • В-четвертых: Не предусмотрено количество неверных вводов паролей. Если попробовать несколько раз быстро неверно ввести пароль, то получиться, что можно спокойно обойти эту систему.
    Здесь лучше всего использовать DIALOG_STYLE_MSGBOX при каждой неверной попытке, кстати, нужно.

P.S. И я считаю, что будет удобнее сделать сохранение аккаунтов не с помощью таймера (хотя это надежнее), а в случае, если игрок отключился от сервера. Так как меньше нагрузки будет поступать.
Кому интересно, то вот код:
stock SaveAccount(playerid)
{
	if(logged[playerid]==true)
	{
 		new account[128];
                new name[MAX_PLAYER_NAME], 
                new string[48];
                GetPlayerName(playerid, name, sizeof(name));
		format(account,sizeof(account), "users/%s.ini", name);
 		new iniFile = ini_openFile(account);
  		ini_setInteger(iniFile,"Money",GetPlayerMoney(playerid));
		GetPlayerHealth(playerid,PlayerInfo[playerid][pHealth]);
 		ini_setFloat(iniFile, "Heal", PlayerInfo[playerid][pHealth]);
  		GetPlayerArmour(playerid,PlayerInfo[playerid][pArmour]);
   		ini_setFloat(iniFile, "Armour", PlayerInfo[playerid][pArmour]);
 		ini_closeFile(iniFile);
	}
}


Некоторые значения, такие как "pAdmin" или "Kills" не добавлены.
public OnPlayerDisconnect(playerid,reason)
{
	SaveAccount(playerid);
	logged[playerid]=false;
	return 1;
}

Сообщение отредактировал Tuxter: 28 августа 2014 - 21:28

0

#93
Пользователь офлайн   mxINI 

  • Даун какой-то
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияTuxter (28 августа 2014 - 20:56) писал:

Вот не надо мне тут про руки заливать. Я все нормально делал, даже несколько раз просто перекопировал содержимое и раскидал куда надо.

Папка с аккаунтами создана. А вот набор функций не предусмотрен.
  • Во-первых: не задана длина пароля при регистрации.
  • Во-вторых: при нажатии клавиши 'esc', игрока должно отключать от сервера, а не заново показывать диалог. Почему? Потому что диалог покажется всего один раз, если нажать еще раз, то диалог больше доставать не будет.
  • В-третьих: распространенная проблема: игрок при спавне умирает. Конечно, если переподключиться, здоровье игрока сохраниться.
  • В-четвертых: Не предусмотрено количество неверных вводов паролей. Если попробовать несколько раз быстро неверно ввести пароль, то получиться, что можно спокойно обойти эту систему.
    Здесь лучше всего использовать DIALOG_STYLE_MSGBOX при каждой неверной попытке, кстати, нужно.

P.S. И я считаю, что будет удобнее сделать сохранение аккаунтов не с помощью таймера (хотя это надежнее), а в случае, если игрок отключился от сервера. Так как меньше нагрузки будет поступать.
Кому интересно, то вот код:
stock SaveAccount(playerid)
{
	if(logged[playerid]==true)
	{
 		new account[128];
                new name[MAX_PLAYER_NAME], 
                new string[48];
                GetPlayerName(playerid, name, sizeof(name));
		format(account,sizeof(account), "users/%s.ini", name);
 		new iniFile = ini_openFile(account);
  		ini_setInteger(iniFile,"Money",GetPlayerMoney(playerid));
		GetPlayerHealth(playerid,PlayerInfo[playerid][pHealth]);
 		ini_setFloat(iniFile, "Heal", PlayerInfo[playerid][pHealth]);
  		GetPlayerArmour(playerid,PlayerInfo[playerid][pArmour]);
   		ini_setFloat(iniFile, "Armour", PlayerInfo[playerid][pArmour]);
 		ini_closeFile(iniFile);
	}
}


Некоторые значения, такие как "pAdmin" или "Kills" не добавлены.
public OnPlayerDisconnect(playerid,reason)
{
	SaveAccount(playerid);
	logged[playerid]=false;
	return 1;
}




public SaveAccounts(playerid)
{
    for(new i=0; i<MAX_PLAYERS; i++)
    {
        new PlayerName[MAX_PLAYER_NAME], account[128];
        GetPlayerName(i,PlayerName,sizeof(PlayerName));
	format(account,sizeof(account), "users/%s.ini", name);
 	new iniFile = ini_openFile(account);
  	ini_setInteger(iniFile,"Money",GetPlayerMoney(playerid));
	GetPlayerHealth(playerid,PlayerInfo[playerid][pHealth]);
 	ini_setFloat(iniFile, "Heal", PlayerInfo[playerid][pHealth]);
  	GetPlayerArmour(playerid,PlayerInfo[playerid][pArmour]);
   	ini_setFloat(iniFile, "Armour", PlayerInfo[playerid][pArmour]);
 	ini_closeFile(iniFile);
    }
    return 1;
}


Вот и все, ты пытался довести регистрацию до ума, но неправильно по этому все пошло в ...,
да и дают тебе конечно не супер регистрацию, не бери все на халяву пиши большую часть сам

Сообщение отредактировал mxINI: 07 сентября 2014 - 17:40

0

#94
Пользователь офлайн   Vitalij 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияRomzes (21 октября 2011 - 21:35) писал:

Походу ты пропустил:
new logged[MAX_PLAYERS];
new saveacctimer;



https://pawn.wiki/in...h__1#entry94417

Ромзес помоги , 6 ошибок появилось , хотя пилил всё верно.
0

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

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

Просмотр сообщенияVitalij (15 сентября 2014 - 19:13) писал:

https://pawn.wiki/in...h__1#entry94417

Ромзес помоги , 6 ошибок появилось , хотя пилил всё верно.

Разве во всем может помочь только администратор???
0

#96
Пользователь офлайн   AndrewBoxer 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
C:\Users\User\Desktop\????? ?????\gamemodes\001.pwn(116) : error 035: argument type mismatch (argument 2)
C:\Users\User\Desktop\????? ?????\gamemodes\001.pwn(287) : warning 217: loose indentation
C:\Users\User\Desktop\????? ?????\gamemodes\001.pwn(306) : warning 217: loose indentation
C:\Users\User\Desktop\????? ?????\gamemodes\001.pwn(308) : warning 217: loose indentation
C:\Users\User\Desktop\????? ?????\gamemodes\001.pwn(315) : error 035: argument type mismatch (argument 2)
C:\Users\User\Desktop\????? ?????\gamemodes\001.pwn(325) : warning 217: loose indentation
C:\Users\User\Desktop\????? ?????\gamemodes\001.pwn(349) : error 035: argument type mismatch (argument 2)
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase


3 Errors.


Подскажи в чём не верны аргументы?
0

#97
Пользователь офлайн   Nikita_Voroncov 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияRomzes (21 октября 2011 - 21:35) писал:

Походу ты пропустил:
new logged[MAX_PLAYERS];
new saveacctimer;


Ссылку на new.pwn перезалей плз а то ошибки надо исправить!
0

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

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

Просмотр сообщенияNikita_Voroncov (22 сентября 2014 - 14:29) писал:

Ссылку на new.pwn перезалей плз а то ошибки надо исправить!

Ручками все надо ручками!
0

#99
Пользователь офлайн   Max_Miller 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияRomzes (02 октября 2011 - 13:39) писал:

Здравствуйте, в связи с частыми вопросами на форуме, решил сделать полноценную регистрацию на mxINI.inc в диалоговых окнах.
Для начала скачиваем инклуд mxINI, если у вас его нету https://pawn.wiki/in...showtopic=12399
Теперь, как скачали заходим в папку с сервером и кладем это в pawno/include.

Сделали? Отлично! Теперь приступим к уроку...

Прописываем в начале мода:
#include <mxINI>


Теперь ко всем массивам добавляем

enum pInfo {
    pMoney, // Сохраняет кол-во денег.
    Float:pHeal, // Сохраняет кол-во жизней.
    Float:pArmour, // Сохраняет кол-во брони.
    Kills,//сохраняет убийства
    Deaths//сохраняет смерти
};
new PlayerInfo[MAX_PLAYERS][pInfo];// создадим массив со статистикой

Теперь в public OnPlayerConnect(playerid):
  logged[playerid] = 0; 	
new PlayerName[MAX_PLAYER_NAME];
     		GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); // Получаем имя игрока
     		new account[128];
     		format(account,sizeof(account),"users/%s.ini",PlayerName); //Создадим аккаунт
     		{
     		if(!fexist(account)) //Если такого аккаунта нет,то...
     		{
     		ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT, "Регистрация", "Зарегистрируйся \nПароль ниже:", "Регистр", ""); //Выдаем диалог с регой
     		}
     		else
     		{
     		ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся \nПароль нижу:", "Логин", ""); //Если аккаунт существует, то выдаем авторизацию
     		}
         	}


Идем в паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]):


   if(dialogid == 1) //Регистрация
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Ну зарегистрируйся ты уже! \nПароль ниже:", "Ок", "");
        if(response) 
        {
            new PlayerName[MAX_PLAYER_NAME];
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName)); //Узнаем имя игрока
            new account[128];
            format(account,sizeof(account),"users/%s.ini",PlayerName);//проверяем. Есть ли этот акк в папке users
            if(fexist(account)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся! \n Пароль ниже:", "Логин", ""); //авторизуем его, если есть акк
            new iniFile = ini_createFile(account); //создаем акк
            if(iniFile < 0) ini_openFile (account); //если файл пустой, то
            {
                ini_setString(iniFile,"Пароль",inputtext); //Пароль
                ini_setInteger(iniFile, "Money", 5000); // Создаем файл аккаунта с кол-вом денег 5000
                ini_setFloat(iniFile, "Heal", 100.0); // Создаем файл аккаунта с кол-вом Здоровья
                ini_setFloat(iniFile, "Armour", 100.0); // Создаем файл аккаунта с кол-вом Брони
                ini_setInteger(iniFile, "Kills", 0); // Ну тут убийства
                ini_setInteger(iniFile, "Deaths", 0); // Смерти
                ini_closeFile(iniFile); //закроем файл
                ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся:", "Логин", "");
            }
        }
        else //Если этот вася захочет обойти регу и нажмет на Esc, то даем ему опять диалог
        {
            ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, "Регистрация", "Регистрируйся, червь:", "Ок", "");
        }
    }
    if(dialogid == 2)
    {
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся! \nПароль ниже:", "Логин", ""); 
        if(response)
        {
            new PlayerName[MAX_PLAYER_NAME], password[64];
            GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
            new account[128];
            format(account,sizeof(account),"users/%s.ini",PlayerName);
            if(IsPlayerNPC(playerid))return 1;
            new iniFile = ini_openFile(account);
            ini_getString(iniFile, "Пароль",password); // Узнаём пароль аккаунта.
            if(!strcmp(inputtext, password, true))
            {
                ini_getInteger(iniFile, "Money", PlayerInfo[playerid][pMoney]); // Записываем данные в переменную
                ini_getFloat(iniFile, "Heal", PlayerInfo[playerid][pHeal]); 
                ini_getFloat(iniFile, "Armour", PlayerInfo[playerid][pArmour]);
                ini_getInteger(iniFile,"Kills", PlayerInfo[playerid][Kills]);
                ini_getInteger(iniFile,"Deaths", PlayerInfo[playerid][Deaths]);
     	SetPlayerHealth(playerid, PlayerInfo[playerid][pHeal]);
     	SetPlayerArmour(playerid, PlayerInfo[playerid][pArmour]);
                GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
                ini_closeFile(iniFile);
                SpawnPlayer(playerid);
                return 1;
            }
            else
            {
                SendClientMessage(playerid, COLOR_RED, "Сервер: Пароль неверный");
                ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Авторизуйся ты наконец:", "Ок", "");
                return 1;
            }
        }
        else //Клавиша Esc
        {
            ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Авторизация", "Авторизовывайся,рачок:", "Ок", ""); // выдаем диалог, если нажмет на кнопку Esc
        }
    }

Теперь идем в public OnPlayerDeath(playerid, killerid, reason):
PlayerInfo[killerid][Kills]++;// добавляем килл убийце
PlayerInfo[playerid][Deaths]++; //добавляем смерть убитому


Идем в начало мода вашего:
forward SaveAccounts(playerid);//ко всем форвардам, сохранение акков
new saveacctimer;// ко всем массивам, созздадим таймер для сохранения акков


В public OnGameModeInit():
saveacctimer = SetTimer("SaveAccounts", 200000, 1);// делаем таймер для сохранения акков

В public OnGameModeExit():
 KillTimer(saveacctimer);


Ну и теперь создаем раздел для сохранения акков:
public SaveAccounts(playerid)
{
    for(new i=0; i<MAX_PLAYERS; i++)
    {
        new PlayerName[MAX_PLAYER_NAME], account[128];
        GetPlayerName(i,PlayerName,sizeof(PlayerName));
        format(account,sizeof(account), "users/%s.ini", PlayerName);
        new iniFile = ini_openFile(account);
        ini_setInteger(iniFile, "Money", GetPlayerMoney(i));
        ini_setInteger(iniFile,"Kills", PlayerInfo[i][Kills]);
        ini_setInteger(iniFile,"Deaths", PlayerInfo[i][Deaths]);
        GetPlayerHealth(i,PlayerInfo[i][pHeal]);
        ini_setFloat(iniFile, "Heal", PlayerInfo[i][pHeal]);
        GetPlayerArmour(i,PlayerInfo[i][pArmour]);
        ini_setFloat(iniFile, "Armour", PlayerInfo[i][pArmour]);
        ini_closeFile(iniFile);
        SendClientMessage(i, COLOR_WHITE, "Аккаунт сохранен");// для теста добавим
    }
    return 1;
}

Теперь создадим проверку на логин, чтобы игрок не смог писать в чат.
В начало мода
new logged[MAX_PLAYERS];// массив залогинности игрока=)


Далее вставляем в public OnPlayerDisconnect(playerid, reason)
logged[playerid]=0;


А public OnPlayerSpawn(playerid)
logged[playerid] = 1;


Теперь идем в public OnPlayerText(playerid, text[]) и делаем:
if(logged[playerid] == 0)
{
    SendClientMessage(playerid, COLOR_GREY, "Сервер: Чтобы писать в чат, пожалуйста авторизуйтесь");
    return 0;
}

Теперь поясню.
logged[playerid] = 0 - когда игрок не залогинен
logged[playerid] = 1 - когда игрок залогинен


Ну вот и все. <img src='https://pawn.wiki/public/style_emoticons/<#EMO_DIR#>/smile.gif' class='bbc_emoticon' alt=':)' />

Автор: HaWk69
Скачать new.pwn (Автор: Swipos)


Уже 80 % модов на Mysql! она лучшее и надежнее! и на MxIni при онлайне 20+ будет крашит или лагать!
0

#100
Пользователь офлайн   by Evan 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Cool
0

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


  • (11 Страниц) +
  • « Первая
  • 8
  • 9
  • 10
  • 11
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

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


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