Урок по створенню повідомлень у чат або на екран у 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 - a
6 – б
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, "OB'IEKT PEREDVYNUTYI", 5000, 1); //Написано: Об'єкт передвинут
        return 1;

ну і закінчу його рух

if (strcmp("/moveback", cmdtext, true, 10) == 0)
    {
        MoveObject(obj,0, 0, 0, 4);
        GameTextForAll("OB'IEKT POVERNUTYI NA SVOIE MISTO", 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

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