VIP modificare + adaugare

Categoria cu cereri de pluginuri si nu numai.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Forum rules
Accesează link-ul pentru a putea vedea regulile forumului

Daca doriti sa vi se modifice un plugin, va rugam postati aici .
Post Reply
The Kalu
Fost administrator
Fost administrator
Posts: 13707
Joined: 09 Oct 2010, 12:39
Detinator Steam: Da
CS Status: In grajd!
SteamID: kalulord
Reputatie: Fost Administrator
Fost membru Club eXtreamCS (6 luni)
Nume anterior: Terra
Location: Romania, Ploiesti
Has thanked: 328 times
Been thanked: 646 times
Contact:

16 Jan 2021, 21:02

Plugin Cerut: VIP
Descriere (adica ce face el mai exact): adaugare aditionale
Serverul impune conditii strict HLDS/REHLDS?: HLDS
Ai cautat pluginul?(daca da, precizeaza cum): da
Necesita mod special?: nu

La pluginul asta se poate adauga astea? (https://forums.alliedmods.net/showthread.php?p=1637334)

spawn effects (https://forums.alliedmods.net/showthread.php?p=1374482)
electro (https://forums.alliedmods.net/showthread.php?t=30095)
player trail (https://forums.alliedmods.net/showthread.php?p=164803)
120 HP / AP
Double Jump
Show Damage (Sa afiseze daunele)
Damage Multiplier (x 2 la fiecare arma)
Kill reward (10 hp daca ucizi)
HP Kill reward (25 hp daca ucizi)

Thank you! :kiss_smiley:
Image
RoyalServer
User avatar
Rainq
Membru, skill +2
Membru, skill +2
Posts: 681
Joined: 21 Jul 2015, 19:50
Detinator Steam: Da
CS Status: Retras
Detinator server CS: zm.extreamcs.com
SteamID: mrainq
Reputatie: Fost super moderator
Fost detinator ZM.eXtreamCS.COM
Fost Membru Club eXtreamCS (trei luni)
Fond eXtream: 0
Location: Bucharest
Discord: manuraiders
Has thanked: 29 times
Been thanked: 51 times
Contact:

18 Jan 2021, 02:57

spawn effects (https://forums.alliedmods.net/showthread.php?p=1374482)
Show Damage (Sa afiseze daunele)
Damage Multiplier (x 2 la fiecare arma)

astea le-am adaugat eu aici

Code: Select all

#include <amxmodx>
#include <amxmisc>
#include <regex>
#include <sqlx>
#include <fun>
#include <engine>
#include <hamsandwich>
#include <fakemeta_util>
#include <fakemeta>

#define IsPlayer(%0)    ( 1 <= %0 <= g_iMaxPlayers )
#define MAX_PLAYERS 32

new g_type, g_enabled, g_recieved, bool:g_showrecieved, g_hudmsg1, g_hudmsg2
new g_iMaxPlayers;

//#define BACKWARDS_COMPAT

enum _:Auths {
	Auth_Name,
	Auth_SteamID,
	Auth_IP,
	Auth_Tag
};

enum _:AuthData {
	Auth_Type,
	Auth_Key[35],
	Auth_Password[32],
	Auth_RemoveTime,
	Auth_Flags
};

enum _:AddData {
	Data_Type,
	Data_Auth[35],
	Data_Password[32],
	Data_Flags[27],
	Data_RemoveDate[32]
};

#define getBit(%1,%2) (%1 &   (1 << (%2 & 31)))
#define setBit(%1,%2)  %1 |=  (1 << (%2 & 31))
#define delBit(%1,%2)  %1 &= ~(1 << (%2 & 31))

new gVIP;
#define is_vip(%1) getBit(gVIP, %1)
#define set_vip(%1) setBit(gVIP, %1)
#define remove_vip(%1) delBit(gVIP, %1)

new gFlags[MAX_PLAYERS + 1];

new Handle:gSqlTuple = Empty_Handle;
new gUsersFile[64];

new gCvarSql;
new gCvarHost;
new gCvarUser;
new gCvarPass;
new gCvarDb;
new gCvarAuthFlags;
new gCvarDefaultFlags;
new gCvarDeleteExpired;
new gCvarPasswordField;

new gForwardAuth;
new gForwardPutinserver;
new gForwardDisconnect;
new gReturnFromForward;

new Trie:gAuthKeys;

new Array:gAuthData;
new Trie:gAuthToIndex[Auths];
new gNumAuths;

new Regex:gDatePattern;

public plugin_init() {
	register_plugin("VIP Manager", "0.0.6", "Exolent");
	register_event("Damage", "on_damage", "b", "2!0", "3=0", "4!0")	
	register_event("HLTV", "on_new_round", "a", "1=0", "2=0")
	RegisterHam ( Ham_TakeDamage, "player", "Player_TakeDamage" );
	RegisterHam(Ham_Spawn, "player", "player_spawn", 1);
	register_concmd("vip_adduser", "CmdAddUser", ADMIN_RCON, "<name, #userid, authid> <type> [password] [flags] [days] -- <type> can be 'name', 'steamid', or 'ip'");
	register_concmd("vip_addauth", "CmdAddAuth", ADMIN_RCON, "<type> <auth> [password] [flags] [days] -- <type> can be 'name', 'steamid', 'ip', or 'tag'");
	register_concmd("vip_reload", "CmdReload", ADMIN_RCON, "-- reloads the VIP users list for the vip_users.ini");
	
	gCvarSql = register_cvar("vip_sql", "0");
	gCvarHost = register_cvar("vip_sql_host", "");
	gCvarUser = register_cvar("vip_sql_user", "");
	gCvarPass = register_cvar("vip_sql_pass", "");
	gCvarDb = register_cvar("vip_sql_db", "");
	g_type = register_cvar("amx_bulletdamage","1")
	g_recieved = register_cvar("amx_bulletdamage_recieved","1")	
	g_hudmsg1 = CreateHudSyncObj();	
	g_hudmsg2 = CreateHudSyncObj();
	g_iMaxPlayers = get_maxplayers ( );
	gCvarAuthFlags = register_cvar("vip_auth_flags", "b");
	gCvarDefaultFlags = register_cvar("vip_default_flags", "");
	gCvarDeleteExpired = register_cvar("vip_delete_expired", "0");
	gCvarPasswordField = register_cvar("vip_password_field", "_vip_pw");
	
	gForwardAuth = CreateMultiForward("vip_authorized", ET_IGNORE, FP_CELL);
	gForwardPutinserver = CreateMultiForward("vip_putinserver", ET_IGNORE, FP_CELL);
	gForwardDisconnect = CreateMultiForward("vip_disconnect", ET_IGNORE, FP_CELL);
	
	gAuthKeys = TrieCreate();
	TrieSetCell(gAuthKeys, "name", Auth_Name);
	TrieSetCell(gAuthKeys, "steam", Auth_SteamID);
	TrieSetCell(gAuthKeys, "steamid", Auth_SteamID);
	TrieSetCell(gAuthKeys, "authid", Auth_SteamID);
	TrieSetCell(gAuthKeys, "ip", Auth_IP);
	TrieSetCell(gAuthKeys, "tag", Auth_Tag);
	
	gAuthData = ArrayCreate(AuthData);
	
	for(new i = 0; i < Auths; i++) {
		gAuthToIndex[i] = TrieCreate();
	}
	
	gDatePattern = regex_compile("\d{4}-\d{1,2}-\d{1,2}", gReturnFromForward, "", 0);
	
	get_configsdir(gUsersFile, charsmax(gUsersFile));
	add(gUsersFile, charsmax(gUsersFile), "/vip_users.ini");
	
	LoadConfig();
}

public plugin_end() {
	TrieDestroy(gAuthKeys);
	
	ArrayDestroy(gAuthData);
	
	for(new i = 0; i < Auths; i++) {
		TrieDestroy(gAuthToIndex[i]);
	}
	
	regex_free(gDatePattern);
}

public plugin_natives() {
	register_library("vip");
	
	register_native("is_user_vip", "_is_user_vip");
	register_native("get_vip_flags", "_get_vip_flags");
}

public _is_user_vip(plugin, params) {
	return is_vip(get_param(1)) ? 1 : 0;
}

public _get_vip_flags(plugin, params) {
	new id = get_param(1);
	
	return is_vip(id) ? gFlags[id] : 0;
}

public client_authorized(id) {
	CheckAuth(id, gForwardAuth);
}

public client_putinserver(id) {
	CheckAuth(id, gForwardPutinserver);
}

public client_infochanged(id) {
	if(!is_user_connected(id)) return;
	
	new oldName[32], newName[32];
	get_user_name(id, oldName, charsmax(oldName));
	get_user_info(id, "name", newName, charsmax(newName));
	
	if(!equal(oldName, newName)) {
		CheckAuth(id, gForwardAuth, newName);
	}
}

public player_spawn(id)
{
	if (is_user_alive(id))
	set_user_rendering(id,kRenderFxGlowShell,random_num(0,255),random_num(0,255),random_num(0,255),kRenderNormal,20);
	set_task(2.0, "Remove_Rendering",id);
	screen_fade(id,1,1,random_num(0,255),random_num(0,255),random_num(0,255),50);
}

public Remove_Rendering( id )
{
	set_user_rendering( id,kRenderFxNone,_,_,_, kRenderNormal,_);
}

stock screen_fade(index, iDuration, iHoldTime, r, g, b, alpha)
{
    message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, index );
    write_short(fade_units_to_seconds(iDuration));
    write_short(fade_units_to_seconds(iHoldTime));
    write_short(0x0000);
    write_byte(r);
    write_byte(g);
    write_byte(b);
    write_byte(alpha); 
    message_end();
}
stock fade_units_to_seconds(num)
{
    return ((1<<12) * (num));
}

public on_new_round()
{
	g_enabled = get_pcvar_num(g_type)
	if(get_pcvar_num(g_recieved)) g_showrecieved = true	
}

public on_damage(id)
{
	if(g_enabled)
	{		
		static attacker; attacker = get_user_attacker(id)
		static damage; damage = read_data(2)		
		if(g_showrecieved)
		{			
			set_hudmessage(255, 0, 0, 0.45, 0.50, 2, 0.1, 4.0, 0.1, 0.1, -1)
			ShowSyncHudMsg(id, g_hudmsg2, "%i^n", damage)		
		}
		if(is_user_connected(attacker))
		{
			switch(g_enabled)
			{
				case 1: {
					set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
					ShowSyncHudMsg(attacker, g_hudmsg1, "%i^n", damage)				
				}
				case 2: {
					if(fm_is_ent_visible(attacker,id))
					{
						set_hudmessage(0, 100, 200, -1.0, 0.55, 2, 0.1, 4.0, 0.02, 0.02, -1)
						ShowSyncHudMsg(attacker, g_hudmsg1, "%i^n", damage)				
					}
				}
			}
		}
	}
}

public Player_TakeDamage ( iVictim, iInflictor, iAttacker, Float:fDamage ) {
    
    if ( iInflictor == iAttacker && IsPlayer ( iAttacker ) ) {
    
        SetHamParamFloat ( 4, fDamage * 2.0 ); // De aici modifici damageul
        return HAM_HANDLED;
        
    }
    
    return HAM_IGNORED;
    
}

public client_disconnect(id) {
	if(is_vip(id)) {
		ExecuteForward(gForwardDisconnect, gReturnFromForward, id);
		
		remove_vip(id);
		gFlags[id] = 0;
		
		remove_task(id);
	}
}

public CmdAddUser(id, level, cid) {
	if(!cmd_access(id, level, cid, 3)) {
		return PLUGIN_HANDLED;
	}
	
	new auth[35];
	read_argv(1, auth, charsmax(auth));
	
	new target = cmd_target(id, auth, CMDTARGET_NO_BOTS);
	if(!target) {
		return PLUGIN_HANDLED;
	}
	
	new type[16];
	read_argv(2, type, charsmax(type));
	strtolower(type);
	
	new typeNum;
	if(!TrieGetCell(gAuthKeys, type, typeNum) || typeNum == Auth_Tag) {
		console_print(id, "Invalid type! Only 'name', 'steamid', and 'ip' are valid types!");
		return PLUGIN_HANDLED;
	}
	
	switch(typeNum) {
		case Auth_SteamID: {
			get_user_authid(target, auth, charsmax(auth));
		}
		case Auth_IP: {
			get_user_ip(target, auth, charsmax(auth), 1);
		}
		default: {
			get_user_name(target, auth, charsmax(auth));
		}
	}
	
	new password[32];
	new flagString[27], flags;
	new remove, removeDate[32];
	
	new argCount = read_argc();
	if(argCount > 3) {
		read_argv(3, password, charsmax(password));
		
		if(argCount > 4) {
			read_argv(4, flagString, charsmax(flagString));
			
			flags = read_flags(flagString);
			
			// fix flagString in case it wasn't 100% proper
			get_flags(flags, flagString, charsmax(flagString));
			
			if(argCount > 5) {
				new days[12];
				read_argv(5, days, charsmax(days));
				
				if(!is_str_num(days) || (remove = str_to_num(days)) < 0) {
					console_print(id, "Days must be a positive integer, or 0 for no expiring!");
					return PLUGIN_HANDLED;
				}
				
				if(remove) {
					remove = get_systime() + (remove * 86400);
					
					format_time(removeDate, charsmax(removeDate), "%Y-%m-%d", remove);
				}
			}
		}
	}
	
	new f = fopen(gUsersFile, "a+");
	
	if(f) {
		fprintf(f, "^n^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"", type, auth, password, flagString, removeDate);
		fclose(f);
	}
	
	if(gSqlTuple != Empty_Handle) {
		new data[AddData];
		data[Data_Type] = typeNum;
		copy(data[Data_Auth], charsmax(data[Data_Auth]), auth);
		copy(data[Data_Password], charsmax(data[Data_Password]), password);
		copy(data[Data_Flags], charsmax(data[Data_Flags]), flagString);
		copy(data[Data_RemoveDate], charsmax(data[Data_RemoveDate]), remove ? removeDate : "0000-00-00");
		
		new query[128];
		formatex(query, charsmax(query), "SELECT COUNT(*) FROM `vip_users` WHERE `auth_type` = %d AND `auth` = ^"%s^";", typeNum, auth);
		
		SQL_ThreadQuery(gSqlTuple, "QueryCheckAddUser", query, data, AddData);
	}
	
	if(typeNum != Auth_Name) {
		get_user_name(target, auth, charsmax(auth));
	}
	
	console_print(id, "Added user to VIP: <%s> <%s>", type, auth);
	
	return PLUGIN_HANDLED;
}

public QueryCheckAddUser(failstate, Handle:query, error[], errcode, data[], size, Float:queueTime) {
	if(failstate == TQUERY_CONNECT_FAILED) {
		log_amx("Failed connecting to check add user (%d): %s", errcode, error);
	}
	else if(failstate == TQUERY_QUERY_FAILED) {
		log_amx("Failed query on check add user (%d): %s", errcode, error);
	}
	else if(!SQL_ReadResult(query, 0)) {
		new queryString[256];
		formatex(queryString, charsmax(queryString), "INSERT INTO `vip_users` (`auth_type`, `auth`, `password`, `flags`, `date_remove`) VALUES (%d, ^"%s^", ^"%s^", ^"%s^", ^"%s^");",
			data[Data_Type], data[Data_Auth], data[Data_Password], data[Data_Flags], data[Data_RemoveDate]);
		
		SQL_ThreadQuery(gSqlTuple, "QueryAddUser", queryString);
	}
}

public QueryAddUser(failstate, Handle:query, error[], errcode, data[], size, Float:queueTime) {
	if(failstate == TQUERY_CONNECT_FAILED) {
		log_amx("Failed connecting to add user (%d): %s", errcode, error);
	}
	else if(failstate == TQUERY_QUERY_FAILED) {
		log_amx("Failed query on add user (%d): %s", errcode, error);
	}
}

public CmdAddAuth(id, level, cid) {
	if(!cmd_access(id, level, cid, 3)) {
		return PLUGIN_HANDLED;
	}
	
	new type[16], auth[35];
	read_argv(1, type, charsmax(type));
	read_argv(2, auth, charsmax(auth));
	
	strtolower(type);
	
	new typeNum;
	if(!TrieGetCell(gAuthKeys, type, typeNum)) {
		console_print(id, "Invalid type! Only 'name', 'steamid', 'ip', and 'tag' are valid types!");
		return PLUGIN_HANDLED;
	}
	
	new password[32];
	new flagString[27], flags;
	new remove, removeDate[32];
	
	new argCount = read_argc();
	if(argCount > 3) {
		read_argv(3, password, charsmax(password));
		
		if(argCount > 4) {
			read_argv(4, flagString, charsmax(flagString));
			
			flags = read_flags(flagString);
			
			// fix flagString in case it wasn't 100% proper
			get_flags(flags, flagString, charsmax(flagString));
			
			if(argCount > 5) {
				new days[12];
				read_argv(5, days, charsmax(days));
				
				if(!is_str_num(days) || (remove = str_to_num(days)) < 0) {
					console_print(id, "Days must be a positive integer, or 0 for no expiring!");
					return PLUGIN_HANDLED;
				}
				
				if(remove) {
					remove = get_systime() + (remove * 86400);
					
					format_time(removeDate, charsmax(removeDate), "%Y-%m-%d", remove);
				}
			}
		}
	}
	
	new f = fopen(gUsersFile, "a+");
	
	if(f) {
		fprintf(f, "^n^"%s^" ^"%s^" ^"%s^" ^"%s^" ^"%s^"", type, auth, password, flagString, removeDate);
		fclose(f);
	}
	
	if(gSqlTuple != Empty_Handle) {
		new data[AddData];
		data[Data_Type] = typeNum;
		copy(data[Data_Auth], charsmax(data[Data_Auth]), auth);
		copy(data[Data_Password], charsmax(data[Data_Password]), password);
		copy(data[Data_Flags], charsmax(data[Data_Flags]), flagString);
		copy(data[Data_RemoveDate], charsmax(data[Data_RemoveDate]), remove ? removeDate : "0000-00-00");
		
		new query[128];
		formatex(query, charsmax(query), "SELECT COUNT(*) FROM `vip_users` WHERE `auth_type` = %d AND `auth` = ^"%s^";", typeNum, auth);
		
		SQL_ThreadQuery(gSqlTuple, "QueryCheckAddAuth", query, data, AddData);
	}
	
	console_print(id, "Added user to VIP: <%s> <%s>", type, auth);
	
	return PLUGIN_HANDLED;
}

public QueryCheckAddAuth(failstate, Handle:query, error[], errcode, data[], size, Float:queueTime) {
	if(failstate == TQUERY_CONNECT_FAILED) {
		log_amx("Failed connecting to check add auth (%d): %s", errcode, error);
	}
	else if(failstate == TQUERY_QUERY_FAILED) {
		log_amx("Failed query on check add auth (%d): %s", errcode, error);
	}
	else if(!SQL_ReadResult(query, 0)) {
		new queryString[256];
		formatex(queryString, charsmax(queryString), "INSERT INTO `vip_users` (`auth_type`, `auth`, `password`, `flags`, `date_remove`) VALUES (%d, ^"%s^", ^"%s^", ^"%s^", ^"%s^");",
			data[Data_Type], data[Data_Auth], data[Data_Password], data[Data_Flags], data[Data_RemoveDate]);
		
		SQL_ThreadQuery(gSqlTuple, "QueryAddAuth", queryString);
	}
}

public QueryAddAuth(failstate, Handle:query, error[], errcode, data[], size, Float:queueTime) {
	if(failstate == TQUERY_CONNECT_FAILED) {
		log_amx("Failed connecting to add auth (%d): %s", errcode, error);
	}
	else if(failstate == TQUERY_QUERY_FAILED) {
		log_amx("Failed query on add auth (%d): %s", errcode, error);
	}
}

public CmdReload(id, level, cid) {
	if(!cmd_access(id, level, cid, 1)) {
		return PLUGIN_HANDLED;
	}
	
	LoadConfig();
	
	new players[32], num;
	get_players(players, num, "ch");
	
	while(num) {
		CheckAuth(players[--num], gForwardAuth);
	}
	
	console_print(id, "Reloaded VIP users list");
	
	return PLUGIN_HANDLED;
}

LoadConfig() {
	static bool:alreadyLoaded;
	
	if(alreadyLoaded) {
		gSqlTuple = Empty_Handle;
		
		ArrayClear(gAuthData);
		gNumAuths = 0;
	}
	
	new config[64];
	get_configsdir(config, charsmax(config));
	add(config, charsmax(config), "/vip.cfg");
	
	if(file_exists(config)) {
		server_cmd("exec %s", config);
		server_exec();
	}
	
	if(!get_pcvar_num(gCvarSql) || !LoadSql(alreadyLoaded)) {
		LoadFile();
	}
	
	alreadyLoaded = true;
}

LoadFile() {
	
	new f = fopen(gUsersFile, "rt");
	
	if(!f) return;
	
	new data[64];
	new type[16];
	new typeNum;
	new auth[32];
	new flagString[32];
	new removeDate[32];
	new remove, curTime = get_systime();
	new authData[AuthData];
	new deleteExpired = get_pcvar_num(gCvarDeleteExpired);
	new Trie:linesExpired, line;
	
#if defined BACKWARDS_COMPAT
	new Trie:linesToFix = TrieCreate(), bool:fixLines = false;
#endif
	
	new tmpFile[64];
	formatex(tmpFile, charsmax(tmpFile), "%s.tmp", gUsersFile);
	
	if(deleteExpired) {
		linesExpired = TrieCreate();
	}
	
	while(!feof(f)) {
		fgets(f, data, charsmax(data));
		trim(data);
		line++;
		
		if(!data[0] || data[0] == ';' || data[0] == '/' && data[1] == '/') continue;
		
		if(parse(data, type, charsmax(type), auth, charsmax(auth), flagString, charsmax(flagString), removeDate, charsmax(removeDate)) < 2) continue;
		
		strtolower(type);
		
		if(!TrieGetCell(gAuthKeys, type, typeNum) || TrieKeyExists(gAuthToIndex[typeNum], auth)) continue;
		
#if defined BACKWARDS_COMPAT
		if(!removeDate[0]) {
			// there are only 3 params
			// check if the 3rd is a date instead of flags
			// this is for backwards compatibility for older versions without flags
			if(flagString[0] && regex_match_c(flagString, gDatePattern, gReturnFromForward) > 0) {
				// this flag string is really a date string
				// switch the strings
				copy(data, charsmax(data), removeDate);
				copy(removeDate, charsmax(removeDate), flagString);
				copy(flagString, charsmax(flagString), data);
				
				// say we want to fix lines later
				fixLines = true;
				
				// add specific line to be fixed
				num_to_str(line, data, charsmax(data));
				TrieSetCell(linesToFix, data, line);
			}
		}
#endif
		
		remove = DateToUnix(removeDate);
		
		if(remove && remove <= curTime) {
			if(deleteExpired) {
				num_to_str(line, type, charsmax(type));
				TrieSetCell(linesExpired, type, line);
			}
			continue;
		}
		
		authData[Auth_Type] = typeNum;
		copy(authData[Auth_Key], charsmax(authData[Auth_Key]), auth);
		authData[Auth_Flags] = read_flags(flagString);
		authData[Auth_RemoveTime] = remove;
		
		ArrayPushArray(gAuthData, authData);
		TrieSetCell(gAuthToIndex[typeNum], auth, gNumAuths);
		gNumAuths++;
	}
	
#if defined BACKWARDS_COMPAT
	if(deleteExpired || fixLines) {
#else
	if(deleteExpired) {
#endif
		fseek(f, 0, SEEK_SET);
		
		new t = fopen(tmpFile, "wt");
		line = 0;
		
		while(!feof(f)) {
			num_to_str(++line, type, charsmax(type));
			fgets(f, data, charsmax(data));
			
			if(deleteExpired && TrieKeyExists(linesExpired, type)) continue;
			
#if defined BACKWARDS_COMPAT
			if(TrieKeyExists(linesToFix, type)) {
				parse(data, type, charsmax(type), auth, charsmax(auth), flagString, charsmax(flagString), removeDate, charsmax(removeDate));
				
				// switch date and flag string since they are backwards
				formatex(data, charsmax(data), "^"%s^" ^"%s^" ^"%s^" ^"%s^"^n", type, auth, removeDate, flagString);
			}
#endif
			
			fputs(t, data);
		}
		
		fclose(t);
		
		TrieDestroy(linesExpired);
	}
	
#if defined BACKWARDS_COMPAT
	TrieDestroy(linesToFix);
#endif
	
	fclose(f);
	
#if defined BACKWARDS_COMPAT
	if(deleteExpired || fixLines) {
#else
	if(deleteExpired) {
#endif
		rename_file(tmpFile, gUsersFile, 1);
	}
}

DateToUnix(const dateString[]) {
	if(!dateString[0] || regex_match_c(dateString, gDatePattern, gReturnFromForward) <= 0 || equal(dateString, "0000-00-00")) {
		return 0;
	}
	
	new year[5], month[3], rest[32];
	strtok(dateString, year, charsmax(year), rest, charsmax(rest), '-');
	strtok(rest, month, charsmax(month), rest, charsmax(rest), '-');
	
	return TimeToUnix(str_to_num(year), str_to_num(month), str_to_num(rest), 0, 0, 0);
}

LoadSql(bool:threadQueries) {
	new host[32], user[32], pass[32], db[32];
	get_pcvar_string(gCvarHost, host, charsmax(host));
	get_pcvar_string(gCvarUser, user, charsmax(user));
	get_pcvar_string(gCvarPass, pass, charsmax(pass));
	get_pcvar_string(gCvarDb, db, charsmax(db));
	
	gSqlTuple = SQL_MakeDbTuple(host, user, pass, db);
	
	if(gSqlTuple == Empty_Handle) {
		log_amx("Failed to create SQL tuple.");
		return 0;
	}
	
	new const queryString[] = "CREATE TABLE IF NOT EXISTS `vip_users` (\
			`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,\
			`auth_type` INT NOT NULL DEFAULT '0',\
			`auth` VARCHAR(32) NOT NULL,\
			`password` VARCHAR(32) NOT NULL,\
			`flags` VARCHAR(26) NOT NULL,\
			`date_remove` DATE NOT NULL DEFAULT '0000-00-00');";
	
	if(threadQueries) {
		SQL_ThreadQuery(gSqlTuple, "QueryCreateTable", queryString);
	} else {
		new errcode, error[128];
		new Handle:link = SQL_Connect(gSqlTuple, errcode, error, charsmax(error));
		
		if(link == Empty_Handle) {
			gSqlTuple = Empty_Handle;
			
			log_amx("Failed to connect to database (%d): %s", errcode, error);
			return 0;
		}
		
		new Handle:query = SQL_PrepareQuery(link, "%s", queryString);
		
		// Added `date_remove` field to table
		// 
		// Fix for v0.0.1 to v0.0.2
		// ALTER TABLE `vip_users` ADD `date_remove` DATE NOT NULL DEFAULT '0000-00-00';
		
		// Added `flags` field to table
		// 
		// Fix for v0.0.1 to v0.0.4
		// ALTER TABLE `vip_users` ADD `date_remove` DATE NOT NULL DEFAULT '0000-00-00', ADD `flags` VARCHAR(26) NOT NULL DEFAULT '';
		// 
		// Fix for v0.0.2 to v0.0.4
		// ALTER TABLE `vip_users` ADD `flags` VARCHAR(26) NOT NULL DEFAULT '';
		
		// Added `password` field to table
		// 
		// Fix for v0.0.1 to v0.0.5
		// ALTER TABLE `vip_users` ADD `date_remove` DATE NOT NULL DEFAULT '0000-00-00', ADD `flags` VARCHAR(26) NOT NULL DEFAULT '', ADD `password` VARCHAR(32) NOT NULL DEFAULT '';
		// 
		// Fix for v0.0.2 to v0.0.5
		// ALTER TABLE `vip_users` ADD `flags` VARCHAR(26) NOT NULL DEFAULT '', ADD `password` VARCHAR(32) NOT NULL DEFAULT '';
		// 
		// Fix for v0.0.4 to v0.0.5
		// ALTER TABLE `vip_users` ADD `password` VARCHAR(32) NOT NULL DEFAULT '';
		
		if(!SQL_Execute(query)) {
			gSqlTuple = Empty_Handle;
			
			SQL_QueryError(query, error, charsmax(error));
			log_amx("Error creating table: %s", error);
		}
		
		SQL_FreeHandle(query);
		SQL_FreeHandle(link);
		
		if(gSqlTuple != Empty_Handle) {
			LoadFromSql();
		} else {
			return 0;
		}
	}
	
	return 1;
}

public QueryCreateTable(failstate, Handle:query, error[], errcode, data[], size, Float:queueTime) {
	if(failstate == TQUERY_CONNECT_FAILED) {
		log_amx("Failed connecting to create table (%d): %s", errcode, error);
		
		LoadFile();
	}
	else if(failstate == TQUERY_QUERY_FAILED) {
		log_amx("Failed query on create table (%d): %s", errcode, error);
		
		LoadFile();
	}
	else {
		LoadFromSql();
	}
}

LoadFromSql() {
	new curDate[11];
	get_time("%Y-%m-%d", curDate, charsmax(curDate));
	
	new queryString[94];
	// SELECT * FROM `vip_users` WHERE `date_remove` = '0000-00-00' OR `date_remove` > '2012-02-09';
	// 0123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 123456789 
	
	if(get_pcvar_num(gCvarDeleteExpired)) {
		formatex(queryString, charsmax(queryString), "DELETE FROM `vip_users` WHERE `date_remove` > '%s';", curDate);
		
		SQL_ThreadQuery(gSqlTuple, "QueryDeleteExpired", queryString);
	}
	
	formatex(queryString, charsmax(queryString), "SELECT * FROM `vip_users` WHERE `date_remove` = '0000-00-00' OR `date_remove` > '%s';", curDate);
	
	SQL_ThreadQuery(gSqlTuple, "QueryLoadUsers", queryString);
}

public QueryDeleteExpired(failstate, Handle:query, error[], errcode, data[], size, Float:queueTime) {
	if(failstate == TQUERY_CONNECT_FAILED) {
		log_amx("Failed connecting to delete expired (%d): %s", errcode, error);
	}
	else if(failstate == TQUERY_QUERY_FAILED) {
		log_amx("Failed query on delete expired (%d): %s", errcode, error);
	}
}

public QueryLoadUsers(failstate, Handle:query, error[], errcode, data[], size, Float:queueTime) {
	if(failstate == TQUERY_CONNECT_FAILED) {
		log_amx("Failed connecting to load users (%d): %s", errcode, error);
		
		LoadFile();
	}
	else if(failstate == TQUERY_QUERY_FAILED) {
		log_amx("Failed query on load users (%d): %s", errcode, error);
		
		LoadFile();
	}
	else if(SQL_NumResults(query)) {
		new fieldAuth = SQL_FieldNameToNum(query, "auth");
		new fieldType = SQL_FieldNameToNum(query, "auth_type");
		new fieldPassword = SQL_FieldNameToNum(query, "password");
		new fieldFlags = SQL_FieldNameToNum(query, "flags");
		new fieldRemove = SQL_FieldNameToNum(query, "date_remove");
		
		new flagString[27];
		new removeDate[11];
		new curTime = get_systime();
		new authData[AuthData];
		
		do {
			SQL_ReadResult(query, fieldRemove, removeDate, charsmax(removeDate));
			
			authData[Auth_RemoveTime] = DateToUnix(removeDate);
			
			if(!authData[Auth_RemoveTime] || authData[Auth_RemoveTime] > curTime) {
				SQL_ReadResult(query, fieldAuth, authData[Auth_Key], charsmax(authData[Auth_Key]));
				authData[Auth_Type] = SQL_ReadResult(query, fieldType);
				
				SQL_ReadResult(query, fieldPassword, authData[Auth_Password], charsmax(authData[Auth_Password]));
				
				SQL_ReadResult(query, fieldFlags, flagString, charsmax(flagString));
				authData[Auth_Flags] = read_flags(flagString);
				
				ArrayPushArray(gAuthData, authData);
				TrieSetCell(gAuthToIndex[authData[Auth_Type]], authData[Auth_Key], gNumAuths);
				gNumAuths++;
			}
			
			SQL_NextRow(query);
		}
		while(SQL_MoreResults(query));
	}
}

CheckAuth(id, forwardHandle, forceName[] = "") {
	new wasVip = is_vip(id);
	remove_vip(id);
	gFlags[id] = 0;
	
	remove_task(id);
	
	new flags[27];
	get_pcvar_string(gCvarAuthFlags, flags, charsmax(flags));
	
	if(flags[0] && has_all_flags(id, flags)) {
		gFlags[id] = read_flags(flags) | read_pcvar_flags(gCvarDefaultFlags);
		AuthUser(id, wasVip, forwardHandle);
		return;
	}
	
	new name[32], steamid[32], ip[32];
	if(forceName[0]) {
		copy(name, charsmax(name), forceName);
	} else {
		get_user_name(id, name, charsmax(name));
	}
	get_user_authid(id, steamid, charsmax(steamid));
	get_user_ip(id, ip, charsmax(ip), 1);
	
	new curTime = get_systime();
	
	new authData[AuthData], index;
	
	if(!TrieGetCell(Trie:gAuthToIndex[Auth_Name], name, index)
	&& !TrieGetCell(Trie:gAuthToIndex[Auth_SteamID], steamid, index)
	&& !TrieGetCell(Trie:gAuthToIndex[Auth_IP], ip, index)) {
		index = -1;
		
		for(new i = 0; i < gNumAuths; i++) {
			ArrayGetArray(gAuthData, i, authData);
			
			if(authData[Auth_Type] == Auth_Tag
			&& (0 < authData[Auth_RemoveTime] <= curTime)
			&& containi(name, authData[Auth_Key]) != -1) {
				index = i;
				break;
			}
		}
		
		if(index == -1) return;
	}
	
	if(authData[Auth_Password][0]) {
		new field[32], password[32];
		get_pcvar_string(gCvarPasswordField, field, charsmax(field));
		get_user_info(id, field, password, charsmax(password));
		
		if(!equal(authData[Auth_Password], password)) return;
	}
	
	gFlags[id] = authData[Auth_Flags] | read_pcvar_flags(gCvarDefaultFlags);
	AuthUser(id, wasVip, forwardHandle, authData[Auth_RemoveTime] - curTime);
}

AuthUser(id, wasVip, forwardHandle, remove = 0) {
	set_vip(id);
	
	if(!wasVip) {
		ExecuteForward(forwardHandle, wasVip, id);
	}
	
	if(remove > 0) {
		set_task(float(remove), "TaskCheckAuth", id);
	}
}

public TaskCheckAuth(id) {
	CheckAuth(id, gForwardAuth);
}

read_pcvar_flags(cvar) {
	new flags[27];
	get_pcvar_string(cvar, flags, charsmax(flags));
	return read_flags(flags);
}

// CODE BELOW IS FROM BUGSY'S UNIX TO TIME CONVERSION INCLUDE
// https://forums.alliedmods.net/showthread.php?t=91915

stock const YearSeconds[2] = 
{ 
	31536000,	//Normal year
	31622400 	//Leap year
};

stock const MonthSeconds[12] = 
{ 
	2678400, //January	31 
	2419200, //February	28
	2678400, //March	31
	2592000, //April	30
	2678400, //May		31
	2592000, //June		30
	2678400, //July		31
	2678400, //August	31
	2592000, //September	30
	2678400, //October	31
	2592000, //November	30
	2678400  //December	31
};

stock const DaySeconds = 86400;
stock const HourSeconds = 3600;
stock const MinuteSeconds = 60;

stock TimeToUnix( const iYear , const iMonth , const iDay , const iHour , const iMinute , const iSecond /*, TimeZones:tzTimeZone=UT_TIMEZONE_UTC*/)
{
	new i , iTimeStamp;

	for ( i = 1970 ; i < iYear ; i++ )
		iTimeStamp += YearSeconds[ IsLeapYear(i) ];

	for ( i = 1 ; i < iMonth ; i++ )
		iTimeStamp += SecondsInMonth( iYear , i );

	iTimeStamp += ( ( iDay - 1 ) * DaySeconds );
	iTimeStamp += ( iHour * HourSeconds );
	iTimeStamp += ( iMinute * MinuteSeconds );
	iTimeStamp += iSecond;

	/*if ( tzTimeZone == UT_TIMEZONE_SERVER )
		tzTimeZone = GetTimeZone();
		
	return ( iTimeStamp + TimeZoneOffset[ tzTimeZone ] );*/
	
	return iTimeStamp;
}

stock SecondsInMonth( const iYear , const iMonth ) 
{
	return ( ( IsLeapYear( iYear ) && ( iMonth == 2 ) ) ? ( MonthSeconds[iMonth - 1] + DaySeconds ) : MonthSeconds[iMonth - 1] );
}

stock IsLeapYear( const iYear ) 
{
	return ( ( (iYear % 4) == 0) && ( ( (iYear % 100) != 0) || ( (iYear % 400) == 0 ) ) );
}
chestia e ca doar am adaugat pluginele nu le-am facut special pentru vip pentru ca nu stiu ,daca mai vrea careva sa mai adauge,sa o faca..o sa mai invat si revin cu alt reply daca reusesc ceva,cel putin sa mai adaug 2 plugine sau sa-l fac only vip
Image
The Kalu
Fost administrator
Fost administrator
Posts: 13707
Joined: 09 Oct 2010, 12:39
Detinator Steam: Da
CS Status: In grajd!
SteamID: kalulord
Reputatie: Fost Administrator
Fost membru Club eXtreamCS (6 luni)
Nume anterior: Terra
Location: Romania, Ploiesti
Has thanked: 328 times
Been thanked: 646 times
Contact:

21 Jan 2021, 22:58

UP for me.
Image
Post Reply

Return to “Cereri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 31 guests