Профиль
Информация Управление
Здравствуйте, уважаемый посетитель. К сожалению, Вы не были распознаны форумом, как зарегистрированный пользователь. Для полноценного использования возможностей нашего форума вам необходимо зарегистрироваться. Если вы уже зарегистрированы на форуме, то вам необходимо пройти авторизацию, используя Ваш логин и пароль. Зарегистрированные пользователи получают возможность возможность общения на нашем форуме.


[Новые сообщения · Правила форума · RSS ]
  • Страница 1 из 1
  • 1
[Tutorial] ID игрока после ника в чате
OKStyle Дата: Четверг, 03.03.2011, 08:56 | Сообщение # 1
Архивариус
Группа: Администраторы
Зарегистрирован: 19.02.2011
Сообщений: 125
Репутация: 8
Статус: Offline
Многих интересует вопрос, как же сделать так, чтобы в чате после ника игрока писался его ID, ведь это удобнее для взаимодействия, чем заглядывать постоянно в TAB. В данной теме я расскажу о всех возможных способах.

Начнём с того, что нам необходимо профиксить функцию GetPlayerColor. Как это сделать написано в теме, посвящённой этой функции. После "починки" перейдём непосредственно к урокам.

Способ 1

В этом способе мы так отформатируем строку вывода, что сообщение будет в цвет игрока. Достоинством первого способа является экономия места в логах, а недостатком - сообщение цветом ника игрока. Впервые (на моей памяти) такое было реализовано Boss'ом на серверах GTA.ru.

Code
public OnPlayerText(playerid,text[])
{
        new
             PlayerName[MAX_PLAYER_NAME],
             string[128];
        GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
        format(string,sizeof(string),"%s(%d): %s",PlayerName,playerid,text);
        SendClientMessageToAll(GetPlayerColor(playerid),string);
        return 0;
}

Способ 2

Здесь мы будем выносить ID игрока в сообщение. Плюсы - экономия места в логах, белое сообщение, цветной ник. Минусы - ID не возле ника. Способ разработан Crone'ом в его моде nWo League.

Code
public OnPlayerText(playerid,text[])
{
        new
             PlayerName[MAX_PLAYER_NAME],
             string[128];
        GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
        format(string,sizeof(string),"(%d): %s",playerid,text);
        SendPlayerMessageToAll(playerid,string);
        return 0;
}

Способ 3

Данный способ был самый продвинутый до выхода SA-MP 0.3c. Положительный аспект - белое сообщение, ID рядом с ником, цветной ник, а отрицательный - забивание логов сообщениями вида:

Quote
[09:11:58] [nick] [ACF]OKStyle nick changed to [ACF]OKStyle(0)
[09:11:58] [nick] [ACF]OKStyle(0) nick changed to [ACF]OKStyle

Code
public OnPlayerText(playerid,text[])
{
        new
             PlayerName[MAX_PLAYER_NAME],
             string[30];
        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;
}

Способ 4

Этот способ работает только для версий SA-MP 0.3c и младше. Способ придумал я, помогал в реализации Y_Less. Достоинства: цветной ник, ID рядом с ником, белое сообщение, экономия места в логах. Недостатков пока не существует.

Code
public OnPlayerText(playerid,text[])
{
        new
             PlayerName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, PlayerName, sizeof(PlayerName)); // получаем имя игрока
        format(text, 1024, "{%06x}%s(%d): {FFFFFF}%s", GetPlayerColor(playerid) >>> 8, PlayerName, playerid, text); // форматируем строку вывода в чат
        SendClientMessageToAll(0x00000000, text); // т.к. мы явно задали цвет текста, цвет в этой команде не имеет значения
// остальной код паблика
        return 0; // чтобы сообщение не дублировалось
}

Способ 5

Данный способ представляет собой переделанный первый способ, но теперь мы раскрашиваем строку сообщения. Плюсы - цветной ник, ID рядом с ником, белое сообщение, экономия места в логе. Минусы - не имеются. Способ подсказал Ym[0]n.

Code
public OnPlayerText(playerid, text[])
{
    new
       PlayerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid, PlayerName, sizeof(PlayerName));
    format(text, 1024, "%s(%d): {FFFFFF}%s", PlayerName, playerid, text);
    SendClientMessageToAll(GetPlayerColor(playerid), text);
    return 0;  
}
Прикрепления: 8872480.png (17.3 Kb) · 1518684.png (28.3 Kb) · 6631361.png (67.1 Kb) · 0602598.png (16.0 Kb) · 6960397.png (20.1 Kb)


 
  • Страница 1 из 1
  • 1
Поиск:

Сайт управляется системой uCoz