[fork] Advert Messages

reapi [fork] Advert Messages 1.4

Нет прав для скачивания
Автор
maFFyoZZyk
Исходный код
Основной код:
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <reapi>

#define ALL_DHUD                //Раскомментируйте, если хотите показывать сообщения только мертвым игрокам.

#define CHAT_REPEAT_TIME     25.0    // Время между сообщениями
#define DHUD_INTERVAL 10.0            //Интервал между сообщениями (Время показа одного сообщения).
#define DHUD_COLOR    1                // Цвет DHUD сообщениия

#if DHUD_COLOR == 0
    #define COLOR_RED    random_num(1, 255)
    #define COLOR_GREEN    random_num(1, 255)
    #define COLOR_BLUE    random_num(1, 255)
#endif    
#if DHUD_COLOR == 1
    #define COLOR_RED    255
    #define COLOR_GREEN    255
    #define COLOR_BLUE    255
#endif

const PLAYER_KEY    =    2;                            // Ключ для сохранения. 1. - Ник. 2. - Стим. 3.- IP
const NUMBER_DAYS_INACTIVITY =        7;                // Через сколько дней удалять игрока, незаходящего на сервер
const SECONDS_IN_DAY =                86400;            // Количество секунд в одном дне
const iBitChat     = (1<<0);
const iBitDhud    = (1<<1);

const IP_LENGHT    = 16;        // не трогать!
const NAME_LENGHT  = 31;        // не трогать!
const STEAM_LENGHT = 34;        // не трогать!
const PATH_STRLEN = 64;
const AUTHID_STRLEN = 24;
const PLAYER_NAME_STRLEN = 32;

new stats_keys = MENU_KEY_1|MENU_KEY_2|MENU_KEY_3|MENU_KEY_4|MENU_KEY_5|MENU_KEY_6|MENU_KEY_7|MENU_KEY_0

new g_iVaultID;
#define get_settings(%0,%1)            g_iPlayerSettings[%0] & %1
#define set_settings(%0,%1)            g_iPlayerSettings[%0] |= %1
#define del_settings(%0,%1)            g_iPlayerSettings[%0] &= ~%1
new g_iPlayerSettings[MAX_PLAYERS + 1];
new g_szTemp[35];

new adMessages[256][191];
new ad_count, iMessgCount;
new Array:g_apMessages, g_iCounter, g_iArraySize, g_pcvar_hostname;

public plugin_init()
{
    register_plugin("Advert Messages", "1.4", "maFFyoZZyk & neygomon");
    
    register_menu("ClCmdAdvertising", stats_keys, "ClCmdAdvertising_func");
    
    set_task(CHAT_REPEAT_TIME, "advert", .flags="b");
    set_task(DHUD_INTERVAL, "dhud_advert", .flags="b");
    
    register_clcmd("adv", "ClCmdAdvertising");
    
    g_pcvar_hostname = get_cvar_pointer("hostname");
    g_apMessages = ArrayCreate(128);
}

public plugin_cfg()
{
    new file = fopen("addons/amxmodx/configs/advert.ini", "rt");
    if(file)
    {
        new buffer[512], message[191];
        
        enum { chat, dhud };
        new section = -1;
    
        while(!feof(file))
        {
            fgets(file, buffer, charsmax(buffer));
            trim(buffer);

            switch(buffer[0])
            {
                case '[':
                {
                    if(!strcmp(buffer, "[CHAT]"))    section = chat;
                    else if(!strcmp(buffer, "[DHUD]"))    section = dhud;
                    continue;
                }
                case '#': continue;
            }

            switch(section)
            {
                case chat:
                {
                    if(buffer[0] != ';' && parse(buffer, message, charsmax(message)))
                    {
                        while(replace(message, charsmax(message), "!n", "^1")) {}
                        while(replace(message, charsmax(message), "!t", "^3")) {}
                        while(replace(message, charsmax(message), "!g", "^4")) {}
                        formatex(adMessages[ad_count++], charsmax(adMessages[]), "^1%s", message);
                    }
                }
                case dhud:
                {    
                    new dhHostname[64], dhIP[32];
                    get_user_ip(0, dhIP, charsmax(dhIP));
                    get_pcvar_string(g_pcvar_hostname, dhHostname, 63);
                    
                    if(buffer[0] != ';' && parse(buffer, message, charsmax(message)))
                    {
                        while(replace(message, charsmax(message), "%ip%", dhIP)) {}
                        while(replace(message, charsmax(message), "%hostname%", dhHostname)) {}
                        while(replace(message, charsmax(message), "%new%", "^n")) {}
                        
                        ArrayPushArray(g_apMessages, message);
                    }                    
                    g_iArraySize = ArraySize(g_apMessages);
                }
                default: continue;
            }
    
        }
        fclose(file);
    }
    else set_fail_state("File ^"addons/amxmodx/configs/advert.ini^" not found!");

    g_iVaultID = nvault_open("advertising");
    nvault_prune(g_iVaultID, 0, get_systime() - SECONDS_IN_DAY * NUMBER_DAYS_INACTIVITY);
}

public client_putinserver(id)
{    
    get_key(id);
    new s_Data[30], i_Timestamp, i_DataExists;
    i_DataExists = nvault_lookup(g_iVaultID, g_szTemp, s_Data, charsmax(s_Data) , i_Timestamp);
    if (!i_DataExists)
    {
        g_iPlayerSettings[id] = 3;
        new szTempSets[12];
        num_to_str(g_iPlayerSettings[id], szTempSets, charsmax(szTempSets));
        nvault_set(g_iVaultID, g_szTemp, szTempSets);
    }
    else
        g_iPlayerSettings[id] = nvault_get(g_iVaultID, g_szTemp);
}

public plugin_end() 
{
    nvault_close(g_iVaultID);
}

public advert()
{
    static players[32], pcount;
    get_players(players, pcount, "ch");
    for(new i; i < pcount; i++)    
    {
        if(get_settings(players[i], iBitChat))
            ChatColor(players[i], "%s", adMessages[iMessgCount == ad_count ? (iMessgCount = 0) : iMessgCount++]);
    }

}

public dhud_advert()
{    
    if(++g_iCounter >= g_iArraySize)
        g_iCounter = 0;
    
    static i, apPlayers[32], iPlayers;
#if defined ALL_DHUD
    get_players(apPlayers, iPlayers, "bch");
#else
    get_players(apPlayers, iPlayers, "ch");
#endif
    
    static szMess[128], szName[32];
    ArrayGetString(g_apMessages, g_iCounter, szMess, charsmax(szMess));
    set_dhudmessage(COLOR_RED, COLOR_GREEN, COLOR_BLUE, -1.0, 0.04, 0, 2.0, DHUD_INTERVAL - 1.0);

    for(i = 0; i < iPlayers; i++)
    {
        if(get_settings(apPlayers[i], iBitDhud))
        {
            replace_all(szMess, charsmax(szMess), szName, "%name%");
            get_user_name(apPlayers[i], szName, charsmax(szName));
            replace_all(szMess, charsmax(szMess), "%name%", szName);
            
            show_dhudmessage(apPlayers[i], szMess);
            client_print(0, print_console, "%s", szMess);
        }
    }
}

public ClCmdAdvertising(const id) 
{
    static menu[MAX_MENU_LENGTH], iLen;
    iLen = 0;

    iLen = formatex(menu[iLen], charsmax(menu) - iLen, "\rНастройка рекламы:^n^n");

    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[1] \wРеклама в чат: %s^n", get_settings(id, iBitChat) ?  "\y[\rВКЛЮЧЕНА\y]" : "\y[\dВЫКЛЮЧЕНА\y]");
    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[2] \wРеклама в DHUD: %s^n^n", get_settings(id, iBitDhud) ? "\y[\rВКЛЮЧЕНА\y]" : "\y[\dВЫКЛЮЧЕНА\y]");

    iLen += formatex(menu[iLen], charsmax(menu) - iLen, "\y[0] \wВыход");

    show_menu(id, stats_keys, menu, -1, "ClCmdAdvertising");
    return PLUGIN_HANDLED;
}

public ClCmdAdvertising_func(id, key)
{
    switch(key)
    {
        case 0:
        {
            if(get_settings(id, iBitChat))
            {
                del_settings(id, iBitChat);    
                client_print_color(id, print_team_default, "^4* ^1Вы деактивировали показ рекламы в чат");
            }
            else
            {
                set_settings(id, iBitChat);
                client_print_color(id, print_team_default, "^4* ^1Вы активировали показ рекламы в чат");        
            }
            
            rg_send_audio(id, "events/tutor_msg.wav");
            ClCmdAdvertising(id);
        }
        case 1:
        {
            if(get_settings(id, iBitDhud)) 
            {
                del_settings(id, iBitDhud);
                client_print_color(id, print_team_default, "^4* ^1Вы деактивировали показ рекламы в DHUD");
            }            
            else 
            {
                set_settings(id, iBitDhud);
                client_print_color(id, print_team_default, "^4* ^1Вы активировали показ рекламы в DHUD");    
            }
            
            rg_send_audio(id, "events/tutor_msg.wav");
            ClCmdAdvertising(id);
        }
    }
    
    get_key(id);
    new szTempSets[12];
    num_to_str(g_iPlayerSettings[id], szTempSets, charsmax(szTempSets));
    nvault_set(g_iVaultID, g_szTemp, szTempSets);
}

get_key(const id)
{
    switch(PLAYER_KEY)
    {
        case 1: get_user_name(id, g_szTemp, NAME_LENGHT) // получаем ник
        case 2: get_user_authid(id, g_szTemp, STEAM_LENGHT); // получаем стим
        case 3: get_user_ip( id, g_szTemp, IP_LENGHT, 1 ); // получаем ip
    }
}

stock ChatColor(const id, const szMessage[], any:...)
{
    static pnum, players[32], szMsg[190], IdMsg; 
    vformat(szMsg, charsmax(szMsg), szMessage, 3);
    
    if(!IdMsg) IdMsg = get_user_msgid("SayText");
    
    if(id) 
    { 
        players[0] = id;
        pnum = 1; 
    } 
    else get_players(players, pnum, "ch");
    
    for(new i; i < pnum; i++)
    {
        message_begin(MSG_ONE, IdMsg, .player = players[i]);
        write_byte(players[i]);
        write_string(szMsg);
        message_end();
    }
}
Требование ReAPI
Да
Поддержка русского языка
Да
Совместимость
  1. REHLDS
Сверху Снизу