#include <amxmodx>
#include <hamsandwich>
#include <sqlx>
new const PLUGIN[] = "Játszott Időre Vip"
new const VERSION[] = "1.0"
new const AUTHOR[] = "exodus" //Ne írd át köszi :)
//Ha SQL-be szeretnél menteni vedd ki előle a //-t majd a fájlmentés elé rakj egy //-t
//#define SAVESQL //SQL Adatbázisba való mentés használata
#define SAVEFILE //Fájlba való mentés használata
#define JOG ADMIN_LEVEL_H //A vip jog
#define IDO 15 //Mennyi idő után adjon jogot (órában számolva)
#if defined SAVESQL
new const SQL_INFO[][] =
{
"kiszolg", // HOST
"felh", // USERNAME
"jelszo", // PASSWORD
"adatbazis" // DATABASE
}
#endif
new Jatszottido[33];
#if defined SAVESQL
new Handle:g_SqlTuple;
new name[33][32];
#endif
#if defined SAVEFILE
new filename[128];
#endif
public plugin_init()
{
register_plugin(PLUGIN,VERSION,AUTHOR)
#if defined SAVEFILE
get_localinfo("amxx_configsdir", filename, charsmax(filename))
format(filename, charsmax(filename), "%s/vip_idore.ini", filename)
#endif
}
public Ellenorzes(id)
{
if(Jatszottido[id] >= IDO*3600)
{
set_user_flags(id, get_user_flags(id) | JOG)
}
}
public client_putinserver(id)
{
#if defined SAVESQL
if(!is_user_bot(id))
{
get_user_name(id, name[id], charsmax(name));
load(id);
}
#endif
#if defined SAVEFILE
if(!is_user_bot(id) && !is_user_hltv(id))
{
load(id);
}
#endif
set_task(5.0, "Ellenorzes");
}
public client_disconnect(id)
{
#if defined SAVESQL
if(!is_user_bot(id))
{
update(id)
}
Jatszottido[id] = 0
copy(name[id], charsmax(name[]), "")
#endif
#if defined SAVEFILE
if(!is_user_bot(id) && !is_user_hltv(id))
{
save(id);
}
#endif
}
#if defined SAVEFILE
public save(id)
{
new szData[128];
new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
if(contain(steamid, "_ID_LAN") != -1) get_user_ip(id, steamid, charsmax(steamid), 1);
formatex(szData, charsmax(szData), "%i", Jatszottido[id]);
set_data(steamid, szData)
}
public load(id)
{
new szData[128];
new steamid[32]; get_user_authid(id, steamid, charsmax(steamid));
if(contain(steamid, "_ID_LAN") != -1) get_user_ip(id, steamid, charsmax(steamid), 1);
if(get_data(steamid, szData, charsmax(szData))) {
new ido[32];
parse(szData, ido, charsmax(ido));
Jatszottido[id] = str_to_num(ido)
}
}
#endif
#if defined SAVESQL
public plugin_cfg()
{
new Query[512];
g_SqlTuple = SQL_MakeDbTuple(SQL_INFO[0],SQL_INFO[1],SQL_INFO[2],SQL_INFO[3])
formatex(Query, charsmax(Query), "CREATE TABLE IF NOT EXISTS `vipek_idore` (`username` varchar(32) NOT NULL,`Ido` int(11) NOT NULL,`id` INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY)")
SQL_ThreadQuery(g_SqlTuple,"createTableThread", Query)
}
public createTableThread(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED)
set_fail_state("Nem tudtam csatlakozni az adatbazishoz.");
else if(FailState == TQUERY_QUERY_FAILED)
set_fail_state("Query Error");
if(Errcode)
log_amx("Hibat dobtam: %s",Error);
}
public load(id)
{
new Query[512], Data[1]
Data[0] = id
formatex(Query, charsmax(Query), "SELECT * FROM `vipek_idore` WHERE username = ^"%s^";", name[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", Query, Data, 1)
}
public QuerySelectData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED)
{
log_amx("%s", Error)
return
}
else
{
new id = Data[0];
if(SQL_NumRows(Query) > 0)
{
Jatszottido[id] = SQL_ReadResult(Query, SQL_FieldNameToNum(Query, "Ido"))
}
else
{
save(id)
}
}
}
public save(id)
{
new text[512];
formatex(text, charsmax(text), "INSERT INTO `vipek_idore` (`username`, `Ido`) VALUES (^"%s^", ^"0^");", name[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", text)
}
public QuerySetData(FailState, Handle:Query, Error[], Errcode, Data[], DataSize, Float:Queuetime)
{
if(FailState == TQUERY_CONNECT_FAILED || FailState == TQUERY_QUERY_FAILED) {
log_amx("%s", Error)
return
}
}
public update(id)
{
new text[512];
formatex(text, charsmax(text), "UPDATE `vipek_idore` SET Ido = ^"%i^" WHERE username = ^"%s^";", Jatszottido[id]+get_user_time(id), name[id])
SQL_ThreadQuery(g_SqlTuple, "QuerySetData", text)
}
public plugin_end()
{
SQL_FreeHandle(g_SqlTuple)
}
#endif
#if defined SAVEFILE
stock get_data(const key[], data[], len) {
new vault = fopen(filename, "rt");
new _data[512], _key[64];
while( !feof(vault) ) {
fgets(vault, _data, charsmax(_data));
parse(_data, _key, charsmax(_key), data, len);
if( equal(_key, key) ) {
fclose(vault);
return 1;
}
}
fclose(vault);
copy(data, len, "");
return 0;
}
stock set_data(const key[], const data[]) {
static const temp_vault_name[] = "set_data.txt";
new file = fopen(temp_vault_name, "wt");
new vault = fopen(filename, "rt");
new _data[512], _key[64], _other[32];
new bool:replaced = false;
while( !feof(vault) ) {
fgets(vault, _data, charsmax(_data));
parse(_data, _key, charsmax(_key), _other, charsmax(_other));
if( equal(_key, key) && !replaced ) {
fprintf(file, "^"%s^" ^"%s^"^n", key, data);
replaced = true;
}
else {
fputs(file, _data);
}
}
if( !replaced ) {
fprintf(file, "^"%s^" ^"%s^"^n", key, data);
}
fclose(file);
fclose(vault);
delete_file(filename);
while( !rename_file(temp_vault_name, filename, 1) ) { }
//delete_file(temp_vault_name);
}
#endif