Problema register

Moderator: Moderators

EDUTz
Nou Venit
Posts: 22
Joined: 27 Aug 2012, 00:38

Problema register

Post by EDUTz » 27 Aug 2012, 00:50

Salut.
Incerc sa folosesc v 2.0.0 rc2 - cu exemplu de instalare AICI.
Pe web, in afara de functia mailului (pe care trebuie sa o las mai tarziu) merg toate.
Nu am inteles cu pluginul admin_sql un lucru. Am citit si recitit sma-ul si nu gasesc nici o modalitate de a-mi inregistra numele direct de pe server cu aceasta comanda
register <email> <password>
Practic, ea nu este implementata. Am zis totusi poate sunt eu batut in cap si nu inteleg ceva .. asa ca am recompilat personal pluginul, am folosit si pe cel deja compilat de voi, degeaba. Care e treaba ?

ps:baza de date este incarcata, am verificat, asta daca vroiati intai sa ma intrebati de eventualele erori.


EDIT: acum am gasit fisierele de pe github, ar trebui sa faceti un update pe site :P
Multumesc oricum ca ati avut rabdarea de a citit, este foarte tare scriptu, puteti sa-mi stergeti postul daca doriti.
User avatar
vim
Mini tehnicus
Posts: 2019
Joined: 22 Nov 2007, 20:05

Re: Problema register

Post by vim » 27 Aug 2012, 03:06

Salut.

Nu iti functioneaza pentru ca documentatia a fost actualizata pentru versiunea RC3, care o sa fie lansata in cateva zile, iar tu folosesti versiunea RC2 a script-ului. Tot ce trebuie sa faci este sa copiezi versiunea noua a pluginului, pe care o gasesti aici, sa il compilezi si o sa functioneze.

RC3 inca nu a fost terminat si din cauza asta nu am actualizat versiunea aplicatiei de pe site. Dupa ce lansam RC3-ul, o sa actualizam si site-ul.

Multumim pt aprecieri. Imprastie vorba despre noi pe la prieteni, dusmani, iubita si bunica. :)

Code: Select all

[root@gw-03 ~]# man woman
Segmentation Fault (core dumped)
I retired from here
EDUTz
Nou Venit
Posts: 22
Joined: 27 Aug 2012, 00:38

Re: Problema register

Post by EDUTz » 27 Aug 2012, 11:10

Salut.

Sa va uitati mai bine la pluginul acela, tocmai a reusit sa-mi returneze server_id = 49, in conditiile in care amx_rn_account_type "1" l-am pus in sma ... iar amx_sql_serverid "1" in sql.cfg ... si la fel e si-n mysql ..
Din ce cred eu, trebuie inregistrat cvar suplimentar, caci vad ca nu este deajuns o citire de cvar_string.
de adaugat ->
new amx_rn_serverid;
amx_rn_serverid = register_cvar("amx_sql_serverid","1")
de modificat -> get_cvar_string("amx_sql_serverid", server_id, 31)
in asta -> server_id = get_pcvar_num(amx_rn_serverid)
nu l-am testat inca dar tebuie sa mearga

--- 27 Aug 2012, 11:10 ---

nu mai deschid alt topic, daca tot l-am facut pe asta ..

pluginul nu verifica daca exista deja acel nume, poti sa il inregistrezi din consola de cate ori vrei, poti sa umpli asftfel o baza de date ...

si inca ceva ... daca iti faci cont pe interfata web si intri imediat pe server, iti cere in continuare sa-ti inregistrezi numele, spre deosebire de registeru de pe server direct. Ramai cu litera z in loc de r cu toate cu da reload_admins la 10 sec ... pana se schimbe harta.
T-z3P
Nou Venit
Posts: 32
Joined: 25 May 2012, 18:21

Re: Problema register

Post by T-z3P » 27 Aug 2012, 17:36

Am facut modificarile propuse de tine. Legat de inregistrarea pe interfata web apoi intratul pe server incercam acum o chestiuta. Ai zis ca nu verifica daca exista acel nume; tin sa te contrazic. Daca vrei sa testezi codul provizoriu, uite-l:
admin_sql.smaShow

Code: Select all

/* AMX Mod X script.
*   Admin Base Plugin
*
* by the AMX Mod X Development Team
*  originally developed by OLO
*
* This file is part of AMX Mod X.
*
*
*  This program is free software; you can redistribute it and/or modify it
*  under the terms of the GNU General Public License as published by the
*  Free Software Foundation; either version 2 of the License, or (at
*  your option) any later version.
*
*  This program is distributed in the hope that it will be useful, but
*  WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
*  General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software Foundation,
*  Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*  In addition, as a special exception, the author gives permission to
*  link the code of this program with the Half-Life Game Engine ("HL
*  Engine") and Modified Game Libraries ("MODs") developed by Valve,
*  L.L.C ("Valve"). You must obey the GNU General Public License in all
*  respects for all of the code used other than the HL Engine and MODs
*  from Valve. If you modify this file, you may extend this exception
*  to your version of the file, but you are not obligated to do so. If
*  you do not wish to do so, delete this exception statement from your
*  version.
*/

// Uncomment for SQL version
#define USING_SQL

#include <amxmodx>
#include <amxmisc>
#if defined USING_SQL
#include <sqlx>
#endif

//new Vector:AdminList;

new AdminCount;

new PLUGINNAME[] = "AMX Mod X"

