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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±

    Правильное окончание слов в зависимости от числа

    Приветствую! Может есть у кого-нибудь мануал или разбор вопроса, указанного в названии темы?

    Если не совсем ясна суть вопроса, то поясню: предположим, что имеется команда /playerscount, которая показывает общее количество игроков на сервере в данный момент. При использовании команды показывает сообщение типа "На сервере %i игрок(???)", и хотелось бы сделать так, чтобы писало окончание в зависимости от его количества (1 - игрок; 2 - игрока; 7 - игроков).

    Заранее благодарен за помощь в решении данного вопроса

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

    Статус
    Оффлайн
    Регистрация
    19.01.2020
    Сообщений
    69
    Репутация:
    8 ±
    PHP код:

    stock GetPlayersCountWord
    (count, const dest[], size sizeof dest)
    {
         if(
    size 8)
             return -
    1;

         switch(
    count)
         {
              case 
    1strcat(dest"игрок");
              case 
    2..4strcat(dest"игрока");
              default: 
    strcat(dest"игроков");
         }

         return 
    1;
    }

    cmd:playerscount(playerid)
    {
        new 
    fmt_str[] = "На сервере %d %s",
                
    result_str[((sizeof fmt_str) + ((- 4) + (- 7)))],
                
    dest[8];

        
    GetPlayersCountWord(переменная с кол-вом игрокомdest);

        
    format(result_strsizeof result_strfmt_strдумаю понятноdest);
        return 
    SendClientMessage(playeridresult_str);

    Последний раз редактировалось Shaolinka; 01.09.2021 в 14:15.

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от Shaolinka Посмотреть сообщение
    PHP код:

    stock GetPlayersCountWord
    (count, const dest[], size sizeof dest)
    {
         if(
    size 8)
             return -
    1;

         switch(
    count)
         {
              case 
    1strcat(dest"игрок");
              case 
    2..4strcat(dest"игрока");
              default: 
    strcat(dest"игроков");
         }

         return 
    1;
    }

    cmd:playerscount(playerid)
    {
        new 
    fmt_str[] = "На сервере %d %s",
                
    result_str[((sizeof fmt_str) + ((- 1) + (- 7)))],
                
    dest[8];

        
    GetPlayersCountWord(переменная с кол-вом игрокомdest);

        
    format(result_strsizeof result_strfmt_strдумаю понятноdest);
        return 
    SendClientMessage(playeridresult_str);

    Это решает мой вопрос, но хотелось бы увидеть общую функцию, которая будет вызываться в различных частях мода (количество игроков, репортов и т.п.).

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

    Статус
    Оффлайн
    Регистрация
    19.01.2020
    Сообщений
    69
    Репутация:
    8 ±
    Можешь сделать на основе моей, заменив слова, в чём проблема?

    UPD: Ну либо вот:
    PHP код:
    stock GetWord(count, const words[][], const dest[])
    {
         switch(
    count)
         {
              case 
    1strcat(destwords[0]);
              case 
    2..4strcat(destwords[1]);
              default: 
    strcat(destwords[2]);
         }

         return 
    1;
    }

    new 
    words[][] = {"репорт""репорта""репортов"}, 
             
    dest[9];

    GetWord(5wordsdest);
    printf("%d %s"5dest); 
    Последний раз редактировалось Shaolinka; 31.08.2021 в 23:31.

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

    Статус
    Оффлайн
    Регистрация
    31.03.2016
    Сообщений
    257
    Репутация:
    3 ±
    Цитата Сообщение от Shaolinka Посмотреть сообщение
    Можешь сделать на основе моей, заменив слова, в чём проблема?
    Да я не спорю, просто мне нужна функция, в которой указываются окончания, допустим TextEnd(форматируемый текст, желаемые окончания (несколько))

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

    Статус
    Оффлайн
    Регистрация
    19.01.2020
    Сообщений
    69
    Репутация:
    8 ±
    Цитата Сообщение от PawnoNoob Посмотреть сообщение
    Да я не спорю, просто мне нужна функция, в которой указываются окончания, допустим TextEnd(форматируемый текст, желаемые окончания (несколько))
    Выше написал, оно?

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

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±

  8. 5 пользователя(ей) сказали cпасибо:
    Nexius_Tailer (01.09.2021) oukibt (01.09.2021) PawnoNoob (02.09.2021) Shaolinka (10.09.2021) whale (02.09.2021)
  9. #8
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Shaolinka Посмотреть сообщение
    Можешь сделать на основе моей, заменив слова, в чём проблема?

    UPD: Ну либо вот:
    PHP код:
    stock GetWord(count, const words[][], const dest[])
    {
         switch(
    count)
         {
              case 
    1strcat(destwords[0]);
              case 
    2..4strcat(destwords[1]);
              default: 
    strcat(destwords[2]);
         }

         return 
    1;
    }

    new 
    words[][] = {"репорт""репорта""репортов"}, 
             
    dest[9];

    GetWord(5wordsdest);
    printf("%d %s"5dest); 
    И в итоге получаем "21 репортов", "22 репортов" и т.д. с любыми числами, где есть более двух десятков + наши единицы-четверки, которые также склоняются.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  10. 2 пользователя(ей) сказали cпасибо:
    PawnoNoob (02.09.2021) Shaolinka (10.09.2021)
  11. #9
    Аватар для LINKINPARK
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.01.2014
    Сообщений
    27
    Репутация:
    10 ±
    PHP код:
    #define    GetTrueEnd(%1,%2,%3,%4)\
        
    ((%1)%(10)==1&&(%1)%(100)!=11?(%2):(%1)%(10)>=2&&(%1)%(10)<=4&&((%1)%(100)<10||(%1)%(100)>=20)?(%3):(%4)) 
    Внимание: 1-ым параметром ф-и ОБЯЗАТЕЛЬНО должна быть переменная/константа!
    PHP код:
    format(stringsizeof(string), "Сейчас на сервере игра%s %d человек%s!"GetTrueEnd(all_players,"ет","ют","ют"), all_playersGetTrueEnd(all_players,"","а","")); 
    и получаем:

    Сейчас на сервере играют 0 человек!
    Сейчас на сервере играет 1 человек!
    Сейчас на сервере играют 2 человека!
    Сейчас на сервере играют 5 человек!

    Автор функции: -Stranger-
    Правильное описание проделанной работы.
      Открыть/закрыть
    Доброго времени суток! Вот что было проделано:
    01. Система красивого интро при коннекте на сервер
    02. Система регистрации аккаунта
    03. Система автошколы
    04. Система личных сообщений
    05. Система бизнесов
    06. Система складов
    07. Система магазин 24/7
    08. Система домов
    09. Система админки 10уровней
    10. Система PayDay
    11. Система сообщений
    12. Система гонок
    13. Система фракций
    14. Система Складов
    15. Система телефона
    16. Система рюкзака
    17. Система пау
    18. Система пиу
    19. Система бах-бах
    20. Система бдыщ

  12. 2 пользователя(ей) сказали cпасибо:
    oukibt (03.09.2021) PawnoNoob (06.09.2021)
 

 

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

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

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

Ваши права

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