shape1
shape2
shape3
shape4
shape7
shape8

Отправка длинной (>128 символов) строки в чат.

SHOROOP

Освоившийся
Пользователь
30.01.2014
58
56
0
32
Скриптер
Доброго времени суток.

Для собственных нужд необходима была отправка в чат сообщений длиной более 128 символов, без обрыва строки на середине и с корректным переносом. Имеющиеся реализации не устроили - перенос был оформлен не совсем корректно, да и выглядеть будет некошерно.
Реализовал собственное решение, полностью совместимое с синтаксисом стандартных SendClientMessage/SendClientMessageToAll.
 

forward SendClientMessageEx (playerid, color, const message[]);
forward SendClientMessageToAllEx (color, const message[]);

public SendClientMessageEx (playerid, color, const message[])
{
new length = strlen(message);
new outstr[128];
new trim;
if (length > 127)
{
for (new i = 127; i>=0; i--)
{
trim = i;
if (message == ' ') break;
}
if (trim < 64) trim = 127;
strmid (outstr, message, 0, trim, 128);
SendClientMessage (playerid, color, outstr);
strmid (outstr, message, trim, length, 128);
SendClientMessage (playerid, color, outstr);
}
else SendClientMessage (playerid, color, message);
return 1;
}

public SendClientMessageToAllEx (color, const message[])
{
new length = strlen(message);
new outstr[128];
new trim;
if (length > 127)
{
for (new i = 127; i>=0; i--)
{
trim = i;
if (message == ' ') break;
}
if (trim < 64) trim = 127;
strmid (outstr, message, 0, trim, 128);
SendClientMessageToAll (color, outstr);
strmid (outstr, message, trim, length, 128);
SendClientMessageToAll (color, outstr);
}
else SendClientMessageToAll (color, message);
return 1;
}
Использовать - точно так же, как и SendClientMessage/SendClientMessageToAll. Синтаксис полностью совместим.

Вопросы, замечания и пожелания принимаются в этой теме.

 
Последнее редактирование модератором:
A

Amfy

Гость
Гость
Так ведь максимальная длинна символов 144, а не 128.

 

SHOROOP

Освоившийся
Пользователь
30.01.2014
58
56
0
32
Скриптер
Так ведь максимальная длинна символов 144, а не 128.
В чат из них выводится только 128, я проверил вчера. Во входной строке часть зарезервирована под спецсимволы, видимо.