There have been over 100 improvements to the Mudlet’s API in the 3.0 release. Check out te list below:

  • added: addCustomLine() to programatically draw a custom line in the mapper
  • added: getAllRoomEntrances() which returns rooms that have exits to the given room
  • added: getAreaExits() to return the exits leading out of a particular area
  • added: getCustomLines() to return data on all the custom lines attached to a room
  • added: getExitStubs1() which starts indexing from 1, in addition to getExitStubs() which starts at 0
  • added: getModulePath() to return the module’s location that it’s loaded/saved from on your computer
  • added: getModulePriority() to return the module’s loading priority which determines the module loading order
  • added: Geyser.Label:clear() to clear the label
  • added: Geyser.Miniconsole:clear() to clear the miniconsole
  • added: Geyser.MiniConsole:resetFormat()
  • added: installModule() to install a module
  • added: map auditing to detect any errors in maps (autocorrects any errors that it can)
  • added: native MSDP support! Mudlet has an open architecture so you can also add support for your own protocol via http://wiki.mudlet.org/w/Manual:Supported_Protocols#Adding_support_for_a_telnet_protocol
  • added: openWebPage() to open a webpage in the browser
  • added: option to display whitespace or tabs in the editor
  • added: reloadModule() to uninstall and reinstall a module at once
  • added: searchAreaUserData(), setAreaUserData(), clearAreaUserData(), clearAreaUserDataItem(), getAreaUserData(), getAllAreaUserData(), setMapUserData(), clearMapUserData(), clearMapUserDataItem(), getMapUserData(), getAllMapUserData() to store user data at the map and area level, in addition to the existing room-level commands
  • added: setAppStyleSheet() to allow you theming of Mudlet
  • added: setStrikeOut() to strike out text
  • added: shms() to convert seconds into hours, minutes, and seconds
  • added: status bar display for the main display
  • added: stopSounds() to stop all currently playing sounds
  • added: sysProtocolEnabled Mudlet event that is raised when MSDP, MXP, ATCP, GMCP or Channel 102 is enabled
  • added: sysProtocolDisabled Mudlet event that is raised when MSDP, MXP, ATCP, GMCP or Channel 102 is disabled
  • added: table.deepcopy() to make a copy of a table
  • added: uninstallModule() to uninstall a module
  • added: getMudletVersion() to check Mudlet’s version. Prefer to check if a function exists over checking the version wherever possible as a good practice
  • added: you can now use the keyboard up/down/left/right buttons to navigate the trigger/alias/etc editor
  • fixed: added missing icon from replay toolbar
  • fixed: cecho/decho/hecho not allowing <text inside pointy brackets>
  • fixed: colour triggers can now fire on cyan/light grey
  • fixed: db: now reports times in the local timezone instead of UTC
  • fixed: db: setting _unique property to actually take effect
  • fixed: db:close() now allows re-opening the database again
  • fixed: db:create can now create sheets without the unique index
  • fixed: db:eq() now escapes field names when querying the database
  • fixed: db:fetch() sort operator is now applied to all fields
  • fixed: db:set() to work
  • fixed: disabling/re-enabling MCCP from the game no longer breaks output
  • fixed: downloadFile() now supports https:// URLs
  • fixed: duplicate .xml files if you specify an existing file to use when exporting profiles or triggers
  • fixed: duplicate area names in the mapper are no longer allowed
  • fixed: errors window will no longer show errors about WindowResizeEvent at startup
  • fixed: exportAreaImage() now draws doors as well
  • fixed: getExitStubs() to return correctly if no exit stubs are defined
  • fixed: Geyser clickCallback passes all arguments to function, rather than only the first
  • fixed: geyser flash() callback fixed
  • fixed: Geyser.MiniConsole:setBold(), Geyser.MiniConsole:setUnderline(), Geyser.MiniConsole:setItalics() toggles to work
  • fixed: Geyser.MiniConsole:setFontSize changing fontSize of other miniconsoles
  • fixed: insertText() crashing when containing newlines (“\n”) and used outside of triggers
  • fixed: io.exists() can now detect if folders exist on Windows
  • fixed: minimised alias/trigger/etc editor wouldn’t come back if you pressed on Aliases/Triggers/etc buttons
  • fixed: Mudlet randomly resizing on OSX
  • fixed: new rooms default to area -1 in the mapper
  • fixed: permanent triggers that get added from a package/module import no longer end up behind in execution order after existing temp triggers
  • fixed: regex compilation errors in triggers and aliases are now reported correctly
  • fixed: script editor losing your scripts
  • fixed: setExitStub() to allow in/out exits
  • fixed: setExitWeight() won’t accept invalid exits anymore
  • fixed: some profile icons in the connection dialog no longer have a black background
  • fixed: spawn() to read more than the first line of the output
  • fixed: tempLineTrigger() crashing under very specifc conditions
  • fixed: typos in item activation/deactivation messages in the trigger/alias/etc editor
  • fixed: uninstalling scripts now also unregisters the event handlers they had
  • fixed: xterm256 colours not showing up properly
  • fixed: you can now pass numbers bigger than 999999 through Mudlets event system
  • fixed: sound not working in 3.0 previews
  • improved: 2D map selection now has the info label dynamically move out of the way as needed
  • improved: changing areas in the area selection mapper dropdown now centers on the area
  • improved: copying maps across to other profiles automatically reloads the map
  • improved: createGauge() can now specify the gauge orientation
  • improved: createMiniConsole() can now be called multiple times to change the layout of a miniconsole
  • improved: createRoomID() can now take a starting roomID
  • improved: db:add() to return a positive result on completion or nil and the error message on fail
  • improved: db:aggregate() now allows filtering by distinct values
  • improved: db:query_by_example() can now be used with all functions as the query
  • improved: display({}) outputs {} and not {\n}
  • improved: drawing custom exit lines is now more intuitive
  • improved: echo() now uses the current foreground/background colours of the cursor
  • improved: exits interface for the mapper reorganised and has its own icon
  • improved: fg(), bg() accepts “main” parameter and report wrong color names used
  • improved: game profile tabs in the main window are now re-orderable
  • improved: getColumnNumber() can now return the column number for a miniconsole as well
  • improved: getLineNumber() can now return the line number for a miniconsole as well
  • improved: map can now store players position (requires map format 18)
  • improved: map loading speed
  • improved: much faster initial Mudlet loading
  • improved: mudlet.exe now has an icon on Windows and in the Control Panel
  • improved: raiseEvent() now takes boolean and nil arguments
  • improved: replace() can now have a 3rd argument to keep the colour
  • improved: room deletion in the mapper is much quicker
  • improved: room/area deletion speed in mapper
  • improved: searchRoom(), getRoomName(), setRoomName() can now work with non-Latin characters. This is leading up to upcoming work to make Mudlet i18n friendly
  • improved: setExitWeight(), addCustomLine(), setExitStub(), connectExitStub(), lockExit(), hasExitLock(), setExit() can now take shorthand “n”, longhand “north” and numeric 1 arguments for specifying the exit
  • improved: setGaugeText() now works with my text here to align the text
  • improved: showColors() colors are clickable, added showColors(columns), showColors(filterColor), showColors(columns, filterColor) options
  • improved: table.contains() won’t error if passed nil for the table argument
  • improved: various mapper functions now find rooms faster
  • improved: word wrapping now gets rids of leading spaces on wrapped lines
  • improved: you can now double-click on words in the main window and miniconsoles to highlight them (also: you can configure what it should stop selecting on)