#include <amxmodx>
#include <nvault>
#include <reapi>
#pragma semicolon 1
const NUMBER_DAYS_INACTIVITY = 999999; // Через сколько дней удалять игрока, незаходящего на сервер
const SECONDS_IN_DAY = 86400; // Количество секунд в одном дне
const Float:REPEAT_CHAT = 15.0; // Время повторного показа рекламы в чате
const Float:REPEAT_HUD = 10.0; // Время повторного показа hud рекламы
const COLOR_RED = 255; // Интенсивность красного цвета
const COLOR_GREEN = 0; // Интенсивность зеленого цвета
const COLOR_BLUE = 0; // Интенсивность голубого цвета
const Float:CORD_X = 0.02; // Координата X
const Float:CORD_Y = 0.2; // Координата Y
const EFFECTS = 2; // Эффект сообщения
const Float:FX_TIME = 1.0; // Время сохранения блеска во втором эффекте
const Float:HOLD_TIME = REPEAT_HUD; // Время показа сообщения на экране
const Float:FADE_IN_TIME = 0.04; // Скорость печатания текста во втором эффекте
const Float:FADE_OUT_TIME = 1.0; // Время плавного исчезновение сообщение
const CHANNEL = -1; // Канал сообщения
const TASK_ID_CHAT = 1000;
const TASK_ID_HUD = 1001;
const PATH_STRLEN = 64;
const AUTHID_STRLEN = 24;
const PLAYER_NAME_STRLEN = 32;
const MESSAGE_STRLEN = 256;
const TIME_STRLEN = 32;
new const ADV_CHAT_LIST[][] = {
"^4* Наша группа vk.com cp_dt",
"^4* Наш Форум Gam1ng.Ru",
"^4* Покупка Admin VIP vk.com/tatar_4ik",
"^4* Спонсор 200р GOLD ADMIN 75 GOLD VIP50",
"^4* В группе идёт набор Админов",
"^4* Главная Администация Dark Side AVG.Senpai",
"^4* vk.com/tatar_4ik / vk.com/i17bb"
};
new const ADV_HUD[] = {
"Мы рады приветсвовать тебя^n\
Заходи к нам, проявляй активность^n\
И получай привилегии в подарок^n^n\
МЫ ВКОНТАКТЕ: VK.COM/cp_dt"
};
new g_bAdvDisabled[MAX_PLAYERS + 1];
new g_aPlayersID[MAX_PLAYERS], g_iPlayersNum;
new g_sLogsDir[PATH_STRLEN];
new g_iVaultID;
public plugin_init() {
register_plugin("Advertising Manager", "2.0", "Javekson");
register_clcmd("say /adv", "ClCmdAdvertising");
}
public plugin_cfg() {
get_localinfo("amxx_logs", g_sLogsDir, charsmax(g_sLogsDir));
set_task(REPEAT_CHAT, "AdvTaskChat", TASK_ID_CHAT, .flags = "b");
set_task(REPEAT_HUD, "AdvTaskHud", TASK_ID_HUD, .flags = "b");
g_iVaultID = nvault_open("advertising");
nvault_prune(g_iVaultID, 0, get_systime() - SECONDS_IN_DAY * NUMBER_DAYS_INACTIVITY);
}
public client_putinserver(id) {
new sAuthID[AUTHID_STRLEN];
get_user_authid(id, sAuthID, charsmax(sAuthID));
if((g_bAdvDisabled[id] = nvault_get(g_iVaultID, sAuthID)))
nvault_touch(g_iVaultID, sAuthID);
}
public plugin_end() {
nvault_close(g_iVaultID);
}
public ClCmdAdvertising(const id) {
new sAuthID[AUTHID_STRLEN], sPlayerName[PLAYER_NAME_STRLEN];
get_user_authid(id, sAuthID, charsmax(sAuthID));
get_user_name(id, sPlayerName, charsmax(sPlayerName));
if(g_bAdvDisabled[id]) {
g_bAdvDisabled[id] = false;
nvault_remove(g_iVaultID, sAuthID);
logging(g_sLogsDir, "advertising_", "^"%s^" ^"%s^" ^"Enabled^"", sAuthID, sPlayerName);
client_print_color(id, print_team_default, "^4* ^1Вы активировали показ рекламы");
rg_send_audio(id, "events/tutor_msg.wav");
return PLUGIN_CONTINUE;
}
g_bAdvDisabled[id] = true;
nvault_set(g_iVaultID, sAuthID, "1");
logging(g_sLogsDir, "advertising_", "^"%s^" ^"%s^" ^"Disabled^"", sAuthID, sPlayerName);
client_print_color(id, print_team_default, "^4* ^1Вы деактивировали показ рекламы");
rg_send_audio(id, "events/tutor_msg.wav");
return PLUGIN_CONTINUE;
}
public AdvTaskChat() {
get_players(g_aPlayersID, g_iPlayersNum, "bch");
for(new i; i < g_iPlayersNum; i++) {
if(!g_bAdvDisabled[g_aPlayersID[i]]) {
static iNextAdvChat[MAX_PLAYERS + 1];
iNextAdvChat[g_aPlayersID[i]] = ++iNextAdvChat[g_aPlayersID[i]] % sizeof ADV_CHAT_LIST;
client_print_color(g_aPlayersID[i], print_team_default, ADV_CHAT_LIST[iNextAdvChat[g_aPlayersID[i]]]);
}
}
}
public AdvTaskHud() {
get_players(g_aPlayersID, g_iPlayersNum, "bch");
for(new i; i < g_iPlayersNum; i++) {
if(!g_bAdvDisabled[g_aPlayersID[i]]) {
set_hudmessage(COLOR_RED, COLOR_GREEN, COLOR_BLUE, CORD_X, CORD_Y, EFFECTS, FX_TIME, HOLD_TIME, FADE_IN_TIME, FADE_OUT_TIME, CHANNEL);
show_hudmessage(g_aPlayersID[i], ADV_HUD);
}
}
}
stock logging(const sLogsDir[], const sFileName[], const sMessage[], any:...) {
new iFileID, sLogFile[PATH_STRLEN + 32], sFormatMsg[MESSAGE_STRLEN], sTime[TIME_STRLEN];
vformat(sFormatMsg, charsmax(sFormatMsg), sMessage, 4);
get_time("%Y.log", sTime, charsmax(sTime));
formatex(sLogFile, charsmax(sLogFile), "%s/%s%s", sLogsDir, sFileName, sTime);
iFileID = fopen(sLogFile, "at");
get_time("%d.%m.%Y - %H:%M:%S", sTime, charsmax(sTime));
fprintf(iFileID, "^"%s^" %s^n", sTime, sFormatMsg);
fclose(iFileID);
}