PDA

Просмотр полной версии : [Вопрос] Проблема с mxINI



MarioORG
01.06.2015, 00:24
Файл не создается.

public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, COLOR_RED, "Добро пожаловать на Box Play | Red");
SetPlayerColor(playerid, COLOR_WHITE);
new name[MAX_PLAYER_NAME];
new acc [128];
GetPlayerName(playerid, name, sizeof(name));
format(acc,sizeof(acc),"players/%s.ini",name);
new iniFile = ini_openFile(acc);
if(iniFile < 0){
SendClientMessage(playerid, COLOR_RED, "Зарегестрируйтесь, введя команду /register [пароль]");
reg[playerid] = 0;
}else{
SendClientMessage(playerid, COLOR_RED, "Вы уже зарегестрированы. Введите /login [пароль]");
reg[playerid] = 1;
}
return 1;
}
Сама команда:

CMD:register(playerid, params[]) // регистрация
{
if(reg[playerid] == 0){
new acc [128];
new password[64];
new name[MAX_PLAYER_NAME];
sscanf(params,"d",password);
GetPlayerName(playerid, name, sizeof(name));
format(acc,sizeof(acc),"players/%s.ini",name);
new iniFile = ini_createFile(acc);
if(iniFile < 0) ini_openFile(acc);
{
ini_setString(iniFile, "Password", password);
ini_closeFile(iniFile);
}
reg[playerid] = 2;

OnPlayerSpawn(playerid);
}else{
return 1;
}
return 1;
}

Daniel_Cortez
01.06.2015, 00:35
В OnPlayerConnect вы открываете файл, а кто его закрывать будет? Потому-то в команде этот файл и не создаётся.
Да и зачем открывать файл в OnPlayerConnect, когда нужно всего лишь проверить его существование? Это можно сделать с помощью fexist, без всяких там mxINI.

P.S.: Идея с использованием числа вместо пароля (или 0, если введено не число) гениальна.

MarioORG
01.06.2015, 00:48
В OnPlayerConnect вы открываете файл, а кто его закрывать будет? Потому-то в команде этот файл и не создаётся.
Да и зачем открывать файл в OnPlayerConnect, когда нужно всего лишь проверить его существование? Это можно сделать с помощью fexist, без всяких там mxINI.

P.S.: Идея с использованием числа вместо пароля (или 0, если введено не число) гениальна.

Я новичок в павно, насчет численности пароля знаю. =D
Я изменил OnPlayerConnect:

public OnPlayerConnect(playerid)
{
SendClientMessage(playerid, COLOR_RED, "Добро пожаловать на Box Play | Red");
SetPlayerColor(playerid, COLOR_WHITE);
new name[MAX_PLAYER_NAME];
new file[24];
GetPlayerName(playerid, name, sizeof(name));
format(file,sizeof(file),"players/%s.ini",name);
if(fexist(file)){
SendClientMessage(playerid, COLOR_RED, "Вы уже зарегестрированы. Введите /login [пароль]");
reg[playerid] = 1;
}else{
SendClientMessage(playerid, COLOR_RED, "Зарегестрируйтесь, введя команду /register [пароль]");
reg[playerid] = 0;
}
return 1;
}
Ничего не изменилось.

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

здесь что то не так с этим:

CMD:register(playerid, params[]) // регистрация
{
if(reg[playerid] == 0){
new acc [128];
new password[64];
new name[MAX_PLAYER_NAME];
sscanf(params,"d",password);
GetPlayerName(playerid, name, sizeof(name));
format(acc,sizeof(acc),"players/%s.ini",name);
new iniFile = ini_createFile(acc);
if(iniFile < 0) ini_openFile(acc);
{
ini_setString(iniFile, "Password", password);
ini_closeFile(iniFile);
}
reg[playerid] = 2;
OnPlayerSpawn(playerid);
SendClientMessage(playerid, COLOR_RED, "hi");
}else{
return 1;
}
return 1;
}

MarioORG
01.06.2015, 01:35
Проблема решена. Тему закрываем.
Забыл создать папку.

Daniel_Cortez
01.06.2015, 01:47
Проблема решена. Тему закрываем.
Сколько ж можно напоминать, ну не будьте вы такими эгоистами...

2. Если Вы сами решили проблему, обязательно напишите, в чём заключалась Ваша ошибка и какое Вы нашли решение (не исключено, что оно может оказаться неправильным - в этом случае остальные участники форума могут указать на это и подсказать более целесообразный вариант решения).
3. Также в темах с вопросами запрещено удаление и/или изменение постов с целью скрыть их содержимое (например, замена содержимого поста на "delete" или любой другой бесполезный текст).
Помните: на портале Вам помогают безвозмездно, не требуя ничего взамен - так помогите и Вы другим людям с таким же вопросом, дав им возможность найти ответ, посмотрев Вашу тему.

Desulaid
01.06.2015, 01:49
Я не профессионал и с sscanf знаком только на "он", разве "d" - это не целочисленная шняга?

CMD:register(playerid, params[]) // регистрация
{
if(reg[playerid] == 0){
new acc [128];
new password[64];
new name[MAX_PLAYER_NAME];
sscanf(params,"s[63]",password);
GetPlayerName(playerid, name, sizeof(name));
format(acc,sizeof(acc),"players/%s.ini",name);
new iniFile = ini_createFile(acc);
if(iniFile < 0) ini_openFile(acc);
{
ini_setString(iniFile, "Password", password);
ini_closeFile(iniFile);
}
reg[playerid] = 2;
OnPlayerSpawn(playerid);
SendClientMessage(playerid, COLOR_RED, "hi");
}else{
return 1;
}
return 1;
}

Sp1ke
01.06.2015, 20:25
Я не профессионал и с sscanf знаком только на "он"
Что, простите?

"d"
id

Desulaid
01.06.2015, 21:52
Что, простите?

id

но суть то в пароле?

sscanf(params,"s[63]",password);

Sp1ke
02.06.2015, 00:33
s - читает строку

A N D R E Y
02.06.2015, 09:15
%s - читает строку
Буквы.

Avertus
02.06.2015, 12:30
Буквы.

Именно строку, строку символов (там и цифры и другие всякие знаки)

Sp1ke
02.06.2015, 22:01
Буквы.

Читает строку с любыми буквами/цифрами.