Code:
#include <amxmodx>
#include <cromchat>
#include <cstrike>
#include <nvault>
#if !defined client_disconnected
#define client_disconnected client_disconnect
#endif
#if !defined MAX_PLAYERS
const MAX_PLAYERS = 32
#endif
#if !defined MAX_NAME_LENGTH
const MAX_NAME_LENGTH = 32
#endif
#if !defined MAX_AUTHID_LENGTH
const MAX_AUTHID_LENGTH = 64
#endif
const TIME_REQUIRED = 10
const REWARD_AMOUNT = 10
const MAX_NUM_LENGTH = 16
const Float:TIME_FREQ = 60.0
new const REWARD_NAME[] = "$"
// Reset the player's time if he isn't in the server longer than this many seconds
const Float:MAX_OUT_TIME = 300.0
new Trie:g_tPlayers
new g_szInfo[MAX_PLAYERS + 1][MAX_AUTHID_LENGTH]
new g_iPlayedTime[MAX_PLAYERS + 1]
public plugin_init()
{
register_plugin("Time Rewards", "1.0", "OciXCrom")
CC_SetPrefix("&x04[Time Rewards]")
g_tPlayers = TrieCreate()
}
public plugin_end()
{
TrieDestroy(g_tPlayers)
}
public client_authorized(id)
{
new szData[MAX_NUM_LENGTH * 2]
get_user_authid(id, g_szInfo[id], charsmax(g_szInfo[]))
if(TrieGetString(g_tPlayers, g_szInfo[id], szData, charsmax(szData)))
{
new szTime[16], szStamp[16]
parse(szData, szTime, charsmax(szTime), szStamp, charsmax(szStamp))
g_iPlayedTime[id] = get_systime() - str_to_num(szStamp) > MAX_OUT_TIME ? 0 : str_to_num(szTime)
}
set_task(TIME_FREQ, "increase_played_time", id, .flags = "b")
}
public client_disconnected(id)
{
new szData[MAX_NUM_LENGTH * 2]
formatex(szData, charsmax(szData), "%i %i", g_iPlayedTime[id], get_systime())
TrieSetString(g_tPlayers, g_szInfo[id], szData)
remove_task(id)
}
public increase_played_time(id)
{
if(!(++g_iPlayedTime[id] % TIME_REQUIRED))
{
new szName[MAX_NAME_LENGTH]
get_user_name(id, szName, charsmax(szName))
CC_SendMessage(0, "&x03%s &x01received &x04%i%s for playing &x04%i &x01minutes (&x04%i &x01total).", szName, REWARD_AMOUNT, REWARD_NAME, TIME_REQUIRED, g_iPlayedTime[id])
cs_set_user_money(id, cs_get_user_money(id) + REWARD_AMOUNT)
}
}