This is patch03 to PennMUSH 1.7.4. After applying this patch, you will have version 1.7.4p3 To apply this patch, save it to a file in your top-level MUSH directory, and do the following: patch -p1 < 1.7.4-patch03 make update make install If you use GNU patch 2.2, you probably want the above to be 'patch -b -p1', not just 'patch -p1'. Then @shutdown and restart your MUSH. - Alan/Javelin In this patch: Commands: * unfollow with no args now stops you from following everyone. dismiss command stops people from followig you. desert command stops people from following you or leading you. Idea by Oriens@Alexandria. Names suggested by Noltar@Korongil Minor changes: * MONITOR announcements of disconnects distinguish hidden disconnects. Suggested by Oriens@Alexandria. * The Uptime field of INFO shows first start time, not last reboot time. Suggested by Trispis@M*U*S*H. Fixes: * Exact matches are now preferred over partial matches, and no longer result in ambiguity. Report by Steven Viscido. * Message mentioning INHERIT changed to TRUST by Xyrxwyrth@M*U*S*H. * Distributed register.txt file is now more descriptive. Suggested by Xyrxwyrth@M*U*S*H. * The ctime(), mtime(), restarttime(), and starttime() functions now return 2-digit days (01 vs. 1). Reported by Matrim@M*U*S*H. * @malias output uses the alias token more consistently. Suggested by Kyieren@M*U*S*H. * hints/solaris_2.sh modified a bit. * Mac portability fixes * Options.h clarification suggested by rodregis@M*U*S*H. * Cosmetic bug in @halt fixed. Report by Trispis@M*U*S*H. * Fixed a fencepost error in regedit*() that could generate garbage text. Reported by Vadiv@M*U*S*H Prereq: 1.7.4p2 *** 1_7_4.72/Patchlevel Fri, 23 Mar 2001 14:12:35 -0600 dunemush (pennmush/5_Patchlevel 1.20 600) --- 1_7_4.81(w)/Patchlevel Fri, 06 Apr 2001 15:23:53 -0500 dunemush (pennmush/5_Patchlevel 1.21 600) *************** *** 1,2 **** Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.7.4p2 --- 1,2 ---- Do not edit this file. It is maintained by the official PennMUSH patches. ! This is PennMUSH 1.7.4p3 *** 1_7_4.72/CHANGES Thu, 05 Apr 2001 11:06:39 -0500 dunemush (pennmush/8_CHANGES 1.196 600) --- 1_7_4.81(w)/CHANGES Mon, 23 Apr 2001 18:06:21 -0500 dunemush (pennmush/8_CHANGES 1.204 600) *************** *** 17,22 **** --- 17,52 ---- ========================================================================== + Version 1.7.4 patchlevel 3 April 23, 2001 + + Commands: + * unfollow with no args now stops you from following everyone. + dismiss command stops people from followig you. + desert command stops people from following you or leading you. + Idea by Oriens@Alexandria. Names suggested by Noltar@Korongil + Minor changes: + * MONITOR announcements of disconnects distinguish hidden disconnects. + Suggested by Oriens@Alexandria. + * The Uptime field of INFO shows first start time, not last reboot time. + Suggested by Trispis@M*U*S*H. + Fixes: + * Exact matches are now preferred over partial matches, and no longer + result in ambiguity. Report by Steven Viscido. + * Message mentioning INHERIT changed to TRUST by Xyrxwyrth@M*U*S*H. + * Distributed register.txt file is now more descriptive. + Suggested by Xyrxwyrth@M*U*S*H. + * The ctime(), mtime(), restarttime(), and starttime() functions now + return 2-digit days (01 vs. 1). Reported by Matrim@M*U*S*H. + * @malias output uses the alias token more consistently. Suggested by + Kyieren@M*U*S*H. + * hints/solaris_2.sh modified a bit. + * Mac portability fixes + * Options.h clarification suggested by rodregis@M*U*S*H. + * Cosmetic bug in @halt fixed. Report by Trispis@M*U*S*H. + * Fixed a fencepost error in regedit*() that could generate garbage text. + Reported by Vadiv@M*U*S*H + + Version 1.7.4 patchlevel 2 March 23, 2001 Major changes: *** 1_7_4.72/game/txt/hlp/pennvers.hlp Thu, 05 Apr 2001 11:06:39 -0500 dunemush (pennmush/12_pennvers.h 1.145 600) --- 1_7_4.81(w)/game/txt/hlp/pennvers.hlp Mon, 23 Apr 2001 18:06:29 -0500 dunemush (pennmush/12_pennvers.h 1.153 600) *************** *** 1,5 **** & changes ! & 1.7.4p2 This is a list of changes in this patchlevel which are probably of interest to players. More information about new commands and functions can probably be gotten via 'help '. 'help credits' --- 1,5 ---- & changes ! & 1.7.4p3 This is a list of changes in this patchlevel which are probably of interest to players. More information about new commands and functions can probably be gotten via 'help '. 'help credits' *************** *** 11,16 **** --- 11,47 ---- A list of the patchlevels associated with each release can be read in 'help patchlevels'. + Version 1.7.4 patchlevel 3 April 23, 2001 + + Commands: + * unfollow with no args now stops you from following everyone. + dismiss command stops people from followig you. + desert command stops people from following you or leading you. + Idea by Oriens@Alexandria. Names suggested by Noltar@Korongil + Minor changes: + * MONITOR announcements of disconnects distinguish hidden disconnects. + Suggested by Oriens@Alexandria. + * The Uptime field of INFO shows first start time, not last reboot time. + Suggested by Trispis@M*U*S*H. + Fixes: + * Exact matches are now preferred over partial matches, and no longer + result in ambiguity. Report by Steven Viscido. + * Message mentioning INHERIT changed to TRUST by Xyrxwyrth@M*U*S*H. + * Distributed register.txt file is now more descriptive. + Suggested by Xyrxwyrth@M*U*S*H. + * The ctime(), mtime(), restarttime(), and starttime() functions now + return 2-digit days (01 vs. 1). Reported by Matrim@M*U*S*H. + * @malias output uses the alias token more consistently. Suggested by + Kyieren@M*U*S*H. + * hints/solaris_2.sh modified a bit. + * Mac portability fixes + * Options.h clarification suggested by rodregis@M*U*S*H. + * Cosmetic bug in @halt fixed. Report by Trispis@M*U*S*H. + * Fixed a fencepost error in regedit*() that could generate garbage text. + Reported by Vadiv@M*U*S*H + + + & 1.7.4p2 Version 1.7.4 patchlevel 2 March 23, 2001 Major changes: *************** *** 4587,4593 **** is configurable. & patchlevels ! 1.7.4: 0, 1, 2 1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 --- 4618,4624 ---- is configurable. & patchlevels ! 1.7.4: 0, 1, 2, 3 1.7.3: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 1.7.2: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35 *** 1_7_4.72/game/txt/hlp/penncmd.hlp Fri, 23 Mar 2001 14:12:35 -0600 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.1 600) --- 1_7_4.81(w)/game/txt/hlp/penncmd.hlp Sat, 07 Apr 2001 13:18:28 -0500 dunemush (pennmush/18_penncmd.hl 1.2.1.1.1.47.1.1.1.1.1.2 600) *************** *** 3159,3167 **** object moves around (except if it @teleports away or goes home), you will automatically move around with it, so long as you pass all the locks and enter/leave locks on the exits and things the object moves ! through. ! See also: unfollow, followers(), @follow, @ofollow, @afollow & get & take get --- 3159,3186 ---- object moves around (except if it @teleports away or goes home), you will automatically move around with it, so long as you pass all the locks and enter/leave locks on the exits and things the object moves ! through. This doesn't prevent you from going somewhere else on your ! own. ! See also: unfollow, dismiss, desert, followers(), @follow, @ofollow, @afollow ! & dismiss ! dismiss ! dismiss ! ! The dismiss command stops from following you. If no object ! is given, it stops everyone from following you. ! ! See also: follow, unfollow, desert, followers() ! & desert ! desert ! desert ! ! The desert command stops from following you and stops you ! from following . That is, it's shorthand for 'unfollow ' ! and 'dismiss '. If no object is given, it stops everyone from ! following or leading you. ! ! See also: follow, unfollow, dismiss, followers(), following() & get & take get *************** *** 3421,3433 **** unfollow unfollow ! The first form of this command clears off all your followers, if you ! have any. The second form of this command enables you to stop ! following an object which you were formerly following. Note that you ! can also stop following by going off in a different direction before ! the object moves. ! See also: follow, followers(), @follow, @ofollow, @afollow & use use --- 3440,3450 ---- unfollow unfollow ! This command stops you from following an object that you were formerly ! following. If no object is given, you stop following everyone you ! were following. ! See also: follow, dismiss, desert, followers(), @follow, @ofollow, @afollow & use use *** 1_7_4.72/game/txt/register.txt Sat, 15 Apr 2000 10:56:00 -0500 dunemush (pennmush/24_register.t 1.1 600) --- 1_7_4.81(w)/game/txt/register.txt Sat, 07 Apr 2001 09:14:52 -0500 dunemush (pennmush/24_register.t 1.1.2.1 600) *************** *** 1,3 **** ! Should we ever decide to go registration (God forbid) this is what will ! get shown to the hapless user. --- 1,5 ---- ! This message is shown when a user tries to create a player or register ! a player from a site that doesn't allow creation or registration, ! respectively. Alas. You'll probably have to send email to the ! person who runs this MUSH if you want a character. *** 1_7_4.72/hints/solaris_2.sh Mon, 26 Mar 2001 15:18:14 -0600 dunemush (pennmush/b/4_solaris_2. 1.2 600) --- 1_7_4.81(w)/hints/solaris_2.sh Sat, 07 Apr 2001 12:39:58 -0500 dunemush (pennmush/b/4_solaris_2. 1.3 600) *************** *** 1,2 **** --- 1,4 ---- ccflags="-DNO_SIGCONTEXT" libs="-lnsl -lsocket -lm -lc -lresolv" + i_fcntl="define" + has_sigchld="define" *** 1_7_4.72/src/set.c Fri, 23 Mar 2001 14:12:35 -0600 dunemush (pennmush/b/38_set.c 1.25 660) --- 1_7_4.81(w)/src/set.c Mon, 23 Apr 2001 18:05:52 -0500 dunemush (pennmush/b/38_set.c 1.26 660) *************** *** 426,432 **** if (Hasprivs(thing)) notify(player, T("Warning: @chzoning a privileged player.")); if (Flags(thing) & INHERIT) ! notify(player, T("Warning: @chzoning an INHERIT player.")); } } notify(player, T("Zone changed.")); --- 426,432 ---- if (Hasprivs(thing)) notify(player, T("Warning: @chzoning a privileged player.")); if (Flags(thing) & INHERIT) ! notify(player, T("Warning: @chzoning an TRUST player.")); } } notify(player, T("Zone changed.")); *** 1_7_4.72/src/move.c Fri, 23 Mar 2001 14:25:48 -0600 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.2 660) --- 1_7_4.81(w)/src/move.c Mon, 23 Apr 2001 18:05:52 -0500 dunemush (pennmush/b/51_move.c 1.1.1.18.1.5.1.13.1.3 660) *************** *** 805,811 **** } /* unfollow removes someone from your following list ! * unfollow alone stops everyone from following you. */ void do_unfollow(player, arg) --- 805,811 ---- } /* unfollow removes someone from your following list ! * unfollow alone removes everyone from your following list. (1.7.4p3) */ void do_unfollow(player, arg) *************** *** 828,836 **** /* Ok, looks good */ del_follow(leader, player, 1); } else { ! /* Stop everyone from following me */ clear_followers(player, 1); ! notify(player, T("You stop everyone from following you.")); } } --- 828,900 ---- /* Ok, looks good */ del_follow(leader, player, 1); } else { ! /* Stop following everyone */ ! clear_following(player, 1); ! notify(player, T("You stop following anyone.")); ! } ! } ! ! ! /* dismiss removes someone from your followers list ! * dismiss alone removes everyone from your followers list. ! */ ! void ! do_dismiss(player, arg) ! dbref player; ! const char *arg; ! { ! dbref follower; ! if (arg && *arg) { ! /* Who do we want to stop leading? */ ! follower = match_result(player, arg, NOTYPE, MAT_OBJECTS); ! if (!GoodObject(follower)) { ! notify(player, T("I don't recognize who you want to dismiss.")); ! return; ! } ! /* Are we following them? */ ! if (!is_following(follower, player)) { ! notify_format(player, T("%s isn't following you."), Name(follower)); ! return; ! } ! /* Ok, looks good */ ! del_follow(player, follower, 1); ! } else { ! /* Stop leading everyone */ ! clear_followers(player, 1); ! notify(player, T("You dismiss all your followers.")); ! } ! } ! ! /* desert removes someone from your followers and following list ! * desert alone removes everyone from both lists ! */ ! void ! do_desert(player, arg) ! dbref player; ! const char *arg; ! { ! dbref who; ! if (arg && *arg) { ! /* Who do we want to stop leading? */ ! who = match_result(player, arg, NOTYPE, MAT_OBJECTS); ! if (!GoodObject(who)) { ! notify(player, T("I don't recognize who you want to desert.")); ! return; ! } ! /* Are we following or leading them? */ ! if (!is_following(who, player) && !is_following(player, who)) { ! notify_format(player, T("%s isn't following you, nor vice versa."), ! Name(who)); ! return; ! } ! /* Ok, looks good */ ! del_follow(player, who, 1); ! del_follow(who, player, 1); ! } else { ! /* Stop leading everyone */ clear_followers(player, 1); ! clear_following(player, 1); ! notify(player, T("You desert everyone you're leading or following.")); } } *** 1_7_4.72/src/match.c Mon, 02 Apr 2001 13:43:46 -0500 dunemush (pennmush/c/2_match.c 1.17 660) --- 1_7_4.81(w)/src/match.c Mon, 23 Apr 2001 18:05:51 -0500 dunemush (pennmush/c/2_match.c 1.20 660) *************** *** 164,170 **** const int type; const long int flags; { ! dbref match = NOTHING, last_match = NOTHING; int match_count = 0; if (flags & MAT_ME) { match = match_me(who, name); --- 164,171 ---- const int type; const long int flags; { ! dbref match = NOTHING, last_match = NOTHING, exact_match = NOTHING; ! int exact_match_count = 0; int match_count = 0; if (flags & MAT_ME) { match = match_me(who, name); *************** *** 206,260 **** /* These return a match if the match is exact, and otherwise * store last thing matched in last_match and the number of matches * in match_count. Remote_contents and Neighbor are exclusive. */ if (DO_GLOBALS && (flags & MAT_REMOTE_CONTENTS)) { match = match_remote_contents(who, name, type, flags, &last_match, &match_count); } if (flags & MAT_NEIGHBOR) { match = match_neighbor(who, name, type, flags, &last_match, &match_count); } if (flags & MAT_POSSESSION) { ! match = choose_thing(who, type, flags, match, ! match_possession(who, name, type, flags, ! &last_match, &match_count), ! &match_count); } if (flags & MAT_EXIT) { ! match = choose_thing(who, type, flags, match, ! match_exit(who, name, type, flags), &match_count); } if (flags & MAT_CONTAINER) { ! match = choose_thing(who, type, flags, match, ! match_container(who, name, type, flags, &last_match, ! &match_count), &match_count); } if (flags & MAT_CARRIED_EXIT) { ! match = choose_thing(who, type, flags, match, ! match_exit_internal(who, name, type, flags, who, ! &match_count), &match_count); } ! if ((flags & MAT_ENGLISH) && (!GoodObject(match))) { match = match_english(who, name, type, flags); } /* Set up the default match_result behavior */ ! /* If we already have an exact match, it's in match */ ! switch (match_count) { ! case 0: ! if (!GoodObject(match)) match = NOTHING; ! break; ! case 1: ! if (!GoodObject(match)) match = last_match; ! break; ! default: ! if (flags & MAT_LAST) match = last_match; else match = AMBIGUOUS; - break; } /* Handle noisy_match_result */ --- 207,285 ---- /* These return a match if the match is exact, and otherwise * store last thing matched in last_match and the number of matches * in match_count. Remote_contents and Neighbor are exclusive. + * We need to deal with the possibility of having multiple exact + * matches, multiple partial matches, or 1 exact + 1 or more partial + * matches. */ if (DO_GLOBALS && (flags & MAT_REMOTE_CONTENTS)) { match = match_remote_contents(who, name, type, flags, &last_match, &match_count); + if (GoodObject(match)) { + exact_match_count++; + exact_match = match; + } } if (flags & MAT_NEIGHBOR) { match = match_neighbor(who, name, type, flags, &last_match, &match_count); + if (GoodObject(match)) { + exact_match_count++; + exact_match = match; + } } if (flags & MAT_POSSESSION) { ! match = match_possession(who, name, type, flags, &last_match, &match_count); ! if (GoodObject(match)) { ! exact_match_count++; ! exact_match = match; ! } } if (flags & MAT_EXIT) { ! match = match_exit(who, name, type, flags); ! if (GoodObject(match)) { ! exact_match_count++; ! exact_match = match; ! } } if (flags & MAT_CONTAINER) { ! match = match_container(who, name, type, flags, &last_match, &match_count); ! if (GoodObject(match)) { ! exact_match_count++; ! exact_match = match; ! } } if (flags & MAT_CARRIED_EXIT) { ! match = match_exit_internal(who, name, type, flags, who, &match_count); ! if (GoodObject(match)) { ! exact_match_count++; ! exact_match = match; ! } } ! if ((flags & MAT_ENGLISH) && !GoodObject(last_match) ! && !GoodObject(exact_match)) { match = match_english(who, name, type, flags); + if (GoodObject(match)) { + exact_match_count++; + exact_match = match; + } } /* Set up the default match_result behavior */ ! if (GoodObject(exact_match)) { ! if (exact_match_count == 1) ! match = exact_match; ! else if (flags & MAT_LAST) ! match = exact_match; ! else ! match = AMBIGUOUS; ! } else { ! if (match_count == 0) match = NOTHING; ! else if (match_count == 1) match = last_match; ! else if (flags & MAT_LAST) match = last_match; else match = AMBIGUOUS; } /* Handle noisy_match_result */ *************** *** 321,326 **** --- 346,354 ---- return NOTHING; } + /* This code should return a matched dbref only on an exact match. + * Otherwise, it puts the best partial match in last_match + */ static dbref match_list(match_who, match_name, type, flags, first, last_match, match_count) const dbref match_who; *************** *** 342,357 **** DOLIST(first, first) { if (first == absolute) { return first; ! } else if (!strcasecmp(Name(first), match_name)) { ! /* if there are multiple exact matches, randomly choose one */ ! the_match = ! choose_thing(match_who, type, flags, the_match, first, match_count); ! } else if (GoodObject(alias_match) && (alias_match == first)) { ! the_match = ! choose_thing(match_who, type, flags, the_match, first, match_count); } else if (string_match(Name(first), match_name)) { ! *last_match = first; ! *match_count += 1; } } return the_match; --- 370,390 ---- DOLIST(first, first) { if (first == absolute) { return first; ! } else if (!strcasecmp(Name(first), match_name) || ! (GoodObject(alias_match) && (alias_match == first))) { ! if (GoodObject(the_match)) { ! /* if there are multiple exact matches, don't match any but ! * make sure match_count is high enough that we report ambiguity ! */ ! *match_count += 2; ! *last_match = ! choose_thing(match_who, type, flags, the_match, first, match_count); ! return NOTHING; ! } else ! the_match = first; } else if (string_match(Name(first), match_name)) { ! *last_match = ! choose_thing(match_who, type, flags, *last_match, first, match_count); } } return the_match; *************** *** 612,617 **** --- 645,652 ---- { int has1; int has2; + if (match_count) + (*match_count)++; if (thing1 == NOTHING) { return thing2; } else if (thing2 == NOTHING) { *** 1_7_4.72/src/malias.c Fri, 02 Mar 2001 10:50:52 -0600 dunemush (pennmush/c/3_malias.c 1.28 660) --- 1_7_4.81(w)/src/malias.c Mon, 23 Apr 2001 18:05:51 -0500 dunemush (pennmush/c/3_malias.c 1.29 660) *************** *** 257,277 **** ((m->nflags & ALIAS_ADMIN) && Hasprivs(player)) || ((m->nflags & ALIAS_MEMBERS) && ismember(m, player))) { if (!notified) { ! notify(player, tprintf("%-12s %-35s %s %-15s", T("Name"), T("Alias Description"), T("Use See"), T("Owner"))); notified++; } - #ifdef macintosh notify(player, ! tprintf("%-12.12s %-35.35s %s %-15.15s", m->name, uncompress((unsigned char *) (m->desc)), get_shortprivs(m), Name(m->owner))); - #else - notify(player, - tprintf("%-12.12s %-35.35s %s %-15.15s", m->name, - uncompress(m->desc), get_shortprivs(m), Name(m->owner))); - #endif } } --- 257,271 ---- ((m->nflags & ALIAS_ADMIN) && Hasprivs(player)) || ((m->nflags & ALIAS_MEMBERS) && ismember(m, player))) { if (!notified) { ! notify(player, tprintf("%-13s %-35s %s %-15s", T("Name"), T("Alias Description"), T("Use See"), T("Owner"))); notified++; } notify(player, ! tprintf("%c%-12.12s %-35.35s %s %-15.15s", MALIAS_TOKEN, m->name, uncompress((unsigned char *) (m->desc)), get_shortprivs(m), Name(m->owner))); } } *************** *** 438,446 **** m = get_malias(player, alias); if (!m) { ! notify(player, ! T ! ("MAIL: Not a valid alias. Remember to prefix the alias name with *.")); return; } if (!tolist || !*tolist) { --- 432,441 ---- m = get_malias(player, alias); if (!m) { ! notify_format(player, ! T ! ("MAIL: Not a valid alias. Remember to prefix the alias name with %c."), ! MALIAS_TOKEN); return; } if (!tolist || !*tolist) { *************** *** 536,544 **** for (i = 0; i < ma_top; i++) { m = &malias[i]; ! notify(player, tprintf("#%-4d %-10.10s %-40.40s %-11.11s (%3d)", ! i, m->name, uncompress(m->desc), Name(m->owner), ! m->size)); } notify(player, T("***** End of Mail Aliases *****")); --- 531,540 ---- for (i = 0; i < ma_top; i++) { m = &malias[i]; ! notify_format(player, "#%-4d %c%-10.10s %-40.40s %-11.11s (%3d)", ! i, MALIAS_TOKEN, m->name, ! uncompress((unsigned char *) m->desc), ! Name(m->owner), m->size); } notify(player, T("***** End of Mail Aliases *****")); *** 1_7_4.72/src/funmisc.c Sat, 17 Feb 2001 10:56:52 -0600 dunemush (pennmush/c/14_funmisc.c 1.26 660) --- 1_7_4.81(w)/src/funmisc.c Mon, 23 Apr 2001 18:05:51 -0500 dunemush (pennmush/c/14_funmisc.c 1.27 660) *************** *** 332,350 **** /* ARGSUSED */ FUNCTION(fun_starttime) { ! char tbuf1[BUFFER_LEN]; ! strcpy(tbuf1, ctime(&first_start_time)); ! tbuf1[strlen(tbuf1) - 1] = '\0'; ! safe_str(tbuf1, buff, bp); } /* ARGSUSED */ FUNCTION(fun_restarttime) { ! char tbuf1[BUFFER_LEN]; ! strcpy(tbuf1, ctime(&start_time)); ! tbuf1[strlen(tbuf1) - 1] = '\0'; ! safe_str(tbuf1, buff, bp); } /* ARGSUSED */ --- 332,354 ---- /* ARGSUSED */ FUNCTION(fun_starttime) { ! char *s; ! s = (char *) ctime(&first_start_time); ! s[strlen(s) - 1] = '\0'; ! if (s[8] == ' ') ! s[8] = '0'; ! safe_str(s, buff, bp); } /* ARGSUSED */ FUNCTION(fun_restarttime) { ! char *s; ! s = (char *) ctime(&start_time); ! s[strlen(s) - 1] = '\0'; ! if (s[8] == ' ') ! s[8] = '0'; ! safe_str(s, buff, bp); } /* ARGSUSED */ *** 1_7_4.72/src/funlist.c Thu, 05 Apr 2001 10:45:56 -0500 dunemush (pennmush/c/16_funlist.c 1.3.1.1.1.5.1.2.1.1.1.1.1.4.1.2.1.2.1.19.1.2.1.1.1.1 660) --- 1_7_4.81(w)/src/funlist.c Mon, 23 Apr 2001 18:05:51 -0500 dunemush (pennmush/c/16_funlist.c 1.3.1.1.1.5.1.2.1.1.1.1.1.4.1.2.1.2.1.19.1.2.1.1.1.2 660) *************** *** 2449,2455 **** continue; } r = endsub - 1; ! if (offset > subpatterns) continue; pcre_copy_substring(args[0], offsets, subpatterns, offset, --- 2449,2455 ---- continue; } r = endsub - 1; ! if (offset >= subpatterns) continue; pcre_copy_substring(args[0], offsets, subpatterns, offset, *************** *** 2462,2470 **** /* Make sure we advance at least 1 char */ if (offsets[0] == match_offset) match_offset++; ! } while (all && (subpatterns = ! pcre_exec(re, study, args[0], len, match_offset, ! 0, offsets, 99)) >= 0); /* Now copy everything after the matched bit */ --- 2462,2471 ---- /* Make sure we advance at least 1 char */ if (offsets[0] == match_offset) match_offset++; ! } while (all && match_offset < len && (subpatterns = ! pcre_exec(re, study, args[0], len, ! match_offset, 0, offsets, ! 99)) >= 0); /* Now copy everything after the matched bit */ *** 1_7_4.72/src/fundb.c Mon, 12 Feb 2001 09:57:12 -0600 dunemush (pennmush/c/17_fundb.c 1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.7.1.3.1.3.1.3.1.2.1.2.1.3.2.1 660) --- 1_7_4.81(w)/src/fundb.c Mon, 23 Apr 2001 18:05:51 -0500 dunemush (pennmush/c/17_fundb.c 1.1.1.1.1.1.1.1.1.1.1.1.1.3.1.1.1.1.1.7.1.3.1.3.1.3.1.2.1.2.1.3.2.1.2.1 660) *************** *** 1016,1024 **** FUNCTION(fun_ctime) { dbref it = match_thing(executor, args[0]); if ((it != NOTHING) && Can_Examine(executor, it)) { ! safe_str(ctime(&CreTime(it)), buff, bp); ! (*bp)--; return; } safe_str("#-1", buff, bp); --- 1016,1029 ---- FUNCTION(fun_ctime) { dbref it = match_thing(executor, args[0]); + char *s; + if ((it != NOTHING) && Can_Examine(executor, it)) { ! s = (char *) ctime(&CreTime(it)); ! s[strlen(s) - 1] = '\0'; ! if (s[8] == ' ') ! s[8] = '0'; ! safe_str(s, buff, bp); return; } safe_str("#-1", buff, bp); *************** *** 1028,1036 **** FUNCTION(fun_mtime) { dbref it = match_thing(executor, args[0]); if ((it != NOTHING) && Can_Examine(executor, it) && !IsPlayer(it)) { ! safe_str(ctime(&ModTime(it)), buff, bp); ! (*bp)--; return; } safe_str("#-1", buff, bp); --- 1033,1045 ---- FUNCTION(fun_mtime) { dbref it = match_thing(executor, args[0]); + char *s; if ((it != NOTHING) && Can_Examine(executor, it) && !IsPlayer(it)) { ! s = (char *) ctime(&ModTime(it)); ! s[strlen(s) - 1] = '\0'; ! if (s[8] == ' ') ! s[8] = '0'; ! safe_str(s, buff, bp); return; } safe_str("#-1", buff, bp); *** 1_7_4.72/src/extchat.c Mon, 26 Mar 2001 15:33:20 -0600 dunemush (pennmush/c/23_extchat.c 1.1.1.1.1.1.1.1.1.2.1.1.1.3.1.1.1.5.1.1.1.1.1.5.1.2.1.3.1.3.1.1.1.4.1.2.1.6.1.2.1.1.2.2 660) --- 1_7_4.81(w)/src/extchat.c Mon, 23 Apr 2001 18:05:50 -0500 dunemush (pennmush/c/23_extchat.c 1.1.1.1.1.1.1.1.1.2.1.1.1.3.1.1.1.5.1.1.1.1.1.5.1.2.1.3.1.3.1.1.1.4.1.2.1.6.1.2.1.1.2.4 660) *************** *** 834,844 **** } /* It's on or off now */ /* Determine who is getting added or deleted. If we don't have ! * an argument, we assume it's the player. */ ! if (!target || !*target) ! victim = player; ! else if ((victim = lookup_player(target)) != NOTHING) ; else if (Channel_Object(chan)) victim = match_result(player, target, TYPE_THING, MAT_OBJECTS); else --- 834,846 ---- } /* It's on or off now */ /* Determine who is getting added or deleted. If we don't have ! * an argument, we return, because we should've caught those above, ! * and this shouldn't happen. */ ! if (!target || !*target) { ! notify(player, T("I don't understand what you want to do.")); ! return; ! } else if ((victim = lookup_player(target)) != NOTHING) ; else if (Channel_Object(chan)) victim = match_result(player, target, TYPE_THING, MAT_OBJECTS); else *************** *** 882,897 **** } } if (insert_user_by_dbref(victim, chan)) { ! if (victim != player) { ! notify(victim, ! tprintf(T("CHAT: %s joins you to channel <%s>."), Name(player), ! ChanName(chan))); ! notify(player, ! tprintf(T("CHAT: You join %s to channel <%s>."), Name(victim), ! ChanName(chan))); ! } else ! notify(victim, ! tprintf(T("CHAT: You join channel <%s>."), ChanName(chan))); if (!Channel_Quiet(chan) && !DarkLegal(victim)) channel_broadcast(chan, victim, 1, T("<%s> %s has joined this channel."), ChanName(chan), --- 884,895 ---- } } if (insert_user_by_dbref(victim, chan)) { ! notify(victim, ! tprintf(T("CHAT: %s joins you to channel <%s>."), Name(player), ! ChanName(chan))); ! notify(player, ! tprintf(T("CHAT: You join %s to channel <%s>."), Name(victim), ! ChanName(chan))); if (!Channel_Quiet(chan) && !DarkLegal(victim)) channel_broadcast(chan, victim, 1, T("<%s> %s has joined this channel."), ChanName(chan), *************** *** 918,933 **** channel_broadcast(chan, victim, 1, T("<%s> %s has left this channel."), ChanName(chan), Name(victim)); ! if (victim != player) { ! notify(victim, ! tprintf(T("CHAT: %s removes you from channel <%s>."), ! Name(player), ChanName(chan))); ! notify(player, ! tprintf(T("CHAT: You remove %s from channel <%s>."), ! Name(victim), ChanName(chan))); ! } else ! notify(victim, ! tprintf(T("CHAT: You leave channel <%s>."), ChanName(chan))); } else { notify(player, tprintf(T("%s is not on channel <%s>."), Name(victim), ChanName(chan))); --- 916,927 ---- channel_broadcast(chan, victim, 1, T("<%s> %s has left this channel."), ChanName(chan), Name(victim)); ! notify(victim, ! tprintf(T("CHAT: %s removes you from channel <%s>."), ! Name(player), ChanName(chan))); ! notify(player, ! tprintf(T("CHAT: You remove %s from channel <%s>."), ! Name(victim), ChanName(chan))); } else { notify(player, tprintf(T("%s is not on channel <%s>."), Name(victim), ChanName(chan))); *** 1_7_4.72/src/cque.c Fri, 02 Feb 2001 15:59:46 -0600 dunemush (pennmush/c/28_cque.c 1.34 660) --- 1_7_4.81(w)/src/cque.c Mon, 23 Apr 2001 18:05:50 -0500 dunemush (pennmush/c/28_cque.c 1.35 660) *************** *** 1022,1028 **** notify_format(player, "%s: %s's %s(%s)", T("Halted"), Name(Owner(victim)), Name(victim), unparse_dbref(victim)); notify_format(Owner(victim), ! "%s: %s%s), by %s", T("Halted"), Name(victim), unparse_dbref(victim), Name(player)); } if (*arg2 == '\0') --- 1022,1028 ---- notify_format(player, "%s: %s's %s(%s)", T("Halted"), Name(Owner(victim)), Name(victim), unparse_dbref(victim)); notify_format(Owner(victim), ! "%s: %s(%s), by %s", T("Halted"), Name(victim), unparse_dbref(victim), Name(player)); } if (*arg2 == '\0') *** 1_7_4.72/src/command.c Fri, 02 Mar 2001 10:50:52 -0600 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1 660) --- 1_7_4.81(w)/src/command.c Mon, 23 Apr 2001 18:05:50 -0500 dunemush (pennmush/c/36_command.c 1.56.1.1.1.1.1.1 660) *************** *** 280,285 **** --- 280,287 ---- 0, 0, 0}, {"BRIEF", NULL, cmd_brief, CMD_T_ANY, 0, 0, 0}, + {"DESERT", NULL, cmd_desert, CMD_T_PLAYER | CMD_T_THING, 0, 0, 0}, + {"DISMISS", NULL, cmd_dismiss, CMD_T_PLAYER | CMD_T_THING, 0, 0, 0}, {"DROP", NULL, cmd_drop, CMD_T_PLAYER | CMD_T_THING, 0, 0, 0}, {"EXAMINE", "BRIEF DEBUG MORTAL", cmd_examine, CMD_T_ANY, 0, 0, 0}, {"ENTER", NULL, cmd_enter, CMD_T_ANY, 0, 0, 0}, *** 1_7_4.72/src/cmds.c Sun, 01 Apr 2001 17:37:14 -0500 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.1 660) --- 1_7_4.81(w)/src/cmds.c Mon, 23 Apr 2001 18:05:50 -0500 dunemush (pennmush/c/37_cmds.c 1.33.1.1.1.2 660) *************** *** 928,933 **** --- 928,941 ---- do_enter(player, arg_left, 0); } + COMMAND (cmd_dismiss) { + do_dismiss(player, arg_left); + } + + COMMAND (cmd_desert) { + do_desert(player, arg_left); + } + COMMAND (cmd_follow) { do_follow(player, arg_left); } *** 1_7_4.72/src/bsd.c Thu, 05 Apr 2001 11:06:39 -0500 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.6 660) --- 1_7_4.81(w)/src/bsd.c Mon, 23 Apr 2001 18:05:49 -0500 dunemush (pennmush/c/38_bsd.c 1.58.1.11.1.2.1.5.1.7.1.14.1.13.1.9.1.4.1.2.1.12 660) *************** *** 4029,4035 **** } } queue_string(call_by, tprintf("Name: %s\r\n", options.mud_name)); ! queue_string(call_by, tprintf("Uptime: %s\r", ctime(&start_time))); queue_string(call_by, tprintf("Connected: %d\r\n", count)); queue_string(call_by, tprintf("Size: %d\r\n", db_top)); queue_string(call_by, tprintf("Version: %s\r\n", SHORTVN)); --- 4029,4035 ---- } } queue_string(call_by, tprintf("Name: %s\r\n", options.mud_name)); ! queue_string(call_by, tprintf("Uptime: %s\r", ctime(&first_start_time))); queue_string(call_by, tprintf("Connected: %d\r\n", count)); queue_string(call_by, tprintf("Size: %d\r\n", db_top)); queue_string(call_by, tprintf("Version: %s\r\n", SHORTVN)); *************** *** 4168,4174 **** --- 4168,4178 ---- if (dt < 0) dt = 0; holder = (time_t) dt; + #ifdef macintosh + delta = localtime(&holder); + #else delta = gmtime(&holder); + #endif if (delta->tm_yday > 0) { sprintf(buf, "%dd %02d:%02d", /* sprintf(buf, "%d:%02d:%02d", */ *************** *** 4188,4194 **** --- 4192,4202 ---- if (dt < 0) dt = 0; + #ifdef macintosh + delta = localtime((time_t *) & dt); + #else delta = gmtime((time_t *) & dt); + #endif if (delta->tm_yday > 0) { sprintf(buf, "%dd", delta->tm_yday); } else if (delta->tm_hour > 0) { *************** *** 4360,4366 **** if (d->connected && (d->player == player)) num++; if (num < 2) { - sprintf(tbuf1, T("%s has disconnected."), Name(player)); if (!Dark(player)) --- 4368,4373 ---- *************** *** 4407,4415 **** } Toggles(player) &= ~PLAYER_CONNECT; (void) atr_add(player, "LASTLOGOUT", p, GOD, NOTHING); - - sprintf(tbuf1, Dark(player) ? T("%s has DARK-disconnected.") : - T("%s has disconnected."), Name(player)); } else { /* note: when you partially disconnect, ADISCONNECTS are not executed */ sprintf(tbuf1, T("%s has partially disconnected."), Name(player)); --- 4414,4419 ---- *************** *** 4419,4437 **** /* notify contents */ notify_except(Contents(player), player, tbuf1); } - /* now print messages */ - if (Suspect(player)) - flag_broadcast(WIZARD, 0, T("GAME: Suspect %s"), tbuf1); - - if (Dark(player)) { - #ifdef ROYALTY_FLAG - flag_broadcast(WIZARD | ROYALTY, PLAYER_MONITOR, "%s %s", T("GAME:"), - tbuf1); - #else - flag_broadcast(WIZARD, PLAYER_MONITOR, "%s %s", T("GAME:"), tbuf1); - #endif - } else - flag_broadcast(0, PLAYER_MONITOR, "%s %s", T("GAME:"), tbuf1); /* tell players on channel that someone's left */ #ifdef CHAT_SYSTEM --- 4423,4428 ---- *************** *** 4446,4451 **** --- 4437,4466 ---- } } #endif /* CHAT_SYSTEM */ + + /* Monitor broadcasts */ + /* Redundant, but better for translators */ + if (Dark(player)) { + sprintf(tbuf1, (num < 2) ? T("%s has DARK-disconnected.") : + T("%s has partially DARK-disconnected."), Name(player)); + } else if (hidden(player)) { + sprintf(tbuf1, (num < 2) ? T("%s has HIDDEN-disconnected.") : + T("%s has partially HIDDEN-disconnected."), Name(player)); + } else { + sprintf(tbuf1, (num < 2) ? T("%s has disconnected.") : + T("%s has partially disconnected."), Name(player)); + } + if (Suspect(player)) + flag_broadcast(WIZARD, 0, T("GAME: Suspect %s"), tbuf1); + if (Dark(player)) { + #ifdef ROYALTY_FLAG + flag_broadcast(WIZARD | ROYALTY, PLAYER_MONITOR, "%s %s", T("GAME:"), + tbuf1); + #else + flag_broadcast(WIZARD, PLAYER_MONITOR, "%s %s", T("GAME:"), tbuf1); + #endif + } else + flag_broadcast(0, PLAYER_MONITOR, "%s %s", T("GAME:"), tbuf1); } void *** 1_7_4.72/hdrs/version.h Fri, 23 Mar 2001 14:12:35 -0600 dunemush (pennmush/c/47_version.h 1.32.1.2.1.3 660) --- 1_7_4.81(w)/hdrs/version.h Mon, 23 Apr 2001 18:06:27 -0500 dunemush (pennmush/c/47_version.h 1.32.1.2.1.6 660) *************** *** 1,2 **** ! #define VERSION "PennMUSH version 1.7.4 patchlevel 2 [03/23/2001]" ! #define SHORTVN "PennMUSH 1.7.4p2" --- 1,2 ---- ! #define VERSION "PennMUSH version 1.7.4 patchlevel 3 [04/23/2001]" ! #define SHORTVN "PennMUSH 1.7.4p3"