#define ADMIN_LOOKUP	(1<<0)
#define ADMIN_NORMAL	(1<<1)
#define ADMIN_STEAM		(1<<2)
#define ADMIN_IPADDR	(1<<3)
#define ADMIN_NAME		(1<<4)

new g_cmdLoopback[16]
new bool:g_CaseSensitiveName[33];

// pcvars
new amx_mode;
new amx_password_field;
new amx_default_access;
new amx_rn_account_type;
new amx_rn_message;
new amx_rn_message_site;
new amx_rn_message_time;
new amx_sql_serverid;

public plugin_init()
{
#if defined USING_SQL
	register_plugin("Admin Base (SQL)", AMXX_VERSION_STR, "AMXX Dev Team")
#else
	register_plugin("Admin Base", AMXX_VERSION_STR, "AMXX Dev Team")
#endif
	register_dictionary("admin.txt")
	register_dictionary("common.txt")
	amx_mode = register_cvar("amx_mode", "1")
	amx_password_field = register_cvar("amx_password_field", "_pw")
	amx_default_access = register_cvar("amx_default_access", "")

	register_cvar("amx_vote_ratio", "0.02")
	register_cvar("amx_vote_time", "10")
	register_cvar("amx_vote_answers", "1")
	register_cvar("amx_vote_delay", "60")
	register_cvar("amx_last_voting", "0")
	register_cvar("amx_show_activity", "2")
	register_cvar("amx_votekick_ratio", "0.40")
	register_cvar("amx_voteban_ratio", "0.40")
	register_cvar("amx_votemap_ratio", "0.40")

	set_cvar_float("amx_last_voting", 0.0)

#if defined USING_SQL
	amx_rn_account_type = register_cvar("amx_rn_account_type","0") 
	amx_rn_message = register_cvar("amx_rn_message","1")
	amx_rn_message_site = register_cvar("amx_rn_message_site","http://yoursitehere.com")
	amx_rn_message_time = register_cvar("amx_rn_message_time","300.0") // Float
	amx_sql_serverid = register_cvar("amx_sql_serverid", "0")

	register_srvcmd("amx_sqladmins", "adminSql")
	register_cvar("amx_sql_table", "admins")
	register_cvar("amx_sql_table_prefix", "")
#endif
	register_cvar("amx_sql_host", "127.0.0.1")
	register_cvar("amx_sql_user", "root")
	register_cvar("amx_sql_pass", "")
	register_cvar("amx_sql_db", "amx")
	register_cvar("amx_sql_type", "mysql")

	register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG)
	register_concmd("amx_addadmin", "addadminfn", ADMIN_RCON, "<playername|auth> <accessflags> [password] [authtype] - add specified player as an admin to users.ini")
	register_concmd("register", "RNRegister", ADMIN_USER, "<e-mail> <password> - register current nickname in database")

	format(g_cmdLoopback, 15, "amxauth%c%c%c%c", random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'), random_num('A', 'Z'))

	register_clcmd(g_cmdLoopback, "ackSignal")

	remove_user_flags(0, read_flags("z"))		// Remove 'user' flag from server rights

	new configsDir[64]
	get_configsdir(configsDir, 63)
	
	server_cmd("exec %s/amxx.cfg", configsDir)	// Execute main configuration file
	server_cmd("exec %s/sql.cfg", configsDir)

	// Create a vector of 5 cells to store the info.
	//AdminList=vector_create(5);

	
#if defined USING_SQL
	server_cmd("amx_sqladmins")
#else
	format(configsDir, 63, "%s/users.ini", configsDir)
	loadSettings(configsDir)					// Load admins accounts
#endif
}
public client_connect(id)
{
	g_CaseSensitiveName[id] = false;
}
public addadminfn(id, level, cid)
{
	if (!cmd_access(id, level, cid, 3))
		return PLUGIN_HANDLED
		
	new idtype = ADMIN_STEAM | ADMIN_LOOKUP

	if (read_argc() >= 5)
	{
		new t_arg[16]
		read_argv(4, t_arg, 15)
		
		if (equali(t_arg, "steam") || equali(t_arg, "steamid") || equali(t_arg, "auth"))
		{
			idtype = ADMIN_STEAM
		}
		else if (equali(t_arg, "ip"))
		{
			idtype = ADMIN_IPADDR
		}
		else if (equali(t_arg, "name") || equali(t_arg, "nick"))
		{
			idtype = ADMIN_NAME
			
			if (equali(t_arg, "name"))
				idtype |= ADMIN_LOOKUP
		} else {
			console_print(id, "[%s] Unknown id type ^"%s^", use one of: steamid, ip, name", PLUGINNAME, t_arg)
			return PLUGIN_HANDLED
		}
	}

	new arg[33]
	read_argv(1, arg, 32)
	new player = -1
	
	if (idtype & ADMIN_STEAM)
	{
		if (containi(arg, "STEAM_0:") == -1)
		{
			idtype |= ADMIN_LOOKUP
			player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS)
		} else {
			new _steamid[44]
			static _players[32], _num, _pv
			get_players(_players, _num)
			for (new _i=0; _i<_num; _i++)
			{
				_pv = _players[_i]
				get_user_authid(_pv, _steamid, sizeof(_steamid)-1)
				if (!_steamid[0])
					continue
				if (equal(_steamid, arg))
				{
					player = _pv
					break
				}
			}	
			if (player < 1)
			{
				idtype &= ~ADMIN_LOOKUP
			}		
		}
	}
	else if (idtype & ADMIN_NAME)
	{
		player = cmd_target(id, arg, CMDTARGET_ALLOW_SELF | CMDTARGET_NO_BOTS)
		
		if (player)
			idtype |= ADMIN_LOOKUP
		else
			idtype &= ~ADMIN_LOOKUP
	}
	else if (idtype & ADMIN_IPADDR)
	{
		new len = strlen(arg)
		new dots, chars
		
		for (new i = 0; i < len; i++)
		{
			if (arg[i] == '.')
			{
				if (!chars || chars > 3)
					break
				
				if (++dots > 3)
					break
				
				chars = 0
			} else {
				chars++
			}
			
			if (dots != 3 || !chars || chars > 3)
			{
				idtype |= ADMIN_LOOKUP
				player = find_player("dh", arg)
			}
		}
	}
	
	if (idtype & ADMIN_LOOKUP && !player)
	{
		console_print(id, "%L", id, "CL_NOT_FOUND")
		return PLUGIN_HANDLED
	}
	
	new flags[64]
	read_argv(2, flags, 63)

	new password[64]
	if (read_argc() >= 4)
		read_argv(3, password, 63)

	new auth[33]
	new Comment[33]; // name of player to pass to comment field
	if (idtype & ADMIN_LOOKUP)
	{
		get_user_name(player, Comment, sizeof(Comment)-1)
		if (idtype & ADMIN_STEAM)
		{
			get_user_authid(player, auth, 32)
		}
		else if (idtype & ADMIN_IPADDR)
		{
			get_user_ip(player, auth, 32)
		}
		else if (idtype & ADMIN_NAME)
		{
			get_user_name(player, auth, 32)
		}
	} else {
		copy(auth, 32, arg)
	}
	
	new type[16], len
	
	if (idtype & ADMIN_STEAM)
		len += format(type[len], 15-len, "c")
	else if (idtype & ADMIN_IPADDR)
		len += format(type[len], 15-len, "d")
	
	if (strlen(password) > 0)
		len += format(type[len], 15-len, "a")
	else
		len += format(type[len], 15-len, "e")
	
	AddAdmin(id, auth, flags, password, type, Comment)
	cmdReload(id, ADMIN_CFG, 0)

	if (player > 0)
	{
		new name[32]
		get_user_info(player, "name", name, 31)
		accessUser(player, name)
	}

	return PLUGIN_HANDLED
}

