CMD:fmenu (Приватные каналы связи)

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

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

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

Для начала сама команда:

C++:
CMD:fmenu(playerid, params[])
{
    if(PlayerInfo[playerid][pMember] != F_FBI && PlayerInfo[playerid][pRank] < 8) return SendClientMessage(playerid,CGREY,"Вам недоступна данная команда"); //Проверка на фракцию, меняете под себя
    if(PlayerInfo[playerid][pWork] == 0) return SendClientMessage(playerid,CGREY,"Начните рабочий день на базе организации"); //Проверка на начала рабочего дня, меняете под себя
    ShowPlayerDialog(playerid,448,DIALOG_STYLE_LIST,"Меню канала","1 | Открыть/закрыть канал\n2 | Список участников\n3 | Пригласить в канал\n4 | Удалить из канала","Далее","Отмена");
    return 1;
}

PlayerInfo - Ваша информация об игроке (PI, Users, pInfo)
CGREY - Цвет тексте, также можете менять под себя.

В Public OnPlayerDialogResponse

C++:
case 448:
        {
            if(!response) return 1;
            switch(listitem)
            {
                case 0:
                {
                    kanals = (!kanals) ? (true) : (false);
                    if(kanals) SendClientMessage(playerid,CREWARD,"Вы открыли канал!");
                    else SendClientMessage(playerid,CREWARD,"Вы закрыли канал!");
                }
                case 1:
                {
                    new str[70];
                    query = "{ffffff}";
                    for(new i = 0; i < MAX_PLAYERS; i++)
                    {
                        if(!IsPlayerConnected(i) || PlayerLogged[i] == false || !GetPVarInt(i,"FR")) continue;
                        format(str,sizeof(str),"%s [id: %d]\n",PlayerInfo[i][pSendername],i);
                        strcat(query,str);
                    }
                    ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Список участников",query,"Далее","");
                }
                case 2: ShowPlayerDialog(playerid,449,DIALOG_STYLE_INPUT,"Пригласить в канал","{ffffff}Введите ID игрока:\n\n","Далее","Отмена");
                case 3: ShowPlayerDialog(playerid,450,DIALOG_STYLE_INPUT,"Удалить из канала","{ffffff}Введите ID игрока:\n\n","Далее","Отмена");
            }
        }
        case 449:
        {
            if(!response) return ShowPlayerDialog(playerid,448,DIALOG_STYLE_LIST,"Меню канала","1 | Открыть/закрыть канал\n2 | Список участников\n3 | Пригласить в канал\n4 | Удалить из канала","Далее","Отмена");
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid,449,DIALOG_STYLE_INPUT,"Пригласить в канал","{ffffff}Введите ID игрока:\n\n","Далее","Отмена");
            new player = strval(inputtext);
            if(GetPVarInt(player,"FR")) return SendClientMessage(playerid,CGREY,"Игрок уже состоит в приватном канале!");
            new Float:x,Float:y,Float:z;
            GetPlayerPos(player,x,y,z);
            if(!IsPlayerInRangeOfPoint(playerid, 5.0, x,y,z)) return SendClientMessage(playerid,CGREY,"Вы не рядом с игроком");
            SendClientMessage(player,-1,"Вас пригласили в приватный канал. Используйте: {f7ae11}/fr");
            static const fmt_string[] = "Вы пригласили %s в приватный канал";
            new str[sizeof(fmt_string)+MAX_PLAYER_NAME];
            format(str, sizeof(str), fmt_string,PlayerInfo[player][pSendername]);
            SendClientMessage(player,CREWARD,str);
            SetPVarInt(player,"FR",1);
        }
        case 450:
        {
            if(!response) return ShowPlayerDialog(playerid,448,DIALOG_STYLE_LIST,"Меню канала","1 | Открыть/закрыть канал\n2 | Список участников\n3 | Пригласить в канал\n4 | Удалить из канала","Далее","Отмена");
            if(!strlen(inputtext)) return ShowPlayerDialog(playerid,450,DIALOG_STYLE_INPUT,"Удалить из канала","{ffffff}Введите ID игрока:\n\n","Далее","Отмена");
            new player = strval(inputtext);
            if(!GetPVarInt(player,"FR")) return SendClientMessage(playerid,CGREY,"Игрок не состоит в приватном канале!");
            SendClientMessage(player,CREWARD,"Вас выгнали из приватного канала!");
            static const fmt_string[] = "Вы выгнали %s из приватного канала";
            new str[sizeof(fmt_string)+MAX_PLAYER_NAME];
            format(str, sizeof(str), fmt_string,PlayerInfo[player][pSendername]);
            SendClientMessage(player,CREWARD,str);
            DeletePVar(player,"FR");
        }

