Иконка ресурса

Add-on CMSStats MySQL Name History

C++:
/*
-- Дамп структуры для таблица 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 ...
}
Назад
Сверху