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

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±

    Команда /gov с отчетом времени.

    Доброго дня, назрел такой вопрос, сейчас стоит антифлуд для игрока, т.е. неважно игрок какой фракции написал команду /gov откат будет только у него, так например в LSPD если 10 человек, могут все разом написать в /gov. Как сделать откат по фракции, т.е. если игрок с LSPD написал в /govб другие игроки с его фракции не могли, нужно отдельно создавать массив для каждой фракции?

     Код
    PHP код:
    CMD:gov(playeridparams[])
    {
        if(!
    player_is_authorized{playerid})
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Вы не авторизировались.");
            
        if(
    pInfo[playerid][pMute] == 1)
            return 
    MutePlayer(playerid);

        if(!
    IsACop(playerid) && pInfo[playerid][pMember] != && pInfo[playerid][pMember] != 19 && pInfo[playerid][pMember] != 17)
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Ты не можешь использовать эту команду.");

        if(
    pInfo[playerid][pRank] < 5)
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Тебе нужен 5-й и выше ранг.");

        if(
    GovChat[playerid] > && pInfo[playerid][pMember] != pInfo[playerid][pMember])
        {
            static const 
    fmt_str[] ="Для следующего сообщения осталось %d сек.";
            new 
    string[sizeof(fmt_str) - 40];
            
    format(stringsizeof stringfmt_strGovChat[playerid]);
            
    SendClientMessage(playeridCOLOR_GREYstring);
              return 
    0;
        }
        
        if(
    isnull(params))
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Использование: /gov [Текст].");
            
        switch(
    pInfo[playerid][pMember])
        {
            case 
    1SendClientMessageToAll(0x2641FEAA"|___________ Новости Департамента Полиции LS ___________|");
            case 
    2SendClientMessageToAll(0x2641FEAA"|___________ Новости Федерального Бюро Штата ___________|");
            case 
    3SendClientMessageToAll(0x2641FEAA"|___________ Новости Воинской Части Штата ___________|");
            case 
    4:    SendClientMessageToAll(0x2641FEAA"|___________ Медицинские Новости Штата ___________|");
            case 
    10SendClientMessageToAll(0x2641FEAA"|___________ Новости Департамента Полиции LV ___________|");
            case 
    17SendClientMessageToAll(0x2641FEAA"|___________ Новости Tаксопарка ___________|");
            case 
    19SendClientMessageToAll(0x2641FEAA"|___________ Новости Коллегии Адвокатов ___________|");
        }
        new 
    string[MAX_PLAYER_NAME 85];
        
    format(stringsizeof(string), "%s[%d]: %s",pInfo[playerid][pName],playeridparams);
        
    SendClientMessageToAll(COLOR_WHITEstring);
        
    GovChat[playerid] = 120;
        return 
    1;


  2. #2
    Аватар для whale
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.04.2014
    Сообщений
    74
    Репутация:
    17 ±
    Примерно так:
    PHP код:
    new
        
    gFractionGovLimit[MAX_FRACTIONS]; // MAX_FRACTIONS - количество фракций


    {
        if(
    gFractionGovLimit[pInfo[playerid][pFraction]] > 0)
        {
            
    // code ...
        
    }
        
    gFractionGovLimit[pInfo[playerid][pFraction]] = 120;


  3. Пользователь сказал cпасибо:
    Skyline (11.07.2018)
  4. #3
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    PHP код:
        if(gFractionGovLimit[pInfo[playerid][pMember]] > 0)
        {
            if(
    pInfo[playerid][pMember] == 1SendClientMessageToAll(0x2641FEAA"|___________ Новости Департамента Полиции LS ___________|");
              else if(
    pInfo[playerid][pMember] == 2SendClientMessageToAll(0x2641FEAA"|___________ Новости Федерального Бюро Штата ___________|");
        }
        
    gFractionGovLimit[pInfo[playerid][pMember]] = 120
    Примерно так?

  5. #4
    Аватар для I'm Legend
    Пользователь

    Статус
    Оффлайн
    Регистрация
    03.08.2017
    Сообщений
    15
    Репутация:
    2 ±
    Если ты хочешь делать, как написал Twixyck.

    Команда будет выглядеть следующим образом:
      Открыть/закрыть
    PHP код:
    CMD:gov(playeridparams[]) 

        if(!
    player_is_authorized{playerid}) 
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Вы не авторизировались."); 
             
        if(
    pInfo[playerid][pMute] == 1
            return 
    MutePlayer(playerid); 

        if(!
    IsACop(playerid) && pInfo[playerid][pMember] != && pInfo[playerid][pMember] != 19 && pInfo[playerid][pMember] != 17
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Ты не можешь использовать эту команду."); 

        if(
    pInfo[playerid][pRank] < 5
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Тебе нужен 5-й и выше ранг."); 
      
        if(
    gFractionGovLimit[pInfo[playerid][pMember]] > 0)
        {
            static const 
                
    fmt_str[] = "Для следующего сообщения осталось %d сек."

            new 
                
    string[sizeof(fmt_str) - 40]; 

            
    format(stringsizeof stringfmt_strgFractionGovLimit[pInfo[playerid][pMember]]); 
            
    SendClientMessage(playeridCOLOR_GREYstring);   
        }
         
        if(
    isnull(params)) 
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Использование: /gov [Текст]."); 
             
        switch(
    pInfo[playerid][pMember]) 
        { 
            case 
    1SendClientMessageToAll(0x2641FEAA"|___________ Новости Департамента Полиции LS ___________|"); 
            case 
    2SendClientMessageToAll(0x2641FEAA"|___________ Новости Федерального Бюро Штата ___________|"); 
            case 
    3SendClientMessageToAll(0x2641FEAA"|___________ Новости Воинской Части Штата ___________|"); 
            case 
    4:    SendClientMessageToAll(0x2641FEAA"|___________ Медицинские Новости Штата ___________|"); 
            case 
    10SendClientMessageToAll(0x2641FEAA"|___________ Новости Департамента Полиции LV ___________|"); 
            case 
    17SendClientMessageToAll(0x2641FEAA"|___________ Новости Tаксопарка ___________|"); 
            case 
    19SendClientMessageToAll(0x2641FEAA"|___________ Новости Коллегии Адвокатов ___________|"); 
        } 
        new 
    string[MAX_PLAYER_NAME 85]; 
        
    format(stringsizeof(string), "%s[%d]: %s",pInfo[playerid][pName],playeridparams); 
        
    SendClientMessageToAll(COLOR_WHITEstring); 
        
    gFractionGovLimit[pInfo[playerid][pMember]] = 120;
        return 
    1


    И не забудь в секундном таймере отнимать единицу.
    Последний раз редактировалось I'm Legend; 11.07.2018 в 17:14. Причина: Поправил

  6. Пользователь сказал cпасибо:
    Skyline (11.07.2018)
  7. #5
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    PHP код:
    if(gFractionGovLimit[pInfo[i][pMember]] > 0gFractionGovLimit[pInfo[i][pMember]] --; 
    Сделал, спасибо, буду проверять.

  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    А UNIX время вам на что дано? -_- Действительно, лучше ведь вкинуть дополнительное действие в таймер

    Вот
    PHP код:
    CMD:gov(playeridparams[]) 

        if(!
    player_is_authorized{playerid}) 
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Вы не авторизировались."); 
             
        if(
    pInfo[playerid][pMute] == 1
            return 
    MutePlayer(playerid); 

        static const
            
    government_messages[][] =
        {
            
    "|___________ Новости Департамента Полиции LS ___________|",
            
    "|___________ Новости Федерального Бюро Штата ___________|",
            
    "|___________ Новости Воинской Части Штата ___________|",
            
    "|___________ Медицинские Новости Штата ___________|",
            
    "|___________ Новости Департамента Полиции LV ___________|",
            
    "|___________ Новости Tаксопарка ___________|",
            
    "|___________ Новости Коллегии Адвокатов ___________|"
        
    };

        new 
    frac_idx = -1;
        switch(
    pInfo[playerid][pMember]) 
        {
            case 
    1frac_idx 0
            case 
    2frac_idx 1
            case 
    3frac_idx 2;
            case 
    4frac_idx 3;
            case 
    10frac_idx 4;
            case 
    17frac_idx 5;
            case 
    19frac_idx 6;
        }
        if(!(
    <= frac_idx sizeof(government_messages)))
        {
            
    SendClientMessage(playeridCOLOR_GREY, !"Ты не можешь использовать эту команду.");
            return 
    1;
        }

        if(
    pInfo[playerid][pRank] < 5
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Тебе нужен 5-й и выше ранг."); 

        if(
    isnull(params)) 
            return 
    SendClientMessage(playeridCOLOR_GREY, !"Использование: /gov [Текст].");

        static 
            
    flood_protection_time[sizeof(government_messages)],
            
    unix_timestamp;

        
    unix_timestamp gettime();
        if(
    flood_protection_time[frac_idx] > unix_timestamp
        { 
            static const 
    fmt_str[] ="Для следующего сообщения осталось %d сек."
            new 
    string[sizeof(fmt_str) - 10]; 
            
    format(stringsizeof stringfmt_strflood_protection_time[frac_idx]-unix_timestamp); 
            
    SendClientMessage(playeridCOLOR_GREYstring); 
            return 
    1
        }

        
    SendClientMessageToAll(0x2641FEAAgovernment_messages[frac_idx]);
        new 
    string[MAX_CHATBUBBLE_LENGTH+1]; 
        
    format(stringsizeof(string), "%s[%d]: %s",pInfo[playerid][pName], playeridparams); 
        
    SendClientMessageToAll(COLOR_WHITEstring); 
        

        
    flood_protection_time[frac_idx] = unix_timestamp+(2*60);// 2 - число минут
        
    return 1

    Только при любых правках (удалении/изменении ID фракций) не забудь в switch выставить значение frac_idx в порядке возрастания (они определяют то, к какой ячейке массивов government_messages и flood_protection_time нужно обращаться для той или иной фракции. К слову, такого велосипеда можно было бы избежать, если изначально нормально распределить фракции по ID, хотя бы расположив все правительственные фракции "рядом").
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    Skyline (11.07.2018)
  10. #7
    Аватар для Skyline
    Пользователь

    Статус
    Оффлайн
    Регистрация
    31.01.2014
    Адрес
    Россия
    Сообщений
    304
    Репутация:
    2 ±
    Спасибо за ответы!

 

 

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

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

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

Ваши права

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