CREWARD - цвет текста, меняете под себя.
PlayerInfo[i][pSendername] - это информация об игровом нике (PlayerName[playerid], PN(playerid), PlayerInfo[playerid][pName]) - настраиваем также под себя.

В начало мода
C++:
new bool:kanals;

 
Создатель WayDev
Команда форума
Администратор
Регистрация
13 Мар 2022
Сообщения
881
Хорошая система, сделана аккуратно. Приятно видеть, что люди научились работать с тернарными операторами :)
 
.NET software developer
Пользователь
Регистрация
20 Мар 2022
Сообщения
76
Заблокированный
Регистрация
20 Май 2022
Сообщения
122

CMD:fmenu(playerid, params[])
{
if(PlayerInfo[playerid][pMember] != F_FBI && PlayerInfo[playerid][pRank] < 8) return SendClientMessage(playerid,CGREY,"Вам недоступна данная команда"); //Проверка на фракцию, меняете под себя
if(PlayerInfo[playerid][pWork] == 0) return SendClientMessage(playerid,CGREY,"Начните рабочий день на базе организации"); //Проверка на начала рабочего дня, меняете под себя
ShowPlayerDialog(playerid,448,DIALOG_STYLE_LIST,"Меню канала","1 | Открыть/закрыть канал\n2 | Список участников\n3 | Пригласить в канал\n4 | Удалить из канала","Далее","Отмена");
return 1;
}

case 448:
{
if(!response) return 1;
switch(listitem)
{
case 0:
{
kanals = (!kanals) ? (true) : (false);
if(kanals) SendClientMessage(playerid,CREWARD,"Вы открыли канал!");
else SendClientMessage(playerid,CREWARD,"Вы закрыли канал!");
}
case 1:
{
new str[70];
query = "{ffffff}";
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || PlayerLogged == false || !GetPVarInt(i,"FR")) continue;
format(str,sizeof(str),"%s [id: %d]\n",PlayerInfo[pSendername],i);
strcat(query,str);
}
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Список участников",query,"Далее","");
}
case 2: ShowPlayerDialog(playerid,449,DIALOG_STYLE_INPUT,"Пригласить в канал","{ffffff}Введите ID игрока:\n\n","Далее","Отмена");
case 3: ShowPlayerDialog(playerid,450,DIALOG_STYLE_INPUT,"Удалить из канала","{ffffff}Введите ID игрока:\n\n","Далее","Отмена");
}
}
 
.NET software developer
Пользователь
Регистрация
20 Мар 2022
Сообщения
76

CMD:fmenu(playerid, params[])
{
if(PlayerInfo[playerid][pMember] != F_FBI && PlayerInfo[playerid][pRank] < 8) return SendClientMessage(playerid,CGREY,"Вам недоступна данная команда"); //Проверка на фракцию, меняете под себя
if(PlayerInfo[playerid][pWork] == 0) return SendClientMessage(playerid,CGREY,"Начните рабочий день на базе организации"); //Проверка на начала рабочего дня, меняете под себя
ShowPlayerDialog(playerid,448,DIALOG_STYLE_LIST,"Меню канала","1 | Открыть/закрыть канал\n2 | Список участников\n3 | Пригласить в канал\n4 | Удалить из канала","Далее","Отмена");
return 1;
}

case 448:
{
if(!response) return 1;
switch(listitem)
{
case 0:
{
kanals = (!kanals) ? (true) : (false);
if(kanals) SendClientMessage(playerid,CREWARD,"Вы открыли канал!");
else SendClientMessage(playerid,CREWARD,"Вы закрыли канал!");
}
case 1:
{
new str[70];
query = "{ffffff}";
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(!IsPlayerConnected(i) || PlayerLogged == false || !GetPVarInt(i,"FR")) continue;
format(str,sizeof(str),"%s [id: %d]\n",PlayerInfo[pSendername],i);
strcat(query,str);
}
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Список участников",query,"Далее","");
}
case 2: ShowPlayerDialog(playerid,449,DIALOG_STYLE_INPUT,"Пригласить в канал","{ffffff}Введите ID игрока:\n\n","Далее","Отмена");
case 3: ShowPlayerDialog(playerid,450,DIALOG_STYLE_INPUT,"Удалить из канала","{ffffff}Введите ID игрока:\n\n","Далее","Отмена");
}
}
А как же обернуть код в соответствующий HTML-блок? А как же табуляция?
 
Пользователь
Регистрация
21 Мар 2022
Сообщения
12
А как же обернуть код в соответствующий HTML-блок? А как же табуляция?
C++:
CMD : fmenu(playerid, params[])
{
    if (PlayerInfo[playerid][pMember] != F_FBI && PlayerInfo[playerid][pRank] < 8)
        return SendClientMessage(playerid, CGREY, "Вам недоступна данная команда"); //Проверка на фракцию, меняете под себя
    if (PlayerInfo[playerid][pWork] == 0)
        return SendClientMessage(playerid, CGREY, "Начните рабочий день на базе организации"); //Проверка на начала рабочего дня, меняете под себя
    ShowPlayerDialog(playerid, 448, DIALOG_STYLE_LIST, "Меню канала", "1 | Открыть/закрыть канал\n2 | Список участников\n3 | Пригласить в канал\n4 | Удалить из канала", "Далее", "Отмена");
    return 1;
}

case 448: {
    if (!response)
        return 1;
    switch (listitem) {
    case 0: {
        kanals = (!kanals) ? (true) : (false);
        if (kanals)
            SendClientMessage(playerid, CREWARD, "Вы открыли канал!");
        else
            SendClientMessage(playerid, CREWARD, "Вы закрыли канал!");
    }
    case 1: {
        new str[70];
        query = "{ffffff}";
        for (new i = 0; i < MAX_PLAYERS; i++) {
            if (!IsPlayerConnected(i) || PlayerLogged == false || !GetPVarInt(i, "FR"))
                continue;
            format(str, sizeof(str), "%s [id: %d]\n", PlayerInfo[pSendername], i);
            strcat(query, str);
        }
        ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Список участников", query, "Далее", "");
    }
    case 2:
        ShowPlayerDialog(playerid, 449, DIALOG_STYLE_INPUT, "Пригласить в канал", "{ffffff}Введите ID игрока:\n\n", "Далее", "Отмена");
    case 3:
        ShowPlayerDialog(playerid, 450, DIALOG_STYLE_INPUT, "Удалить из канала", "{ffffff}Введите ID игрока:\n\n", "Далее", "Отмена");
    }
}
 
Заблокированный
Регистрация
20 Май 2022
Сообщения
122
C++:
CMD : fmenu(playerid, params[])
{
    if (PlayerInfo[playerid][pMember] != F_FBI && PlayerInfo[playerid][pRank] < 8)
        return SendClientMessage(playerid, CGREY, "Вам недоступна данная команда"); //Проверка на фракцию, меняете под себя
    if (PlayerInfo[playerid][pWork] == 0)
        return SendClientMessage(playerid, CGREY, "Начните рабочий день на базе организации"); //Проверка на начала рабочего дня, меняете под себя
    ShowPlayerDialog(playerid, 448, DIALOG_STYLE_LIST, "Меню канала", "1 | Открыть/закрыть канал\n2 | Список участников\n3 | Пригласить в канал\n4 | Удалить из канала", "Далее", "Отмена");
    return 1;
}

case 448: {
    if (!response)
        return 1;
    switch (listitem) {
    case 0: {
        kanals = (!kanals) ? (true) : (false);
        if (kanals)
            SendClientMessage(playerid, CREWARD, "Вы открыли канал!");
        else
            SendClientMessage(playerid, CREWARD, "Вы закрыли канал!");
    }
    case 1: {
        new str[70];
        query = "{ffffff}";
        for (new i = 0; i < MAX_PLAYERS; i++) {
            if (!IsPlayerConnected(i) || PlayerLogged == false || !GetPVarInt(i, "FR"))
                continue;
            format(str, sizeof(str), "%s [id: %d]\n", PlayerInfo[pSendername], i);
            strcat(query, str);
        }
        ShowPlayerDialog(playerid, 0, DIALOG_STYLE_MSGBOX, "Список участников", query, "Далее", "");
    }
    case 2:
        ShowPlayerDialog(playerid, 449, DIALOG_STYLE_INPUT, "Пригласить в канал", "{ffffff}Введите ID игрока:\n\n", "Далее", "Отмена");
    case 3:
        ShowPlayerDialog(playerid, 450, DIALOG_STYLE_INPUT, "Удалить из канала", "{ffffff}Введите ID игрока:\n\n", "Далее", "Отмена");
    }
}
params[] в команде не используется и ещё вот этот участок странный

new str[70]; query = "{ffffff}";
 
Пользователь
Регистрация
25 Апр 2022
Сообщения
1
можно и без тернарного оператора

Код:
kanals = !kanals;
 
Сверху