[OS] Overlay System

[OS] Overlay System 2.1 fix

Нет прав для скачивания

suremiur

оверлеи в армии
Сообщения
416
Реакции
361
@Emptyc Да, занесла нелёгкая!)
Давай тогда вызовем @Rostu, там делов на 6 строк, только ему все это будет удобнее сделать, чем мне. Брат, выручай людей. <3
 
Сообщения
44
Реакции
0
Здравствуйте. Помогите пожалуйста. Установил этот плагин, но он не работает, в консоле пишет:

Error reading file resource/flash/undefined_small.png.
KeyValues Error: LoadFromBuffer: missing { in file materials/overlay/k31z.vmt line 2

KeyValues Error: LoadFromBuffer: missing { in file materials/overlay/k31z.vmt line 4

KeyValues Error: LoadFromBuffer: missing { in file materials/overlay/k31z.vmt line 5

KeyValues Error: LoadFromBuffer: missing { in file materials/overlay/k31z.vmt line 6
 
Сообщения
300
Реакции
79
Здравствуйте. Помогите пожалуйста. Установил этот плагин, но он не работает, в консоле пишет:

Error reading file resource/flash/undefined_small.png.
KeyValues Error: LoadFromBuffer: missing { in file materials/overlay/k31z.vmt line 2

KeyValues Error: LoadFromBuffer: missing { in file materials/overlay/k31z.vmt line 4

KeyValues Error: LoadFromBuffer: missing { in file materials/overlay/k31z.vmt line 5

KeyValues Error: LoadFromBuffer: missing { in file materials/overlay/k31z.vmt line 6
Ошибка в оверлее
 
Сообщения
221
Реакции
9
А можно сделать, чтобы всегда показывался баннер с рекламой? Или может это другой плагин какой-то?
 
Сообщения
221
Реакции
9
ставим баннер при появлении на 2930290 секунд.
upload_2019-6-26_21-1-15.png
сделал вот так, было просто 0.0, но оверлей пропадал , с 2930290 секунд прокатит? Если макс написано 30 *_*
--- Добавлено позже ---
а вывод сообщений с рекламы типа C , которые по середине экрана появляются, могут убирать баннер?
--- Добавлено позже ---
не понимаю почему пропадает оверлей, один тестирую все ок, заходит еще пару человек и начинается( как только заходит еще один человек на серв, оверлей пропадает у меня, у него появляется, потом тоже пропадает, если я себя убиваю, то оверлей возвращается при возрождении, но серв бхоп, поэтому что-то не то
 

Вложения

Последнее редактирование:
Сообщения
507
Реакции
53
сделал вот так, было просто 0.0, но оверлей пропадал , с 2930290 секунд прокатит? Если макс написано 30 *_*
--- Добавлено позже ---
а вывод сообщений с рекламы типа C , которые по середине экрана появляются, могут убирать баннер?
--- Добавлено позже ---
не понимаю почему пропадает оверлей, один тестирую все ок, заходит еще пару человек и начинается( и начинается вроде все при смене карты
Баннер убирают только другие баннеры, есть пагин при попадании делает красную обводку у прицела - это мини оверлей, из-за него пропадает.

Можно засунуть что бы этот оверлей показывало при смерти, в конце раунда, при спавне - и он точно не будет выключаться. И не 392482 сек, а 0 - навсегда
 
Сообщения
221
Реакции
9
Баннер убирают только другие баннеры, есть пагин при попадании делает красную обводку у прицела - это мини оверлей, из-за него пропадает.

Можно засунуть что бы этот оверлей показывало при смерти, в конце раунда, при спавне - и он точно не будет выключаться. И не 392482 сек, а 0 - навсегда
сейчас все включу, просто проблема в том, что сервер bhop , тут карты по 20+ минут и люди 20 + минут не умирают и т.д.((( но и плагина прицела тоже нет
--- Добавлено позже ---
вообщем потестил, все было включено, сижу один на сервере, все ок, заходит второй игрой пропадает кот, пока не убьешь себя и не возродишься заново (((( у игрока тоже самое, при смене карты, как карта сменяется, захожу я значит один - все ок, заходит второй игрок, все , пропадает оверлей, менялись местами с игроком, он заходит первый на серв, у него есть кот, захожу потом я, кот у него пропадает, у меня есть, что делац? Есть идеи?
--- Добавлено позже ---
такая же история и со вторым подобным серверов, отличие их лишь в том, что один у себя на пк, второй на myarena
--- Добавлено позже ---
и с некоторыми вип настройками похожая проблема, меняется карта, пока игрок их в вип меня не выкл и не включить обратно, не заработает, но если он умрет и восстановится, то все ок
 
Последнее редактирование:

Саша Шеин

Кому костылей?
Сообщения
1,569
Реакции
444
Выпала ошибочка, решил пробежать по коду ;)
Ошибочка
PHP:
[SM] Exception reported: Client index 0 is invalid
[SM] Blaming: OverlaySystem.smx
[SM] Call stack trace:
[SM]   [0] ClientCommand
[SM]   [1] Line 345, \OverlaySystem.sp::ShowDeathOverlayToClient
[SM]   [2] Line 235, \OverlaySystem.sp::Timer_Death
Причина ошибочки, не верное условие в таймере выше:
PHP:
public Action Timer_Death(Handle hTimer, int iUserId)
{
    int iClient = GetClientOfUserId(iUserId);
    float l_TimerPostOverlay = g_cDeathOverlayPostTimer.FloatValue;
 
    if (iClient && !IsPlayerAlive(iClient)) // Если игрок 0, то идем дальше ;)
    {
        return Plugin_Continue;
    }
    if (l_TimerPostOverlay == 0.0)
    {
        ShowDeathOverlayToClient(iClient);
    }
    if (l_TimerPostOverlay > 0.0)
    {
        CreateTimer(l_TimerPostOverlay, Timer_PostOverlay, iUserId, TIMER_FLAG_NO_MAPCHANGE);
    }
    return Plugin_Continue;
}
Вероятно должно быть так:
PHP:
public Action Timer_Death(Handle hTimer, int iUserId)
{
    int iClient = GetClientOfUserId(iUserId);
    float l_TimerPostOverlay = g_cDeathOverlayPostTimer.FloatValue;
 
    if (!iClient || IsPlayerAlive(iClient)) // Если игрок 0 или он жив, то прерываем
    {
        return Plugin_Continue;
    }
 
    if (l_TimerPostOverlay == 0.0)
    {
        ShowDeathOverlayToClient(iClient);
    }
    if (l_TimerPostOverlay > 0.0)
    {
        CreateTimer(l_TimerPostOverlay, Timer_PostOverlay, iUserId, TIMER_FLAG_NO_MAPCHANGE);
    }
    return Plugin_Continue;
}
-------------------------------
Немного того, как я бы подредактировал код ;)
PHP:
if ( sBuffer[0]  && sBuffer[0] != '/' && sBuffer[1] != '/' )
Можно заменить на
PHP:
if ( !sBuffer[0]  || sBuffer[0] == '/' || sBuffer[1] == '/' ){ continue; }
В SP условие ИЛИ работает по упрощенной схеме (Наглядный пример: Пример для уроков 6 и 7 из личной практики.), но это не главная причина, просто проще читается код, когда условия везде по одному типу, кто понял о чем я, тот понял ;-)
PHP:
public void Event_PlayerTeam(Event hEvent, const char[] sName, bool bDontBroadcast)
{
    int iUserId = hEvent.GetInt("userid");
    int iClient = GetClientOfUserId(iUserId);
    int OldTeam = GetEventInt(hEvent, "oldteam");
    if (OldTeam == 0)
    {
        g_bJoinOverlay[iClient] = true;
    }
}
Нет необходимости создавать переменную iUserId, она используется только один раз.
PHP:
public void Event_PlayerTeam(Event hEvent, const char[] sName, bool bDontBroadcast)
{
    int iClient = GetClientOfUserId(hEvent.GetInt("userid"));
    int OldTeam = GetEventInt(hEvent, "oldteam");
    if (OldTeam == 0)
    {
        g_bJoinOverlay[iClient] = true;
    }
}
Тоже лишние переменные
PHP:
public void OnClientPostAdminCheck(int iClient)
{
    int iUserId = GetClientUserId(iClient);
    int l_EnableOverlayWelcome = g_cWelcomeOverlay.IntValue;
    float l_TimerWelcomeOverlay = g_cWelcomeOverlayTimer.FloatValue;
    GetConVarString(g_cFlagHide, g_szFlag, sizeof(g_szFlag));
    if(!iClient || IsFakeClient(iClient) || CheckAdminFlags(iClient, ReadFlagString(g_szFlag)))
    {
        return;
    }
    if(l_EnableOverlayWelcome == 1 && l_TimerWelcomeOverlay > 0.0)
        {
            g_hKillWelcomeTimer[iClient] = CreateTimer(10.0, Timer_ToWelcome, iUserId, TIMER_FLAG_NO_MAPCHANGE);
        }
}
-->
PHP:
public void OnClientPostAdminCheck(int iClient)
{
    GetConVarString(g_cFlagHide, g_szFlag, sizeof(g_szFlag));
    if(!iClient || IsFakeClient(iClient) || CheckAdminFlags(iClient, ReadFlagString(g_szFlag)))
    {
        return;
    }
    if(g_cWelcomeOverlay.IntValue == 1 && g_cWelcomeOverlayTimer.FloatValue > 0.0)
        {
            g_hKillWelcomeTimer[iClient] = CreateTimer(10.0, Timer_ToWelcome, GetClientUserId(iClient), TIMER_FLAG_NO_MAPCHANGE);
        }
}
И в блоке Timer_ToWelcome, можно сделать так
PHP:
public Action Timer_ToWelcome (Handle hTimer, int iUserId)
{
    int iClient = GetClientOfUserId(iUserId);
    if (!iClient) { return Plugin_Stop; }
 
    ShowWelcomeOverlayToClient(iClient);
    CreateTimer(g_cWelcomeOverlayTimer.FloatValue, Timer_WelcomeOverlay, iUserId, TIMER_FLAG_NO_MAPCHANGE);
 
    if( g_cWelcomeOverlay.IntValue == 1 && g_hKillWelcomeTimer[iClient])
    {
        KillTimer(g_hKillWelcomeTimer[iClient]);
        g_hKillWelcomeTimer[iClient] = null;
    }
    return Plugin_Stop;
}
В Timer_WelcomeOverlay можно не создавать дополнительные переменные, например
PHP:
public Action Timer_WelcomeOverlay(Handle hTimer, int iData)
{
    iData = GetClientOfUserId(iData);
 
    if (!iData || g_hKillSpawnTimer[iData]) { return Plugin_Stop; }
 
    ResetOverlayToClient(iData);
 
    return Plugin_Stop;
}
В Event_PlayerDeath опять же лишнее переменные, они используются только по одному разу
PHP:
    int l_EnableOverlayDeath = g_cDeathOverlay.IntValue;
    int l_EnableOverlaySpawn = g_cSpawnOverlay.IntValue;
Тут можно не создавать iClient, а также проверка !IsFakeClient(iClient) не нужна, так как выше уже есть проверка на бота
PHP:
public Action Timer_Spawn(Handle hTimer, int iUserId)
{
    int iClient = GetClientOfUserId(iUserId);
 
    if ((iClient) && !IsFakeClient(iClient))
    {
        ResetOverlayToClient(iClient);
    }
    g_hKillSpawnTimer[iClient] = null;
    return Plugin_Stop;
}
------------------------
Не претендую на качество, мог и сам допустить опитяпки или косяки ;-)
--- Добавлено позже ---
Кстати, только заметил. Почему-то в таймере возвращается Plugin_Continue, хотя обычно Plugin_Stop . Так и было задумано?
 

Вложения

Сообщения
221
Реакции
9
Хм, так и не нашел решения проблемы, что при входе игрока на сервер баннер пропадает и остается только у игрока, который только что зашле
Как только раунд перезапускается - все ок у всех ,пока не зайдет новый игрок на сервер. Кто-то сталкивался?
На бхоп и сюрф серверах получается баннер виден только последнему игроку, который зашел на сервер )
 
Сверху