- #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]/60, 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]/60)
- 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]/60
- }
Time Played problem
Time Played problem
Hi again , i got this time played with sql support from raheem, and i made it to display in minutes, but when an user reach 100 minutes the database reset to 0 ( only in that user case )
All I did was to divide g_iPlayedTime [id] by 60
Hi,
My plugin not good coded, and will in some cases cause resets. Although I coded but I did not use it.
Please use this: https://forums.alliedmods.net/showthread.php?t=201869
Tested and working fully good.
My plugin not good coded, and will in some cases cause resets. Although I coded but I did not use it.
Please use this: https://forums.alliedmods.net/showthread.php?t=201869
Tested and working fully good.
He who fails to plan is planning to fail
I need help !! When i change it To Say /online and i wanna time be saved not when i leave time rest to 00:00 i wanna it saved
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 3 guests