summaryrefslogtreecommitdiff
path: root/src/login/login.c
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2017-10-29 00:16:03 +0300
committerAndrei Karas <akaras@inbox.ru>2017-10-29 02:10:10 +0300
commitebff7968504ee090961390820ce74458d7b0f956 (patch)
tree9e6268b61e9e5e86112632ade1dc2a6da27ee8f0 /src/login/login.c
parent0e16e4d19a3ffc16d34a39c3ded3a9b20c1298b8 (diff)
downloadhercules-ebff7968504ee090961390820ce74458d7b0f956.tar.gz
hercules-ebff7968504ee090961390820ce74458d7b0f956.tar.bz2
hercules-ebff7968504ee090961390820ce74458d7b0f956.tar.xz
hercules-ebff7968504ee090961390820ce74458d7b0f956.zip
Add configurable way to show char servers with color in list in client.
Options configurable in login-server.conf in users_count section.
Diffstat (limited to 'src/login/login.c')
-rw-r--r--src/login/login.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/login/login.c b/src/login/login.c
index 360160b4f..3db9558b8 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -1815,6 +1815,38 @@ bool login_config_read_permission(const char *filename, struct config_t *config,
}
/**
+ * Reads 'login_configuration.users_count' and initializes required variables.
+ *
+ * @param filename Path to configuration file (used in error and warning messages).
+ * @param config The current config being parsed.
+ * @param imported Whether the current config is imported from another file.
+ *
+ * @retval false in case of error.
+ */
+bool login_config_read_users(const char *filename, struct config_t *config, bool imported)
+{
+ struct config_setting_t *setting = NULL;
+ bool retval = true;
+
+ nullpo_retr(false, filename);
+ nullpo_retr(false, config);
+
+ if ((setting = libconfig->lookup(config, "login_configuration/users_count")) == NULL) {
+ if (imported)
+ return true;
+ ShowError("login_config_read: login_configuration/users_count was not found in %s!\n", filename);
+ return false;
+ }
+
+ libconfig->setting_lookup_bool_real(setting, "send_user_count_description", &login->config->send_user_count_description);
+ libconfig->setting_lookup_uint32(setting, "low", &login->config->users_low);
+ libconfig->setting_lookup_uint32(setting, "medium", &login->config->users_medium);
+ libconfig->setting_lookup_uint32(setting, "high", &login->config->users_high);
+
+ return retval;
+}
+
+/**
* Reads the 'login-config' configuration file and initializes required variables.
*
* @param filename Path to configuration file.
@@ -1843,6 +1875,8 @@ bool login_config_read(const char *filename, bool imported)
retval = false;
if (!login->config_read_permission(filename, &config, imported))
retval = false;
+ if (!login->config_read_users(filename, &config, imported))
+ retval = false;
if (!loginlog_config_read("conf/common/inter-server.conf", imported)) // Only inter-server
retval = false;
@@ -1866,6 +1900,30 @@ bool login_config_read(const char *filename, bool imported)
return retval;
}
+/**
+ * Convert users count to colors.
+ *
+ * @param users Actual users count.
+ *
+ * @retval users count or color id.
+ **/
+uint16 login_convert_users_to_colors(uint16 users)
+{
+#if PACKETVER >= 20170726
+ if (!login->config->send_user_count_description)
+ return 4;
+ if (users <= login->config->users_low)
+ return 0;
+ else if (users <= login->config->users_medium)
+ return 1;
+ else if (users <= login->config->users_high)
+ return 2;
+ return 3;
+#else
+ return users;
+#endif
+}
+
//--------------------------------------
// Function called at exit of the server
//--------------------------------------
@@ -2175,11 +2233,13 @@ void login_defaults(void) {
login->config_read_permission = login_config_read_permission;
login->config_read_permission_hash = login_config_read_permission_hash;
login->config_read_permission_blacklist = login_config_read_permission_blacklist;
+ login->config_read_users = login_config_read_users;
login->config_set_dnsbl_servers = login_config_set_dnsbl_servers;
login->clear_dnsbl_servers = login_clear_dnsbl_servers;
login->clear_client_hash_nodes = login_clear_client_hash_nodes;
login->config_set_md5hash = login_config_set_md5hash;
+ login->convert_users_to_colors = login_convert_users_to_colors;
login->LOGIN_CONF_NAME = NULL;
login->NET_CONF_NAME = NULL;
}