shape1
shape2
shape3
shape4
shape7
shape8

Слет неактивных аккаунтов на файлах

  • Автор темы Amfy
  • Дата начала

A

Amfy

Гость
Гость
Данная система предназначена для тех, у кого моды "на файлах". Чтобы неактивные аккаунты не засоряли место на сервере.
Данная система подойдет к любому типу аккаунтов на файлах.
Настроить систему очень просто.
Система слета идет как отдельный фильтрскрипт.

#include <a_samp>
#include <a_sampdb>

#define DAYS 30 //Максимальное количество неактивных дней. Желательно не более 300!
#define PATH "Files/Players/" //Путь к файлу аккаунта
#define FORMAT ".ini" //Формат файла аккаунта

#pragma tabsize 0

new DB:db;

public OnPlayerConnect(playerid)
{
if(CheckAllready(playerid))
{
if(CheckAllreadyInDB(playerid)) DataUpdate(playerid);
else CreateData(playerid);
}
return 1;
}

public OnFilterScriptInit()
{
if(!fexist("Slet.db"))
{
db = db_open("Slet.db");
db_query(db,"CREATE TABLE users(name varchar, data int)");
print("База создана");
}
else
{
db = db_open("Slet.db");
print("База загружена");
}
new query[128],string[128];
new namep[MAX_PLAYER_NAME];
new days = getdate();
new DBResult:dbresult;
for(new i = 0; i < 10; i++)
{
if(CheckLasted())
{
format(query,sizeof(query),"SELECT * FROM `users` WHERE data < '%d'", days-DAYS);
dbresult = db_query(db,query);
db_get_field_assoc(dbresult, "name", namep, sizeof(namep));
strcat(string,PATH);
strcat(string,namep);
strcat(string,FORMAT);
if(fexist(string))
{
fremove(string);
print("Файл аккаунта успешно удален.");
}
else
{
print("Ошибка в удалении файла аккаунта.");
}
format(query,sizeof(query),"DELETE FROM `users` WHERE data < '%d'", days-DAYS);
db_query(db,query);
db_free_result(dbresult);
print("Удален неактивный аккаунт!");
}
}
return 1;
}

public OnPlayerDisconnect(playerid)
{
return 1;
}

stock CheckLasted()
{
new DBResult:dbresult,query[128];
new days = getdate();
if(days < DAYS) return 0;
format(query,sizeof(query),"SELECT * FROM `users` WHERE data < '%d' LIMIT 1", days-DAYS);
dbresult = db_query(db,query);
if(!db_num_rows(dbresult))
{
db_free_result(dbresult);
return 0;
}
db_free_result(dbresult);
return 1;
}

stock CheckAllready(playerid)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
new string[128];
strcat(string,PATH);
strcat(string,playername);
strcat(string,FORMAT);
if(!fexist(string)) return 0;
return 1;
}

stock CheckAllreadyInDB(playerid)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
new DBResult:dbresult,query[512];
format(query,sizeof(query),"SELECT * FROM `users` WHERE name = '%s' LIMIT 1", playername);
dbresult = db_query(db,query);
if(!db_num_rows(dbresult))
{
db_free_result(dbresult);
return 0;
}
db_free_result(dbresult);
return 1;
}

stock DataUpdate(playerid)
{
new query[128];
new playername[MAX_PLAYER_NAME];
new days = getdate();
GetPlayerName(playerid, playername, sizeof(playername));
if(!CheckAllreadyInDB(playerid))
{
format(query,500,"INSERT INTO `users` (`name`, `data`) VALUES ('%s', '%d')",playername,days);
db_query(db, query);
SendClientMessage(playerid, 0x000000AA, ">> Дата последнего посещения записана.");
return 1;
}
format(query,sizeof(query),"UPDATE users SET data='%d' WHERE (name = '%s')",days,playername);
db_query(db,query);
SendClientMessage(playerid, 0x000000AA, ">> Дата последнего посещения записана.");
return 1;
}

stock CreateData(playerid)
{
new playername[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername, sizeof(playername));
new query[128];
new days = getdate();
format(query,500,"INSERT INTO `users` (`name`, `data`) VALUES ('%s', '%d')",playername,days);
db_query(db, query);
SendClientMessage(playerid, 0x000000AA, ">> Данные созданы.");
DataUpdate(playerid);
return 1;
}

Просто создайте PWN файл в папке filterscripts, скопируйте код, сохраните, настройте параметры и скомпилируйте файл. Скрипт готов к установке и использованию.

Скрипт функционирует на SQLite. Базу данных создавать не нужно. Она создается автоматически, если её нет.

Автор: VirvolF