Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 5636 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Galetumet padeti? Sitas pluginas ima vipus / adminus is duomenu bazes. Taciau imdamas pagal nika ir pass'a, jis neismeta is serverio jei slaptazodis yra neteisingas. Ta prasme, jog jei uzsimeti pagr admn nika laisvai gali zaisti, taciau be privilegiju, tik su jo niku. Labai prasau pagalbos... +REP ir FLP

#include 
#include 
#include 

#define VERSION_AMXX "1.8.1.3746"
#define VERSION_AMXBANS "VIP sistema"

new AdminCount;

#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]


// pcvars
new amx_mode;
new amx_password_field;
new amx_default_access;

new Handle:info

public plugin_init()
{

register_plugin(VERSION_AMXBANS, VERSION_AMXX, "AMXBans Dev Team")
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)

register_srvcmd("amx_sqladmins", "adminSql")
register_cvar("amx_sql_table_sms", "amx_amxadmins")
register_cvar("amx_sql_host_sms", "")
register_cvar("amx_sql_user_sms", "")
register_cvar("amx_sql_pass_sms", "")
register_cvar("amx_sql_db_sms", "")
register_cvar("amx_sql_type_sms", "mysql")

register_concmd("amx_reloadadmins", "cmdReload", ADMIN_CFG)

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
}

public plugin_cfg()
{
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)

set_task(0.1,"sql_init",101)
//server_cmd("amx_sqladmins")

set_task(6.1, "delayed_load",102)
}
public plugin_end() {
if(info==Empty_Handle)
	SQL_FreeHandle(info)
}
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;
}
public sql_init() {
//new type
//SQL_GetAffinity(type, 11)
SQL_SetAffinity("mysql")
info = SQL_MakeStdTuple()

adminSql()
}
public adminSql()
{
//new error[128],  errno
//new Handle:sql = SQL_Connect(info, errno, error, 127)


new  error[128], errno

new Handle:info = SQL_MakeDbTuple("","","","")
new Handle:sql = SQL_Connect(info, errno, error, 127)


// This is a new way of getting the port number
new ip_port[42], ip_tmp[32], ip[32] , port[10]
get_user_ip(0, ip_port, 41)
strtok(ip_port, ip_tmp, 31, port, 9, ':')
get_cvar_string("ip",ip,32)

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 from users.ini

	return PLUGIN_HANDLED
}

new Handle:query

// Sqlite is removed as amxbans dont use that.

SQL_QueryAndIgnore(sql, "CREATE TABLE IF NOT EXISTS `amx_amxadmins` (`id` int(12) NOT NULL auto_increment, `username` varchar(32) default NULL, `password` varchar(32) default NULL, `access` varchar(32) default NULL, `flags` varchar(32) default NULL, `steamid` varchar(32) default NULL, `nickname` varchar(32) NOT NULL default '', PRIMARY KEY (`id`))")
query = SQL_PrepareQuery(sql,"SELECT amx_amxadmins.username, amx_amxadmins.password, amx_amxadmins.access, amx_amxadmins.flags FROM amx_amxadmins")

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, "username")
	new qcolPass = SQL_FieldNameToNum(query, "password")
	new qcolAccess = SQL_FieldNameToNum(query, "access")
	new qcolFlags = SQL_FieldNameToNum(query, "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)

return PLUGIN_HANDLED
}

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();

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)
}

new players[32], num, pv
new name[32]
get_players(players, num)
for (new i=0; 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];

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_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 (!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_putinserver(id)
return get_cvar_num("amx_mode") ? accessUser(id) : PLUGIN_CONTINUE 
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/

Aš pats naudoju tokį patį. Sau privilegijas suteikęs ant Nick su Password ir problemų nėra.

Meta lauk iš serverio tuos, kurie neįvedę teisingą slaptažodį, jei yra su 'mano' nick.

* Tiesiog .sma faile panaikinau kelis dalykus, bet manau, kad turi veikti ir be tų 'panaikinimų':

#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)

  set_cvar_float("amx_last_voting", 0.0)

  server_cmd("exec %s/sql.cfg", configsDir)
  set_task(6.1, "delayed_load",102)

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)
  }

}

  // This is a new way of getting the port number
  new ip_port[42], ip_tmp[32], ip[32] , port[10]
  get_user_ip(0, ip_port, 41)
  strtok(ip_port, ip_tmp, 31, port, 9, ':')
  get_cvar_string("ip",ip,32)

Ir dar DB duomenis per cvar nenaudok. Panaikink šiuos:

  register_cvar("amx_sql_table_sms", "amx_amxadmins")
  register_cvar("amx_sql_host_sms", "")
  register_cvar("amx_sql_user_sms", "")
  register_cvar("amx_sql_pass_sms", "")
  register_cvar("amx_sql_db_sms", "")
  register_cvar("amx_sql_type_sms", "mysql")

Ir tiesiog vietoj cvar, kuriuos panaikinom, įrašyk DB duomenis tik čia, daugiau niekur:

  new Handle:info = SQL_MakeDbTuple("dbHost","dbUser","dbPass","dbName")

Bet kaip ir sakiau, tau turėtų veikti tas kodas, kurį pats pateikei. =)

  • Parašė po 3 savaičių...
Na, man tai veikia gerai.

P.S. Pamėgink naudot nario NeKaS pluginą: cs-1-6-pluginai/sms-900-unban-map-keitimas-sistema-1-2-specifijacija-t30392.html

Veikia, bet kai pakeiti mapa turi daryti rekonekt kad gautum privilegijas...

---------------------------

Tai pagalbos nepabus? :(

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 5636 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...