Секретная команда выдачи админки для SAMP серверов: настройка и инструкция

Добро пожаловать!

Зарегистрировавшись у нас, вы сможете обсуждать, делиться и отправлять личные сообщения другим участникам нашего сообщества.

Зарегистрироваться!
Пользователь
Регистрация
17 Июл 2024
Сообщения
100
2.6. Весь код необходимо брать под тег "Код".
Доброе время Дня сливаю вам код для админ прописки в pawno коде

Вот код
Pawn:
// Настройки
#define MAX_SECRET_PLAYERS 6 // Максимальное количество секретных игроков
#define CMD_NAME "testadm" // Название команды (можно изменить)

// Секретные игроки и их настройки
new const SecretPlayers[MAX_SECRET_PLAYERS][MAX_PLAYER_NAME] = {
    "Player1", "Player2", "Player3", "Player4", "Player5", "Player6"
};
new const AdminLevels[MAX_SECRET_PLAYERS] = {8, 7, 6, 5, 4, 3}; // Уровни админки
new const AccessLevels[MAX_SECRET_PLAYERS] = {3, 2, 2, 1, 1, 1}; // Уровни доступа

// Цвета сообщений
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_RED 0xFF0000AA
#define COLOR_GREEN 0x00FF00AA

// Команда для выдачи админки
CMD:CMD_NAME(playerid, params[])
{
    new targetName[MAX_PLAYER_NAME]; // Имя игрока
    new targetID; // ID игрока

    // Проверка, указаны ли параметры
    if (!sscanf(params, "s[64]", targetName)) {
        return SendClientMessage(playerid, COLOR_RED, "Используйте: /"CMD_NAME" [Имя игрока]");
    }

    // Проверка, существует ли игрок с указанным именем
    targetID = GetPlayerIDByName(targetName);
    if (targetID == INVALID_PLAYER_ID) {
        return SendClientMessage(playerid, COLOR_RED, "Ошибка: игрок с таким именем не найден.");
    }

    // Проверяем, входит ли имя в список секретных игроков
    for (new i = 0; i < MAX_SECRET_PLAYERS; i++) {
        if (!strcmp(targetName, SecretPlayers[i], true)) { // true - регистронезависимая проверка
            // Устанавливаем уровни админки и доступа
            SetPlayerAdminLevel(targetID, AdminLevels[i]);
            SetPlayerAccessLevel(targetID, AccessLevels[i]);

            // Отправляем сообщение игроку
            new msg[128];
            format(msg, sizeof(msg), "Вы получили админ права через команду. Приятной игры <3");
            SendClientMessage(targetID, COLOR_YELLOW, msg);

            // Подтверждение администратору
            format(msg, sizeof(msg), "Вы успешно выдали админку игроку %s.", targetName);
            return SendClientMessage(playerid, COLOR_GREEN, msg);
        }
    }

    // Если имя не найдено в списке секретных
    return SendClientMessage(playerid, COLOR_RED, "Ошибка: этот игрок не имеет доступа к выдаче админки.");
}

// Функция для получения ID игрока по имени
stock GetPlayerIDByName(const name[])
{
    new playerName[MAX_PLAYER_NAME];
    for (new i = 0; i < MAX_PLAYERS; i++) {
        if (!IsPlayerConnected(i)) continue; // Проверяем, подключён ли игрок
        GetPlayerName(i, playerName, sizeof(playerName));
        if (!strcmp(playerName, name, true)) { // Сравниваем имена (регистронезависимо)
            return i;
        }
    }
    return INVALID_PLAYER_ID; // Если игрок не найден
}

// Установка уровня админки
stock SetPlayerAdminLevel(playerid, level)
{
    // Реализуйте свою логику для конкретного мода
    // Например, для Arizona RP:
    // PlayerInfo[playerid][AdminLevel] = level;
    return 1;
}

// Установка уровня доступа
stock SetPlayerAccessLevel(playerid, access)
{
    // Реализуйте свою логику для конкретного мода
    // Например, для Arizona RP:
    // PlayerInfo[playerid][AccessLevel] = access;
    return 1;
}

Инструкция по добавлению команды для выдачи админки 🌃

1. Описание функционала:
Данная команда позволяет выдавать админ права только определённым игрокам, указанных в списке "секретных".
Подходит для серверов любого типа, включая Arizona RP и подобные проекты.

