From: Pasi Kallinen Date: Sun, 20 Aug 2017 20:04:55 +0000 (+0300) Subject: Add sysconf BONES_POOLS to allow more bones-files per level X-Git-Tag: NetHack-3.6.1_RC01~412^2~20 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1eca824321baf75e64cb7fb2efe4271324895ca6;p=nethack Add sysconf BONES_POOLS to allow more bones-files per level Reduce the chance of a player playing on a public server encountering their own bones, by implementing separate bones pools. The pool a player belongs to is determined at game start, and only bones in that pool are used. The sysconf BONES_POOLS allows the sysadmin to define how many pools there are. --- diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 5e7826855..530523f43 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -615,6 +615,7 @@ blinded hero or monster who eats a nurse corpse will have blindness cured blinded hero or monster who breathes vapor from broken potion of healing, extra healing, or full healing might have blindness cured (depends on potion: full == always; extra == if not-cursed; plain == if blessed) +sysconf definition BONES_POOLS to allow more bones files per level Platform- and/or Interface-Specific New Features diff --git a/include/sys.h b/include/sys.h index 91c5d3522..17bbadb85 100644 --- a/include/sys.h +++ b/include/sys.h @@ -27,6 +27,7 @@ struct sysopt { int seduce; int check_save_uid; /* restoring savefile checks UID? */ int check_plname; /* use plname for checking wizards/explorers/shellers */ + int bones_pools; /* record file */ int persmax; diff --git a/src/files.c b/src/files.c index 1c55133cb..abda2a770 100644 --- a/src/files.c +++ b/src/files.c @@ -704,6 +704,10 @@ d_level *lev; Sprintf(dptr, ".%c", sptr->boneid); else Sprintf(dptr, ".%d", lev->dlevel); +#ifdef SYSCF + if (sysopt.bones_pools > 1) + Sprintf(eos(file), ".%d", (ubirthday % sysopt.bones_pools)); +#endif #ifdef VMS Strcat(dptr, ";1"); #endif @@ -2278,6 +2282,9 @@ int src; if (sysopt.genericusers) free((genericptr_t) sysopt.genericusers); sysopt.genericusers = dupstr(bufp); + } else if (src == SET_IN_SYS && match_varname(buf, "BONES_POOLS", 10)) { + n = atoi(bufp); + sysopt.bones_pools = (n < 0) ? 0 : n; } else if (src == SET_IN_SYS && match_varname(buf, "SUPPORT", 7)) { if (sysopt.support) free((genericptr_t) sysopt.support); diff --git a/src/sys.c b/src/sys.c index c0803d480..6adc8f71f 100644 --- a/src/sys.c +++ b/src/sys.c @@ -40,6 +40,7 @@ sys_early_init() sysopt.explorers = (char *) 0; sysopt.genericusers = (char *) 0; sysopt.maxplayers = 0; /* XXX eventually replace MAX_NR_OF_PLAYERS */ + sysopt.bones_pools = 0; /* record file */ sysopt.persmax = PERSMAX; diff --git a/sys/unix/sysconf b/sys/unix/sysconf index d83aeff7d..eacca35ed 100644 --- a/sys/unix/sysconf +++ b/sys/unix/sysconf @@ -98,6 +98,14 @@ MAXPLAYERS=10 # %N first character of player name #DUMPLOGFILE=/tmp/nethack.%n.%d.log +# Number of bones file pools. +# The pool you belong to is determined at game start. You will +# load and save bones only from that pool. Generally useful +# for public servers only. +# Changing this might make existing bones inaccessible. +# Disabled by setting to 0, or commenting out. +#BONES_POOLS=10 + # Try to get more info in case of a program bug or crash. Only used # if the program is built with the PANICTRACE compile-time option enabled. # By default PANICTRACE is enabled if BETA is defined, otherwise disabled. diff --git a/sys/vms/sysconf b/sys/vms/sysconf index 8b52270da..0d46cd4f6 100644 --- a/sys/vms/sysconf +++ b/sys/vms/sysconf @@ -53,6 +53,14 @@ # Maximum number of score file entries to use for random statue names #MAX_STATUENAME_RANK=10 +# Number of bones file pools. +# The pool you belong to is determined at game start. You will +# load and save bones only from that pool. Generally useful +# for public servers only. +# Changing this might make existing bones inaccessible. +# Disabled by setting to 0, or commenting out. +#BONES_POOLS=10 + # Show debugging information originating from these source files. # Use '*' for all, or list source files separated by spaces. # Only available if game has been compiled with DEBUG, and can be diff --git a/sys/winnt/sysconf b/sys/winnt/sysconf index 2ce1da300..7e4d9da0a 100644 --- a/sys/winnt/sysconf +++ b/sys/winnt/sysconf @@ -32,6 +32,14 @@ WIZARDS=* # %N first character of player name #DUMPLOGFILE=nethack-%n-%d.log +# Number of bones file pools. +# The pool you belong to is determined at game start. You will +# load and save bones only from that pool. Generally useful +# for public servers only. +# Changing this might make existing bones inaccessible. +# Disabled by setting to 0, or commenting out. +#BONES_POOLS=10 + # Limit the number of simultaneous games (see also nethack.sh). #MAXPLAYERS=10