AddAdmin(id, auth[], accessflags[], password[], flags[], comment[]="")
{
#if defined USING_SQL
	new error[128], errno

	new Handle:info = SQL_MakeStdTuple()
	new Handle:sql = SQL_Connect(info, errno, error, 127)
	
	if (sql == Empty_Handle)
	{
		server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_CON", error)
		//backup to users.ini
#endif
		// Make sure that the users.ini file exists.
		new configsDir[64]
		get_configsdir(configsDir, 63)
		format(configsDir, 63, "%s/users.ini", configsDir)

		if (!file_exists(configsDir))
		{
			console_print(id, "[%s] File ^"%s^" doesn't exist.", PLUGINNAME, configsDir)
			return
		}

		// Make sure steamid isn't already in file.
		new line = 0, textline[256], len
		const SIZE = 63
		new line_steamid[SIZE + 1], line_password[SIZE + 1], line_accessflags[SIZE + 1], line_flags[SIZE + 1], parsedParams
		
		// <name|ip|steamid> <password> <access flags> <account flags>
		while ((line = read_file(configsDir, line, textline, 255, len)))
		{
			if (len == 0 || equal(textline, ";", 1))
				continue // comment line

			parsedParams = parse(textline, line_steamid, SIZE, line_password, SIZE, line_accessflags, SIZE, line_flags, SIZE)
			
			if (parsedParams != 4)
				continue	// Send warning/error?
			
			if (containi(line_flags, flags) != -1 && equal(line_steamid, auth))
			{
				console_print(id, "[%s] %s already exists!", PLUGINNAME, auth)
				return
			}
		}

		// If we came here, steamid doesn't exist in users.ini. Add it.
		new linetoadd[512]
		
		if (comment[0]==0)
		{
			formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, password, accessflags, flags)
		}
		else
		{
			formatex(linetoadd, 511, "^r^n^"%s^" ^"%s^" ^"%s^" ^"%s^" ; %s", auth, password, accessflags, flags, comment)
		}
		console_print(id, "Adding:^n%s", linetoadd)

		if (!write_file(configsDir, linetoadd))
			console_print(id, "[%s] Failed writing to %s!", PLUGINNAME, configsDir)
#if defined USING_SQL
	}
	
	new table[32]
	
	get_cvar_string("amx_sql_table", table, 31)
	
	new Handle:query = SQL_PrepareQuery(sql, "SELECT * FROM `%s` WHERE (`auth` = '%s')", table, auth)

	if (!SQL_Execute(query))
	{
		SQL_QueryError(query, error, 127)
		server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error)
		console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error)
	} else if (SQL_NumResults(query)) {
		console_print(id, "[%s] %s already exists!", PLUGINNAME, auth)
	} else {
		console_print(id, "Adding to database:^n^"%s^" ^"%s^" ^"%s^" ^"%s^"", auth, password, accessflags, flags)
	
		SQL_QueryAndIgnore(sql, "REPLACE INTO `%s` (`auth`, `password`, `access`, `flags`) VALUES ('%s', '%s', '%s', '%s')", table, auth, password, accessflags, flags)
	}
	
	SQL_FreeHandle(query)
	SQL_FreeHandle(sql)
	SQL_FreeHandle(info)
