Остановка таймера в плагине

Тема в разделе "Запросы", создана пользователем kleuser, 27 янв 2016.

  1. kleuser

    kleuser

    Сообщения:
    569
    Симпатии:
    78
    Помогите пожалуйста, нужно сделать так, что бы таймер отключался в конце раунда. Сейчас к примеру если раунд закончен(выигран\проигран) Начинает играть музыка, и если бомба заложена отсчет срабатывает и перебивает музыку.

    Грубо говоря если раунд уже закончился, чтобы голосовой отсчет и текстовый не проигрывался.
    Или что бы плагин не перебивал другие звуки например музыку в конце раунда.
    PHP:
    #pragma semicolon 1

    #include <sourcemod>
    #include <sdktools>
    #include <clientprefs>
    #include <emitsoundany>
    #include <csgo_colors>

    #define PLUGIN_VERSION "1.5.0"
    #define TOTAL_SOUNDS 12

    #define TWENTY 0
    #define ONE 1
    #define TWO 2
    #define THREE 3
    #define FOUR 4
    #define FIVE 5
    #define SIX 6
    #define SEVEN 7
    #define EIGHT 8
    #define NINE 9
    #define TEN 10
    #define THIRTY 11

    #define SOUND_AT_TEN 1
    #define TEXT_AT_TEN 2

    //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    enum Preferences
    {
        
    bHud,
        
    bChat,
        
    bCenter,
        
    bSound
    }

    new 
    Handle:g_hTimer_Countdown INVALID_HANDLE;
    new 
    Handle:g_hEnable INVALID_HANDLE;
    new 
    Handle:g_hCvarTimer INVALID_HANDLE;
    new 
    Handle:g_hAnnounce INVALID_HANDLE;
    new 
    Handle:g_hChatDefault INVALID_HANDLE;
    new 
    Handle:g_hSoundDefault INVALID_HANDLE;
    new 
    Handle:g_hHUDDefault INVALID_HANDLE;
    new 
    Handle:g_hCenterDefault INVALID_HANDLE;
    new 
    Handle:g_hAltStart INVALID_HANDLE;
    new 
    Handle:g_cPrefSound INVALID_HANDLE;
    new 
    Handle:g_cPrefChat INVALID_HANDLE;
    new 
    Handle:g_cPrefCenter INVALID_HANDLE;
    new 
    Handle:g_cPrefHud INVALID_HANDLE;

    new 
    Float:g_fExplosionTimeFloat:g_fCounterFloat:g_fCvarTimer;
    new 
    bool:g_bLateLoadbool:g_bAnnouncebool:g_bEnable;
    new 
    g_iAltSound;
    new 
    String:g_sSoundList[TOTAL_SOUNDS][PLATFORM_MAX_PATH], String:g_sC4Primer[32];
    new 
    String:g_sHUDDefault[2], String:g_sSoundDefault[2], String:g_sChatDefault[2], String:g_sCenterDefault[2];

    new 
    g_Prefs[MAXPLAYERS 1][Preferences];
    new 
    bool:g_bLoaded[MAXPLAYERS 1];
    new 
    String:g_sSteam[MAXPLAYERS 1][24];

    static const 
    String:g_sSoundDisplay[TOTAL_SOUNDS][] = {"20""1""2""3""4""5""6""7""8""9""10""30"};

    //* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    public Plugin:myinfo 
    {
        
    name "C4Timer CSGO",
        
    author "dalto, Panda",
        
    description "Plugin that gives a countdown for the C4 explosion in Counter-Strike Source.",
        
    version PLUGIN_VERSION,
        
    url "http://forums.alliedmods.net"
    };

    public 
    APLRes:AskPluginLoad2(Handle:myselfbool:lateString:error[], err_max)
    {
        
    g_bLateLoad late;
        
        return 
    APLRes_Success;
    }

    public 
    OnPluginStart()
    {
        
    LoadTranslations("plugin.advancedc4timer");
        
        
    CreateConVar("sm_c4_timer_redux_version"PLUGIN_VERSION"Advanced c4 Timer Version"FCVAR_PLUGIN|FCVAR_SPONLY|FCVAR_REPLICATED|FCVAR_NOTIFY|FCVAR_DONTRECORD);

        
    g_hEnable CreateConVar("sm_c4_timer_enable""1""Enables / Disables features of this plugin."FCVAR_NONEtrue0.0true1.0);
        
    g_bEnable GetConVarBool(g_hEnable);
        
    HookConVarChange(g_hEnableOnSettingsChange);
        
        
    g_hAnnounce CreateConVar("sm_c4_timer_announce""1""If enabled, clients receive a message 30 seconds after joining concerning this plugin."FCVAR_NONEtrue0.0true1.0);
        
    g_bAnnounce GetConVarBool(g_hEnable);
        
    HookConVarChange(g_hAnnounceOnSettingsChange);
        
        
    g_hChatDefault CreateConVar("sm_c4_timer_chat_default""0""Default client setting for chat preference."FCVAR_NONEtrue0.0true1.0);
        
    GetConVarString(g_hChatDefaultg_sChatDefaultsizeof(g_sChatDefault));
        
    HookConVarChange(g_hChatDefaultOnSettingsChange);
        
        
    g_hCenterDefault CreateConVar("sm_c4_timer_center_default""0""Default client setting for center preference."FCVAR_NONEtrue0.0true1.0);
        
    GetConVarString(g_hCenterDefaultg_sCenterDefaultsizeof(g_sCenterDefault));
        
    HookConVarChange(g_hCenterDefaultOnSettingsChange);
        
        
    g_hHUDDefault CreateConVar("sm_c4_timer_hud_default""1""Default client setting for HUD preference."FCVAR_NONEtrue0.0true1.0);
        
    GetConVarString(g_hHUDDefaultg_sHUDDefaultsizeof(g_sHUDDefault));
        
    HookConVarChange(g_hHUDDefaultOnSettingsChange);
        
        
    g_hSoundDefault CreateConVar("sm_c4_timer_sound_default""1""Default client setting for sound preference."FCVAR_NONEtrue0.0true1.0);
        
    GetConVarString(g_hSoundDefaultg_sSoundDefaultsizeof(g_sSoundDefault));
        
    HookConVarChange(g_hSoundDefaultOnSettingsChange);
        
        
    g_hAltStart CreateConVar("sm_c4_timer_start_at_ten""0""1 voice starts at 10, 2 text starts at 10, 3 both start at 10");
        
    g_iAltSound GetConVarInt(g_hAltStart);
        
    HookConVarChange(g_hAltStartOnSettingsChange);
        
    AutoExecConfig(true"advancedc4timer");

        
    g_hCvarTimer FindConVar("mp_c4timer");
        
    g_fCvarTimer GetConVarFloat(g_hCvarTimer);
        
    HookConVarChange(g_hCvarTimerOnSettingsChange);
        
        
    HookEvent("bomb_planted"EventBombPlantedEventHookMode_Pre);
        
    HookEvent("round_start"EventRoundStartEventHookMode_PostNoCopy);
        
    HookEvent("bomb_exploded"EventBombExplodedEventHookMode_PostNoCopy);
        
    HookEvent("bomb_defused"EventBombDefusedEventHookMode_Post);
        
        
    RegConsoleCmd("sm_c4timer"SettingsMenu);
        
        
    g_cPrefSound RegClientCookie("AdvancedC4Timer_Sound""Advanced C4 Timer: The client's sound preference."CookieAccess_Protected);
        
    g_cPrefChat RegClientCookie("AdvancedC4Timer_Chat""Advanced C4 Timer: The client's chat message preference."CookieAccess_Protected);
        
    g_cPrefCenter RegClientCookie("AdvancedC4Timer_Center""Advanced C4 Timer: The client's center message preference."CookieAccess_Protected);
        
    g_cPrefHud RegClientCookie("AdvancedC4Timer_Hud""Advanced C4 Timer: The client's hud message preference."CookieAccess_Protected);
        
        if(
    g_bEnable && g_bLateLoad)
        {
            for (new 
    1<= MaxClientsi++)
            {
                if(
    IsClientInGame(i))
                {
                    
    GetClientAuthId(iAuthId_Steam2g_sSteam[i], sizeof(g_sSteam[]));
                    if(!
    IsFakeClient(i) && !g_bLoaded[i] && AreClientCookiesCached(i))
                        
    LoadClientData(i);
                }
            }

            
    g_bLateLoad false;
        }
    }

    public 
    OnSettingsChange(Handle:cvar, const String:oldvalue[], const String:newvalue[])
    {
        if(
    cvar == g_hEnable)
            
    g_bEnable bool:StringToInt(newvalue);
        else if(
    cvar == g_hAnnounce)
            
    g_bAnnounce bool:StringToInt(newvalue);
        else if(
    cvar == g_hChatDefault)
            
    strcopy(g_sChatDefaultsizeof(g_sChatDefault), newvalue);
        else if(
    cvar == g_hCenterDefault)
            
    strcopy(g_sCenterDefaultsizeof(g_sCenterDefault), newvalue);
        else if(
    cvar == g_hHUDDefault)
            
    strcopy(g_sHUDDefaultsizeof(g_sHUDDefault), newvalue);
        else if(
    cvar == g_hSoundDefault)
            
    strcopy(g_sSoundDefaultsizeof(g_sSoundDefault), newvalue);
        else if(
    cvar == g_hAltStart)
            
    g_iAltSound StringToInt(newvalue);
        else if(
    cvar == g_hCvarTimer)
            
    g_fCvarTimer StringToFloat(newvalue);
    }

    public 
    OnMapStart()
    {
        if(
    g_bEnable)
        {
            
    Define_Sounds(true);
        }
    }

    public 
    OnClientPostAdminCheck(client)
    {
        if(
    g_bEnable)
        {
            
    GetClientAuthId(clientAuthId_Steam2g_sSteam[client], sizeof(g_sSteam[]));
            if(!
    g_bLoaded[client] && AreClientCookiesCached(client))
                
    LoadClientData(client);
        }
    }

    public 
    OnClientCookiesCached(client)
    {
        if(
    g_bEnable)
        {
            if(!
    g_bLoaded[client] && !IsFakeClient(client))
            {
                
    LoadClientData(client);
            }
        }
    }

    LoadClientData(client)
    {
        new 
    String:sCookie[4] = "";
        
    GetClientCookie(clientg_cPrefHudsCookiesizeof(sCookie));

        if(
    StrEqual(sCookie""false))
        {
            
    SetClientCookie(clientg_cPrefHudg_sHUDDefault);
            
    SetClientCookie(clientg_cPrefChatg_sChatDefault);
            
    SetClientCookie(clientg_cPrefCenterg_sCenterDefault);
            
    SetClientCookie(clientg_cPrefSoundg_sSoundDefault);
            
            
    g_Prefs[client][bHud] = StringToInt(g_sHUDDefault);
            
    g_Prefs[client][bChat] = StringToInt(g_sChatDefault);
            
    g_Prefs[client][bCenter] = StringToInt(g_sCenterDefault);
            
    g_Prefs[client][bSound] = StringToInt(g_sSoundDefault);
        }
        else
        {
            
    g_Prefs[client][bHud] = StringToInt(sCookie);
            
            
    GetClientCookie(clientg_cPrefChatsCookiesizeof(sCookie));
            
    g_Prefs[client][bChat] = StringToInt(sCookie);
            
            
    GetClientCookie(clientg_cPrefCentersCookiesizeof(sCookie));
            
    g_Prefs[client][bCenter] = StringToInt(sCookie);
            
            
    GetClientCookie(clientg_cPrefSoundsCookiesizeof(sCookie));
            
    g_Prefs[client][bSound] = StringToInt(sCookie);
        }
        
        
    g_bLoaded[client] = true;

        if(
    g_bAnnounce)
            
    CreateTimer(30.0Timer_AnnounceGetClientUserId(client));
    }

    public 
    EventRoundStart(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if(
    g_bEnable)
        {
            if(
    g_hTimer_Countdown != INVALID_HANDLE && CloseHandle(g_hTimer_Countdown))
                
    g_hTimer_Countdown INVALID_HANDLE;
        }
    }

    public 
    Action:EventBombPlanted(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if(
    g_bEnable)
        {
            
    g_fCounter g_fCvarTimer 1.0;
            
    g_fExplosionTime GetEngineTime() + g_fCvarTimer;

            new 
    client GetClientOfUserId(GetEventInt(event"userid"));
            if(!
    client || !IsClientInGame(client))
                
    Format(g_sC4Primersizeof(g_sC4Primer), "%T""Terrorist");
            else
                
    GetClientName(clientg_sC4Primersizeof(g_sC4Primer));
            
            
    g_hTimer_Countdown CreateTimer(((g_fExplosionTime g_fCounter) - GetEngineTime()), TimerCountdown_TIMER_REPEAT);
        }

        return 
    Plugin_Continue;
    }

    public 
    EventBombDefused(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if(
    g_bEnable)
        {
            if(
    g_hTimer_Countdown != INVALID_HANDLE && CloseHandle(g_hTimer_Countdown))
                
    g_hTimer_Countdown INVALID_HANDLE;

            
    decl String:sC4Defuser[32];
            new 
    client GetClientOfUserId(GetEventInt(event"userid"));
            if(!
    client || !IsClientInGame(client))
                
    Format(sC4Defusersizeof(sC4Defuser), "%T""Counter-Terrorist");
            else
                
    GetClientName(clientsC4Defusersizeof(sC4Defuser));

            for(new 
    1<= MaxClientsi++)
                if(
    IsClientInGame(i) && !IsFakeClient(i) && g_Prefs[i][bHud])
                    
    CGOPrintHintText(i"%T""bomb defused"isC4Defuser);
        }
    }

    public 
    EventBombExploded(Handle:event, const String:name[], bool:dontBroadcast)
    {
        if(
    g_bEnable)
        {
            if(
    g_hTimer_Countdown != INVALID_HANDLE && CloseHandle(g_hTimer_Countdown))
                
    g_hTimer_Countdown INVALID_HANDLE;
                
            for(new 
    1<= MaxClientsi++)
            {
                if(
    IsClientInGame(i) && !IsFakeClient(i) && g_Prefs[i][bHud])
                {
                    
    CGOPrintHintText(i"%T""bomb exploded"ig_sC4Primer);
                }
            }
        }
    }

    public 
    Action:TimerCountdown(Handle:timerany:data)
    {
        
    BombMessage(RoundToFloor(g_fCounter));
        
        
    g_fCounter--;
        if(
    g_fCounter <= 0)
        {
            
    g_hTimer_Countdown INVALID_HANDLE;
            return 
    Plugin_Stop;
        }
        
        return 
    Plugin_Continue;
    }

    Define_Sounds(bool:bPrepare false)
    {
        
    decl String:sPath[PLATFORM_MAX_PATH];
        new 
    Handle:hKeyValues CreateKeyValues("c4SoundsList");
        
    BuildPath(Path_SMsPathsizeof(sPath), "configs/c4soundslist.cfg");

        if(!
    FileToKeyValues(hKeyValuessPath) || !KvGotoFirstSubKey(hKeyValues))
            
    SetFailState("configs/c4soundslist.cfg not found or not correctly structured");
        else
        {
            for(new 
    0TOTAL_SOUNDSi++)
            {
                
    KvGetString(hKeyValuesg_sSoundDisplay[i], g_sSoundList[i], PLATFORM_MAX_PATH);
                if(
    bPrepare && !StrEqual(g_sSoundList[i], ""))
                {
                    
    PrecacheSoundAny(g_sSoundList[i], true);
                    
    Format(sPathPLATFORM_MAX_PATH"sound/%s"g_sSoundList[i]);
                    
    AddFileToDownloadsTable(sPath);
                }
            }
        }
        
        
    CloseHandle(hKeyValues);
    }

    public 
    BombMessage(count)
    {
        new 
    soundKey;
        
    decl String:sBuffer[192];
        
        switch(
    count)
        {
            case 
    12345678910:
                
    soundKey count;
            case 
    20:
                
    soundKey TWENTY;
            case 
    30:
                
    soundKey THIRTY;
            default:
                return;
        }

        if(!
    StrEqual(g_sSoundList[soundKey], ""))
        {
            for(new 
    1<= MaxClientsi++)
            {
                if(
    IsClientInGame(i) && !IsFakeClient(i))
                {
                    
    Format(sBuffersizeof(sBuffer), "countdown %i"count);
                    
    Format(sBuffersizeof(sBuffer), "%T"sBuffericount);

                    if(
    g_Prefs[i][bSound] && !(g_iAltSound SOUND_AT_TEN && (soundKey || soundKey 10)))
                    {
                        
    EmitSoundToAllAny(g_sSoundList[soundKey]);
                    }
                    if(!(
    g_iAltSound TEXT_AT_TEN && (soundKey || soundKey 10)))
                    {
                        if(
    g_Prefs[i][bChat])
                        {
                            
    CGOPrintToChat(i"\x02[Бомба]: \x01%s"sBuffer);
                        }
                        if(
    g_Prefs[i][bCenter])
                        {
                            
    CGOPrintCenterText(isBuffer);
                        }
                        if(
    g_Prefs[i][bHud])
                        {
                            
    CGOPrintHintText(isBuffer);
                        }
                    }
                }
            }
        }
    }

    public 
    Action:Timer_Announce(Handle:timerany:userid)
    {
        new 
    client GetClientOfUserId(userid);
        if(
    client && IsClientInGame(client))
        {
            
    CGOPrintToChat(client"%t""announce");
        }
    }
     
    public 
    Action:SettingsMenu(clientargs)
    {
        
    decl String:sBuffer[128];
        new 
    Handle:menu CreateMenu(SettingsMenuHandler);
        
    Format(sBuffersizeof(sBuffer), "%T""c4 menu"client);
        
    SetMenuTitle(menusBuffer);
        if(
    g_Prefs[client][bSound] == 1)
            
    Format(sBuffersizeof(sBuffer), "%T""disable sound"client);
        else
            
    Format(sBuffersizeof(sBuffer), "%T""enable sound"client);
        
    AddMenuItem(menu"menu item"sBuffer);

        if(
    g_Prefs[client][bChat] == 1)
            
    Format(sBuffersizeof(sBuffer), "%T""disable chat"client);
        else
            
    Format(sBuffersizeof(sBuffer), "%T""enable chat"client);
        
    AddMenuItem(menu"menu item"sBuffer);
        
        if(
    g_Prefs[client][bCenter] == 1)
            
    Format(sBuffersizeof(sBuffer), "%T""disable center"client);
        else
            
    Format(sBuffersizeof(sBuffer), "%T""enable center"client);
        
    AddMenuItem(menu"menu item"sBuffer);
        
        if(
    g_Prefs[client][bHud] == 1)
            
    Format(sBuffersizeof(sBuffer), "%T""disable hud"client);
        else
            
    Format(sBuffersizeof(sBuffer), "%T""enable hud"client);
        
    AddMenuItem(menu"menu item"sBuffer);

        
    DisplayMenu(menuclient30);
        return 
    Plugin_Handled;
    }

    public 
    SettingsMenuHandler(Handle:menuMenuAction:actionparam1param2)
    {
        switch(
    action)
        {
            case 
    MenuAction_Select:
            {
                
    decl String:sBuffer[2];
                switch(
    param2)
                {
                    case 
    0:
                    {
                        
    g_Prefs[param1][bSound] = !g_Prefs[param1][bSound];
                        
    IntToString(g_Prefs[param1][bSound], sBuffersizeof(sBuffer));
                        
    SetClientCookie(param1g_cPrefSoundsBuffer);
                    }
                    case 
    1:
                    {
                        
    g_Prefs[param1][bChat] = !g_Prefs[param1][bChat];
                        
    IntToString(g_Prefs[param1][bChat], sBuffersizeof(sBuffer));
                        
    SetClientCookie(param1g_cPrefChatsBuffer);
                    }
                    case 
    2:
                    {
                        
    g_Prefs[param1][bCenter] = !g_Prefs[param1][bCenter];
                        
    IntToString(g_Prefs[param1][bCenter], sBuffersizeof(sBuffer));
                        
    SetClientCookie(param1g_cPrefCentersBuffer);
                    }
                    case 
    3:
                    {
                        
    g_Prefs[param1][bHud] = !g_Prefs[param1][bHud];
                        
    IntToString(g_Prefs[param1][bHud], sBuffersizeof(sBuffer));
                        
    SetClientCookie(param1g_cPrefHudsBuffer);
                    }
                }
                
                
    SettingsMenu(param10);
            }
            case 
    MenuAction_End:
                
    CloseHandle(menu);
        }
    }

    Добавлено через 19 часов 35 минут
    Помогите пожалуйста люди добрые.
     
    Последнее редактирование: 28 янв 2016
  2. AlmazON

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

    Сообщения:
    4.553
    Симпатии:
    1.987
    После этой строчки добавить новую:
    PHP:
    HookEvent("round_end"EventRoundStartEventHookMode_PostNoCopy);
     
    kleuser и White Wolf нравится это.
  3. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Речь идет о проигрывание звука отсчета бомбы после окончания раунда? Т.е. закладка бомбы в конце раунда - я так понимаю?
     
  4. kleuser

    kleuser

    Сообщения:
    569
    Симпатии:
    78
    @AlmazON Спасибо проверю.

    @Webman Если бомба заложена, а раунд в этот момент заканчивается, и играет музыка (RoundEndSound), то голосовой отсчет все равно срабатывает и перебивает музыку, то есть музыка останавливается.
     
  5. Webman

    Webman Developer

    Сообщения:
    702
    Симпатии:
    182
    Уничтожай таймер KillTimer(g_hTimer_Countdown); g_hTimer_Countdown = INVALID_HANDLE; в конце раунда. Как хукнуть событие, тебе выше написали.