Volchenok
Ученик
Одной из самых распространённых задач в программировании является вывод данных для пользователей в текстовом виде. При этом вместе с текстом приходится выводить значения каких-либо переменных.
Для подобных задач можно использовать функцию printf, однако в SA:MP от неё не будет никакого толку: printf выводит текст только в консоль сервера, пользователи (т.е. игроки) этот текст не увидят.
Для вставки в текст значений переменных (форматирования) в SA:MP есть функция format:
Принцип работы функции format схож с принципом работы printf (см. урок "
С форматированием разобрались, но как показывать отформатированный текст игрокам?
Для показа сообщений игрокам разработчики SA:MP сделали функции SendClientMessage и SendClientMessageToAll.
Чаще всего цвет записывают в форме
Для удобного выбора цвета можно использовать инструмент "Подбор цвета" в программе SimplePawn.
Теперь перейдём к практике.
Сделаем простую команду /stats, в которой выведем игроку его ID, имя и кол-во игровых очков:
Разберём некоторые детали:
Теперь посмотрим на вышеприведённый код ещё раз, многие вещи можно упростить:
Для подобных задач можно использовать функцию printf, однако в SA:MP от неё не будет никакого толку: printf выводит текст только в консоль сервера, пользователи (т.е. игроки) этот текст не увидят.
Для вставки в текст значений переменных (форматирования) в SA:MP есть функция format:
PHP:
format(<строковая переменная>, <размер>, <форматная строка>, <список>)
- <строковая переменная> - переменная, в которую будет записан отформатированный текст
- <размер> - размер строковой переменный (нужен функции, чтобы предотвратить случайный выход за пределы строковой переменной), желательно указывать в виде sizeof(<строковая переменная>)
- <форматная строка> - строка для вставки значений переменных
- <список> - значения, которые нужно вставить в форматный текст
Принцип работы функции format схож с принципом работы printf (см. урок "
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
"), однако format не выводит отформатированный текст в консоль, а сохраняет его в строковой переменной. С форматированием разобрались, но как показывать отформатированный текст игрокам?
Для показа сообщений игрокам разработчики SA:MP сделали функции SendClientMessage и SendClientMessageToAll.
PHP:
// отправка сообщения указанному игроку
SendClientMessage(<id игрока>, <цвет>, <строка>)
// отправка сообщения всем игрокам
SendClientMessageToAll(<цвет>, <строка>)
- <id игрока> - номер игрока, которому требуется показать сообщение
- <цвет> - число (обычно в шестнадцатеричном представлении), в котором закодирован цвет текста сообщения
- <строка> - текст сообщения, который будет показан игроку
Чаще всего цвет записывают в форме
PHP:
0xAARRGGBB
- A (alpha) - степень прозрачности (от 0 до FF, чем меньше - тем прозрачнее)
- R (red) - оттенок красного (от 0 до FF)
- G (green) - оттенок зелёного
- B (blue) - оттенок синего
Для удобного выбора цвета можно использовать инструмент "Подбор цвета" в программе SimplePawn.
Теперь перейдём к практике.
Сделаем простую команду /stats, в которой выведем игроку его ID, имя и кол-во игровых очков:
PHP:
CMD:stats(playerid, params[])
{
// строковая переменная для хранения имени игрока, длиной в
// MAX_PLAYER_NAME (константа из a_samp.inc, обозначающая макс.
// длину имени игрока) + 1 ячейка под завершающий нуль-символ
new playername[MAX_PLAYER_NAME+1];
// получаем кол-во игровых очков с помощью функции GetPlayerScore
new score = GetPlayerScore(playerid);
// строка для форматирования сообщения
new string[128];
// получить имя игрока
GetPlayerName(playerid, playername, sizeof(playername));
// форматирование текста сообщения
format( string, sizeof(string), "ID: %d, имя: %s, очки: %d",
playerid, playername, score);
// вывод сообщения игроку
SendClientMessage(playerid, 0xFFFFFFFF, string);
// завершение работы команды
return 1;
}
- Количество игровых очков мы узнаём с помощью функции GetPlayerScore, которая имеет следующий синтаксис:
PHP:
GetPlayerScore(<id игрока>)
- Имя игрока получаем с помощью функции GetPlayerName:
PHP:
GetPlayerName(<id игрока>, <строковая переменная>, <размер>)
- Число 0xFFFFFFFF означает белый цвет (alpha=255 (FF), R=255, G=255, B=255).
Теперь посмотрим на вышеприведённый код ещё раз, многие вещи можно упростить:
- Вместо playername можно получать имя игрока в строковую переменную string, после чего строка может участвовать в форматировании (format) самой себя.
- Использовать переменную score необязательно, вместо этого можно подставить вызов функции GetPlayerScore напрямую в format.
