- GANL networking is now mandatory; replaces legacy select-based I/O with event-driven architecture using epoll (Linux), kqueue (BSD), and IOCP (Windows). - SSL support is always enabled; OpenSSL required on Unix, Schannel on Windows. - Updated to C++17 standard.
# Feature Additions:
- zchildren(), zexits(), zrooms(), zthings() zone listing functions. - zfun() now accepts obj/attr syntax like u(). - citer() character iterator function. - switchall() and caseall() functions. - lrest() function to return all but the last word. - lmath() generic list-math function. - malias() softcode function for querying mail aliases. - ALONE flag for rooms. - TALKMODE flag for talk mode / dotty behaviour. - link_anywhere power. - player_channels config parameter. - safer_iter config option to disable ## substitution. - Support #$ token substitution in if()/ifelse(). - Optional delimiter argument to channels(). - @object/lockname indirect lock syntax. - Support :: escape for literal : in $-command and ^-listen patterns. - Store full recipient list in sender's @mail/bcc copy.
# Bug Fixes:
- Fix Reality Levels for exits, @descformat, and lcon(). - Fix double-evaluation of reality level descriptions in @descformat. - Always fire action attributes during quiet teleport. - Suppress @enter and @leave for dark wizards. - Fix HTML bright colors when CS_INTENSE is active. - Suppress space-trimming in after() and before() when delimiter is explicit. - Reject object names that exceed the MBUF_SIZE limit. - Drain extra result sets after MySQL stored procedure queries. - Return descriptive error from set() instead of bare #-1. - Fix objeval() leaking wizard privileges through locatable(). - Report "Already set."/"Already cleared." for no-op @set/@power. - Check VisibleLock (A_LVISIBLE) on exits. - Fix @backup to return early when a dump is in progress. - Ignore client CHARSET REQUEST when server REQUEST is pending. - Strip outer braces from semicolon-separated queued commands. - Fix splice() misalignment with leading/trailing spaces. - Add CS_INTERP to @cpattr so arguments are evaluated. - Fix @cset/header clearing to reset to default [ChannelName]. - Fix squish() with multi-character separators.
# Cosmetic Changes:
- Show named empty folders in @mail/folder listing. - Make channel name lookup case-insensitive. - Allow @flag to rename over an alias for the same flag. - Normalize smart quotes for @listen/^-listen/@filter pattern matching. - Remove UNINSPECTED from default stripped_flags.
# Miscellaneous:
- Decomposed bsd.cpp into focused translation units. - Replaced C-style casts with static_cast/reinterpret_cast. - Replaced ~317 flag/constant #defines with constexpr. - Replaced custom integer types with standard <cstdint> types. - Replaced several internal data structures with STL equivalents. - Modernized mux_string class with Rule of Five and std::vector. - Returned to autoconf/automake build system. - Hardened Schannel TLS: EKU-aware cert selection, PEM support. - Implemented GANL @restart support. - Ported @email SMTP client to GANL event-driven I/O. - Added 141 new smoke tests expanding coverage from 32 to 173 functions. -----BEGIN PGP SIGNATURE-----