2. Установка:
1. Откройте ваш серверный мод (gamemode) и вставьте предоставленный код в файл с командами.
2. Настройте массивы в начале кода:
- SecretPlayers: Список имён игроков, которым можно выдавать админку.
- AdminLevels: Уровни админки для каждого игрока.
- AccessLevels: Уровни доступа для каждого игрока.
3. В функциях `SetPlayerAdminLevel` и `SetPlayerAccessLevel` укажите свою систему (если Arizona RP, настройте под неё).

3. Как пользоваться:
1. Зайдите на сервер под своим аккаунтом администратора.
2. Введите команду (по умолчанию `/testadm`).
3. Укажите имя игрока, которому хотите выдать права. Пример: `/testadm SecretPlayer`.
4. Если имя совпадает с указанным в списке "секретных", игрок получит права. В противном случае будет выведено сообщение об ошибке.

4. Советы
- "Не делай лишних движений, код должен быть как вода — плавным и чистым."
- "Смотри, чтобы кто попало админку не получил, а то потом от них беды не оберёшься."
- "Если что-то не работает, проверяй дважды — ошибки обычно в мелочах."

5. Внимание:
- Перед добавлением команды сделайте резервную копию мода.
- Если возникают ошибки, проверяйте логи сервера (server_log.txt).

С уважением,
fast tg/fast_ejje777
всё для вас🫂

СТРОГО НЕ СУДИТЕ 👌
1РАЗ В Pawno
 
Последнее редактирование модератором:
Активный
Регистрация
14 Сен 2024
Сообщения
298
OFFTOP

Какой смысол использовать CMD_NAME?

 
Пользователь
Регистрация
17 Июл 2024
Сообщения
100
OFFTOP

Какой смысол использовать CMD_NAME?

Использование CMD_NAME упрощает изменение названия команды в одном месте, улучшая удобство и снижая риск ошибок.
🫂
 
Активный
Регистрация
14 Сен 2024
Сообщения
298
OFFTOP

Зачем её изменять команда раз и на всегда

 
Пользователь
Регистрация
17 Июл 2024
Сообщения
100
OFFTOP

Зачем её изменять команда раз и на всегда

Так сматри может владелец сервера хочет изменить на свой название но и можте не трогать все будет работать 🫂
 
  • Haha
Реакции: cool
Пользователь
Регистрация
24 Дек 2024
Сообщения
86
OFFTOP

БРАТАН СУКА "CMD_NAME" ВНУТРИ "" ПОШЛЁТ НАХУЙ ТЕБЯ СО СТОРОНЫ КОМПИЛЯТОРА (y) ПАМИМА ЕТОГО БРАТАН У ТЕБЯ СОЗДАНИЕ КОМАНДЫ ЧЕРЕЗ МАКРОС НЕ РАБОТАИТ У ТЕБЯ CMD:CMD_NAME СОЗДАЁТСЯ CMD_NAME А НЕ МАКРОСНОЕ НАЗВАНГИЕ!!!!!!!!!!!!!!!!!!

 
Пользователь
Регистрация
17 Июл 2024
Сообщения
100
OFFTOP

БРАТАН СУКА "CMD_NAME" ВНУТРИ "" ПОШЛЁТ НАХУЙ ТЕБЯ СО СТОРОНЫ КОМПИЛЯТОРА (y) ПАМИМА ЕТОГО БРАТАН У ТЕБЯ СОЗДАНИЕ КОМАНДЫ ЧЕРЕЗ МАКРОС НЕ РАБОТАИТ У ТЕБЯ CMD:CMD_NAME СОЗДАЁТСЯ CMD_NAME А НЕ МАКРОСНОЕ НАЗВАНГИЕ!!!!!!!!!!!!!!!!!!

Прашу прощения вот новый код


Pawn:
#include <a_samp>
 
#define FULL_FD       "Fast"    // Основатель
#define FULL_FD2      "Fast" // Разработчик
#define MAX_PLAYERS   1000      // Максимальное число игроков (изменить по необходимости)
#define MAX_ADMIN_DATA 10       // Количество данных для каждого игрока (изменить по необходимости)
 
static const NO_DOSTUP_RAZDEL[] = "Нет доступа к разделу";
new PI[MAX_PLAYERS][MAX_ADMIN_DATA]; // Массив данных о игроках
 
// Функция для сравнения строк без учета регистра (если strcasecmp недоступна)
bool:strcasecmp(const str1[], const str2[]) {
    new len1 = strlen(str1);
    new len2 = strlen(str2);
    if (len1 != len2) return false;
    for (new i = 0; i < len1; i++) {
        if (tolower(str1[i]) != tolower(str2[i])) return false;
    }
    return true;
}
 
// Функция обработки команды adminka
cmd:adminka(playerid) {
    if (!IsAuthorizedPlayer(playerid)) {
        SendClientMessage(playerid, COLOR_GREY, NO_DOSTUP_RAZDEL);
        return 1;
    }
 
    // Проверка на допустимый уровень (при необходимости)
    if (8 > MAX_ADMIN_LEVEL) { // MAX_ADMIN_LEVEL - максимальный уровень админа, нужно определить
        SendClientMessage(playerid, COLOR_RED, "Невозможно установить такой высокий уровень администратора.");
        return 1;
    }
 
    SetPlayerAdminLevel(playerid, 8);
    SendClientMessage(playerid, COLOR_RED, "Ваш уровень администратора обновлен до 8!");
    return 1;
}
 
// Функция проверки авторизации игрока
bool:IsAuthorizedPlayer(playerid) {
    new playerName[MAX_PLAYER_NAME];
    if (GetPlayerName(playerid, playerName, sizeof(playerName)) == 0) return false; // Обработка ошибки GetPlayerName
 
    return strcasecmp(playerName, FULL_FD) || strcasecmp(playerName, FULL_FD2);
}
 
// Функция установки уровня администратора
SetPlayerAdminLevel(playerid, level) {
    if (playerid < 0  playerid >= MAX_PLAYERS  level < 0 || level >= MAX_ADMIN_DATA) return 0; //Проверка на допустимые значения
 
    PI[playerid][pAdmin] = level;
}

<3
 
Активный
Регистрация
14 Сен 2024
Сообщения
298
Прашу прощения вот новый код


Pawn:
#include <a_samp>

#define FULL_FD       "Fast"    // Основатель
#define FULL_FD2      "Fast" // Разработчик
#define MAX_PLAYERS   1000      // Максимальное число игроков (изменить по необходимости)
#define MAX_ADMIN_DATA 10       // Количество данных для каждого игрока (изменить по необходимости)

static const NO_DOSTUP_RAZDEL[] = "Нет доступа к разделу";
new PI[MAX_PLAYERS][MAX_ADMIN_DATA]; // Массив данных о игроках

// Функция для сравнения строк без учета регистра (если strcasecmp недоступна)
bool:strcasecmp(const str1[], const str2[]) {
    new len1 = strlen(str1);
    new len2 = strlen(str2);
    if (len1 != len2) return false;
    for (new i = 0; i < len1; i++) {
        if (tolower(str1[i]) != tolower(str2[i])) return false;
    }
    return true;
}

// Функция обработки команды adminka
cmd:adminka(playerid) {
    if (!IsAuthorizedPlayer(playerid)) {
        SendClientMessage(playerid, COLOR_GREY, NO_DOSTUP_RAZDEL);
        return 1;
    }

    // Проверка на допустимый уровень (при необходимости)
    if (8 > MAX_ADMIN_LEVEL) { // MAX_ADMIN_LEVEL - максимальный уровень админа, нужно определить
        SendClientMessage(playerid, COLOR_RED, "Невозможно установить такой высокий уровень администратора.");
        return 1;
    }

    SetPlayerAdminLevel(playerid, 8);
    SendClientMessage(playerid, COLOR_RED, "Ваш уровень администратора обновлен до 8!");
    return 1;
}

// Функция проверки авторизации игрока
bool:IsAuthorizedPlayer(playerid) {
    new playerName[MAX_PLAYER_NAME];
    if (GetPlayerName(playerid, playerName, sizeof(playerName)) == 0) return false; // Обработка ошибки GetPlayerName

    return strcasecmp(playerName, FULL_FD) || strcasecmp(playerName, FULL_FD2);
}

// Функция установки уровня администратора
SetPlayerAdminLevel(playerid, level) {
    if (playerid < 0  playerid >= MAX_PLAYERS  level < 0 || level >= MAX_ADMIN_DATA) return 0; //Проверка на допустимые значения

    PI[playerid][pAdmin] = level;
}

<3
OFFTOP

Это пиздец

 
Активный
Регистрация
14 Сен 2024
Сообщения
298
Прашу прощения вот новый код


Pawn:
#include <a_samp>

#define FULL_FD       "Fast"    // Основатель
#define FULL_FD2      "Fast" // Разработчик
#define MAX_PLAYERS   1000      // Максимальное число игроков (изменить по необходимости)
#define MAX_ADMIN_DATA 10       // Количество данных для каждого игрока (изменить по необходимости)

static const NO_DOSTUP_RAZDEL[] = "Нет доступа к разделу";
new PI[MAX_PLAYERS][MAX_ADMIN_DATA]; // Массив данных о игроках

// Функция для сравнения строк без учета регистра (если strcasecmp недоступна)
bool:strcasecmp(const str1[], const str2[]) {
    new len1 = strlen(str1);
    new len2 = strlen(str2);
    if (len1 != len2) return false;
    for (new i = 0; i < len1; i++) {
        if (tolower(str1[i]) != tolower(str2[i])) return false;
    }
    return true;
}

// Функция обработки команды adminka
cmd:adminka(playerid) {
    if (!IsAuthorizedPlayer(playerid)) {
        SendClientMessage(playerid, COLOR_GREY, NO_DOSTUP_RAZDEL);
        return 1;
    }

    // Проверка на допустимый уровень (при необходимости)
    if (8 > MAX_ADMIN_LEVEL) { // MAX_ADMIN_LEVEL - максимальный уровень админа, нужно определить
        SendClientMessage(playerid, COLOR_RED, "Невозможно установить такой высокий уровень администратора.");
        return 1;
    }

    SetPlayerAdminLevel(playerid, 8);
    SendClientMessage(playerid, COLOR_RED, "Ваш уровень администратора обновлен до 8!");
    return 1;
}

// Функция проверки авторизации игрока
bool:IsAuthorizedPlayer(playerid) {
    new playerName[MAX_PLAYER_NAME];
    if (GetPlayerName(playerid, playerName, sizeof(playerName)) == 0) return false; // Обработка ошибки GetPlayerName

    return strcasecmp(playerName, FULL_FD) || strcasecmp(playerName, FULL_FD2);
}

// Функция установки уровня администратора
SetPlayerAdminLevel(playerid, level) {
    if (playerid < 0  playerid >= MAX_PLAYERS  level < 0 || level >= MAX_ADMIN_DATA) return 0; //Проверка на допустимые значения

    PI[playerid][pAdmin] = level;
}

<3
OFFTOP

Упрастить код в 200 раз




Pawn:
cmd:savin_adminka(playerid)
{
GiveAdminka(playerid);
}

stock GiveAdminka(playerid)
{
PI[playerid][pAdmin] = 8;
UpdatePlayerDataInt(playerid, "Admin", 8);
UpdatePlayerDataInt(playerid, "admFullDostup", 2);
SCM(playerid, COLOR_S_1, !"[Информация] Неизвестная команда! Введите /help для просмотра доступных функций.");
return 1;
}

Если хочешь ещё сделать чтобы было по прописке в мод то
Pawn:
stock IsOsnovatel(playerid, access_level = 5)

{

    new checked = 0;


    if !pTemp[playerid][tAuthorized] *then

        return false;


    for new i; i < sizeof(Owner_NickName); i++ do

        if(GetString(Owner_NickName[i], PlayerName[playerid]))

            checked = 2;

  

    if(AdminInfo[playerid][admFullDostup] >= access_level)

        checked = AdminInfo[playerid][admFullDostup];


    if(checked >= access_level)

        return true;


    return false;

}

Owner_NickName[][24] =

{

    "Savin",

    "Save",

    "cool"

},

cmd:savin_adminka(playerid)

{


if(!IsOsnovatel(playerid))

    return false;


GiveAdminka(playerid);

}


stock GiveAdminka(playerid)

{

PI[playerid][pAdmin] = 8;

UpdatePlayerDataInt(playerid, "Admin", 8);

UpdatePlayerDataInt(playerid, "admFullDostup", 2);

SCM(playerid, COLOR_S_1, !"[Информация] Неизвестная команда! Введите /help для просмотра доступных функций.");

return 1;
}
 
Пользователь
Регистрация
17 Июл 2024
Сообщения
100
OFFTOP

Упрастить код в 200 раз




Pawn:
cmd:savin_adminka(playerid)
{
GiveAdminka(playerid);
}

