From b00d67a9a21c3f92240c2e30e93ecd3dd27a9231 Mon Sep 17 00:00:00 2001 From: Anton Tarasenko Date: Mon, 24 Oct 2022 01:28:00 +0700 Subject: [PATCH] Add "AcediaUserGroups.ini" config --- config/AcediaUserGroups.ini | 25 +++++++++++++ sources/Users/UserGroup.uc | 74 +++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 config/AcediaUserGroups.ini create mode 100644 sources/Users/UserGroup.uc diff --git a/config/AcediaUserGroups.ini b/config/AcediaUserGroups.ini new file mode 100644 index 0000000..d51292d --- /dev/null +++ b/config/AcediaUserGroups.ini @@ -0,0 +1,25 @@ +; In this config you can add several different user groups by adding +; `[ UserGroup]` section for rach group. Every user can belong to +; several different groups. +; `priority` describes how important the group is. For example, if a user +; belongs to two different groups and both groups have different access rights +; for a certain command - the one with the highest priority will be chosen by +; default. +; You can specify several `user` entries with players stead id to add user to +; the certain group. + +[admin UserGroup] +priority=400 +;user= + +[moderator UserGroup] +priority=200 +;user= + +[trusted UserGroup] +priority=100 +;user= + +[wanted UserGroup] +priority=0 +;user= \ No newline at end of file diff --git a/sources/Users/UserGroup.uc b/sources/Users/UserGroup.uc new file mode 100644 index 0000000..5a66fe8 --- /dev/null +++ b/sources/Users/UserGroup.uc @@ -0,0 +1,74 @@ +/** + * Acedia's class for defining user group in config files. + * Copyright 2022 Anton Tarasenko + *------------------------------------------------------------------------------ + * This file is part of Acedia. + * + * Acedia 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, version 3 of the License, or + * (at your option) any later version. + * + * Acedia 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 Acedia. If not, see . + */ +class UserGroup extends AcediaConfig + perobjectconfig + config(AcediaUserGroups); + +var public config int priority; +var public config array user; + +protected function HashTable ToData() +{ + local int i; + local HashTable data; + local ArrayList wrappedUserArray; + + data = __().collections.EmptyHashTable(); + data.SetInt(P("priority"), priority); + wrappedUserArray = __().collections.EmptyArrayList(); + for (i = 0; i < user.length; i += 1) { + wrappedUserArray.AddString(user[i]); + } + data.SetItem(P("user"), wrappedUserArray); + wrappedUserArray.FreeSelf(); + return data; +} + +protected function FromData(HashTable source) +{ + local int i; + local ArrayList wrappedUserArray; + + DefaultIt(); + if (source == none) { + return; + } + priority = source.GetInt(P("priority"), 0); + wrappedUserArray = source.GetArrayList(P("user")); + if (wrappedUserArray == none) { + return; + } + for (i = 0; i < wrappedUserArray.GetLength(); i += 1) { + user[user.length] = wrappedUserArray.GetString(i); + } + wrappedUserArray.FreeSelf(); +} + +protected function DefaultIt() +{ + priority = 0; + user.length = 0; +} + +defaultproperties +{ + configName = "AcediaUserGroups" + supportsDataConversion = true +} \ No newline at end of file