1.8.7p0

From The Fairy Garden MUSH
Jump to navigation Jump to search

Version 1.8.7 patchlevel 0 Aug 10 2018

Major Changes

* 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 SEARCHING` for details.
   * Optional enhanced connection logging. See the file *game/CONNLOG.md* for details.
   * A number of new softcode functions and expanded functions, listed below.

Minor Changes

* Message translation support now defaults to off. Run configure with `--enable-nls` to turn it on if needed. [SW]
* Shrink the `NEW_PE_INFO` struct, 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]

Softcode

* Support all of Rhost's `colors()` key arguments (Except n). [SW, 1112]
* Functions that work on integers (Like `div()` or `band()`) now use 64-bit values instead of 32-bit. [SW]
* Added `isjson()`
* `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 `@clone/preserve` [797]
* New 'me' and 'inventory' flags for `scan()` give finer control of what to scan. [MG]
* `orflags()`, `orlflags()`, `andflags()`, `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. [1180].
* `timecalc()` and `secscalc()` for adding/subtracting intervals from times.
* `@suggest` and `suggest()` for user-defined spellchecking. Loads */usr/share/dict/words* or another configurable wordlist by default.
* `connlog()` and `connrecord()` for interfacing with enhanced connection logs.
* `soundex()` and `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 `@chown` and `@atrchown`. [MT]
* If compiled with libcurl support, adds `@http` for interacting with RESTFul web APIs. [SW]
* `stripaccents()` supports a second, smarter, transliteration algorithm.
* If compiled with ICU support, adds `lcstr2()` and `ucstr2()` with proper support for characters like the German eszett (ß) that map to a different number of characters in different cases.
* `@chatformat` now receives a new arg, `%6`, which defaults to "says" but may be replaced by the speechtext mogrifier. Inspired by Bodin. [MG]
* `etimefmt()` supports `$w` and `$y` formats for weeks and years. [SW, 804]

Fixes

* A bunch of color names weren't mapping correctly to Xterm color codes. [SW]
* `@grep/iprint` hilites the matching text in the same case it appears in the attribute body. [SW, 1120]
* `@mail` wasn't updating a player's MAILCURF attribute correctly. [CLDawes, 1131]
* Connecting with a web browser to a mush without a `mud_url` config option set caused an infinite refresh loop. Reported by grapenut. [1149]
* 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]
* Pass `pe_info` into 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]
* `@clone` without /preserve wasn't stripping privileged flags and such. [1190,SW]
* `@chown/preserve` was resetting wiz-bit despite it's help file indicating otherwise. [1187] PR by Qon.
* `scan()` now determines if objects will be included based on whether the caller can examine them, rather than if `scan()`'s `<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]
* `@mail` without a message list respects the current folder instead of using folder 0. [77]
* `ufun()`, `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]

Documentation

* Changelogs and other documentation use markup. [SW, 1140]
* Start trying to clean up and revise ancient documentation. [1095]
* Help fixes and improvements. [MG, SW, MT]
* Help files are now in UTF-8.

OS Specific

BSDs in general

* `info_slave` and `ssl_slave` use `kqueue()` to efficiently be notified of parent mush crashes.

OpenBSD ###

* netmush and slave processes use `pledge(2)` to limit their privileges. [SW]

Windows

* Use Windows crypto library functions for base64 conversion and digest hashing instead of OpenSSL. [SW]