Урок по созданию сообщений в чат или на экран в SA:MP
Сегодня мы изучим:
SendClientMessage, SendClientMessageToAll., SendPlayerMessageToPlayer, SendPlayerMessageToAll, GameTextForPlayer, GameTextForAll и SendDeathMessage
SendClientMessage отправляет сообщение одному из игроков в чат (например ввёл команду, и текст отправился только тебе)
SendClientMessageToAll отправляет сообщение в чат так, что все его могут видеть.
Сейчас объясню, что где используется:
SClM (SendClientMessage), обзову его так – у меня эта функция стоит в OnPlayerConnect – расставляется большое количество пропуска (очищает чат) и пишется текст (какой – не важно), так же использую при командах, или в ПМках (личных сообщениях).
Вид:
Смысл данной функции прост:
playerid – узнаёт ID игрока.
color – вписываем цвет (можно так же обратится к define’ам, в прошлом уроке я рассказывал про установку цвета, приводя пример COLOR_RED).
“Текст” – думаю понятно, что в кавычки можно вставить текст.
SClMTA (SendClientMessageToAll) – отправление текстового сообщения в чат всем игрокам. Я использую эту функцию только для показа действия (например: «%s перешел в аэропорт Лос-Сантоса», где %s обычно обозначается как playername, или что-то вроде того) и ещё для отправки в чат автоматических сообщений (при этом привязываю таймер, и как говорили мне – таймер нагружает сервер).
Вид:
Где как вы уже могли догадаться – color – цвет, а «Текст» - текст, выводимый в чат всем игрокам. Как можно заметить, playerid здесь нет, т.к. это сообщение выходит не одному конкретному игроку, а всем.
Примеры использования каждой функции
SendClientMessage с движением объекта:
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) – отправление текстового сообщения в чат определённому игроку от другого игрока.
Вид:
Здесь:
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, только при этом в чате присутствует ник игрока).
Вид:
Пример использования:
{
new output[128];
format(output, sizeof(output), "(%d) %s", playerid, text);
SendPlayerMessageToAll(playerid, output);
return 0;
}
SendClientMessageToAll с отправлением действия игрока в чат всем игрокам:
Например, если игрок выбрал в меню телепортов «Аэропорт Лос-Сантоса», то в чат отправляется:
И переносит на специальную координату:
GameTextForPlayer
Простенькая функция – выводит на экран игроку определённый текст.
Как выглядит:
Где playerid – ID игрока
«Test» - текст вставляется сюда, всегда вставляется латинскими символами.
Некоторые русские переводы плохие, и я перечислю вам их символы:
Текст вводится капсом (кроме символа-исключения (u - ц)):
Эти символы я взял из собственного опыта и знания.
5000 – это время
3 – тип
Всего я знаю 7 типов:
Следующее – это тот же самый текст, только для всех игроков – GameTextForAll
Пример:
Тоже самое что и GameTextForPlayer – справедливы все его функции, кроме PlayerID – его не будет, так как этот текст будет показан для всех. Следите за набором текста, указано выше – какие буквы русские будут показаны на экране.
Как обычно пример использования:
Добавлю движение:
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).
Вид:
Где:
killerid – ID убийцы (в случае суицида, killerid и playerid могут сравняться, а иногда killerid просто не высвечивается)
playerid – ID убитого
reason – причина смерти (обычно тут используются иконки оружия, но в код они не вписываются, а используется только reason), иногда можно использовать ICON_CONNECT и ICON_DISCONNECT (Иконки присоединения и выхода)
Пример использования: