Ok,
I did it but I think is very unorthodox, as I said I'm not very familiar with amxx language. here it is:
PHP Code:
#include <amxmodx>
#define PLUG_ADMIN ADMIN_LEVEL_G //Access flag required to bypass demo recording if amx_demo_disableforadmins=1
#pragma semicolon 1
new g_Toggle, g_DMod, g_UseNI, g_RStartAfter, g_DemoName, g_DemoNamePrefix, g_DisForAdm;
public plugin_init() {
register_plugin( "Auto Demo Recorder", "1.5", "IzI" );
g_Toggle = register_cvar( "amx_demo", "1" );
g_DMod = register_cvar( "amx_demo_mode", "0" );
g_UseNI = register_cvar( "amx_demo_steamid", "0" );
g_RStartAfter = register_cvar( "amx_demo_rectime", "15" ); // If it is less than 5, it will automatically set to 5, but willn't apply the changes to the console. I recommend to use default settings.
g_DemoName = register_cvar( "amx_demo_name", "Autorecorded demo" );
g_DemoNamePrefix = register_cvar( "amx_demo_prefix", "AMXX" );
g_DisForAdm = register_cvar( "amx_demo_disableforadmins","1" );
register_dictionary( "demorecorder.txt" );
}
public client_putinserver( id ) {
if( get_pcvar_num( g_Toggle ) ) {
new Float:delay = get_pcvar_float( g_RStartAfter );
if( delay < 5 )
set_pcvar_float( g_RStartAfter, ( delay = 5.0 ) );
set_task( delay, "Record", id );
}
}
public Record( id ) {
if( !is_user_connected( id ) || get_pcvar_num( g_Toggle ) != 1 || get_pcvar_num( g_DisForAdm ) == 1 && get_user_flags(id) & PLUG_ADMIN )
return;
// Getting time, client SteamID, server's name, server's ip with port.
new szSName[128], szINamePrefix[64], szTimedata[9];
new iUseIN = get_pcvar_num( g_UseNI );
new iDMod = get_pcvar_num( g_DMod );
get_pcvar_string( g_DemoNamePrefix, szINamePrefix, 63 );
get_time ( "%H:%M:%S", szTimedata, 8 );
switch( iDMod ) {
case 0: get_pcvar_string( g_DemoName, szSName, 127 );
case 1: get_user_ip( 0, szSName, 127, 0 );
case 2: get_user_name( 0, szSName, 127 );
}
if( iUseIN ) {
new szCID[32];
get_user_authid( id, szCID, 31 );
format( szSName, 127, "[%s]%s", szCID, szSName );
}
// Replacing signs.
replace_all( szSName, 127, ":", "_" );
replace_all( szSName, 127, ".", "_" );
replace_all( szSName, 127, "*", "_" );
replace_all( szSName, 127, "/", "_" );
replace_all( szSName, 127, "|", "_" );
replace_all( szSName, 127, "\", "_" );
replace_all( szSName, 127, "?", "_" );
replace_all( szSName, 127, ">", "_" );
replace_all( szSName, 127, "<", "_" );
replace_all( szSName, 127, " ", "_" );
// Sending commands to client.
client_cmd( id, "stop; record ^"%s^"", szSName );
set_task ( 60.0, "StopRec", id);
}
public StopRec( id ) {
if( !is_user_connected( id ) || get_pcvar_num( g_Toggle ) != 1 || get_pcvar_num( g_DisForAdm ) == 1 && get_user_flags(id) & PLUG_ADMIN )
return;
client_cmd(id, "stop");
client_print(id, print_chat, "Demo recording has been stopped!");
}
I've added the last 7 lines of code (I stopped after 60 sec just for test).
PHP Code:
.....
set_task ( 60.0, "StopRec", id);
}
public StopRec( id ) {
if( !is_user_connected( id ) || get_pcvar_num( g_Toggle ) != 1 || get_pcvar_num( g_DisForAdm ) == 1 && get_user_flags(id) & PLUG_ADMIN )
return;
client_cmd(id, "stop");
client_print(id, print_chat, "Demo recording has been stopped!");
}
I believe is not the best way to do it but it works.
Now I have another idea and I want to ask for your help one more time.
I want to repeat the task, the Original task in in the script where the function Record is called, after an amount of time, lets say 5 min. Is this the right way to do it?
Original version:
PHP Code:
public client_putinserver( id ) {
if( get_pcvar_num( g_Toggle ) ) {
new Float:delay = get_pcvar_float( g_RStartAfter );
if( delay < 5 )
set_pcvar_float( g_RStartAfter, ( delay = 5.0 ) );
set_task( delay, "Record", id );
}
My Version:
PHP Code:
public client_putinserver( id ) {
if( get_pcvar_num( g_Toggle ) ) {
new Float:delay = get_pcvar_float( g_RStartAfter );
if( delay < 5 )
set_pcvar_float( g_RStartAfter, ( delay = 5.0 ) );
set_task( delay, "Record", id, repeat = 300.0);
}
I found the solution in here
http://www.amxmodx.org/funcwiki.php?...=1368#comments