Русский

Урок по созданию сообщений в чат или на экран в SA:MP

28 октября 2012
TheDuke

Сегодня мы изучим:

SendClientMessage, SendClientMessageToAll., SendPlayerMessageToPlayer, SendPlayerMessageToAll, GameTextForPlayer, GameTextForAll и SendDeathMessage

SendClientMessage отправляет сообщение одному из игроков в чат (например ввёл команду, и текст отправился только тебе)
SendClientMessageToAll отправляет сообщение в чат так, что все его могут видеть.

Сейчас объясню, что где используется:

SClM (SendClientMessage), обзову его так – у меня эта функция стоит в OnPlayerConnect – расставляется большое количество пропуска (очищает чат) и пишется текст (какой – не важно), так же использую при командах, или в ПМках (личных сообщениях).

Вид:

SendClientMessage(playerid, color,"Текст");

Смысл данной функции прост:

playerid – узнаёт ID игрока.
color – вписываем цвет (можно так же обратится к define’ам, в прошлом уроке я рассказывал про установку цвета, приводя пример COLOR_RED).
“Текст” – думаю понятно, что в кавычки можно вставить текст.

SClMTA (SendClientMessageToAll) – отправление текстового сообщения в чат всем игрокам. Я использую эту функцию только для показа действия (например: «%s перешел в аэропорт Лос-Сантоса», где %s обычно обозначается как playername, или что-то вроде того) и ещё для отправки в чат автоматических сообщений (при этом привязываю таймер, и как говорили мне – таймер нагружает сервер).

Вид:

SendClientMessageToAll(color,"Текст");

Где как вы уже могли догадаться – color – цвет, а «Текст» - текст, выводимый в чат всем игрокам. Как можно заметить, playerid здесь нет, т.к. это сообщение выходит не одному конкретному игроку, а всем.

Примеры использования каждой функции

SendClientMessage с движением объекта:

Создам объект с именем «Obj» и добавлю движение:

if (strcmp("/move", cmdtext, true, 10) == 0)
    {
        MoveObject(obj,0, 0, 9, 4);
        SendClientMessage(playerid,COLOR_RED,"Объект передвинут");
        return 1;

И закончу его движение:

if (strcmp("/moveback", cmdtext, true, 10) == 0)
    {
        MoveObject(obj,0, 0, 0, 4);
        SendClientMessage(playerid,COLOR_RED,"Объект передвинут обратно");
        return 1;
}

SPMTP (SendPlayerMessageToPlayer) – отправление текстового сообщения в чат определённому игроку от другого игрока.

Вид:

SendPlayerMessageToPlayer(playerid, senderid, «текст»);

Здесь:

Playerid – указан выше – ID (идентификатор) игрока.
Senderid – ID игрока-отправителя.
«Текст» – думаю вам уже понятно, что здесь можно что-то написать.

Пример использования:

Напишу длиннющую команду команду:

    cmd = strtok(cmdtext, idx);
    if(strcmp("/pm", cmd, true) == 0)
    {
        tmp = strtok(cmdtext,idx);

        if(!strlen(tmp) || strlen(tmp) > 5) {
        SendClientMessage(playerid,COLOR_RED, «/pm pID текст»);    
        return 1;
        }

        new id = strval(tmp);
        gMessage = strrest(cmdtext,idx);

        if(!strlen(gMessage)) {
            SendClientMessage(playerid,COLOR_RED, «/pm pID текст»);    
            return 1;
        }

        if(!IsPlayerConnected(id)) {
            SendClientMessage(playerid,COLOR_RED, «Такого игрока нет на сервере»);
            return 1;
        }

        if(playerid != id) {
            GetPlayerName(id,iName,sizeof(iName));
            GetPlayerName(playerid,pName,sizeof(pName));
            format(Message,sizeof(Message),">> %s(%d): %s",iName,id,gMessage);
            [b]SendPlayerMessageToPlayer(playerid, senderid,Message);[/b]
            format(Message,sizeof(Message),"** %s(%d): %s",pName,playerid,gMessage);
            [b]SendPlayerMessageToPlayer(playerid, senderid,Message);[/b]
            PlayerPlaySound(id,1085,0.0,0.0,0.0);
        }
        else {
            SendClientMessage(playerid,COLOR_RED,"Писать ПМ себе – это неприлично");
        }
        return 1;
    }

SPMTA (SendPlayerMessageToAll) – отправление текстового сообщения в общий чат, отправив имя игрока и сообщение (тоже самое, что и sendclientmessagetoall, только при этом в чате присутствует ник игрока).

Вид:

SendPlayerMessageToAll(senderid, «текст»);
Здесь всё тоже самое, что и в SPTMP, только нет функции playerid

Пример использования:

в public OnPlayerText(playerid, text[]) записываю:
{
    new output[128];

    format(output, sizeof(output), "(%d) %s", playerid, text);
    SendPlayerMessageToAll(playerid, output);
    return 0;
}

SendClientMessageToAll с отправлением действия игрока в чат всем игрокам:

Например, если игрок выбрал в меню телепортов «Аэропорт Лос-Сантоса», то в чат отправляется:

SendClientMessageToAll(COLOR_RED, "%s зашел в Аэропорт Лос-Сантоса.", PlayerName);

И переносит на специальную координату:

SetPlayerPos(playerid,pX,pY,pZ);

GameTextForPlayer

Простенькая функция – выводит на экран игроку определённый текст.

Как выглядит:

GameTextForPlayer(playerid, "test", 5000, 3);

Где playerid – ID игрока
«Test» - текст вставляется сюда, всегда вставляется латинскими символами.

Некоторые русские переводы плохие, и я перечислю вам их символы:

Текст вводится капсом (кроме символа-исключения (u - ц)):

A - a6 – бB - вF - гD - дE - e, эG - ж3 - зN - иK - кL - лM - мH - нO - оZ - пP - рC - сT - тY - уQ - фX - хu - ц4 - чW - ш, щJ - ь, ъS - ыU - юR - я

Эти символы я взял из собственного опыта и знания.

5000 – это время
3 – тип

Всего я знаю 7 типов:

0 – Тёмно оранжевым цветом в середине экрана, шрифт – Pricedown (то, чем написано Grand Theft Auto на обложке игр серии GTA).1 – Тоже самое, что и «0», только справа снизу (не в самом низу, а на 1/4 экрана).2 – Белым цветом в середине экрана, шрифт – OldEnglishText (шрифт, которым написано слово San Andreas на обложке игры).3 – Тоже самое что и «0», только шрифт – Tahoma (стандартный шрифт написания в MicroSoft Word).4 – Тоже самое что и «3», только чуть-чуть выше.5 – Тоже самое что и «3», только белым цветом.6 – Голубоватым цветом чуть выше середины экрана, шрифт Pricedown.

Следующее – это тот же самый текст, только для всех игроков – GameTextForAll

Пример:

GameTextForAll("test", 5000, 3 );

Тоже самое что и GameTextForPlayer – справедливы все его функции, кроме PlayerID – его не будет, так как этот текст будет показан для всех. Следите за набором текста, указано выше – какие буквы русские будут показаны на экране.

Как обычно пример использования:

Создам объект с именем «Obj»

Добавлю движение:

if (strcmp("/move", cmdtext, true, 10) == 0)
    {
        MoveObject(obj,0, 0, 9, 4);
        GameTextForPlayer(playerid, "O6JEKT ZEPEDBNHYT", 5000, 1); //Написано: Объект передвинут
        return 1;

ну и закончу его движение

if (strcmp("/moveback", cmdtext, true, 10) == 0)
    {
        MoveObject(obj,0, 0, 0, 4);
        GameTextForAll("O6JEKT BEPHYLCR HA CBOE MECTO", 5000, 3 ); //Написано: Объект вернулся на своё место
        return 1;
}

Ну и в конце урока SendDeathMessage – отправляет сообщение о смерти игрока, отображенное под худом (HUD). Я обычно использую эту функцию в public OnPlayerDeath(playerid, killerid, reason).

Вид:

SendDeathMessage(killerid,playerid,reason);

Где:

killerid – ID убийцы (в случае суицида, killerid и playerid могут сравняться, а иногда killerid просто не высвечивается)
playerid – ID убитого
reason – причина смерти (обычно тут используются иконки оружия, но в код они не вписываются, а используется только reason), иногда можно использовать ICON_CONNECT и ICON_DISCONNECT (Иконки присоединения и выхода)

Пример использования:

в public OnPlayerDeath(playerid, killerid, reason) записываю:{    SendDeathMessage(killerid, playerid, reason);    return 1;}

Егор - Октябрь 2012, специально для LibertyCity.Ru
Рейтинг: 5 (1 голосов)

Рекомендуемые файлы