AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   voteban+sound (https://forums.alliedmods.net/showthread.php?t=324378)

jonny1990 05-14-2020 13:10

voteban+sound
 
Hello! you can help insert random sounds during the ban in voteban (VOTEBAN_BAN)
please guys help, in wav format, sounds I have

Code:

/*
*        Rock to Ban
*          Every player are able to rock the vote to ban somebody.
*
*        Last update:
*          12/05/2012
*
        Credits:
*        Alka for his 'Vote Ban' plugin http://forums.alliedmods.net/showthread.php?t=96586
*          I got the idea and took part of his code
*
*        This file is provided as is (no warranties).
*
*/

#include <amxmodx>

#define PLUGIN "Rock to Ban"
#define VERSION "1.02"
#define AUTHOR "Safety1st"

// customizable parameters
#define MAX_PLAYERS 32
#define IMMUNITY_FLAG ( ADMIN_IMMUNITY | ADMIN_BAN )        /* flags 'a' & 'd', separate by '|' */
new gszPrefix[] = "[VOTEBAN]"        // set prefix for all chat messages; for example ">"
const VOTEBAN_NEED = 4        // how many players are required to enable voteban function
// end of customizable parameters

new giVotedPlayers[MAX_PLAYERS + 1]        // player's voteban targets
new giVotes[MAX_PLAYERS + 1]        // count of votes for ban that player
new giVoted[MAX_PLAYERS + 1]        // count of votes for ban by that player

// macro; %1 - variable being modified, %2 - player id
#define CheckFlag(%1,%2)        ( %1 &  ( 1 << (%2-1) ) )
#define AddFlag(%1,%2)                ( %1 |=  ( 1 << (%2-1) ) )
#define RemoveFlag(%1,%2)        ( %1 &= ~( 1 << (%2-1) ) )

enum _:Labels {
        CVAR_PERCENT = 0,
        CVAR_BANTYPE,
        CVAR_BANTIME,
        CVAR_LIMIT,
        CVAR_REASON,
        CVAR_LOG
}
new pCvar[Labels]

enum _:Types {
        AUTO = 0,
        STEAMID,
        IP,
        AMXBAN,
        AMXBANS5,
        SUPERBAN
}

enum _:LogRecords {
        UNVOTE = 0,
        VOTE
}

new gszLogRecords[LogRecords][] = {
        "Player '%s' has canceled vote for banning '%s'",
        "Player '%s' has been voted for banning by '%s'"
}

public plugin_init() {
        register_plugin( PLUGIN, VERSION, AUTHOR )
        register_dictionary( "rock2ban.txt" )
        register_cvar( "rock2ban", VERSION, FCVAR_SERVER|FCVAR_SPONLY|FCVAR_UNLOGGED )

        register_saycmd( "voteban", "VoteBanMenu" )

        pCvar[CVAR_PERCENT] = register_cvar( "voteban_percent", "60" )
        pCvar[CVAR_BANTYPE] = register_cvar( "voteban_type", "4" )
        pCvar[CVAR_BANTIME] = register_cvar( "voteban_time", "60" )
        pCvar[CVAR_LIMIT] = register_cvar( "voteban_limit", "3" )
        pCvar[CVAR_REASON] = register_cvar( "voteban_reason", "Voteban" )
        pCvar[CVAR_LOG] = register_cvar( "voteban_log", "0" )
}

register_saycmd( saycommand[], function[] ) {
        new szTemp[64]
        formatex( szTemp, charsmax(szTemp), "say %s", saycommand )
        register_clcmd( szTemp, function )
        formatex( szTemp, charsmax(szTemp), "say_team %s", saycommand )
        register_clcmd( szTemp, function )
        formatex( szTemp, charsmax(szTemp), "say /%s", saycommand )
        register_clcmd( szTemp, function )
        formatex( szTemp, charsmax(szTemp), "say .%s", saycommand )
        register_clcmd( szTemp, function )
        formatex( szTemp, charsmax(szTemp), "say_team /%s", saycommand )
        register_clcmd( szTemp, function )
        formatex( szTemp, charsmax(szTemp), "say_team .%s", saycommand )
        register_clcmd( szTemp, function )
}

public client_disconnect(id) {
        static iPlayers[32], iPlayersNum, i, iPlayer

        // check whether there were votes for ban by that player
        if ( giVoted[id] ) {
                get_players( iPlayers, iPlayersNum, "ch" )        // skip bots and HLTV
                for ( i = 0; i < iPlayersNum; i++ ) {
                        iPlayer = iPlayers[i]
                        if ( CheckFlag( giVotedPlayers[id], iPlayer ) )
                                giVotes[iPlayer]--
                }
                giVotedPlayers[id] = 0
                giVoted[id] = 0
        }

        // check whether there were votes for ban that player
        if ( giVotes[id] ) {
                get_players( iPlayers, iPlayersNum, "ch" )        // skip bots and HLTV
                for ( i = 0; i < iPlayersNum; i++ ) {
                        iPlayer = iPlayers[i]
                        if ( CheckFlag( giVotedPlayers[iPlayer], id ) ) {
                                RemoveFlag( giVotedPlayers[iPlayer], id )
                                giVotes[id]--
                                giVoted[iPlayer]--
                        }
                        if ( !giVotes[id] )
                                break
                }
                giVotes[id] = 0        // just in case
        }
}

public VoteBanMenu(id) {
        static iPlayers[32], iPlayersNum, i, iPlayer

        get_players( iPlayers, iPlayersNum, "ch" )        // skip bots and HLTV
        if ( iPlayersNum < VOTEBAN_NEED ) {
                ColorPrint( id, "^4%s %L", gszPrefix, id, "VOTEBAN_NEEDX", VOTEBAN_NEED )
                return PLUGIN_HANDLED
        }

        // create and show menu
        new szTempString[64], szName[32], szInfo[3]
        formatex( szTempString, charsmax(szTempString), "%L\y:", id, "VOTEBAN_MENU" )
        new iMenu = menu_create( szTempString, "MenuHandle", .ml = 1 )
        new iCallback = menu_makecallback( "CallbackMenu" )
        menu_setprop( iMenu, MPROP_NUMBER_COLOR, "\r" )
        menu_setprop( iMenu, MPROP_EXIT, MEXIT_ALL )
        formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_EXIT" )
        menu_setprop( iMenu, MPROP_EXITNAME, szTempString )
        formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_NEXT" )
        menu_setprop( iMenu, MPROP_NEXTNAME, szTempString )
        formatex( szTempString, charsmax(szTempString), "%L", id, "VOTEBAN_BACK" )
        menu_setprop( iMenu, MPROP_BACKNAME, szTempString )

        new iPercent
        for ( i = 0; i < iPlayersNum; i++ ) {
                iPlayer = iPlayers[i]
                get_user_name( iPlayer, szName, 31 )
                if ( get_user_flags(iPlayer) & IMMUNITY_FLAG ) {
                        // don't set info[] if player has immunity
                        menu_additem( iMenu, szName, "", .callback = iCallback )
                }
                else {
                        iPercent = get_percent( giVotes[iPlayer], iPlayersNum )
                        if ( giVotes[iPlayer] && CheckFlag( giVotedPlayers[id], iPlayer ) )
                                formatex( szTempString, charsmax(szTempString), "%s \d(\r%d%%\d) \y%L", szName, iPercent, id, "VOTEBAN_VOTED" )
                        else
                                formatex( szTempString, charsmax(szTempString), "%s \d(\r%d%%\d)", szName, iPercent )
                        num_to_str( iPlayer, szInfo, charsmax(szInfo) )
                        menu_additem( iMenu, szTempString, szInfo, .callback = iCallback )
                }
        }

        menu_display( id, iMenu )

        return PLUGIN_CONTINUE
}

public CallbackMenu( id, menu, item ) {
        new access, info[3], callback, szTempString[64]
        menu_item_getinfo( menu, item, access, info, charsmax(info), szTempString, charsmax(szTempString), callback )

        if ( !info[0] )
                // player has immunity
                return ITEM_DISABLED

        if ( str_to_num(info) == id )
                return ITEM_DISABLED

        return ITEM_ENABLED
}

public MenuHandle( id, menu, item ) {
        if ( item == MENU_EXIT ) {
                menu_destroy(menu)
                return PLUGIN_HANDLED
        }

        new access, info[3], callback
        menu_item_getinfo( menu, item, access, info, charsmax(info), .callback = callback )
        menu_destroy(menu)

        new iTarget = str_to_num(info)

        if ( !is_user_connected(iTarget) ) {
                VoteBanMenu(id)
                return PLUGIN_HANDLED
        }

        if ( CheckFlag( giVotedPlayers[id], iTarget ) ) {
                RemoveFlag( giVotedPlayers[id], iTarget )
                giVoted[id]--
                giVotes[iTarget]--

                new szName[32], szTargetName[32]
                get_user_name( id, szName, 31 )
                get_user_name( iTarget, szTargetName, 31 )
                MsgToLog( gszLogRecords[UNVOTE], szName, szTargetName )
                ColorPrint( 0, "^4%s %L", gszPrefix, LANG_SERVER, "VOTEBAN_UNVOTE", szName, szTargetName )
                client_print( id, print_center, "%L", id, "VOTEBAN_CLEAR" )
                return PLUGIN_HANDLED
        }

        new iLimit = get_pcvar_num( pCvar[CVAR_LIMIT] )
        if ( giVoted[id] >= iLimit ) {
                // don't let vote too much ;)
                client_print( id, print_center, "%L", id, "VOTEBAN_LIMIT", iLimit )
                return PLUGIN_HANDLED
        }

        client_print( id, print_center, "%L", id, "VOTEBAN_SET" )
        giVoted[id]++
        giVotes[iTarget]++
        AddFlag( giVotedPlayers[id], iTarget )

        CheckVotes( iTarget, id )

        return PLUGIN_HANDLED
}

CheckVotes( target, voter ) {
        new szName[32], szTargetName[32]
        get_user_name( voter, szName, 31 )
        get_user_name( target, szTargetName, 31 )

        MsgToLog( gszLogRecords[VOTE], szTargetName, szName )
        ColorPrint( 0, "^4%s %L", gszPrefix, LANG_SERVER, "VOTEBAN_VOTE", szName, szTargetName )

        new iPlayers[32], iPlayersNum
        get_players( iPlayers, iPlayersNum, "ch" )        // skip bots and HLTV

        if ( get_percent( giVotes[target], iPlayersNum ) < get_pcvar_num( pCvar[CVAR_PERCENT] ) )
                return

        new iUserid = get_user_userid(target)
        new iType = get_pcvar_num( pCvar[CVAR_BANTYPE] )
        new iBanTime = get_pcvar_num( pCvar[CVAR_BANTIME] )
        new szAuthid[32], szReason[256]
        get_pcvar_string( pCvar[CVAR_REASON], szReason, charsmax(szReason) )

        switch ( iType ) {
                case AMXBAN, AMXBANS5, SUPERBAN : {
                        // clear unused template
                        replace( szReason, charsmax(szReason), "%time%", " " )
                }
                default : {
                        static szHostname[64]
                        if ( !szHostname[0] )
                                get_cvar_string( "hostname", szHostname, 63 )
                        get_user_authid( target, szAuthid, charsmax(szAuthid) )
                        log_amx( "Ban: ^"%s<0><><>^" ban and kick ^"%s<%d><%s><>^" (minutes ^"%d^") (reason ^"Voteban^")", szHostname, szTargetName, iUserid, szAuthid, iBanTime )
                        ColorPrint( 0, "^4%s %L", gszPrefix, LANG_SERVER, "VOTEBAN_BAN", szTargetName, iBanTime )
                        // set actual ban time in the reason
                        if ( containi( szReason, "%time%" ) != -1 ) {
                                new szBanTime[4]
                                num_to_str( iBanTime, szBanTime, 3 )
                                replace( szReason, charsmax(szReason), "%time%", szBanTime )
                        }
                }
        }

        if ( !iType ) {        // AUTO
                /* AMXX base plugin 'plmenu.amxx', code by MistaGee
                IF AUTHID STEAM_ID_LAN OR VALVE_ID_LAN OR HLTV, BAN PER IP TO DON'T BAN EVERYONE */
                if ( equal( "STEAM_ID_LAN", szAuthid ) || equal( "VALVE_ID_LAN", szAuthid ) || equal( "HLTV", szAuthid ) )
                        iType = IP
                else
                        iType = STEAMID
        }
       
        switch ( iType ) {
                case STEAMID :
                        server_cmd( "kick #%d %s;wait;wait;wait;banid %d %s", iUserid, szReason, iBanTime, szAuthid )
                case IP : {
                        new szIp[32]
                        get_user_ip( target, szIp, charsmax(szIp), 1 /* without_port */ )
                        server_cmd( "kick #%d %s;wait;wait;wait;addip %d %s", iUserid, szReason, iBanTime, szIp )
                }
                case AMXBAN :
                        server_cmd( "amx_ban #%d %d ^"%s^"", iUserid, iBanTime, szReason )
                case AMXBANS5 :
                        server_cmd( "amx_ban %d #%d ^"%s^"", iBanTime, iUserid, szReason )
                case SUPERBAN :
                        server_cmd( "amx_superban #%d %d ^"%s^"", iUserid, iBanTime, szReason )
        }
}

get_percent( value, tvalue ) {
        return floatround( floatmul( float(value) / float(tvalue) , 100.0 ) )
}

MsgToLog( szRawMessage[], any:... ) {
        if ( !get_pcvar_num( pCvar[CVAR_LOG] ) )
                return

        static szLogFile[192] = "", szTime[32], fp
        if ( !szLogFile[0] ) {
                new szLogsDir[64], szDate[16]
                get_time ( "%Y%m", szDate, charsmax(szDate) )
                get_localinfo( "amxx_logs", szLogsDir, 63 )
                formatex( szLogFile, charsmax(szLogFile), "%s/voteban_%s.log", szLogsDir, szDate )
        }

        new szMessage[192]
        vformat( szMessage, charsmax( szMessage ), szRawMessage, 2 )

        get_time( "%m/%d/%Y - %H:%M:%S", szTime, 31 )
        fp = fopen( szLogFile, "a" )
        fprintf( fp, "L %s: %s^n", szTime, szMessage )
        fclose(fp)
}

ColorPrint( iReceiver, const szRawMessage[ ], any:... ) {
        static iMsgSayText = 0
        if( !iMsgSayText )
                iMsgSayText = get_user_msgid( "SayText" )

        new szMessage[192], iPlayers[32], iPlayersNum = 1, iPlayer
        vformat( szMessage, charsmax(szMessage), szRawMessage, 3 )
        replace_all( szMessage, charsmax(szMessage), "!n", "^1" )
        replace_all( szMessage, charsmax(szMessage), "!t", "^3" )
        replace_all( szMessage, charsmax(szMessage), "!g", "^4" )
        if ( szMessage[0] != '^1' || szMessage[0] != '^3' || szMessage[0] != '^4' )
                format( szMessage, charsmax(szMessage), "^1%s", szMessage )        // we must set initial default color if it is not provided explicitly

        if ( iReceiver )
                iPlayers[0] = iReceiver
        else {
                get_players( iPlayers, iPlayersNum, "ch" )        // skip bots and HLTV
                if ( !iPlayersNum )
                        return        // don't print useless message
        }

        for ( new i = 0 ; i < iPlayersNum ; i++ ) {
                iPlayer = iPlayers[i]
                message_begin( MSG_ONE_UNRELIABLE, iMsgSayText, _, iPlayer )
                write_byte(iPlayer)        // use target player as sender to see colors at all (and his own team color for ^3)
                write_string(szMessage)
                message_end()
        }
}



All times are GMT -4. The time now is 17:13.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.