|
sıɹɹoɥɔ ʞɔnu
|

03-10-2010
, 08:57
Re: force round end
|
#12
|
I found a method, but not always works
PHP Code:
#include <amxmodx> #include <amxmisc> #include <fakemeta> #include <cstrike>
#define PLUGIN "Force Round End" #define VERSION "1.2" #define AUTHOR "Alka"
#define TASK_ID 1337
new bool:g_round_started new g_roundtime
new g_ipsz_dmg_ent
new g_MsgTextMsg new g_MsgDeathMsg
new g_endround
public plugin_init() { register_plugin(PLUGIN, VERSION, AUTHOR) register_event("HLTV", "event_new_round", "a", "1=0", "2=0") register_logevent("logevent_round_start", 2, "1=Round_Start") register_logevent("logevent_round_end", 2, "1=Round_End") register_event("TextMsg", "round_restart", "a", "2&#Game_C", "2&#Game_w") register_message(get_user_msgid("RoundTime"), "Round_Timer") g_ipsz_dmg_ent = engfunc(EngFunc_AllocString, "trigger_hurt") g_MsgTextMsg = get_user_msgid("TextMsg") g_MsgDeathMsg = get_user_msgid("DeathMsg") }
public event_new_round() { g_endround = false }
public logevent_round_start() { g_round_started = true }
public logevent_round_end() { g_endround = true remove_task( TASK_ID ) }
public round_restart() remove_task( TASK_ID )
public Round_Timer() { if( g_round_started ) g_round_started = false else return g_roundtime = get_msg_arg_int( 1 ) set_task( 2.0 + float( g_roundtime ), "force_end", TASK_ID ) }
public force_end() { team_loose( CS_TEAM_T ) }
public team_loose( CsTeams:team ) { if( g_endround ) return PLUGIN_CONTINUE
new player[ 32 ], num, player2[ 32 ], num2 get_players( player, num, "aeh", team == CS_TEAM_T ? "TERRORIST" : "CT" ) get_players( player2, num2, "aeh", team == CS_TEAM_CT ? "TERRORIST" : "CT" ) if( !num || !num2 ) return PLUGIN_CONTINUE
new id = engfunc( EngFunc_CreateFakeClient, "fake_client" ) if( !id ) return PLUGIN_CONTINUE
for( new i = 0; i < num; ++i ) cs_set_user_team( player[ i ], CS_TEAM_SPECTATOR )
set_msg_block( g_MsgTextMsg, BLOCK_SET ) dllfunc( DLLFunc_ClientPutInServer, id )
cs_set_user_team( id, team ) cs_user_spawn( id )
engfunc( EngFunc_SetOrigin, id, Float:{ 8191.0, 8191.0, 8191.0 } )
set_msg_block( g_MsgTextMsg, BLOCK_NOT ) set_msg_block( g_MsgDeathMsg, BLOCK_ONCE ) fc_fakedamage( id )
set_msg_block( g_MsgTextMsg, BLOCK_SET ) server_cmd( "kick #%d", get_user_userid( id ) ) server_exec() set_msg_block( g_MsgTextMsg, BLOCK_NOT )
for( new i = 0; i < num; ++i ) cs_set_user_team( player[ i ], team )
return PLUGIN_HANDLED }
fc_fakedamage( id ) { new entity = engfunc( EngFunc_CreateNamedEntity, g_ipsz_dmg_ent ) if( !entity ) return PLUGIN_CONTINUE
set_dmg_ent_kvd( entity, "dmg", "1000.0" ) set_dmg_ent_kvd( entity, "damagetype", "0" ) set_dmg_ent_kvd( entity, "origin", "8191 8191 8191" )
dllfunc( DLLFunc_Spawn, entity ) set_pev( entity, pev_classname, "fc_killer" ) dllfunc( DLLFunc_Touch, entity, id ) engfunc( EngFunc_RemoveEntity, entity )
return PLUGIN_HANDLED }
set_dmg_ent_kvd( entity, key[ ], value[ ] ) { set_kvd( 0, KV_ClassName, "trigger_hurt") set_kvd( 0, KV_KeyName, key ) set_kvd( 0, KV_Value, value ) set_kvd( 0, KV_fHandled, 0 )
return dllfunc( DLLFunc_KeyValue, entity, 0 ) }
Code:
Scoring will not start until both teams have players
Scoring will not start until both teams have players
Wtf !? When I tested, was all players alive.
|
|