This occurs mostly because of I'm using nVault, I must turn to MySQL. If you still need it I'll convert it to MySQL to prevent resetting.
Played Time v1.1
He who fails to plan is planning to fail
Try and let me know if it's working good or not:
- #include <zombie_escape>
- #include <nvault>
- new const g_szLogFile[] = "PlayedTime.log" // MySQL Errors log file
- // MySQL Table
- new const g_szTable[] =
- " \
- CREATE TABLE IF NOT EXISTS `time_played` \
- ( \
- `SteamID` varchar(34) NOT NULL, \
- `PlayedTime` int(16) NOT NULL, \
- PRIMARY KEY (`SteamID`) \
- ); \
- "
- #define PLAYED_TIME_TASK 9100
- new const g_szVault_Name[] = "Played_Time"
- new g_iPlayedTime[33], g_iVaultHandler, Handle:g_hTupleHandler
- new g_pCvarSaveType, g_pCvarDBInfo[4]
- // Database
- enum
- {
- Host = 0,
- User,
- Pass,
- DB
- }
- public plugin_natives()
- {
- // Native to return played time in seconds, plugin will save using nVault
- register_native("ze_get_played_time", "native_ze_get_played_time", 1)
- }
- public plugin_init()
- {
- register_plugin("Played Time", "1.0", "Raheem")
- // Cvars
- g_pCvarSaveType = register_cvar("ze_played_time_save_type", "1") // 0 = nVault, 1 = SQL
- g_pCvarDBInfo[Host] = register_cvar("ze_played_time_host", "localhost")
- g_pCvarDBInfo[User] = register_cvar("ze_played_time_user", "user")
- g_pCvarDBInfo[Pass] = register_cvar("ze_played_time_pass", "pass")
- g_pCvarDBInfo[DB] = register_cvar("ze_played_time_dbname", "dbname")
- // Commands
- register_clcmd("say /played", "ShowPlayedTime")
- register_clcmd("say_team /played", "ShowPlayedTime")
- // Initialize MySQL - Delay 0.1 second required so we make sure that our zombie_escape.cfg already executed and cvars values loaded from it
- set_task(0.1, "Delay_MySQL_Init")
- }
- public Delay_MySQL_Init()
- {
- MySQL_Init()
- }
- public MySQL_Init()
- {
- if (!get_pcvar_num(g_pCvarSaveType))
- return
- new szHost[64], szUser[32], szPass[32], szDB[128]
- get_pcvar_string(g_pCvarDBInfo[Host], szHost, charsmax(szHost))
- get_pcvar_string(g_pCvarDBInfo[User], szUser, charsmax(szUser))
- get_pcvar_string(g_pCvarDBInfo[Pass], szPass, charsmax(szPass))
- get_pcvar_string(g_pCvarDBInfo[DB], szDB, charsmax(szDB))
- g_hTupleHandler = SQL_MakeDbTuple(szHost, szUser, szPass, szDB)
- // Let's ensure that the g_hTupleHandler will be valid, we will access the database to make sure
- new iErrorCode, szError[512], Handle:hSQLConnection
- hSQLConnection = SQL_Connect(g_hTupleHandler, iErrorCode, szError, charsmax(szError))
- if(hSQLConnection != Empty_Handle)
- {
- log_amx("[MySQL] Successfully connected to host: %s (ALL IS OK).", szHost)
- SQL_FreeHandle(hSQLConnection)
- }
- else
- {
- // Disable plugin, and display the error
- set_fail_state("Failed to connect to MySQL database: %s", szError)
- }
- // Create our table
- SQL_ThreadQuery(g_hTupleHandler, "QueryCreateTable", g_szTable)
- }
- public QueryCreateTable(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
- {
- SQL_IsFail(iFailState, iError, szError, g_szLogFile)
- }
- public ShowPlayedTime(id)
- {
- ze_colored_print(id, "!tYour played time!y: !g%i !tMinutes!y!", g_iPlayedTime[id]/60)
- }
- public client_putinserver(id)
- {
- if(is_user_hltv(id) || is_user_bot(id))
- return
- // Just 1 second delay
- set_task(0.5, "DelayLoad", id)
- // Save played seconds
- set_task(1.0, "IncreaseTimePlayed", id+PLAYED_TIME_TASK, _, _, "b")
- }
- public DelayLoad(id)
- {
- // Load his time played
- LoadPlayedTime(id)
- }
- public IncreaseTimePlayed(taskid)
- {
- new id = taskid - PLAYED_TIME_TASK
- g_iPlayedTime[id]++
- }
- public client_disconnected(id)
- {
- if(is_user_hltv(id) || is_user_bot(id))
- return
- // Save played time
- SavePlayedTime(id)
- remove_task(id+PLAYED_TIME_TASK)
- remove_task(id)
- g_iPlayedTime[id] = 0
- }
- SavePlayedTime(id)
- {
- new szAuthID[35]
- get_user_authid(id, szAuthID, charsmax(szAuthID))
- new szData[128]
- num_to_str(g_iPlayedTime[id], szData, charsmax(szData))
- if (!get_pcvar_num(g_pCvarSaveType))
- {
- // Open the Vaults
- g_iVaultHandler = nvault_open(g_szVault_Name)
- // Saves His Data
- nvault_set(g_iVaultHandler, szAuthID, szData)
- // Close Vaults
- nvault_close(g_iVaultHandler)
- }
- else
- {
- new szQuery[128]
- formatex(szQuery, charsmax(szQuery), "UPDATE `time_played` SET `PlayedTime` = '%d' WHERE `SteamID` = '%s';", g_iPlayedTime[id], szAuthID)
- SQL_ThreadQuery(g_hTupleHandler, "QueryUpdateData", szQuery)
- }
- }
- public plugin_end()
- {
- if (get_pcvar_num(g_pCvarSaveType))
- {
- if (g_hTupleHandler != Empty_Handle)
- {
- SQL_FreeHandle(g_hTupleHandler)
- }
- }
- }
- public QueryUpdateData(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
- {
- SQL_IsFail(iFailState, iError, szError, g_szLogFile)
- }
- LoadPlayedTime(id)
- {
- new szData[128], szAuthID[35]
- get_user_authid(id, szAuthID, charsmax(szAuthID))
- if (!get_pcvar_num(g_pCvarSaveType))
- {
- // Useless Variable
- new iTimestamp, iExists
- // Open the Vault
- g_iVaultHandler = nvault_open(g_szVault_Name)
- iExists = nvault_lookup(g_iVaultHandler, szAuthID, szData, charsmax(szData), iTimestamp)
- // Close Vault
- nvault_close(g_iVaultHandler)
- if (!iExists)
- {
- g_iPlayedTime[id] = 0
- SavePlayedTime(id)
- }
- else
- {
- g_iPlayedTime[id] = str_to_num(szData)
- }
- }
- else
- {
- new szQuery[128], szData[5]
- formatex(szQuery, charsmax(szQuery), "SELECT `PlayedTime` FROM `time_played` WHERE ( `SteamID` = '%s' );", szAuthID)
- num_to_str(id, szData, charsmax(szData))
- SQL_ThreadQuery(g_hTupleHandler, "QuerySelectData", szQuery, szData, charsmax(szData))
- }
- }
- public QuerySelectData(iFailState, Handle:hQuery, szError[], iError, szData[])
- {
- if(SQL_IsFail(iFailState, iError, szError, g_szLogFile))
- return
- new id = str_to_num(szData)
- // No results for this query means that player not saved before
- if(!SQL_NumResults(hQuery))
- {
- // This is new player
- g_iPlayedTime[id] = 0
- // Get user steamid
- new szAuthID[36]
- get_user_authid(id, szAuthID, charsmax(szAuthID))
- // Insert his data to our database
- new szQuery[128]
- formatex(szQuery, charsmax(szQuery), "INSERT INTO `time_played` (`SteamID`, `PlayedTime`) VALUES ('%s', '%d');", szAuthID, g_iPlayedTime[id])
- SQL_ThreadQuery(g_hTupleHandler, "QueryInsertData", szQuery)
- return
- }
- new iPlayedTimeColumn = SQL_FieldNameToNum(hQuery, "PlayedTime")
- // Read the played time for this player
- g_iPlayedTime[id] = SQL_ReadResult(hQuery, iPlayedTimeColumn)
- }
- public QueryInsertData(iFailState, Handle:hQuery, szError[], iError, szData[], iSize, Float:flQueueTime)
- {
- SQL_IsFail(iFailState, iError, szError, g_szLogFile)
- }
- public native_ze_get_played_time(id)
- {
- if(!is_user_connected(id))
- {
- log_error(AMX_ERR_NATIVE, "[ZE] Invalid Player id (%d)", id)
- return -1;
- }
- return g_iPlayedTime[id]
- }
He who fails to plan is planning to fail
Create an account or sign in to join the discussion
You need to be a member in order to post a reply
Create an account
Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute
Sign in
Who is online
Users browsing this forum: No registered users and 0 guests