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

Kill Overlay Manager 1.4.3

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@ColdWind, сегодня гляну. Логи точно в папке соурсмода глядел? У них и имя errors_*.log.
А путь дефолтом - /cstrike/addons/sourcemod/logs/errors_202*.log
 

ColdWind

Участник
Сообщения
68
Реакции
29
@ColdWind, сегодня гляну. Логи точно в папке соурсмода глядел? У них и имя errors_*.log.
А путь дефолтом - /cstrike/addons/sourcemod/logs/errors_202*.log
Смотрел, ерроров нет. Оверы после растарта/смены карты всегда не отображаются, потом по ходу игры в какой то момент появляются, потом опять могут исчезнуть, причина не ясна 🙄 . Но в версии до фикса они всегда отображались
 

ColdWind

Участник
Сообщения
68
Реакции
29
т.е. прекеш точно есть
Ну смотри..
За террористов, он появляется в начале раунда, пропадает если свернуть и развернуть клиент игры, на месте где должен был быть оверлей идет зацикливание толи оверлея толи какой то текстурки, я так и не понял чего, она прозрачная и постоянно мелькает (только в полноэкранном режиме, в оконном он не пропадает при сворачивании)
За кт он впринципе не появляется не в начале раунда не в конце, да вообще за кт я его не вижу.
Проверял с олд клиента и км клиента, результат одинаковый
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
пропадает если свернуть и развернуть клиент игры
Вот про это я ничего сказать не могу: никогда не проводил таких опытов с оверлеями.
Сообщения автоматически склеены:

За кт он впринципе не появляется не в начале раунда не в конце, да вообще за кт я его не вижу.
Добавил ещё отладочных сообщений в лог при ошибках и немного код изменил.
Пробуй такой вариант.
 

Вложения

  • Kill_Overlay 1.4.1_03.05.2025.sp
    7.1 КБ · Просмотры: 14
Последнее редактирование:

MODER

Совместно с AI
Сообщения
44
Реакции
32
  • Автор ресурса
  • #26
Ну смотри..
За террористов, он появляется в начале раунда, пропадает если свернуть и развернуть клиент игры, на месте где должен был быть оверлей идет зацикливание толи оверлея толи какой то текстурки, я так и не понял чего, она прозрачная и постоянно мелькает (только в полноэкранном режиме, в оконном он не пропадает при сворачивании)
За кт он впринципе не появляется не в начале раунда не в конце, да вообще за кт я его не вижу.
Проверял с олд клиента и км клиента, результат одинаковый

Перевод: killoverlay.phrases.txt:
"Phrases"
{
    "ConfigNotFound"
    {
        "en"    "Could not load config file!"
        "ru"    "Не удалось загрузить файл конфигурации!"
    }

    "CommandInGameOnly"
    {
        "en"    "This command can only be used in-game!"
        "ru"    "Эта команда доступна только в игре!"
    }

    "OverlayEnabled"
    {
        "en"    "Kill overlays enabled"
        "ru"    "Оверлеи убийств включены"
    }

    "OverlayDisabled"
    {
        "en"    "Kill overlays disabled"
        "ru"    "Оверлеи убийств выключены"
    }
}
 

Вложения

  • Kill_Overlay1_4.sp
    5 КБ · Просмотры: 8
  • Kill_Overlay1_4.smx
    6.1 КБ · Просмотры: 2

ColdWind

Участник
Сообщения
68
Реакции
29
Вот про это я ничего сказать не могу: никогда не проводил таких опытов с оверлеями.
Сообщения автоматически склеены:


Добавил ещё отладочных сообщений в лог при ошибках и немного код изменил.
Пробуй такой вариант.
Оверы вообще перестали показываться
Сообщения автоматически склеены:

Перевод: killoverlay.phrases.txt:
"Phrases"
{
    "ConfigNotFound"
    {
        "en"    "Could not load config file!"
        "ru"    "Не удалось загрузить файл конфигурации!"
    }

    "CommandInGameOnly"
    {
        "en"    "This command can only be used in-game!"
        "ru"    "Эта команда доступна только в игре!"
    }

    "OverlayEnabled"
    {
        "en"    "Kill overlays enabled"
        "ru"    "Оверлеи убийств включены"
    }

    "OverlayDisabled"
    {
        "en"    "Kill overlays disabled"
        "ru"    "Оверлеи убийств выключены"
    }
}
Проверил. Вроде как все нормально отображается и не пропадает за обе команды.
Такой вопрос, с какой целью показывается овер при наблюдении за игроками и после смерти, если он не отображает реальный стрик игрока 🤔
up иногда все-таки пропадают после сворачивания
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
Оверы вообще перестали показываться
Предьяви пожалуста файл лога ошибок SM (прикрепи к сообщению) и список плагинов на сервере (выдаётся в консоли сервера по команде sm plugins list).
 

ColdWind

Участник
Сообщения
68
Реакции
29
Предьяви пожалуста файл лога ошибок SM (прикрепи к сообщению) и список плагинов на сервере (выдаётся в консоли сервера по команде sm plugins list).
Предъявлять нечего 🙂 еррор логов нет. Стоит чистый ареновский см от годтма 1.11 с деф плагинами, комплю так-же на 1.11
 

MODER

Совместно с AI
Сообщения
44
Реакции
32
  • Автор ресурса
  • #31
Предьяви пожалуста файл лога ошибок SM (прикрепи к сообщению) и список плагинов на сервере (выдаётся в консоли сервера по команде sm plugins list).
Если использовать твой код, то нужно внести пару изменений и он заработает:
Код:
#pragma semicolon 1
#pragma newdecls required

#include <sdktools_stringtables>
#include <clientprefs>

#define OVERLAYS_CONFIG    "configs/kill_overlays.cfg"
#define MAX_OVERLAYS    6

static const char
    PL_VER[]    = "1.4.1_03.05.2025 (rewritten by Grey83)",
    //Заменили TEAM на массив из двух строк
    TEAM[2][]    = {"Terrorist", "Counter-Terrorist"},
    COLOR[][]    = {"\x07FFFFFF", "\x04", "\x03", "\x01"};

public Plugin myinfo =
{
    name        = "Kill Overlay Manager",
    version        = PL_VER,
    description    = "Shows different overlays based on player kills in round",
    author        = "MODER SHOP",
    url            = "https://modershop.ru https://hlmod.net/resources/4477/"
}

Handle
    g_hOverlayCookie;
bool
    bCSS,
    bLate,
    bShow[MAXPLAYERS+1],
    bStartMessage;
int
    iColor,
    iKills[MAXPLAYERS+1],
    iOverlay[MAXPLAYERS+1] = {-1, ...};
char
    sOverlay[2][MAX_OVERLAYS][PLATFORM_MAX_PATH];

public APLRes AskPluginLoad2(Handle myself, bool late, char[] error, int err_max)
{
    bCSS = GetEngineVersion() == Engine_CSS;
    bLate = late;
    return APLRes_Success;
}

public void OnPluginStart()
{
    LoadTranslations("killoverlay.phrases");

    CreateConVar("sm_killoverlay_version", PL_VER, "Kill Overlay Manager Version", FCVAR_SPONLY|FCVAR_DONTRECORD|FCVAR_NOTIFY);

    ConVar cvar = CreateConVar("sm_killoverlay_msgcolor", "1", "Color of round start message (0=white, 1=green, 2=team color)", _, true, _, true, 2.0);
    cvar.AddChangeHook(CVarChange);
    CVarChange(cvar, NULL_STRING, NULL_STRING);

    RegConsoleCmd("sm_kill", Cmd_Overlay, "Toggle kill overlays on/off");

    g_hOverlayCookie = RegClientCookie("kill_overlay_pref", "Kill Overlay Preference", CookieAccess_Protected);

    HookEvent("round_freeze_end", Event_RoundStart, EventHookMode_PostNoCopy);
    HookEvent("round_end", Event_RoundEnd, EventHookMode_PostNoCopy);
    HookEvent("player_team", Event_PlayerTeam);
    HookEvent("player_spawn", Event_PlayerSpawn);
    HookEvent("player_death", Event_PlayerDeath);

    if(!bLate) return;
    for(int i; ++i <= MaxClients;) if(IsClientInGame(i) && AreClientCookiesCached(i)) OnClientCookiesCached(i);
}

public void CVarChange(ConVar cvar, const char[] oldValue, const char[] newValue)
{
    iColor = cvar.IntValue;
    if(!iColor && !bCSS) iColor = 3;
}

public void OnMapStart()
{
    for(int i; i < MAX_OVERLAYS; i++) sOverlay[0][i][0] = sOverlay[1][i][0] = 0;

    char path[PLATFORM_MAX_PATH];
    BuildPath(Path_SM, path, sizeof(path), OVERLAYS_CONFIG);

    KeyValues kv = new KeyValues("KillOverlays");
    if(!kv.ImportFromFile(path))
    {
        LogError("Config \"%s\" not found.", path);
        delete kv;
        return;
    }

    bStartMessage = kv.GetNum("show_roundstart_message", 1) == 1;

    // Используем TEAM[0] и TEAM[1] вместо TEAM[pos]
    if(!PrecacheOverlay(kv, 0) && !PrecacheOverlay(kv, 1)) SetFailState("Config is empty!");

    delete kv;
}

bool PrecacheOverlay(KeyValues kv, int teamIndex)
{
    kv.Rewind();
    //Используем TEAM[teamIndex] вместо TEAM[pos]
    if(!kv.JumpToKey(TEAM[teamIndex]))
    {
        LogError("Can't find section \"%s\".", TEAM[teamIndex]);
        return false;
    }

    int num;
    char key[8], buffer[PLATFORM_MAX_PATH], path[PLATFORM_MAX_PATH];
    for(int i; i < MAX_OVERLAYS; i++)
    {
        FormatEx(key, sizeof(key), "kill%d", i);
        kv.GetString(key, buffer, PLATFORM_MAX_PATH);
        if(!TrimString(buffer))
        {
            LogError("Empty string for key \"%s\".", key);
            continue;
        }

        FormatEx(path, sizeof(path), "materials/%s.vmt", buffer);
        if(!PrecacheModel(path, true))
        {
            LogError("Can't precache \"%s\" for \"%s\".", path, key);
            continue;
        }

        AddFileToDownloadsTable(path);

        FormatEx(path, sizeof(path), "materials/%s.vtf", buffer);
        AddFileToDownloadsTable(path);

        strcopy(sOverlay[teamIndex][i], sizeof(sOverlay[][]), buffer);
        num++;
    }

    if(num < MAX_OVERLAYS) LogError("Added overlays for %s: %i/%i.", TEAM[teamIndex], num, MAX_OVERLAYS);

    return !!num;
}

public void OnClientCookiesCached(int client)
{
    if(IsFakeClient(client)) return;

    char sValue[4];
    GetClientCookie(client, g_hOverlayCookie, sValue, sizeof(sValue));
    bShow[client] = sValue[0] != '0';
}

public void OnClientDisconnect(int client)
{
    iKills[client] = 0;
    iOverlay[client] = -1;
}

public Action Cmd_Overlay(int client, int args)
{
    if(!client) return Plugin_Handled;

    bShow[client] ^= true;
    SetClientCookie(client, g_hOverlayCookie, bShow[client] ? "1" : "0");

    if(bShow[client])
    {
        ShowCurrentOverlay(client);
        PrintToChat(client, "\x04[KILL OVERLAY] \x01%T", "Overlay_Enabled", client, iKills[client]);
    }
    else
    {
        ClientCommand(client, "r_screenoverlay \"\"");
        PrintToChat(client, "\x04[KILL OVERLAY] \x01%T", "Overlay_Disabled", client);
    }

    return Plugin_Handled;
}

public void Event_RoundStart(Event event, const char[] name, bool dontBroadcast)
{
    CreateTimer(0.5, Timer_ShowInitialOverlays);

    if(bStartMessage) PrintToChatAll("\x04[KILL OVERLAY] %s%t", COLOR[iColor], "RoundStart_Message");
}

public Action Timer_ShowInitialOverlays(Handle timer)
{
    for(int i; ++i <= MaxClients;) if(IsValidClient(i) && iKills[i] != iOverlay[i]) SendOverlay(i);
    return Plugin_Stop;
}

public void Event_RoundEnd(Event event, const char[] name, bool dontBroadcast)
{
    for(int i = 1; i <= MaxClients; i++) OnClientDisconnect(i);
}

public void Event_PlayerSpawn(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(client && !IsFakeClient(client) && iOverlay[client] == -1) SendOverlay(client);
}

public void Event_PlayerDeath(Event event, const char[] name, bool dontBroadcast)
{
    int victim = GetClientOfUserId(event.GetInt("userid"));
    if(victim) OnClientDisconnect(victim);

    int attacker = GetClientOfUserId(event.GetInt("attacker"));
    if(attacker && !IsFakeClient(attacker))
    {
        iKills[attacker]++;
        if(bShow[attacker]) ShowCurrentOverlay(attacker);
    }
}

void ShowCurrentOverlay(int client)
{
    if(!IsValidClient(client)) return;

    int team = GetClientTeam(client);
    //Добавляем проверку на границы массива
    if(team < 2 || team > 3)
    {
        ClientCommand(client, "r_screenoverlay \"\"");
        iOverlay[client] = -1;
        return;
    }

    int kills = iKills[client];
    if(kills > 5) kills = 5;
    if(iOverlay[client] != kills) SendOverlay(client, team, kills);
}

public void Event_PlayerTeam(Event event, const char[] name, bool dontBroadcast)
{
    int client = GetClientOfUserId(event.GetInt("userid"));
    if(!client) return;

    iOverlay[client] = -1;
    iKills[client] = 0;

    SendOverlay(client, event.GetInt("team"), _, true);
}

void SendOverlay(int client, int team = -1, int kills = 0, bool timer = false)
{
    if(!bShow[client]) return;

    if(team == -1) team = GetClientTeam(client);
    //Добавляем проверку на границы массива
    if(team < 2 || team > 3 || !sOverlay[team - 2][kills][0]) return;

    if(!timer)
    {
        ClientCommand(client, "r_screenoverlay \"%s\"", sOverlay[team - 2][kills]);
        iOverlay[client] = kills > 0 ? kills : 0;
    }
    else CreateTimer(0.5, Timer_ShowOverlayAfterTeamChange, GetClientUserId(client), TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_ShowOverlayAfterTeamChange(Handle timer, int userid)
{
    int client = GetClientOfUserId(userid);
    if(client) SendOverlay(client);
    return Plugin_Stop;
}

bool IsValidClient(int client)
{
    return IsClientInGame(client) && !IsFakeClient(client);
}
Сообщения автоматически склеены:
 
Последнее редактирование:

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
еррор логов нет
так включи
емнип, если они включены, то создаются каждый день независимо от наличия ошибок (без ошибок внутри просто пара строк, что файл лога создан)
Сообщения автоматически склеены:

@MODER, я во второй версии как раз убрал одну строку, т.к. часть текста повторяется и не имеет смысла хранить оба варианта.
 

MODER

Совместно с AI
Сообщения
44
Реакции
32
  • Автор ресурса
  • #34
так включи
емнип, если они включены, то создаются каждый день независимо от наличия ошибок (без ошибок внутри просто пара строк, что файл лога создан)
Сообщения автоматически склеены:

@MODER, я во второй версии как раз убрал одну строку, т.к. часть текста повторяется и не имеет смысла хранить оба варианта.
Посмотри последнюю версию которую я выложил, я вроде нормально уже окончательно переделал её
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
В CS:S не бывает индекс команды больше 3 (разве что в каком-нибудь моде, где создаётся больше 4 команд, да и то я только один такой мод помню)
Заменили TEAM на массив из двух строк
...
Используем TEAM[teamIndex] вместо TEAM[pos]
в версии 1.4.0_02.05.2025 так и было в коде
 

Sammit92

Участник
Сообщения
57
Реакции
16
У некоторых игроков не скачивается почему-то tt_2. vtf и в итоге у них фиолетовый экран на 1 убийстве(1 карточка).
При чём очень странно, у всех остальных скачивается всё нормально.
Что бы это могло быть?
 

Grey83

не пишу плагины с весны 2022
Сообщения
8,519
Реакции
4,979
@Sammit92, а другие файлы скачиваются хоть?
 

Sammit92

Участник
Сообщения
57
Реакции
16
Да, у многих других игроков, в том числе и у меня скачиваются нормально все файлы.
Но вот насчиталось уже трое, у которых не качается 1 файл. (Возможно 2-3), а все остальные скачиваются. Странность вот такая.
Это прям мистика какая-то.
 

MODER

Совместно с AI
Сообщения
44
Реакции
32
  • Автор ресурса
  • #39
Да, у многих других игроков, в том числе и у меня скачиваются нормально все файлы.
Но вот насчиталось уже трое, у которых не качается 1 файл. (Возможно 2-3), а все остальные скачиваются. Странность вот такая.
Это прям мистика какая-то.
Магия 🪄✨
 

Synd1qate

Участник
Сообщения
744
Реакции
259
У некоторых игроков не скачивается почему-то tt_2. vtf и в итоге у них фиолетовый экран на 1 убийстве(1 карточка).
При чём очень странно, у всех остальных скачивается всё нормально.
Что бы это могло быть?
У ребят наверно cfg стоит не родной, в котором условно какой нибудь cl_downloafilter 0
 
Сверху Снизу