Иконка ресурса

Graphic banner overlay 1.3 S

Rolzzandik

Участник
Сообщения
492
Реакции
234
  • Автор ресурса
  • #1
Rolzzandik добавил(а) новый ресурс:

Graphic banner overlay - Создает баннер, который показывается игрокам во время игры

Данный плагин позволяет добавить постоянную рекламу в виде баннера, которая будет показываться при любых условиях.
(не используется sv_server_graphic1/sv_server_graphic2)

Идея плагина - Cyber♂cock♂.
Собственно решил реализовать что-то свое, поскольку ротатор графических баннеров уже морально устарел.

Возможности:
1. Вы можете разместить в любое подходящее для Вас место.
2. Возможность включить/выключить плагин в режиме реального времени через квар.
3. Поддержка высокого разрешения...

Узнать больше об этом ресурсе...
 

Faya™

Жуестер
Сообщения
867
Реакции
457
Шо это за фигня?

1604734566647.png

1. Создавать для каждого игрока таймер плохая идея
2. Брать каждый раз из квара значение тоже плохая идея
3. Оверлей не будет скачиваться игроку

Реализация не очень(((
C#:
#include <sdktools>

#pragma semicolon 1
#pragma newdecls required

char g_szPath[PLATFORM_MAX_PATH];
bool g_bEnable;

Handle g_hTimer;

public void OnPluginStart()
{
    ConVar cvar = CreateConVar("sm_vtfoverlay_enable", "1", "Включить оверлей?", _, true, 0.0, true, 1.0);
    g_bEnable = cvar.BoolValue;
    cvar.AddChangeHook(ConVar_CallBack_Enable);

    cvar = CreateConVar("sm_vtfoverlay_path", "overlay/banner", "Путь к оверлею, без папки materials/ и без указания расширения.");
    cvar.GetString(g_szPath, sizeof g_szPath);
    cvar.AddChangeHook(ConVar_CallBack_Path);

    AddOverlayToDownload_Pre();
}

public void OnMapStart()
{
    if(g_bEnable)
    {
        g_hTimer = CreateTimerOverlay();
    }
}

void ConVar_CallBack_Enable(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    g_bEnable = view_as<bool>(StringToInt(newValue));

    if(g_bEnable)
    {
        if(g_hTimer)
        {
            delete g_hTimer;
        }

        g_hTimer = CreateTimerOverlay();
    }
    else
    {
        SetOverlay("");
    }
}

void ConVar_CallBack_Path(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    strcopy(g_szPath, sizeof g_szPath, newValue);
    AddOverlayToDownload_Pre();
}

Action Time_CallBack(Handle hTimer)
{
    if(g_bEnable)
    {
        SetOverlay(g_szPath);

        return Plugin_Continue;
    }

    return Plugin_Stop;
}

void SetOverlay(char[] szPath)
{
    for(int i = MaxClients + 1; --i;)
    {
        if(IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i))
        {
            ClientCommand(i, "r_screenoverlay \"%s\"", szPath);
        }
    }
}

Handle CreateTimerOverlay()
{
    return CreateTimer(1.0, Time_CallBack, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

void AddOverlayToDownload_Pre()
{
    AddFileToDownload(g_szPath, "materials/%s.vmt");
    AddFileToDownload(g_szPath, "materials/%s.vtf");
}

stock void AddFileToDownload(char[] szPath, char[] szMask)
{
    static char szBuffer[PLATFORM_MAX_PATH];

    FormatEx(szBuffer, sizeof szBuffer, szMask, szPath);
    AddFileToDownloadsTable(szBuffer);
}

p.s Конфликты неизбежны если стоят плагины на отображение оверлейя в конце/начале/середине раунда
 
Последнее редактирование:

Rolzzandik

Участник
Сообщения
492
Реакции
234
  • Автор ресурса
  • #3
Шо это за фигня?


1. Создавать для каждого игрока таймер плохая идея
2. Брать каждый раз из квара значение тоже плохая идея
3. Оверлей не будет скачиваться игроку

Реализация не очень(((
C#:
#include <sdktools>

#pragma semicolon 1
#pragma newdecls required

char g_szPath[PLATFORM_MAX_PATH];
bool g_bEnable;

Handle g_hTimer;

public void OnPluginStart()
{
    ConVar cvar = CreateConVar("sm_vtfoverlay_enable", "1", "Включить оверлей?", _, true, 0.0, true, 1.0);
    g_bEnable = cvar.BoolValue;
    cvar.AddChangeHook(ConVar_CallBack_Enable);

    cvar = CreateConVar("sm_vtfoverlay_path", "overlay/banner", "Путь к оверлею, без папки materials/ и без указания расширения.");
    cvar.GetString(g_szPath, sizeof g_szPath);
    cvar.AddChangeHook(ConVar_CallBack_Path);

    AddOverlayToDownload_Pre();
}

public void OnMapStart()
{
    if(g_bEnable)
    {
        g_hTimer = CreateTimerOverlay();
    }
}

void ConVar_CallBack_Enable(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    g_bEnable = view_as<bool>(StringToInt(newValue));

    if(g_bEnable)
    {
        if(g_hTimer)
        {
            delete g_hTimer;
        }

        g_hTimer = CreateTimerOverlay();
    }
    else
    {
        SetOverlay("");
    }
}

void ConVar_CallBack_Path(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    strcopy(g_szPath, sizeof g_szPath, newValue);
    AddOverlayToDownload_Pre();
}

Action Time_CallBack(Handle hTimer)
{
    if(g_bEnable)
    {
        SetOverlay(g_szPath);

        return Plugin_Continue;
    }

    return Plugin_Stop;
}

void SetOverlay(char[] szPath)
{
    for(int i = MaxClients + 1; --i;)
    {
        if(IsClientConnected(i) && IsClientInGame(i) && !IsFakeClient(i))
        {
            ClientCommand(i, "r_screenoverlay \"%s\"", szPath);
        }
    }
}

Handle CreateTimerOverlay()
{
    return CreateTimer(1.0, Time_CallBack, _, TIMER_REPEAT | TIMER_FLAG_NO_MAPCHANGE);
}

void AddOverlayToDownload_Pre()
{
    AddFileToDownload(g_szPath, "materials/%s.vmt");
    AddFileToDownload(g_szPath, "materials/%s.vtf");
}

stock void AddFileToDownload(char[] szPath, char[] szMask)
{
    static char szBuffer[PLATFORM_MAX_PATH];

    FormatEx(szBuffer, sizeof szBuffer, szMask, szPath);
    AddFileToDownloadsTable(szBuffer);
}

p.s Конфликты неизбежны если стоят плагины на отображение оверлейя в конце/начале/середине раунда
а. удоли(
1604740045894.png

1. Поч? Он через некоторое время сам пропадает, а если делать цикл выставления оверлея, то это выглядит не очень круто + при коннекте не всегда оверлей проставляется(куз соурс круто). Имхо, таймер здесь - самое лучшее решение.
2. Поч? Типо у тебя стоял один баннер, ты поставил другой, и игрокам он сразу отобразился.
3. аыыаыаы, я это прописал в установке. Просто у меня были беды со скачиванием. Мб это просто были приколы хоста, но хзхз.

Про реализацию:
Оно работает? Да. Работает нормально, без багов? Да.
Впринципе я бы не отказался от критики в плане указания ошибок, куз я далеко не кодер и не скриптер.


Про конфликты: Тут я уж ничего не смогу сделать, куз наложение может быть только одно
 

Fen1x

Участник
Сообщения
74
Реакции
10
Вы можете разместить в любое подходящее для Вас место. Если я хочу например в крайний правый угол влепить, как сменить координаты?
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
  • Автор ресурса
  • #5
Вы можете разместить в любое подходящее для Вас место. Если я хочу например в крайний правый угол влепить, как сменить координаты?
Тебе тут не надо менять координаты. Ты тут сам рисуешь оверлей и размещаешь там, где тебе необходимо
 

Fen1x

Участник
Сообщения
74
Реакции
10
Тебе тут не надо менять координаты. Ты тут сам рисуешь оверлей и размещаешь там, где тебе необходимо
а ясно, у меня просто все сделаны на нижнюю часть в середине. Сейчас проверю что с этого выйдет.
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
а. удоли(
Посмотреть вложение 66740
1. Поч? Он через некоторое время сам пропадает, а если делать цикл выставления оверлея, то это выглядит не очень круто + при коннекте не всегда оверлей проставляется(куз соурс круто). Имхо, таймер здесь - самое лучшее решение.
2. Поч? Типо у тебя стоял один баннер, ты поставил другой, и игрокам он сразу отобразился.
3. аыыаыаы, я это прописал в установке. Просто у меня были беды со скачиванием. Мб это просто были приколы хоста, но хзхз.

Про реализацию:
Оно работает? Да. Работает нормально, без багов? Да.
Впринципе я бы не отказался от критики в плане указания ошибок, куз я далеко не кодер и не скриптер.


Про конфликты: Тут я уж ничего не смогу сделать, куз наложение может быть только одно
На счёт антикопипасты: твой бесполезный код скопирует только уж совсем непонимающий в SP нуб.
Зато ты каждую секунду, для каждого игрока запускаешь лишнюю нагрузку на проц сервера (в том числе получая значение пути к оверлею).

1) да, у тебя игрок подключается секунд 30 - 60 из-за кастомных звуков, моделей, оверлеев, но задержка в 1 секунду при выводе оверлея непозволительна
2) ну да, быстрее же получать значение из хэндла квара, чем из строковой переменной
3) вот только в описании нет информации, что для подгрузки требуется плагин, который будет добавлять файл оверлее в загрузки и делать его прекеш

Про реализацию: оно работает у тебя
А будет ли работать у тех, кто зайдёт на сервер с эхтим плагином и у него не будет скачан файл оверлея?
Ну и редкие ошибки при убийстве таймера, когда кваром будут выключать плагин

И ещё нафига получать UserID клиента, и только потом проверять игрока на валидность?
Тоже антикопипаста?

В общем это сырое нечто использовать не советую.
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
  • Автор ресурса
  • #8
3) вот только в описании нет информации, что для подгрузки требуется плагин, который будет добавлять файл оверлее в загрузки и делать его прекеш
Только этот момент не понял.
По факту же его автоматом прекэшает кска клиента, куз она там и вызывается, не?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,520
Реакции
4,979
@Rolzzandik, может и не нужен прекеш.
Обычно для текстурок, звуков и моделей он требуется.
 

MaZa

Участник
Сообщения
1,732
Реакции
980
Не проще пропатчить чтобы sv_server_graphic1 работала не только в спектаторах? Не нужно будет загружать никакие файлы клиенту и юзать лишний код.
Киберкок вам идея если смогете.
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
  • Автор ресурса
  • #11
@Rolzzandik, может и не нужен прекеш.
Обычно для текстурок, звуков и моделей он требуется.
Ну типа используется r_screenoverlay, а она вызывает функу прекэша на клиенте автоматом, если я конечно правильно реверснул
 

Templar

Добрая душа
Сообщения
495
Реакции
62
Отличная штука, как я понимаю можно только чтобы отображался один overley? или же чтобы разные тоже в ротации были?
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
  • Автор ресурса
  • #13
Оффтоп
Сообщения автоматически склеены:

Отличная штука, как я понимаю можно только чтобы отображался один overley? или же чтобы разные тоже в ротации были?
ты просто на один оверлей вкидываешь все, что надо
 

Izert

Участник
Сообщения
197
Реакции
38
Уже есть плагин оверлей систем. Смысл нарисовать рисунок в любом месте, хоть на весь экран в игре, хоть в уголочек)
 

suremiur

♂ overlay master ♂
Сообщения
537
Реакции
585
Я что то тут не вижу постоянного баннера
Посмотреть вложение 66755
Есть там постоянный. Оверлей при спавне, в таймере ставишь 0 - вот тебе он и навсегда.
Мой плагин тоже не ахти, ему уже два года, а мне все лень им вплотную заняться. Но ерунду в виде "антикопипаст" никогда не понимал, ты его выкладываешь в общий доступ, так что пусть все пользуются им как хотят. Тебе ведь от этого ни тепло, ни холодно. :)
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
  • Автор ресурса
  • #18
Флуд/Оффтоп
Есть там постоянный. Оверлей при спавне, в таймере ставишь 0 - вот тебе он и навсегда.
Мой плагин тоже не ахти, ему уже два года, а мне все лень им вплотную заняться. Но ерунду в виде "антикопипаст" никогда не понимал, ты его выкладываешь в общий доступ, так что пусть все пользуются им как хотят. Тебе ведь от этого ни тепло, ни холодно. :)
Оффтоп
 
Последнее редактирование:

xstage

🏹
Сообщения
726
Реакции
754
Оффтоп
Так ты что ли придумал идею с этим плагином? Ее до тебя ещё 100 раз реализовали. Так что фактически твоей роли тут нет, кроме переписывания старого плагина, который не понятно чем тебе не угодил.
А эта "антипаста" как вообще может помочь? Люди все равно сменят автора и будут использовать плагин, она просто добавит нагрузку на сервер. Или ты думаешь кто-то посмотрит код и увидит эту лябяду с циклами и поймет, что автор ты?
 

Rolzzandik

Участник
Сообщения
492
Реакции
234
  • Автор ресурса
  • #20
Матерная речь
Так ты что ли придумал идею с этим плагином? Ее до тебя ещё 100 раз реализовали. Так что фактически твоей роли тут нет, кроме переписывания старого плагина, который не понятно чем тебе не угодил.
А эта "антипаста" как вообще может помочь? Люди все равно сменят автора и будут использовать плагин, она просто добавит нагрузку на сервер. Или ты думаешь кто-то посмотрит код и увидит эту лябяду с циклами и поймет, что автор ты?
Ой <cut>, я уже даже спорить с вами не буду.
В этой теме что-то адекватное сказали @Grey83 и @Faya™, за что им отдельное спасибо. А твои слова не несут никакого смысла. У каждого свои взгляды на опенсорс плагиры
 
Последнее редактирование модератором:
Сверху Снизу