| 1 | |
|---|
| 2 | The changes in this file begin with PennMUSH 1.50 patchlevel 4 and go |
|---|
| 3 | through patchlevel 7. |
|---|
| 4 | |
|---|
| 5 | -- Amberyl (lwl@eniac.seas.upenn.edu) |
|---|
| 6 | |
|---|
| 7 | ========================================================================== |
|---|
| 8 | |
|---|
| 9 | Version 1.50 patchlevel 4 #1, October 23, 1992 |
|---|
| 10 | |
|---|
| 11 | --- Features --- |
|---|
| 12 | |
|---|
| 13 | - New additions - |
|---|
| 14 | * @inprefix and @infilter attributes. |
|---|
| 15 | * Evaluative locks. @lock foo=atr/val does an evaluation on |
|---|
| 16 | the ATR attribute on foo (get_eval style). The lock is passed if |
|---|
| 17 | that equals val. |
|---|
| 18 | |
|---|
| 19 | - Improvements - |
|---|
| 20 | * Added command count; priv'd WHO changed to reflect this. |
|---|
| 21 | |
|---|
| 22 | - Changes to commands - |
|---|
| 23 | * @pemit and @remit to players obey pagelocks. |
|---|
| 24 | * @notify and @drain give player a message. |
|---|
| 25 | |
|---|
| 26 | --- Other changes / bug fixes --- |
|---|
| 27 | |
|---|
| 28 | - Minor changes - |
|---|
| 29 | * lock() always works for royalty. |
|---|
| 30 | * Matching for possessive look and get changed somewhat, so possession |
|---|
| 31 | checks are done _after_ trying to match everything else. |
|---|
| 32 | * lwho() works for everyone (but does not show dark wizards to mortals). |
|---|
| 33 | * Ignore "null" commands from non-players. |
|---|
| 34 | |
|---|
| 35 | - Bug fixes - |
|---|
| 36 | * Changes which made it into 1.50 p3 #2: |
|---|
| 37 | Checking for valid location done near beginning of command checks. |
|---|
| 38 | Properly ifdef'ed a clear_mail() in wiz.c |
|---|
| 39 | Fixed a coredump bug in @search for no arg3 specified. |
|---|
| 40 | * Wizards and royalty can't unset their own flags. Also, royalty |
|---|
| 41 | can only roy-bit objects they own. Previously this latter was |
|---|
| 42 | enforced only via a controls check. This, however, allows royals |
|---|
| 43 | to roy-bit objects by placing them in a controlled zone; this is |
|---|
| 44 | not desirable behavior. |
|---|
| 45 | * @tport and friends work as advertised. |
|---|
| 46 | * @decompile on players no longer incorrectly sets a @parent field. |
|---|
| 47 | * 'look here' inside an object now properly displays idesc. |
|---|
| 48 | * Explicitly prevented non-connected players from being @booted. |
|---|
| 49 | * Fixed an echo 'bug' with puppets: (more of a 2.0 compat thing) |
|---|
| 50 | > @fo Puppet=:foofs. |
|---|
| 51 | Puppet> Puppet foofs. |
|---|
| 52 | Puppet foofs. |
|---|
| 53 | * Fixed direct entering of password in @password. |
|---|
| 54 | * Fixed bug with semaphores caused by not uncompressing semaphore |
|---|
| 55 | attribute before using it. Premature @notifies to prevent future |
|---|
| 56 | blocking should now work. |
|---|
| 57 | * Mail allows "hard" newlines, and now uses standard db-read routines. |
|---|
| 58 | * Mail sanity checks for bad objects with mail. |
|---|
| 59 | * atr_comm_match now correctly blocks checking of $commands from the |
|---|
| 60 | parent. Attributes are entered into the hash table as "checked" even |
|---|
| 61 | if they're just straight text and don't contain a $command. |
|---|
| 62 | |
|---|
| 63 | |
|---|
| 64 | ========================================================================== |
|---|
| 65 | |
|---|
| 66 | Version 1.50 patchlevel 5 #1, November 8, 1992 |
|---|
| 67 | |
|---|
| 68 | --- Features --- |
|---|
| 69 | |
|---|
| 70 | - New additions - |
|---|
| 71 | * LOGOUT command. Disconnects you from a character but not the MUSH. |
|---|
| 72 | * @daytime and @login replaced by generic @enable/@disable command. |
|---|
| 73 | These can also be used to control logging. Their values are now |
|---|
| 74 | settable in the config file. |
|---|
| 75 | * ISWORD(). Returns 1 if every character in a string is a letter. |
|---|
| 76 | * NO_COMMAND flag, on an experimental basis. An object set NO_COMMAND |
|---|
| 77 | is not checked for $commands. Pending more profiling data, this |
|---|
| 78 | flag might stay or go. |
|---|
| 79 | |
|---|
| 80 | - Improvements - |
|---|
| 81 | * panic() routine now tells connected players the cause of the panic. |
|---|
| 82 | |
|---|
| 83 | - Changes to commands - |
|---|
| 84 | * @decompile can take a wildcarded attribute pattern. |
|---|
| 85 | * @search and lsearch() have been fixed to be consistent with 2.0. |
|---|
| 86 | Also, parameters to them are no longer case-sensitive. In addition, |
|---|
| 87 | the PARENT class allows you to find all children of an object. |
|---|
| 88 | Royalty now performs these without restriction (i.e. like wizards). |
|---|
| 89 | Mortals can no longer get data on objects they don't own (for |
|---|
| 90 | example, @search flags=Wc no longer works for them.) |
|---|
| 91 | Fixed problems with "type conflicts" that weren't, and generally |
|---|
| 92 | robustified this code. |
|---|
| 93 | |
|---|
| 94 | --- Other changes / bug fixes --- |
|---|
| 95 | |
|---|
| 96 | - Minor changes - |
|---|
| 97 | * The make dependencies in the Makefile have been updated. |
|---|
| 98 | * @config now takes the switches "costs" and "globals". The latter |
|---|
| 99 | lists parameters like "logins", "daytime", and the logging stuff. |
|---|
| 100 | Also, redundant/stupid stuff in the @config listing has been zapped. |
|---|
| 101 | * All "strcpy(buff, "");" statements in eval.c replaced by an infinitely |
|---|
| 102 | more sensible "*buff = '\0';" |
|---|
| 103 | * Default flags set by the conf file are now checked for validity -- i.e. |
|---|
| 104 | you can't make GOING, STARTUP, and CONNECTED, or type flags, defaults. |
|---|
| 105 | * Royalty can see the quotas of other players via @quota. |
|---|
| 106 | * Royalty can always get the zone() of an object. |
|---|
| 107 | * Royalty can @stats other players. |
|---|
| 108 | * Removed the @use-does/@does and gripe commands. Nobody uses the first, |
|---|
| 109 | and there are better ways of communicating (like @mail) than gripe. |
|---|
| 110 | * Got rid of help.c, having the help functions call do_new_spitfile |
|---|
| 111 | directly (that function was moved into bsd.c) |
|---|
| 112 | * Moved all the dead code out of the dist package. |
|---|
| 113 | * Got rid of the nalloc memory allocation package, and all associated code |
|---|
| 114 | It's not been supported for close to a year, and nobody uses it. |
|---|
| 115 | * In hash stuff, malloc calls of the format malloc(sizeof(*ptr)) |
|---|
| 116 | (K&R 2nd-edition how-to-write-hash-stuff standard) to the more |
|---|
| 117 | common (and sensible) malloc(sizeof(POINTER_TYPE)) format. |
|---|
| 118 | |
|---|
| 119 | - Bug fixes - |
|---|
| 120 | * Players shouldn't be able to execute commands from Garbage if they |
|---|
| 121 | need a valid location. |
|---|
| 122 | * Documented the ISNUM() function (which existed but wasn't in the docs) |
|---|
| 123 | * Fixed exec() call problem with wrong 'cause' in did_it. |
|---|
| 124 | * Fixed sort() so it doesn't segfault on an empty list. Also, it no |
|---|
| 125 | longer uses calloc() (and thus no longer leaks memory). |
|---|
| 126 | * Fixed a bug with semaphore execution not copying the stack correctly. |
|---|
| 127 | * Fixed the attribute lock corruption bug. AUGH. |
|---|
| 128 | * Logging function is only called for general commands if log_commands |
|---|
| 129 | is on or the player is SUSPECT. |
|---|
| 130 | * v() permission check is now correctly AF_MDARK not AF_WIZARD. |
|---|
| 131 | * find_flag_on_type (the wrapper for find_flag) now returns -1 on error |
|---|
| 132 | instead of 0, since 0 is the ROOM flag. All calls to these functions |
|---|
| 133 | have been modified. |
|---|
| 134 | * Functions are no longer evaluated unless the parser really needs them. |
|---|
| 135 | This cuts down on some overhead, as well as odd messages for things |
|---|
| 136 | like "help loc()" or even the nonsense "foo loc()" |
|---|
| 137 | * Fixed memory leak in page-return, and got rid of pronoun_substitute() |
|---|
| 138 | function completely (relic of the old parser). |
|---|
| 139 | |
|---|
| 140 | ========================================================================== |
|---|
| 141 | |
|---|
| 142 | Version 1.50 patchlevel 6 #1, December 14, 1992 |
|---|
| 143 | |
|---|
| 144 | --- Features --- |
|---|
| 145 | |
|---|
| 146 | - New additions - |
|---|
| 147 | * VAL() function. Takes leading numeric prefix from a string. |
|---|
| 148 | * INDEX() function. Like extract(), but works on arbitrary-length |
|---|
| 149 | strings, on an arbitrary separator. |
|---|
| 150 | * WHERE() function. Returns "true" location of an object. |
|---|
| 151 | * Settable attribute flags have been added (@set obj/atr=flag). |
|---|
| 152 | There are three such flags, "no_command", "visual", and |
|---|
| 153 | "no_inherit". The first two are just the old AF_NOPROG and |
|---|
| 154 | !AF_ODARK flags. The last prevents the inheritance of an |
|---|
| 155 | attribute by the children of a parent object. |
|---|
| 156 | * DEBUG flag, on an experimental basis. It is not settable by mortals, |
|---|
| 157 | and it is computationally expensive. It provides precise output |
|---|
| 158 | from the parser. |
|---|
| 159 | * New config directive EX_PUBLIC_ATTRIBUTES added. Examine format for |
|---|
| 160 | objects you don't control is now 2.0-ish. do_examine rewritten. |
|---|
| 161 | |
|---|
| 162 | - Improvements - |
|---|
| 163 | * ITER() now works in a much more usable way. It gets its arguments |
|---|
| 164 | un-eval'ed, and escapes/braces are no longer needed to get it |
|---|
| 165 | to evaluate in a "normal" way. UFUN() also now works with ITER(). |
|---|
| 166 | * SWITCH() can now take up to 100 arguments, and its arguments are not |
|---|
| 167 | evaluated until needed. |
|---|
| 168 | |
|---|
| 169 | - Changes to commands - |
|---|
| 170 | * Royalty can set themselves DARK. This vanishes them from the WHO list |
|---|
| 171 | but not from the visible room contents. |
|---|
| 172 | * Royalty can set themselves MONITOR. |
|---|
| 173 | |
|---|
| 174 | --- Other changes / bug fixes --- |
|---|
| 175 | |
|---|
| 176 | - Efficiency - |
|---|
| 177 | * Major improvements in the efficiency of the game have been made. Most |
|---|
| 178 | of them are supported by profiling data (some have not been tested |
|---|
| 179 | under a profiler). |
|---|
| 180 | * string_compare has been replaced by strcasecmp. The built-in library |
|---|
| 181 | function is probably optimal. |
|---|
| 182 | * Got rid of reconstruct_messasge. No more spaces around '=' sign |
|---|
| 183 | in 'say', '@wizwall', etc, and no more wasted time splicing messages |
|---|
| 184 | together. |
|---|
| 185 | * If we match "me", "here", "#dbref", or "*player", we do no further |
|---|
| 186 | matching. |
|---|
| 187 | * The construction "<name of nearby object> <command>" as an alias for |
|---|
| 188 | @force no longer works. "<#dbref> <command>" still works, but the |
|---|
| 189 | amount of matching caused by the former is insane. |
|---|
| 190 | * Rewrote spname(). If FULL_INVIS isn't defined, it's the same as the |
|---|
| 191 | Name() macro. Otherwise, it returns a const char * and doesn't do |
|---|
| 192 | a strcpy (blech). |
|---|
| 193 | * hash_fn now uses a bitmask instead of modulus. Hash table sizes have |
|---|
| 194 | also been increased. |
|---|
| 195 | * atr_match, atr_get, and atr_add now use all upper-case, eliminating |
|---|
| 196 | the need for string_compare rather than strcmp (and getting rid of |
|---|
| 197 | zillions of tolower() calls). Added upcasestr() function, which |
|---|
| 198 | converts a string to uppercase, in-place. (We convert from lower to |
|---|
| 199 | uppercase MUCH less frequently than vice versa). |
|---|
| 200 | * Small text files are now cached. As long as your small text files |
|---|
| 201 | are small (and they SHOULD be!) the extra memory overhead is not |
|---|
| 202 | at all significant. This eliminates the several grillion calls to |
|---|
| 203 | open() and close() caused by players connecting and disconnecting. |
|---|
| 204 | @readcache command added. (Note that you may have to add a blank |
|---|
| 205 | line to the end of your small text files, since the new code does |
|---|
| 206 | not automatically do so.) |
|---|
| 207 | |
|---|
| 208 | - Misc. changes - |
|---|
| 209 | * Destroying an exit tells you what exit number you destroyed. |
|---|
| 210 | * Mortals can type "ex *player" (since they can type "ex [num(*player)]") |
|---|
| 211 | * Added flags.h (split from db.h). |
|---|
| 212 | * Normal MUSH @shutdown now writes out process statistics. |
|---|
| 213 | * The TERSE flag now suppresses ONLY auto-look messages. |
|---|
| 214 | * Things without real locations (like rooms) can once again @trigger. |
|---|
| 215 | * options.h file has been split from config.h. options.h contains all |
|---|
| 216 | the compilation directives; config.h contains the miscellaneous |
|---|
| 217 | configuration-type things which should not be modified. |
|---|
| 218 | * Commands done in GOING rooms are no longer considered invalid. |
|---|
| 219 | * @parent <object> with no other args unparents an object. |
|---|
| 220 | * REPEAT() with 0 repetitions returns a blank string, not an error. |
|---|
| 221 | |
|---|
| 222 | - Code cleanup - |
|---|
| 223 | * DESC is typedef'ed rather than #define'd in bsd.c. |
|---|
| 224 | * Added new match predicate, match_nearby(). Like an "everything" match, |
|---|
| 225 | but does not check "absolute" refs and *player refs for mortals. |
|---|
| 226 | Cleaned up code to use this where appropriate. |
|---|
| 227 | * Almost all of the set.c functions now do matching in the standard way. |
|---|
| 228 | * In various places, checks for strlen(foo) == 0 have been replaced by |
|---|
| 229 | *foo == '\0'. |
|---|
| 230 | * addrout() is now hostname_convert() (a more sensible name). Also |
|---|
| 231 | rewrote it to use the standard conversion routines. |
|---|
| 232 | * All attribute fetches in eval.c use a consistent form of permission |
|---|
| 233 | checks. (This has the side-effect of no longer allowing objects |
|---|
| 234 | to get a ZFUN from a link_ok zmo). Also, Can_Read_Attr macro is |
|---|
| 235 | now used all over the code. |
|---|
| 236 | * Some minor cleanup in atr_add. |
|---|
| 237 | * fun_lcon, fun_lexits, next_con, and next_exit have been rewritten. |
|---|
| 238 | In addition to being much neater, they now provide more security; |
|---|
| 239 | you cannot use them remotely on a room you don't control, regardless |
|---|
| 240 | of whether or not you own any of the objects in it. |
|---|
| 241 | * The prefix for do_wall is directly assigned instead of being strcpy'ed. |
|---|
| 242 | * In eval.c, and some other files (partially), db[x].foo references |
|---|
| 243 | have been replaced by the appropriate macros. |
|---|
| 244 | * Added where_is function, returning the true location of an object. |
|---|
| 245 | * can_link and can_link_to are macros. |
|---|
| 246 | * Added Can_Locate macro. |
|---|
| 247 | * In eval.c, fun_foo declarations are static void intstead of void. |
|---|
| 248 | * controls() code now uses a bunch of macros. |
|---|
| 249 | |
|---|
| 250 | - Bug fixes - |
|---|
| 251 | * Eval locks now work properly, since we no longer clobber the |
|---|
| 252 | uncompress buffer. |
|---|
| 253 | * setunion() duplication bug fixed. |
|---|
| 254 | * edit() recursion bug fixed. |
|---|
| 255 | * Definition of "nearby" corrected to include exits in the same room. |
|---|
| 256 | * You can't "kill" yourself. |
|---|
| 257 | * The lock buffer overflow problem has been fixed the "right" way. |
|---|
| 258 | * esnotify now uses notify_noecho, so puppets don't get emit repeats. |
|---|
| 259 | * Fixed coredump bug caused by exits doing certain funtion calls |
|---|
| 260 | (check was originally for NOTHING rather than GoodObject). |
|---|
| 261 | * Fixed possible buffer overflow problem in set_interp. |
|---|
| 262 | |
|---|
| 263 | - Compatibility - |
|---|
| 264 | * The #ifdefs around the rusage stuff have been changed to HAS_RUSAGE. |
|---|
| 265 | The systems which do and don't have this don't follow any kind of |
|---|
| 266 | consistent pattern. |
|---|
| 267 | * Some minor changes to get the code Linux-compatible. The original |
|---|
| 268 | patches for this were provided by Bob Green (bob@inmos.co.uk). |
|---|
| 269 | The restart script is now written in sh instead of csh. |
|---|
| 270 | FNDELAY changed to O_NDELAY (on Suns, they're the same. Hopefully |
|---|
| 271 | this is true for other systems as well, so things don't break). |
|---|
| 272 | |
|---|
| 273 | ========================================================================== |
|---|
| 274 | |
|---|
| 275 | Version 1.50 patchlevel 7 #1, January 17, 1993 |
|---|
| 276 | |
|---|
| 277 | --- Features --- |
|---|
| 278 | |
|---|
| 279 | - New additions - |
|---|
| 280 | * Individual powers system. Individual objects and players can be given |
|---|
| 281 | the ability to do specific things, such as "examine anything", |
|---|
| 282 | "teleport anywhere", "boot players", etc. The BUILDER and IMMORTAL |
|---|
| 283 | flags are now powers, as well. |
|---|
| 284 | * Expanded flag system. Flag lookups are now hashed. A database conversion |
|---|
| 285 | is necessary (see ADD_POWERS directive in options.h, which converts |
|---|
| 286 | a database for both the new flags and the powers system). |
|---|
| 287 | * There is a "no_clone" attribute flag (do not copy attribute when |
|---|
| 288 | the object is @cloned). |
|---|
| 289 | * "@config/functions" lists all functions. |
|---|
| 290 | * New command "@function" allows the addition of user-defined global |
|---|
| 291 | functions which behave just like built-in MUSH functions, but |
|---|
| 292 | can be programmed in MUSH in a UFUN() format. |
|---|
| 293 | |
|---|
| 294 | - New functions - |
|---|
| 295 | * setq() and r() allow local variables (registers, numbered 0-9), |
|---|
| 296 | saved through the execution of a command. |
|---|
| 297 | * squish() removes leading and trailing spaces from a string, and |
|---|
| 298 | crunches inter-word spaces down to a single space. |
|---|
| 299 | * filter() returns members of a list for which a user-def'ed function |
|---|
| 300 | evaluates to true ("1"). |
|---|
| 301 | * fold() recursively evaluates a user-def'ed function and list. |
|---|
| 302 | * rjust() and ljust() pad strings with spaces (or another fill character) |
|---|
| 303 | * nsort() sorts a list of numbers. |
|---|
| 304 | * shuffle() randomizes order of elements in a list. |
|---|
| 305 | * scramble() randomizes order of characters in a string. |
|---|
| 306 | |
|---|
| 307 | - Improvements - |
|---|
| 308 | * cat() can take an arbitrary number of arguments. |
|---|
| 309 | * conn() and idlesecs() now recognize #dbref and *player. Added alias |
|---|
| 310 | idle() for idlesecs(). |
|---|
| 311 | * The mail database name is now a config option (if you use @mail, you |
|---|
| 312 | MUST change your conf file). |
|---|
| 313 | |
|---|
| 314 | --- Other changes / bug fixes --- |
|---|
| 315 | |
|---|
| 316 | - Misc. changes - |
|---|
| 317 | * "Exits:" line in examine is back. |
|---|
| 318 | * examine on non-existent attribute(s) returns "No matching attributes." |
|---|
| 319 | * NO_COMMAND doesn't block ^, since you have to set the LISTENER flag |
|---|
| 320 | on the object anyway in order to activate ^. |
|---|
| 321 | * @config shows a couple more options. |
|---|
| 322 | * The QUIET flag suppresses "Drained.", "Notified.", "Halted." |
|---|
| 323 | * Logging of database reads at startup is slightly neater. |
|---|
| 324 | |
|---|
| 325 | - Code cleanup - |
|---|
| 326 | * Database loading routines have been changed. Support for "old-style" |
|---|
| 327 | MUSH databases has been removed (who USES old-style MUSH databases??) |
|---|
| 328 | The config directives ADD_PARENTS, ADD_LOCKS, and ADD_ZONES are gone; |
|---|
| 329 | if you need to convert using them, convert using an older PennMUSH |
|---|
| 330 | version, then upgrade that database to the present code. |
|---|
| 331 | * atr_comm_match and list_check stuff in game.c is macro'd and a bit |
|---|
| 332 | easier to read. |
|---|
| 333 | * Got rid of some unnecessary tprintfs with notify_noecho. |
|---|
| 334 | * Prevented buffer overflows with puppet messages. |
|---|
| 335 | * @switch and related stack-pointer-changing functions no longer keep |
|---|
| 336 | copying the stack; added local_wild set of functions. |
|---|
| 337 | * FUNCTION(x) general function declaration macro for eval.c functions. |
|---|
| 338 | * XFUNCTION(x) macro for functions not declared in eval.c |
|---|
| 339 | * cat() and strcat() functions use safe_str and friends. |
|---|
| 340 | * Fixed warnings about assignments being used as truth values. |
|---|
| 341 | * Recoded sort(). |
|---|
| 342 | * List-handling functions use list2arr where possible (sort, setfuns). |
|---|
| 343 | * UFUN() code made more generic - addition of parse_attrib() function, |
|---|
| 344 | splits up something of format "<obj>/<attr>" (returning dbref and |
|---|
| 345 | pointer to attrib), do_userfn() executes something of UFUN() format. |
|---|
| 346 | * "channels" field is only in memory if you use chat system. |
|---|
| 347 | |
|---|
| 348 | - Bug fixes - |
|---|
| 349 | * Debug and Verbose output now call raw_notify instead of notify, |
|---|
| 350 | so stack pointer doesn't get clobbered. |
|---|
| 351 | * switch() and iter() arguments are evaluated properly (small change |
|---|
| 352 | made so nesting of these within other functions works sensibly). |
|---|
| 353 | * Players cannot enter arbitrary objects (by dbref) remotely. |
|---|