K3K
Дебютант
Привет всем уважаемые пользователи форума pawno-info.ru Сегодня я покажу вам как сделать простенькую админ авторизацию.
Щас я объясню что это такое (для тех кто не знает). При входе в игру (после авторизации) у вас появится окно куда надо будет ввести ваш админ пароль.
Ну пожалуй начнём.
1. Добавим в public OnPlayerLogin следующие строки:
2. Добавим ко всем case (в OnDialogResponse):
3. Добавляем к enum pInfo
4. Добавляем в public OnPlayerConnect(playerid)
5. Добавляем в stock OnPlayerRegister
6. Добавляем в public OnPlayerLogin
7. Добавляем в сток/паблик сохранения аккаунта (stock SavePlayer(playerid))
Теперь к своей команде по добавлению админа пишем:
Так-же в эту команду
Если у вас нету стока ABroadCast вот, вставьте его в конец мода.
Теперь ко всем админ командам добавляем -
Делал эту команду на mxini и дефолтном командном процессоре. Кому надо сам переведёт на Mysql :ddd
Так-же если что-то сделал не так или можно было сделать лучше, пишите сюда. Учту все ваши ответы :happy: :happy:
На этом всё. Всем удачи :bo::bo:
Щас я объясню что это такое (для тех кто не знает). При входе в игру (после авторизации) у вас появится окно куда надо будет ввести ваш админ пароль.
Ну пожалуй начнём.
1. Добавим в public OnPlayerLogin следующие строки:
Код:
if(PlayerInfo[playerid][pAdmin] >= 0) // Если админка больше 0 лвл'а, то:
{
SPD(playerid, 11337, DIALOG_STYLE_PASSWORD, "{FFCD00}Админ авторизация", "{FFFFFF}Введите ваш админ пароль.\n Он может состоять от 4 до 15 латинских букв и цифр.", "Далее", "Отмена"); // Открываем диалог с авторизацией
TogglePlayerControllable(playerid,0); // Замораживаем игрока (можете убрать)
return true;
}
Код:
case 11337:
{
if(response) // Если игрок нажал "далее"
{
new name[MAX_PLAYER_NAME], ip[17]; // обЪявляем локальные переменные
GetPlayerIp(playerid, ip, sizeof(ip)); // Узнаем ip игрока
GetPlayerName(playerid, name, sizeof(name));// Узнаем имя игрока
if(strval(inputtext) != PlayerInfo[playerid][pDostup]) return printf("Admin - %s неправильно ввёл свой админ пароль.Его ip - %d",name, ip); //Если текст который введён в окне не соответствует нашему админ паролю, то отправляем в консоль сообщение.
TogglePlayerControllable(playerid,1);// Если все хорошо, то размораживаем игрока
SendClientMessage(playerid,-1,"Вы успешно вошли");// Отправляем уме сообщение
SetPlayerHealth(playerid, 160);// Устанавливаем хп
format(string, 256, ">>[A]<< %s вошёл как администратор %d уровня.",name, PlayerInfo[playerid][pAdmin]); // Форматируем текст
ABroadCast(COLOR_GREEN,string,1); // Отправляем этот текст (который выше) в админ чат.
}
else // Если игрок нажал "отмена", то ...
{
new ip[18], name[MAX_PLAYER_NAME];// ОбЪявляем локальные переменные
GetPlayerIp(playerid, ip, sizeof(ip));// Узнаем ip игрока
GetPlayerName(playerid, name, sizeof(name));//Узнаем имя игрока
Kick(playerid);// кикаем его
format(string, 256, ">>[A]<< %s нажал 'отмена' при вводе админ пароля. Его ip - %d", name, ip);// Форматируем текст
ABroadCast(COLOR_GREEN,string,1);// Отправляем этот текст (который выше) в админ чат.
printf("Admin - %s нажал на конопку 'отмена' при вврде админ пароля. (Возможно взлом) Его ip-%d.", name, ip);// Пишем в консоль сообщение
}
return true;
}
Код:
pDostup,
Код:
PlayerInfo[playerid][pDostup] = 0;
Код:
ini_setInteger(iniFile,"Dostup",PlayerInfo[playerid][pDostup]);
Код:
ini_getInteger(iniFile,"Dostup",PlayerInfo[playerid][pDostup]);
Код:
ini_getInteger(iniFile,"Dostup",PlayerInfo[playerid][pDostup]);
Код:
if(PlayerInfo[para1][pAdmin] != 0) // Если админка не равна 0, то ...
{
if(PlayerInfo[para1][pDostup] == 0 || PlayerInfo[para1][pDostup] == 2038) PlayerInfo[para1][pDostup] = 124+random(8999); // Генерируем рандомный админ пароль
}
Код:
format(string, sizeof(string), "{3399FF}%s {FFFF00}назначил вас администратором {3399FF}%d {FFFF00}уровня.Адм пароль - %d", sendername, level, PlayerInfo[playerid][pDostup]); // Форматируем текст с админ паролем
SendClientMessage(para1, COLOR_YELLOW, string)// Высылаем игроку его пароль.
Код:
stock ABroadCast(color,const string[],level){
for(new i = 0; i < MAX_PLAYERS; i++){
if(IsPlayerConnected(i)){
if(PlayerInfo[i][pAdmin] >= level) SCM(i, color, string);}}return true;}
Код:
if(PlayerInfo[playerid][pDostup] == 0) return true;
Так-же если что-то сделал не так или можно было сделать лучше, пишите сюда. Учту все ваши ответы :happy: :happy:
На этом всё. Всем удачи :bo::bo:
