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

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

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

Зарегистрироваться!
  • Если Вы желаете помогать развитию проекта, готовы заполнять раздел(-ы) и подсказывать другим пользователям на портале, есть возможность попасть в команду редакторов. Для этого следует обратиться в техническую поддержку
Заблокированный
Регистрация
17 Июл 2024
Сообщения
51
Доброе время Дня сливаю вам код для админ прописки в pawno коде

Вот код
// Настройки #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
Сообщения
241
OFFTOP

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

 
Заблокированный
Регистрация
17 Июл 2024
Сообщения
51
OFFTOP

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

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

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

 
Заблокированный
Регистрация
17 Июл 2024
Сообщения
51
OFFTOP

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

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

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

 
Заблокированный
Регистрация
17 Июл 2024
Сообщения
51
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
Сообщения
241
Прашу прощения вот новый код


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
Сообщения
241
Прашу прощения вот новый код


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
Сообщения
51
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
Сообщения
288
для начала испоьзуйте бб код для вставки, а так функцоинал дерьма
 
Сверху