diff --git a/configs/sql-init-scripts/admins-mysql.sql b/configs/sql-init-scripts/admins-mysql.sql index c8e06d34..12c79ed5 100644 --- a/configs/sql-init-scripts/admins-mysql.sql +++ b/configs/sql-init-scripts/admins-mysql.sql @@ -14,10 +14,15 @@ CREATE TABLE sm_groups ( immunity enum('none','all','default') NOT NULL, flags varchar(30) NOT NULL, name varchar(120) NOT NULL, - groups_immune varchar(255), PRIMARY KEY (id) ); +CREATE TABLE sm_group_immunity ( + group_id int(10) unsigned NOT NULL, + other_id int(10) unsigned NOT NULL, + PRIMARY KEY (group_id, other_id) +); + CREATE TABLE sm_group_overrides ( group_id int(10) unsigned NOT NULL, type enum('command','group') NOT NULL, diff --git a/configs/sql-init-scripts/admins-sqlite.sq3 b/configs/sql-init-scripts/admins-sqlite.sq3 index 2883fd10..2b01c1c7 100644 Binary files a/configs/sql-init-scripts/admins-sqlite.sq3 and b/configs/sql-init-scripts/admins-sqlite.sq3 differ diff --git a/configs/sql-init-scripts/admins-sqlite.sql b/configs/sql-init-scripts/admins-sqlite.sql index 1c0e2795..2a608548 100644 --- a/configs/sql-init-scripts/admins-sqlite.sql +++ b/configs/sql-init-scripts/admins-sqlite.sql @@ -12,8 +12,13 @@ CREATE TABLE sm_groups ( id INTEGER PRIMARY KEY AUTOINCREMENT, immunity varchar(16) NOT NULL CHECK(immunity IN ('none', 'default', 'global', 'all')), flags varchar(30) NOT NULL, - name varchar(120) NOT NULL, - groups_immune varchar(255) + name varchar(120) NOT NULL +); + +CREATE TABLE sm_group_immunity ( + group_id INTEGER NOT NULL, + other_id INTEGER NOT NULL, + PRIMARY KEY (group_id, other_id) ); CREATE TABLE sm_group_overrides ( diff --git a/plugins/admin-sql-prefetch.sp b/plugins/admin-sql-prefetch.sp index 4f2ad902..a5789bf2 100644 --- a/plugins/admin-sql-prefetch.sp +++ b/plugins/admin-sql-prefetch.sp @@ -101,7 +101,7 @@ FetchUsers(Handle:db) decl String:query[255], String:error[255]; new Handle:hQuery, Handle:hGroupQuery; - Format(query, sizeof(query), "SELECT id, authtype, identity, passwd, flags, name FROM sm_admins"); + Format(query, sizeof(query), "SELECT id, authtype, identity, password, flags, name FROM sm_admins"); if ((hQuery = SQL_Query(db, query)) == INVALID_HANDLE) { SQL_GetError(db, error, sizeof(error)); @@ -185,7 +185,7 @@ FetchGroups(Handle:db) decl String:query[255]; new Handle:hQuery; - Format(query, sizeof(query), "SELECT id, immunity, flags, name, groups_immune FROM sm_groups"); + Format(query, sizeof(query), "SELECT immunity, flags, name FROM sm_groups"); if ((hQuery = SQL_Query(db, query)) == INVALID_HANDLE) { @@ -196,24 +196,18 @@ FetchGroups(Handle:db) return; } - /* We cache basic group info so we can do reverse lookups */ - new Handle:groups = CreateArray(3); - /* Now start fetching groups */ decl String:immunity[16]; decl String:flags[32]; decl String:name[128]; - decl String:grp_immunity[256]; while (SQL_FetchRow(hQuery)) { - new id = SQL_FetchInt(hQuery, 0); - SQL_FetchString(hQuery, 1, immunity, sizeof(immunity)); - SQL_FetchString(hQuery, 2, flags, sizeof(flags)); - SQL_FetchString(hQuery, 3, name, sizeof(name)); - SQL_FetchString(hQuery, 4, grp_immunity, sizeof(grp_immunity)); + SQL_FetchString(hQuery, 0, immunity, sizeof(immunity)); + SQL_FetchString(hQuery, 1, flags, sizeof(flags)); + SQL_FetchString(hQuery, 2, name, sizeof(name)); #if defined _DEBUG - PrintToServer("Adding group (%d, %s, %s, %s, %s)", id, immunity, flags, name, grp_immunity); + PrintToServer("Adding group (%s, %s, %s)", immunity, flags, name); #endif /* Find or create the group */ @@ -245,108 +239,100 @@ FetchGroups(Handle:db) } else if (StrEqual(immunity, "global")) { SetAdmGroupImmunity(gid, Immunity_Global, true); } - - new Handle:immunity_list = UTIL_ExplodeNumberString(grp_immunity); - - /* Now, save all this for later */ - decl data[3]; - data[0] = id; - data[1] = _:gid; - data[2] = _:immunity_list; - - PushArrayArray(groups, data); } CloseHandle(hQuery); - /* Second pass - resolve immunity and group overrides */ - new num_groups = GetArraySize(groups); - for (new i=0; i 0)) - { - for (new j=0; j