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

Clientprefs Cleaner 1.0

Root

AWOL.
Сообщения
76
Реакции
197
  • Автор ресурса
  • #1
Clientprefs Cleaner
Описание:
Этот плагин создан для очистки базы clientprefs от старых куки.

Переменные:
Существует только одна переменная: sm_cookies_removedays - Удалять куки, которые не были обновлены за последние Х дней.
По стандарту база чистится от старых куки после 30 дней неактивности.

И не забудьте сохранить предыдущую базу clientprefs, если вы действительно волнуетесь за "печеньки" :)
 
Последнее редактирование модератором:

EPacker2

3D-моделист
Сообщения
1,040
Реакции
762
А можно чтобы файлик "sourcemod-local.sq3" тоже чистило?
 

Root

AWOL.
Сообщения
76
Реакции
197
  • Автор ресурса
  • #3
Нет, так как в storage-local (или sourcemod-local) может храниться совсем иная информация, например как sodstats или css bank
 

BloodyAngel

Участник
Сообщения
72
Реакции
54
C++:
/**
* Clientprefs Cleaner (Cookies Purge) by Root
*
* Description:
*   Removes old cookies from clientprefs database.
*
* Version 1.0
* Changelog & more info at http://goo.gl/4nKhJ
*/
#pragma semicolon 1
#pragma newdecls required
#include <clientprefs>

// ====[ CONSTANTS ]===========================================================
#define PLUGIN_NAME    "Clientprefs Cleaner (Cookies Purge)"
#define PLUGIN_VERSION "1.0"

// ====[ PLUGIN ]==============================================================
Database db = null;
ConVar purge_days;

public Plugin myinfo =
{
    name        = PLUGIN_NAME,
    author      = "Root",
    description = "Removes old cookies from clientprefs database",
    version     = PLUGIN_VERSION,
    url         = "http://dodsplugins.com/"
}

/* OnPluginStart()
 *
 * When the plugin starts up.
 * ---------------------------------------------------------------------------- */
public void OnPluginStart()
{
    // Connect to a clientprefs database, which is already defined in databases config
    if(SQL_CheckConfig("clientprefs"))
    {
        Database.Connect(OnDatabaseConnected, "clientprefs");
    }
    // If clientprefs library or database is not available...
    else
    {
        // ...disable a plugin and log the actual error
        SetFailState("Couldn't find \"clientprefs\" section in databases.cfg");
    }

    // Create plugin ConVars
    CreateConVar("sm_clientprefs_cleaner", PLUGIN_VERSION, PLUGIN_NAME, FCVAR_NOTIFY|FCVAR_DONTRECORD);
    purge_days = CreateConVar("sm_cookies_removedays", "30", "Removes cookies which hasn't updated for X days", FCVAR_NOTIFY, true, 0.0);
}

/* OnMapStart()
 *
 * When the map starts.
 * ---------------------------------------------------------------------------- */
public void OnMapStart()
{
    if (db != null && purge_days.IntValue > 0)
    {
        // Prepare and execute a purging query with current timestamp
        char query[512];
        Format(query, sizeof(query), "DELETE FROM sm_cookie_cache WHERE timestamp <= %i; VACUUM", GetTime() - (purge_days.IntValue * 86400));
        SQL_TQuery(db, CP_PurgeCallback, query);
    }
}

void OnDatabaseConnected(Database DataBase, const char[] error, any data)
{
    if(DataBase == null)
    {
        SetFailState("Couldn't connect to the database \"clientprefs\"");
    }
    else
    {
        db = DataBase;
        PrintToServer("[clientprefs] Database connected");
    }
}

/* OnClientCookiesCached()
 *
 * Called once a client's saved cookies have been loaded from the database.
 * ---------------------------------------------------------------------------- */
public void OnClientCookiesCached(int client)
{
    char client_steamid[MAX_NAME_LENGTH];
    // Make sure client is authorized, or in worst case invalid steam id may be passed in query
    if (GetClientAuthId(client, AuthId_Steam2, client_steamid, sizeof(client_steamid)))
    {
        // Prepare query and make SQL safer by removing bad characters from player's steamid
        char query[512], safe_steamid[(MAX_NAME_LENGTH * 2) + 1];
        db.Escape(client_steamid, safe_steamid, sizeof(safe_steamid));
        // Refresh timestamp because its wont manually update to newest when client cookies just cached
        // It's requred because by default timestamp updates when client actually changed cookie value - not just connects
        Format(query, sizeof(query), "UPDATE sm_cookie_cache SET timestamp = %i WHERE player = '%s'", GetTime(), safe_steamid);
        SQL_TQuery(db, CP_CheckErrors, query);
    }
}

/* CP_CheckErrors()
 *
 * Executes a query.
 * ---------------------------------------------------------------------------- */
void CP_CheckErrors(Handle owner, Handle hndl, const char[] error, any data)
{
    if (error[0])
    {
        LogError(error);
    }
}

/* CP_PurgeCallback()
 *
 * Threaded query callback (database purge).
 * ---------------------------------------------------------------------------- */
void CP_PurgeCallback(Handle owner, Handle hndl, const char[] error, any data)
{
    // If any row were affected by purging query - clientprefs database was purged!
    if (SQL_GetAffectedRows(owner))
    {
        // Log information how many cookies were pruged
        LogMessage("Clientprefs purged: cookies of %i players was removed due of inactivity.", SQL_GetAffectedRows(owner));
    }
}
 
Сверху Снизу