This is patch10 to PennMUSH 1.8.1. After applying this patch, you wil have version 1.8.1p10 To apply this patch, save it to a file in your top-level MUSH directory, and do the following: patch -p0 < 1.8.1-patch10 make clean make install If you use GNU patch 2.2, you probably want the above to be 'patch -b -p0', not just 'patch -p0'. Note that the value of the -p argument has changed in this patch, from -p1 to -p0. Unix (or cygwin or OS X) users need not worry about failed hunks in src/switchinc.c, hdrs/switches.h, hdrs/cmds.h, or hdrs/funs.h. These files are automatically rebuilt on compile. On the off chance they appear not to be, simply rm them and re-run make. Then @shutdown and restart your MUSH. - Shawn/Raevnos In this patch: Fixes: * Cleaned up some compiler warnings. [SW] * The AAHEAR and AMHEAR attribute flags work on listening parents. Report by PAD@M*U*S*H. [GM] * Flags without a letter would truncate the list of set flag letters. Reported by Intrevis@M*U*S*H and Nathan Baum. Patched by latter. * Win32 lacks the LC_MESSAGES setlocale() category. Reported by Intrevis. * Trying to ignore signals could crash on Win32. Reported by Intrevis. * Fixed parse errors in non-C99 compilers. Reported by Intrevis. * Help fixes by Talvo, Sketch * Fixes for 64-bit platforms [SW] * @dump/paranoid produced corrupt databases. Reported by Marvin@M*U*S*H. [SW] * Better support for dealing with databases with a different number of attributes on an object than expected. Marvin and Luke. [SW] * Fixed the example in cmdlocal.c. Reported by Tokeli [SW] * Fix in CHAT_TOKEN_ALIAS [GM] Functions: * link() now takes an optional third argument to make it act like @link/preserve. Suggested by qatoq@ST:Foundations. Minor Changes: * The hash table code now calls a cleanup function on data when deleting an entry. [SW] * The above is used in db.c, function.c and plyrlist.c [SW] * @config compile reports if MySQL support is present. (This does not mean the game is configured to use it.) [SW] * restart copies log files from the last time the mush was running to game/save/ instead of deleting them. [SW] Prereq: 1.8.1p9 Index: Patchlevel =================================================================== *** Patchlevel --- Patchlevel *************** *** 1,2 **** Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.8.1p9 --- 1,2 ---- Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.8.1p10 Index: src/fundb.c =================================================================== *** src/fundb.c (.../trunk) (revision 1) --- src/fundb.c (.../tags/181p10) (revision 29) *************** *** 1976,1981 **** --- 1976,1983 ---- /* ARGSUSED */ FUNCTION(fun_link) { + int preserve = 0; + if (!FUNCTION_SIDE_EFFECTS) { safe_str(T(e_disabled), buff, bp); return; *************** *** 1984,1990 **** safe_str(T(e_perm), buff, bp); return; } ! do_link(executor, args[0], args[1], 0); } /* ARGSUSED */ --- 1986,1995 ---- safe_str(T(e_perm), buff, bp); return; } ! if (nargs > 2) ! preserve = parse_boolean(args[2]); ! ! do_link(executor, args[0], args[1], preserve); } /* ARGSUSED */ Index: src/sql.c =================================================================== *** src/sql.c (.../trunk) (revision 1) --- src/sql.c (.../tags/181p10) (revision 29) *************** *** 164,170 **** char numbuff[20]; int numfields; char rbuff[BUFFER_LEN]; ! int funccount; int do_fieldnames = 0; int i; MYSQL_FIELD *fields; --- 164,170 ---- char numbuff[20]; int numfields; char rbuff[BUFFER_LEN]; ! int funccount = 0; int do_fieldnames = 0; int i; MYSQL_FIELD *fields; Index: src/extchat.c =================================================================== *** src/extchat.c (.../trunk) (revision 1) --- src/extchat.c (.../tags/181p10) (revision 29) *************** *** 961,967 **** if (!Chan_Can_See(p, player)) continue; if ((type == PMATCH_ALL) || ((type == PMATCH_ON) ! ? (int) (void *) onchannel(player, p) : !onchannel(player, p))) { strcpy(cleanp, remove_markup(ChanName(p), NULL)); if (string_prefix(cleanp, cleanname)) { --- 961,967 ---- if (!Chan_Can_See(p, player)) continue; if ((type == PMATCH_ALL) || ((type == PMATCH_ON) ! ? !!onchannel(player, p) : !onchannel(player, p))) { strcpy(cleanp, remove_markup(ChanName(p), NULL)); if (string_prefix(cleanp, cleanname)) { Index: src/utils.c =================================================================== *** src/utils.c (.../trunk) (revision 1) --- src/utils.c (.../tags/181p10) (revision 29) *************** *** 251,257 **** char rbuff[BUFFER_LEN]; char *rp; char *old_wenv[10]; ! int old_args; int i; int pe_ret; char const *ap; --- 251,257 ---- char rbuff[BUFFER_LEN]; char *rp; char *old_wenv[10]; ! int old_args = 0; int i; int pe_ret; char const *ap; Index: src/attrib.c =================================================================== *** src/attrib.c (.../trunk) (revision 1) --- src/attrib.c (.../tags/181p10) (revision 29) *************** *** 1370,1375 **** --- 1370,1380 ---- if (!s) continue; *s++ = '\0'; + if (type == '^' && !AF_Ahear(ptr)) { + if ((thing == player && !AF_Mhear(ptr)) + || (thing != player && AF_Mhear(ptr))) + continue; + } if (AF_Regexp(ptr)) { /* Turn \: into : */ Index: src/conf.c =================================================================== *** src/conf.c (.../trunk) (revision 1) --- src/conf.c (.../tags/181p10) (revision 29) *************** *** 1603,1608 **** --- 1603,1612 ---- notify(player, T(" The MUSH was compiled with SSL support.")); #endif + #ifdef HAS_MYSQL + notify(player, T(" The MUSH was compiled with MySQL support.")); + #endif + #ifdef INFO_SLAVE notify(player, T(" DNS and ident lookups are handled by a slave process.")); #else Index: src/db.c =================================================================== *** src/db.c (.../trunk) (revision 1) --- src/db.c (.../tags/181p10) (revision 29) *************** *** 83,89 **** void db_read_attrs(FILE * f, dbref i, int c); int get_list(FILE * f, dbref i); void db_free(void); ! static void init_objdata_htab(int size); static void db_write_flags(FILE * f); static dbref db_read_oldstyle(FILE * f); --- 83,89 ---- void db_read_attrs(FILE * f, dbref i, int c); int get_list(FILE * f, dbref i); void db_free(void); ! static void init_objdata_htab(int size, void(*free_data)(void*)); static void db_write_flags(FILE * f); static dbref db_read_oldstyle(FILE * f); *************** *** 739,745 **** attrcount++; } ! db_write_labeled_number(f, "attrcount", count); for (list = o->list; list; list = next) { next = AL_NEXT(list); --- 739,745 ---- attrcount++; } ! db_write_labeled_number(f, "attrcount", attrcount); for (list = o->list; list; list = next) { next = AL_NEXT(list); *************** *** 783,792 **** } /* write that info out */ ! db_write_labeled_string(f, "name", name); ! db_write_labeled_dbref(f, "owner", owner); ! db_write_labeled_string(f, "flags", atrflag_to_string(AL_FLAGS(list))); ! db_write_labeled_number(f, "derefs", AL_DEREFS(list)); /* now check the attribute */ strcpy(tbuf1, atr_value(list)); --- 783,792 ---- } /* write that info out */ ! db_write_labeled_string(f, " name", name); ! db_write_labeled_dbref(f, " owner", owner); ! db_write_labeled_string(f, " flags", atrflag_to_string(AL_FLAGS(list))); ! db_write_labeled_number(f, " derefs", AL_DEREFS(list)); /* now check the attribute */ strcpy(tbuf1, atr_value(list)); *************** *** 808,814 **** i); do_rawlog(LT_CHECK, "%s\n", tbuf1); } ! db_write_labeled_string(f, "value", tbuf1); if (flag && fixmemdb) { /* Fix the db in memory */ flags = AL_FLAGS(list); --- 808,814 ---- i); do_rawlog(LT_CHECK, "%s\n", tbuf1); } ! db_write_labeled_string(f, " value", tbuf1); if (flag && fixmemdb) { /* Fix the db in memory */ flags = AL_FLAGS(list); *************** *** 1005,1018 **** int flags; char type[BUFFER_LEN]; boolexp b; ! int count = c, n, derefs = 0; if (c < 0) { db_read_this_labeled_string(f, "lockcount", &val); count = parse_integer(val); } ! for (n = 0; n < count; n++) { /* Name of the lock */ db_read_this_labeled_string(f, "type", &val); strcpy(type, val); --- 1005,1028 ---- int flags; char type[BUFFER_LEN]; boolexp b; ! int count = c, derefs = 0, found = 0; if (c < 0) { db_read_this_labeled_string(f, "lockcount", &val); count = parse_integer(val); } ! for (;;) { ! int c; ! ! c = fgetc(f); ! ungetc(c, f); ! ! if (c != ' ') ! break; ! ! found++; ! /* Name of the lock */ db_read_this_labeled_string(f, "type", &val); strcpy(type, val); *************** *** 1030,1035 **** --- 1040,1051 ---- b = parse_boolexp_d(GOD, key, type, derefs); add_lock_raw(creator, i, type, b, flags); } + + if (found != count) + do_rawlog(LT_ERR, + T("WARNING: Actual lock count (%d) different from expected count (%d)."), + found, count); + } *************** *** 1203,1212 **** int derefs; int flags; char *tmp; List(i) = NULL; ! for (; count > 0; count--) { db_read_this_labeled_string(f, "name", &tmp); strcpy(name, tmp); db_read_this_labeled_dbref(f, "owner", &owner); --- 1219,1239 ---- int derefs; int flags; char *tmp; + int found = 0; List(i) = NULL; ! for (;;) { ! int c; ! ! c = fgetc(f); ! ungetc(c, f); ! ! if (c != ' ') ! break; ! ! found++; ! db_read_this_labeled_string(f, "name", &tmp); strcpy(name, tmp); db_read_this_labeled_dbref(f, "owner", &owner); *************** *** 1217,1222 **** --- 1244,1255 ---- strcpy(value, tmp); atr_new_add(i, name, value, owner, flags, derefs); } + + if (found != count) + do_rawlog(LT_ERR, + T("WARNING: Actual attribute count (%d) different than expected count (%d)."), + found, count); + } /** Read a non-labeled database from a file. *************** *** 1240,1246 **** /* make sure database is at least this big *1.5 */ case '~': db_init = (getref(f) * 3) / 2; ! init_objdata_htab(db_init); break; /* Use the MUSH 2.0 header stuff to see what's in this db */ case '+': --- 1273,1279 ---- /* make sure database is at least this big *1.5 */ case '~': db_init = (getref(f) * 3) / 2; ! init_objdata_htab(db_init, NULL); break; /* Use the MUSH 2.0 header stuff to see what's in this db */ case '+': *************** *** 1499,1505 **** break; case '~': db_init = (getref(f) * 3) / 2; ! init_objdata_htab(db_init); break; case '!': /* Read an object */ --- 1532,1538 ---- break; case '~': db_init = (getref(f) * 3) / 2; ! init_objdata_htab(db_init, NULL); break; case '!': /* Read an object */ *************** *** 1697,1705 **** } static void ! init_objdata_htab(int size) { ! hashinit(&htab_objdata, size, 4); hashinit(&htab_objdata_keys, 8, 32); } --- 1730,1738 ---- } static void ! init_objdata_htab(int size, void (*free_data)(void*)) { ! hash_init(&htab_objdata, size, 4, free_data); hashinit(&htab_objdata_keys, 8, 32); } *************** *** 1768,1774 **** god = new_object(); /* #1 */ master_room = new_object(); /* #2 */ ! init_objdata_htab(DB_INITIAL_SIZE); set_name(start_room, "Room Zero"); Type(start_room) = TYPE_ROOM; --- 1801,1807 ---- god = new_object(); /* #1 */ master_room = new_object(); /* #2 */ ! init_objdata_htab(DB_INITIAL_SIZE, NULL); set_name(start_room, "Room Zero"); Type(start_room) = TYPE_ROOM; Index: src/function.c =================================================================== *** src/function.c (.../trunk) (revision 1) --- src/function.c (.../tags/181p10) (revision 29) *************** *** 427,433 **** {"LEMIT", fun_lemit, 1, -1, FN_REG}, {"LEXITS", fun_dbwalker, 1, 1, FN_REG}, {"LFLAGS", fun_lflags, 0, 1, FN_REG}, ! {"LINK", fun_link, 2, 2, FN_REG}, {"LIST", fun_list, 1, 1, FN_REG}, {"LIT", fun_lit, 1, -1, FN_LITERAL}, {"LJUST", fun_ljust, 2, 3, FN_REG}, --- 427,433 ---- {"LEMIT", fun_lemit, 1, -1, FN_REG}, {"LEXITS", fun_dbwalker, 1, 1, FN_REG}, {"LFLAGS", fun_lflags, 0, 1, FN_REG}, ! {"LINK", fun_link, 2, 3, FN_REG}, {"LIST", fun_list, 1, 1, FN_REG}, {"LIT", fun_lit, 1, -1, FN_LITERAL}, {"LJUST", fun_ljust, 2, 3, FN_REG}, *************** *** 803,808 **** --- 803,810 ---- hashadd(name, (void *) func, &htab_function); } + static void delete_function(void*); + /** Initialize the function hash table. */ void *************** *** 811,817 **** FUNTAB *ftp; hashinit(&htab_function, 512, sizeof(FUN)); ! hashinit(&htab_user_function, 32, sizeof(FUN)); for (ftp = flist; ftp->name; ftp++) { function_add(ftp->name, ftp->fun, ftp->minargs, ftp->maxargs, ftp->flags); } --- 813,819 ---- FUNTAB *ftp; hashinit(&htab_function, 512, sizeof(FUN)); ! hash_init(&htab_user_function, 32, sizeof(FUN), delete_function); for (ftp = flist; ftp->name; ftp++) { function_add(ftp->name, ftp->fun, ftp->minargs, ftp->maxargs, ftp->flags); } *************** *** 1279,1285 **** --- 1281,1311 ---- } } + /** Free a @function pointer when it's removed from the hash table */ + static void + delete_function(void *data) + { + size_t table_index, i; + FUN *fp = data; + + table_index = fp->where.offset; + mush_free((void *) fp->name, "func_hash.name"); + mush_free(fp, "func_hash.FUN"); + /* Fix up the user function table. Expensive, but how often will + * we need to delete an @function anyway? + */ + mush_free((Malloc_t) userfn_tab[table_index].name, "userfn_tab.name"); + mush_free((Malloc_t) userfn_tab[table_index].fn, "usrfn_tab.fn"); + userfn_count--; + for (i = table_index; i < userfn_count; i++) { + fp = (FUN *) hashfind(userfn_tab[i + 1].fn, &htab_user_function); + fp->where.offset = i; + userfn_tab[i].thing = userfn_tab[i + 1].thing; + userfn_tab[i].name = userfn_tab[i + 1].name; + userfn_tab[i].fn = userfn_tab[i + 1].fn; + } + } /** Restore an overridden built-in function. * \verbatim * If a built-in function is deleted with @function/delete, it can be *************** *** 1294,1300 **** do_function_restore(dbref player, const char *name) { FUN *fp; - Size_t table_index, i; if (!Wizard(player)) { notify(player, T("Permission denied.")); --- 1320,1325 ---- *************** *** 1322,1351 **** notify(player, T("Restored.")); /* Delete any @function with the same name */ ! fp = (FUN *) hashfind(strupper(name), &htab_user_function); ! if (!fp) ! return; ! /* Remove it from the hash table */ ! hashdelete(fp->name, &htab_user_function); ! /* Free its memory */ ! table_index = fp->where.offset; ! mush_free((void *) fp->name, "func_hash.name"); ! mush_free(fp, "func_hash.FUN"); ! /* Fix up the user function table. Expensive, but how often will ! * we need to delete an @function anyway? ! */ ! mush_free((Malloc_t) userfn_tab[table_index].name, "userfn_tab.name"); ! mush_free((Malloc_t) userfn_tab[table_index].fn, "userfn_tab.fn"); ! userfn_count--; ! for (i = table_index; i < userfn_count; i++) { ! fp = (FUN *) hashfind(userfn_tab[i + 1].fn, &htab_user_function); ! fp->where.offset = i; ! userfn_tab[i].thing = userfn_tab[i + 1].thing; ! userfn_tab[i].name = mush_strdup(userfn_tab[i + 1].name, "userfn_tab.name"); ! mush_free((Malloc_t) userfn_tab[i + 1].name, "userfn_tab.name"); ! userfn_tab[i].fn = mush_strdup(userfn_tab[i + 1].fn, "userfn_tab.fn"); ! mush_free((Malloc_t) userfn_tab[i + 1].fn, "userfn_tab.fn"); ! } } /** Delete a function. --- 1347,1353 ---- notify(player, T("Restored.")); /* Delete any @function with the same name */ ! hashdelete(strupper(name), &htab_user_function); } /** Delete a function. *************** *** 1363,1369 **** * For security, you must control the object the function uses * to delete the function. */ - Size_t table_index, i; FUN *fp; if (!Global_Funcs(player)) { --- 1365,1370 ---- *************** *** 1385,1415 **** return; } ! table_index = fp->where.offset; ! if (!controls(player, userfn_tab[table_index].thing)) { notify(player, T("You can't delete that @function.")); return; } /* Remove it from the hash table */ hashdelete(fp->name, &htab_user_function); - /* Free its memory */ - mush_free((void *) fp->name, "func_hash.name"); - mush_free(fp, "func_hash.FUN"); - /* Fix up the user function table. Expensive, but how often will - * we need to delete an @function anyway? - */ - mush_free((Malloc_t) userfn_tab[table_index].name, "userfn_tab.name"); - mush_free((Malloc_t) userfn_tab[table_index].fn, "userfn_tab.fn"); - userfn_count--; - for (i = table_index; i < userfn_count; i++) { - fp = (FUN *) hashfind(userfn_tab[i + 1].fn, &htab_user_function); - fp->where.offset = i; - userfn_tab[i].thing = userfn_tab[i + 1].thing; - userfn_tab[i].name = mush_strdup(userfn_tab[i + 1].name, "userfn_tab.name"); - mush_free((Malloc_t) userfn_tab[i + 1].name, "userfn_tab.name"); - userfn_tab[i].fn = mush_strdup(userfn_tab[i + 1].fn, "userfn_tab.fn"); - mush_free((Malloc_t) userfn_tab[i + 1].fn, "userfn_tab.fn"); - } notify(player, T("Function deleted.")); } --- 1386,1397 ---- return; } ! if (!controls(player, userfn_tab[fp->where.offset].thing)) { notify(player, T("You can't delete that @function.")); return; } /* Remove it from the hash table */ hashdelete(fp->name, &htab_user_function); notify(player, T("Function deleted.")); } Index: src/bsd.c =================================================================== *** src/bsd.c (.../trunk) (revision 1) --- src/bsd.c (.../tags/181p10) (revision 29) *************** *** 27,33 **** #define EINTR WSAEINTR #define EWOULDBLOCK WSAEWOULDBLOCK #define MAXHOSTNAMELEN 32 - #define LC_MESSAGES 6 #pragma warning( disable : 4761) /* disable warning re conversion */ #else /* !WIN32 */ #ifdef I_SYS_FILE --- 27,32 ---- *************** *** 74,83 **** #include #endif #include - #ifdef __APPLE__ - #define LC_MESSAGES 6 - #define AUTORESTART - #endif #include #include "conf.h" --- 73,78 ---- *************** *** 467,476 **** --- 462,475 ---- do_rawlog(LT_ERR, "Failed to set time locale from environment."); else do_rawlog(LT_ERR, "Setting time locale to %s", loc); + #ifdef LC_MESSAGES if ((loc = setlocale(LC_MESSAGES, "")) == NULL) do_rawlog(LT_ERR, "Failed to set messages locale from environment."); else do_rawlog(LT_ERR, "Setting messages locale to %s", loc); + #else + do_rawlog(LT_ERR, "No support for message locale."); + #endif if ((loc = setlocale(LC_COLLATE, "")) == NULL) do_rawlog(LT_ERR, "Failed to set collate locale from environment."); else *************** *** 602,610 **** #endif WSACleanup(); /* clean up */ #else - #ifdef __APPLE__ - unlink("runid"); - #endif exit(0); #endif } --- 601,606 ---- *************** *** 3674,3680 **** if (strlen(message) >= DOING_LEN) { notify_format(player, T("Doing set. %d characters lost."), ! strlen(message) - (DOING_LEN - 1)); } else notify(player, T("Doing set.")); } --- 3670,3676 ---- if (strlen(message) >= DOING_LEN) { notify_format(player, T("Doing set. %d characters lost."), ! (int)strlen(message) - (DOING_LEN - 1)); } else notify(player, T("Doing set.")); } *************** *** 3721,3727 **** poll_msg[DOING_LEN - 1] = 0; notify_format(player, T("Poll set to '%s'. %d characters lost."), poll_msg, ! strlen(message) - (DOING_LEN - 1)); } else notify_format(player, T("Poll set to: %s"), poll_msg); do_log(LT_WIZ, player, NOTHING, T("Poll Set to '%s'."), poll_msg); --- 3717,3723 ---- poll_msg[DOING_LEN - 1] = 0; notify_format(player, T("Poll set to '%s'. %d characters lost."), poll_msg, ! (int)strlen(message) - (DOING_LEN - 1)); } else notify_format(player, T("Poll set to: %s"), poll_msg); do_log(LT_WIZ, player, NOTHING, T("Poll Set to '%s'."), poll_msg); Index: src/boolexp.c =================================================================== *** src/boolexp.c (.../trunk) (revision 1) --- src/boolexp.c (.../tags/181p10) (revision 29) *************** *** 588,594 **** dbref mydb; r = 0; ! a = atr_get(target, bytecode + arg); if (!a) break; --- 588,594 ---- dbref mydb; r = 0; ! a = atr_get(target, (char *)bytecode + arg); if (!a) break; Index: src/funstr.c =================================================================== *** src/funstr.c (.../trunk) (revision 1) --- src/funstr.c (.../tags/181p10) (revision 29) *************** *** 29,42 **** #ifdef WIN32 - #define LC_MESSAGES 6 #pragma warning( disable : 4761) /* NJG: disable warning re conversion */ #endif - #ifdef __APPLE__ - #define LC_MESSAGES 6 - #endif - HASHTAB htab_tag; /**< Hash table of safe html tags */ #define MAX_COLS 32 /**< Maximum number of columns for align() */ --- 29,37 ---- *************** *** 103,109 **** init_pronouns(void) { int translate = 0; ! #ifdef HAS_SETLOCALE char *loc; if ((loc = setlocale(LC_MESSAGES, NULL))) { if (strcmp(loc, "C") && strncmp(loc, "en", 2)) --- 98,104 ---- init_pronouns(void) { int translate = 0; ! #if defined(HAS_SETLOCALE) && defined(LC_MESSAGES) char *loc; if ((loc = setlocale(LC_MESSAGES, NULL))) { if (strcmp(loc, "C") && strncmp(loc, "en", 2)) Index: src/sig.c =================================================================== *** src/sig.c (.../trunk) (revision 1) --- src/sig.c (.../tags/181p10) (revision 29) *************** *** 124,129 **** --- 124,137 ---- sigset_t mask; sigfillset(&mask); sigprocmask(SIG_BLOCK, &mask, NULL); + #elif defined(WIN32) + /* The only signals Windows knows about */ + signal(SIGABRT, SIG_IGN); + signal(SIGFPE, SIG_IGN); + signal(SIGILL, SIG_IGN); + signal(SIGINT, SIG_IGN); + signal(SIGSEGV, SIG_IGN); + signal(SIGTERM, SIG_IGN); #else int i; for (i = 0; i < NSIG; i++) Index: src/cmdlocal.dst =================================================================== *** src/cmdlocal.dst (.../trunk) (revision 1) --- src/cmdlocal.dst (.../tags/181p10) (revision 29) *************** *** 65,71 **** * Command parsing modifiers, a bitmask (see hdrs/command.h) * Flags to restrict command to, a string ("WIZARD ROYALTY") or NULL * (Someone with *any* one of these flags can use the command) ! * Powers to restrict command to, a bitmask (see hdrs/flags.h) or 0 * (Someone with this power can use the command) * Switches the command can take, a string or NULL ("NOISY NOEVAL") * Hardcoded function the command should call (cmd_local_silly) --- 65,71 ---- * Command parsing modifiers, a bitmask (see hdrs/command.h) * Flags to restrict command to, a string ("WIZARD ROYALTY") or NULL * (Someone with *any* one of these flags can use the command) ! * Powers to restrict command to, a string ("SEE_ALL") or NULL * (Someone with this power can use the command) * Switches the command can take, a string or NULL ("NOISY NOEVAL") * Hardcoded function the command should call (cmd_local_silly) *************** *** 74,80 **** local_commands(void) { #ifdef EXAMPLE ! command_add("@SILLY", CMD_T_ANY, "WIZARD ROYALTY", SEE_ALL, "NOISY NOEVAL", cmd_local_silly); #endif } --- 74,80 ---- local_commands(void) { #ifdef EXAMPLE ! command_add("@SILLY", CMD_T_ANY, "WIZARD ROYALTY", "SEE_ALL", "NOISY NOEVAL", cmd_local_silly); #endif } Index: src/flags.c =================================================================== *** src/flags.c (.../trunk) (revision 1) --- src/flags.c (.../tags/181p10) (revision 29) *************** *** 632,638 **** FLAG *f; FLAGSPACE *n; char alias[BUFFER_LEN]; ! int count; if (!(globals.indb_flags & DBF_LABELS)) { flag_read_all_oldstyle(in, ns); --- 632,638 ---- FLAG *f; FLAGSPACE *n; char alias[BUFFER_LEN]; ! int count, found = 0; if (!(globals.indb_flags & DBF_LABELS)) { flag_read_all_oldstyle(in, ns); *************** *** 646,661 **** /* If we are reading flags from the db, they are definitive. */ clear_all_flags(n); db_read_this_labeled_number(in, "flagcount", &count); ! for (; count > 0; count--) { if ((f = flag_read(in))) flag_add(n, f->name, f); } /* Assumes we'll always have at least one alias */ ! db_read_this_labeled_number(in, "flagaliascount", &count); ! for (; count > 0; count--) { if ((f = flag_alias_read(in, alias, n))) flag_add(n, alias, f); } flag_add_additional(n); } --- 646,692 ---- /* If we are reading flags from the db, they are definitive. */ clear_all_flags(n); db_read_this_labeled_number(in, "flagcount", &count); ! for (;;) { ! int c; ! ! c = fgetc(in); ! ungetc(c, in); ! ! if (c != ' ') ! break; ! ! found++; ! if ((f = flag_read(in))) flag_add(n, f->name, f); } + + if (found != count) + do_rawlog(LT_ERR, + T("WARNING: Actual number of flags (%d) different than expected count (%d)."), + found, count); + /* Assumes we'll always have at least one alias */ ! db_read_this_labeled_number(in, "flagaliascount", &count); ! for (found = 0 ;;) { ! int c; ! ! c = fgetc(in); ! ungetc(c, in); ! ! if (c != ' ') ! break; ! ! found++; ! if ((f = flag_alias_read(in, alias, n))) flag_add(n, alias, f); } + if (found != count) + do_rawlog(LT_ERR, + T("WARNING: Actual number of flag aliases (%d) different than expected count (%d)."), + found, count); + flag_add_additional(n); } *************** *** 1386,1392 **** } for (i = 0; i < n->flagbits; i++) { if ((f = n->flags[i])) { ! if (has_flag_ns(n, thing, f) && Can_See_Flag(player, thing, f)) *p++ = f->letter; } } --- 1417,1424 ---- } for (i = 0; i < n->flagbits; i++) { if ((f = n->flags[i])) { ! if (has_flag_ns(n, thing, f) && Can_See_Flag(player, thing, f) ! && f->letter) *p++ = f->letter; } } Index: src/htab.c =================================================================== *** src/htab.c (.../trunk) (revision 1) --- src/htab.c (.../tags/181p10) (revision 29) *************** *** 154,160 **** * \param data_size size of an individual datum to store in the table. */ void ! hash_init(HASHTAB *htab, int size, int data_size) { int i; --- 154,160 ---- * \param data_size size of an individual datum to store in the table. */ void ! hash_init(HASHTAB *htab, int size, int data_size, void (*free_data)(void*)) { int i; *************** *** 166,171 **** --- 166,172 ---- htab->buckets[i] = NULL; htab->entry_size = data_size; + htab->free_data = free_data; } /** Return a hashtable entry given a key. *************** *** 372,377 **** --- 373,380 ---- else last->next = hptr->next; mush_free(hptr->key, "hash_key"); + if (htab->free_data) + htab->free_data(hptr->data); mush_free(hptr, "hash_entry"); htab->entries--; return; *************** *** 399,404 **** --- 402,409 ---- thent = hent; hent = hent->next; mush_free(thent->key, "hash_key"); + if (htab->free_data) + htab->free_data(thent->data); mush_free(thent, "hash_entry"); } htab->buckets[i] = NULL; Index: src/plyrlist.c =================================================================== *** src/plyrlist.c (.../trunk) (revision 1) --- src/plyrlist.c (.../tags/181p10) (revision 29) *************** *** 28,38 **** static int hft_initialized = 0; static void init_hft(void); static void init_hft(void) { ! hashinit(&htab_player_list, 256, sizeof(dbref)); hft_initialized = 1; } --- 28,47 ---- static int hft_initialized = 0; static void init_hft(void); + static void delete_dbref(void*); + + /** Free a player_dbref struct. */ + static void + delete_dbref(void *data) + { + mush_free(data, "plyrlist.entry"); + } + static void init_hft(void) { ! hash_init(&htab_player_list, 256, sizeof(dbref), delete_dbref); hft_initialized = 1; } *************** *** 42,48 **** { if (hft_initialized) hashflush(&htab_player_list, 256); ! else init_hft(); } --- 51,57 ---- { if (hft_initialized) hashflush(&htab_player_list, 256); ! else init_hft(); } *************** *** 53,61 **** void add_player(dbref player) { if (!hft_initialized) init_hft(); ! hashadd(strupper(Name(player)), (void *) player, &htab_player_list); } /** Add a player's alias list to the player list htab. --- 62,75 ---- void add_player(dbref player) { + dbref *p; if (!hft_initialized) init_hft(); ! p = mush_malloc(sizeof *p, "plyrlist.entry"); ! if (!p) ! mush_panic(T("Unable to allocate memory in plyrlist!")); ! *p = player; ! hashadd(strupper(Name(player)), p, &htab_player_list); } /** Add a player's alias list to the player list htab. *************** *** 80,87 **** sp = split_token(&s, ALIAS_DELIMITER); while (sp && *sp && *sp == ' ') sp++; ! if (sp && *sp) ! hashadd(strupper(sp), (void *) player, &htab_player_list); } } --- 94,107 ---- sp = split_token(&s, ALIAS_DELIMITER); while (sp && *sp && *sp == ' ') sp++; ! if (sp && *sp) { ! dbref *p; ! p = mush_malloc(sizeof *p, "plyrlist.entry"); ! if (!p) ! mush_panic(T("Unable to allocate memory in plyrlist!")); ! *p = player; ! hashadd(strupper(sp), p, &htab_player_list); ! } } } *************** *** 115,132 **** dbref lookup_player_name(const char *name) { ! void *hval; ! hval = hashfind(strupper(name), &htab_player_list); ! if (!hval) return NOTHING; ! return (dbref) hval; ! /* By the way, there's a flaw in this code. If #0 was a player, we'd ! * hash its name with a dbref of (void *)0, aka NULL, so we'd never ! * be able to retrieve that player. However, we assume that #0 will ! * always be the base room, and never a player, so that's ok. ! * Nathan Baum offered a fix (hash the value + 1 and subtract 1 on ! * lookup) but we (foolishly?) cling to our assumption and don't bother. ! */ } --- 135,145 ---- dbref lookup_player_name(const char *name) { ! dbref *p; ! p = hashfind(strupper(name), &htab_player_list); ! if (!p) return NOTHING; ! return *p; } Index: src/lock.c =================================================================== *** src/lock.c (.../trunk) (revision 1) --- src/lock.c (.../tags/181p10) (revision 29) *************** *** 845,850 **** --- 845,851 ---- char e0[SBUF_LEN], e1[SBUF_LEN], *ep; char *preserves[10]; int result; + boolexp b; if (env0 != NOTHING) { ep = e0; *************** *** 863,869 **** save_global_env("eval_lock_save", preserves); restore_global_env("eval_lock", myenv); ! boolexp b = getlock(thing, ltype); log_activity(LA_LOCK, thing, unparse_boolexp(player, b, UB_DBREF)); result = eval_boolexp(player, b, thing); restore_global_env("eval_lock_save", preserves); --- 864,870 ---- save_global_env("eval_lock_save", preserves); restore_global_env("eval_lock", myenv); ! b = getlock(thing, ltype); log_activity(LA_LOCK, thing, unparse_boolexp(player, b, UB_DBREF)); result = eval_boolexp(player, b, thing); restore_global_env("eval_lock_save", preserves); Index: src/look.c =================================================================== *** src/look.c (.../trunk) (revision 1) --- src/look.c (.../tags/181p10) (revision 29) *************** *** 1396,1402 **** { static char value[BUFFER_LEN]; char *ptr, *s, *codestart; ! char ansi_letter; int len; int dospace; int flag_depth, ansi_depth; --- 1396,1402 ---- { static char value[BUFFER_LEN]; char *ptr, *s, *codestart; ! char ansi_letter = '\0'; int len; int dospace; int flag_depth, ansi_depth; *************** *** 1414,1420 **** #ifdef NEVER /* Put a \ at the beginning if it won't already be put there, * unless it's a space, which would require %b, %r, or %t anyway */ ! if (!escaped_chars[(unsigned int) *what] && !isspace(*what)) { safe_chr('\\', value, &s); } #endif --- 1414,1420 ---- #ifdef NEVER /* Put a \ at the beginning if it won't already be put there, * unless it's a space, which would require %b, %r, or %t anyway */ ! if (!escaped_chars[(unsigned int) *what] && !isspace((unsigned char)*what)) { safe_chr('\\', value, &s); } #endif Index: src/command.c =================================================================== *** src/command.c (.../trunk) (revision 1) --- src/command.c (.../tags/181p10) (revision 29) *************** *** 941,946 **** --- 941,947 ---- replacer = "@CHAT"; noevtoken = 1; } + break; case NUMBER_TOKEN: /* parse_force() destructively modifies the command to replace * the first space with a '=' if the command is an actual Index: src/help.c =================================================================== *** src/help.c (.../trunk) (revision 1) --- src/help.c (.../tags/181p10) (revision 29) *************** *** 82,88 **** void init_help_files(void) { ! hash_init(&help_files, 8, sizeof(help_file)); help_init = 1; } --- 82,88 ---- void init_help_files(void) { ! hash_init(&help_files, 8, sizeof(help_file), NULL); help_init = 1; } *************** *** 98,112 **** add_help_file(const char *command_name, const char *filename, int admin) { help_file *h; - char newfilename[256] = "\0"; - - /* Must use a buffer for MacOS file path conversion */ - strncpy(newfilename, filename, 256); if (help_init == 0) init_help_files(); ! if (!command_name || !filename || !*command_name || !*newfilename) return; /* If there's already an entry for it, complain */ --- 98,108 ---- add_help_file(const char *command_name, const char *filename, int admin) { help_file *h; if (help_init == 0) init_help_files(); ! if (!command_name || !filename || !*command_name || !*filename) return; /* If there's already an entry for it, complain */ *************** *** 118,124 **** h = mush_malloc(sizeof *h, "help_file.entry"); h->command = mush_strdup(strupper(command_name), "help_file.command"); ! h->file = mush_strdup(newfilename, "help_file.filename"); h->entries = 0; h->indx = NULL; h->admin = admin; --- 114,120 ---- h = mush_malloc(sizeof *h, "help_file.entry"); h->command = mush_strdup(strupper(command_name), "help_file.command"); ! h->file = mush_strdup(filename, "help_file.filename"); h->entries = 0; h->indx = NULL; h->admin = admin; Index: game/txt/hlp/pennchat.hlp =================================================================== *** game/txt/hlp/pennchat.hlp (.../trunk) (revision 1) --- game/txt/hlp/pennchat.hlp (.../tags/181p10) (revision 29) *************** *** 347,352 **** & Channel functions Channel functions work with the channel system. ! cbuffer() cdesc() cemit() cflags() channels() clflags() clock() cmsgs() cowner() crecall() cstatus() ctitle() cusers() cwho() --- 347,352 ---- & Channel functions Channel functions work with the channel system. ! cbuffer() cdesc() cemit() cflags() channels() clflags() clock() cmsgs() cowner() crecall() cstatus() ctitle() cusers() cwho() Index: game/txt/hlp/index.hlp =================================================================== *** game/txt/hlp/index.hlp (.../trunk) (revision 1) --- game/txt/hlp/index.hlp (.../tags/181p10) (revision 29) *************** *** 4,300 **** " #lambda $-commands $-commands2 % %! %# %2 %3 ! %4 %: %n ! %~ + 1.50p6 ! 1.50p7 1.50p8 1.50p9 ! 1.50p10 1.50p11 1.50p12 ! 1.50p13 1.50p14 1.50pdune1 ! 1.50pdune2 1.6.0p0 1.6.0p3 ! 1.6.0p4 1.6.0p5 1.6.1p0 ! 1.6.1p1 1.6.10p0 1.6.10p1 ! 1.6.10p2 1.6.10p3 1.6.10p4 ! 1.6.10p5 1.6.10p6 1.6.2p0 ! 1.6.2p1 1.6.3p0 1.6.3p1 ! 1.6.3p2 1.6.3p3 1.6.3p4 ! 1.6.3p5 1.6.3p6 1.6.3p7 For more, see Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.6.4p0 1.6.4p1 1.6.4p2 ! 1.6.5p0 1.6.5p1 1.6.5p2 ! 1.6.5p3 1.6.5p4 1.6.6p0 ! 1.6.7p0 1.6.7p1 1.6.7p2 ! 1.6.7p3 1.6.7p4 1.6.7p5 ! 1.6.7p6 1.6.8p0 1.6.8p1 ! 1.6.9p0 1.6.9p1 1.6.9p2 ! 1.6.9p3 1.6.9p4 1.6.9p5 ! 1.6.9p6 1.6.9p7 1.6.9p8 ! 1.6.9p9 1.7.0p0 1.7.0p1 ! 1.7.0p2 1.7.0p3 1.7.0p4 ! 1.7.0p5 1.7.0p6 1.7.0p7 ! 1.7.0p8 1.7.0p9 1.7.0p10 ! 1.7.0p11 1.7.1p0 1.7.1p1 ! 1.7.1p2 1.7.1p3 1.7.2p0 ! 1.7.2p1 1.7.2p2 1.7.2p3 For more, see Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.7.2p4 1.7.2p5 1.7.2p6 ! 1.7.2p7 1.7.2p8 1.7.2p9 ! 1.7.2p10 1.7.2p11 1.7.2p12 ! 1.7.2p13 1.7.2p14 1.7.2p15 ! 1.7.2p16 1.7.2p17 1.7.2p18 ! 1.7.2p19 1.7.2p20 1.7.2p21 ! 1.7.2p22 1.7.2p23 1.7.2p24 ! 1.7.2p25 1.7.2p26 1.7.2p27 ! 1.7.2p28 1.7.2p29 1.7.2p30 ! 1.7.2p31 1.7.2p32 1.7.2p33 ! 1.7.2p34 1.7.2p35 1.7.3p0 ! 1.7.3p1 1.7.3p2 1.7.3p3 ! 1.7.3p4 1.7.3p5 1.7.3p6 ! 1.7.3p7 1.7.3p8 1.7.3p9 ! 1.7.3p10 1.7.3p11 1.7.3p12 ! 1.7.3p13 1.7.3p14 1.7.4p0 For more, see Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.7.4p1 1.7.4p2 1.7.4p3 ! 1.7.4p4 1.7.4p5 1.7.4p6 ! 1.7.4p7 1.7.4p8 1.7.4p9 ! 1.7.4p10 1.7.4p11 1.7.4p12 ! 1.7.4p13 1.7.4p14 1.7.4p15 ! 1.7.4p16 1.7.4p17 1.7.4p18 ! 1.7.4p19 1.7.4p20 1.7.5p0 ! 1.7.5p1 1.7.5p2 1.7.5p3 ! 1.7.5p4 1.7.5p5 1.7.5p6 ! 1.7.5p7 1.7.5p8 1.7.5p9 ! 1.7.5p10 1.7.5p11 1.7.5p12 ! 1.7.6p0 1.7.6p1 1.7.6p2 ! 1.7.6p3 1.7.6p4 1.7.6p5 ! 1.7.6p6 1.7.6p7 1.7.6p8 ! 1.7.6p9 1.7.6p10 1.7.6p11 ! 1.7.6p12 1.7.6p13 1.7.6p14 For more, see Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.7.6p15 1.7.6p16 1.7.7p0 ! 1.7.7p1 1.7.7p2 1.7.7p3 ! 1.7.7p4 1.7.7p5 1.7.7p6 ! 1.7.7p7 1.7.7p8 1.7.7p9 ! 1.7.7p10 1.7.7p11 1.7.7p12 ! 1.7.7p13 1.7.7p14 1.7.7p15 ! 1.7.7p16 1.7.7p17 1.7.7p18 ! 1.7.7p19 1.7.7p20 1.7.7p21 ! 1.7.7p22 1.7.7p23 1.7.7p24 ! 1.7.7p25 1.7.7p26 1.7.7p27 ! 1.7.7p28 1.7.7p29 1.7.7p30 ! 1.7.7p31 1.7.7p32 1.7.7p33 ! 1.7.7p34 1.7.7p35 1.7.7p36 ! 1.7.7p37 1.7.7p38 1.7.7p39 ! 1.7.7p40 1.8.0p0 1.8.0p1 ! 1.8.0p2 1.8.0p3 1.8.0p4 For more, see Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.8.0p5 1.8.0p6 1.8.0p7 ! 1.8.0p8 1.8.0p9 1.8.0p10 ! 1.8.0p11 1.8.1p0 1.8.1p1 1.8.1p2 1.8.1p3 1.8.1p4 ! 1.8.1p5 1.8.1p6 : ! ; @-attributes @-building ! @-general @-wizard @@ ! @@() @aahear @abuy ! @aclone @aconnect @adeath ! @adescribe @adestroy @adisconnect ! @adrop @aefail @aenter ! @afailure @afollow @agive ! @ahear @aidescribe @aleave ! @alfail @alias @allhalt ! @allquota @amhear @amove ! @apayment @areceive @assert For more, see Entries-7 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-7 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @asuccess @atport @atrchown ! @atrlock @attribute @aufail ! @aunfollow @ause @away ! @azenter @azleave @boot ! @break @buy @cemit ! @channel @channel2 @channel3 ! @channel4 @channel5 @charges ! @chat @chown @chownall ! @chzone @chzone2 @chzoneall ! @clock @clock2 @clone ! @command @command2 @command3 ! @comment @config @config attribs ! @config chat @config cmds @config cosmetic ! @config cosmetic2 @config costs @config db ! @config dump @config funcs @config limits ! @config limits2 @config limits3 @config log For more, see Entries-8 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-8 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- @config net @config parameters @config tiny @conformat @cost @cpattr @create @dbck @death ! @decompile @decompile2 @decompile3 ! @descformat @describe @destroy ! @destroy2 @dig @dig2 ! @disable @doing @dolist ! @drain @drop @dump ! @ealias @edit @efail ! @elock @emit @enable ! @enter @entrances @eunlock ! @exitformat @failure @filter ! @filter2 @find @firstexit ! @flag @flag2 @follow ! @force @force2 @forwardlist ! @function @function2 @function3 For more, see Entries-9 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-9 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @function4 @gedit @give ! @grep2 @grep @halt ! @haven @hide @hook ! @hook2 @idescformat @idescribe ! @idle @infilter @inprefix ! @invformat @kick @lalias ! @leave @lemit @lfail ! @link @list @listen ! @listen2 @listmotd @lock ! @lock10 @lock2 @lock3 ! @lock4 @lock5 @lock6 ! @lock7 @lock8 @lock9 ! @log @logwipe @lset ! @map2 @mail @mailfilter ! @mailforwardlist @malias @malias2 ! @malias3 @malias4 @malias5 For more, see Entries-10 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-10 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @map @motd @move ! @mvattr @name @nameaccent ! @nameformat @newpassword @notify ! @nscemit @nsemit @nslemit ! @nsoemit @nspemit @nsprompt ! @nsremit @nszemit @nuke ! @obuy @odeath @odescribe ! @odrop @oefail @oemit ! @oenter @ofailure @ofollow ! @ogive @oidescribe @oleave ! @olfail @omove @opayment ! @open @oreceive @osuccess ! @otport @oufail @ounfollow ! @ouse @oxenter @oxleave ! @oxmove @oxtport @ozenter ! @ozleave @parent @password For more, see Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @payment @pcreate @pemit ! @pemit2 @poll @poor ! @power @power2 @power3 ! @prefix @pricelist @prompt ! @ps @purge @quota ! @readcache @receive @recycle ! @rejectmotd @remit @restart ! @runout @rwall @scan ! @search @search2 @search3 ! @select @set @sex ! @shutdown @sitelock @sitelock2 ! @sitelock3 @sql @squota ! @startup @stats @success ! @sweep @switch @switch2 ! @teleport @tport @trigger ! @trigger2 @ufail @ulock For more, see Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @undestroy @unfollow @unlink ! @unlock @unrecycle @uptime ! @uptime2 @use @uunlock ! @verb @verb2 @verb3 ! @verb4 @version @vrml_url ! @wait @wait2 @wall ! @warnings @warnings2 @warnings3 ! @wcheck @whereis @wipe ! @wizmotd @wizwall @zemit ! @zenter @zleave \ ! ] ^ ` ! `2 `3 `4 ! abode abs() accent() ! accent2 accent3 accent4 ! accname() acos() action lists ! action2 add() after() For more, see Entries-13 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-13 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! ahelp alias() align() ! align2 allof() alphamax() ! alphamin() ancestors and() ! andflags() andlflags() anews ! anonymous attributes anonymous2 anonymous3 ! anonymous4 ansi ansi() ! aposs() art() asin() ! atan() atan2() atrlock() ! attr trees attr trees2 attr trees3 ! attr trees4 attrcnt() attrib trees ! attrib trees2 attrib trees3 attrib trees4 ! attrib-ownership attrib_set() attribute flags ! attribute flags2 attribute functions attribute list ! attribute trees attribute trees2 attribute trees3 ! attribute trees4 attributes attributes list ! attributes2 attributes3 attributes4 For more, see Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! attrpcnt() audible audible2 ! band() baseconv() beep() ! before() being killed bitwise functions ! bnand() bnot() boolean functions ! boolean values boolean2 boolean3 ! bor() bound() brackets() ! brief builder buy ! bxor() cand() capstr() ! case() caseall() cat() ! cbuffer() cd cdesc() ! ceil() cemit() center() ! cflags() ch chan_usefirstmatch ! changes channel functions channel-list ! channels() chat checkpass() ! children() chown_ok chr() ! clients clock() clone() For more, see Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- cloudy cmds() cmsgs() code color commands communication functions comp() comsys --- 4,304 ---- " #lambda $-commands $-commands2 % %! %# %2 %3 ! %4 %: %i ! %n %~ + ! 1.50p6 1.50p7 1.50p8 ! 1.50p9 1.50p10 1.50p11 ! 1.50p12 1.50p13 1.50p14 ! 1.50pdune1 1.50pdune2 1.6.0p0 ! 1.6.0p3 1.6.0p4 1.6.0p5 ! 1.6.1p0 1.6.1p1 1.6.10p0 ! 1.6.10p1 1.6.10p2 1.6.10p3 ! 1.6.10p4 1.6.10p5 1.6.10p6 ! 1.6.2p0 1.6.2p1 1.6.3p0 ! 1.6.3p1 1.6.3p2 1.6.3p3 ! 1.6.3p4 1.6.3p5 1.6.3p6 For more, see Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-2 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.6.3p7 1.6.4p0 1.6.4p1 ! 1.6.4p2 1.6.5p0 1.6.5p1 ! 1.6.5p2 1.6.5p3 1.6.5p4 ! 1.6.6p0 1.6.7p0 1.6.7p1 ! 1.6.7p2 1.6.7p3 1.6.7p4 ! 1.6.7p5 1.6.7p6 1.6.8p0 ! 1.6.8p1 1.6.9p0 1.6.9p1 ! 1.6.9p2 1.6.9p3 1.6.9p4 ! 1.6.9p5 1.6.9p6 1.6.9p7 ! 1.6.9p8 1.6.9p9 1.7.0p0 ! 1.7.0p1 1.7.0p2 1.7.0p3 ! 1.7.0p4 1.7.0p5 1.7.0p6 ! 1.7.0p7 1.7.0p8 1.7.0p9 ! 1.7.0p10 1.7.0p11 1.7.1p0 ! 1.7.1p1 1.7.1p2 1.7.1p3 ! 1.7.2p0 1.7.2p1 1.7.2p2 For more, see Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-3 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.7.2p3 1.7.2p4 1.7.2p5 ! 1.7.2p6 1.7.2p7 1.7.2p8 ! 1.7.2p9 1.7.2p10 1.7.2p11 ! 1.7.2p12 1.7.2p13 1.7.2p14 ! 1.7.2p15 1.7.2p16 1.7.2p17 ! 1.7.2p18 1.7.2p19 1.7.2p20 ! 1.7.2p21 1.7.2p22 1.7.2p23 ! 1.7.2p24 1.7.2p25 1.7.2p26 ! 1.7.2p27 1.7.2p28 1.7.2p29 ! 1.7.2p30 1.7.2p31 1.7.2p32 ! 1.7.2p33 1.7.2p34 1.7.2p35 ! 1.7.3p0 1.7.3p1 1.7.3p2 ! 1.7.3p3 1.7.3p4 1.7.3p5 ! 1.7.3p6 1.7.3p7 1.7.3p8 ! 1.7.3p9 1.7.3p10 1.7.3p11 ! 1.7.3p12 1.7.3p13 1.7.3p14 For more, see Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-4 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.7.4p0 1.7.4p1 1.7.4p2 ! 1.7.4p3 1.7.4p4 1.7.4p5 ! 1.7.4p6 1.7.4p7 1.7.4p8 ! 1.7.4p9 1.7.4p10 1.7.4p11 ! 1.7.4p12 1.7.4p13 1.7.4p14 ! 1.7.4p15 1.7.4p16 1.7.4p17 ! 1.7.4p18 1.7.4p19 1.7.4p20 ! 1.7.5p0 1.7.5p1 1.7.5p2 ! 1.7.5p3 1.7.5p4 1.7.5p5 ! 1.7.5p6 1.7.5p7 1.7.5p8 ! 1.7.5p9 1.7.5p10 1.7.5p11 ! 1.7.5p12 1.7.6p0 1.7.6p1 ! 1.7.6p2 1.7.6p3 1.7.6p4 ! 1.7.6p5 1.7.6p6 1.7.6p7 ! 1.7.6p8 1.7.6p9 1.7.6p10 ! 1.7.6p11 1.7.6p12 1.7.6p13 For more, see Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-5 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.7.6p14 1.7.6p15 1.7.6p16 ! 1.7.7p0 1.7.7p1 1.7.7p2 ! 1.7.7p3 1.7.7p4 1.7.7p5 ! 1.7.7p6 1.7.7p7 1.7.7p8 ! 1.7.7p9 1.7.7p10 1.7.7p11 ! 1.7.7p12 1.7.7p13 1.7.7p14 ! 1.7.7p15 1.7.7p16 1.7.7p17 ! 1.7.7p18 1.7.7p19 1.7.7p20 ! 1.7.7p21 1.7.7p22 1.7.7p23 ! 1.7.7p24 1.7.7p25 1.7.7p26 ! 1.7.7p27 1.7.7p28 1.7.7p29 ! 1.7.7p30 1.7.7p31 1.7.7p32 ! 1.7.7p33 1.7.7p34 1.7.7p35 ! 1.7.7p36 1.7.7p37 1.7.7p38 ! 1.7.7p39 1.7.7p40 1.8.0p0 ! 1.8.0p1 1.8.0p2 1.8.0p3 For more, see Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-6 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! 1.8.0p4 1.8.0p5 1.8.0p6 ! 1.8.0p7 1.8.0p8 1.8.0p9 ! 1.8.0p10 1.8.0p11 1.8.0p12 ! 1.8.0p13 1.8.1p0 1.8.1p1 1.8.1p2 1.8.1p3 1.8.1p4 ! 1.8.1p5 1.8.1p6 1.8.1p7 ! 1.8.1p8 1.8.1p9 1.8.1p10 ! : ; @-attributes ! @-building @-general @-wizard ! @@ @@() @aahear ! @abuy @aclone @aconnect ! @adeath @adescribe @adestroy ! @adisconnect @adrop @aefail ! @aenter @afailure @afollow ! @agive @ahear @aidescribe ! @aleave @alfail @alias For more, see Entries-7 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-7 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @allhalt @allquota @amhear ! @amove @apayment @areceive ! @assert @asuccess @atport ! @atrchown @atrlock @attribute ! @aufail @aunfollow @ause ! @away @azenter @azleave ! @boot @break @buy ! @cemit @channel @channel2 ! @channel3 @channel4 @channel5 ! @charges @chat @chown ! @chownall @chzone @chzone2 ! @chzoneall @clock @clock2 ! @clone @command @command2 ! @command3 @comment @config ! @config attribs @config chat @config cmds ! @config cosmetic @config cosmetic2 @config costs For more, see Entries-8 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-8 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + @config db @config dump @config flags + @config funcs @config limits @config limits2 + @config limits3 @config limits4 @config log @config net @config parameters @config tiny @conformat @cost @cpattr @create @dbck @death ! @debugforwardlist @decompile @decompile2 ! @decompile3 @descformat @describe ! @destroy @destroy2 @dig ! @dig2 @disable @doing ! @dolist @drain @drop ! @dump @ealias @edit ! @efail @elock @emit ! @enable @enter @entrances ! @eunlock @exitformat @failure ! @filter @filter2 @find For more, see Entries-9 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-9 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @firstexit @flag @flag2 ! @follow @force @force2 ! @forwardlist @function @function2 ! @function3 @function4 @gedit ! @give @grep2 @grep ! @halt @haven @hide ! @hook @hook2 @idescformat ! @idescribe @idle @infilter ! @inprefix @invformat @kick ! @lalias @leave @lemit ! @lfail @link @list ! @listen @listen2 @listmotd ! @lock @lock10 @lock2 ! @lock3 @lock4 @lock5 ! @lock6 @lock7 @lock8 ! @lock9 @log @logwipe For more, see Entries-10 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-10 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @lset @map2 @mail ! @mailfilter @mailforwardlist @malias ! @malias2 @malias3 @malias4 ! @malias5 @map @motd ! @move @mvattr @name ! @nameaccent @nameformat @newpassword ! @notify @nscemit @nsemit ! @nslemit @nsoemit @nspemit ! @nsprompt @nsremit @nszemit ! @nuke @obuy @odeath ! @odescribe @odrop @oefail ! @oemit @oenter @ofailure ! @ofollow @ogive @oidescribe ! @oleave @olfail @omove ! @opayment @open @oreceive ! @osuccess @otport @oufail For more, see Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-11 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @ounfollow @ouse @oxenter ! @oxleave @oxmove @oxtport ! @ozenter @ozleave @parent ! @password @payment @pcreate ! @pemit @pemit2 @poll ! @poor @power @power2 ! @power3 @prefix @pricelist ! @prompt @ps @purge ! @quota @readcache @receive ! @recycle @rejectmotd @remit ! @restart @runout @rwall ! @scan @search @search2 ! @search3 @select @set ! @sex @shutdown @sitelock ! @sitelock2 @sitelock3 @sql ! @squota @startup @stats For more, see Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-12 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! @success @sweep @switch ! @switch2 @teleport @tport ! @trigger @trigger2 @ufail ! @ulock @undestroy @unfollow ! @unlink @unlock @unrecycle ! @uptime @uptime2 @use ! @uunlock @verb @verb2 ! @verb3 @verb4 @version ! @vrml_url @wait @wait2 ! @wall @warnings @warnings2 ! @warnings3 @wcheck @whereis ! @wipe @wizmotd @wizwall ! @zemit @zenter @zleave ! \ ] ^ ! ` `2 `3 ! `4 abode abs() For more, see Entries-13 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-13 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! accent() accent2 accent3 ! accent4 accname() acos() ! action lists action2 add() ! after() ahelp alias() ! align() align2 allof() ! alphamax() alphamin() ancestors ! and() andflags() andlflags() ! anews anonymous attributes anonymous2 ! anonymous3 anonymous4 ansi ! ansi() aposs() art() ! asin() atan() atan2() ! atrlock() attr trees attr trees2 ! attr trees3 attr trees4 attrcnt() ! attrib trees attrib trees2 attrib trees3 ! attrib trees4 attrib-ownership attrib_set() ! attribute flags attribute flags2 attribute flags3 For more, see Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-14 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! attribute functions attribute list attribute trees ! attribute trees2 attribute trees3 attribute trees4 ! attributes attributes list attributes2 ! attributes3 attributes4 attrpcnt() ! audible audible2 band() ! baseconv() beep() before() ! being killed bitwise functions bnand() ! bnot() boolean functions boolean values ! boolean2 boolean3 bor() ! bound() brackets() brief ! builder buy bxor() ! cand() capstr() case() ! caseall() cat() cbuffer() ! cd cdesc() ceil() ! cemit() center() cflags() ! ch chan_usefirstmatch changes For more, see Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-15 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + channel functions channel-list channels() + chat checkpass() children() + chown_ok chr() clflags() + clients clock() clone() cloudy cmds() cmsgs() code color commands communication functions comp() comsys *************** *** 304,510 **** convtime() convutcsecs() copyright copyrite cor() cos() costs cowner() create() ! credits cstatus() ctime() ! ctitle() ctu() cusers() ! cv cwho() dark ! dark2 database dbref # ! dbref functions dbref number dbref2 ! dbrefs debug debug2 ! dec() decompose() decrypt() For more, see Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! default() delete() desert ! destroy_ok die() dig() ! digest() dismiss dist2d() ! dist3d() div() doing ! doing() download drop ! drop-tos dynhelp() e() ! edefault() edit() element() ! elements() elist() elock() ! emit() empty enactor ! encrypt() endtag() enter ! enter_ok entrances() eq() ! escape() etimefmt() etimefmt2 ! etimefmt3 eval() evaluation order ! evaluation2 events examine ! executor exit() exits ! exits2 exp() extract() For more, see Entries-17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! failure fdiv() filter() ! filterbool() findable() first() ! firstof() fixed flag list ! flag permissions flags flags list ! flags() flags2 flip() ! floating floor() floordiv() ! fmod() fold() fold2 ! folderstats() follow followers() ! following() foreach() foreach2 ! fraction() fullalias() fullname() ! function list functions functions() ! functions2 gagged gender ! get get() get_eval() ! give global commands globals ! go going goto ! grab() graball() grep() For more, see Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! gt() gte() halt ! hasattr() hasattrp() hasattrpval() ! hasattrval() hasflag() haspower() ! hastype() haven heavy ! height() help here ! hidden() home home() ! homes host() hostname() ! html html functions html() ! i18n idle idle() ! idlesecs() if() ifelse() ! ilev() iname() inc() ! index index() info ! information functions inherit inherit2 ! insert() interiors interiors2 ! internationalization inum() inventory ! ipaddr() isdaylight() isdbref() For more, see Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! isint() isnum() isword() ! itemize() items() iter() ! iter2 itext() judge ! jump_ok jury_ok kill ! lambda last & lastlogout last() ! lastip lastsite lattr() ! lattrp() lcon() lcstr() ! ldelete() leave left() ! lemit() lexits() lflags() ! license light link() ! link_ok linking list functions ! list() listen_parent listening ! listening2 listening3 lists ! lit() ljust() llockflags() ! llocks() lmath() ln() ! lnum() loc() locale For more, see Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! localize() locate() locate2 ! lock list lock types lock types2 ! lock() lockflags() locking ! locklist locks locks() ! locktypes locktypes2 log() ! logout look look2 ! looping loud lparent() ! lplayers() lports() lpos() ! lsearch() lsearch2 lsearchr() ! lset() lstats() lt() ! lte() lthings() lvcon() ! lvexits() lvplayers() lvthings() ! lwho() macros macros2 ! mail mail functions mail() ! mail-admin mail-folders mail-forward ! mail-other mail-reading mail-sending For more, see Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! maildstats() mailfilter mailfrom() ! mailfstats() mailsend() mailstats() ! mailstatus() mailsubject() mailtime() ! malias() map() mapsql() ! mapsql2 master room match() ! matchall() matching math functions ! max() me mean() ! median() member() merge() ! mid() min() mistrust ! mix() mix2 mod() ! modulo() modulus() money ! money() monitor mortal ! move mtime() mudname() ! mul() munge() munge2 ! munge3 mushcode mushcode2 ! mwho() myopic name() For more, see Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! namegrab() namegraball() nand() ! nattr() nattrp() nchildren() ! ncon() nearby() neq() ! new locks newbie newbie2 ! newbie3 news nexits() ! next() nlsearch() nmwho() ! no_command no_leave no_tel ! no_warn noaccents noleave ! non-standard attributes noname nor() ! nospace nospoof not() ! nowarn nplayers() nsearch() ! nsemit() nslemit() nsoemit() ! nspemit() nsprompt() nsremit() ! nszemit() nthings() null() ! num() numversion() nvcon() ! nvexits() nvplayers() nvthings() For more, see Entries-23 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-23 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! nwho() obj() object parents ! objeval() objid() objmem() ! oemit() on-vacation opaque ! open() or() ord() ! ordinal() orflags() orlflags() ! orphan outputprefix outputsuffix ! owner() page page2 ! paranoid parent parent() ! parents parents2 parents3 ! parents4 parents5 parse() ! patchlevels pcreate() pemit() ! pi() pickrand() player ! playermem() pmatch() poll() ! ports() pos() pose ! pose2 poss() power() ! powers list powers list2 powers() For more, see Entries-24 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-24 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! powers2 prompt() prompt_newlines ! pueblo pueblo features pueblo() ! puppet puppets puppets2 ! queue quiet quit ! quota() r() r-function ! rand() randword() read ! recv() regedit() regeditall() ! regeditalli() regediti() regexp ! regexp classes regexp classes2 regexp examples ! regexp syntax regexp syntax2 regexp syntax3 ! regexp syntax4 regexp syntax5 regexp syntax6 ! regexp syntax7 regexp syntax8 regexps ! regexps2 registers registers2 ! regmatch() regmatchi() regrab() ! regraball() regraballi() regrabi() ! regrep() regular expression functions For more, see Entries-25 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-25 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- remainder() remit() remove() repeat() replace() rest() restarts() restarttime() restrict --- 308,516 ---- convtime() convutcsecs() copyright copyrite cor() cos() costs cowner() create() ! crecall() credits cstatus() ! ctime() ctitle() ctu() ! cusers() cv cwho() For more, see Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-16 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! dark dark2 database ! dbref # dbref functions dbref number ! dbref2 dbrefs debug ! debug2 dec() decompose() ! decrypt() default() delete() ! desert destroy_ok die() ! dig() digest() dismiss ! dist2d() dist3d() div() ! doing doing() download ! drop drop-tos dynhelp() ! e() edefault() edit() ! element() elements() elist() ! elock() emit() empty ! enactor encrypt() endtag() ! enter enter_ok entrances() ! eq() escape() etimefmt() For more, see Entries-17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-17 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! etimefmt2 etimefmt3 eval() ! evaluation order evaluation2 events ! examine executor exit() ! exits exits2 exp() ! extract() failure fdiv() ! filter() filterbool() findable() ! first() firstof() fixed ! flag list flag permissions flags ! flags list flags() flags2 ! flip() floating floor() ! floordiv() fmod() fold() ! fold2 folderstats() follow ! followers() following() foreach() ! foreach2 fraction() fullalias() ! fullname() function list functions ! functions() functions2 gagged For more, see Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-18 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! gender get get() ! get_eval() give global commands ! globals go going ! goto grab() graball() ! grep() grepi() gt() ! gte() halt hasattr() ! hasattrp() hasattrpval() hasattrval() ! hasflag() haspower() hastype() ! haven heavy height() ! here hidden() home ! home() homes host() ! hostname() html html functions ! html() i18n idle ! idle() idlesecs() if() ! ifelse() ilev() iname() ! inc() index index() For more, see Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-19 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! info information functions inherit ! inherit2 insert() interiors ! interiors2 internationalization inum() ! inventory ipaddr() isdaylight() ! isdbref() isint() isnum() ! isword() itemize() items() ! iter() iter2 itext() ! judge jump_ok jury_ok ! kill lambda last & lastlogout ! last() lastip lastsite ! lattr() lattrp() lcon() ! lcstr() ldelete() leave ! left() lemit() lexits() ! lflags() license light ! link() link_ok linking ! list functions list() listen_parent For more, see Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-20 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! listening listening2 listening3 ! lists lit() ljust() ! llockflags() llocks() lmath() ! ln() lnum() loc() ! locale localize() locate() ! locate2 lock list lock types ! lock types2 lock() lockflags() ! locking locklist locks ! locks() locktypes locktypes2 ! log() logout look ! look2 looping loud ! lparent() lplayers() lports() ! lpos() lsearch() lsearch2 ! lsearchr() lset() lstats() ! lt() lte() lthings() ! lvcon() lvexits() lvplayers() For more, see Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-21 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! lvthings() lwho() lwhoid() ! macros macros2 mail ! mail functions mail() mail-admin ! mail-folders mail-forward mail-other ! mail-reading mail-sending maildstats() ! mailfilter mailfrom() mailfstats() ! mailsend() mailstats() mailstatus() ! mailsubject() mailtime() malias() ! map() mapsql() mapsql2 ! master room match() matchall() ! matching math functions max() ! me mean() median() ! member() merge() mid() ! min() mistrust mix() ! mix2 mod() modulo() ! modulus() money money() For more, see Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-22 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! monitor mortal move ! mtime() mudname() mul() ! munge() munge2 munge3 ! mushcode mushcode2 mwho() ! mwhoid() myopic name() ! namegrab() namegraball() namelist() ! nand() nattr() nattrp() ! nchildren() ncon() nearby() ! neq() new locks newbie ! newbie2 newbie3 news ! nexits() next() nextdbref() ! nlsearch() nmwho() no_command ! no_leave no_tel no_warn ! noaccents noleave non-standard attributes ! noname nor() nospace ! nospoof not() nowarn For more, see Entries-23 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-23 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! nplayers() nsearch() nsemit() ! nslemit() nsoemit() nspemit() ! nsprompt() nsremit() nszemit() ! nthings() null() num() ! numversion() nvcon() nvexits() ! nvplayers() nvthings() nwho() ! obj() object parents objeval() ! objid() objmem() oemit() ! on-vacation opaque open() ! or() ord() ordinal() ! orflags() orlflags() orphan ! outputprefix outputsuffix owner() ! page page2 paranoid ! parent parent() parents ! parents2 parents3 parents4 ! parents5 parse() patchlevels For more, see Entries-24 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-24 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! pcreate() pemit() pi() ! pickrand() player playermem() ! pmatch() poll() ports() ! pos() pose pose2 ! poss() power() powers list ! powers list2 powers() powers2 ! prompt() prompt_newlines pueblo ! pueblo features pueblo() puppet ! puppets puppets2 queue ! quiet quit quota() ! r() r-function rand() ! randword() read recv() ! regedit() regeditall() regeditalli() ! regediti() regexp regexp classes ! regexp classes2 regexp examples regexp syntax ! regexp syntax2 regexp syntax3 regexp syntax4 For more, see Entries-25 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-25 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + regexp syntax5 regexp syntax6 regexp syntax7 + regexp syntax8 regexps regexps2 + registers registers2 regmatch() + regmatchi() regrab() regraball() + regraballi() regrabi() regrep() + regrepi() regular expression functions remainder() remit() remove() repeat() replace() rest() restarts() restarttime() restrict *************** *** 515,531 **** room room() root() round() royalty rquota rules s() s-function safe say scan() score scramble() screenheight screenwidth search() search2 secs() secure() semaphores semaphores2 semaphores3 semaphores4 semaphores5 semaphores6 semipose - - For more, see Entries-26 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - & Entries-26 - -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- sent() session set() setdiff() setinter() setq() setq2 setq3 setr() --- 521,537 ---- room room() root() round() royalty rquota rules s() s-function + + For more, see Entries-26 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + & Entries-26 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- safe say scan() score scramble() screenheight screenwidth search() search2 secs() secure() semaphores semaphores2 semaphores3 semaphores4 semaphores5 semaphores6 semipose sent() session set() setdiff() setinter() setq() setq2 setq3 setr() *************** *** 536,609 **** slay softcode sort() sortby() sorting sortkey() soundex() soundex2 soundlike() - soundslike() space() spellnum() - splice() spoofing sql functions - sql() sqlescape() sqrt() - squish() ssl() stack - starttime() stats() stddev() - step2 step() sticky For more, see Entries-27 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-27 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! strcat() string functions strings ! strinsert() stripaccents() stripansi() ! strlen() strmatch() strreplace() ! sub() subj() substitutions ! substitutions2 substitutions3 substitutions4 ! success suspect switch wildcards ! switch() switch2 switchall() ! switches t() table() ! tag() tagwrap() take ! tan() teach tel() ! tel_ok temple terminfo() ! terse textentries() textfile() ! think time functions time() ! timefmt() timefmt2 timestring() ! topics topics2 tr() ! track_money translation transparent For more, see Entries-28 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-28 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! transparent2 trim() trimpenn() ! trimtiny() trunc() trust ! trust2 type() types of objects ! types2 u() u2 ! ucstr() udefault() ufun() ! ufun2 uldefault() ulocal() ulocal2 unfindable unfollow - uninspected unregistered use - user-defined commands user-defined2 utctime() - utility functions v() v-function - vadd() val() valid() - vcross() vdim() vdot() - verbose verbs version() - visible() visual vmag() - vmax() vmin() vmul() - vrml vsub() vunit() For more, see Entries-29 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-29 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! warnings warnings list warnings list2 ! where() whisper whisper2 ! who width() wildcards wipe() with wizard wordpos() words() wrap() xattr() xattrp() xcon() xexits() xget() xmwho() ! xor() xplayers() xthings() ! xvcon() xvexits() xvplayers() ! xvthings() xwho() z_tel ! zemit() zfun() zmo ! zmp zmr zmwho() ! zone zone master objects zone master rooms ! zone masters zone objects zone() ! zones zones2 zwho() & &Entries -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- --- 542,625 ---- slay softcode sort() sortby() sorting sortkey() soundex() soundex2 soundlike() For more, see Entries-27 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-27 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! soundslike() space() speak() ! speak2 speak3 speak4 ! speak5 speak6 speak7 ! spellnum() splice() spoofing ! sql functions sql() sqlescape() ! sqrt() squish() ssl() ! stack starttime() stats() ! stddev() step2 step() ! sticky strcat() string functions ! strings stringsecs() strinsert() ! stripaccents() stripansi() strlen() ! strmatch() strreplace() sub() ! subj() substitutions substitutions2 ! substitutions3 substitutions4 success ! suspect switch wildcards switch() ! switch2 switchall() switches For more, see Entries-28 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-28 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! t() table() tag() ! tagwrap() take tan() ! teach tel() tel_ok ! temple terminfo() terse ! textentries() textfile() think ! time functions time() timefmt() ! timefmt2 timestring() topics ! topics2 tr() track_money ! translation transparent transparent2 ! trim() trimpenn() trimtiny() ! trunc() trust trust2 ! type() types of objects types2 ! u() u2 ucstr() ! udefault() ufun() ufun2 ! ulambda() uldefault() ulocal() ulocal2 unfindable unfollow For more, see Entries-29 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- & Entries-29 -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- ! uninspected unique() unregistered ! use user-defined commands user-defined2 ! utctime() utility functions v() ! v-function vadd() val() ! valid() vcross() vdim() ! vdot() verbose verbs ! version() visible() visual ! vmag() vmax() vmin() ! vmul() vrml vsub() ! vunit() warnings warnings list ! warnings list2 where() whisper ! whisper2 who width() ! wildcards wildgrep() wildgrepi() wipe() with wizard wordpos() words() wrap() xattr() xattrp() xcon() + + For more, see Entries-30 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + & Entries-30 + -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- xexits() xget() xmwho() ! xmwhoid() xor() xplayers() ! xthings() xvcon() xvexits() ! xvplayers() xvthings() xwho() ! xwhoid() z_tel zemit() ! zfun() zmo zmp ! zmr zmwho() zone ! zone master objects zone master rooms zone masters ! zone objects zone() zones ! zones2 zwho() & &Entries -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- Index: game/txt/hlp/pennfunc.hlp =================================================================== *** game/txt/hlp/pennfunc.hlp (.../trunk) (revision 1) --- game/txt/hlp/pennfunc.hlp (.../tags/181p10) (revision 29) *************** *** 5,12 **** The brackets are used to delimit and force evaluation of the function (or nested functions). The brackets can also be used to group functions for the purposes of string concatenation. In general, more than one pair ! of brackets is not required, but liberal use of them makes code easier to ! read. You can nest an arbitrary number of brackets. Examples: > say [first(rest(This is a nice day))] --- 5,12 ---- The brackets are used to delimit and force evaluation of the function (or nested functions). The brackets can also be used to group functions for the purposes of string concatenation. In general, more than one pair ! of brackets is not required, but you can nest an arbitrary number of ! brackets. Examples: > say [first(rest(This is a nice day))] *************** *** 64,73 **** The primary purpose of these functions is to access information stored in attributes on objects. ! aposs() attrib_set() default() edefault() eval() ! get() grep() grepi() lattr() nattr() ! obj() poss() regrep() regrepi() subj() ! udefault() ufun() uldefault() ulocal() v-function wildgrep() wildgrepi() xget() zfun() See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES --- 64,73 ---- The primary purpose of these functions is to access information stored in attributes on objects. ! aposs() attrib_set() default() edefault() eval() ! get() grep() grepi() lattr() nattr() ! obj() poss() regrep() regrepi() subj() ! udefault() ufun() uldefault() ulocal() v-function wildgrep() wildgrepi() xget() zfun() See also: ATTRIBUTES, NON-STANDARD ATTRIBUTES *************** *** 101,141 **** to an object or objects. cemit() emit() lemit() nsemit() nslemit() ! nsoemit() nspemit() nsprompt() nsremit() nszemit() ! oemit() pemit() prompt() remit() zemit() & Connection functions Connection functions return information about the connections open on a game, or about specific connections. cmds() conn() doing() height() hostname() ! hidden() idle() ipaddr() lports() lwho() lwhoid() mwho() mwhoid() nmwho() nwho() ! ports() pueblo() recv() sent() ssl() ! terminfo() width() xmwho() xmwhoid() xwho() xwhoid() zmwho() zwho() & Dbref functions Dbref functions return a dbref or list of dbrefs related to some value on an object. ! children() con() entrances() exit() followers() ! following() home() lcon() lexits() loc() ! locate() lparent() lplayers() lsearch() lvcon() ! lvexits() lvplayers() namelist() next() nextdbref() ! num() owner() parent() pmatch() rloc() rnum() room() where() zone() See also: DBREF & Information functions Information functions return values related to objects or the game. ! alias() andflags() andlflags() config() controls() ctime() elock() findable() flags() fullalias() ! fullname() hasattr() hasattrp() hasflag() haspower() ! hastype() iname() lflags() lock() lstats() ! money() mtime() mudname() name() nattr() ! nearby() objid() objmem() orflags() orlflags() ! playermem() poll() powers() quota() restarts() ! type() version() visible() & List functions List functions take at least one list of elements and return transformed --- 101,141 ---- to an object or objects. cemit() emit() lemit() nsemit() nslemit() ! nsoemit() nspemit() nsprompt() nsremit() nszemit() ! oemit() pemit() prompt() remit() zemit() & Connection functions Connection functions return information about the connections open on a game, or about specific connections. cmds() conn() doing() height() hostname() ! hidden() idle() ipaddr() lports() lwho() lwhoid() mwho() mwhoid() nmwho() nwho() ! ports() pueblo() recv() sent() ssl() ! terminfo() width() xmwho() xmwhoid() xwho() xwhoid() zmwho() zwho() & Dbref functions Dbref functions return a dbref or list of dbrefs related to some value on an object. ! children() con() entrances() exit() followers() ! following() home() lcon() lexits() loc() ! locate() lparent() lplayers() lsearch() lvcon() ! lvexits() lvplayers() namelist() next() nextdbref() ! num() owner() parent() pmatch() rloc() rnum() room() where() zone() See also: DBREF & Information functions Information functions return values related to objects or the game. ! alias() andflags() andlflags() config() controls() ctime() elock() findable() flags() fullalias() ! fullname() hasattr() hasattrp() hasflag() haspower() ! hastype() iname() lflags() lock() lstats() ! money() mtime() mudname() name() nattr() ! nearby() objid() objmem() orflags() orlflags() ! playermem() poll() powers() quota() restarts() ! type() version() visible() & List functions List functions take at least one list of elements and return transformed *************** *** 143,156 **** can take an arbitrary argument to specify what delimits list elements; if none is provided, a space is used by default. ! element() elements() extract() filter() filterbool() ! first() fold() grab() graball() index() ! insert() itemize() items() iter() last() ! ldelete() map() match() matchall() member() ! mix() munge() namegrab() namegraball() remove() ! replace() rest() revwords() setdiff() setinter() ! setunion() shuffle() sort() sortby() sortkey() ! splice() step() table() unique() wordpos() words() See also: LISTS --- 143,156 ---- can take an arbitrary argument to specify what delimits list elements; if none is provided, a space is used by default. ! element() elements() extract() filter() filterbool() ! first() fold() grab() graball() index() ! i