Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Система уведомлений

JIEON_COJIORS

Умник
Система уведомлений.
Можно использовать как для личных сообщений, так и для системных напоминания. Примеры показаны на скриншотах. Дальше толька ваша фантазия.

Данный момент лимит уведомлений - 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
}
​
​
 

Вложения

Последнее редактирование модератором:
Сверху Снизу