Код за потвърждение: Избери целия код
#include <amxmodx>
#include <amxmisc>
#include <cromchat>
#include <sqlx>
#include <fakemeta>
#pragma ctrlchar '\'
#define MAX_DATA_ARRAY_SIZE 5
#if AMXX_VERSION_NUM < 183
#define MAX_NAME_LENGTH 32
#define client_disconnected client_disconnect
#endif
#define SQLITE 0
#define MYSQL 1
#define SAVE_TYPE 1
#define ADMIN_ACCESS_LETTER "e"
#define TOP_DEFAULT_NUMBER 15
// Enabled, Disabled
//#define USE_NAME
//#define PREPARE_TOP_MOTD
//#define GET_TIME_INSTANT_QUERY
#define DO_NOT_LOG
new const PREFIX[] = "^x01[^x04LS Oret^x01]";
new const g_szTimeCheckChatCommands[][] = {
"/time",
"time",
"/lsoret",
"lsoret",
"/oret",
"oret"
};
new const g_szTopTimeChatCommands[][] = {
"/timetop",
"/time15",
"/lstop",
"/time10"
};
#if SAVE_TYPE == MYSQL
new const SQL_CONNECT_DATA[][] = {
"test",
"test",
"test",
"test"
};
#endif
new const LOG_FILE_PLAYED_TIME[] = "addons/amxmodx/logs/ls-oret.txt";
/************************************/
/***** Fundi *****/
/************************************/
#define IDENTIFIER_MAX_LENGTH 35
#define NOT_RETRIEVED -1
new Handle:g_hSqlHandle, g_szQuery[512];
new g_iPlayedTime[33] = NOT_RETRIEVED;
#if defined PREPARE_TOP_MOTD
new bool:g_bTopMotdNoData = false;
#endif
new g_szTopMotd[1536];
new g_szOldName[33][MAX_NAME_LENGTH];
new g_iQueryNumber;
new g_iMaxPlayers;
new g_hGetTimeForward, g_hSaveTimeForward;
public plugin_natives()
{
register_library("played_time");
register_native("pt_get_user_played_time", "native_get_user_played_time", 0);
register_native("pt_set_user_played_time", "native_set_user_played_time", 0);
// Compatibility with other older plugins;
register_native("get_user_playedtime", "native_get_user_played_time", 0);
register_native("set_user_playedtime", "native_set_user_played_time", 0);
register_native("get_user_played_time", "native_get_user_played_time", 0);
register_native("set_user_played_time", "native_set_user_played_time", 0);
register_native("pt_get_save_type", "native_get_save_type", 0)
g_hGetTimeForward = CreateMultiForward("pt_client_get_time", ET_IGNORE, FP_CELL, FP_CELL);
g_hSaveTimeForward = CreateMultiForward("pt_client_save_time", ET_IGNORE, FP_CELL, FP_CELL);
}
public plugin_end()
{
SQL_FreeHandle(g_hSqlHandle);
DestroyForward(g_hGetTimeForward);
DestroyForward(g_hSaveTimeForward);
}
public plugin_init()
{
// Why? Because it looks cool.
register_plugin(.plugin_name = "Played Time: Extended", .author = "Khalid", .version = "2.3.1");
new szMapName[32]; get_mapname(szMapName, charsmax(szMapName));
log_to_file(LOG_FILE_PLAYED_TIME, "---- Harta u ndryshua tek: %s ----", szMapName);
new ADMIN_ACCESS = read_flags(ADMIN_ACCESS_LETTER);
// Filter chat to hook chat commands
for(new i, szCommand[32]; i < sizeof g_szTimeCheckChatCommands; i++)
{
formatex(szCommand, charsmax(szCommand), "say %s", g_szTimeCheckChatCommands[i]);
register_clcmd(szCommand, "ClCmdSay_CheckTime");
formatex(szCommand, charsmax(szCommand), "say_team %s", g_szTimeCheckChatCommands[i]);
register_clcmd(szCommand, "ClCmdSay_CheckTime");
}
for(new i, szCommand[32]; i < sizeof g_szTopTimeChatCommands; i++)
{
formatex(szCommand, charsmax(szCommand), "say %s", g_szTopTimeChatCommands[i]);
register_clcmd(szCommand, "ClCmdSay_TopTime");
formatex(szCommand, charsmax(szCommand), "say_team %s", g_szTopTimeChatCommands[i]);
register_clcmd(szCommand, "ClCmdSay_TopTime");
}
register_clcmd("say", "ClCmdSay_TopNumberCommand");
register_clcmd("say_team", "ClCmdSay_TopNumberCommand");
// Command to allow admins to check other players played time
register_concmd("amx_playedtime", "AdminCmd_ShowPlayerTime", ADMIN_ACCESS," <name - #userid - steamid> - Show total and current time played by a specific player.");
register_concmd("amx_show_played_time", "AdminCmd_ShowPlayerTime", ADMIN_ACCESS," <name - #userid - steamid> - Show total and current time played by a specific player.");
register_concmd("amx_played_time", "AdminCmd_ShowPlayerTime", ADMIN_ACCESS," <name - #userid - steamid> - Show total and current time played by a specific player.");
register_forward(FM_ClientUserInfoChanged, "FMCallback_InfoChanged_Post", 1)
CreateTableInDB();
g_iMaxPlayers = get_maxplayers();
set_task(330.0, "message", _, _, _, "b");
}
public AdminCmd_ShowPlayerTime(id, level, cid)
{
if(!cmd_access(id, level, cid, 1))
return PLUGIN_HANDLED
new szName[32], iPlayer
if(read_argc() == 1)
{
console_print(id, "[LS Oret] Shfaq te gjitha oret e lojtareve te lidhur ne server")
new iPlayers[32], iNum, iPlayer, szName[32]
get_players(iPlayers, iNum, "h")
console_print(id, "%d. %-32s %-22s", "#", "Emri", "LS Oret");
for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]
get_user_name(iPlayer, szName, 31)
console_print(id, "%d. %-32s %-22d", i + 1, szName, (g_iPlayedTime[iPlayer] + get_user_time(iPlayer)) / 60)
}
}
else
{
new szArg[32]
read_argv(1, szArg, charsmax(szArg))
iPlayer = cmd_target(id, szArg, CMDTARGET_OBEY_IMMUNITY)
if(iPlayer)
{
get_user_name(iPlayer, szName, charsmax(szName))
console_print(id, "[LS Oret] %s koha totale qe keni luajtur eshte %d minuta.", szName, ( g_iPlayedTime[iPlayer] + get_user_time(iPlayer) ) / 60);
return PLUGIN_HANDLED;
}
if(szArg[0] == '@')
{
new iPlayers[32], iNum
if( equali(szArg, "@TERRORIST") || equali(szArg, "@T") || equal(szArg, "@TERR") )
{
console_print(id, "[LS Oret] Shfaq te gjitha oret e lojtareve te ekipit Terrorist");
get_players(iPlayers, iNum, "eh", "TERRORIST");
}
else if( equali(szArg, "@COUNTERTERRORIST") || equali(szArg, "@CT") || equali(szArg, "@COUNTER") )
{
console_print(id, "[LS Oret] Shfaq te gjitha oret e lojtareve te ekipit Policeve");
get_players(iPlayers, iNum, "eh", "CT");
}
else
{
console_print(id, "[LS Oret] Ky nuk eshte ekipi sakte");
return PLUGIN_HANDLED
}
for(new i; i < iNum; i++)
{
iPlayer = iPlayers[i]
get_user_name(iPlayer, szName, 31)
console_print(id, "%d. %s %22.22d", i + 1, szName, ( g_iPlayedTime[iPlayer] + get_user_time(iPlayer) ) / 60)
}
}
}
return PLUGIN_HANDLED
}
public ClCmdSay_CheckTime(id)
{
new iAdditionalTime = get_user_time(id);
CC_SendMessage(id, "^x04-------------------------------#^x03LS Oret ^x04#-----------------------------------")
if(g_iPlayedTime[id] != NOT_RETRIEVED)
{
CC_SendMessage(id, "%s ^x03Ju aktualisht keni luajtur ^x03%d minuta%", PREFIX, iAdditionalTime / 60, iAdditionalTime / 60 == 1? "" : "s");
CC_SendMessage(id, "%s ^x03Totali i gjithe oreve tuaj eshte: ^x03%d minuta%.", PREFIX, (iAdditionalTime + g_iPlayedTime[id]) / 60, ( (iAdditionalTime + g_iPlayedTime[id]) / 60 ) == 1 ? "" : "s");
}
else
{
CC_SendMessage(id, "%s ^x03Totali oreve tuaj ende nuk eshte percaktuar.");
}
CC_SendMessage(id, "^x04-------------------------------------------------------------------------------")
return PLUGIN_CONTINUE;
}
public ClCmdSay_TopTime(id)
{
#if defined PREPARE_TOP_MOTD
if(g_bTopMotdNoData)
{
CC_SendMessage(id, "%s ^x03Ende nuk ka te dhena per tu krijuar lista.");
return;
}
show_motd(id, g_szTopMotd, "LS TOP LISTA");
#else
FormatTop(id, TOP_DEFAULT_NUMBER);
#endif
}
public ClCmdSay_TopNumberCommand(id)
{
#if defined PREPARE_TOP_MOTD
ClCmdSay_TopTime(id)
#else
new szSaid[25]
read_argv(1, szSaid, charsmax(szSaid))
if( containi(szSaid, "/top") != -1 && ( containi(szSaid, "_time") != -1 || containi(szSaid, "time") != -1) )
{
replace(szSaid, charsmax(szSaid), "/lstop", ""); replace(szSaid, charsmax(szSaid), "_time", "");
replace(szSaid, charsmax(szSaid), "time", "");
if(!is_str_num(szSaid))
{
return PLUGIN_CONTINUE
}
new iNum = str_to_num(szSaid)
FormatTop(id, iNum);
}
#endif
return PLUGIN_CONTINUE;
}
stock FormatTop(id, iTopNumber)
{
new iData[MAX_DATA_ARRAY_SIZE];
iData[0] = id; iData[1] = iTopNumber;
FormatQuery(g_szQuery, charsmax(g_szQuery),
"SELECT `_name_field_`, `_time_field_` FROM `_table_name_` ORDER BY `_time_field_` DESC LIMIT %d", iTopNumber);
SQL_SendThreadedQuery("FormatTop", g_hSqlHandle,"QueryHandler_FormatTopList", g_szQuery, iData);
}
public QueryHandler_FormatTopList(FailState, Handle:hQuery, szError[], iError, Data[], iDataSize)
{
if(FailState)
{
PluginLog_SQLCallback("QueryHandler_FormatTopList", Data[iDataSize - 1], iError, FailState, szError);
return;
}
if(iError)
{
PluginLog_SQLCallback("QueryHandler_FormatTopList", Data[iDataSize - 1], iError, FailState, szError);
return;
}
#if !defined PREPARE_TOP_MOTD
if(!is_user_connected(Data[0]))
{
return;
}
#endif
new iLen, szName[32], iPlace, iTime;
iLen = formatex(g_szTopMotd, charsmax(g_szTopMotd), "<body bgcolor=#000000><font color=#FFB00><pre>");
iLen += format(g_szTopMotd[iLen], charsmax(g_szTopMotd) - iLen,"%s %-22.22s %3s\n", "NR", "EMRI", "KOHA NE MINUTA");
new iCount;
if(!SQL_NumResults(hQuery))
{
#if defined PREPARE_TOP_MOTD
g_bTopMotdNoData = true;
#else
CC_SendMessage(Data[0], "%s ^x03Nuk ka te dhena prandaj eshte e zbrazet.");
#endif
return;
}
while(SQL_MoreResults(hQuery))
{
SQL_ReadResult(hQuery, 0, szName, charsmax(szName));
iTime = SQL_ReadResult(hQuery, 1);
replace_all(szName, charsmax(szName), "<", "<");
replace_all(szName, charsmax(szName), ">", ">");
iLen += formatex(g_szTopMotd[iLen], charsmax(g_szTopMotd) - iLen, "%d %-22.22s %d\n", ++iPlace, szName, iTime / 60);
SQL_NextRow(hQuery)
iCount++;
}
if(iCount)
{
iLen += formatex(g_szTopMotd[iLen], charsmax(g_szTopMotd) - iLen, "</pre></font></body>");
new szTitle[25];
formatex(szTitle, charsmax(szTitle), "LS Lojtaret TOP%d", Data[1]);
if(Data[0] > 0)
{
show_motd(Data[0], g_szTopMotd, szTitle);
}
}
else
{
CC_SendMessage(Data[0], "%s ^x01Ende nuk ka te dhena ne databaze..", PREFIX);
}
}
public client_disconnected(id)
{
if(is_user_bot(id))
{
return;
}
if(g_iPlayedTime[id] != NOT_RETRIEVED)
{
SavePlayedTime(id, true);
g_iPlayedTime[id] = NOT_RETRIEVED;
}
}
public client_authorized(id)
{
if(is_user_bot(id))
{
return;
}
g_iPlayedTime[id] = NOT_RETRIEVED;
#if !defined GET_TIME_INSTANT_QUERY
GetClientPlayedTime(id, true);
#else
g_iPlayedTime[id] = GetClientPlayedTime(id, true);
#endif
}
public client_infochanged(id)
{
if(!is_user_connected(id))
{
return;
}
get_user_name(id, g_szOldName[id], charsmax(g_szOldName[]));
}
public FMCallback_InfoChanged_Post(id)
{
if(!is_user_connected(id))
{
return;
}
new szNewName[32];
get_user_name(id, szNewName, charsmax(szNewName));
if(!equal(g_szOldName[id], szNewName))
{
#if defined USE_NAME;
g_iPlayedTime[id] = NOT_RETRIEVED;
GetClientPlayedTime(id, false); // Get new played time for the new name.
#else
CleanString(szNewName, charsmax(szNewName))
UpdateNameInDatabase(id, szNewName);
#endif
}
}
#if !defined USE_NAME
stock UpdateNameInDatabase(id, szNewName[])
{
if(g_iPlayedTime[id] == NOT_RETRIEVED)
{
return;
}
new szAuthId[33]; get_user_authid(id, szAuthId, charsmax(szAuthId));
FormatQuery(g_szQuery, charsmax(g_szQuery), "UPDATE `_table_name_` SET `_name_field_` = '%s' WHERE `_identifier_field_` = '%s'", szNewName, szAuthId);
SQL_ThreadQuery(g_hSqlHandle, "QueryHandler_Dump", g_szQuery);
}
#endif
stock SavePlayedTime(id, bool:bIsDisconnect)
{
new szIdentifier[IDENTIFIER_MAX_LENGTH];
new iRet
ExecuteForward(g_hSaveTimeForward, iRet, id, bIsDisconnect);
#if defined USE_NAME
get_user_name(id, szIdentifier, charsmax(szIdentifier));
CleanString(szIdentifier, charsmax(szIdentifier));
#else
get_user_authid(id, szIdentifier, charsmax(szIdentifier));
#endif
#if defined USE_NAME
FormatQuery(g_szQuery, charsmax(g_szQuery), "UPDATE _table_name_ SET `_time_field_` = '%d' WHERE `_name_field_` ='%s'", g_iPlayedTime[id] + get_user_time(id), szIdentifier);
#else
FormatQuery(g_szQuery, charsmax(g_szQuery), "UPDATE _table_name_ SET `_time_field_` = '%d' WHERE `_identifier_field_` ='%s'", g_iPlayedTime[id] + get_user_time(id), szIdentifier);
#endif
SQL_SendThreadedQuery("SavePlayedTime", g_hSqlHandle, "QueryHandler_Dump", g_szQuery);
}
#if !defined GET_TIME_INSTANT_QUERY
stock GetClientPlayedTime(id, bool:bConnect = true)
{
new szIdentifier[MAX_NAME_LENGTH + 3];
#if defined USE_NAME
get_user_name(id, szIdentifier, charsmax(szIdentifier));
CleanString(szIdentifier, charsmax(szIdentifier));
#else
get_user_authid(id, szIdentifier, charsmax(szIdentifier));
#endif
#if defined USE_NAME
FormatQuery(g_szQuery, charsmax(g_szQuery), "SELECT `_time_field_` FROM `_table_name_` WHERE `_name_field_` ='%s'", szIdentifier);
#else
new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, charsmax(szName));
FormatQuery(g_szQuery, charsmax(g_szQuery), "SELECT `_time_field_`, `_name_field_` FROM `_table_name_` WHERE `_identifier_field_` ='%s'", szIdentifier);
#endif
new Data[MAX_DATA_ARRAY_SIZE];
Data[0] = id; Data[1] = _:bConnect;
SQL_SendThreadedQuery("QueryHandler_GetPlayedTime", g_hSqlHandle, "QueryHandler_GetPlayedTime", g_szQuery, Data);
}
public QueryHandler_GetPlayedTime(FailState, Handle:hQuery, szError[], iError, Data[], iDataSize)
{
PluginLog_SQLCallback("QueryHandler_GetPlayedTime", Data[iDataSize - 1], iError, FailState, szError);
if(iError)
{
return;
}
new szName[MAX_NAME_LENGTH];
#if !defined USE_NAME
new szIdentifier[IDENTIFIER_MAX_LENGTH]; get_user_authid(Data[0], szIdentifier, charsmax(szIdentifier));
#endif
new id = Data[0];
if(!SQL_MoreResults(hQuery))
{
get_user_name(id, szName, charsmax(szName));
#if defined USE_NAME
FormatQuery(g_szQuery, charsmax(g_szQuery), "INSERT INTO `_table_name_` (`_name_field_`, `_time_field_`) VALUES ('%s', '0')", szName);
#else
FormatQuery(g_szQuery, charsmax(g_szQuery), "INSERT INTO `_table_name_` (`_identifier_field_`, `_name_field_`, `_time_field_`) VALUES ('%s', '%s', '0')", szIdentifier, szName);
#endif
g_iPlayedTime[id] = 0;
SQL_SendThreadedQuery("QueryHandler_GetPlayedTime", g_hSqlHandle, "QueryHandler_Dump", g_szQuery);
return;
}
g_iPlayedTime[id] = SQL_ReadResult(hQuery, 0);
new iRet;
ExecuteForward(g_hGetTimeForward, iRet, id, Data[1]);
get_user_name(id, szName, charsmax(szName));
PluginLog("Got %d minutes (%d sec) for %s", g_iPlayedTime[id] / 60, g_iPlayedTime[id], szName);
#if !defined USE_NAME
new szOldSavedName[MAX_NAME_LENGTH];
//get_user_name(id, szName, charsmax(szName));
SQL_ReadResult(hQuery, 1, szOldSavedName, charsmax(szOldSavedName))
CleanString(szName, charsmax(szName));
if(!equal(szName, szOldSavedName))
{
FormatQuery(g_szQuery, charsmax(g_szQuery),
"UPDATE `_table_name_` SET `_name_field_` = '%s' WHERE `_identifier_field_` = '%s'",
szName, szIdentifier);
SQL_SendThreadedQuery("QueryHandler_GetPlayedTime", g_hSqlHandle, "QueryHandler_Dump", g_szQuery);
}
#endif
}
#else
stock GetClientPlayedTime(id, bool:bConnect = true)
{
new szIdentifier[MAX_NAME_LENGTH + 3];
new szName[MAX_NAME_LENGTH]; get_user_name(id, szName, charsmax(szName));
#if defined USE_NAME
get_user_name(id, szIdentifier, charsmax(szIdentifier));
CleanString(szIdentifier, charsmax(szIdentifier));
#else
get_user_authid(id, szIdentifier, charsmax(szIdentifier));
#endif
#if defined USE_NAME
FormatQuery(g_szQuery, charsmax(g_szQuery), "SELECT `_time_field_` FROM `_table_name_` WHERE `_name_field_` ='%s'", szIdentifier);
#else
FormatQuery(g_szQuery, charsmax(g_szQuery), "SELECT `_time_field_`, `_name_field_` FROM `_table_name_` WHERE `_identifier_field_` ='%s'", szIdentifier);
#endif
//SQL_SendThreadedQuery("QueryHandler_GetPlayedTime", g_hSqlHandle, "QueryHandler_GetPlayedTime", g_szQuery, Data);
PluginLog_Query("GetClientPlayedTime", g_szQuery);
new Handle:hQuery, Handle:hConnection;
new iError, szError[256];
hConnection = SQL_Connect(g_hSqlHandle, iError, szError, charsmax(szError));
++g_iQueryNumber
if(iError)
{
SQL_FreeHandle(hConnection);
PluginLog_SQLCallback("GetClientPlayedTime #1", g_iQueryNumber, iError, 0, szError);
return;
}
hQuery = SQL_PrepareQuery(g_hSqlHandle, g_szQuery);
if(!SQL_Execute(hQuery))
{
SQL_QueryError(hQuery, szError, charsmax(szError));
PluginLog_SQLCallback("GetClientPlayedTime #2", g_iQueryNumber, 0, 0, szError);
SQL_FreeHandle(hQuery);
SQL_FreeHandle(hConnection);
return;
}
if(!SQL_MoreResults(hQuery))
{
SQL_FreeHandle(hQuery);
SQL_FreeHandle(hConnection);
get_user_name(id, szName, charsmax(szName));
#if defined USE_NAME
FormatQuery(g_szQuery, charsmax(g_szQuery), "INSERT INTO `_table_name_` (`_name_field_`, `_time_field_`) VALUES ('%s', '0')", szName);
#else
FormatQuery(g_szQuery, charsmax(g_szQuery), "INSERT INTO `_table_name_` (`_identifier_field_`, `_name_field_`, `_time_field_`) VALUES ('%s', '%s', '0')", szIdentifier, szName);
#endif
g_iPlayedTime[id] = 0;
SQL_SendThreadedQuery("GetClientPlayedTime #3", g_hSqlHandle, "QueryHandler_Dump", g_szQuery);
return;
}
new iRet;
ExecuteForward(g_hGetTimeForward, iRet, id, bConnect);
get_user_name(id, szName, charsmax(szName));
PluginLog("Got %d minutes (%d sec) for %s", g_iPlayedTime[id] / 60, g_iPlayedTime[id], szName);
#if !defined USE_NAME
new szOldSavedName[MAX_NAME_LENGTH];
//get_user_name(id, szName, charsmax(szName));
SQL_ReadResult(hQuery, 1, szOldSavedName, charsmax(szOldSavedName))
CleanString(szName, charsmax(szName));
if(!equal(szName, szOldSavedName))
{
FormatQuery(g_szQuery, charsmax(g_szQuery),
"UPDATE `_table_name_` SET `_name_field_` = '%s' WHERE `_identifier_field_` = '%s'",
szName, szIdentifier);
SQL_SendThreadedQuery("GetClientPlayedTime #3", g_hSqlHandle, "QueryHandler_Dump", g_szQuery);
}
#endif
g_iPlayedTime[id] = SQL_ReadResult(hQuery, 0);
SQL_FreeHandle(hQuery);
SQL_FreeHandle(hConnection);
}
#endif
public QueryHandler_Dump(FailState, Handle:Query, szError[], iError, Data[], iDataSize)
{
PluginLog_SQLCallback("QueryHandler_Dump", Data[iDataSize - 1], iError, FailState, szError);
}
CreateTableInDB()
{
#if SAVE_TYPE == SQLITE
SQL_SetAffinity("sqlite");
g_hSqlHandle = SQL_MakeDbTuple("", "", "", "played_time_database");
#endif
#if SAVE_TYPE == MYSQL
SQL_SetAffinity("mysql");
g_hSqlHandle = SQL_MakeDbTuple(SQL_CONNECT_DATA[0], SQL_CONNECT_DATA[1], SQL_CONNECT_DATA[2], SQL_CONNECT_DATA[3]);
#endif
if(g_hSqlHandle == Empty_Handle)
{
set_fail_state("Could not connect to the SQL Database.");
}
#if SAVE_TYPE == SQLITE
#if defined USE_NAME
FormatQuery(g_szQuery, charsmax(g_szQuery),"CREATE TABLE IF NOT EXISTS `_table_name_` (`id` INTEGER PRIMARY KEY, `_name_field_` CHAR(32) UNIQUE, `_time_field_` INTEGER");
#else
FormatQuery(g_szQuery, charsmax(g_szQuery),"CREATE TABLE IF NOT EXISTS `_table_name_` (`id` INTEGER PRIMARY KEY, `_identifier_field_` CHAR(35) UNIQUE, `_name_field_` CHAR(32), _time_field_ INTEGER)");
#endif
#endif
#if SAVE_TYPE == MYSQL
#if defined USE_NAME
FormatQuery(g_szQuery, charsmax(g_szQuery), "CREATE TABLE IF NOT EXISTS `_table_name_` (`_name_field_` VARCHAR(35) UNIQUE, `_time_field_` INT, `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP)");
#else
FormatQuery(g_szQuery, charsmax(g_szQuery), "CREATE TABLE IF NOT EXISTS `_table_name_` (`_identifier_field_` VARCHAR(35) UNIQUE, `_name_field_` VARCHAR(32), `_time_field_` INT, `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)");
#endif
#endif
SQL_SendThreadedQuery("CreateTableInDB", g_hSqlHandle, "QueryHandler_Initialize", g_szQuery);
}
public QueryHandler_Initialize(FailState, Handle:Query, szError[], iError, Data[], iDataSize)
{
if(FailState || iError)
{
PluginLog_SQLCallback("QueryHandler_Initialize", Data[iDataSize - 1], iError, FailState, szError);
#if AMXX_VERSION_NUM < 183
new szFailStateMessage[256];
formatex(szFailStateMessage, charsmax(szFailStateMessage), "FailState %d %d: %s", FailState, iError, szError);
set_fail_state(szFailStateMessage);
#else
set_fail_state("FailState %d %d: %s", FailState, iError, szError);
#endif
}
else
{
PluginLog("(QueryHandler_Initialize) [Query #: %d]: Eshte ekzekutuar me sukses.", Data[iDataSize - 1]);
}
#if defined PREPARE_TOP_MOTD
FormatTop(-1, TOP_DEFAULT_NUMBER);
#endif
}
// NATIVES
public native_get_user_played_time(plugin_id, argc)
{
new id = get_param(1);
if(!IsValidPlayer_Native(id))
{
return -1
}
return g_iPlayedTime[id];
}
public native_set_user_played_time(plugin_id, argc)
{
new id = get_param(1);
new iNewTime = get_param(2);
if(!IsValidPlayer_Native(id))
{
return 0
}
g_iPlayedTime[id] = iNewTime;
return 1;
}
public native_get_save_type(plugin_id, argc)
{
return SAVE_TYPE;
}
stock IsValidPlayer_Native(id)
{
if(!is_user_connected(id))
{
log_error(AMX_ERR_NATIVE, "Klienti %d ende nuk eshte lidhur", id);
return 0;
}
if(is_user_bot(id))
{
log_error(AMX_ERR_NATIVE, "Klienti %d eshte nje BOT", id);
return 0;
}
if(is_user_hltv(id))
{
log_error(AMX_ERR_NATIVE, "HLTV klient %d", id);
return 0;
}
if( !( 1 <= id <= g_iMaxPlayers ) )
{
log_error(AMX_ERR_NATIVE, "Indeksi i kufinjeve %d", id);
return 0
}
return 1;
}
stock CleanString(szName[], iSize)
{
replace_all(szName, iSize, "\"", "");
replace_all(szName, iSize, "'", "");
}
stock FormatQuery(szQueryStorage[], iSize, szQuery[], any:...)
{
vformat(szQueryStorage, iSize, szQuery, 4);
replace_all(szQueryStorage, iSize, "_identifier_field_", "steamid");
replace_all(szQueryStorage, iSize, "_name_field_", "name");
replace_all(szQueryStorage, iSize, "_time_field_", "time_played");
replace_all(szQueryStorage, iSize, "_table_name_", "played_time");
}
stock SQL_SendThreadedQuery(szPosition[], Handle:hSql, szQueryCallback[], szQuery[], Data[MAX_DATA_ARRAY_SIZE] = "")
{
new ModifiedData[MAX_DATA_ARRAY_SIZE + 1];
// Must be before, as this is where the increment happen.
PluginLog_Query(szPosition, szQuery);
for(new i; i < MAX_DATA_ARRAY_SIZE; i++)
{
ModifiedData[i] = Data[i];
}
ModifiedData[MAX_DATA_ARRAY_SIZE] = g_iQueryNumber;
SQL_ThreadQuery(hSql, szQueryCallback, szQuery, ModifiedData, MAX_DATA_ARRAY_SIZE + 1);
}
stock PluginLog(szString[], any:...)
{
#if !defined DO_NOT_LOG
new szLog[1024]
vformat(szLog, charsmax(szLog), szString, 2);
log_to_file(LOG_FILE_PLAYED_TIME, szLog);
//log_amx("[Played Time] %s", szLog);
#endif
}
stock PluginLog_Query(szPosition[], szQuery[])
{
#if !defined DO_NOT_LOG
log_to_file(LOG_FILE_PLAYED_TIME, "(%s) Query Executed (#%d): \n\t\t\t\t%s", szPosition, ++g_iQueryNumber, szQuery);
//log_amx("[Played Time] (%s) Query Executed (#%d): \n\t\t%s", szPosition, g_iQueryNumber, szQuery);
#endif
}
stock PluginLog_SQLCallback(szPosition[], iQueryNumber, iError, FailState, szError[])
{
#if !defined DO_NOT_LOG
if(iError || FailState)
{
log_to_file(LOG_FILE_PLAYED_TIME, "(%s) [Query#: %d] [Error# :%d] [FailState: %d]: %s", szPosition, iQueryNumber, iError, FailState, szError);
}
else if(!iError && !FailState)
{
log_to_file(LOG_FILE_PLAYED_TIME, "(%s) [Query#: %d] u ekzekutua me sukses", szPosition, iQueryNumber);
}
#endif
}
public message()
CC_SendMessage(0, "&x01[&x04LS Oret&x01] Per te shikuar oret tuaja shkruaj &x04/lsoret, &x01ose &x04/oret &x01or &x04/time");