#endif

}
public plugin_cfg()
{
	set_task(6.1, "delayed_load")
}

public delayed_load()
{
	new configFile[128], curMap[64], configDir[128]

	get_configsdir(configDir, sizeof(configDir)-1)
	get_mapname(curMap, sizeof(curMap)-1)

	new i=0;
	
	while (curMap[i] != '_' && curMap[i++] != '^0') {/*do nothing*/}
	
	if (curMap[i]=='_')
	{
		// this map has a prefix
		curMap[i]='^0';
		formatex(configFile, sizeof(configFile)-1, "%s/maps/prefix_%s.cfg", configDir, curMap);

		if (file_exists(configFile))
		{
			server_cmd("exec %s", configFile);
		}
	}

	get_mapname(curMap, sizeof(curMap)-1)

	
	formatex(configFile, sizeof(configFile)-1, "%s/maps/%s.cfg", configDir, curMap)

	if (file_exists(configFile))
	{
		server_cmd("exec %s", configFile)
	}
	
}

loadSettings(szFilename[])
{
	new File=fopen(szFilename,"r");
	
	if (File)
	{
		new Text[512];
		new Flags[32];
		new Access[32]
		new AuthData[44];
		new Password[32];
		
		while (!feof(File))
		{
			fgets(File,Text,sizeof(Text)-1);
			
			trim(Text);
			
			// comment
			if (Text[0]==';') 
			{
				continue;
			}
			
			Flags[0]=0;
			Access[0]=0;
			AuthData[0]=0;
			Password[0]=0;
			
			// not enough parameters
			if (parse(Text,AuthData,sizeof(AuthData)-1,Password,sizeof(Password)-1,Access,sizeof(Access)-1,Flags,sizeof(Flags)-1) < 2)
			{
				continue;
			}
			
			admins_push(AuthData,Password,read_flags(Access),read_flags(Flags));

			AdminCount++;
		}
		
		fclose(File);
	}

	if (AdminCount == 1)
	{
		server_print("[AMXX] %L", LANG_SERVER, "LOADED_ADMIN");
	}
	else
	{
		server_print("[AMXX] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount);
	}
	
	return 1;
}

#if defined USING_SQL
public adminSql()
{
	new error[128], type[12], errno
	new prefix[32]
	
	new Handle:info = SQL_MakeStdTuple()
	new Handle:sql = SQL_Connect(info, errno, error, 127)
	new amx_sql_serverid = get_cvar_num("amx_sql_serverid")
	
	server_print("[AMXX] Using serverID = %d ", amx_sql_serverid);
	
	get_cvar_string("amx_sql_table_prefix", prefix, 31)
	
	SQL_GetAffinity(type, 11)
	
	if (sql == Empty_Handle)
	{
		server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_CON", error)
		
		//backup to users.ini
		new configsDir[64]
		
		get_configsdir(configsDir, 63)
		format(configsDir, 63, "%s/users.ini", configsDir)
		loadSettings(configsDir) // Load admins accounts

		return PLUGIN_HANDLED
	}

	new Handle:query
	
	if (equali(type, "sqlite"))
	{
		server_print("[AMXX] CStrike-Regnick does not support sqlite backend for the moment.");
		
	} else {
		
		query = SQL_PrepareQuery(sql, "\
			SELECT \
			    usr.login, usr.password, usr.account_flags, grp.name, grp.access \
			FROM \
			    %s usr \
			INNER JOIN (\
			    SELECT \
				user_ID, server_ID, group_ID \
			    FROM \
				%s \
			    WHERE \
				(server_ID = '0' OR server_ID = '%d') \
			    ORDER BY server_ID ASC ) as acc \
			INNER JOIN \
			    %s grp \
			ON \
			    (acc.user_ID = usr.ID) AND (acc.group_ID = grp.ID) \
			WHERE \
			    (usr.active = 1) \
			GROUP by usr.login;", 
				table_prefix("users", prefix), 
				table_prefix("users_access", prefix), 
				amx_sql_serverid, 
				table_prefix("groups", prefix) 
			);
	}
	

	if (!SQL_Execute(query))
	{
		SQL_QueryError(query, error, 127)
		server_print("[AMXX] %L", LANG_SERVER, "SQL_CANT_LOAD_ADMINS", error)
	} else if (!SQL_NumResults(query)) {
		server_print("[AMXX] %L", LANG_SERVER, "NO_ADMINS")
	} else {
		
		AdminCount = 0
		
		/** do this incase people change the query order and forget to modify below */
		new qcolAuth = SQL_FieldNameToNum(query, "login")
		new qcolPass = SQL_FieldNameToNum(query, "password")
		new qcolAccess = SQL_FieldNameToNum(query, "access")
		new qcolFlags = SQL_FieldNameToNum(query, "account_flags")
		
		new AuthData[44];
		new Password[44];
		new Access[32];
		new Flags[32];
		
		while (SQL_MoreResults(query))
		{
			SQL_ReadResult(query, qcolAuth, AuthData, sizeof(AuthData)-1);
			SQL_ReadResult(query, qcolPass, Password, sizeof(Password)-1);
			SQL_ReadResult(query, qcolAccess, Access, sizeof(Access)-1);
			SQL_ReadResult(query, qcolFlags, Flags, sizeof(Flags)-1);
	
			admins_push(AuthData,Password,read_flags(Access),read_flags(Flags));
	
			++AdminCount;
			SQL_NextRow(query)
		}
	
		if (AdminCount == 1)
		{
			server_print("[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMIN")
		}
		else
		{
			server_print("[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount)
		}
		
		SQL_FreeHandle(query)
		SQL_FreeHandle(sql)
		SQL_FreeHandle(info)
	}
	
	return PLUGIN_HANDLED
}


public table_prefix(name[], prefix[])
{
	new temp[128];
	format(temp, 127, "%s%s", prefix, name);
	return temp;
}
#endif

public cmdReload(id, level, cid)
{
	if (!cmd_access(id, level, cid, 1))
		return PLUGIN_HANDLED

	//strip original flags (patch submitted by mrhunt)
	remove_user_flags(0, read_flags("z"))
	
	admins_flush();

#if !defined USING_SQL
	new filename[128]
	
	get_configsdir(filename, 127)
	format(filename, 63, "%s/users.ini", filename)

	AdminCount = 0;
	loadSettings(filename);		// Re-Load admins accounts

	if (id != 0)
	{
		if (AdminCount == 1)
		{
			console_print(id, "[AMXX] %L", LANG_SERVER, "LOADED_ADMIN");
		}
		else
		{
			console_print(id, "[AMXX] %L", LANG_SERVER, "LOADED_ADMINS", AdminCount);
		}
	}
#else
	AdminCount = 0
	adminSql()

	if (id != 0)
	{
		if (AdminCount == 1)
			console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMIN")
		else
			console_print(id, "[AMXX] %L", LANG_SERVER, "SQL_LOADED_ADMINS", AdminCount)
	}
#endif

	new players[32], num, pv
	new name[32]
	get_players(players, num)
	for (new i=0; i<num; i++)
	{
		pv = players[i]
		get_user_name(pv, name, 31)
		accessUser(pv, name)
	}

	return PLUGIN_HANDLED
}

getAccess(id, name[], authid[], ip[], password[])
{
	new index = -1
	new result = 0
	
	static Count;
	static Flags;
	static Access;
	static AuthData[44];
	static Password[32];
	
	g_CaseSensitiveName[id] = false;

	Count=admins_num();
	for (new i = 0; i < Count; ++i)
	{
		Flags=admins_lookup(i,AdminProp_Flags);
		admins_lookup(i,AdminProp_Auth,AuthData,sizeof(AuthData)-1);
		
		if (Flags & FLAG_AUTHID)
		{
			if (equal(authid, AuthData))
			{
				index = i
				break
			}
		}
		else if (Flags & FLAG_IP)
		{
			new c = strlen(AuthData)
			
			if (AuthData[c - 1] == '.')		/* check if this is not a xxx.xxx. format */
			{
				if (equal(AuthData, ip, c))
				{
					index = i
					break
				}
			}									/* in other case an IP must just match */
			else if (equal(ip, AuthData))
			{
				index = i
				break
			}
		} 
		else 
		{
			if (Flags & FLAG_CASE_SENSITIVE)
			{
				if (Flags & FLAG_TAG)
				{
					if (contain(name, AuthData) != -1)
					{
						index = i
						g_CaseSensitiveName[id] = true
						break
					}
				}
				else if (equal(name, AuthData))
				{
					index = i
					g_CaseSensitiveName[id] = true
					break
				}
			}
			else
			{
				if (Flags & FLAG_TAG)
				{
					if (containi(name, AuthData) != -1)
					{
						index = i
						break
					}
				}
				else if (equali(name, AuthData))
				{
					index = i
					break
				}
			}
		}
	}

	if (index != -1)
	{
		Access=admins_lookup(index,AdminProp_Access);

		if (Flags & FLAG_NOPASS)
		{
			result |= 8
			new sflags[32]
			
			get_flags(Access, sflags, 31)
			set_user_flags(id, Access)
			
			log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, sflags, ip)
		}
		else 
		{
		
			admins_lookup(index,AdminProp_Password,Password,sizeof(Password)-1);

			if (equal(password, Password))
			{
				result |= 12
				set_user_flags(id, Access)
				
				new sflags[32]
				get_flags(Access, sflags, 31)
				
				log_amx("Login: ^"%s<%d><%s><>^" became an admin (account ^"%s^") (access ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, sflags, ip)
			} 
			else 
			{
				result |= 1
				
				if (Flags & FLAG_KICK)
				{
					result |= 2
					log_amx("Login: ^"%s<%d><%s><>^" kicked due to invalid password (account ^"%s^") (address ^"%s^")", name, get_user_userid(id), authid, AuthData, ip)
				}
			}
		}
	}
	else if (get_pcvar_float(amx_mode) == 2.0)
	{
		result |= 2
	} 
	else 
	{
		new defaccess[32]
		
		get_pcvar_string(amx_default_access, defaccess, 31)
		
		if (!strlen(defaccess))
		{
			copy(defaccess, 32, "z")
		}
		
		new idefaccess = read_flags(defaccess)
		
		if (idefaccess)
		{
			result |= 8
			set_user_flags(id, idefaccess)
		}
	}
	
	return result
}

accessUser(id, name[] = "")
{
	remove_user_flags(id)
	
	new userip[32], userauthid[32], password[32], passfield[32], username[32]
	
	get_user_ip(id, userip, 31, 1)
	get_user_authid(id, userauthid, 31)
	
	if (name[0])
	{
		copy(username, 31, name)
	}
	else
	{
		get_user_name(id, username, 31)
	}
	
	get_pcvar_string(amx_password_field, passfield, 31)
	get_user_info(id, passfield, password, 31)
	
	new result = getAccess(id, username, userauthid, userip, password)
	
	if (result & 1)
	{
		client_cmd(id, "echo ^"* %L^"", id, "INV_PAS")
	}
	
	if (result & 2)
	{
		client_cmd(id, "%s", g_cmdLoopback)
		return PLUGIN_HANDLED
	}
	
	if (result & 4)
	{
		client_cmd(id, "echo ^"* %L^"", id, "PAS_ACC")
	}
	
	if (result & 8)
	{
		client_cmd(id, "echo ^"* %L^"", id, "PRIV_SET")
	}
	
	return PLUGIN_CONTINUE
}

public client_infochanged(id)
{
	if (!is_user_connected(id) || !get_pcvar_num(amx_mode))
	{
		return PLUGIN_CONTINUE
	}

	new newname[32], oldname[32]
	
	get_user_name(id, oldname, 31)
	get_user_info(id, "name", newname, 31)

	if (g_CaseSensitiveName[id])
	{
		if (!equal(newname, oldname))
		{
			accessUser(id, newname)
		}
	}
	else
	{
		if (!equali(newname, oldname))
		{
			accessUser(id, newname)
		}
	}
	return PLUGIN_CONTINUE
}

public ackSignal(id)
{
	server_cmd("kick #%d ^"%L^"", get_user_userid(id), id, "NO_ENTRY")
	return PLUGIN_HANDLED
}

public client_authorized(id)
	return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE

public client_putinserver(id)
{
	if (!is_dedicated_server() && id == 1)
		return get_pcvar_num(amx_mode) ? accessUser(id) : PLUGIN_CONTINUE
	
	#if defined USING_SQL
	if(!is_user_admin(id))
	{
		new rn_message = get_pcvar_num(amx_rn_message)
		
		if(rn_message == 1)
		{
			set_task(10.0, "RNMessage", id)
		}
	}	
	#endif
	
	return PLUGIN_CONTINUE
}

#if defined USING_SQL
public RNMessage(id)
{
	if(!is_user_admin(id))
	{
		new rn_message_site[32]
		get_pcvar_string(amx_rn_message_site, rn_message_site, 31)
	
		set_hudmessage(255, 255, 255, -1.0, 0.60, 0, 6.0, 10.0)
		show_hudmessage(id, "Your nickname is not registered!^n^nFor registering, type in your console^nregister <email> <password>^nor go to %s", rn_message_site)
	
		client_cmd(id,"spk ^"vox/warning _comma unauthorized access^"")
	
		set_task(float(get_pcvar_num(amx_rn_message_time)), "RNMessage", id)
	}
}

public RNRegister(id, level, cid)
{
	if (!cmd_access(id, level, cid, 2))
		return PLUGIN_HANDLED
	
	if (!is_user_connected(id))
		return PLUGIN_CONTINUE
	
	new activation_key[25]
	new authid[64]
	new cache[256]
	new email[64]
	new error[128]
	new errno
	new Handle:info = SQL_MakeStdTuple()
	new Handle:query
	new Handle:sql = SQL_Connect(info, errno, error, 127)
	new name[32]
	new password[64]
	new password_field[32]
	new prefix[32]
	new register_date = get_systime()
	
	random_str(activation_key, charsmax(activation_key))
	read_argv(1, email, 63)
	read_argv(2, password, 31)
	
	if(containi(email, "@")==-1 || containi(email, "<")!=-1 || containi(email, ">")!=-1)
	{
		client_print(id, print_console, "Invalid e-mail address!")
		
		return PLUGIN_HANDLED
	}
	
	if(strlen(password) <= 5)
	{
		client_print(id, print_console, "Password must have at least 6 characters!")
		
		return PLUGIN_HANDLED
	}
	
	get_cvar_string("amx_password_field", password_field, 31)
	get_cvar_string("amx_sql_table_prefix", prefix, 31)
	get_user_authid(id, authid, 63)
	get_user_name(id,name,31)
		
	if (sql == Empty_Handle)
	{
		server_print("[AMXX] SQL Error: %s", error)
		
		return PLUGIN_HANDLED
	}
		
	query = SQL_PrepareQuery(sql, "INSERT INTO `%susers` (`login`, `password`, `email`, `register_date`, `active`, `activation_key`, `account_flags`) VALUES ('%s', '%s', '%s', '%d', '1', '%s', 'ab')", prefix, name, password, email, register_date, activation_key)
	
	if (!SQL_Execute(query))
	{
		SQL_QueryError(query, error, 127)
		server_print("[AMXX] SQL Error: %s", error)
		
		return PLUGIN_HANDLED
	} 
	
	SQL_FreeHandle(query)
	   
	formatex(cache, sizeof(cache)-1, "SELECT ID FROM `%susers` WHERE login='%s'", prefix, name)
	SQL_ThreadQuery(info, "RNGetUserID", cache)
	
	SQL_FreeHandle(sql)
	SQL_FreeHandle(info)
	
	client_print(id, print_console, "Your account is now registered!")
	client_print(id, print_console, "Write the next line in your console, or you will be kicked in 10 seconds:")
	client_print(id, print_console, "setinfo %s %s", password_field, password)
	
	return PLUGIN_HANDLED
}

public RNGetUserID(FailState, Handle:query, error[], Errcode, Data[], DataSize)
{
	new error[128]
	new errno
	new Handle:another_query
	new Handle:info = SQL_MakeStdTuple()
	new Handle:sql = SQL_Connect(info, errno, error, 127)
	new prefix[32]
	new rn_account_type = get_pcvar_num(amx_rn_account_type)
	new server_id = get_pcvar_num(amx_sql_serverid)
	new user_id
	
	while(SQL_MoreResults(query))
	{
		user_id = SQL_ReadResult(query,0)    
		SQL_NextRow(query)
	}
	
	get_cvar_string("amx_sql_table_prefix", prefix, 31)
	
	if(rn_account_type == 0)
	{
		another_query = SQL_PrepareQuery(sql, "INSERT INTO `%susers_access` (`user_ID`, `server_ID`, `group_ID`) VALUES ('%d', '0', '0')", prefix, user_id)
	}
	else
	{
		another_query = SQL_PrepareQuery(sql, "INSERT INTO `%susers_access` (`user_ID`, `server_ID`, `group_ID`) VALUES ('%d', '%d', '0')", prefix, user_id, server_id)
	}
	
	if (!SQL_Execute(another_query))
	{
		SQL_QueryError(another_query, error, 127)
		server_print("[AMXX] SQL Error: %s", error)
		
		return PLUGIN_HANDLED
	} 
	
	SQL_FreeHandle(another_query)
	SQL_FreeHandle(sql)
	SQL_FreeHandle(info)
	
	set_task(1.0, "cmdReload")
	
	return PLUGIN_CONTINUE
} 

random_str(output[], len)
{
	for(new i=0; i<len; i++)
	{
		output[i] = random_num('0', '9');
	}
    
	output[len]=EOS;
}
#endif
EDUTz
Nou Venit
Posts: 22
Joined: 27 Aug 2012, 00:38

Re: Problema register

Post by EDUTz » 27 Aug 2012, 20:09

Acum returneaza corect server_id.
In continuare nu verifica daca exista acel nume. Pana sa dea reload admins poti sa-l introduci de cateva ori. Doar ati restrictionat accesul la comanda register pt "admini" .. corect era sa verificati in mysql daca mai exista acel nume, nu toata lumea o sa lase reload admin la 10.0 sec. Mi se pare ca daca ajungi sa ai 1000-2000 de nume inregistrate, ar trebui sa maresti intervalul caci e posibil sa faca lag. Nu sunt sigur, dar asa ar fi normal.

Pentru faza aia cu webu:
Dintr-un motiv anume( nu-mi dau seama care ) nu il vede acolo ... v-as sfatui sa folositi admin_push .. am mai incercat eu cu alte pluginuri si din ce stiu, comanda asta intotdeauna a dat roade :D
User avatar
vim
Mini tehnicus
Posts: 2019
Joined: 22 Nov 2007, 20:05

Re: Problema register

Post by vim » 27 Aug 2012, 20:26

verificarea pt duplicate in DB o sa fie implementata in plugin
EDUTz wrote:[...]nu toata lumea o sa lase reload admin la 10.0 sec[...]
Nici nu este obligatoriu sa lase. Lista cu useri se reincarca automat la fiecare schimbare de harta.

Code: Select all

[root@gw-03 ~]# man woman
Segmentation Fault (core dumped)
I retired from here
EDUTz
Nou Venit
Posts: 22
Joined: 27 Aug 2012, 00:38

Re: Problema register

Post by EDUTz » 27 Aug 2012, 20:35

De asemenea, daca in plugin se lasa asa: (`user_ID`, `server_ID`, `group_ID`) VALUES ('%d', '0', '0')"
atunci in server_model.php ->

Code: Select all

din WHERE (acc.group_ID > 0)
in WHERE (acc.group_ID >= 0)
Sau sa se introduca dupa modelul de mai sus, un cvar aditional pentru group_id :)
Chiar si asa, ar trebui facute si in php si in sma amandoua modificari.

Parerea mea :P
User avatar
vim
Mini tehnicus
Posts: 2019
Joined: 22 Nov 2007, 20:05

Re: Problema register

Post by vim » 27 Aug 2012, 20:59

EDUTz wrote:De asemenea, daca in plugin se lasa asa: (`user_ID`, `server_ID`, `group_ID`) VALUES ('%d', '0', '0')"
atunci in server_model.php ->

Code: Select all

din WHERE (acc.group_ID > 0)
in WHERE (acc.group_ID >= 0)
Codul din plugin, specificat de tine face parte dintr-un INSERT, codul din script-ul php este dintr-un SELECT. Nu vad legatura si asupra carui lucru vrei sa atragi atentia.

EDUTz wrote:Sau sa se introduca dupa modelul de mai sus, un cvar aditional pentru group_id :)
Chiar si asa, ar trebui facute si in php si in sma amandoua modificari.
Pentru ce ai nevoie de un cvar care sa faca referire la group ? Semnificatia grupului "default" (cel cu ID = 0 din codul postat de tine), poti sa o citesti pe scurt aici, la raspunsul de la intrebarea #3.

