[CS: GO] Плагин/скрипт на большое окно очков всегда.

Статус
В этой теме нельзя размещать новые ответы.

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
Вообщем, существует ошибка, когда происходит смена сторон на сервере (mp_halftime 1), то рушится таблица очков ("scoreboard"), т.е. 5 игроков отображает, а остальные наплывают на само окно. Расширяется окно, когда много игроков на сервере и то не всегда. Возможно удастся создать плагин, который бы сообщал окну, что на сервере много игроков и давай расширяться, даже при нескольких, например.
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Сделай обычный режим, но тогда и mp_halftime не будет работать...
Оффтоп
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
Сделай обычный режим, но тогда и mp_halftime не будет работать...
Оффтоп
Ставил обычный там тоже ломается... Вэлв же рассчитало так, что их сервера забиваются битком всегда, а на обычные сервера не подумали...
 

Drumanid

Нестандартное звание
Сообщения
1,862
Реакции
1,748
Ставил обычный там тоже ломается... Вэлв же рассчитало так, что их сервера забиваются битком всегда, а на обычные сервера не подумали...
Выключи mp_halftime и все будет нормально, сам с этим долго мучался.
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
Выключи mp_halftime и все будет нормально, сам с этим долго мучался.
Я то выключил, про это знаю, но смена сторон нужна вообще)
--- Добавлено позже ---
Может есть плагин на смену сторон, без "халфтайм"?
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
В чём проблема пройтись циклом по всем игрокам и просто изменить им команду в конце N-го раунда?
--- Добавлено позже ---
PHP:
#include <cstrike>

public Plugin:myinfo =
{
    name = "HalfTime Replacer",
    author = "Danyas"
}

new iNumRound;

public OnPluginStart()
{
    HookEvent("round_end", Event_Round_End, EventHookMode_PostNoCopy);
}

public Event_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (++iNumRound == 10)
    {
        iNumRound = 0;
        for(new i = 1; i <= MaxClients; i++)
        {
            new team = GetClientTeam(i);
            if(IsClientInGame(i) && team == 3)
            {
                CS_SwitchTeam(i, 2);
            }
            else if(IsClientInGame(i) && team == 2)
            {
                CS_SwitchTeam(i, 3);
            }
        }
    }
}
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Так смена команд будет каждые 10 раундов. Оффтоп А если так и нужно, то при более ранней смене карты (rtv или админом) счёт нарушится и замена наступит куда раньше.
Оффтоп
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Так смена команд будет каждые 10 раундов. Оффтоп А если так и нужно, то при более ранней смене карты (rtv или админом) счёт нарушится и замена наступит куда раньше.
Оффтоп

Слепое написание подьехало
PHP:
#include <cstrike>

public Plugin:myinfo = 
{
    name = "HalfTime Replacer",
    author = "Danyas"
}

new iNumRound;
new iTargRound;
new Handle:hRounds;

public OnPluginStart()
{
    HookEvent("round_end", Event_Round_End, EventHookMode_PostNoCopy);
    hRounds = FindConVar("mp_maxrounds");
    if (hRounds == INVALID_HANDLE) SetFailState("somethink wrong");
    else 
    {
        iTargRound = GetConVarInt(hRounds) / 2 ;
    }
}

public Event_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (++iNumRound == iTargRound)
    {
        iNumRound = 0;
        for(new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i))
            {
                new team = GetClientTeam(i);
                if(team == 3)
                {
                    CS_SwitchTeam(i, 2);
                }
                else if(team == 2)
                {
                    CS_SwitchTeam(i, 3);
                }
            }
        }
    }
}
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
Слепое написание подьехало
PHP:
#include <cstrike>

public Plugin:myinfo =
{
    name = "HalfTime Replacer",
    author = "Danyas"
}

new iNumRound;
new iTargRound;
new Handle:hRounds;

public OnPluginStart()
{
    HookEvent("round_end", Event_Round_End, EventHookMode_PostNoCopy);
    hRounds = FindConVar("mp_maxrounds");
    if (hRounds == INVALID_HANDLE) SetFailState("somethink wrong");
    else
    {
        iTargRound = GetConVarInt(hRounds) / 2 ;
    }
}

public Event_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (++iNumRound == iTargRound)
    {
        iNumRound = 0;
        for(new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i))
            {
                new team = GetClientTeam(i);
                if(team == 3)
                {
                    CS_SwitchTeam(i, 2);
                }
                else if(team == 2)
                {
                    CS_SwitchTeam(i, 3);
                }
            }
        }
    }
}
Проверил первый вариант сейчас, работает, спасибо)) Только происходит молниеносно, могу попросить добавить сообщение в чат о смене сторон, может паузу маленькую или это осложнит?
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Проверил первый вариант сейчас, работает, спасибо)) Только происходит молниеносно, могу попросить добавить сообщение в чат о смене сторон, может паузу маленькую или это осложнит?

Перед iNumRound = 0;
добавляешь одно из (а можешь и всё сразу)
PrintToChatAll("Смена сторон"); // Вывод в чате
PrintCenterTextAll("Смена сторон"); // Вывод в окне снизу
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
Перед iNumRound = 0;
добавляешь одно из (а можешь и всё сразу)
PrintToChatAll("Смена сторон"); // Вывод в чате
PrintCenterTextAll("Смена сторон"); // Вывод в окне снизу
Спасибо)) Ещё такой вопросик, команды сменились, а очки команд остались на месте, это уже не сменить, да?
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Спасибо)) Ещё такой вопросик, команды сменились, а очки команд остались на месте, это уже не сменить, да?
PHP:
#include <cstrike>

public Plugin:myinfo = 
{
    name = "HalfTime Replacer",
    author = "Danyas"
}

new iNumRound;
new iTargRound;
new Handle:hRounds;

public OnPluginStart()
{
    HookEvent("round_end", Event_Round_End, EventHookMode_PostNoCopy);
    hRounds = FindConVar("mp_maxrounds");
    if (hRounds == INVALID_HANDLE) SetFailState("somethink wrong");
    else 
    {
        iTargRound = GetConVarInt(hRounds) / 2 ;
    }
}

public Event_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (++iNumRound == iTargRound)
    {
        new tempscoret = GetTeamScore(2);
        new tempscorect = GetTeamScore(3);
       
        SetTeamScore(3, tempscoret);
        SetTeamScore(2, tempscorect);
       
        PrintToChatAll("Смена сторон");
        PrintCenterTextAll("Смена сторон");       
        iNumRound = 0;
        for(new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i))
            {
                new team = GetClientTeam(i);
                if(team == 3)
                {
                    CS_SwitchTeam(i, 2);
                }
                else if(team == 2)
                {
                    CS_SwitchTeam(i, 3);
                }
            }
        }
    }
}
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
PHP:
#include <cstrike>

public Plugin:myinfo =
{
    name = "HalfTime Replacer",
    author = "Danyas"
}

new iNumRound;
new iTargRound;
new Handle:hRounds;

public OnPluginStart()
{
    HookEvent("round_end", Event_Round_End, EventHookMode_PostNoCopy);
    hRounds = FindConVar("mp_maxrounds");
    if (hRounds == INVALID_HANDLE) SetFailState("somethink wrong");
    else
    {
        iTargRound = GetConVarInt(hRounds) / 2 ;
    }
}

public Event_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (++iNumRound == iTargRound)
    {
        new tempscoret = GetTeamScore(2);
        new tempscorect = GetTeamScore(3);
      
        SetTeamScore(3, tempscoret);
        SetTeamScore(2, tempscorect);
      
        PrintToChatAll("Смена сторон");
        PrintCenterTextAll("Смена сторон");      
        iNumRound = 0;
        for(new i = 1; i <= MaxClients; i++)
        {
            if(IsClientInGame(i))
            {
                new team = GetClientTeam(i);
                if(team == 3)
                {
                    CS_SwitchTeam(i, 2);
                }
                else if(team == 2)
                {
                    CS_SwitchTeam(i, 3);
                }
            }
        }
    }
}
Благодарю, вроде бы всё что хотел :D
--- Добавлено позже ---
Теперь с ошибкой компилируется.. Возможно с ошибкой написаны функции?
Оффтоп
 
Последнее редактирование:

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
SetTeamScore(3, tempscoret);
SetTeamScore(2, tempscorect);
Ничего так не выйдет. Очки сбросятся на обычные уже в следующем раунде.
PrintToChatAll("Смена сторон");
PrintCenterTextAll("Смена сторон");
А в том же цикле, где стороны меняешь - никак сделать?)
 

Danyas

Участник
Сообщения
2,173
Реакции
1,072
Ничего так не выйдет. Очки сбросятся на обычные уже в следующем раунде.
А в том же цикле, где стороны меняешь - никак сделать?)
Сделал что бы было понятней.

А почему через SetTeamScore ничего не выйдет? Из-за особенностей кысыго?
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
Из-за особенностей кысыго?
Вроде того. Игра сохраняет их и устанавливает заново. Поэтому, лучше тогда просто:
PHP:
#include <cstrike>

public Plugin:myinfo =
{
    name = "HalfTime Replacer",
    author = "Danyas"
}

new iNumRound;
new iTargRound;

public OnPluginStart()
{
    decl Handle:hRounds;
    if ((hRounds = FindConVar("mp_maxrounds")) == INVALID_HANDLE) SetFailState("somethink wrong");
    HookEvent("round_end", Event_Round_End, EventHookMode_PostNoCopy);
    iTargRound = GetConVarInt(hRounds) / 2;
    HookConVarChange(hRounds, Change_CvarRounds);
}

public Change_CvarRounds(Handle:hRounds, String:oldValue[], String:newValue[]) iTargRound = GetConVarInt(hRounds) / 2;

public OnConfigsExecuted() iNumRound = 0;

public Event_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (++iNumRound == iTargRound)
    {
        for (new i = 1; i <= MaxClients; ++i)
        {
            if (IsClientInGame(i))
            {
                switch (GetClientTeam(i))
                {
                    case 3:
                    {
                        CS_SwitchTeam(i, 2);
                        //PrintToChat(i, "Вы перемещены за команду Т.");
                    }
                    case 2:
                    {
                        CS_SwitchTeam(i, 3);
                        //PrintToChat(i, "Вы перемещены за команду КТ.");
                    }
                }
                PrintCenterText(i, "Смена сторон!");
                PrintToChat(i, "Смена сторон!");
            }
        }
    }
}
В этом варианте есть особенность (в плюс или минус): если смена сторон уже была, а квар изменился в большую сторону, то смена сторон может произойти ещё раз по новому значению. Оффтоп
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
Теперь с ошибкой компилируется.. Возможно с ошибкой написаны
Оффтоп
Вроде того. Игра сохраняет их и устанавливает заново. Поэтому, лучше тогда просто:
PHP:
#include <cstrike>

public Plugin:myinfo =
{
    name = "HalfTime Replacer",
    author = "Danyas"
}

new iNumRound;
new iTargRound;

public OnPluginStart()
{
    decl Handle:hRounds;
    if ((hRounds = FindConVar("mp_maxrounds")) == INVALID_HANDLE) SetFailState("somethink wrong");
    HookEvent("round_end", Event_Round_End, EventHookMode_PostNoCopy);
    iTargRound = GetConVarInt(hRounds) / 2;
    HookConVarChange(hRounds, Change_CvarRounds);
}

public Change_CvarRounds(Handle:hRounds, String:oldValue[], String:newValue[]) iTargRound = GetConVarInt(hRounds) / 2;

public OnConfigsExecuted() iNumRound = 0;

public Event_Round_End(Handle:event, const String:name[], bool:dontBroadcast)
{
    if (++iNumRound == iTargRound)
    {
        for (new i = 1; i <= MaxClients; ++i)
        {
            if (IsClientInGame(i))
            {
                switch (GetClientTeam(i))
                {
                    case 3:
                    {
                        CS_SwitchTeam(i, 2);
                        //PrintToChat(i, "Вы перемещены за команду Т.");
                    }
                    case 2:
                    {
                        CS_SwitchTeam(i, 3);
                        //PrintToChat(i, "Вы перемещены за команду КТ.");
                    }
                }
                PrintCenterText(i, "Смена сторон!");
                PrintToChat(i, "Смена сторон!");
            }
        }
    }
}
В этом варианте есть особенность (в плюс или минус): если смена сторон уже была, а квар изменился в большую сторону, то смена сторон может произойти ещё раз по новому значению. Оффтоп
Спасибо в очередной раз, работает как мне показалось, надо только убедиться, но у меня на 15 раунде смена, не скоро это)))
 

AlmazON

Не путать с самим yand3xmail
Сообщения
5,099
Реакции
2,755
у меня на 15 раунде смена, не скоро это
Вбей квар mp_maxrounds в консоль сервера на маленькое значение и плагин сработает. Потом на обычное - опять сработает. В отличии от варианта @Danyas, этот будет слушаться квара в "онлайн"-режиме.
 

Dreizehnt

Доминик
Сообщения
1,160
Реакции
798
Вбей квар mp_maxrounds в консоль сервера на маленькое значение и плагин сработает. Потом на обычное - опять сработает. В отличии от варианта @Danyas, этот будет слушаться квара в "онлайн"-режиме.
Сейчас ничего не менял, так же на 15 отследил, но теперь счет команд не перенесся.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу