Code: Select all
#include <amxmodx>#include <cstrike>#include <fun>#include <orpheu_memory>#include <orpheu_stocks>#include <hamsandwich>#include <round_terminator> new day, hudmessage3, surv, g_pGameRules, g_bRound; #define set_mp_pdata(%1,%2) ( OrpheuMemorySetAtAddress( g_pGameRules, %1, 1, %2 ) )#define get_mp_pdata(%1) ( OrpheuMemoryGetAtAddress( g_pGameRules, %1 ) ) public plugin_precache() { OrpheuRegisterHook( OrpheuGetFunction( "InstallGameRules" ), "OnInstallGameRules", OrpheuHookPost );} public OnInstallGameRules() { g_pGameRules = OrpheuGetReturn();} public plugin_init() { register_event("DeathMsg", "hook_Death", "a") register_logevent("RoundStart", 2, "0=World triggered", "1=Round_Start") register_logevent("RoundEnd", 2, "1=Round_End") RegisterHam(Ham_TakeDamage, "player", "hook_TakeDamage") hudmessage3 = CreateHudSyncObj();} public plugin_natives () { register_library( "round_terminator" ) register_native( "TerminateRound", "Native_TerminateRound" );} public Native_TerminateRound ( const plugin, const params ) { _TerminateRound( get_param( 2 ) );} public hook_Death() { if(read_data(2) == surv) _TerminateRound( TeamWinning_Ct )} public client_disconnect(id) { if(id == surv) _TerminateRound( TeamWinning_Ct )} public hook_TakeDamage() { if(g_bRound) return HAM_SUPERCEDE; return HAM_IGNORED;} public RoundStart() { g_bRound = false; new players[32], num get_players(players, num, "ae", "TERRORIST") if(num && day == 0) { surv = players[random(num)] if(is_user_alive(surv)) { set_user_health(surv, 750) cs_set_weapon_ammo(give_item(surv, "weapon_m4a1"), 999) cs_set_weapon_ammo(give_item(surv, "weapon_ak47"), 999) set_user_rendering(surv, kRenderFxGlowShell, random(256), random(256), random(256)) } set_hudmessage(random(256), random(256), random(256), -1.0, 0.3, 2, 0.5, 5.0) ShowSyncHudMsg(0, hudmessage3, "Sianden bus Isgyventojo diena!") set_cvar_num("mp_friendlyfire", 1) set_cvar_num("mp_tkpunish", 0) get_players(players, num, "h") for(new i, id; i <= num; i++) { id = players[i] if(surv == id) continue if(is_user_alive(id)) { strip_user_weapons(id) //gunsmenu(id) } } }} public RoundEnd() { set_cvar_num("mp_friendlyfire", 0) if(surv) { set_user_rendering(surv) surv = 0 } g_bRound = true;} bool:_TerminateRound ( const teamWinning ) { if ( !( TeamWinning_Terrorist <= teamWinning <= TeamWinning_Ct ) ) { return false; } new accountOffsetName[ 22 ]; new numTeamOffsetName[ 22 ]; new roundEndmessage [ 16 ]; new sentenceName [ 16 ]; new winStatus; new event; new teamMoney = 3000; if ( get_mp_pdata( "m_bMapHasBombTarget" ) ) { teamMoney = 3250; } switch ( teamWinning ) { case TeamWinning_Terrorist : { accountOffsetName = "m_iAccountTerrorist"; numTeamOffsetName = "m_iNumTerroristWins"; sentenceName = "%!MRAD_TERWIN"; roundEndmessage = "#Terrorists_Win"; event = 9; winStatus = 2; } case TeamWinning_Ct : { accountOffsetName = "m_iAccountCT"; numTeamOffsetName = "m_iNumCTWins"; sentenceName = "%!MRAD_CTWIN"; roundEndmessage = "#CTs_Win"; event = 8; winStatus = 1; } } BroadcastAudio( .senderID = 0, .audioCode = sentenceName, .pitch = 100, .notifyAllPlugins = true ); set_mp_pdata( accountOffsetName, get_mp_pdata( accountOffsetName ) + teamMoney ); if ( get_mp_pdata( "m_iNumSpawnableTerrorist" ) && get_mp_pdata( "m_iNumSpawnableCT" ) ) { set_mp_pdata( numTeamOffsetName, get_mp_pdata( numTeamOffsetName ) + 1 ); UpdateTeamScores( .notifyAllPlugins = true ); } EndRoundMessage( roundEndmessage, event, .notifyAllPlugins = true ); RoundTerminating( winStatus, .delay = 5.0 ); return true;} RoundTerminating( const winStatus, const Float:delay ) { set_mp_pdata( "m_iRoundWinStatus" , winStatus ); set_mp_pdata( "m_fTeamCount" , get_gametime() + delay ); set_mp_pdata( "m_bRoundTerminating", true );} BroadcastAudio ( const senderID, const audioCode[], const pitch, const bool:notifyAllPlugins = false ) { static messageSendAudio; if ( messageSendAudio || ( messageSendAudio = get_user_msgid( "SendAudio" ) ) ) { if ( notifyAllPlugins ) { emessage_begin( MSG_BROADCAST, messageSendAudio ); ewrite_byte( senderID ); ewrite_string( audioCode ); ewrite_short( pitch ); emessage_end(); } else { message_begin( MSG_BROADCAST, messageSendAudio ); write_byte( senderID ); write_string( audioCode ); write_short( pitch ); message_end(); } }} UpdateTeamScores ( const bool:notifyAllPlugins = false ) { static OrpheuFunction:handleFuncUpdateTeamScores; if ( !handleFuncUpdateTeamScores ) { handleFuncUpdateTeamScores = OrpheuGetFunction( "UpdateTeamScores", "CHalfLifeMultiplay" ) } ( notifyAllPlugins ) ? OrpheuCallSuper( handleFuncUpdateTeamScores, g_pGameRules ) : OrpheuCall( handleFuncUpdateTeamScores, g_pGameRules );} EndRoundMessage ( const message[], const event, const bool:notifyAllPlugins = false ) { static OrpheuFunction:handleFuncEndRoundMessage; if ( !handleFuncEndRoundMessage ) { handleFuncEndRoundMessage = OrpheuGetFunction( "EndRoundMessage" ); } ( notifyAllPlugins ) ? OrpheuCallSuper( handleFuncEndRoundMessage, message, event ) : OrpheuCall( handleFuncEndRoundMessage, message, event );}