2.2Muck7.21 This update resolves a segmentation fault that happens with the new password algorithm, when built with some compilers. 2.2Muck7.20 Terminal Size Introspection --------------------------- The MUCK is now able to query the terminal width and height using the telnet protocol, via MPI. MUF programs of MUCKER level 3 or higher may also define these values. Existing MPI functions for formatting messages now take advantage of this information. {height} - gets the current descriptor's screen height, with an optional default. {width} - gets the current descriptor's screen width, with an optional default. {center} - now uses the detected screen width before defaulting to 78. {left} - now uses the detected screen width before defaulting to 78. {right} - now uses the detected screen width before defaulting to 78. HEIGHT - returns the detected screen height for the given descriptor. SETHEIGHT - sets the detected screen height for the given descriptor. SETWIDTH - sets the detected screen width for the given descriptor. WIDTH - returns the detected screen width for the given descriptor. Secure Password Hash Storage ---------------------------- Player password hashes now can be stored using OpenSSL algorithms, with a fallback to the previous. Using the previous algorithm is currently a @tune-able option, set to true by default. legacy_password_hash - use the previous MD5-based storage for password hashes Determining Object Flags ------------------------ Additional support has been added for checking for the status of single flags. {flag?} - equivalent to MUF's FLAG? FLAG? - now recognizes BOUND, HIDE, SETUID, and XPRESS as aliases. Expanded Functionality ---------------------- Some features have been extended to improve utility. NEWROOM - now can use a #-1 parent to search the environment for ABODE rooms. STATS - now allows programs below MUCKER level 3 to view the player's stats. STATS_ARRAY - now allows programs below MUCKER level 3 to view the player's stats. @set - now allows Wizards set GUEST to un-GUEST themselves. MUF errors - now include the program name and dbref when reporting a compile error. Consistent Logic ---------------- Some pieces of functionality have been made more consistent. CONTENTS_ARRAY - now returns a partial list for MUCKER level 1, like CONTENTS. ENTRANCES_ARRAY - now requires MUCKER level 3, like NEXTENTRANCE. RMATCH - now strips ANSI, like MATCH. create_fail_mesg - removed, as the player creation process now handles messaging. Starter Database Fixes ---------------------- Some programs included in starterdb have been adjusted for proper usage. cmd-lsedit - no longer crashes when referencing a line number before the first. cmd-page - now has MUCKER level 4 permissions. cmd-RIDE - now includes the expected action messages. cmd-watchfor - no longer crashes when reading a stale dbref. 2.2Muck7.10 New features ------------ Emails may be sent via the new level 4 SMTP_SEND MUF primitive. - see the file README_SMTP.md for details. Docker is now available as a distribution option - see the file README_DOCKER.md for details. The message presented on the welcome screen can now be parsed for MPI. MUF math operations now respect the IEEE standard for INF and NAN by default. @mpitops and @muftops have been unified into the command @tops. CON* MUF primitives have evolved into in-server defines. - note that older "connection ordering" logic may need to be rewritten.   New @tunes ---------- ieee_bounds_handling – use IEEE standard for INF and NAN. Defaults to yes. smtp_auth_type - SMTP authentication type. Defaults to 3 (login). smtp_from_email - SMTP "from" email. Defaults to "noreply@yourmuck.com". smtp_from_name - SMTP "from" name. Defaults to "Your MUCK". smtp_no_verify_cert - Don't validate server certs for SMTP. Defaults to no. smtp_password - SMTP password smtp_port - SMTP port smtp_server - SMTP server host name smtp_ssl_type - SMTP SSL type. Defaults to 2 (none). smtp_user - SMTP username Removed @tunes -------------- verbose_clone - @clone is now never verbose. verbose_examine - examine is now alwats verbose. Other changes ------------- "!WHO” (the command override) is no longer recognized on the welcome screen. "WHO” no longer has a special function in MUF READs. Log messages for player creation and connection are now more detailed. @clone and COPYOBJ now only copy hidden properties in Wizard contexts. Manual @dumps now report a completion message to the requesting player. Listener documentation has evolved into the general 'man propqueues'. 2.2Muck7.00 New command Description -------------------------------------------------------------------------------------------------------------------- @linklock Prevents players from linking to the object, if not passed @ownlock Enables bypassing controller permissions for the object @readlock Enables bypassing of non-MUF read permissions for the object @reconfiguressl (W-only) Attempts to reread SSL certificate files and reset SSL options from @tune settings @register Manages object registrations help (connect screen) Outputs the file specified by @tune file_connection_help uptime Displays the amount of time the server has been running Changed command Description -------------------------------------------------------------------------------------------------------------------- @clone Can now match by regname @credits Now outputs the file specified by @tune file_credits @examine Can now match by dbref @find No longer lists garbage objects @list Now includes options to control line number display @mcpprogram Can now match by regname @program Can now match by regname @toad Now removes all flags from the victim and assigns their macros to the recipient @tune Can now reset sysparms to default, show descriptions, and match by regname @version Now includes a second line listing compile-time options New MPI function Description -------------------------------------------------------------------------------------------------------------------- {descr} Returns the descriptor number that invoked the MPI {sysparm} Returns the value of the given system parameter for authorized players {tab} Returns a tab character, regardless of @tune tab_input_replaced_with_space Changed MPI function Description -------------------------------------------------------------------------------------------------------------------- {date} Now aborts when the date value cannot be determined {ltimestr} Can now approximate years and months {testlock} Now requires its "who" value to be a player or a thing {time} Now aborts when the time value cannot be determined New MUF defines / aliases Description -------------------------------------------------------------------------------------------------------------------- ^ Alias for BITXOR & Alias for BITAND ** Alias for POW | Alias for BITOR << Alias for BITSHIFT CASE Define for: BEGIN DUP DBCMP Define for: = DEFAULT Define for: POP 1 IF END Define for: BREAK THEN DUP ENDCASE Define for: POP POP 1 UNTIL NAME-OK? Define for: "exit" EXT-NAME-OK? PNAME-OK? Define for: "player" EXT-NAME-OK? SETOECHO Define for: "_/oecho" SWAP SETPROP SETPECHO Define for: "_/pecho" SWAP SETPROP WHEN Define for: IF POP New MUF directives and tokens Description -------------------------------------------------------------------------------------------------------------------- $DOCCMD Populates the "_docs" property of the program __PROG__ Replaced by the dbref of the program in $DOCCMD and $PUBDEF directives New MUF primitives Signature Description -------------------------------------------------------------------------------------------------------------------- != ( ? ? -- b ) Determines if two stack items are not equal ?DUP ( x -- x x | x ) Duplicates the top stack item if it does not resolve to false -ROT ( x y z -- z x y ) Rotates the top three stack items, in reverse ARRAY_DEFAULT_PINNING ( b -- ) Sets whether future arrays created in this process will be pinned ARRAY_FILTER_LOCK ( a l -- a' ) Removes dbrefs from array that do not pass the given lock ARRAY_NOTIFY_SECURE ( a1 a2 a3 -- ) For dbrefs in a3, notify a2/a1 for secure/nonsecure descriptors ARRAY_PIN ( a -- a' ) Pins the given array ARRAY_UNPIN ( a -- a' ) Unpins the given array CMD ( -- s ) Returns the command the user invoked the program with DEEP_COPY ( x -- x x ) Duplicates the top stack item, deep copying arrays DUMP ( -- b ) Requests a database dump and generates an event if successful ENTRANCES_ARRAY ( d -- a ) Returns a list array that contains objects linked to d FORCEDBY ( -- d ) Returns the dbref of the most recent object forcing the code to run FORCEDBY_ARRAY ( -- a ) Returns an array of all objects forcing this code to run FULLDEPTH ( -- i ) Returns the number of items currently on the stack MD5HASH ( s -- s' ) Calculates the MD5 hash of the given string NIP ( x y -- y ) Pops the second item off the stack TUCK ( x y -- y x y ) Duplicates y and places it under x NOTIFY_NOLISTEN ( d s -- ) Tells player a message without triggering listener queues NOTIFY_SECURE ( d s s -- ) Notifies separate strings for secure and nonsecure descriptors PARSEMPI ( d s s i -- s ) Returns the output of the MPI parser with the given parameters PARSEMPIBLESSED ( d s s i -- s ) Returns the output of blessed execution of the MPI parser PNAME_HISTORY ( d -- a ) Returns a dictionary representing the history of d's name changes POSE-SEPARATOR? ( s -- b ) Determines if the string could be used as a pose without a space PROP-NAME-OK? ( s -- b ) Determines if the string is an acceptable property name READ_WANTS_NO_BLANKS ( -- ) Turns off READ_WANTS_BLANKS setting REGSPLIT ( s s i -- a ) Splits the text by the given regular expression REGSPLIT_NOEMPTY ( s s i -- a ) Splits the text by the given regex, with no empty pieces returned SECURE_SYSVARS ( -- ) Resets the variables "me", "loc", "trigger", and "command" SHALLOW_COPY ( x -- x x ) Duplicates the top stack item, shallow copying arrays STATS_ARRAY ( d -- a ) Returns an array of the number of objects (by category) owned by d Changed MUF primitives Description -------------------------------------------------------------------------------------------------------------------- CHECKARGS Now recognizes dictionary (x) and array (Y/y) types DEPTH Now returns the number of unlocked items on the stack INTOSTR Now only works with integers, floats, dbrefs, and variables MLEVEL Now returns the program's effective MUCKER level if the argument is #-1 SYSPARM_ARRAY Returned dictionary now includes "readmlev", "writemlev", "active" and "default" keys TOADPLAYER Now exists regardless of compile-time options New @tune Description Default -------------------------------------------------------------------------------------------------------------------- autolink_actions Automatically link actions to NIL no consistent_lock_source Maintain trigger as lock source in TESTLOCK yes cmd_only_overrides Disable all built-in commands except wizard !overrides no description_default Default description "You see nothing special." file_connection_help 'help' before login "data/connect-help.txt" file_credits Acknowledgements "data/credits.txt" file_editor_help Editor help "data/edit-help.txt" file_help 'help' main content "data/help.txt" file_help_dir 'help' topic directory "data/help" file_info_dir 'info' topic directory "data/info/" file_log_cmd_times Command times "logs/cmd-times" file_log_commands Player commands "logs/commands" file_log_gripes Player gripes "logs/gripes" file_log_malloc Memory allocations "logs/malloc" file_log_muf_errors MUF compile errors and warnings "logs/muf-errors" file_log_programs Text of changed programs "logs/programs" file_log_sanfix Database fixes "logs/sanfix" file_log_sanity Database corruption and errors "logs/sanity" file_log_status System errors and stats "logs/status" file_log_stderr Server error redirect "logs/fbmuck.err" file_log_stdout Server output redirect "logs/fbmuck" file_log_user MUF-writable messages "logs/user" file_man 'man' main content "data/man.txt" file_man_dir 'man' topic directory "data/man" file_motd Message of the day "data/motd.txt" file_mpihelp 'mpi' main content "data/mpihelp.txt" file_mpihelp_dir 'mpi' topic directory "data/mpihelp" file_news 'news' main content "data/news.txt" file_news_dir 'news' topic directory "data/news" file_welcome_screen Opening screen "data/welcome.txt" gender_prop Property name used for pronoun substitutions "sex" lost_and_found Place for things without a home #0 mpi_continue_after_logout Continue executing MPI after logout no new_program_flags Initial flags for newly created programs "" player_name_limit Limit on player name length 16 pname_history_reporting Report player name change history yes pname_history_threshold Length of player name change history 30d quiet_moves Suppress basic arrive and depart notifications no server_cipher_preference Honor server cipher preference order over client's yes ssl_auto_reload_certs Automatically reload certs if the cert file changes no ssl_cert_file Path to SSL certificate .pem "data/server.pem" ssl_cipher_preference_list Allowed OpenSSL cipher list ( see tunelist.h ) ssl_key_file Path to private key .pem "data/server.pem" ssl_min_protocol_version Min. allowed SSL protocol version for clients "None" tab_input_replaced_with_space Change tab to space when processing input yes toad_default_recipient Default owner for @toaded player's things #1 toad_recycle Recycle newly-created toads no verbose_examine Show more information when using examine command yes New server options Description -------------------------------------------------------------------------------------------------------------------- fbmuck -bindv4 [address] Sets the listening address for IPv4 sockets fbmuck -bindv6 [address] Sets the listening address for IPv6 sockets fbmuck -console Treats stdin/stdout as a connection to the server fbmuck -nodetach Does not detach the server process fbmuck -resolver [path] Sets the location of the resolver program Additional Notes - The GUEST flag signifies a player is a guest, or the room/vehicle does not accept guests. - A "welcome" proplist on #0 now overrides the file specified by @tune file_welcome_screen. - Actions can now be linked to NIL, as a do-nothing destination. - Passwords are masked out in logs for server commands @newpassword, @password, and @pcreate. - The "starterdb" database is provided. Very similar to previous database iterations, but upgraded for FB7. - Objects can no longer be removed from the database if they are specified by a @tune. - MUF arrays can be "pinned", meaning changes to any copy will make changed to all copies. - Non-wizards can no longer use a restricted property in a lock. - Several wizard-level database-modifying commands can no longer be forced. Removed - Support for databases earlier than Foxen8. An upgrade path for FB5 (without FB6 conversion) is being developed. - Tools fb-announce, fb-olddecompress, fb-topwords, and optimdb. - OUTPUTPREFIX and OUTPUTSUFFIX interface commands. - Delta dumps, including associated server commands and @tunes. - Partially-implemented proplist format @tunes. - rob and kill commands, including associated @tunes. MUF equivalents are available in the fuzzball-muf archive. - @tune enable_match_yield. OVERT and YIELD flags are now always available.