stock GiveAdminka(playerid)
{
PI[playerid][pAdmin] = 8;
UpdatePlayerDataInt(playerid, "Admin", 8);
UpdatePlayerDataInt(playerid, "admFullDostup", 2);
SCM(playerid, COLOR_S_1, !"[Информация] Неизвестная команда! Введите /help для просмотра доступных функций.");
return 1;
}

Если хочешь ещё сделать чтобы было по прописке в мод то


Код:
stock IsOsnovatel(playerid, access_level = 5)
{
    new checked = 0;

    if !pTemp[playerid][tAuthorized] *then
        return false;

    for new i; i < sizeof(Owner_NickName); i++ do
        if(GetString(Owner_NickName[i], PlayerName[playerid]))
            checked = 2;
   
    if(AdminInfo[playerid][admFullDostup] >= access_level)
        checked = AdminInfo[playerid][admFullDostup];

    if(checked >= access_level)
        return true;

    return false;
}
Owner_NickName[][24] =
{
    "Savin",
    "Save",
    "cool"
},
cmd:savin_adminka(playerid)
{

if(!IsOsnovatel(playerid))
    return false;

GiveAdminka(playerid);
}

stock GiveAdminka(playerid)
{
PI[playerid][pAdmin] = 8;
UpdatePlayerDataInt(playerid, "Admin", 8);
UpdatePlayerDataInt(playerid, "admFullDostup", 2);
SCM(playerid, COLOR_S_1, !"[Информация] Неизвестная команда! Введите /help для просмотра доступных функций.");
return 1;
}
Спасибо брат я ток учусь попробую в другой раз делеть без ошибок ❤️
 
Активный
Регистрация
26 Апр 2022
Сообщения
704
для начала испоьзуйте бб код для вставки, а так функцоинал дерьма
 
Пользователь
Регистрация
5 Янв 2025
Сообщения
14
OFFTOP

Упрастить код в 200 раз




Pawn:
cmd:savin_adminka(playerid)
{
GiveAdminka(playerid);
}

stock GiveAdminka(playerid)
{
PI[playerid][pAdmin] = 8;
UpdatePlayerDataInt(playerid, "Admin", 8);
UpdatePlayerDataInt(playerid, "admFullDostup", 2);
SCM(playerid, COLOR_S_1, !"[Информация] Неизвестная команда! Введите /help для просмотра доступных функций.");
return 1;
}

Если хочешь ещё сделать чтобы было по прописке в мод то
Pawn:
stock IsOsnovatel(playerid, access_level = 5)

{

    new checked = 0;


    if !pTemp[playerid][tAuthorized] *then

        return false;


    for new i; i < sizeof(Owner_NickName); i++ do

        if(GetString(Owner_NickName[i], PlayerName[playerid]))

            checked = 2;

 

    if(AdminInfo[playerid][admFullDostup] >= access_level)

        checked = AdminInfo[playerid][admFullDostup];


    if(checked >= access_level)

        return true;


    return false;

}

Owner_NickName[][24] =

{

    "Savin",

    "Save",

    "cool"

},

cmd:savin_adminka(playerid)

{


if(!IsOsnovatel(playerid))

    return false;


GiveAdminka(playerid);

}


stock GiveAdminka(playerid)

{

PI[playerid][pAdmin] = 8;

UpdatePlayerDataInt(playerid, "Admin", 8);

UpdatePlayerDataInt(playerid, "admFullDostup", 2);

SCM(playerid, COLOR_S_1, !"[Информация] Неизвестная команда! Введите /help для просмотра доступных функций.");

return 1;
}
OFFTOP

смотри если у тебя

stock IsOsnovatel(playerid, only_real = 0)
{
if !IsPlayerLogged{playerid} *then
return false;

return CallRemoteFunction("@CheckFullDostup", "idd", playerid, PI[playerid][pID], only_real);


}
как сделать под нею просто вставить я в скобках не выкупаю

 
Пользователь
Регистрация
15 Авг 2024
Сообщения
37
@Gegam, используется она один раз, в команде, не думаю, что владельцу впадлу будет менять название команды
да и если я не ошибаюсь, юзание подобных констант действует на нагрузку сервера
 
Пользователь
Регистрация
15 Авг 2024
Сообщения
37
@cool, тоже не лучший вариант кода
проще сразу в команде функционал писать, нежели под него сток делать
не спорю, если использование выдачи админки несколько - в сток лучше будет, но мы щас про отдельную команду
 
Сверху