Интересует вопрос по префиксам к нику в сообщении say.

Тема в разделе "Программирование / Скриптинг", создана пользователем santazx, 10 апр 2015.

  1. santazx

    santazx

    Сообщения:
    19
    Симпатии:
    0
    На днях для сервера начал делать плагин и все сделал что хотел, но осталась проблема.

    1. Когда один и пишу в чат видно только одно сообщение.
    2. Как только заходит 2 игрок когда пишу сообщение, оно повторяется два раз в чат.

    Вот пример кода, где я ошибся? :(

    PHP:
    public Action:say(client, const String:command[], args)
    {    
        if (
    client && args 0)
        {
            
    decl String:text[255];
            
    GetCmdArgString(textsizeof(text));
            
    StripQuotes(text);
            new 
    AdminId:adminid GetUserAdmin(client);
        
        for (new 
    1<= MaxClientsi++)
        {
            if (
    IsClientInGame(i) && !IsFakeClient(i))
            {
                if(
    adminid == INVALID_ADMIN_ID)
                {
                    switch (
    GetEntProp(iProp_Data"m_iFrags"))
                    {
                        case 
    01234567891011121314151617181920:
                        {
                            
    CPrintToChatAll("[РАНГ-1]%N:%s"clienttext);
                        }
                        case 
    2122232425262728293031323334353637383940:
                        {
                            
    CPrintToChatAll("[РАНГ-2]%N:%s"clienttext);
                        }
                        case 
    4142434445464748495051525354555657585960:
                        {
                            
    CPrintToChatAll("[РАНГ-3]%N:%s"clienttext);
                        }
                        case 
    6162636465666768697071727374757677787980:
                        {
                            
    CPrintToChatAll("[РАНГ-4]%N:%s"clienttext);
                        }
                        case 
    81828384858687888990919293949596979899100:
                        {
                            
    CPrintToChatAll("[РАНГ-5]%N:%s"clienttext);
                        }
                        case 
    101102103104105106107108109110111112113114115116117118119120:
                        {
                            
    CPrintToChatAll("[РАНГ-6]%N:%s"clienttext);
                        }
                        case 
    121122123124125126127128129130131132133134135136137138139140:
                        {
                            
    CPrintToChatAll("[РАНГ-7]%N:%s"clienttext);
                        }
                        case 
    141142143144145146147148149150151152153154155156157158159160,
                             
    161162163164165166167168169170171172173174175176177178179180,
                             
    181182183184185186187188189190191192193194195196197198199200:
                        {
                            
    CPrintToChatAll("[РАНГ-8]%N:%s"clienttext);
                        }
                        default:
                        {
                            
    CPrintToChatAll("[РАНГ-9]%N:%s"clienttext);
                         }
                    }
                }
                else {
                    
    CPrintToChatAll("[АДМИН]%N:%s"clienttext);
                }
            }
        }
            return 
    Plugin_Handled;
        }
        return 
    Plugin_Continue;
    }
    Всё разобрался, сделал проверку на команду. :))
     
    Последнее редактирование: 10 апр 2015
  2. Хитрый_Ёжик

    Хитрый_Ёжик

    Сообщения:
    281
    Симпатии:
    94
    CPrintToChatAll - выводит сообщение всем игрокам. Ты проходишься по списку всех игроков и на каждой итерации делаешь CPrintToChatAll. Если игроков 2, то CPrintToChatAll будет выполнен 2 раза.

    Зачем это в цикле?
    Код:
    adminid == INVALID_ADMIN_ID
    ИСПОЛЬЗУЙ IF!!

    Ну и на последок советую посмотреть это: http://forums.alliedmods.net/showthread.php?t=186695. Не надо изобретать велосипед.
     
    santazx нравится это.
  3. White Wolf

    White Wolf [] (int _n) -> double { return (_n % 2) == 0;}); Супер-модератор

    Сообщения:
    1.186
    Симпатии:
    411
    santazx, таким образом switch не поможет. Так перебирать нельзя. Лучше используй операторы if и else if.
    PHP:
    public Action:say(client, const String:text[], args)
    {    
        if (
    client && args 0)
        {
            
    StripQuotes(text);
            new 
    AdminId:adminid GetUserAdmin(client);
            new 
    iFrags GetEntProp(clientProp_Data"m_iFrags");
        
            if (
    IsClientInGame(client) && !IsFakeClient(client))
            {
                if(
    adminid == INVALID_ADMIN_ID)
                {
                    if (
    iFlags 21
                    {
                        
    CPrintToChatAll("[РАНГ-1]%N:%s"clienttext);
                    }
                    else if (
    20 iFlags 41)
                    {
                        
    CPrintToChatAll("[РАНГ-2]%N:%s"clienttext);
                    }
                    else if (
    40 iFlags 61)
                     {
                        
    CPrintToChatAll("[РАНГ-3]%N:%s"clienttext);
                     }
                     else if (
    60 iFlags 81)
                     {
                        
    CPrintToChatAll("[РАНГ-4]%N:%s"clienttext);
                     }
                     else if (
    80 iFlags 101)
                     {
                        
    CPrintToChatAll("[РАНГ-5]%N:%s"clienttext);
                     }
                     else if (
    100 iFlags 121)
                     {
                        
    CPrintToChatAll("[РАНГ-6]%N:%s"clienttext);
                     }
                     else if (
    120 iFlags 141)
                     {
                        
    CPrintToChatAll("[РАНГ-7]%N:%s"clienttext);
                     }
                     else if (
    140 iFlags <= 200)
                     {
                        
    CPrintToChatAll("[РАНГ-8]%N:%s"clienttext);
                     }
                     else
                     {
                        
    CPrintToChatAll("[РАНГ-9]%N:%s"clienttext);
                     }
                }
                else
                {
                    
    CPrintToChatAll("[АДМИН]%N:%s"clienttext);
                }
            }
        }
        return 
    Plugin_Continue;
    }
    Добавлено через 1 минуту
    Этот плагин не поможет, если он считает фраги и выдает за них префиксы.
     
    Последнее редактирование: 10 апр 2015
    santazx нравится это.
  4. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.506
    Симпатии:
    1.961
    А боты умеют писать?)
    И, кстати, в таком виде командный чат также станет общим.
    PHP:
    public Action:say(client, const String:text[], args)
    {    
        if (
    client && args && IsClientInGame(client))
        {
            
    StripQuotes(text);
            if(
    GetUserAdmin(client) == INVALID_ADMIN_ID)
            {
                new 
    iFrags GetEntProp(clientProp_Data"m_iFrags");
                if (
    iFlags 21
                {
                    
    CPrintToChatAll("[РАНГ-1]%N:%s"clienttext);
                }
                else if (
    20 iFlags 41)
                {
                    
    CPrintToChatAll("[РАНГ-2]%N:%s"clienttext);
                }
                else if (
    40 iFlags 61)
                {
                    
    CPrintToChatAll("[РАНГ-3]%N:%s"clienttext);
                }
                else if (
    60 iFlags 81)
                {
                    
    CPrintToChatAll("[РАНГ-4]%N:%s"clienttext);
                }
                else if (
    80 iFlags 101)
                {
                    
    CPrintToChatAll("[РАНГ-5]%N:%s"clienttext);
                }
                else if (
    100 iFlags 121)
                {
                    
    CPrintToChatAll("[РАНГ-6]%N:%s"clienttext);
                }
                else if (
    120 iFlags 141)
                {
                    
    CPrintToChatAll("[РАНГ-7]%N:%s"clienttext);
                }
                else if (
    140 iFlags 201)
                {
                    
    CPrintToChatAll("[РАНГ-8]%N:%s"clienttext);
                }
                else
                {
                    
    CPrintToChatAll("[РАНГ-9]%N:%s"clienttext);
                }
            }
            else
            {
                
    CPrintToChatAll("[АДМИН]%N:%s"clienttext);
            }
            return 
    Plugin_Handled;
        }
        return 
    Plugin_Continue;
    }
    Лучше неохота расписывать)
     
    santazx и White Wolf нравится это.
  5. Хитрый_Ёжик

    Хитрый_Ёжик

    Сообщения:
    281
    Симпатии:
    94
    Если для пользователя заданы настройки цветов или тега, то после его сообщения вызывается следующий форвард:
    Код:
    forward Action:CCC_OnColor(client, const String:message[], CCC_ColorType:type);
    В котором всё это дело можно без проблем проверять.

    Также, вообще так делать плохо и по хорошему бы следовало изменять тег непосредственно после совершения убийства.
     
    santazx нравится это.
  6. santazx

    santazx

    Сообщения:
    19
    Симпатии:
    0
    Всем спасибо, за идеи и как лучше сделать.
    Постигать ещё долго, надеюсь со временем смогу делать хорошие плагины. :)

    Добавлено через 5 минут
    И по плагину, вся идея была просто менять префиксы не используя базу. :)
    Хотел с базой использовать, но надобность отпала. :)
     
    Последнее редактирование: 11 апр 2015