Переключение названия и динамического названия сервера

В теме 1 сообщение

Sleash
Завсегдатый

Всем привет! На днях от "нечего делать" написал команду для изменения названия сервера, делать его динамическим с указанным вами интервалом, не буду многословить, приступаем сразу к коду:

// Для начала все объявления/переменные в начало мода
#define CREATER_ADMIN 15 // Уровень админки, с которого хотите разрешить доступ к команде
#define SERVER_NAME_DIALOG 1937
forward server_name(playerid);
new server_name_timer, servernamestring[256], servername[3][50], server_name_id, server_name_interval;

После всех объявлений, сразу приступим к команде (dc_cmd/zcmd/Pawn.CMD + sscanf):

CMD:setservername(playeid, params[]) {
    if(PlayerInfo[playrid][pAdmin] < CREATER_ADMIN) return false// Не забываем заменять на свои переменные
    if(sscanf(params, "dds[50]", params[0], params[1], params[2])) {
        SendClientMessage(playerid, 0x696969FF"/setservername [mode] [interval] [name]");
        SendClientMessage(playerid, 0x696969FF"Режим 1 - Название меняется с указанным интервалом (в секундах)");
        SendClientMessage(playerid, 0x696969FF"Режим 2 - Название не меняется, пока не сменят режим на другой");
        return false;
    }
    if(params[0] != 2 && params[0] != 1return SendClientMessage(playerid, 0x800000FF"Неверно указан режим!");
    if(params[1] < 1 && params[0] == 1return SendClientMessage(playerid, 0x800000FF"Нельзя поставить интервал меньше одной секунды!");
    if(params[0] == 2) {
        format(servernamestring, 128"hostname %s", params[2]);
        SendRconCommand(servernamestring);
        new nick[MAX_PLAYER_NAME];
        GetPlayerName(playerid,nick,MAX_PLAYER_NAME);
        format(servernamestring, 256"ADMIN %s CHANGED SERVER NAME ON %s (MODE 2)", nick, params[2]);
        server_name_id = -1;
        return 1;
    } else {
        ShowPlayerDialog(playerid, SERVER_NAME_DIALOG, DIALOG_STYLE_INPUT, "Второе название""Введите второе название сервера:""Ок""Отмена");
        strmid(servername[2], params[2], 0, strlen(params[2]), 50);
        server_name_interval = params[1]*1000;
    }
    return true;
}

следующий этап: Добавление диалогового окна:

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    if(dialogid == SERVER_NAME_DIALOG) {
        if(!response) return false;
        if(!strlen(inputtext)) return ShowPlayerDialog(playerid, SERVER_NAME_DIALOG, DIALOG_STYLE_INPUT, "Второе название""Введите второе название сервера:""Ок""Отмена");
        if(strlen(inputtext) > 50return ShowPlayerDialog(playerid, SERVER_NAME_DIALOG, DIALOG_STYLE_INPUT, "Второе название""Слишком длинное название!\nВведите второе название сервера:""Ок""Отмена");
        strmid(servername[0], inputtext, 0, strlen(inputtext), 50);
        strmid(servername[1], servername[2], 0, strlen(servername[2]), 50);
        server_name_id = 0;
        new nick[MAX_PLAYER_NAME];
        GetPlayerName(playerid,nick,MAX_PLAYER_NAME);
        format(servernamestring, 256"ADMIN %s CHANGED SERVER NAME ON %s AND %s (MODE 1)", nick, servername[0], servername[1]);
        server_name_timer = SetTimerEx("server_name"1, server_name_interval, "d", playerid);
    }
    return 1
}

Завершающим действием будет добавления нашего public server_name, о котором мы объявили в начале через forward:

public server_name(playerid)
{
    if(server_name_id == 0) {
        format(servernamestring, 128"hostname %s", servername[1]);
        SendRconCommand(servernamestring);
        server_name_id = 1;
    }
    else if(server_name_id == 1) {
        format(servernamestring, 128"hostname %s", servername[0]);
        SendRconCommand(servernamestring);
        server_name_id = 0;
    } else return KillTimer(server_name_timer);
}

На этом всё, команда несложная, но я всё же решил, что кому-то пригодится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!


Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.


Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Похожий контент

    • crearot
      От crearot
      Мы ищем талантливого 3D-моделлера в команду.  Гибкий график, опытный коллектив.
      Что мы предлагаем:
      — Конкурентоспособную и стабильную заработную плату;
      — Гибкий график и возможность работать удаленно;
      — Работа в окружении специалистов, готовых способствовать развитию ваших навыков;
      — Перспективы карьерного и профессионального роста.
      От вас требуется:
      — Опыт владением 3ds Max и Blender для моделирования и текстурирования;
      — Работа по референсам;
      — Опыт создания интерьеров и экстерьеров;
      — Наличие портфолио.
      — Работа с текстурами (архивы (сборка, пересборка), добавление текстур, создание архивов под разные видеоускорители(PVR, DXT, ETC))
      — Работа с архивами моделей (.img образы) для добавления моделей и пересборки
      — Моделирование карты, работа по т/з для создания ландшафта на карте и т.д


      Отправьте резюме: → https://forms.gle/Trn4vjMEi58EDybv6
    • Axel myself
      От Axel myself
       
      C:\Users\User\Desktop\Adamand Role Play Original\gamemodes\Adamand037.pwn(25676) : error 017: undefined symbol "Geo_GetCountry2"
      C:\Users\User\Desktop\Adamand Role Play Original\gamemodes\Adamand037.pwn(81191) : error 017: undefined symbol "Geo_GetCountry2"
      Pawn compiler 3.2.3664              Copyright (c) 1997-2017, ITB CompuPhase

      2 Errors.


      Помогите пожалуйста с проблемой, ничего нового не добавлял, сам 50/50 разбираюсь в павно) но посмотрев на глаз особо ничего ошибочного не попалось
      Буду благодарен.