stock SendInfoAllMessage(const text[])
{
static string[1024], chatacc;
for(new i = 0; i < MAX_LINES_CHAT; i++) // Пробегаемся во всем строчкам чата.
{
if (!InfoChatLine[i][0]) // Проверяем хотя бы одну пустую строку.
{
strmid(InfoChatLine[i], text, 0, MAX_STRING); // Записываем сообщение в пустую строку.
chatacc = true; // Даем понять, что свободные строчки есть и сообщение записано.
break; // Прекращаем цикл
}
else chatacc = false; // Если цикл закончился и нет пустых строк, сообщаем от этом.
}
if (!chatacc) // Если все строки заполнены
{
for(new i = 0; i < MAX_LINES_CHAT; i++) // Пробегаемся по всем строчкам
{
if (i < 13)
{
strmid(InfoChatLine[i], InfoChatLine[i+1], 0, MAX_STRING); // Поднимаем чат вверх на одну строчку, отчищая место первой строкой под новую.
}
else strmid(InfoChatLine[13], text, 0, MAX_STRING); // Записываем новое сообщение в последнею строку.
}
}
format(string, sizeof(string), "%s~n~%s~n~%s~n~%s~n~%s~n~%s~n~%s~n~%s~n~%s~n~%s~n~%s~n~%s~n~%s~n~%s", InfoChatLine[0], InfoChatLine[1], InfoChatLine[2], InfoChatLine[3], InfoChatLine[4], InfoChatLine[5], InfoChatLine[6], InfoChatLine[7], InfoChatLine[8], InfoChatLine[9], InfoChatLine[10], InfoChatLine[11], InfoChatLine[12], InfoChatLine[13]); // Тут понятно все, форматируем все строки чата.
TextDrawSetString(ServerTextDraws[5], string); // Обновляем чат.
return true;
}
Вообщем я тру кодер решил набыдлокодить второстепенный чат на своем сервере.
Планирую отправлять в него сообщения о логине и выходе игроков и килл чат. Оцените на сколько этот код прочный и удобный для машины. Может кто то знает или может предложить на много проще реализацию. PHP код:
|
#define MAX_LEN_CHAT 70
#define MAX_LINE_CHAT 10
new ChatStr[MAX_LINE_CHAT][MAX_LEN_CHAT];
new Text:ChatText[MAX_LINE_CHAT];
new ChatTD;
stock ShowChatForPlayer(playerid)
{
if(ChatText[0] == Text:0xFFFF) return false;
for(new i=MAX_LINE_CHAT-1;i!=-1;--i) TextDrawShowForPlayer(playerid,ChatText[i]);
return true;
}
stock HideChatForPlayer(playerid)
{
if(ChatText[0] == Text:0xFFFF) return false;
for(new i=MAX_LINE_CHAT-1;i!=-1;--i) TextDrawHideForPlayer(playerid,ChatText[i]);
return true;
}
stock ClearChat()
{
if(ChatText[0] == Text:0xFFFF) return false;
for(new i=MAX_LINE_CHAT-1;i!=-1;--i)
{
TextDrawSetString(ChatText[i], "_");
ChatStr[i][0] = EOS;
}
return true;
}
stock DeleteChat()
{
if(ChatText[0] == Text:0xFFFF) return false;
new TX = MAX_LINE_CHAT;
TXD: TX--, ChatStr[TX][0] = EOS;
TextDrawHideForAll(ChatText[TX]);
TextDrawDestroy(ChatText[TX]);
ChatText[TX] = Text:0xFFFF;
if(TX) goto TXD; return true;
}
stock CreateChat()
{
new TX = MAX_LINE_CHAT, Float:RS = 295.000000;
TXD: TX--, RS -= 9.000000, ChatStr[TX][0] = EOS;
ChatText[TX] = TextDrawCreate(24.000000, RS, "_");
TextDrawLetterSize(ChatText[TX], 0.220000, 1.00000);
TextDrawBackgroundColor(ChatText[TX], 16843048);
TextDrawColor(ChatText[TX], 0xff5151BB);
TextDrawAlignment(ChatText[TX], 0);
TextDrawFont(ChatText[TX], 1);
TextDrawSetShadow(ChatText[TX], 0);
TextDrawSetOutline(ChatText[TX], 1);
TextDrawSetProportional(ChatText[TX], 1);
if(TX) goto TXD; return true;
}
stock AddTextChat(const text[])
{
format(ChatStr[ChatTD], MAX_LEN_CHAT, text);
if(++ChatTD == MAX_LINE_CHAT) ChatTD = 0;
for(new i, x = ChatTD; i != MAX_LINE_CHAT; i++)
{
if(x == MAX_LINE_CHAT) x = 0;
TextDrawSetString(ChatText[i], ChatStr[x++]);
}
return true;
}
stock SendInfoAllMessage(const text[])
{
static idx;
strmid(InfoChatLine[idx], text, 0, MAX_STRING);
if (idx < MAX_LINES_CHAT - 1) {
idx++;
} else {
idx = 0;
}
new string[MAX_STRING * MAX_LINES_CHAT];
for (new i = idx; i < MAX_LINES_CHAT; i++) {
strcat(string, InfoChatLine[i], sizeof(string));
strcat(string, "~n~", sizeof(string));
}
for (new i = 0; i < idx; i++) {
strcat(string, InfoChatLine[i], sizeof(string));
strcat(string, "~n~", sizeof(string));
}
TextDrawSetString(ServerTextDraws[5], string);
}