Существует ли плагин "При достижении кол-ва побед происходит рестарт"?

Тема в разделе "Запросы", создана пользователем skynet2040, 18 янв 2014.

  1. skynet2040

    skynet2040

    Сообщения:
    43
    Симпатии:
    0
    Ребят в общем видел такую штуку на серве паблике, когда одна из команд делает 50 побед то счет сбрасывается, а в чате писалось типо Кт или Т победили. Есть такой плагин вообще или писать надо ?
     
  2. CTe6eJIeK_vRn

    CTe6eJIeK_vRn Супер-модератор

    Сообщения:
    2.014
    Симпатии:
    1.798
    Re: Существует ли плагин ?

    В паблике такого нет, но такой написал R1KO, за что ему говорите спасибо:
    PHP:
    #include <sourcemod>
    #include <sdktools>

    new Handle:g_hAutoRestartRounds INVALID_HANDLE,
        
    Handle:g_hAutoRestartEnabled INVALID_HANDLE,
        
    bool:g_bEnabled true,
        
    g_iWins,
        
    StringsoundFile[] = "ambient/misc/brass_bell_c.wav";

    public 
    Plugin:myinfo =
    {
        
    name "Autorestartgame",
        
    author "R1KO",
        
    description "Автоматический рестарт при достижении лимита побед",
        
    version "1.1",
        
    url "https://hlmod.ru"
    };

    public 
    OnPluginStart()
    {
        
    g_hAutoRestartEnabled CreateConVar("sm_autorestartgame_enabled""1""Вкл/Выкл плагин."FCVAR_NONEtrue0.0true1.0);
        
    g_hAutoRestartRounds CreateConVar("sm_autorestartgame_round""50""Количество раундов до рестарта."FCVAR_NONEtrue4.0);
        
    HookEvent("round_end"OnRoundEnd);
        
    HookConVarChange(g_hAutoRestartRoundsConVarChanges);
        
    HookConVarChange(g_hAutoRestartEnabledConVarChanges);
        
    decl String:fileSound[128];
        
    Format(fileSoundsizeof(fileSound), "sound/%s"soundFile);
        
    AddFileToDownloadsTable(fileSound);
        
    PrecacheSound(soundFiletrue);
    }

    public 
    OnConfigsExecuted()
    {
        
    g_iWins GetConVarInt(g_hAutoRestartRounds);
        
    g_bEnabled GetConVarBool(g_hAutoRestartEnabled);
    }

    public 
    Action:OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if(
    g_bEnabled)
        {
            new 
    ScoreT GetTeamScore(2), ScoreCT GetTeamScore(3);
            if(
    ScoreT == g_iWins-|| ScoreCT == g_iWins-2)
                
    PrintToChatAll("\x07FF0000Внимание! \x0700FF00Осталось 2 победы одной из команд до рестарта игры.");
            else if(
    ScoreT == g_iWins-|| ScoreCT == g_iWins-1)
                
    PrintToChatAll("\x07FF0000Внимание! \x0700FF00Осталась 1 победа одной из команд до рестарта игры.");
            else if(
    ScoreT == g_iWins || ScoreCT == g_iWins)
            {
                
    ServerCommand ("mp_restartgame 5");
                
    PrintToChatAll("\x07FF0000Внимание! \x0700FF00Достигнут лимит побед. Будет произведен рестарт игры");
                for(new 
    1<= MaxClientsi++)
                    if(
    IsClientInGame(i) && !IsFakeClient(i))
                        
    ClientCommand(i"playgamesound %s"soundFile);
            }
        }
    }

    public 
    ConVarChanges(Handle:convar, const String:oldValue[], const String:newValue[])
    {
        if(
    convar == g_hAutoRestartRounds)
            
    g_iWins GetConVarInt(g_hAutoRestartRounds);
        if(
    convar == g_hAutoRestartEnabled)
            
    g_bEnabled GetConVarBool(g_hAutoRestartEnabled);
    }
    Есть желающие оптимизировать, пожалуйста
     
    R1KO нравится это.
  3. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.988
    Симпатии:
    2.986
    В данном случае нужно так:
    PHP:
    #include <sourcemod>
    #include <sdktools>

    #define SOUND "ambient/misc/brass_bell_c.wav"

    new Handle:g_hAutoRestartRounds INVALID_HANDLE,
        
    Handle:g_hAutoRestartEnabled INVALID_HANDLE,
        
    bool:g_bEnabled true,
        
    g_iWins;

    public 
    Plugin:myinfo =
    {
        
    name "Autorestartgame",
        
    author "R1KO",
        
    description "Автоматический рестарт при достижении лимита побед",
        
    version "1.1"
    };

    public 
    OnPluginStart()
    {
        
    g_hAutoRestartEnabled CreateConVar("sm_autorestartgame_enabled""1""Вкл/Выкл плагин."FCVAR_NONEtrue0.0true1.0);
        
    g_hAutoRestartRounds CreateConVar("sm_autorestartgame_round""50""Количество раундов до рестарта."FCVAR_NONEtrue4.0);
        
    g_iWins GetConVarInt(g_hAutoRestartRounds);
        
    g_bEnabled GetConVarBool(g_hAutoRestartEnabled);
        
    HookConVarChange(g_hAutoRestartRoundsConVarChanges);
        
    HookConVarChange(g_hAutoRestartEnabledConVarChanges);
        
    decl String:fileSound[128];
        
    FormatEx(fileSoundsizeof(fileSound), "sound/%s"SOUND);
        
    AddFileToDownloadsTable(fileSound);
        
    PrecacheSound(SOUNDtrue);
        
    HookEvent("round_end"Event_OnRoundEnd);
    }

    public 
    Event_OnRoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if(
    g_bEnabled)
        {
            new 
    ScoreT GetTeamScore(2), ScoreCT GetTeamScore(3);
            if(
    ScoreT == g_iWins || ScoreCT == g_iWins)
            {
                
    ServerCommand ("mp_restartgame 5");
                
    PrintToChatAll("\x07FF0000Внимание! \x0700FF00Победили %s", (ScoreCT ScoreT) ? "\x0799CCFFКонтр-террористы""\x07FF4040Террористы");
                for(new 
    1<= MaxClientsi++)
                    if(
    IsClientInGame(i) && !IsFakeClient(i))
                        
    ClientCommand(i"playgamesound %s"SOUND);
            }
        }
    }

    public 
    ConVarChanges(Handle:convar, const String:oldValue[], const String:newValue[])
    {
        if(
    convar == g_hAutoRestartRoundsg_iWins GetConVarInt(g_hAutoRestartRounds);
        if(
    convar == g_hAutoRestartEnabledg_bEnabled GetConVarBool(g_hAutoRestartEnabled);
     
    Последнее редактирование: 19 янв 2014
  4. ☆★☆БАТЯ☆★☆™

    ☆★☆БАТЯ☆★☆™

    Сообщения:
    2.585
    Симпатии:
    1.341
    :)
     
  5. skynet2040

    skynet2040

    Сообщения:
    43
    Симпатии:
    0
    Спасибо огромное )))) Выручил))

    Добавлено через 52 секунды
    :beer::victory:
     
    Последнее редактирование: 19 янв 2014
  6. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    R1KO
    Оптимизируй
     
  7. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.988
    Симпатии:
    2.986
    The End Is Near..., каким образом?
     
  8. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.055
    Симпатии:
    345
    Где то слышал что вместо #define лучше const
    #define типо старый вариант что ли.
    PHP:
                for(new 1<= MaxClientsi++)
                    if(
    IsClientInGame(i) && !IsFakeClient(i))
                        
    ClientCommand(i"playgamesound %s"SOUND);
    Переписал бы так:
    PHP:
    for(new 1<= MaxClientsi++)
    {
        if (!
    IsClientInGame(i) || IsFakeClient(i))
        {
            continue;
        }
        
    ClientCommand(i"playgamesound %s"SOUND);
    }
    PHP:
    decl String:fileSound[128];
    Переписал бы так (Так как есть спец. размерность массива для таких случаев)
    PHP:
    decl String:fileSound[PLATFORM_MAX_PATH];
    Хм :
    PHP:
    HookEvent("round_end"OnRoundEnd);
    PHP:
    public:Action OnRoundEnd()
    PHP:
    #include <sdktools>
    Переписал бы так:
    PHP:
    #include <sdktools_stringtables>
    PHP:
    #include <sourcemod>
    не надо теперь компилятор автоматически подключает это.
     
    Последнее редактирование: 19 янв 2014
    R1KO нравится это.
  9. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    $define используется только при компиляции и не использует память во время работы плагина. Т.е.
    PHP:
    #define SOUND "misc/music.mp3"

    EmitSoundToAll(SOUND);
    после компиляции будет вида
    PHP:
    EmitSoundToAll("misc/music.mp3");
    просто заменяет значение при компиляции

    а что изменилось? Оптимальнее не стало, просто становится яснее человеку

    плохая затея, подключая только sdktools_stringtables, плагин не будет заставлять само расширение SDKTools загрузиться. И не будет знать загружено ли само расширение. Т.е. игнорируется код в конце sdktools.inc
    PHP:
    public Extension:__ext_sdktools 
    {
        
    name "SDKTools",
        
    file "sdktools.ext",
    #if defined AUTOLOAD_EXTENSIONS
        
    autoload 1,
    #else
        
    autoload 0,
    #endif
    #if defined REQUIRE_EXTENSIONS
        
    required 1,
    #else
        
    required 0,
    #endif
    };
    Но это расширение в основном загружается многими другими плагинами
    Надо или не надо, легче от этого не будет
     
    Vit_ amin и R1KO нравится это.
  10. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.988
    Симпатии:
    2.986
    Иправил. Насчет остального тебе ответили.
     
  11. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.055
    Симпатии:
    345
    Вопрос по теме, что ознчает сторока в файле
    #define PLUGIN_REQUIRE
     
  12. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.988
    Симпатии:
    2.986
    Vit_ amin, что все инклюды, которые будут подключены дальше, не обязательные.

    Например:
    PHP:
    #pragma semicolon 1
    #include <sourcemod>
    #include <sdktools>
    #include <dbi>
    #include <basecomm>
    #undef REQUIRE_PLUGIN // всё, что ниже - не обязательно для работы.
    #include <adminmenu>
    Если не будет basecomm или любого другого инклюда, плагин не запустится.
    А вот если не будет adminmenu, то запустится.
    Но работа плагина уже обеспечивается через LibraryExists
     
    Последнее редактирование: 14 май 2016
    AlmazON, Серый™ и Vit_ amin нравится это.
  13. skynet2040

    skynet2040

    Сообщения:
    43
    Симпатии:
    0
    Рико ! А у тебя случаем не завалялось плагина, такого чтоб админы простые могли биндом простым включать общий чат, ну тыпо была команда sm_alltalk а то сейчас только я могу биндом включить чат и то только sm_rcon sv alltalk . А у них нет доступа к ркон.
     
  14. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    все скомпилируется, просто если не будет плагина, для кого и предназначена библиотека adminmenu, плагин работать не будет (т.е. без работы плагина adminmenu его нативы использовать нельзя)
     
    AlmazON и R1KO нравится это.
  15. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.988
    Симпатии:
    2.986
    Может я попутал. Скомпилится, но стартовать плагин без них не будет.

    Тоесть если написано
    PHP:
    #undef REQUIRE_PLUGIN
    #include <basecomm>
    а инклюда не будет - он запуститcя.
     
    Последнее редактирование: 20 янв 2014
  16. CTe6eJIeK_vRn

    CTe6eJIeK_vRn Супер-модератор

    Сообщения:
    2.014
    Симпатии:
    1.798
    кароче) соберите нормальную версию
     
  17. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.988
    Симпатии:
    2.986
  18. The End Is Near...

    The End Is Near... Russian Roulette

    Сообщения:
    893
    Симпатии:
    659
    R1KO
    1. Можно обойтись без g_bEnabled

    2. По-моему, использование GetTeamScore затрачивает больше, чем банальный подсчет побед

    3. Функции AddFileToDownloadsTable и PrecacheSound не используют при старте плагина
     
    Серый™ и R1KO нравится это.
  19. Vit_ amin

    Vit_ amin BotManager001

    Сообщения:
    1.055
    Симпатии:
    345
    Ты имеешь ввиду через new wins =GetEventInt(event, "winner") узнавать победителя и прибавлять к переменной wins += 1 после составлять условие ?
     
  20. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    а вдруг счет обнулился командой mp_restartgame или изменился сторонним плагином?
    В этом случае GetTeamScore гарантирует дать точный счет.
     
    CTe6eJIeK_vRn и R1KO нравится это.