Djcrem
Умник
Писал данный код на заказ, заказчик отказался от оплаты из-за отсутствия денег.
Данная система позволяет прямо из игры, старшим администраторам управлять администрацией сервера, при этом администраторы, их уровни и пароли хранятся в отдельной базе данных. В профиле игрока ничего храниться не будет, все в базе администраторов.
- задэфайним для удобства
Сама команда авторизации:
Диалог авторизации:
Команда для добавления/удаления/повышения модераторов
В конец мода
Теперь берем, и все что связано с сохранением и создание в базе поля pAdmin удаляем. И создаем таблицу в базе данных.
После каждого своего повышения, администратор находящийся в онлайне должен ввести команду /alogin заново, тогда уровень администрирования изменится. Если администратор оффлайн, то ничего этого проделывать не нужно. Если хотите снять администратора который в онлайне, просто вводите /moderator Jasper_Fox 0 и кикаете/баните/варните или просите выйти.
Переменная которая показывает, авторизован игрок как администратор или нет. У каждого она своя.
Отправка сообщения в администраторский чат. У каждого данная функция своя.
Данная система позволяет прямо из игры, старшим администраторам управлять администрацией сервера, при этом администраторы, их уровни и пароли хранятся в отдельной базе данных. В профиле игрока ничего храниться не будет, все в базе администраторов.
PHP:
#define TABLE_ADMIN "admin"
PHP:
new query[2048], string[512]
PHP:
CMD:alogin(playerid, params[])
{
if(PlayerLogged[playerid] == 0) return 1;
format(query, sizeof(query), "SELECT * FROM "TABLE_ADMIN" WHERE name = '%s'", PlayerInfo[playerid][pSendername]);
mysql_query(query);
mysql_store_result();
if(!mysql_fetch_row_format(query)) return true;
if(!strcmp(GetAdmin(PlayerInfo[playerid][pSendername], "password"), "qwerty", true))
{
SetPVarInt(playerid, "Alogin", 1);
ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
SendClientMessage(playerid, COLOR_GREY, "Зарегистрируйте администраторский пароль. Он должен быть больше 5 и меньше 16 символов!");
}
else ShowPlayerDialog(playerid, 1227, 1, "Авторизация", "Введите администраторский ключ:", "Принять", "Отмена"), SetPVarInt(playerid, "Alogin", 2);
return true;
}
PHP:
case 1227:
{
if(!response) return 1;
if(!strlen(inputtext)) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
new pass2, level = strval(GetAdmin(PlayerInfo[playerid][pSendername], "level"));
if(GetPVarInt(playerid, "Alogin") == 1)
{
if(sscanf(inputtext, "s[16]", pass2)) ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
if(!strcmp(inputtext, "qwerty", true)) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
if(strlen(inputtext) < 6 || strlen(inputtext) > 16) return ShowPlayerDialog(playerid, 1227, 1, "Регистрация", "Зарегистрируйте ваш пароль:", "Принять", "Отмена");
format(query, sizeof(query), "UPDATE "TABLE_ADMIN" SET password = '%s' WHERE name = '%s' LIMIT 1", pass2, PlayerInfo[playerid][pSendername]);
mysql_query(query);
SendClientMessage(playerid, COLOR_GREEN, "Поздравляем! Вы получили доступ модератора");
PlayerInfo[playerid][pAdmin] = level;
AdminLogged[playerid] = true;
format(string, 90, "[AP] Администратор {ffffff}%s[%d]{9ACD32} авторизовался", PlayerInfo[playerid][pSendername], playerid);
return true;
}
else if(GetPVarInt(playerid, "Alogin") == 2)
{
if(strcmp(inputtext, GetAdmin(PlayerInfo[playerid][pSendername], "password"), true)) return SendClientMessage(playerid, COLOR_LIGHTRED, "Неверный пароль модератора!"), Kick(playerid);
SendMes(playerid, COLOR_LIGHTGREEN, "Вы вошли как модератор %d уровня", level);
PlayerInfo[playerid][pAdmin] = level;
AdminLogged[playerid] = true;
format(string, 90, "[AP] Администратор {ffffff}%s[%d]{9ACD32} авторизовался", PlayerInfo[playerid][pSendername], playerid);
SendAdminMessage(COLOR_LIGHTGREEN, string);
}
}
PHP:
CMD:moderator(playerid, params[])
{
if(PlayerLogged[playerid] == 0) return 1;
if(PlayerInfo[playerid][pAdmin] < 8 || AdminLogged[playerid] == false) return 1;
new data[32], name[32];
if(sscanf(params, "s[32]i", name, params[1])) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /moderator [name] [lvl]");
if(params[1] < 0) return SendClientMessage(playerid, COLOR_WHITE, "Введите: /moderator [name] [lvl]");
format(query, sizeof(query), "SELECT * FROM "TABLE_ADMIN" WHERE name = '%s'", name);
mysql_query(query);
mysql_store_result();
if(mysql_fetch_row_format(query))
{
if(params[1] == 0)
{
format(query, sizeof(query), "DELETE FROM "TABLE_ADMIN" WHERE `name`='%s'", name);
mysql_query(query);
mysql_free_result();
SendMes(playerid, COLOR_LIGHTRED, "%s успешно удален из списка модераторов", name);
}
else
{
format(query, sizeof(query), "UPDATE "TABLE_ADMIN" SET level = '%d' WHERE name = '%s' LIMIT 1", params[1],name);
mysql_query(query);
SendMes(playerid, COLOR_GREEN, "Уровень администрирования у %s изменен на %d", name, params[1]);
}
}
else
{
getdate(years, months, days);
format(data, 32, "%02d.%02d.%04d", days, months, years);
format(query, 512, "INSERT INTO "TABLE_ADMIN" (Name, level, LastCon) VALUES ('%s', %d, '%s')", name, params[1], data);
mysql_query(query);
SendMes(playerid, COLOR_GREEN, "%s успешно добавлен в список модераторов. Уровень полномочий %d", name, params[1]);
}
return true;
}
PHP:
stock GetAdmin(username[], obtaining[])
{
new Query[128];
format(Query, 128, "SELECT %s FROM "TABLE_ADMIN" WHERE name = '%s' LIMIT 1", obtaining, username);
mysql_query(Query);
mysql_store_result();
if(mysql_fetch_row(Query) == 1)
{
mysql_free_result();
return Query;
}
return Query;
}
PHP:
CREATE TABLE IF NOT EXISTS `admin` (
`Name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`level` int(2) NOT NULL,
`password` varchar(32) NOT NULL DEFAULT 'qwerty',
`LastCon` varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PHP:
AdminLogged[playerid] = true;
PHP:
SendAdminMessage
Последнее редактирование:
