Fetching contributors…
Cannot retrieve contributors at this time
434 lines (381 sloc) 39.1 KB
This is the changes file for PennMUSH 1.8.5. 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)
[3] 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
Version 1.8.5 patchlevel 7 Mar 16, 2015
* Bytes received by connections weren't being properly recorded for things like SESSION and recv().
* Fix some highly unlikely crash bugs/memory leaks in atr_tab.c [MG]
* @attribute/delete now deletes all aliases for the deleted attr, too. [MG]
* Help fixes. [MG]
* SOCKSET didn't always send the corret lineendings. [MG]
* unsetq() and @include/clearregs were unpredictable, and hopefully now function more reliably. Reported by spork, Mercutio and others. [MG]
* Remove compile warning when info_slave isn't used. [MG]
* %X now always returns the capitalized version of %x, even when the returned value contains ANSI. [MG]
* Fixed a few niggly bugs in @include, registers() and similar things making too many or too few registers available at the wrong time. From a report by Paige. [MG]
* lit(%) returned %) instead of %. Reported by Ashen-Shugar. [MG]
* PCRE's jit engine causes crashes when passed certain malicious regular expressions. Disable it for all public-facing uses of REs. Reported by Ashen-Shugar. [SW]
* align() would sometimes show extra column separators when columns were merged. [MG]
* @lock/interact was wrongly checked when paging a player with an @pageformat set. Reported by Odin. [MG]
* Channels you had both @chan/gagged and @chan/combined would still show connect messages. Reported by Paige. [MG]
* Fix a memory leak in @dolist/inline when used with @break. From a report by spork. [MG]
* @chan/decompile <hidden channel> by a mortal didn't give an error message. Reported by Paige. [MG]
* It was impossible to remove a thing from a channel which had been restricted so only players could join. Reported by Paige. [MG]
* Players with an @pageformat which eval'd to an empty string wouldn't know they were being paged. Reported by Ashen-Shugar. [MG]
* Fix crash in named q-registers. Reported by Qon@M*U*S*H. [DC]
* Enabling the log_commands config option while a LOG`CMD event was set would cause endless queueing, until the event handler was halted as a runaway object. Reported by spork. [MG]
* Fix a potential overflow problem in the code that computes queue load averages for @ps. [SW]
* @motd/down and @motd/full are actually shown now. [MG]
* Properly negotiate telnet with clients who spit out telnet codes instantly upon connection like MUSHclient. Reported by Mercutio and AND. [MG]
* Improved configure support for NetBSD. [SW]
* Fix a compile error on non-Windows, non-BSD, non-Linux OSes. [SW]
* Improvements to networking code; robustness on errors and portability. [SW]
* Added two new column modifiers to wrap(), x and X, to allow truncation of fields instead of wrapping. Suggested by Qon, spork and others. [MG]
Minor changes:
* @attribute/delete now displays the info for an attribute, as per @attrib <attr>, prior to deleting it. [MG]
* The *div*() and *mod*() math functions now take an unlimited number of args, instead of exactly 2 args. Suggested by Mercutio, patch by Luke.
* A SUSPECT player changing their name to the same thing doesn't trigger an alert. Suggested by Rince. [SW]
* valid(attrvalue, <value>, <name>) checks if &<name> obj=<value> is valid. For @attrib/enum and /limit. [MG]
* Added @flag/decompile and @attribute/decompile, to decompile each table to copy to another game. Suggested by spork. [MG]
* Newly set player passwords are salted to be more resistant to cracking via rainbow tables by somebody with a copy of the database. You still shouldn't be re-using a password for anything important, of course. Existing passwords aren't automatically updated. [SW]
* Added /clearregs to @trigger. Suggested by Volund. [MG]
* @motd with no args now acts like @motd/list, instead of clearing the MotD. Use @motd/clear to clear the current one. Suggested by Bodin. [MG]
* @command can now be used by non-players. From a gripe of Kitai's. [MG]
* Update some configure macros to the latest versions. [SW]
Version 1.8.5 patchlevel 6 Jul 29, 2014
* Removed an old debugging variable to reduce memory usage. Suggested by spork. [MG]
* ssl_slave now gets passed its settings via a pipe, instead of on the command line. [SW]
* Rewritten the telnet handler, to make it more manageable/modifiable, instead of it being a huge bunch of nested switch()es. [MG]
* Update the SFMT random number generator to 1.4.1. [SW]
* Built in and persistant uses of regular expressions are JIT compiled if the host's PCRE version supports it, for faster matching.
* Better support for BSD systems.
* valid() can now test for valid channel names. Suggested by Volund. [MG]
* valid() now takes an optional <target> argument for some categories, to see if <string> is a valid name for <target>. [MG]
* tan(90,d) now reports an error instead of a really big number. Suggested by Peppel. [SW]
* More math functions report errors. [SW]
* Added reglmatch[all][i]() functions, regexp versions of match[all](). [MG]
* isdaylight() now accepts time and timezone arguments. [SW]
* convtime() takes timezones besides just UTC. [SW]
* foreach() is now ansi-aware. Reported by Ashen-Shugar. [MG]
Minor changes:
* @channel/gag no longer persists across a full @shutdown. Suggested by Trinsec. [MG]
* 'give' now gives more informative error messages when you try and give pennies to someone who has the maximum, or take pennies from someone who is broke. [MG]
* The message shown when you need to run 'make update' is now slightly clearer about what to do and why. By Rince.
* Removed some 20 year old Sun OS workaround code. Suggested by Fraibert.
* Slightly less confusing error message for @chan/buffer suggested by Sketch.
* 'HELP ENTRIES' is generated on the fly, and shows the total number of pages. Suggested by [MG] and Trinsec. [SW]
* @success/@osuccess/@asuccess now get the old location of the moving object in %0. Suggested by Riorgan. [SW]
* @mail/review with no args now lists all mail you've sent to everyone. Suggested by Paige. [MG]
* @mail/review now shows the recipient in the message list, instead of the sender. This is slightly more useful, since the person using the command is always the sender. [MG]
* @mail/status now lets you twiddle the 'urgent' status of messages. From a suggestion by Paige. [MG]
* You can now always see a channel if you've been joined to it and can speak on it, even if you don't pass its @clock/see. Suggested by Rince. [MG]
* 'page foo=' now produces an error, instead of paging nothing. Suggested by Paige. [MG]
* 'make localized' now ignores charset when building translation files, which stops it throwing errors unnecessarily. [MG]
* Use a more robust configure check for timezone data files. [SW]
* Added a /spoof switch to @mapsql, to spoof the enactor a la @trigger/spoof. Suggested by Mercutio. [MG]
* Improved error reporting when info_slave or ssl_slave exits unexpectedly. [SW]
* hasflag(<player>, connected) now returns 1 if the caller can see that the player is online, instead of always returning 0 for mortal callers. Most recently suggested by Odin@M*U*S*H. [MG]
* Windows compile fixes by ChaosMageX.
* Fix a crash when expanding the flagset size. Reported by spork. [DC]
* @attribute/access incorrectly cleared an @attribute/limit on the same attr. Reported by Ton Kyrion. [MG]
* Help/translation fixes by spork, Riorgan and others. [MG]
* The 'give', 'take' and 'empty' commands displayed the wrong object names when mogrifiers were used. Reported by Riorgan. [MG]
* Fix crash in ssl_slave when a connection drops in the middle of hostname lookup.
* Crashbug in SQL fixed. Reported by Mercutio. [MG]
* @mapsql/colnames cleared q-registers in the first (colnames) action list queued. Reported by Mercutio. [MG]
* @channel/join would give an 'ambiguous' error, even if you couldn't see the other potentially-matching channels. Reported by Mercutio. [MG]
* Penn negotiated charset as iso-8859-1 (latin1) even if the MUSH was running using a different charset. Reported by Tyler. [MG]
* Better support for mixing IPv4 and IPv6 connections. FreeBSD and NetBSD should not need the --disable-ipv6 option to configure any more. [SW]
* Fixed an obscure buffer-overwrite bug in the channel system. Reported by Volund@M*U*S*H/Roll@Multiverse Crisis MUSH. [MG]
Version 1.8.5 patchlevel 5 Nov 20, 2013
* Added @moniker, to allow colored names. See 'help monikers' for more. Requested by Mikoto Misaka. Idea from [MUX]. [MG]
* After a year of deprecation, @emit/room has been removed as an alias for @lemit. [MG]
* @chan/list now takes /on and /off switches, to filter the channels shown, and a /quiet switch to give a less verbose output. From a suggestion by Fraibert. [MG]
* @trigger now takes a /spoof switch, which preserves the enactor. [MG]
* New @hook/extend, which allows adding new functionality to built-in commands via softcode, while preserving the original command. [MG] [Rhost]
Major changes:
* Regexp $-commands can now used name captures. They can be accessed via r(<name>, args). Suggested by Mercutio. [MG]
* A number of changes have been made to accomodate monikers. Notably, a lot of calls to the Name() macro now use the AName() macro. See the HACKING.185 file for more info. [MG]
* wild_match_case_r(), regexp_match_case_r(), pe_regs_set_rx_context() and pe_regs_set_rx_context_ansi() now take an extra argument, a PE_REGS* flag to determine how matching subpatterns are stored in pe_regs. [MG]
* add_flag_generic() now returns an enum, and takes an additional final pointer arg, where the new flag will be stored. add_flag() and add_power() pass this pointer as NULL. [MG]
* Improve heuristics used for resizing the flagcache hash table. [DC]
* Update hashing functions used by various hash table implementations. [DC]
* Commands which take multiple right-hand-side arguments could only have 8191-length arguments, instead of the usual 8192. Reported by Jules. [MG]
* It was possible to return non-printable characters from an SQL database, which could cause undefined weirdness. Reported by spork. [MG]
* Many things which listed attributes from a parent, like lattrp() or examine/parent, didn't respect no_inherit fully. [MG]
* Minor crashbug in @boot fixed. Reported by thomaswdyoung. [MG]
* @grep now ignores ansi when looking for a value. Suggested by Mouvar. [MG]
* colors() now complains when the color is 'n', 'd' or 'D', since they have no actual color value. Reported by spork. [MG]
* Buffer overflow bug in ansi() fixed. Reported by tsen. [MG]
* Flag corruption issue due to incorrect flagset refcounts fixed. [DC]
* When a player was nuked, any @mail they had filed into another folder would be retained, and visible to a new player created later with the same dbref. Reported by Valkyrie. [MG]
* Crashbug in @message. Reported by Yuriko. [MG]
* linsert(,1,foo) now returns "foo", like it always used to, instead of returning an empty list. [MG]
* SSL connections which had not yet logged into a player weren't always fully cleaned up. Patch by Fraibert.
* channels() could include an extra delimiter in some cases. Reported by Mouvar. [MG]
* Translations weren't working in the chat system. Reported by Riorgan. [MG]
Minor changes:
* strreplace() now works harder to keep existing ANSI intact, when you replace an un-ansi'd string into an ansi'd one. [MG]
* colors(...,xterm256) can now return colors 0 to 15, to avoid confusion when converting xterm -> hex -> xterm. Reported by Trinsec. [MG]
* New substitution, %k, returns the enactor's monikered name. [MUX] [MG]
* Help fixes and tweaks. [MG]
* PennMUSH can now read MUX-style passwords, to make moving dbs from MUX to Penn less painful. Requested by Muse. [MG]
* Commands are no longer queued for HALTed non-players. (Since they'd be dropped from the queue anyway, rather than being run, it saves us jumping through a series of hoops for no good reason.) From a report by Muse and Ashen-Shugar. [MG]
* The connect-screen WHO now shows moniker'd (ansi'd) names, if so configured. Requested by Trinsec. [MG]
* @mapsql and mapsql()'s attributes now receives named arguments. That is, '@mapsql me/foo=SELECT bar FROM table' receives the value of the 'bar' field as both %1 and [r(bar,args)]. [MG]
* Wizards can now give players names with spaces, even when the player_name_spaces option is off. Suggested by Paige. [MG]
* Removed the last traces of the 'events' help-style command. Noone ever uses it, and we removed the helpfiles for it ages ago when the Event System was added, anyway. [MG]
* Updated the README for adding help-style commands, with clearer examples. Requested by AnnePearn. [MG]
* Per-player mail limits can be set with @mailquota, to override the mail_limit @config option selectively. Suggested by Ricochet. [MG]
* Attempting to create a character (at the login screen or via @pcreate) is now specific about whether the name is already in use or invalid, rather than leaving you guessing. [MG]
* Likewise, when failing to connect, the login screen tells you whether there is no such player, or whether the password is wrong. [MG]
* beep() now returns out of range, instead of permission denied, when given an arg which is not between 1 and 5. [MG]
* When an evaluation @search hits the CPU limit, it will now tell you which object it failed on, to make it easier for you to continue with a partial search. [MG]
* Players are now warned when setting an unanchored regexp $-command, as this is often an oversight which is problematic to track down later. [MG]
* More effort now goes into checking whether an attribute contains a valid $-command when it's set, to avoid doing so unnecessarily during command matching; the latter happens a lot more often. [MG]
* delete(), replace() and insert() have been renamed to strdelete(), lreplace() and linsert(), respectively, for clarity and conformity. The original names remain as aliases. [MG]
* moniker(<object>) returns an object's monikered name. [MUX] [MG]
* mapsql() only stored 10 columns, instead of the advertised 30. Reported by Mercutio. [MG]
* fn() now takes an <obj>/ prefix to its first arg, to evaluate the built-in function as <obj>. Useful when overriding side-effect functions. [MG]
* r() now takes two arguments, allowing it to return the stack (%0-%9), itext() and stext() values, as well as q-registers(). [MG]
* Mortals can now use playermem() and objmem() on their own objects. Suggested by Paige. [MG]
* ljust() and rjust() now take an optional <trunc?> arg which, if true, causes strings already longer than <len> to be truncated. Suggested by many people over the years, most recently Rince and Quasar. [MG]
Version 1.8.5 patchlevel 4 Mar 17, 2013
Major changes:
* The player_name_len @config option is now the maximum length of a player name, instead of the maximum length+1, because doing it that way was rather silly. You may wish to lower yours by 1 now to compensate. Suggested by Mercutio. [MG]
* Having unescaped commas in the final arg of a function call is now deprecated, and will eventually become illegal. Any existing code which does this will spam you with a warning until you change it. [MG]
* The stack (%0-%9) can now hold up to 30 arguments, with the additional 20 available through v(10) to v(29). $-commands, @functions and many built-in commands and functions (such as ufun(), @mapsql, etc) now make use of these args. [MG] [MUX] [Rhost]
* @dolist now accepts /inline and related switches, like @switch does. Suggested by Reaver. [MG]
* @teleport/list teleports a list of objects to a single destination. Suggested by Nyssa, [MUX]. [MG]
* @sockset and SOCKSET can now show/set PROMPT_NEWLINES. [MG]
* @halt now takes a /noeval switch, and will always strip curly braces when run /noeval. [MG]
* Added @mail/cstats, which shows the mail stats you see on connection. Patch by spork.
* Added a new switch for @command/add, /rsnoparse, which stops the rightside arguments (after the '=') from being evaluated. Also clarified the help to show that /noparse only affects leftside args. Suggested by spork. [MG]
* WHO, DOING and SESSION now take wildcard patterns for names, as well as a prefix. [MG]
* New option for @sockset/SOCKSET, 'stripaccents', to strip accents for a single connection as per the NOACCENTS flag. [MG]
* lpids()' second argument has been altered slightly, to allow you to list the pids for one specific object only. Suggested by spork. [MG]
* The "player" field in pidinfo() has been renamed to "executor", for clarity. "player" still works for backwards compatability. From a request by tsen. [MG]
* stringsecs() can now handle the additional time periods that etime() can return (years, weeks). [MG]
* colors(..., name) is much more efficient. [SW]
* alias(object,) clears object's @alias. Suggested by spork. [MG]
* v(<integer>) is no longer the same as get(me/<integer>). Instead, it always the <integer>th stack entry. [MG] [Rhost] [MUX]
* It's now documented that replace() can alter multiple words at once. Reported by Jules. [MG]
* Some terminfo() information can now be retrieved by mortals on other players' connections. Suggested by spork. [MG]
* Added a new option to colors() to include ansi underline, invert and flash from the input in the output. [MG]
* locate() takes a new flag, 's', which will only return objects controlled by the looker. Suggested by spork. [MG]
* @@() now takes a huge number of arguments, instead of ignoring commas in the final arg, to stop it giving the 'unescaped comma' warning. Requested by everyone. [MG]
* terminfo() now tells you whether a connection is having accents stripped, either via NOACCENTS or @sockset. [MG]
Minor changes:
* ansi() now accepts a space-separated list of color codes, with later groups overriding earlier ones. Allows you to specify basic ANSI codes after XTERM color codes. Suggested by spork, [Rhost]. [MG]
* Compiler warning fixed by ChaosMageX.
* Help fixes by many, including spork, Wiggles and Bodin. [MG]
* The tables mapping color names and RGB values are now generated by a script in utils/. [SW]
* Converting from named colors to the nearest xterm or ansi equivalent is much more efficient. [SW]
* Converting from extended colors to ansi colors is smarter. Based on work by Padraic. [SW]
* Email registration no longer pretends to work with really!old!addresses. [SW]
* Better error reporting in logs and event hooks on failed email registration. Suggested by Padriac. [SW]
* @decompile <exit> now reports the exit's source room. Suggested by telandra2. [MG]
* You now only need to control an object to change its zone, or to use it as a zone. Previously, ownership was required. Suggested by Cheetah. [MG]
* The hardcode now always ANSIs a string (such as an object name or help topic), even if the enactor isn't set ANSI. Fixes puppets, etc. [MG]
* When clients negotiate charset via telnet, US-ASCII and ASCII are now presented as options. If the client picks one of them, that connection will have accents stripped (as per the NOACCENTS flag). [MG]
* New attribute flag, quiet, suppresses the usual confirmation message when an attribute's value or flags are changed. Suggested by Trinsec, bribed by qa'toq. [MG]
* %c contained the evaluated input (the same as %u), instead of the unevaluated input. Reported by Ingwaz. [MG]
* repeat() could write partial ANSI tags, causing buffer overflows. From a report by Ashen-Shugar. [MG]
* dbcks didn't reset corrupt exit's source room. Patch by Padriac.
* lmath(and,) returned 1 instead of 0. Reported by Padriac. [SW].
* Mixing old-style ansi colors and xterm colors was broken. [MG]
* Players who couldn't see xterm colors would sometimes get a highlighted foreground color by mistake. [MG]
* colors(<old-style-ansi>, hex) and colors(*, 16color) were broken. Reported by Kimiko. [MG]
* ANSI highlight would sometimes bleed when xterm colors were downgraded to the basic 16-color ANSI palette. Reported by Kimiko. [MG]
* @entrances didn't correctly report the source of an exit. Reported by spork. [MG]
* Fix a crashbug in @command/delete. [MG]
* Fix database corruption on @flag/add [SW]
* Attempting to @mail someone without permission failed silently. Reported by Kimiko. [MG]
* Players connecting dark with 'cd' were hidden even if they shouldn't have been. Patch by thomaswdyoung.
* Fixed a bug in colors(*,16color) with no ansi. [MG]
* The Builder() macro, which is unused in Penn but exists for backwards compatability, used command_check_byname(), which spammed people who could not build with "Permission denied." errors. It is now spam-free. By spork.
Version 1.8.5 patchlevel 3 Aug 23, 2012
* Fix a crash bug in new color code. Discovered by ChaosMageX, fixed by Intrevis and [SW].
* name() with no arguments is now an error. It should always have been, but previously returned nothing for backwards compatability. If you still have code that relies on that behaviour, you are extremely lazy and should be ashamed of yourself. [MG]
Version 1.8.5 patchlevel 2 Aug 18, 2012
* render_string has been modified to work with multiple output formatters, so it can display the appropriate color syntax for the client. [GM]
* Tweak the networking code to try to reduce output latency/queue size. [SW]
Major changes:
* 256 Color support. Using 24 bit internally for representation and downscaling to the client's possible output values. Use SOCKSET colorstyle=xterm256 to see 256 color support, with ansi(+colorname/+colorname,...) or ansi(#hexcode/#hexcode) for extended color support, or @set me=xterm256. [GM] [MG]
* New SOCKSET socket command for changing socket options. Replaces the @sockset command added in p1 for mortals, and can be used at the login screen. Suggested by Sketch. [MG]
* @sockset is now @sockset <desc>[=<opt>,<value>[,...]], to query current options or set options for any descriptor. [MG]
* The old @doing command has now been removed, and replaced with the normal standard-attribute command (@doing <object>[=<message>]). [MG]
* look now takes an /opaque switch, which hides contents listings. Suggested by Wiggles. [MG]
* @break and @assert now take a /queued switch, which causes the new <action list> to be queued instead of run immediately, and an /inline switch which gives default behaviour. For Rhost compatability. [MG]
* Two completely separate, but equally stupid, bugs made @nsprompt show nospoof info just like @prompt. [MG]
* @open, open(), @dig, dig() accept specific garbage dbrefs to use for the exits they make. [SW]
* colors() returns a list of all known color names known by PennMUSH, and info about a particular color. [GM]
* valid() has two new categories, for validating color names and color code sequences for ansi(). [MG]
* etime() formats elapsed times using the same rules as in WHO. [SW]
Minor changes:
* The meaning of the COLOR flag has been restored. ANSI flag once again means only highlight is supported, while COLOR means all ANSI 8 colors (8*2 including highlight), flash, invert, etc are supported. [GM]
* Charset negotiation didn't work on MSVC, and now forces iso-8859-1 when compiled that way instead. Reported by Daniel Powell. [MG]
* @config/set and @config/save now log to the wizard_log. Suggested by Israphel. [MG]
* The ICLOC attribute, which was set on newly created players but never used in any way, is no longer set. Suggested by Paige. [MG]
* @destroy'ing, @undestroy'ing, and the actual destruction of players is now logged. Suggested by Padraic. [MG]
* Translation fixes by Stoko.
* round(4.5,0) behaved differently on Penn than it did on MUX, and inconsistantly with rounding to more places on Penn. [SW]
* The 'On for' and 'Idle' time fields in WHO are smarter and won't overflow their space. Suggested by Ari and Paige. [SW]
* Add a few new test cases. Requested by Sketch. [MG]
* It's now possible to clear/reset a prompt with @prompt <player>. [MG]
* New Pick_Dbref @power for specifying specific garbage dbrefs to use in @create and friends. [SW]
* Reordered some checks in tz.c to compile on more distributions. Problem reported by Zen@M*U*SH. [MG]
* Setting an exit Transparent didn't cause its destination's desc to get shown as it should have. [MG]
* It became impossible in p1 to give a delimiter to wrap() without also specifying a first line width. wrap(%0,%1,,%2) will now use the normal <width> arg for first line width, the same as wrap(%0,%1) does. Reported by Kitai. [MG]
* Free PCRE-allocated memory with pcre_free() instead of free(). Reported by ChaosMageX@M*U*S*H. [DC]
* Fix some potential memory leaks in timezone file reading code. [SW]
* Off-by-one error in the helpfile index code. [MG]
* Improve docmentation of ip_addr config option. [SW]
* Fix an edge case in ansi_string_replace that could cause an overflow. Reported by Ton Kyrion@M*U*S*H. [DC]
* Fix a memory leak in LOGOUT. [SW]
Version 1.8.5 patchlevel 1 May 15, 2012
* The local_data_clone() function now receives an additional argument, which specifies whether @clone/preserve was used. You'll need to either update the definition of local_data_clone in src/local.c from the one in src/local.dst or, if you've made no changes to src/local.c, just remove src/local.c and it'll be rebuilt automatically. [MG]
* The orator variable (defined in game.c), for tracking the last object which made sound, has been deprecated, and may soon be removed; don't use it. Just pass the correct dbrefs to the notify*() functions if something talks. [MG]
* Several of the notify_*() family of functions, and the do_*emit() functions now take an extra arg, for properly tracking both the executor and the speaker when spoofing (@pemit/spoof, etc). [MG]
* @emit/room and @doing/header have been deprecated. Use @lemit and @poll, respectively, instead. [MG]
Major changes:
* Built-in attributes are now stored in the database. This means that @attribute no longer needs to be in an @startup, as it will persist across reboots and shutdowns. The attribute_alias option in .cnf files is now deprecated as a result. [MG]
* The database now uses a new versioning scheme (alongside the old one, for backwards compatability), using incrementing integers instead of bitwise flags. Ideas by [GM] and Covenent. [MG]
Minor changes:
* Logged messages now have events in the LOG tree. Suggested by Padraic. [SW]
* Objects belonging to destroyed players now get chowned to a configurable player (probate_judge in mush.cnf) instead of God. [SW]
* Commands involving movement now check the enactor is a player/thing, instead of just relying on the command's restriction. [MG]
* @switch, switch(), @[in]filter and attribute @locks (foo:bar) now do lte/gte wildcard matches on <=foo and >=foo patterns. Inspired by Wiggles. [MG]
* New channel mogrifier, MOGRIFY`NOBUFFER, can be used to exclude certain @chats from the channel's recall buffer. Suggested by Wiggles. [MG]
* Nospoof players now see the nospoof header on @cemits, making @nscemit actually have some use. Report by rimnar@M*U*S*H. [MG]
* The login screen WHO can now be overridden using the who_file config option, which can be set as the path to a textfile or an obj/attr, like connect_file et al. From suggestions by Paige, Trelane and Mercutio. [MG]
* Talek's chunk attribute storage system, which pages attribute contents to and from disk as needed, is now optional by popular request. Controlled via options.h [SW]
* New lock, @lock/dropin, controls who can drop objects into that location. [SW]
* @ps now shows a running average of the number of queue entries executed per second. [SW]
* Try to discriminate between ssl_slave and other sources of connections to the local unix socket. [SW]
* Repeating the PUEBOCLIENT socket command now causes PennMUSH to re-send the 'start parsing HTML' codes, for when Pueblo-enabled clients hiccough and show raw HTML. [MG]
* The DESTINATION attribute for variable exits now receives the exit name/alias typed by the player as %0 when moving, to allow different destinations based on the exit alias used to move. It also has access to %c, %u, and other %-subs available when moving, Suggested by Javelin and [GM]. [MG]
* Translation updates and messages fixes by Stoko.
* Help fixes by Todd@M*U*S*H, Steve Varley, Wiggles and others. [MG]
* @message now takes a /silent and /noisy switch, the same as @pemit, with the default controlled by the silent_pemit @config option. message() is now silent, like pemit(). Suggested by Padraic. [MG]
* The MUSH can now negotiate its character set with clients. There's still only one charset available, but now the client can know exactly what it's receiving. Suggested by Sketch. [MG] Make sure your MUSH is running in the right charset; see for more information.
* Additional test suite tests for setunion/setdiff/setinter() by Sketch.
* When regexp matching an ansi'd string, named captures weren't set at all. For non-ansi'd strings, non-named (numeric) captures were sometimes overwritten with the values of named captures. Reported by Sketch. [MG]
* The configure script incorrectly reported that ssl_slave was unavailable when told to disable it via --disable-ssl_slave. Reported by Cheetah. [MG]
* Sound from an AUDIBLE wagon object used to propagate into other wagon objects in the same location with an @listen of *. It now does so again. Reported by Xeero and Padraic. [MG]
* Sound will now also propagate through two @listens, instead of just one, as it used to. Reported by Mac@M*U*S*H. [MG]
* Loading a reboot db is more robust. Inspired by Padraic. [SW]
* scan() couldn't be used by rooms. Reported by Padraic. [MG]
* Possible crashbug in the queue triggered by events reported by Rince@Wing Commander: New Horizon. [MG]
* @list attribute would show duplicates for aliases. [MG]
* insert(,foo,-1) no longer appends an extra delimiter. [MG]
* @function/clone didn't work correctly, and could potentially cause a crash. [MG]
* @clone didn't respect Many_Attribs. [MG]
* Making a connection to a ssl port on a game not using ssl_slave could hang the mush. Reported by Minion. [SW]
* @cemit and friends would notify you twice if you cemited to a channel you weren't on. Reported by spork. [MG]
* regrep() could try to read uninitialized memory. [SW]
* Fix a possible DOS from a local attacker. [SW]
* Fix a couple of possible memory leaks. [MG]
* ordinal(12) now returns twelfth, not twelveth. Patch by Minion.
* trunc() now ignores ANSI. Reported by Sketch. [MG]
* Evaluation @locks didn't receive %0-%9 args, even when they should. Reported by Zen@M*U*S*H. [MG]
* @message/spoof now tracks both the object using @message and the object being spoofed, allowing for more accurate priv checks when evaluating the format messages. Reported by Mercutio. [MG]
* When spoofing (@pemit/spoof, etc), any errors for failed locks or bad object names incorrectly went to the object being spoofed, not the object doing the spoofing. [MG]
* @lemit incorrectly ignored an = and anything after it in its arg. [MG]
* wrap(%0,strlen(%0)) would incorrectly wrap the string onto two lines. Reported by Padraic. [MG]
* @edit/regexp[/all][/nocase], command version of regedit[all][i](). Suggested by Minion. [MG]
* The @sql command no longer uses UNIMPLEMENTED_COMMAND when SQL support is not compiled into the MUSH. Instead, it just reports that no SQL db is available, like @mapsql does. [MG]
* @slave, for restarting the info_slave and ssl_slave daemons from within the game. [SW]
* @sockset <option>=<value>, for setting options on your descriptor.
* version() now reports svn revision/date where available. Patch by Padraic.
* ldelete(), replace(), elements() and extract() now accept negative position arguments, to count backwards from the end of the list, similar to insert(). Suggested by Minion. [MG]
* replace() now takes an optional output separator. [MG]
* regmatch() now returns an error for invalid regexps, whether you're storing subpattern matches or not. Reported by Sketch. [MG]
* time(), timefmt() and convsecs() can use symbolic timezones (US/Pacific, EST, etc.) if the host server has a time zone database installed. [SW]
* playermem() and objmem() are smarter about calculating space being used by atributes [SW]
* rnum() has been deprecated in favor of locate(). [SW]
* step() no longer pads the final call with empty arguments, allowing you to use %+ or registers() to differentiate empty and missing args. [MG]
* e() and exp() are now the same function internally, with e(), exp() and exp(1) all being equivilent. Suggested by Ari. [MG]
* When wrap() hyphenates a word, the hyphen will now share the ANSI of the first character of the newline. [MG]
Version 1.8.5 patchlevel 0 Feb 12, 2012
Major changes:
* The PCRE library is now required to build Penn, instead of falling back to an old, buggy version formerly bundled with the MUSH. [SW] Daniko assisted greatly with Windows changes and documentation.
* The OpenSSL library is now required to build Penn. Again, Daniko has provided instructions for installing on Windows. [SW]
* A new command prefix, "}", enables debug for a single execution of the command - }think foo, }+who, etc. See 'help }' for more info. Suggested by Wiggles and [GM]. [MG]
Minor changes:
* Added a new event, OBJECT`FLAG, triggered when a flag/power with the "event" restriction is set or cleared. Suggested by [SW]. [MG]
* Expanded help on lock types and @powers. [MG]
* @startups are now processed in db order (#0, #1, etc) on reboot instead of giving priority to player objects. [MG]
* @startups (and local_startup() in local.c) are now triggered slightly later, ensuring that the db is fully loaded, and that the connected player list is loaded on @shutdown/reboot. Suggested by Padraic. [MG]
* Switch names that are defined but not used by any commands are warned about on startup, and several unused ones have been removed from the master list. [SW]
* Tweak utils/ for the above change and to remove references to generating the obsolete patches.h. [SW]
* Tweak the parameters of the skip list used to store memcheck counts to save some memory. [SW]
* Bring the scheme scripts in utils up to date with current versions of chicken scheme (The implementation of the language they're written for.) [SW]
* The test harness code strips trailing whitespace before attempting to match against expected results, making it easier to use bounded regexps. [SW]
* @destination (for variable exits) is now a standard attribute, and has a helpfile. [MG]
* Sound is now propagated through audible variable exits, and exits @linked to 'home'. Suggested by Mercutio. [SW]
* The internal QUEUE attribute is no longer used to track the number of action lists an object has queued; the objdata system is used instead. [SW]
* isobjid() now requires a full object id (with :ctime), and will return 0 for simple dbrefs, or objids of destroyed/invalid objects. isdbref() still matches both dbrefs and objids. Suggested by Covenent. [MG]
* @entrances and entrances() now use the same internal routines as @search, and have similar (and saner) privs. From a suggestion by Sketch. [MG]
* Connection messages that are evaluated from an attribute instead of read from a file get the dbref of the connected player as %1, as long as they're ones shown post-connection (motd_file, etc.) [SW]
* Passwords are, thanks to OpenSSL digest routines, now stored in a less error prone, more secure, flexible and extendable format. Existing player passwords will be upgraded automatically on login. [SW]
* New script in utils/ for manipulating player passwords in an offline database. Useful if you forget God's password. [SW]
* The my_vsnprintf function in the hardcode has been renamed to mush_vsnprintf to avoid a conflict with MySQL. Reported by Balerion @ Blood of Dragons. [MG]
* The enactor (%#) for the PLAYER`DISCONNECT event is now more useful, instead of always being set to the dbref of the player disconnecting (%0). Suggested by Padraic. [MG]
* The SOCKET`LOGINFAIL event now gets passed the name that was entered as %5 when no matching player is found. Suggested by Daniel Powell. [MG]
* Added @mail/review for reading mail you've sent, and @mail/retract for deleting unread mail that you sent. Idea from MUX. Patch by Minion.
* @hook/list now shows error messages if you don't have permission to use it, or if a command has no hooks, instead of failing silently. Suggested by Padraic. [MG]
* Wizards can now @pcreate players with restricted names, as well as being able to rename existing players to forbidden names. Suggested by Nymeria @ Blood of Dragons. [MG]
* Functions that take a sort type argument now accept 'mtime' for sorting based on object's modification time. Patch by Minion.
* New registers() function, like listq() but returns all kinds of registers (q-registers, %0-%9 args, iter/switch context, regexp captures). Also takes an output separator arg. Suggested by Wiggles. [MG]
* digest(list) returns all message digest algorithms the server supports. [SW]
* sha0() has been deprecated in favor of digest(). [SW]
* lit() didn't properly handle '\'s. Reported by Wiggles. [MG]
* listq() incorrectly returned all registers (including %0-%9, %i0, etc), not just %q-registers. Reported by Wiggles. [MG]
* The mud_url code didn't always work correctly in Firefox because http headers weren't sent. [MG]
* %0 and %1 arguments weren't properly passed through verb attributes after a change in p8. Reported by Padraic. [MG]
* Fix really stupid copy-and-paste error in magic sorts on strings with ANSI, which broke setinter() and friends. Reported by Minion. [MG]
* Help fixes by Wiggles, Mouvar and others. [MG]
* Memory leak in ldelete() fixed. [MG]
* Fix a crashbug reported by Minion. [MG]
* Sorting functions now ignore ANSI when sorting a string as a number or dbref. From report by Mouvar. [MG]
* strreplace() was broken for overly long length arguments. Reported by Ashen-Shugar. [SW]
* Compile errors on Windows with OpenSSL. Reported by Daniko.
* @uptime could report negative times for the first dump, purge, etc after a game was started. Reported by Cooee. [MG]
* override/inplace hooks from .cnf files didn't work correctly. [MG]
* The portmsg announcer daemon was broken. Reported by Minion. [SW]
* A change in p8 broke the sending of the Pueblo hello string in some cases. Reported by Mercutio. [MG]
* Fix crash bug in @sitelock/remove [SW]
* ssl_slave would drop connections if it couldn't resolve a valid hostname for the connecting IP address. [SW]
* Non-matching regexp captures ($0, $<foo>, etc) sometimes had the value of the previous matching capture. From a report by Sketch. [MG]