Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 4 из 4
  1. #1
    Аватар для TheMallard
    Пользователь

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±

    Улучшенный глобальный чат.

    Улучшенный глобальный чат с антифлудом от Londlem.



    PHP код:
    public OnPlayerText(playeridtext[])
    {
        new 
    server_tick GetTickCount();
        if(
    GetPVarInt(playerid"anti_flood") > server_tick)
            return 
    0;
        
    SetPVarInt(playerid"anti_flood"server_tick 1000);

        static const 
    admin_rank[] = "Администратор ";
        static const 
    format_str[] = "%s ({%06x}%s%s{ECF0F1})";

        
    #define MAX_PLAYER_TEXT (MAX_CHATBUBBLE_LENGTH - (sizeof(format_str) - \
                
    (2) + MAX_PLAYER_NAME sizeof(admin_rank) + 1))
        if(
    strlen(text) > MAX_PLAYER_TEXT)
            return 
    0;
        
    #undef MAX_PLAYER_TEXT

        
    new player_name[MAX_PLAYER_NAME 1];
        
    GetPlayerName(playeridplayer_nameMAX_PLAYER_NAME);

        new 
    player_msg[MAX_CHATBUBBLE_LENGTH];
        
    format(player_msgsizeof(player_msg), format_str,
            
    textGetPlayerColor(playerid) >>> 8,
            
    IsPlayerAdmin(playerid) ? admin_rank ""player_name);
        
    SendClientMessageToAll(0xECF0F1FFplayer_msg);
        return 
    0;

    Последний раз редактировалось TheMallard; 23.03.2016 в 17:23. Причина: переписал, добавил антифлуд от Londlem

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Он не улучшенный, а просто другой (я, например, предпочитаю видеть ник (и ID) перед сообщением). Ещё ты не учёл случай, когда игрок введёт больше, чем MAX_PLAYER_TEXT символов. И высчитывать размер для player_msg смысла нет, он фиксирован (144).

    Так, по моему, будет правильнее:
    PHP код:
    public OnPlayerText(playeridtext[])
    {
        static const
            
    adm_pfx[] = "Администратор ",
            
    fmt_str[] = "%s ({%06x}%s%s{ECF0F1})";

        
    #define MAX_PLAYER_TEXT (MAX_CHATBUBBLE_LENGTH - MAX_PLAYER_NAME \
                
    sizeof(adm_pfx) \
                - (
    sizeof(fmt_str) - 4))
        
    #assert MAX_PLAYER_TEXT > 0

        
    text[MAX_PLAYER_TEXT] = 0;

        new 
    player_name[MAX_PLAYER_NAME 1];
        
    GetPlayerName(playeridplayer_nameMAX_PLAYER_NAME);

        new 
    player_msg[144];
        
    format(player_msgsizeof(player_msg), fmt_str,
            
    text,
            
    GetPlayerColor(playerid) >>> 8,
            
    IsPlayerAdmin(playerid) ? adm_pfx "",
            
    player_name);

        
    SendClientMessageToAll(0xECF0F1FFplayer_msg);

        
    #undef MAX_PLAYER_TEXT
        
    return 0;


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

    Статус
    Оффлайн
    Регистрация
    08.12.2015
    Адрес
    San Fierro
    Сообщений
    217
    Репутация:
    39 ±
    И правда, что как-то не очень вышло. Перепишу, спасибо.
    Последний раз редактировалось TheMallard; 23.03.2016 в 16:25.

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

    Статус
    Оффлайн
    Регистрация
    11.08.2014
    Сообщений
    19
    Репутация:
    1 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Он не улучшенный, а просто другой (я, например, предпочитаю видеть ник (и ID) перед сообщением). Ещё ты не учёл случай, когда игрок введёт больше, чем MAX_PLAYER_TEXT символов. И высчитывать размер для player_msg смысла нет, он фиксирован (144).

    Так, по моему, будет правильнее:
    PHP код:
    public OnPlayerText(playeridtext[])
    {
        static const
            
    adm_pfx[] = "Администратор ",
            
    fmt_str[] = "%s ({%06x}%s%s{ECF0F1})";

        
    #define MAX_PLAYER_TEXT (MAX_CHATBUBBLE_LENGTH - MAX_PLAYER_NAME \
                
    sizeof(adm_pfx) \
                - (
    sizeof(fmt_str) - 4))
        
    #assert MAX_PLAYER_TEXT > 0

        
    text[MAX_PLAYER_TEXT] = 0;

        new 
    player_name[MAX_PLAYER_NAME 1];
        
    GetPlayerName(playeridplayer_nameMAX_PLAYER_NAME);

        new 
    player_msg[144];
        
    format(player_msgsizeof(player_msg), fmt_str,
            
    text,
            
    GetPlayerColor(playerid) >>> 8,
            
    IsPlayerAdmin(playerid) ? adm_pfx "",
            
    player_name);

        
    SendClientMessageToAll(0xECF0F1FFplayer_msg);

        
    #undef MAX_PLAYER_TEXT
        
    return 0;

    Данный код не является работоспособным, хоть и компилируется без единой ошибки.

 

 

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

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

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

Ваши права

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