Code: Select all

[root@gw-03 ~]# man woman
Segmentation Fault (core dumped)
I retired from here
EDUTz
Nou Venit
Posts: 22
Joined: 27 Aug 2012, 00:38

Re: Problema register

Post by EDUTz » 27 Aug 2012, 21:24

La prima chestiune, daca ai group ip 0 pe default, public, cand dai pe server la members nu iti afiseaza nici un user.

Cvar pt referire la grup este pentru acel grup pe care doresc eu sa-l fac public, si are ID-ul 7 sa zicem ... cum stie pluginul sa-l puna pe acel server pe IDul 7 in mysql ? El il trece pe 0. Personal la mine, eu folosesc default group 0... public .. si nu-mi afiseaza nici un membru daca nu fac acea modificare.
iti las un link in pm poate iti dai seama la ce ma refer...poate nu stiu eu sa explic.
EDIT: mda, nu pot .. si aici nu as vrea sa fac reclama .. iti las pe facebook
User avatar
vim
Mini tehnicus
Posts: 2019
Joined: 22 Nov 2007, 20:05

Re: Problema register

Post by vim » 27 Aug 2012, 22:08

EDUTz wrote:La prima chestiune, daca ai group ip 0 pe default, public, cand dai pe server la members nu iti afiseaza nici un user.
Nici nu se intentiona ca membrii din grupul "default" sa fie listati in respectiva pagina. In respectiva pagina o sa apara orice user care se afla intr-un grup definit din ACP ca fiind public, in afara de grupul "default".

Grupul "default" are rol de "recycle bin". Mai exact cand un grup este sters, fiecare membru al acelui grup o sa fie mutat in grupul "default", pana cand un Owner ii distribuie in alte grupuri. Deasemenea poti utiliza acel grup si pt "suspendarea" temporara a accesului unui administrator care a calcat stramb de exemplu ; pt ca desi toate datele ii raman intacte (user, parola, email, etc), nu mai are acces de admin pe server si nu mai apare nici in listele cu useri (members) respectiv echipa (team) de pe website.

In privinta unui cvar pt grup, singurul caz care imi vine in minte acum, cand asa ceva ar putea sa fie de folos este cand un propietar de server doreste ca oricine se inregistreaza de pe server, sa fie inclus intr-un grup definit de el. Desi nu stiu cat de "safe" este optiunea de a adauga useri necunoscuti intr-un grup care detine acces pe server, o sa vorbesc cu T-z3P sa vad ce parere are si el.

Code: Select all

[root@gw-03 ~]# man woman
Segmentation Fault (core dumped)
I retired from here
EDUTz
Nou Venit
Posts: 22
Joined: 27 Aug 2012, 00:38

Re: Problema register

Post by EDUTz » 27 Aug 2012, 22:22

Pai nu se detine nici un acces pe server :) .. atata vreme cat nu folosesc nici un acces pe litera r nu vad care e problema.
In plus care ar mai fi rostul pluginului sa-i fac pe toti sa se inregistreze, sa se duca pe group_id 0 si eu din 1000 de insi sa zicem, sa dau accese la vreo 15-20 ... 980 de oameni in plus pe msyql + mesaje enervante pe server. Daca ei se duc pe 0 default, ar trebui sa stau zilnic sa ii mut de colo colo ... cvaru ar fi bun in cazul cum zici si tu, daca vreau sa se duca intr-un grup facut de mine, cum ai vazut la mine, dar cu alt id decat 0 ...
Ma rog, era doar o idee ... eu personal asa am gandit ca mi-ar fi mie mai comod, mi-am facut singur modificarile necesare...

In alta ordine de idei, nu reusesc sa folosesc functia e-mailului, am folosit vreo 4 conturi publice plus 2 de pe domeniile mele, fara succes. Evident ca cel mai usor ar fi cel deja configurat pe gmail, dar mie nu-mi merge de nici o culoare.
Poate intr-o versiune viitoare, in zona de administrare includeti si zona pentru e-mail settings ... acum sincer habar n-am de unde sa-mi modific setarile smtp si restul ...
User avatar
vim
Mini tehnicus
Posts: 2019
Joined: 22 Nov 2007, 20:05

Re: Problema register

Post by vim » 27 Aug 2012, 22:47

Am adaugat un exemplu de configurare pentru Gmail in documentatie.
EDUTz wrote:Poate intr-o versiune viitoare, in zona de administrare includeti si zona pentru e-mail settings ... acum sincer habar n-am de unde sa-mi modific setarile smtp si restul ...
Setarile de la email nu le schimbi zilnic, asa ca nu prea se justifica o asemenea optiune. Setarile de la email le setezi o data, dupa care uiti de existenta lor.

Code: Select all

[root@gw-03 ~]# man woman
Segmentation Fault (core dumped)
I retired from here
EDUTz
Nou Venit
Posts: 22
Joined: 27 Aug 2012, 00:38

