VERSION 3.8 (Apr 05/09) * new module, 'doc', for reading Python documentation in game, and generating html versions of module documentation * new module, 'display', containing utilities for displaying tabular data and meters * admin disconnect command, takes a socket ID. Use connections to view sockets * trigger types can now be added from outside the scripts module * fixed a bug in pathfinding, causing incorrect directions to be given * mudsys.add_xxx_method now accepts properties, as well as methods * Python StorageList() can now take a Python list of StorageSets as argument * Improved IAC handling * Changed the way object equipping and unequipping is handled to accomodate for hooks * Added copy() and store() methods to Python characters and objects * Added read() methods to the obj and character modules * Added ability to check if character can edit a zone, from Python * Fixed infinite loop caused when malformed storage sets are read from disk * ch.send rewritten. Now takes optional newline=True|False, and can have embedded dynamic descriptions VERSION 3.7.9 (Mar 02/09) * The location of zone directories changed from lib/world/ to lib/world/zones/. You will need to manually move your zone files to the new location. * Added new user group, wizard, to encompass general wiz-ly commands that should Have shared access by admins and builders. * restructured the group priviledges for some admin and build commands. Be sure to give all of your admins/builders the 'wizard' user group * User groups can now be edited through 'pcedit' * Fixed problem with display 'sticking' before a prompt * Added support for guest characters * Account menu and login sequence drastically changed! * Added support for instanced rooms and zones * Added support for persistent (state saved across reboot & crash) to rooms and their contents (chars, objs). A stand-alone module will be released for tracking persist rooms and contents * Added new module for logging communication histories (tell, chat) * Exposed aliases to Python * All uids now poll from a common pool * Rooms can now have room-specific checks added to commands without having to override the entire command * reading/writing via storage sets is now buffered instead of being done directly * char_vars module renamed dyn_vars, and added to rooms and objects as well * exposed the text editor to Python * fixed nasty bug with objects sometimes being added to game twice, and corrupting the object list when they are extracted * added support for (string) pearson hashing, with 8, 16, and 32 bit hashes * exposed helpfiles to Python * Fixed the nasty green color leak issues * Received IAC events now broadcast via the receive_iac hook (sock, sequence) * disabled MCCP on this basis: http://www.mudconnect.com/discuss/discuss.cgi?mode=MSG&area=coders&message=24304#24304 MCCP will be re-added as a stand-alone module, working via the iac hook * characters, rooms, and objects now track their 'birth' -- the time at which their 'new' function was called. * Fixed olc so the OLC extenders will properly work with Python * Fixed various issues with trying to use OLC commands on entities with nonexistent zones * generic_find and parse can now search for things by UID, as well as keywords * The ch.cansee function can be extended through Python * Character, room, and object bitvectors can now be extended and accessed via Python * Fixed issue with /e in the script editor adding \r to the end of lines (which makes Python choke) * Added new trigger types for looking, closing, and entering the game VERSION 3.7 (Dec 06/08) * Python can now access World (e.g., for adding protos, dialogs, quests, etc...). See scripts/pymudsys.c for relevant functions * medit, redit, and oedit now have 'extenders'. Extra menu options can be registered, so the OLC interfaces can be extended without editing the module directly * Python now has access to do_olc, and OLC extenders * Python can now add new item types * Changed how obj/room/mob prototypes are turned into OLC-editable things * multi-word arguments to the commmand parser can now be specified with " and " or ' and ' * Replaced all instances of vsprintf with vsnprintf VERSION 3.6 (May 31/08) * Deleted the old help module and wrote a new one, help2. * When the mud reads in Python commands, attempts to set their documentation string as the helpfile for the command, if no helpfile for that command already exists. * Outbound text and prompt are now flushed separately and have their own unique process and finalize hooks incase they need to be handled separately. * Added a 'flush' hook to the beginning of flush_output * Goto and transfer are now builder commands, not admin commands * removed the instantiate command; use rcopy * Fixed bug with cmdcopyto * Fixed message bug with emote and gemote when no emote text is entered * Fixed a problem with OLC menus sometimes printing twice * start_update was broken last patch and would not requeue events; fixed VERSION 3.5 (Oct 15/07) * Revamped add_cmd. It no longer takes position or pc/npc constraints * New function, add_cmd_check, that adds a function that runs pre-command. If it fails, the command doesn't run. Useful for modules to modify command conditions after the fact. Like, for instance, combat modules preventing movement while combat is taking place. * Output and prompts are now sent after the current event cycle resolves, instead of before. * Events added with a delay of 0 now queue to the back of the event list, instead of being pushed on to the front of it. This is for events that trigger other events that need to be resolved in the same event cycle. Normal events (with a delay > 0) will be resolved on the next event cycle, as usual. * Characters now save after the init_player hooks are run * Fixed a problem with special exits not displaying the proper exit messages * Enter hooks are now properly run when someone enters a portal * pyobj.load_obj now properly sends worn items to the inventory if no body location arguments are supplied VERSION 3.4 (Sep 22/07) * Made sure NM compiles with Python 2.5 * Python module for finding the shortest path between two rooms now exists * Python module for doing repeatable/nonrepeatable routines (i.e. path following) now exists * There is now a 'script' room reset type. Runs a script on the initiator (room, loaded mob, object, etc) as 'me'. Intended to set up behaviors for a unique instantion of a mob/obj like pathing. * renamed the char_vars module to dyn_vars. It now applies to objects and rooms * added a initialize hook before we enter the gameloop * the commands command now displays room-specific commands * Made generic_find() search equipment before inventory * Python rooms are now hashable * Characters can no longer call act() in Python unless they have a room (i.e., no actions if a character's prototype is still initializing the character) * Fixed bug with lists not properly handling element removals * Fixed a bug where a char/obj/room would potentially not properly dereference after its prototype script had being run over it * Fixed problem with nested calls to hookRun overwriting eachothers' argument list * Fixed a buffer overflows in storage.c parse_line, parse_string, and write_string_data * Removed night descs. Their functionality can be reproduced with embedded Python scripts. * Fixed memory leak with Python events not properly decrementing ref counts on owners for interrupted events * Fixed a bug where the python char generation wasn't calling char_to_game, allowing new characters to interact with stuff, but not having stuff be able to interact with them * If the mud is locked down to players, no new players can be created The mud no longer hangs if a person hits enter and nothing else on the first connection prompt VERSION 3.3 (Dec 25/06) * If a Python module has errors when initialized, the MUD halts booting and prints a traceback to standard out. * Gave Python access to the input handler and prompt * The main prompt is now contained in pymudsys.c and can be overwritten with the Python command, mudsys.show_prompt = new_prompt_here. Demo contained in the doc folder * Rewrote login and account generation in Python * Rewrote character generation in Python * Moved color and universal newline code into Python * added getAuxiliary() to Python rooms and objects * Gave Python access to char, obj, room, etc... without them having to actually be in game (i.e. for char gen). Still need to be extracted after being used. * Replaced some send_to_char oopsies with ch.send in the python code * Deprecated the Python event.start_update; recursively call event.start_event now * Fixed some bugs with ch or vict being NULL in message() * cmd_delay now accepts floating point delay values * Fixed bugs where Py_None returned without increasing its reference count * Fixed bug with completed Python events not decrementing data reference count Bug still exists for interrupted events. * Optional SCons build system introduced VERSION 3.2.1 (Jul 09/06) * Fixed bug with NPCs becoming unable to speak * Mysty mysteriously stopped loading. She now loads again * Fixed bug with lockdown not working * Fixed a memory leak in Python char.list_chars() and char.list_sockets() * Fixed bug with atoi() not being imported in cmd_admin.py * Gave Python access to a character's notepad * Fixed various spelling mistakes VERSION 3.2 (Jul 01/06) * Python now has access to parse_args() * Python now has access to hooks. Hooks rewritten to accomodate for this * Most of the cmd_xxx functions were rewritten in Python (lib/pymodules) * Almost all remaining commands shuffled around into modules * Python modules can now have an __unload__ method that is called whenever they are reloaded with the pyload command. Useful for removing commands or hooks * Room resets now apply recursively to prototypes * Added builder commands: rcopy, dig, fill * Modified the "commands" command to accept a group list * Fixed python aux data crash bug introduced in 3.1 * Fixed bug not allowing exits to link between zones VERSION 3.1 (Dec 04/05) * Let dynamic descriptions be embedded with a Python-like, markup language-like style. For example: You're in a [if ch.race=="fairy"]HUGE[elif ch.race=="giant"]tiny[/if] cave. * Prototypes and triggers now re-use code objects when they are run multiple times, instead of recompiling from source every time * Similarly, characters, objects, and room now reuse their Python representations instead of remaking one every time it is needed * Redid the way hooks work, to make them more flexible. * Added new hooks for account and character creation * Changed functionality of next_space_in to to check for newlines, carriage returns, and tabs * Made bodies reset when races are changed in Python scripts * Characters' equipment can now be accessed in Python * Changed parse_keywords and parse_strings to return a list of strings rather than an array of strings * Rooms now auto-reload after being edited in OLC * Prototypes now print errors if their parents cannot be found when run * Exit descriptions can now have embedded python scripts * Added new hook types for after looking at rooms, exits, objects, and chars * Python now has access to functions in the time module * Made some small changes to the functionality of Sets * Added warning message to OLC for people making closable exits w/o keywords * Carriage returns are now stripped from triggers when they are edited * Parse now handles multiple words surrounded by " and " as a single word * Redid try_equip to work with more than just worn items * Added set methods for the Integer, Double, and Long structs. Also added a new struct, Boolean. * Fixed bug with Python event module method list not being terminated properly * Fixed bug with PyChar_act editing PyStrings when it shouldn't * Fixed crash bug with PyChar_geton * Fixed many memory leaks caused by improper handling of Python objects * Fixed some buffer formatting problems * Fixed problem with dynamic descs crashing the mud * Fixed problem with OLC not liking " in descriptions. This problem still exists in short and room descriptions, but not paragraph descriptions. * Fixed bug with mud crashing if players do not have a room but use a command * Fixed bug with exits not being able to be set as closable * Fixed a bug with the "enter" command not working properly * Fixed alignment problems in worn item type OLC menus * Fixed bug with embedded scripts not expanding for char or obj descs * Fixed a bug with redit not generating night descriptions properly * Fixed bug with python load_obj not being able to equip characters. * Fixed bug with oedit, medit, and redit not handling spaces in extra code * properly VERSION 3.0 (Oct 07/05) * things in the game database (rooms, objects, mobs, triggers) now have string keys instead of vnums. Each key has two parts: a name and a locale (zone key). So, for instance, Mysty which was vnum 100 in v2.7 is now mysty@examples * rooms, objects, and mobiles now support inheritance. * mob, obj, and room prototypes are now stored as python scripts. * scripts now run in a special restricted environment to prevent scripters from running malicious code. Modules written in python are still run in the normal Python environment. * rooms must now be rreload-ed before changes made in OLC are updated. * replaced load/delete_account/player with get/unreference_account/player to prevent multiple copies of the same account/player from being loaded into memory. * created general framework for setting up hooks. * commands no longer have a subcmd integer value associated with them. * dialogs have been removed from the codebase, and will be re-released as an optional module (forthcoming) * new function, parse_args, added to parse command input into appropriate values. * rooms can now have their own commands * exits now have python representations * rewrote OLC (yet again... hopefully the last time!) * added new OLC commands (mpedit, opedit, rpedit) for editing the python code for prototypes directly * room reset rules are no longer stored on rooms themselves. They now have their own entries in the world database. * replaced all occurences of strdup(var ? var : "") with strdupsafe(var) * many bug fixes and other minor changes VERSION 2.7 (July 31/05) * changed the way the world is saved to disk * added lazy loading for the game world * removed some unused types defined in mud.h * added wrappers for int, double, and long so they can be passed around as pointers * added lazy loading; massive changes to how zones are stored on disk * added python wrapper for generic_find() * Fixed bug with setting an object type that does not exist (thanks Venzor) * Fixed bug with transfer crashing when target did not exist (thanks Venzor) * Modified scrun so scripts can be run from a person's notepad (thanks Venzor) * Changed the scriptGetNotepad function to return the entire buffer, and not just the string * Terrain saving fixed AGAIN... apparently, I didn't add the changes last version. This time, terrain values save as strings, not ints. Easier reading in the zone files. Yay readability. * Fixed bug with deleteRoom crashing us whenever the room contained objs or mobs * New function: build_who() ... returns a buffer of the who list, rather than the who list just being accessable through a command. * Fixed bug with admins not being able to edit all zones * Extraction of objs/mobs is now a two-stage process: first, all of the stuff is done to prepare them for extraction (e.g. remove all pointers in game to them, remove them from rooms/containers). Then, at the end of the pulse, they are removed from game and deleted. This is to help prevent against problems with referencing bad memory when trying to use something in a function after it has been extracted in the same function. * Added new admin command, force * expanded generic_find() so it can return lists of characters if all.xxx is used * Added script editor option for supressing auto-indent (easier pasting of code) VERSION 2.6 (July 06/05) * Fixed HUGE memory leak with zones saving. Storage sets weren't closing!! * Fixed bug with room terrains saving as ints but loading as strings (they save/load as ints. Ideally, I would have liked to do it as strings, but then I'd have to write a conversion patch. Maybe next version) * Helpfiles can now be viewed from olc * resized the column width for help listings and command listings * Added a new method to pychars which allows strings to be paged rather than sent, for easy reading of long text * set_val now works on offline characters * Added new scripter command, scstat to pull up script info for a vnum * Fixed bug with count_occurences not working properly. * Aliases be embedded in other aliases. Aliases can be multi-command * Fixed bug with set not working on one's self * Special exits can now have their "opposite" direction set in OLC When closing/opening or locking/unlocking an exit, the opposite exit on the other side will also do the same. * Made special exits check before normal commands VERSION 2.5 (June 18/05) * New manual for scripts and extending the mud in Python * Gave python access to storage sets, auxiliary data, event handler, action handler, and way more variables + functions * Fixed bug with gcc not building dependencies properly on some OSes * Fixed bug with wearable items not being, well, wearable!! oops... * A bunch of random utility functions, and minor changes VERSION 2.4 (June 4/05) * Redid big chunks of the Makefile so output is easier to read. * New make command added: make backup. Backs up lib, src, and doc directories * redid some of the message() command. There are no longer TO_NOTCHAR and TO_NOTVICT flags (they are redundant) * Fixed a couple minor bugs in OLC that could potentially get you stuck at a menu screen with no way to exit * Gave python access to more aspects of rooms, characters, objects... * Python packages can now be imported, in addition to modules * Fixed a buffer overflow bug when loading python modules * Fixed a problem with text displaying on the same line as a prompt * Fixed problem with who displaying the wrong group status for people VERSION 2.3 (May 27/05) * Removed levels, added "user groups" for command priviledges * Fixed bug with purge trying to extract null objects or characters * Fixed bug with unequipping objects more than once that are on more than one bodypart * Python objects are now extendable from outside modules * Commands can be written in python * Modules written in python can now be loaded into NakedMud VERSION 2.2 (May 12/05) * Accounts have been added to the MUD. * Minor fixes to input handling and flushing of output when we don't have a prompt to display after the flushing. * ./autorun.py can now be used to start up the autorun file * Added an MOTD command * Added read/store_bool to storage.h * new admin command, lockdown, that can bar players of certain levels from entering the game. * sets now auto-expand themselves like hashtables VERSION 2.1.1 (May 08/05) * Fixed two major bugs: property_tables will no longer give a key a negative bucket number. Copyover now works. Socket data wasn't being zeroed before it was being used, causing us to crash on some platforms. Thanks go out to Rhaelar for pointing out and helping me find both of these bugs VERSION 2.1 (Apr 24/05) * scripts can now attach/detach other scripts from rooms, objs, and mobs * hashtables no longer need a size specified when they are made; they will also automatically expand themselves as needed * major bugs with olc2 fixed; when editing a new object or mobile, the item will actually be created now * minor bug with "fill" fixed. When filling an exit that doesn't link back to the room you are filling from, the mud will no longer crash * oedit and medit can now be used to edit mobs and objects in your room or in your inventory, respectively * new script type: runnable. New command: scrun * bitvector edit added to olc2 VERSION 2.0 (Apr 15/05) * changed the way file dependencies are created during make (calculating dependencies is an automatic process now) * The code had a *huge* number of changes. The more prominent changes listed: * Completely redid OLC. There is now a new module called OLC2 * Made some modules _neccessary_ to NakedMud (e.g. scripts, olc, and other core modules) * Stacked input handlers for sockets, instead of socket states * A new, more robust, more easily extendable text editor * hashIn will now correctly return TRUE if there is a key with a value pair of null * Fixed the "copyover" bug that was introduced by the last version's directory structure. * Fixed the min/max position problem with socials. These parameters now work. * Changed the hashtable to be case-insensitive VERSION 1.5 (Jan 29/05) * Created a new unordered storage type, SET * helpfile system completed * Added a linecount to the end of the text editor. * Added a new 'write' command that allows players to enter a basic text editor so they can compose messages. Used with editing helpfiles, and later for mail and board messages. * Re-did races.c so new ones can be added by modules * Added auxiliary data to zones * moved try_buildwalk() from cmd_builder.c to movement.c * renamed admin.c to cmd_admin.c and builder.c to cmd_builder.c * Added a "transfer" so wizzies can move players around. * Added a "stop" command to interrupt player actions * Looking at an exit now displays the objects/characters in the room as well * Killed a bunch of the terrain data that seemed out of place for NakedMud * Changed roomGetExitNames to return pointers to the exit names instead of strdups of them, so users don't have to worry about garbage collection. * Immortals can now go invisible * added a new type of event -> updates. They will automatically add themselves back into the event queue after they fire * Made vnums show for mob/objects in lists when builders and above see them. Still needs to be done for mobiles on furniture, and the furniture itself * Made characters save after creation * Mobile gender can now be changed in OLC * Problem with gender names fixed (male/female/neutral names were mixed up) * removed the "exit" parameter from scripts * removed the "comment" parameter from all of the store_xxx functions in the storage utility. VERSION 1.4 (Jan 18/05) Too many changes to list. Some of the major ones include: * NakedMUD should now be set up to compile under most linux systems rather than Mac OSX - us OSX'ers are probably the minority. * Makefiles were completely redone. Compiling modules is much easier now. Many thanks go out to Tyche for pointing me in the direction of a paper that allowed me to redo the makefiles nicely. * You can now pull an element out of a list, even if you are iterating over the element. * Aliases were extracted out of character.c and added as a new module * char_vars were extracted out of character.c and added as a new module. char_vars can now be numerical values AND strings. * scripts were updated to reflect changes to char_vars * socials were added, plus an OLC for them (socedit). * some work was done to generic_find() and its related functions * various bug-fixes here and there. VERSION 1.0 (Dec 26/04) * First public release of NakedMud