% PennMUSH 1.8.7 Changes % % Last release: Aug 10 2018
This is the most current changes file for PennMUSH. Please look it over; each version contains new things which might significantly affect the function of your server. Changes are reported in reverse chronological order (most recent first)
- [SW] is Shawn Wagner, a PennMUSH developer (aka Raevnos), also responsible for most unattributed changes.
- [GM] is Greg Millam, a PennMUSH developer (aka Walker)
- [MG] is Mike Griffiths, a PennMUSH developer (aka Talvo)
- [TK] is Tim Krajcar, a PennMUSH developer (aka Rince)
- [MT] is Mike Taylor, a PennMUSH developer (aka Qon or Zenithar)
-  refers to code by (or inspired by) TinyMUSH 3.0
- [MUX] refers to code by (or inspired by) TinyMUX 2.x
- [Rhost] refers to code by (or inspired by) RhostMUSH
Numbers next to the developer credit refer to Github issue numbers.
Version 1.8.7 patchlevel 1 Nov 20 2018
/briefswitch to display just the names of matching entries. [SW]
- help full text search includes @ and + in tokens, so things like
help/search "@force"work as expected. Also enabled porter stemming of search phrases (Searching for wizard matches wizards). Noticed by [MG]. [SW]
help/findwhich mimics the pre-1.8.7 behavior of
help/search. Suggested by [MG]. [SW]
connrecord()returns an error if extended connection logging is disabled. [SW]
connlog()didn't handle future dates very well. [SW]
- dbtools programs couldn't handle attributes with quote marks in the name. Reported by [MG]. [SW,1228]
@httprequests in-progress during a
@shutdown/rebootwould leak sockets. [SW,1246]
lattrp()and similar functions didn't behave the same with attribute trees as 1.8.6. Reported by Mercutio. [SW,1233]
- Recursive calls to
json_map()were broken. Reported by Mercutio [SW,1252]
- Fixed a potential overflow bug in
@search. Reported by eery. [MG]
Version 1.8.7 patchlevel 0 Aug 10 2018
- Support websocket connections. See https://github.com/grapenut/websockclient for a sample in-browser client. [Grapenut, 1007]
- Change attributes from being stored in sorted linked lists to sorted arrays; results in faster lookups and less memory usage. [SW]
- Penn now comes with the Sqlite3 database engine bundled with it, and uses it internally in a few ways:
- 3 different tables for looking up color names are combined into a single table.
- Per-object auxilliary data keys (objdata) are handled in sql.
- Player names and alias lists are handled in sql, making some operations on them simpler.
- Suggests alternatives for unknown function names, flags, powers and help entries, and a softcode interface to the suggestion engine.
- @entrances and entrances() no longer scan the entire database.
- Help files are stored in a database, with an expanded help/search that supports full text search. See
HELP SEARCHINGfor details.
- Optional enhanced connection logging. See the file game/CONNLOG.md for details.
- A number of new softcode functions and expanded functions, listed below.
- Message translation support now defaults to off. Run configure with
--enable-nlsto turn it on if needed. [SW]
- Shrink the
NEW_PE_INFOstruct, for signficant memory savings in softcode that queues lots of commands. [SW]
- Add more test cases to the softcode test suite. [SW]
- log_forces in mushcnf.dst now defaults to no. You probably only want this on if you're debugging. [MG]
- The connect screen now respects SOCKSET options. [MG]
- @chan/what now displays channel locks. [MT, 1208]
- Support all of Rhost's
colors()key arguments (Except n). [SW, 1112]
- Functions that work on integers (Like
band()) now use 64-bit values instead of 32-bit. [SW]
json_query()get and exists can follow paths into objects instead of taking a single key/index. Suggested by qa'toq. [SW]
json_mod()for modifying complex JSON objects. [SW]
json_query(str, unescape)handles unicode escape sequences.
json(string, foo)escapes non-ascii characters.
clone()now takes an optional fourth argument to act like
- New 'me' and 'inventory' flags for
scan()give finer control of what to scan. [MG]
andlflags(), and the power versions no longer return errors on unknown flags/powers. They instead treat the unknown one as if it wasn't set. Suggested by Qon. .
secscalc()for adding/subtracting intervals from times.
suggest()for user-defined spellchecking. Loads /usr/share/dict/words or another configurable wordlist by default.
connrecord()for interfacing with enhanced connection logs.
soundslike()now support a second phonetic hash algorithm besides soundex.
- Side-effect version of
link()now returns 1 on success, 0 or #-1 on failure. [MT]
owner()now accepts two optional arguments, allowing ownership to be changed as in
- If compiled with libcurl support, adds
@httpfor interacting with RESTFul web APIs. [SW]
stripaccents()supports a second, smarter, transliteration algorithm.
- If compiled with ICU support, adds
ucstr2()with proper support for characters like the German eszett (ß) that map to a different number of characters in different cases.
@chatformatnow receives a new arg,
%6, which defaults to "says" but may be replaced by the speechtext mogrifier. Inspired by Bodin. [MG]
$yformats for weeks and years. [SW, 804]
- A bunch of color names weren't mapping correctly to Xterm color codes. [SW]
@grep/iprinthilites the matching text in the same case it appears in the attribute body. [SW, 1120]
- Connecting with a web browser to a mush without a
mud_urlconfig option set caused an infinite refresh loop. Reported by grapenut. 
- Make sure
sigrecv_ack()won't hang the mush if it somehow gets called at the wrong time. Also fix a file descriptor leak in the signal handling code. [SW]
pe_infointo IDLE and HAVEN attributes from the page command. [MG]
- The x and X options to
align()now always truncate to the column width, rather than incorrectly truncating at a space. Reported by Qon. [MG, 1178]
json_query()didn't understand an action of 'type' as documented. [SW]
@clonewithout /preserve wasn't stripping privileged flags and such. [1190,SW]
@chown/preservewas resetting wiz-bit despite it's help file indicating otherwise.  PR by Qon.
scan()now determines if objects will be included based on whether the caller can examine them, rather than if
<looker>can examine them. [MG]
- Fixed some bugs regarding when
setq()will and won't let you set the values of named registers when you've hit the limit. [MG, 1179]
sqlescape()when using a sqlite3 connection no longer also requires MySQL.
- A number of issues in the handling UTF-8 text sent by clients have been fixed, as well as improvements in UTF-8 handling in general. [SW]
- Fix an off-by-one error in command switch initialization code. [SW]
ulocal(), etc. could get confused by ansi (markup) in the attribute name. Strip markup first. [MT]
- Fix a long-standing bug where input sent right after a SSL connection could get lost. [SW]
- Changelogs and other documentation use markup. [SW, 1140]
- Start trying to clean up and revise ancient documentation. 
- Help fixes and improvements. [MG, SW, MT]
- Help files are now in UTF-8.
BSDs in general
kqueue()to efficiently be notified of parent mush crashes.
- netmush and slave processes use
pledge(2)to limit their privileges. [SW]
- Use Windows crypto library functions for base64 conversion and digest hashing instead of OpenSSL. [SW]