Многих интересует вопрос, как же сделать так, чтобы в чате после ника игрока писался его ID, ведь это удобнее для взаимодействия, чем заглядывать постоянно в TAB. В данной теме я расскажу о всех возможных способах.
Начнём с того, что нам необходимо профиксить функцию GetPlayerColor. Как это сделать написано в теме, посвящённой этой функции. После "починки" перейдём непосредственно к урокам.
Способ 1
В этом способе мы так отформатируем строку вывода, что сообщение будет в цвет игрока. Достоинством первого способа является экономия места в логах, а недостатком - сообщение цветом ника игрока. Впервые (на моей памяти) такое было реализовано Boss'ом на серверах GTA.ru.
Способ 2
Здесь мы будем выносить ID игрока в сообщение. Плюсы - экономия места в логах, белое сообщение, цветной ник. Минусы - ID не возле ника. Способ разработан Crone'ом в его моде nWo League.
Способ 3
Данный способ был самый продвинутый до выхода SA-MP 0.3c. Положительный аспект - белое сообщение, ID рядом с ником, цветной ник, а отрицательный - забивание логов сообщениями вида:
Способ 4
Этот способ работает только для версий SA-MP 0.3c и младше. Способ придумал я, помогал в реализации Y_Less. Достоинства: цветной ник, ID рядом с ником, белое сообщение, экономия места в логах. Недостатков пока не существует.
Способ 5
Данный способ представляет собой переделанный первый способ, но теперь мы раскрашиваем строку сообщения. Плюсы - цветной ник, ID рядом с ником, белое сообщение, экономия места в логе. Минусы - не имеются. Способ подсказал Ym[0]n.
Автор: OKStyle
Начнём с того, что нам необходимо профиксить функцию GetPlayerColor. Как это сделать написано в теме, посвящённой этой функции. После "починки" перейдём непосредственно к урокам.
Способ 1
В этом способе мы так отформатируем строку вывода, что сообщение будет в цвет игрока. Достоинством первого способа является экономия места в логах, а недостатком - сообщение цветом ника игрока. Впервые (на моей памяти) такое было реализовано Boss'ом на серверах GTA.ru.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
PHP:
public OnPlayerText(playerid,text[])
{
new PlayerName[MAX_PLAYER_NAME], string[144];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
format(string, sizeof(string), "%s(%d): %s", PlayerName, playerid, text);
SendClientMessageToAll(GetPlayerColor(playerid), string);
return 0;
}
Здесь мы будем выносить ID игрока в сообщение. Плюсы - экономия места в логах, белое сообщение, цветной ник. Минусы - ID не возле ника. Способ разработан Crone'ом в его моде nWo League.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
PHP:
public OnPlayerText(playerid,text[])
{
new PlayerName[MAX_PLAYER_NAME], string[144];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
format(string, sizeof(string), "(%d): %s", playerid, text);
SendPlayerMessageToAll(playerid, string);
return 0;
}
Данный способ был самый продвинутый до выхода SA-MP 0.3c. Положительный аспект - белое сообщение, ID рядом с ником, цветной ник, а отрицательный - забивание логов сообщениями вида:
[09:11:58] [nick] [ACF]OKStyle nick changed to [ACF]OKStyle(0)
[09:11:58] [nick] [ACF]OKStyle(0) nick changed to [ACF]OKStyle
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
PHP:
public OnPlayerText(playerid,text[])
{
new PlayerName[MAX_PLAYER_NAME], string[MAX_PLAYER_NAME + 5];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
format(string, sizeof(string), "%s(%d)", PlayerName, playerid); // форматируем ник, вставляя после него ID
SetPlayerName(playerid, string); // выставляем имя с ID
SendPlayerMessageToAll(playerid, text); // выводим сообщение
SetPlayerName(playerid, PlayerName); // возвращаем имя без ID
return 0;
}
Этот способ работает только для версий SA-MP 0.3c и младше. Способ придумал я, помогал в реализации Y_Less. Достоинства: цветной ник, ID рядом с ником, белое сообщение, экономия места в логах. Недостатков пока не существует.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
PHP:
public OnPlayerText(playerid,text[])
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName)); // получаем имя игрока
format(text, 144, "{%06x}%s(%d): {FFFFFF}%s", GetPlayerColor(playerid) >>> 8, PlayerName, playerid, text); // форматируем строку вывода в чат
SendClientMessageToAll(-1, text); // т.к. мы явно задали цвет текста, цвет в этой команде не имеет значения
return 0; // чтобы сообщение не дублировалось
}
Данный способ представляет собой переделанный первый способ, но теперь мы раскрашиваем строку сообщения. Плюсы - цветной ник, ID рядом с ником, белое сообщение, экономия места в логе. Минусы - не имеются. Способ подсказал Ym[0]n.
Чтобы видеть скрытое содержание Зарегистрируйтесь на форуме!
PHP:
public OnPlayerText(playerid, text[])
{
new PlayerName[MAX_PLAYER_NAME];
GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
format(text, 144, "%s(%d): {FFFFFF}%s", PlayerName, playerid, text);
SendClientMessageToAll(GetPlayerColor(playerid), text);
return 0;
}