Nem müködik a roundsounds pluginom szerver logba azt mutatja h betölti az összes zenét de ebből kb 2-3mat játszik le "addons/amxmodx/configs/round_sound/prefix-de.ini" L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] --- L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] [ Loading 3 CTs Sounds ] L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] - sound/epicroundss/epicbadgirl.mp3 L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] - sound/epicroundss/epicAvici.mp3 L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] - sound/epicroundss/epicWelcome.mp3 L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] --- L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] [ Loading 3 Ts Sounds ] L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] - sound/epicroundss/epicfarlamore.mp3 L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] - sound/epicroundss/epicdeepinlove.mp3 L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] - sound/epicroundss/epicwawa.mp3 L 12/23/2011 - 18:14:12: [alt_end_round_sounds2.amxx] ---
Előre is kösz a segítséget
Plugin: [spoiler]Kód: #include <amxmodx> #include <amxmisc>
new const // _________________________________________________
PLUGIN [] = "Alternative End Round Sounds", VERSION[] = "2.3b", AUTHOR [] = "Arkshine"; // _________________________________________________
#if AMXX_VERSION_NUM < 180 #define old_amxx #endif
/* ========================= [ "START" AERA FOR CHANGES ] ========================= */
#define _DEBUG // Active debug #define MAX_FILE_LENGTH 196 // Max length for files + path.
#if defined old_amxx #define MAX_SOUNDS 25 // Max sounds per team #endif
new const
g_FileName[] = "roundsound", // Name of the main file if no files is found in 'g_FileFolder'. g_FileFolder[] = "round_sound", // Name of the directory in amxmodx/configs/ for per-map files. g_FilePrefix[] = "ini", // File extension used for the files. g_CmdChat[] = "/roundsound"; // Chat command for player.
/* ========================= [ "END" AERA FOR CHANGES ] ========================= */
// - - - - - - - - - - - - - - - - - - - - - - -
#define MAX_PLAYERS 32 #define TASKID_ADS 1333 #define SIZE_FILE 0 #define NULL -1
new bool:g_pHeardSound[ MAX_PLAYERS + 1 ],
#if !defined old_amxx Array:g_lstSoundCT, Array:g_lstSoundT, #endif
p_enabled, p_player_toggle, p_time_ads, p_random_precache,
g_sRp_value[12], g_msgSayText;
enum _:e_Team { T = 0, CT, };
new g_nSnd[ e_Team ];
#if defined old_amxx new g_sTeam_sounds[ MAX_SOUNDS ][ e_Team ][ MAX_FILE_LENGTH ]; #define charsmax(%1) sizeof( %1 ) - 1 #endif
#define _is_wav(%1) equali( %1[strlen( %1 ) - 4 ], ".wav" )
// - - - - - - - - - - - - - - - - - - - - - - -
public plugin_precache() { register_dictionary( "end_roundsound.txt" ); if( ( p_random_precache = get_cvar_pointer( "erc_random_precache" ) ) ) get_pcvar_string( p_random_precache, g_sRp_value, charsmax( g_sRp_value ) );
if( !p_random_precache ) return; #if !defined old_amxx g_lstSoundCT = ArrayCreate( MAX_FILE_LENGTH ); g_lstSoundT = ArrayCreate( MAX_FILE_LENGTH ); #endif
loading_file(); }
public plugin_init() { register_plugin( PLUGIN, VERSION, AUTHOR ); register_cvar( "ers_version", VERSION, FCVAR_SERVER | FCVAR_SPONLY );
register_event( "SendAudio", "eT_win" , "a", "2&%!MRAD_terwin" ); register_event( "SendAudio", "eCT_win", "a", "2&%!MRAD_ctwin" );
p_enabled = register_cvar( "ers_enabled" , "1" ); p_player_toggle = register_cvar( "ers_player_toggle" , "1" ); p_time_ads = register_cvar( "erc_time_ads" , "120" );
if( !p_random_precache ) { register_cvar( "erc_random_precache", g_sRp_value ); server_cmd( "restart" ); }
register_clcmd( "say" , "cmd_Say" ); register_clcmd( "say_team" , "cmd_Say" );
g_msgSayText = get_user_msgid( "SayText" ); }
public client_authorized( id ) g_pHeardSound[id] = true;
public client_disconnect( id ) { g_pHeardSound[id] = true; remove_task( id + TASKID_ADS ); }
public client_putinserver( id ) { new Float:time = get_pcvar_float( p_time_ads );
if( !time ) return;
remove_task( id + TASKID_ADS ); set_task( time, "show_ads", id + TASKID_ADS, _, _, "b" ); }
public show_ads( taskid ) { new id = taskid - TASKID_ADS; ShowPrint( id, "%L", id, "ERS_DISPLAY_ADS", g_CmdChat ); }
public cmd_Say( id ) { if( !get_pcvar_num( p_enabled ) ) return PLUGIN_CONTINUE;
static sMsg[64]; read_argv( 1, sMsg, charsmax( sMsg ) );
if( equali( sMsg, g_CmdChat ) ) { if( !get_pcvar_num( p_player_toggle ) ) { ShowPrint( id, "%L", id, "ERS_CMD_DISABLED" ); return PLUGIN_HANDLED; }
g_pHeardSound[id] = g_pHeardSound[id] ? false : true; ShowPrint( id, "%L", id, g_pHeardSound[id] ? "ERS_SOUND_ENABLED" : "ERS_SOUND_DISABLED" );
return PLUGIN_HANDLED; }
return PLUGIN_CONTINUE; }
public eT_win() { if( !g_nSnd[ e_Team:T ] ) return;
play_sound( e_Team:T ); }
public eCT_win() { if( !g_nSnd[ e_Team:CT ] ) return;
play_sound( e_Team:CT ); }
play_sound( iTeam ) { static // - - - - - - - - - - - - - - - - sCurSnd[ MAX_FILE_LENGTH ]; // - - - - - - - - - - - - - - - -
new iRand;
if( g_nSnd[ iTeam ] > 1 ) iRand = random( g_nSnd[ iTeam ] );
#if defined old_amxx copy( sCurSnd, MAX_FILE_LENGTH - 1, g_sTeam_sounds[ iRand ][ iTeam ] ); #else ArrayGetString( iTeam == CT ? g_lstSoundCT : g_lstSoundT, iRand, sCurSnd, MAX_FILE_LENGTH - 1 ); #endif
_is_wav( sCurSnd ) ?
format( sCurSnd, MAX_FILE_LENGTH - 1, "spk %s", sCurSnd[6] ) : format( sCurSnd, MAX_FILE_LENGTH - 1, "mp3 play %s", sCurSnd );
if( get_pcvar_num( p_player_toggle ) ) { static // - - - - - - - - - - - iPlayers[32], iNum, pid; // - - - - - - - - - - -
get_players( iPlayers, iNum, "c" );
for( new i; i < iNum; i++ ) { pid = iPlayers[i];
if( !g_pHeardSound[pid] || is_user_bot( pid ) ) continue;
client_cmd( pid, "%s", sCurSnd ); } } else client_cmd( 0, "%s", sCurSnd ); }
get_prefix( sMap[], iLen_map, sMapType[], iLen_type ) { new // - - - - - - - - - sRest[32]; // - - - - - - - - -
get_mapname( sMap, iLen_map ); strtok( sMap, sMapType, iLen_type, sRest, charsmax( sRest ), '_', 1 ); }
loading_file() { static // - - - - - - - - - - - - - - - - - sPath[ MAX_FILE_LENGTH ], // | sConfigsDir[64], sPrefix[6], sMap[32]; // - - - - - - - - - - - - - - - - -
get_prefix( sMap, charsmax( sMap ), sPrefix, charsmax( sPrefix ) ); get_configsdir( sConfigsDir, charsmax( sConfigsDir ) );
new bool:bFound;
for( new i = 1; i <= 3; i++ ) { switch( i ) { case 1 : formatex( sPath, charsmax( sPath ), "%s/%s/prefix-%s.%s", sConfigsDir, g_FileFolder, sPrefix, g_FilePrefix ); case 2 : formatex( sPath, charsmax( sPath ), "%s/%s/%s.%s", sConfigsDir, g_FileFolder, sMap, g_FilePrefix ); case 3 : formatex( sPath, charsmax( sPath ), "%s/%s.%s", sConfigsDir, g_FileName, g_FilePrefix );
default : break; }
if( !CheckFile( sPath ) ) continue;
bFound = true; break; }
log_amx( "---" );
bFound ? log_amx( "%L", LANG_SERVER, "ERS_LOG_LOADING", sPath ) : log_amx( "%L", LANG_SERVER, "ERS_LOG_NO_FILES_FOUND" );
load_sound( sPath ); }
load_sound( const file[] ) { new // - - - - - - - - - - - - - - - sBuffer[256], // | sLeft[ MAX_FILE_LENGTH ], sRight[4], sExt[6], // | eTeam; // - - - - - - - - - - - - - - -
new fp = fopen( file, "rt" );
while( !feof( fp ) ) { fgets( fp, sBuffer, charsmax( sBuffer ) );
trim( sBuffer );
if( !sBuffer[0] || sBuffer[0] == ';' || ( sBuffer[0] == '/' && sBuffer[1] == '/' ) ) continue;
if( sBuffer[0] != '"' || strlen( sBuffer ) < 11 ) continue;
parse( sBuffer, sLeft, charsmax( sLeft ), sRight, charsmax( sRight ) ); formatex( sExt, charsmax( sExt ), sLeft[ strlen( sLeft ) - 4 ] );
if( equali( sExt, ".mp3" ) == -1 || equali( sExt, ".wav" ) == -1 ) { log_amx( "%L", LANG_SERVER, "ERS_LOG_UNKNOW_EXTENSION", sExt ); continue; }
if( !file_exists( sLeft ) ) { log_amx( "%L", LANG_SERVER, "ERS_LOG_INEXISTENT_FILE", sLeft ); continue; }
eTeam = NULL;
if( equali( sRight, "CT" ) ) eTeam = CT;
else if( equali( sRight, "T" ) ) eTeam = T;
if( eTeam == NULL ) { log_amx( "%L", LANG_SERVER, "ERS_LOG_NO_TEAM_SOUND", sLeft ); continue; }
#if defined old_amxx copy( g_sTeam_sounds[ g_nSnd[ eTeam ] ][ eTeam ], MAX_FILE_LENGTH - 1, sLeft ); #else ArrayPushString( eTeam == CT ? g_lstSoundCT : g_lstSoundT, sLeft ); #endif
++g_nSnd[ eTeam ]; } fclose( fp );
if( g_nSnd[ e_Team:T ] > 1 || g_nSnd[ e_Team:CT ] > 1 ) { new iMax_t, iMax_ct; GetPrecacheValue( iMax_t, iMax_ct );
#if defined old_amxx UpdateArray( iMax_t, e_Team:T ); UpdateArray( iMax_ct, e_Team:CT ); #else p_DeleteRandomItem( iMax_t , e_Team:T , g_lstSoundT ); p_DeleteRandomItem( iMax_ct, e_Team:CT, g_lstSoundCT ); #endif }
log_amx( "---" );
#if defined _DEBUG log_amx( "[ Loading %d CTs Sounds ]", g_nSnd[ e_team:CT ] ); #endif #if defined old_amxx PrecacheSounds( e_Team:CT ); #else PrecacheSounds_n( g_lstSoundCT ); #endif
#if defined _DEBUG log_amx( "[ Loading %d Ts Sounds ]", g_nSnd[ e_team:T ] ); #endif #if defined old_amxx PrecacheSounds( e_Team:T ); #else PrecacheSounds_n( g_lstSoundT ); #endif }
GetPrecacheValue( &iMax_t, &iMax_ct ) { trim( g_sRp_value ); new pos = contain( g_sRp_value, "-" );
if( pos > 0 ) { iMax_ct = str_to_num( g_sRp_value[ pos + 1 ] ) g_sRp_value[ pos ] = '^0'; iMax_t = str_to_num( g_sRp_value ); } else { iMax_t = str_to_num( g_sRp_value ); iMax_ct = iMax_t; } }
stock UpdateArray( iMax, iTeam ) { new const iCnt_sound = g_nSnd[ iTeam ]; if( !iMax || iMax == iCnt_sound ) return;
if( iMax >= iCnt_sound ) iMax = iCnt_sound - 1;
static sTmp_sounds[ MAX_SOUNDS ][ e_Team ][ MAX_FILE_LENGTH ], iLast_number[ MAX_SOUNDS ];
new i, iRand; for( i = 0; i < iCnt_sound; i++ ) { copy( sTmp_sounds[i][ iTeam ], MAX_FILE_LENGTH - 1, g_sTeam_sounds[i][ iTeam ] ); g_sTeam_sounds[i][ iTeam ][0] = '^0'; }
arrayset( iLast_number, 0, charsmax( iLast_number ) );
i = 0; while( i != iMax ) { check: iRand = random( iCnt_sound );
if( iLast_number[ iRand ] ) goto check;
copy( g_sTeam_sounds[i][ iTeam ], MAX_FILE_LENGTH - 1, sTmp_sounds[ iRand ][ iTeam ] ); ++i; iLast_number[ iRand ] = 1; }
g_nSnd[ iTeam ] = iMax; }
stock p_DeleteRandomItem( iMax, iTeam, Array:sSound_a ) { new const iCnt_sound = g_nSnd[ iTeam ]; if( !iMax || iMax == iCnt_sound ) return;
if( iMax >= iCnt_sound ) iMax = iCnt_sound - 1;
DeleteRandomItem( iCnt_sound - iMax, sSound_a ); g_nSnd[ iTeam ] = iMax; }
stock DeleteRandomItem( iRandom_n, Array:sSound_a ) { new i;
while( i++ != iRandom_n ) ArrayDeleteItem( sSound_a, random( ArraySize( sSound_a ) ) ); }
stock PrecacheSounds( iTeam ) { for( new i; i < g_nSnd[ iTeam ]; i++ ) { PrecacheFile( g_sTeam_sounds[i][ iTeam ] );
#if defined _DEBUG log_amx( " - %s", g_sTeam_sounds[i][ iTeam ] ); #endif }
log_amx( "---" ); }
stock PrecacheSounds_n( Array:sSound_a ) { static // - - - - - - - - - - - - - - - - - - - sFile[ MAX_FILE_LENGTH ], iFileLen = charsmax( sFile ); // - - - - - - - - - - - - - - - - - - -
for( new i; i < ArraySize( sSound_a ); i++ ) { ArrayGetString( sSound_a, i, sFile, iFileLen ); PrecacheFile( sFile );
#if defined _DEBUG log_amx( " - %s", sFile ); #endif }
log_amx( "---" ); }
PrecacheFile( const sound[] ) { _is_wav( sound ) ?
precache_sound( sound[6] ) : precache_generic( sound ); }
ShowPrint( id, const sMsg[], { Float, Sql, Result, _ }:... ) { static // - - - - - - - - - newMsg[191], message[191], // | tNewMsg; // - - - - - - - - -
tNewMsg = charsmax( newMsg ); vformat( newMsg, tNewMsg, sMsg, 3 );
replace_all( newMsg, tNewMsg, "!t", "^3" ); replace_all( newMsg, tNewMsg, "!g", "^4" ); replace_all( newMsg, tNewMsg, "!n", "^1" );
formatex( message, charsmax( message ), "^4[ERS]^1 %s", newMsg );
emessage_begin( MSG_ONE, g_msgSayText, _, id ); ewrite_byte( id ); ewrite_string( message ); emessage_end(); } bool:CheckFile( const file[] ) { new // - - - - - - - - - - - - - - - - - sBuffer[256], fp = fopen( file, "rt" ); // - - - - - - - - - - - - - - - - -
if( !fp ) return false;
while( !feof( fp ) ) { fgets( fp, sBuffer, charsmax( sBuffer ) );
trim( sBuffer );
if( !sBuffer[0] || sBuffer[0] == ';' || ( sBuffer[0] == '/' && sBuffer[1] == '/' ) || sBuffer[0] != '"' ) continue;
if( ( contain( sBuffer, ".mp3^"" ) != -1 || contain( sBuffer, ".wav^"" ) != -1 ) && ( contain( sBuffer, "^"T^"" ) != -1 || contain( sBuffer, "^"CT^"" ) != -1 ) ) return true; } fclose( fp );
return false; } [/spoiler]
|