Danyas
Участник
- Сообщения
- 2,173
- Реакции
- 1,072
Привет всем, решил поделиться полезной информацией для скриптеров.
Бывает такое, что нужно выводить, например количество дней, убийств, смертей, очков и прочей информации, которая имеет разное окончание слова при разном значении информации.
Не лаконично ведь смотреть на фразу: "Вы наиграли 0 день 21 часов 5 минута 39 секунда" :haha:
В многих ЯП есть функция mod (modulo), в SourcePawn она так же имеется.
К чему она? Сейчас покажу пример, который будет править окончания разной информации.
Бывает такое, что нужно выводить, например количество дней, убийств, смертей, очков и прочей информации, которая имеет разное окончание слова при разном значении информации.
Не лаконично ведь смотреть на фразу: "Вы наиграли 0 день 21 часов 5 минута 39 секунда" :haha:
В многих ЯП есть функция mod (modulo), в SourcePawn она так же имеется.
К чему она? Сейчас покажу пример, который будет править окончания разной информации.
PHP:
public OnPluginStart()
{
new String: buffer[192] = "Время, которое прошло после написания поста:";
new time = GetTime() - 1471777116;
new days = time/3600/24;
new hours = time/3600%24;
new mins = time/60%60;
new secs = time%60;
switch(days)
{
case 0: {}
case 1: FormatEx(buffer, sizeof(buffer), "%s 1 день", buffer);
case 2,3,4: FormatEx(buffer, sizeof(buffer), "%s %i дня", buffer, days);
default:
{
if(days < 21)
{
FormatEx(buffer, sizeof(buffer), "%s %i дней", buffer, days);
}
else
{
switch(days % 10)
{
case 1: FormatEx(buffer, sizeof(buffer), "%s %i день", buffer, days);
case 2,3,4: FormatEx(buffer, sizeof(buffer), "%s %i дня", buffer, days);
default: FormatEx(buffer, sizeof(buffer), "%s %i дней", buffer, days);
}
}
}
}
switch(hours)
{
case 0: {}
case 1: FormatEx(buffer, sizeof(buffer), "%s 1 час", buffer);
case 2,3,4: FormatEx(buffer, sizeof(buffer), "%s %i часа", buffer, hours);
default:
{
if(hours < 21)
{
FormatEx(buffer, sizeof(buffer), "%s %i часов", buffer, hours);
}
else
{
switch(hours % 10)
{
case 1: FormatEx(buffer, sizeof(buffer), "%s %i час", buffer, hours);
case 2,3,4: FormatEx(buffer, sizeof(buffer), "%s %i часа", buffer, hours);
default: FormatEx(buffer, sizeof(buffer), "%s %i часов", buffer, hours);
}
}
}
}
switch(mins)
{
case 0: {}
case 1: FormatEx(buffer, sizeof(buffer), "%s 1 минута", buffer);
case 2,3,4: FormatEx(buffer, sizeof(buffer), "%s %i минуты", buffer, mins);
default:
{
if(mins < 21)
{
FormatEx(buffer, sizeof(buffer), "%s %i минут", buffer, mins);
}
else
{
switch(mins % 10)
{
case 1: FormatEx(buffer, sizeof(buffer), "%s %i минута", buffer, mins);
case 2,3,4: FormatEx(buffer, sizeof(buffer), "%s %i минуты", buffer, mins);
default: FormatEx(buffer, sizeof(buffer), "%s %i минут", buffer, mins);
}
}
}
}
switch(secs)
{
case 0: {}
case 1: FormatEx(buffer, sizeof(buffer), "%s 1 секунда", buffer);
case 2,3,4: FormatEx(buffer, sizeof(buffer), "%s %i секунды", buffer, secs);
default:
{
if(secs < 21)
{
FormatEx(buffer, sizeof(buffer), "%s %i секунд", buffer, secs);
}
else
{
switch(secs % 10)
{
case 1: FormatEx(buffer, sizeof(buffer), "%s %i секунда", buffer, secs);
case 2,3,4: FormatEx(buffer, sizeof(buffer), "%s %i секунды", buffer, secs);
default: FormatEx(buffer, sizeof(buffer), "%s %i секунд", buffer, secs);
}
}
}
}
PrintToServer(buffer);
}
Вложения
Последнее редактирование: