Урок по створенню повідомлень у чат або на екран у 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, тільки при цьому в чаті присутнє ім'я гравця).
Вид:
Тут все те саме, що і в SPTMP, тільки немає функції playerid
Приклад використання:
{
new output[128];
format(output, sizeof(output), "(%d) %s", playerid, text);
SendPlayerMessageToAll(playerid, output);
return 0;
}
SendClientMessageToAll з відправкою дії гравця в чат всім гравцям:
Наприклад, якщо гравець обрав у меню телепортацій «Аеропорт Лос-Сантоса», то в чат відправляється:
І переносить на спеціальну координату:
GameTextForPlayer
Проста функція – виводить на екран гравцеві певний текст.
Як виглядає:
Де playerid – ID гравця
«Test» - текст вставляється сюди, завжди вставляється латинськими символами.
Деякі російські переклади погані, і я перерахую вам їх символи:
Текст вводиться капсом (окрім символа-виключення (u - ц)):
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 типів:
1 – Те ж саме, що і «0», тільки справа знизу (не в самому низу, а на 1/4 екрану).
2 – Білим кольором в середині екрану, шрифт – OldEnglishText (шрифт, яким написано слово San Andreas на обкладинці гри).
3 – Те ж саме що і «0», тільки шрифт – Tahoma (стандартний шрифт написання в MicroSoft Word).
4 – Те ж саме що і «3», тільки трохи вище.
5 – Те ж саме що і «3», тільки білим кольором.
6 – Блакитнуватим кольором трохи вище середини екрану, шрифт Pricedown.
Наступне – це той же самий текст, тільки для всіх гравців – GameTextForAll
Приклад:
Те ж саме що і GameTextForPlayer – справедливі всі його функції, окрім PlayerID – його не буде, так як цей текст буде показаний для всіх. Слідкуйте за набором тексту, вказано вище – які літери російські будуть показані на екрані.
Як зазвичай приклад використання:
Додам рух:
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).
Вид:
Де:
killerid – ID вбивці (в разі самогубства, killerid і playerid можуть зрівнятися, а іноді killerid просто не відображається)
playerid – ID вбитого
reason – причина смерті (зазвичай тут використовуються іконки зброї, але в код вони не вписуються, а використовується тільки reason), іноді можна використовувати ICON_CONNECT і ICON_DISCONNECT (Іконки приєднання та виходу)
Приклад використання:
{
SendDeathMessage(killerid, playerid, reason);
return 1;
}
Єгор - Жовтень 2012, спеціально для LibertyCity.Ru