Ru:Format Class Functions (SourceMod Scripting)

From AlliedModders Wiki
Revision as of 10:28, 28 December 2008 by Frenzzy (talk | contribs) (Испрльзование)
Jump to: navigation, search

Введение

Формат классов функций, аргументов переменной - функции в SourceMod которые позволяют Вам форматировать строки. Простой пример этой Format() функции, выглядит следующим образом:

decl String:buffer[512];
Format(buffer, sizeof(buffer), "Ваше имя: %s", userName);

Если userName содержит "Frenzzy", содержимое buffer будет: "Ваше имя: Frenzzy". Прототип этих функций почти всегда содержит следующие параметры:

const String:fmt[], {Handle,Float,_}:...

Например, обратите внимание на эти два выражения:

native Format(String:buffer[], maxlength, const String:fmt[], {Handle,Float,_}:...);
native PrintToClient(client, String:fmt[], {Handle,Float,_}:...);

Таким образом, PrintToClient является формат-классовой функцией. Она может быть использована точно так же, как было показано ранее:

PrintToClient(client, "Ваше имя: %s", userName);

Спецификаторы Формата

Спецификаторы Формата имеют код, который позволяет указать, какие типы данных будут отображаться. Наиболее распространенными спецификаторами являются:

  • Числовые
    • d или i: Целое число как десятичные
    • b: Бинарные символы в значении
    • f: Числа с плавающей точкой
    • x or X: Шестнадцатеричное представление бинарных значений (применение заглавных букв влияет на шестнадцатеричный регистр букв)
  • Символ(ы)
    • s: Строка
    • t или T: Переводы фраз (см. в Inline Translations)
    • c: Вывод одного символа (совместимо с UTF-8)
  • Специальные
    • L: Требуется индекс клиента; расширяется до 1<2><3><>, где 1 - имя игрока, 2 - userid игрока, и 3 - Steam ID игрока. Если клиент имеет индекс 0, строка будет: Console<0><Console><Console>
    • N: Требуется индекс клиента; расширяется до строки, содержащей имя игрока. Если клиент имеет индекс 0, строка будет: Console

Испрльзование

Спецификаторы формата обозначаются символом '%s'. Например, чтобы отобразилось число с плавающей точкой, десятичное число и строка, Вы можете использовать этот код:

new Float:fNum = 5.0;
new iNum = 5
new String:str[] = "5"
 
PrintToClient(client, "Десятичное число: %d Число с плавающей точкой: %f Строка: %s", iNum, fNum, str);

Примечание: Использование неправильных типов данных спецификаторов может быть очень опасно. Всегда убедитесь, что выводится правильный тип. Например, указание строки и передача числа, может привести к падению сервера.

Расширенное форматирование

Format specifiers have an extended syntax for controlling various aspects of how data is printed. The full syntax is: %[flags][width][.precision]specifier

Each bracketed section is an optional extension. Explanations of supported SourceMod format extensions:

  • %: Obviously, this is always required.
  • flags:
    • -: Left-justify (right-justify is set by default)
    • 0: Pads with 0s instead of spaces when needed (see width below).
  • width: Minimum number of characters to be printed. If the value to be printed is shorter than this number, the result is padded with blank spaces. The value is not truncated even if the result is larger.
  • precision:
    • For integers: specifies the minimum number of digits to print (or pad with spaces/zeroes if below the minimum).
    • For strings: specifies the maximum number of characters to print.
    • For floats: specifies the number of digits to be printed after the decimal point.
    • For all other types: no effect.
  • specifier: character specifying the data type (always required).

For more information, see printf from the C Standard Library, although not all modes are supported from C.