[CS:GO] SM STOPMUSIC MAPS

Тема в разделе "Counter-Strike: Global Offensive", создана пользователем DexKekcuk #13, 23 авг 2015.

  1. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Данный плагин блокирует музыку карты, но он это делает всего на один раунд. Хотелось бы сохранение на все остальные карты, плюс с повторной возможностью включения командой !onmusic, и так же отключение !stopmusic

    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <sdktools>

    #define PLUGIN_NAME     "Stop Map Music"
    #define PLUGIN_VERSION     "1.0.0"

    #define MAX_EDICTS        2048

    new Float:g_fCmdTime[MAXPLAYERS+1];
    new 
    g_iSoundEnts[MAX_EDICTS];
    new 
    g_iNumSounds;

    public 
    Plugin:myinfo =
    {
        
    name PLUGIN_NAME,
        
    author "GoD-Tony",
        
    description "Allows clients to stop ambient sounds played by the map",
        
    version PLUGIN_VERSION,
        
    url "http://www.sourcemod.net/"
    };

    public 
    OnPluginStart()
    {
        
    CreateConVar("sm_stopmusic_version"PLUGIN_VERSION"Stop Map Music"FCVAR_PLUGIN|FCVAR_NOTIFY|FCVAR_DONTRECORD);
        
        
    HookEvent("round_start"Event_RoundStartEventHookMode_PostNoCopy);
        
        
    RegConsoleCmd("sm_stopmusic"Command_StopMusic"Stops map music");
    }

    public 
    OnClientDisconnect_Post(client)
    {
        
    g_fCmdTime[client] = 0.0;
    }

    public 
    Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        
    // Ents are recreated every round.
        
    g_iNumSounds 0;
        
        
    // Find all ambient sounds played by the map.
        
    decl String:sSound[PLATFORM_MAX_PATH];
        new 
    entity INVALID_ENT_REFERENCE;
        
        while ((
    entity FindEntityByClassname(entity"ambient_generic")) != INVALID_ENT_REFERENCE)
        {
            
    GetEntPropString(entityProp_Data"m_iszSound"sSoundsizeof(sSound));
            
            new 
    len strlen(sSound);
            if (
    len && (StrEqual(sSound[len-3], "mp3") || StrEqual(sSound[len-3], "wav")))
            {
                
    g_iSoundEnts[g_iNumSounds++] = EntIndexToEntRef(entity);
            }
        }
    }

    public 
    Action:Command_StopMusic(clientargs)
    {
        
    // Prevent this command from being spammed.
        
    if (!client || g_fCmdTime[client] > GetGameTime())
            return 
    Plugin_Handled;
        
        
    g_fCmdTime[client] = GetGameTime() + 5.0;
        
        
    PrintToChat(client"[SM] Stopping map music...");
        
        
    // Run StopSound on all ambient sounds in the map.
        
    decl String:sSound[PLATFORM_MAX_PATH], entity;
        
        for (new 
    0g_iNumSoundsi++)
        {
            
    entity EntRefToEntIndex(g_iSoundEnts[i]);
            
            if (
    entity != INVALID_ENT_REFERENCE)
            {
                
    GetEntPropString(entityProp_Data"m_iszSound"sSoundsizeof(sSound));
                
    Client_StopSound(cliententitySNDCHAN_STATICsSound);
            }
        }
        
        return 
    Plugin_Handled;
    }

    /**
     * Stops a sound for one client.
     *
     * @param client    Client index.
     * @param entity    Entity index.
     * @param channel    Channel number.
     * @param name        Sound file name relative to the "sounds" folder.
     * @noreturn
     */
    stock Client_StopSound(cliententitychannel, const String:name[])
    {
        
    EmitSoundToClient(clientnameentitychannelSNDLEVEL_NONESND_STOP0.0SNDPITCH_NORMAL___true);
    }
     
  2. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Эту часть замени на:
    PHP:
    public Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast

        
    // Ents are recreated every round. 
        
    g_iNumSounds 0
         
        
    // Find all ambient sounds played by the map. 
        
    decl String:sSound[PLATFORM_MAX_PATH]; 
        new 
    entity INVALID_ENT_REFERENCE
         
        while ((
    entity FindEntityByClassname(entity"ambient_generic")) != INVALID_ENT_REFERENCE
        { 
            
    GetEntPropString(entityProp_Data"m_iszSound"sSoundsizeof(sSound)); 
             
            new 
    len strlen(sSound); 
            if (
    len && (StrEqual(sSound[len-3], "mp3") || StrEqual(sSound[len-3], "wav"))) 
            { 
                
    g_iSoundEnts[g_iNumSounds++] = EntIndexToEntRef(entity); 
            } 
        }
        for (
    entity 1entity <= MaxClientsentity++) if (g_fCmdTime[entity]) Command_StopMusic(entity0);
    }
    И до конца карты выбор игрока сохранит (если разница между раундами более 5 сек).
     
  3. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Щас проверю отпишу, у меня стоит музыка и между раундами 10 секунд разницы
     
  4. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Между началом одного раунда и началом следующего. Т.е. довольно редкий случай, но возможный.
    Для нормальной работы антиспам мешает, надо отдельно вынести.
     
  5. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Короче фишка такая, в начале каждого раунда, команда сама спрабатывает и прописывает команду !stopmusic и отключает якобы музыку, но дело в том, что музыка начинается когда выберается мини карта. А это происходит через 10-20 секунд от начало раунда. Можно от начало раунда сделать через 10-20 секунд отключение музыки?)
     
  6. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Я думал можно ли сделать так, типо музка начинает играть, плагин улавливает её, и выключает, но такое наверное просто нереально :D
     
  7. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Реально, но писать поболее. Можно упрощённо, но там памяти надо очень много.
    Сделано.
     
  8. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    ОХ, спасибо)
     
  9. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Re: [CS:GO/CS:S] SM STOPMUSIC MAPS

    Спасибо большое за твой отклик, Мне подошел плагин выше, как раз что надо было) И работоспособность у него вполне такая какая и требовалась, даже о чем я не додумался)
    Так что использую тот плагин. Как всегда +10 Спасибок тебе) Админы выдайте пожалуйта :)
     
  10. DexKekcuk #13

    DexKekcuk #13

    Сообщения:
    638
    Симпатии:
    70
    Тот что с таймером.
    Оффтоп
     
  11. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Так плохо сделано. При такой то нагрузке и всё равно может быть слышно секунд 10.
    В CS:S попробовал - муть, пропускает. С моим всегда тишина была. Смысл есть, когда только длинные песни не нужны.
     
  12. Dmitriy Mikliaev

    Dmitriy Mikliaev

    Сообщения:
    168
    Симпатии:
    2
    Напишите пожалуйста, чтобы плагин автоматом вырубал музыку на карте без всяких команд и у всех игроков сервера!
     
  13. antonnn598

    antonnn598

    Сообщения:
    144
    Симпатии:
    2
    AlmazON, Действительно, ваш плагин выключает музыку в начале раунда, а она включается только через несколько секунд после начала. Можно ли как-то сделать, чтобы при вводе команды, она выключалась, и её не было слышно совсем, потому что этот плагин
    не очень удобен, т.к. при нем музыка будет слышна несколько секунд.
     
  14. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Оффтоп
    Я уже делал полное отключение, работало даже на CS:S. Но, ТС отказался и, возможно, плагина у меня больше нет.
     
  15. Justkasi

    Justkasi

    Сообщения:
    165
    Симпатии:
    5
    AlmazON,Жаль
     
  16. antonnn598

    antonnn598

    Сообщения:
    144
    Симпатии:
    2
    AlmazON, Да, очень жаль. Нигде нет этого нормального плагина... Если не трудно, поищите, пожалуйста. Вдруг, где-то завалялся...
     
  17. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    [CS:GO/CS:S] Stop Map Music v1.1.2

    Вроде нашёл у себя ту усовершенствованную версию...
    Команды те же:
    !stopmusic - выключить; !onmusic - включить звуки карты.
     

    Вложения:

    Последнее редактирование: 30 авг 2016
    Meowmurmur нравится это.
  18. antonnn598

    antonnn598

    Сообщения:
    144
    Симпатии:
    2
    AlmazON, Огромное вам спасибо! Плагин работает идеально! Мертвая тишина - то что надо! Но, на картах, где музыка сама включается постоянно, этот плагин бесполезен..(

    P.S. Только иногда пробиваются звуки, а так, все отлично.
     
    Последнее редактирование: 10 янв 2016
  19. AlmazON

    AlmazON деревянный © yand3xmail

    Сообщения:
    4.505
    Симпатии:
    1.960
    Это как? Не пойму, о каких звуках идёт речь. Не помогает выключение командой или это про "хочу полностью отключать все звуки карты всем и сразу"?
    На доли секунды? Ещё быстрее не блокируется таким способом, надо что-то ещё более быстрое делать. Оффтоп
    А вот просто снести звуки карты - самое быстрое дело.
     
  20. Yura7181

    Yura7181

    Сообщения:
    367
    Симпатии:
    293
    Всем привет!

    Скорее всего всего он имеет ввиду те моменты на карте, где музыка начинает играть "сама по себе или когда игрок совершает какие либо действия".

    Например игроки подходят к лифту и музыка включается, идёт 1 минуту и кончается. В конце карты при обрушении моста и т.п. начинает играть музыка (просто для примера взять хотя бы ze_ карты). Помогает лишь установка привязки bind j sm_stopmusic и постоянно придётся нажимать клавишу при появлении мелодии.
     
    Святослав124 нравится это.