Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 11
  1. #1
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±

    Бан с выбором причины из диалога

    `Из названия темы всё понятно.
    Для работы потребуется плагин sscanf2.

    Добавляем ко всем new:
    PHP код:
    #define BAN_DIALOG_ID 58 // Вместо 58 выставляете свободный ID диалога, такой ID, которого нет в public OnDialogResponse

    #define MAX_BAN_REASON        20
    #define MAX_BAN_REASON_DESC    24

    enum e_ban_reasons
    {
        
    banReason[MAX_BAN_REASON],
        
    banReasonDesc[MAX_BAN_REASON_DESC]
    };

    static const
        
    g_ban_reasons[10][e_ban_reasons] =
        {
            {{
    "God Mode"},          {"Бесконечное здоровье"}},
            {{
    "Speed Hack"},        {"Чит на скорость"}},
            {{
    "Air Brake"},         {"Чит на полёт"}},
            {{
    "Weapon Hack"},       {"Чит на оружие"}},
            {{
    "No Reload"},         {"Бесконечное оружие"}},
            {{
    "HP Regen"},          {"Восстановление здоровья"}},
            {{
    "VHP Refit"},         {"Восстановление здоровья транспорта"}},
            {{
    "Insults"},           {"Оскорбления"}},
            {{
    "AFK In Fight"},      {"AFK в бою"}},
            {{
    "Fly Hack"},          {"Чит на полёт"}}
        }; 
    Добавляем команду для бана игрока:
     dc_cmd, zcmd, ...

    PHP код:
    CMD:ban(playeridparams[])
    {
        if(!
    IsPlayerAdmin(playerid))
            return 
    1// Проверка на админа, можете заменить на свою
        
    extract params -> new playertargetid; else
            return 
    SendClientMessage(playerid, -1"Используйте: /ban [playerid]");
        if(
    IsPlayerConnected(targetid) == 0)
            return 
    SendClientMessage(playerid, -1"Такого игрока нет на сервере.");    
        
        
    SetPVarInt(playerid"BanTarget"targetid);
        static const
            
    concat_str0[] = "{ff0000}",
            
    concat_str1[] = "\t\t{ffffff}[";

        new
            
    string[((sizeof(concat_str0) - 1) + (MAX_BAN_REASON 1) + (sizeof(concat_str1) - 1) + (MAX_BAN_REASON_DESC 1) + 2) * sizeof(g_ban_reasons) - 1];
        
    string[0] = '\0';
        
        new
            
    len 0;
        
        for(new 
    0sizeof(g_ban_reasons); ++i)
            
    len += strcat(stringconcat_str0) + strcat(stringg_ban_reasons[i][banReason]),
            
    len += strcat(stringconcat_str1) + strcat(stringg_ban_reasons[i][banReasonDesc]),
            
    string[len++] = ']'string[len++] = '\n'string[len] = '\0';
        
    string[--len] = '\0';
        return 
    ShowPlayerDialog(playeridBAN_DIALOG_IDDIALOG_STYLE_LIST"Выберите причину"string"Забанить""Отмена");


     Стандартный командный процессор

    PHP код:
    if(strcmp(cmdtext"/ban"true) == 0)
    {
        if(!
    IsPlayerAdmin(playerid))
            return 
    1// Проверка на админа, можете заменить на свою
        
    extract cmdtext -> new playertargetid; else
            return 
    SendClientMessage(playerid, -1"Используйте: /ban [playerid]");
        if(
    IsPlayerConnected(targetid) == 0)
            return 
    SendClientMessage(playerid, -1"Такого игрока нет на сервере.");    
        
        
    SetPVarInt(playerid"BanTarget"targetid);
        static const
            
    concat_str0[] = "{ff0000}",
            
    concat_str1[] = "\t\t{ffffff}[";
        new
            
    string[((sizeof(concat_str0) - 1) + (MAX_BAN_REASON 1) + (sizeof(concat_str1) - 1) + (MAX_BAN_REASON_DESC 1) + 2) * sizeof(g_ban_reasons) - 1];
        
    string[0] = '\0';
        
        new
            
    len 0;
        
        for(new 
    0sizeof(g_ban_reasons); ++i)
            
    len += strcat(stringconcat_str0) + strcat(stringg_ban_reasons[i][banReason]),
            
    len += strcat(stringconcat_str1) + strcat(stringg_ban_reasons[i][banReasonDesc]),
            
    string[len++] = ']'string[len++] = '\n'string[len] = '\0';
        
    string[--len] = '\0';
        return 
    ShowPlayerDialog(playeridBAN_DIALOG_IDDIALOG_STYLE_LIST"Выберите причину"string"Забанить""Отмена");



    Добавим распознавание диалога, в public OnDialogResponse:

    PHP код:
    case BAN_DIALOG_ID:
    {
        if(
    response == 0)
            return 
    1;
        new
            
    targetname[MAX_PLAYER_NAME+1],
            
    targetid GetPVarInt(playerid"BanTarget");

        static const
            
    fmt_str[] = "%s (%d) забанил %s (%d) по причине: %s";

        new
            
    str[sizeof(fmt_str) + (-MAX_PLAYER_NAME) + (-4) + (-MAX_PLAYER_NAME) + (-4) + (-MAX_BAN_REASON 1)];
        
    GetPlayerName(playeridstrsizeof(str));
        
    GetPlayerName(targetidtargetnamesizeof(targetname));
        
    format(strsizeof(str), fmt_strstrplayeridtargetnametargetidg_ban_reasons[listitem][banReason]);
        
    SendClientMessageToAll(-1str);
        return 
    Ban(targetid);

    Автор: Londlem

    Специально для: Pro-Pawn.Ru


    Копирование данной статьи без разрешения автора запрещено!
    Последний раз редактировалось L0ndl3m; 02.03.2015 в 18:28.

  2. 2 пользователя(ей) сказали cпасибо:
    =SAN= (23.03.2014) semen7907 (23.03.2014)
  3. #2
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Отлично!

  4. #3
    Аватар для =SAN=
    Пользователь

    Статус
    Оффлайн
    Регистрация
    20.01.2014
    Адрес
    Saint-Petersburg
    Сообщений
    88
    Репутация:
    33 ±
    Удобно.Не нужно писать лишний текст и т.д

  5. #4
    Аватар для Accord
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.11.2013
    Сообщений
    49
    Репутация:
    1 ±
    Лучше уж сделать различные причины, а не только виды читов.

    PHP код:
    new const CheatNames[][] = {"Читы""Оск. Родных""Взломан/Передан"и так далее}; 

  6. #5
    Аватар для Caypen
    Пользователь

    Статус
    Оффлайн
    Регистрация
    25.03.2014
    Сообщений
    90
    Репутация:
    16 ±
    Хорошо конечно но
    1. Диалог не завершает клбэк а значит дальше будет перебирать диалоги.
    2. Иногда нужно быстро забанить игрока а с этими диалогами так врят-ли получится.
    3. Зачем эти гм,спидхак и т.д. можно же просто как в посте выше написано сделать.
    4. Лучше еще добавить графу "Другое" куда можно будет вписать свою причину,ну или продумывать все возможные варианты причин.

  7. #6
    Аватар для "Volk"
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2013
    Сообщений
    60
    Репутация:
    -3 ±
    ну тут дашь бан он перезайдёт и опять в игре

  8. #7
    Аватар для L0ndl3m
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.10.2013
    Адрес
    Ярославль
    Сообщений
    1,366
    Репутация:
    774 ±
    Цитата Сообщение от "Volk" Посмотреть сообщение
    ну тут дашь бан он перезайдёт и опять в игре
    На локалке тестировали что-ли?

  9. #8
    Аватар для "Volk"
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2013
    Сообщений
    60
    Репутация:
    -3 ±
    Цитата Сообщение от Londlem Посмотреть сообщение
    На локалке тестировали что-ли?
    да)))

  10. #9
    Аватар для Kenny_Dalglish
    Заблокирован

    Статус
    Оффлайн
    Регистрация
    24.02.2014
    Сообщений
    179
    Репутация:
    -1 ±
    Подобное в скарлекс есть

  11. #10
    Аватар для Salvacore
    Инжунер-погромист

    Статус
    Оффлайн
    Регистрация
    10.05.2013
    Адрес
    Аҧсуа бызшәа
    Сообщений
    2,271
    Репутация:
    418 ±
    Цитата Сообщение от Kenny_Dalglish Посмотреть сообщение
    Подобное в скарлекс есть
    Где-где?

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •