/*
-- Дамп структуры для таблица csstats.csstats_name_history
CREATE TABLE IF NOT EXISTS `csstats_name_history` (
`hash` varchar(35) NOT NULL,
`authid` varchar(35) NOT NULL,
`name` varchar(35) NOT NULL,
`totalplayed` int(11) NOT NULL,
`lastplayed` int(11) NOT NULL,
`lastchange` int(11) NOT NULL,
PRIMARY KEY (`hash`),
UNIQUE KEY `hash` (`hash`),
KEY `authid` (`authid`),
CONSTRAINT `csstats_name_history_ibfk_1` FOREIGN KEY (`authid`) REFERENCES `csstats_players` (`authid`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*/
#include <amxmodx>
#include <amxmisc>
#include <sqlx>
#include <cmsstats_mysql>
#tryinclude <gamecms5>
//#include <cmsstats_ranks>
#define MAX_QUERY_SMALL_LEN 512
public stock const PluginName[] = "CMSStats MySQL Name History"
public stock const PluginVersion[] = "1.0.0"
public stock const PluginAuthor[] = "zhorzh78"
public stock const PluginDescription[] = "Player Name History"
public stock const PluginURL[] = ""
new Handle:g_hDbTuple = Empty_Handle;
public OnCmsStatsInitializedPost(Handle:hDbTuple)
{
g_hDbTuple = hDbTuple;
}
public OnCmsStatsStop()
{
g_hDbTuple = Empty_Handle;
}
public client_infochanged(id)
{
new szNewName[MAX_NAME_LENGTH], szOldName[MAX_NAME_LENGTH];
get_user_name(id, szOldName, charsmax(szOldName));
get_user_info(id, "name", szNewName, charsmax(szNewName));
if(!strcmp(szNewName, szOldName))
return;
FnSavePlayerData(id, true, szNewName);
}
public client_disconnected(id)
{
FnSavePlayerData(id, false);
}
FnSavePlayerData(id, bool:bChange, szName[MAX_NAME_LENGTH] = "")
{
if(g_hDbTuple == Empty_Handle)
return;
new szAuth[MAX_NAME_LENGTH];
if(!cmsstats_is_user_write(id, szAuth, charsmax(szAuth)) || !szAuth[0])
return;
if(!szName[0])
get_user_name(id, szName, charsmax(szName));
new QueryBody[MAX_QUERY_SMALL_LEN/2], QueryHead[MAX_QUERY_SMALL_LEN/2], QueryString[MAX_QUERY_SMALL_LEN];
new iLen;
formatex(QueryHead, charsmax(QueryHead), "INSERT INTO `csstats_name_history` SET `hash` = MD5('%s%s'),`authid` ='%s',`name` ='%s',",
szName, szAuth, szAuth, szName);
formatex(QueryBody, charsmax(QueryBody), "`totalplayed`=`totalplayed`+'%d', `lastplayed`='%d'",
get_user_time(id, 1), get_systime());
if(bChange)
format(QueryBody, charsmax(QueryBody), "%s, `lastchange`= UNIX_TIMESTAMP(NOW())", QueryBody);
iLen += formatex(QueryString[iLen], charsmax(QueryString)- iLen, "%s %s ON DUPLICATE KEY UPDATE %s;", QueryHead, QueryBody, QueryBody);
SQL_ThreadQuery(g_hDbTuple, "QueryHandler", QueryString);
}
public QueryHandler(failstate, Handle:query, const error[], errornum, const postData[], DataSize, Float:querytime)
{
#if defined _gamecms5_included
if(SQL_Error(error, errornum, failstate))
return;
#endif
//to do ...
}