PDA

Просмотр полной версии : [Мануал] Регистрация На Инклуде mxINI



Snoopdy
11.10.2015, 13:15
Здравствуйте, ув. пользователи PP :3, сегодня я хотел бы представить вам свою регистрацию на инклуде mxINI.
Сразу смотрим есть ли у нас такой инклуд:

#include <mxINI>
Если да то двигаем дальше, иначе ищем в гугле :D.

Добавим enum с 1 переменной:


enum pInfo
{
pPassword[34],
pName[MAX_PLAYER_NAME],
bool:PLogged,
bool:PAccount
}
new PlayerInfo[MAX_PLAYERS][pInfo];


Добавили? Идем дальше.
Ищем OnPlayerConnect и добавляем вот такой код:


for(new pInfo:e; e < pInfo; ++e) PlayerInfo[playerid][e] = 0; // Обнуляем все
new string[MAX_PLAYER_NAME+14];// Объявим переменную
GetPlayerName(playerid,PlayerInfo[playerid][pName],MAX_PLAYER_NAME);//Узнаем имя
format(string,sizeof string,"Accounts/%s.ini", PlayerInfo[playerid][pName]);//Ищем Аккаунт в папке 'Accounts', и формартируем текст
PlayerInfo[playerid][PAccount] = (fexist(string)) ? (true) : (false);//Если есть акк, то значение PlayerInfo[playerid][PAccount] = истина, иначе ложь


Вот с этим пабликом покончили, двигаем в OnPlayerRequestClass:
Видим что-то типа:

SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
Удаляем !

И добавим вот это:


