format(szWriteData, charsmax(szWriteData), "^"%s^" ^"^" ^"t^" ^"ce^" // %s", szSteamID, szName)
Code: Select all
#include <amxmodx>
#include <amxmisc>
#include <nvault>
#include <hamsandwich>
#include <time_length>
#define PRUNE_TIME 2592000
new Trie:g_tSteamIDs;
new g_SlotFile[64], g_TotalTime[33];
new cvar_timer, g_cached_time;
new g_iMsgID_SayText, g_Vault;
public plugin_init()
{
register_plugin("Slot Time", "1.0","Alka/OvidiuS");
register_cvar("slottime" , "1.0" , (FCVAR_SERVER|FCVAR_SPONLY))
register_dictionary("timer.txt")
register_event("HLTV", "NewRound", "a", "1=0", "2=0");
RegisterHam(Ham_Spawn, "player", "fwHamPlayerSpawnPost", 1)
register_clcmd("say /online", "TimeOnline")
cvar_timer = register_cvar("amx_slot_time", "50")
g_iMsgID_SayText = get_user_msgid( "SayText" );
new configsDir[64]
get_configsdir(configsDir, charsmax(configsDir))
formatex(g_SlotFile, charsmax(g_SlotFile), "%s/slot.ini", configsDir)
g_tSteamIDs = TrieCreate();
if( !file_exists(g_SlotFile) )
{
new f = fopen(g_SlotFile, "wt" );
if( f )
{
fclose( f );
}
return;
}
new f = fopen( g_SlotFile, "rt" );
if( !f )
return;
while( !feof( f ) )
{
new szData[200];
fgets( f , szData , charsmax( szData ) );
if( !szData[0] || szData[0] == ';' || szData[0] == '/' && szData[1] == '/' )
continue;
new szParsedName[33], szParsedID[35];
parse(szData, szParsedID, charsmax(szParsedID), szParsedName, charsmax(szParsedName))
TrieSetCell( g_tSteamIDs , szParsedID , 1 );
}
fclose( f );
}
public plugin_cfg()
{
g_Vault = nvault_open("Time_played")
if ( g_Vault == INVALID_HANDLE )
set_fail_state( "Error opening nVault" );
nvault_prune(g_Vault, 0, get_systime() - PRUNE_TIME);
}
public TimeOnline(id)
{
new timep, szTotalTime[128];
timep = get_user_time(id, 1);
get_time_length(id, timep+g_TotalTime[id], timeunit_seconds, szTotalTime, charsmax(szTotalTime));
set_hudmessage(0, 255, 0, 0.34, 0.50, 0, 6.0, 4.0, 0.1, 0.2, -1);
show_hudmessage(id, "[PT] %L", id, "TIME_TOTAL_HUD", szTotalTime);
ChatColor(id, "^4[PT] ^1%L", id, "TIME_TOTAL_HUD", szTotalTime)
}
public fwHamPlayerSpawnPost(id)
{
if(!is_user_alive(id) || is_user_admin(id))
return PLUGIN_HANDLED;
new timep;
timep = get_user_time(id, 1);
if(timep+g_TotalTime[id] >= g_cached_time)
{
new szSteamID[ 35 ];
get_user_authid( id , szSteamID , charsmax( szSteamID ) );
if(!TrieKeyExists( g_tSteamIDs , szSteamID ))
{
new szWriteData[200], szName[33], szTotalTime[128];
get_user_name(id, szName, charsmax(szName))
get_time_length(id, timep+g_TotalTime[id], timeunit_seconds, szTotalTime, charsmax(szTotalTime));
TrieSetCell( g_tSteamIDs , szSteamID , 1 );
ChatColor(id, "^4[PT] ^1%L", id, "TIME_ONLINE", szTotalTime)
format(szWriteData, charsmax(szWriteData), "^"%s^" ^"^" ^"t^" ^"ce^" // %s", szSteamID, szName)
write_file(g_SlotFile, szWriteData)
server_cmd("amx_reloadadmins")
}
}
return PLUGIN_CONTINUE;
}
public NewRound()
g_cached_time = get_pcvar_num(cvar_timer)*60*60
public client_disconnect(id)
{
g_TotalTime[id] = g_TotalTime[id] + get_user_time(id);
SaveTime(id, g_TotalTime[id]);
}
public client_putinserver(id)
g_TotalTime[id] = LoadTime(id);
public LoadTime( id )
{
new szSteamID[35];
new vaultkey[128], vaultdata[128];
get_user_authid(id, szSteamID, charsmax( szSteamID ));
formatex(vaultkey, charsmax(vaultkey), "TIMEPLAYED%s", szSteamID);
nvault_get(g_Vault, vaultkey, vaultdata, charsmax(vaultdata));
return str_to_num(vaultdata);
}
public SaveTime(id,PlayedTime)
{
new szSteamID[35];
new vaultkey[128], vaultdata[128];
formatex(vaultdata, charsmax(vaultdata), "%d", PlayedTime);
get_user_authid(id, szSteamID, charsmax( szSteamID ));
formatex(vaultkey, charsmax(vaultkey), "TIMEPLAYED%s", szSteamID);
nvault_set(g_Vault, vaultkey, vaultdata);
}
public plugin_end()
{
nvault_close(g_Vault);
TrieDestroy(g_tSteamIDs)
}
stock ChatColor(const id, const input[], any:...)
{
new count = 1, players[32]
static msg[191]
vformat(msg, 190, input, 3)
replace_all(msg, 190, "!g", "^4") // Green Color
replace_all(msg, 190, "!y", "^1") // Default Color
replace_all(msg, 190, "!t", "^3") // Team Color
if (id) players[0] = id; else get_players(players, count, "ch")
{
for (new i = 0; i < count; i++)
{
if (is_user_connected(players[i]))
{
message_begin(MSG_ONE_UNRELIABLE, g_iMsgID_SayText, _, players[i])
write_byte(players[i]);
write_string(msg);
message_end();
}
}
}
}