Re: Problema register

Post by EDUTz » 28 Aug 2012, 01:19

Nope, tot nu merge ... am reconfigurat corect pe gmail... degeaba...
Iti las un link pe fb cu eroarea ..

am schimbat astfel ca sa vad daca am erori, sper sa fie in regula..

Code: Select all

if ( ! $CI->email->send())
		{
		show_error($CI->email->print_debugger());
		} else {
		echo(‘DONE’);  
User avatar
vim
Mini tehnicus
Posts: 2019
Joined: 22 Nov 2007, 20:05

Re: Problema register

Post by vim » 28 Aug 2012, 01:34

Setarile de la email le salvezi in fisierul "app/config/production/email.php".

Code: Select all

[root@gw-03 ~]# man woman
Segmentation Fault (core dumped)
I retired from here
EDUTz
Nou Venit
Posts: 22
Joined: 27 Aug 2012, 00:38

Re: Problema register

Post by EDUTz » 28 Aug 2012, 01:39

acolo le-am si salvat, evident .. sub forma

$config['smtp_host'] = 'ssl://smtp.googlemail.com';
$config['smtp_user'] = 'user@gmail.com';
$config['smtp_pass'] = 'pass';
$config['smtp_port'] = 465; //incercat si cu 587, degeaba
Locked