SetPlayerCameraPos(playerid, -2498.0146, 1447.5419, 126.1710);
SetPlayerCameraLookAt(playerid, -2498.6477, 1448.3204, 126.1411);
if(PlayerInfo[playerid][PAccount] == true){ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");}
else{ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");}


Идем в OnPlayerDisconnect:
И суем вот это:


SavePlayer(playerid);


Осталось только диалоги сделать, да и паблики реги и сохранения :3.
В OnDialogResponse:


switch(dialogid)
{
case 1:
{
if(!response || !strlen(inputtext)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");
OnPlayerLogin(playerid,inputtext);
return 1;
}
case 2:
{
if(!response || !strlen(inputtext)) return ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Окно Регистрации","Здравствуйте\nВаш аккаунт не найден.\nЗарегистрируйтесь введя пароль в окошко","Ввод","");
OnPlayerRegister(playerid,inputtext);
return 1;
}
}


Ну и три функции, отвечающие за загрузку/сохранение/регистрацию:


SavePlayer(playerid)
{
if(!PlayerInfo[playerid][PLogged]) return 1;
new string[MAX_PLAYER_NAME+14];
format(string, sizeof string, "Accounts/%s.ini", PlayerInfo[playerid][pName]);
new iniFile = ini_openFile(string);
ini_setString(iniFile,"Password",PlayerInfo[playerid][pPassword]);
ini_closeFile(iniFile);
return 1;
}

OnPlayerRegister(playerid, password[])
{
if(!IsPlayerConnected(playerid)) return 1;
new string[MAX_PLAYER_NAME+14];
format(string,sizeof string, "Accounts/%s.ini", PlayerInfo[playerid][pName]);
new iniFile = ini_createFile(string);
ini_setString(iniFile,"Password",password);
ini_closeFile(iniFile);
ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");
return 1;
}

OnPlayerLogin(playerid,password[])
{
if(!IsPlayerConnected(playerid)) return 1;
new string[MAX_PLAYER_NAME+14], pass[34];
format(string,sizeof string, "Accounts/%s.ini", PlayerInfo[playerid][pName]);
new iniFile = ini_openFile(string);
ini_getString(iniFile,"Password",pass,34);
ini_closeFile(iniFile);
if(strcmp(pass,password,true) == 0)
{
strmid(PlayerInfo[playerid][pPassword],pass,0,strlen(pass),34);
SendClientMessage(playerid,0xFF00000,"Добро пожаловать на наш сервер");
PlayerInfo[playerid][PLogged] = true;
SpawnPlayer(playerid);
return 1;
}
else return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Окно Входа","Здравствуйте\nВаш аккаунт есть на сервере\nВведите свой пароль в окошко","Ввод","");
}


Автор я Snoopdy :king:
Помогал мне в оптимизации m1n1w :acute:

Писал для своего проекта, кому понадобится, берите! :blum3:

Osetin
11.10.2015, 13:20
Честно говорю, лучше системы регистрации на данном инклуде не видал, писался для своего проекта, дерзайте! :blum3:

http://pro-pawn.ru/showthread.php?6571

Да, и если не сложно, выкладывайте код в [PHP] [ /PHP]

Snoopdy
11.10.2015, 13:21
Ну извиняю, писал сначало для другого портала, там говнища..... Удалю эту строку пожалуй :3

Desulaid
11.10.2015, 14:32
Сначала вы не используете макрос MAX_PLAYER_NAME

enum pInfo
{
pPassword[34],
pName[24],
bool:PLogged,
bool:PAccount
}
new PlayerInfo[MAX_PLAYERS][pInfo];

А потом


new string[MAX_PLAYER_NAME+14];
Это вы так оптимизировали (http://pro-pawn.ru/showthread.php?12736-%D0%9C%D0%B8%D1%84%D1%8B-%D0%BE-Pawn-%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B8%D0%BD%D0%B3%D0%B5-1&goto=newpost)код? :crazy:
if(PlayerInfo[playerid][PLogged]){SavePlayer(playerid);}
Я бы все условия прям в функции впихнул. :blum3:

Snoopdy
11.10.2015, 16:52
Ну использование, счас поменяю :D,
а вот условие бы я туды не засунул т.к. у каждого по разному мод функционирует с сохранением, а так Спасибо.

wAx
11.10.2015, 17:17
Ну использование, счас поменяю :D,
а вот условие бы я туды не засунул т.к. у каждого по разному мод функционирует с сохранением, а так Спасибо.

Что? Почему? Если это мануал, то твой код должен быть оптимален для любого мода, запомни это перед следующим созданием топика.

Snoopdy
11.10.2015, 19:02
Что? Почему? Если это мануал, то твой код должен быть оптимален для любого мода, запомни это перед следующим созданием топика.
Ладно.Исправлю :beee:

Геннадий Акимов
11.10.2015, 20:36
stock/public OnPlayerLogin(playerid,password[]) - за этого будут ошибки !

- - - Добавлено - - -


stock/public OnPlayerLogin(playerid,password[]) - за этого будут ошибки !

Я это кто-му то что вдруг на неё наткнуться новички

Snoopdy
11.10.2015, 21:28
stock/public OnPlayerLogin(playerid,password[]) - за этого будут ошибки !

- - - Добавлено - - -



Я это кто-му то что вдруг на неё наткнуться новички

Какая ошибка? Поподробнее, не будет ошибки, тестировал разы 10 :mosking:

Геннадий Акимов
11.10.2015, 22:04
ну ты в мод писал просто OnPlayerLogin(playerid,password[]) или в начало писал stock или public

Desulaid
11.10.2015, 22:33
ну ты в мод писал просто OnPlayerLogin(playerid,password[]) или в начало писал stock или public

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

#include <a_samp>

public OnGameModeInit()
{
Function("лол");
return 1;
}

stock Function(text[])
{
// в аргумент функции (массив)
// вы сохраняем вводимые символы
// далее результат выводим в консоль
printf("%s", text);
}

Геннадий Акимов
08.11.2015, 16:55
#include <a_samp>

OnGameModeInit()
{
Function("лол");
return 1;
}

Function(text[])
{
// в аргумент функции (массив)
// вы сохраняем вводимые символы
// далее результат выводим в консоль
printf("%s", text);
}
А вот тебе мой пример заметил чем отличаеца от твоего ?

Sp1ke
08.11.2015, 19:10
#include <a_samp>

OnGameModeInit()
{
Function("лол");
return 1;
}

Function(text[])
{
// в аргумент функции (массив)
// вы сохраняем вводимые символы
// далее результат выводим в консоль
printf("%s", text);
}
А вот тебе мой пример заметил чем отличаеца от твоего ?

И? Все равно никаких ошибок не будет.... К чему это все?

A N D R E Y
08.11.2015, 19:33
#include <a_samp>

OnGameModeInit()
{
Function("лол");
return 1;
}

Function(text[])
{
// в аргумент функции (массив)
// вы сохраняем вводимые символы
// далее результат выводим в консоль
printf("%s", text);
}
А вот тебе мой пример заметил чем отличаеца от твоего ?
В
OnGameModeInit() надо написать слово
public, иначе вроде ошибка будет.

Desulaid
08.11.2015, 19:39
#include <a_samp>

OnGameModeInit()
{
Function("лол");
return 1;
}

Function(text[])
{
// в аргумент функции (массив)
// вы сохраняем вводимые символы
// далее результат выводим в консоль
printf("%s", text);
}
А вот тебе мой пример заметил чем отличаеца от твоего ?

Разницы ноль, единственное - это то, что в случаи неиспользования функции будет предупреждение "символ Function нигде не используется".

Sp1ke
08.11.2015, 23:12
В
OnGameModeInit() надо написать слово
public, иначе вроде ошибка будет.

Никаких ошибок не будет. С чего ты вообще это взял?

Snoopdy
09.11.2015, 11:12
Никаких ошибок не будет. С чего ты вообще это взял?
Если создадим :


Function(text[])
{
// в аргумент функции (массив)
// вы сохраняем вводимые символы
// далее результат выводим в консоль
printf("%s", text);
}

и не разу не будет использовать, то будет варнинг:

warning 203: symbol is never used: "Function"

Profyan
09.11.2015, 14:32
Если создадим :


Function(text[])
{
// в аргумент функции (массив)
// вы сохраняем вводимые символы
// далее результат выводим в консоль
printf("%s", text);
}

и не разу не будет использовать, то будет варнинг:

warning 203: symbol is never used: "Function"

Ну так stock и создается для того, чтобы не выдавало этих ошибок.

Seregamil
09.11.2015, 15:11
Система нерациональная.


for(new pInfo:e; e < pInfo; ++e) PlayerInfo[playerid][e] = 0; // Обнуляем все
new string[MAX_PLAYER_NAME+14];// Объявим переменную
GetPlayerName(playerid,PlayerInfo[playerid][pName],MAX_PLAYER_NAME);//Узнаем имя
format(string,sizeof string,"Accounts/%s.ini", PlayerInfo[playerid][pName]);//Ищем Аккаунт в папке 'Accounts', и формартируем текст
PlayerInfo[playerid][PAccount] = (fexist(string)) ? (true) : (false);

В OnPlayerConnect вы, понятия не имею зачем, обнуляете данные и проверяете существование аккаунта, а в OnPlayerRequestClass вы выдаете диалоги, опять же, при помощи проверки на существование аккаунта. Зачем?
Не проще ли объединить содержимое этих двух каллбэков и избавиться от лишней переменной PAccount?

Snoopdy
09.11.2015, 17:01
Можно, но когда я лазил в интернете, многие говорили, что у них не успевают грузиться диалоги, поэтому я вынес в OnPlayerRequestClass

Sp1ke
09.11.2015, 17:49
Если создадим :


Function(text[])
{
// в аргумент функции (массив)
// вы сохраняем вводимые символы
// далее результат выводим в консоль
printf("%s", text);
}

и не разу не будет использовать, то будет варнинг:

warning 203: symbol is never used: "Function"

Причем тут уже это? Мы разговаривали совсем про другое, почитай посты выше.

Seregamil
10.11.2015, 19:41
Можно, но когда я лазил в интернете, многие говорили, что у них не успевают грузиться диалоги, поэтому я вынес в OnPlayerRequestClass

Если многие скажут, что Земля на черепахе, то вы этому тоже поверите?

Snoopdy
11.11.2015, 18:12
Если многие скажут, что Земля на черепахе, то вы этому тоже поверите?
Неа :grin: