Информация
Простой плагин sourcemod, выводит рекламу в чат.Можно выводить цветную рекламу
Доступные служебные символы:
# - код RGB-цвета, запись получается прямо как в HTML, например #FFFF00 - полный функционал MoreColors одной строчкой вместо огромной библиотеки
% - стандартный зеленый цвет (GREEN, \x04)
& - стандартный цвет (DEFAULT, \x01)
\n - перевод строки
{TIME} - время в 24ч формате
{cvar} - значение переменной cvar
{BOOL:cvar} - OFF или ON, для булевых переменных
Настройки:
Код: Выбрать все
sm_ads_interval - интервал вывода рекламы
sm_ads_file - имя файла (в папке sourcemod/configs)
Команды:
Код: Выбрать все
sm_ads_reload - перезагрузка файла рекламы
Установка:
Скомпилировать при необходимости
Раскидать файлы плагина sourcemod по папкам
Исходный код
Код: Выбрать все
#include <sourcemod>
#pragma semicolon 1
#define CVAR_DISABLED "OFF"
#define CVAR_ENABLED "ON"
public Plugin:myinfo =
{
name = "Adverts",
author = "KorDen",
description = "",
version = "1.0",
url = "dev.sky-play.ru"
};
new Handle:g_hAdvertisements = INVALID_HANDLE;
new Handle:g_hFile, Handle:g_hInterval, Handle:g_hTimer;
public OnPluginStart()
{
g_hFile = CreateConVar("sm_ads_file", "advertisements.txt", "File with adverts");
g_hInterval = CreateConVar("sm_ads_interval", "30", "Interval of adverts");
HookConVarChange(g_hInterval, ConVarChange_Interval);
RegServerCmd("sm_ads_reload", Command_ReloadAds, "Reload adverts");
}
public OnMapStart()
{
ParseAds();
g_hTimer = CreateTimer(GetConVarInt(g_hInterval) * 1.0, Timer_DisplayAds, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public ConVarChange_Interval(Handle:convar, const String:oldValue[], const String:newValue[])
{
if (g_hTimer != INVALID_HANDLE)
KillTimer(g_hTimer);
g_hTimer = CreateTimer(GetConVarInt(convar) * 1.0, Timer_DisplayAds, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}
public Action:Command_ReloadAds(args)
{
ParseAds();
}
public Action:Timer_DisplayAds(Handle:timer)
{
decl String:sBuffer[128], String:sText[512];
KvGetString(g_hAdvertisements, "text", sText, sizeof(sText));
if (!KvGotoNextKey(g_hAdvertisements))
{
KvRewind(g_hAdvertisements);
KvGotoFirstSubKey(g_hAdvertisements);
}
if (StrContains(sText, "{TIME}") != -1)
{
FormatTime(sBuffer, sizeof(sBuffer), "%H:%M:%S");
ReplaceString(sText, sizeof(sText), "{TIME}", sBuffer);
}
/*if (StrContains(sText, "\\n") != -1)
{
Format(sBuffer, sizeof(sBuffer), "%c", 13);
ReplaceString(sText, sizeof(sText), "\\n", sBuffer);
}*/
decl String:sConVar[64], String:sName[64];
new iStart = StrContains(sText, "{BOOL:");
while (iStart != -1)
{
new iEnd = StrContains(sText[iStart + 6], "}");
if (iEnd != -1)
{
strcopy(sConVar, iEnd + 1, sText[iStart + 6]);
Format(sName, sizeof(sName), "{BOOL:%s}", sConVar);
new Handle:hConVar = FindConVar(sConVar);
if (hConVar != INVALID_HANDLE)
{
ReplaceString(sText, sizeof(sText), sName, GetConVarBool(hConVar) ? CVAR_ENABLED : CVAR_DISABLED);
}
}
new iStart2 = StrContains(sText[iStart + 1], "{BOOL:") + iStart + 1;
if (iStart == iStart2)
break;
else
iStart = iStart2;
}
iStart = StrContains(sText, "{");
while (iStart != -1)
{
new iEnd = StrContains(sText[iStart + 1], "}");
if (iEnd != -1)
{
strcopy(sConVar, iEnd + 1, sText[iStart + 1]);
Format(sName, sizeof(sName), "{%s}", sConVar);
new Handle:hConVar = FindConVar(sConVar);
if (hConVar != INVALID_HANDLE)
{
GetConVarString(hConVar, sBuffer, sizeof(sBuffer));
ReplaceString(sText, sizeof(sText), sName, sBuffer);
}
}
new iStart2 = StrContains(sText[iStart + 1], "{") + iStart + 1;
if (iStart == iStart2)
break;
else
iStart = iStart2;
}
ReplaceString(sText,sizeof(sText), "\\n", "\n");
ReplaceString(sText,sizeof(sText), "&", "\x01");
ReplaceString(sText,sizeof(sText), "%", "\x04");
ReplaceString(sText,sizeof(sText), "#", "\x07");
PrintToChatAll(sText);
}
ParseAds()
{
if (g_hAdvertisements != INVALID_HANDLE)
CloseHandle(g_hAdvertisements);
g_hAdvertisements = CreateKeyValues("Advertisements");
decl String:sFile[256], String:sPath[256];
GetConVarString(g_hFile, sFile, sizeof(sFile));
BuildPath(Path_SM, sPath, sizeof(sPath), "configs/%s", sFile);
if (FileExists(sPath))
{
FileToKeyValues(g_hAdvertisements, sPath);
KvGotoFirstSubKey(g_hAdvertisements);
}
else
SetFailState("File Not Found: %s", sPath);
}