lancelot
Новичок
Возникла проблема с банами на mxini.
Баню человека, бан записывается в ини файл с аккаунтом, но если человек перезаходит он не забанен.
Коды:
public OnPlayerConnect:
Дисконнект:
В диалогах:
Сток
Сама команда:
Баню человека, бан записывается в ини файл с аккаунтом, но если человек перезаходит он не забанен.
Коды:
PHP:
enum pInfo {
pMoney,
pAdmin,
pScore,
pBanned,
pWarns,
pMuted,
pMuteTime,
};
forward SaveAccounts();
public OnPlayerConnect:
PHP:
new PlayerNick[500]; // Для админки
GetPlayerName(playerid,PlayerNick,sizeof(PlayerNick)); // Узнаем ник игрока
new users[128];
format(users,sizeof(users),"users/%s.ini",PlayerNick); // Создаем аккаунт
if(!fexist(users))
{
ShowPlayerDialog(playerid,7000,DIALOG_STYLE_INPUT, "{00ff00}Регистрация", "{ffffff}Введите пароль:", "Войти", ""); // Регистрация
}
else
{
ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "{00ff00}Авторизация", "{ffffff}Введите свой пароль:", "Войти", ""); // Авторизация
}
PlayerInfo[playerid][pAdmin] = 0; // При заходе 0 лвл админки
PlayerInfo[playerid][pScore] = 0; // При заходе очков 0
PlayerInfo[playerid][pWarns] = 0;
PlayerInfo[playerid][pMuted] = 0;
PlayerInfo[playerid][pMuteTime] = 0;
PlayerInfo[playerid][pBanned] = 0;
TextDrawShowForPlayer(playerid,Text:Times);
h[playerid]=21;m[playerid]=20;
new str[128];
format(str,128,"{00ff00}**>>** {ffffff}%s вошёл (ла) на сервер.", PlayerName(playerid));
SendClientMessageToAll(COLOR_GREEN,str);
Дисконнект:
PHP:
SaveAccount(playerid);
В диалогах:
PHP:
if(dialogid == 7000)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid,7000,DIALOG_STYLE_INPUT, "{00ff00}Регистрация", "{ffffff}Введите пароль:", "Войти", "");
if(response)
{
new PlayerNick2[MAX_PLAYER_NAME];
GetPlayerName(playerid,PlayerNick2,sizeof(PlayerNick2));
new account[128];
format(account,sizeof(account),"users/%s.ini",PlayerNick2);
if(fexist(account)) return ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "{00ff00}Авторизация", "{ffffff}Введите свой пароль:", "Войти", "");
new iniFile = ini_createFile(account);
if(iniFile < 0) ini_openFile (account);
{
ini_setString(iniFile,"Password",inputtext);
ini_setInteger(iniFile, "Money", 0);
ini_setInteger(iniFile,"Admin",0);
ini_setInteger(iniFile,"COP",0);
ini_setInteger(iniFile, "Score", 0);
ini_setInteger(iniFile, "Ban", 0);
ini_setInteger(iniFile, "Warn", 0);
ini_setInteger(iniFile, "Muted", 0);
ini_setInteger(iniFile, "MuteTime", 0);
ini_closeFile(iniFile);
SetPVarInt(playerid, "Logged", 0);
new p[MAX_PLAYER_NAME];
GetPlayerName(playerid,p,23);
SendClientMessage(playerid, 0x21DD00FF, "{00ff00}[Информация]: {ffffff}Вы успешно зарегестрировались");
ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "{00ff00}Авторизация", "{ffffff}Введите свой пароль:", "Войти", "");
}
}
else
{
ShowPlayerDialog(playerid,7000,DIALOG_STYLE_INPUT, "{00ff00}Регистрация", "{ffffff}Введите пароль:", "Войти", "");
}
}
//------------------------------------------------------------------------------
if(dialogid == 7002)
{
if(!strlen(inputtext)) return ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "{00ff00}Авторизация", "{ffffff}Введите свой пароль:", "Войти", ""); // Авторизация
if(response)
{
new PlayerNick4[MAX_PLAYER_NAME], password[64];
GetPlayerName(playerid,PlayerNick4,sizeof(PlayerNick4));
new account[128];
format(account,sizeof(account),"users/%s.ini",PlayerNick4);
if(IsPlayerNPC(playerid))return 1;
new iniFile = ini_openFile(account);
ini_getString(iniFile, "Password",password);
if(!strcmp(inputtext, password, true))
{
ini_getInteger(iniFile, "Money", PlayerInfo[playerid][pMoney]);
ini_getInteger(iniFile,"Admin",PlayerInfo[playerid][pAdmin]);
ini_getInteger(iniFile,"Score",PlayerInfo[playerid][pScore]);
ini_getInteger(iniFile, "Ban", PlayerInfo[playerid][pBanned]); // Запишем кол-во денег в переменную.
ini_getInteger(iniFile, "Warn", PlayerInfo[playerid][pWarns]); // Запишем кол-во денег в переменную.
ini_getInteger(iniFile, "Muted", PlayerInfo[playerid][pMuted]); // Запишем кол-во денег в переменную.
ini_getInteger(iniFile, "MuteTime", PlayerInfo[playerid][pMuteTime]); // Запишем кол-во денег в переменную.
SetPlayerScore(playerid, PlayerInfo[playerid][pScore]);
GivePlayerMoney(playerid, PlayerInfo[playerid][pMoney]);
SendClientMessage(playerid, 0x21DD00FF, "{00ff00}[Информация]: {ffffff}Вы вошли в свой аккаунт");
ini_closeFile(iniFile);
return 1;
}
else
{
SendClientMessage(playerid, 0xF60000AA, "{00ff00}[Ошибка]: {ffffff}Неверный пароль");
ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "{00ff00}Авторизация", "{ffffff}Введите свой пароль:", "Войти", ""); // Авторизация
return 1;
}
}
else //Если нажать Esc, то...
{
ShowPlayerDialog(playerid,7002,DIALOG_STYLE_INPUT, "{00ff00}Авторизация", "{ffffff}Введите свой пароль:", "Войти", ""); // Авторизация
}
}
Сток
PHP:
stock SaveAccount(playerid) // Сохраняет данные
{
new PlayerNick6[MAX_PLAYER_NAME], account[128];
GetPlayerName(playerid,PlayerNick6,sizeof(PlayerNick6));
format(account,sizeof(account), "users/%s.ini", PlayerNick6);
new iniFile = ini_openFile(account);
ini_setInteger(iniFile, "Money", GetPlayerMoney(playerid));
ini_setInteger(iniFile,"Admin",PlayerInfo[playerid][pAdmin]);
ini_setInteger(iniFile, "Score", GetPlayerScore(playerid));
ini_setInteger(iniFile, "Ban", PlayerInfo[playerid][pBanned]);
ini_setInteger(iniFile, "Warn", PlayerInfo[playerid][pWarns]);
ini_setInteger(iniFile, "Muted", PlayerInfo[playerid][pMuted]);
ini_setInteger(iniFile, "MuteTime", PlayerInfo[playerid][pMuteTime]);
ini_closeFile(iniFile);
return 1;
}
Сама команда:
PHP:
if(strcmp(cmd, "/ban", true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp) && PlayerInfo[playerid][pAdmin] >= 1) return SendClientMessage(playerid, COLOR_GREEN, "{00ff00}[Правка]: {ffffff}/ban [id] [причина]");
giveplayerid = ReturnUser(tmp);
if (PlayerInfo[playerid][pAdmin] >= 1)
{
if(PlayerInfo[playerid][pAdmin] < PlayerInfo[giveplayerid][pAdmin]) return SendClientMessage(playerid,COLOR_GREEN,"[Ошибка]: Нельзя забанить Администратора, который старше вас");
if(IsPlayerConnected(giveplayerid))
{
if(giveplayerid != INVALID_PLAYER_ID)
{
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
new length = strlen(cmdtext);
while ((idx < length) && (cmdtext[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[64];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = cmdtext[idx];
idx++;
}
result[idx - offset] = EOS;
if(!strlen(result)) return SendClientMessage(playerid, COLOR_GREEN, "{00ff00}[Правка]: {ffffff}/ban [id] [причина]");
format(string, sizeof(string), "{00ff00}[Информация]: {ffffff}Администратор {00ff00}%s {ffffff}забанил игрока {00ff00}%s", sendername, giveplayer);
SendClientMessageToAll(COLOR_GREEN, string);
WriteRusLog("Ban.cfg", string);
format(string, sizeof(string), "{00ff00}[Информация]: {ffffff}Причина {00ff00}|%s|",(result));
SendClientMessageToAll(COLOR_GREEN, string);
WriteRusLog("Ban.cfg", string);
PlayerInfo[giveplayerid][pBanned] = true;
Kick(giveplayerid);
return 1;
}
}
else
{
format(string, sizeof(string), "{00ff00}[Ошибка]: {ffffff}%d не в сети", giveplayerid);
SendClientMessage(playerid, COLOR_GREEN, string);
}
}
return 1;
}
