JIEON_COJIORS
Умник
Система уведомлений.
Можно использовать как для личных сообщений, так и для системных напоминания. Примеры показаны на скриншотах. Дальше толька ваша фантазия.
Данный момент лимит уведомлений - 20. Можно поменять на какую надо - #define MAX_NOTIF.
Все новые уведомления будут записываться удаляя старые. То есть запись идет в переменную 0 переводя всю информацию по цепочке. Следовательно последнее перезаписывается.
Функции:
SendNotif(playerid,text[],sender[]) -
playerid - ид игрока, которому будет отправлено уведомление.
text[] - Само уведомление. Можно через форматирование и переменную добавлять любую информацию.
sender[] - типо сообщения, например: "Система", "Личное сообщение","Случайная подсказка" и т.д
Можно использовать как для личных сообщений, так и для системных напоминания. Примеры показаны на скриншотах. Дальше толька ваша фантазия.
Данный момент лимит уведомлений - 20. Можно поменять на какую надо - #define MAX_NOTIF.
Все новые уведомления будут записываться удаляя старые. То есть запись идет в переменную 0 переводя всю информацию по цепочке. Следовательно последнее перезаписывается.
Функции:
SendNotif(playerid,text[],sender[]) -
playerid - ид игрока, которому будет отправлено уведомление.
text[] - Само уведомление. Можно через форматирование и переменную добавлять любую информацию.
sender[] - типо сообщения, например: "Система", "Личное сообщение","Случайная подсказка" и т.д
Код:
#include <a_samp>
#define CS 0x4582A1FF
enum
{
d_notif = 3500,
d_notif_delete
}
#define MAX_NOTIF 20
enum enum_info
{
n_message[180],
bool:n_readed,
n_date[30],
n_sender[25]
}
new n_info[MAX_NOTIF][MAX_PLAYERS][enum_info];
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case d_notif:
{
if(!response) return true;
new str[78 + 30 + 25 + 180];
format(str,sizeof(str), "{FFFFFF}Получено: {FF9900}%s\n{FFFFFF}Тип сообщение: {FF9900}%s\n\n{FFFFFF}%s",n_info[listitem][playerid][n_date],n_info[listitem][playerid][n_sender],n_info[listitem][playerid][n_message]);
ShowPlayerDialog(playerid,d_notif_delete, DIALOG_STYLE_MSGBOX, " ",str,"Удалить","Закрыть");
n_info[listitem][playerid][n_readed] = true;
SetPVarInt(playerid, #id,listitem);
}
case d_notif_delete:
{
if(!response) return DeletePVar(playerid, #id);
SendClientMessage(playerid, CS, !"Уведомление удалено!");
if(GetPVarInt(playerid, #id) == MAX_NOTIF-1)
{
n_info[GetPVarInt(playerid, #id)][playerid][n_date] = n_info[GetPVarInt(playerid, #id)][playerid][n_message] = 0;
return true;
}
for(new i = GetPVarInt(playerid, #id); i < MAX_NOTIF-1; i++)
{
format(n_info[i][playerid][n_date],30,n_info[i+1][playerid][n_date]);
format(n_info[i][playerid][n_message],180,n_info[i+1][playerid][n_message]);
format(n_info[i][playerid][n_sender],25,n_info[i+1][playerid][n_sender]);
n_info[i][playerid][n_readed] = n_info[i+1][playerid][n_readed];
}
n_info[MAX_NOTIF-1][playerid][n_date] = n_info[MAX_NOTIF-1][playerid][n_message] = 0;
}
}
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
new idx;
new cmd[256];
cmd = strtok(cmdtext, idx);
if(strcmp(cmd,"/notif",true) == 0)
{
new str[36+(20+16+30+13)*MAX_NOTIF-1] = "Дата\tСообщение\tСтатус\n",massage[20];
for(new i; i < MAX_NOTIF; i++)
{
if(strlen(n_info[i][playerid][n_message]) < 2) continue;
format(str,sizeof(str),"{FFFFFF}%s%s\t",str,n_info[i][playerid][n_date]);
if(strlen(n_info[i][playerid][n_message]) > 16)
{
format(massage,16,n_info[i][playerid][n_message]);
strcat(massage,"...");
strcat(str,massage);
}
format(str,sizeof(str),"%s\t{FF9900}%s\n",str,(n_info[i][playerid][n_readed]) ? ("прочитано") : ("не прочитано"));
}
ShowPlayerDialog(playerid,d_notif,DIALOG_STYLE_TABLIST_HEADERS, "Уведомления",str,"Прочитать","Закрыть");
}
return 1;
}
stock SendNotif(playerid, text[], sender[])
{
for(new i=MAX_NOTIF-2; 0 <= i ; i--)
{
format(n_info[i+1][playerid][n_date],30,n_info[i][playerid][n_date]);
format(n_info[i+1][playerid][n_message],180,n_info[i][playerid][n_message]);
format(n_info[i+1][playerid][n_sender],25,n_info[i][playerid][n_sender]);
n_info[i+1][playerid][n_readed] = n_info[i][playerid][n_readed];
}
new year, month,day;
getdate(year, month, day);
new hour,minuite,second;
gettime(hour,minuite,second);
format(n_info[0][playerid][n_date],30,"%d:%d %d/%d/%d",hour,minuite, day,month,year);
format(n_info[0][playerid][n_sender],25,sender);
format(n_info[0][playerid][n_message],180,text);
n_info[0][playerid][n_readed] = false;
SendClientMessage(playerid, -1,"{FF9900}Вам пришло новое уведомление. Используйте {FFFFFF}/notif{FF9900}, чтобы посмотреть!");
PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0);//lohs
}
Вложения
-
999.7 KB Просмотры: 923
-
1 MB Просмотры: 673
-
1 MB Просмотры: 554
Последнее редактирование модератором:
