Текстовая Реклама / [KDLP] [DEV] Adverts 1.0.0

Плагины и дополнения / Plugins and add-ons

Модераторы: Dame-danners, Longipongeoos

Аватар пользователя
Longipongeoos
Сообщений: 191
Зарегистрирован: 12 апр 2017, 16:50

Текстовая Реклама / [KDLP] [DEV] Adverts 1.0.0

Сообщение Longipongeoos » 11 ноя 2021, 17:19

Текстовая Реклама / [KDLP] [DEV] Adverts 1.0.0
Информация
Простой плагин 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);
}
Вложения
kdlp-adv.zip
(1.32 KiB) Загружено 114 раз

Вернуться в «SourceMod»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 2 гостей