This is the do_finger command by wench. we just added the parts that were missing from it that you have to add into merc.h. we take no credit for this we just wanted everyone to know becuase it was left out of his code. Also there is a section we removed because we dont want people to see how long someone is idle on our mud. you can add it back if you want. Have fun and another thanxs to Wench. ============================================================================ This is the do_finger command I wrote for my mud. Some things may be specific to my mud and need to be changed, these should be fairly obvious, I would think. I'd appreciate a mention somewhere, or at least an email, if you use this mostly as is. (Formatting of the output may not be exactly perfect, that's something I never bothered to change.) Hope this helps, lemme know if you're still having problems. ============================================================================= /* Finger command, by Wench. */ void do_finger(CHAR_DATA *ch, char *argument) { FILE *fp; char strsave[MAX_INPUT_LENGTH]; bool email_found = FALSE; bool real_found = FALSE; bool laston_found = FALSE; bool host_found = FALSE; char buf[MAX_STRING_LENGTH]; char arg[MAX_STRING_LENGTH]; char arg2[MAX_STRING_LENGTH]; CHAR_DATA *victim; char *real = ""; char *email = ""; char *host = ""; long laston; bool finished = FALSE; int d, h, m, s = 0; if(argument[0] == '\0' || argument[0] == '/' || argument[0] == '\\') { send_to_char("Finger who?\n\r", ch); return; } smash_tilde(argument); argument = one_argument(argument, arg); strcpy(arg2, argument); if(!str_cmp(arg, "email")) { if(arg2[0] == '\0') { sprintf(buf, "Your email address is currently listed as %s.\n\r", ch->pcdata->email); send_to_char(buf, ch); return; } ch->pcdata->email = strdup(arg2); sprintf(buf, "Your email address will now be displayed as %s.\n\r", ch->pcdata->email); send_to_char(buf, ch); return; } if(!str_cmp(arg, "real")) { if(arg2[0] == '\0') { sprintf(buf, "Your real name is currently listed as %s.\n\r", ch->pcdata->real_name); send_to_char(buf, ch); return; } ch->pcdata->real_name = strdup(arg2); sprintf(buf, "Your real name will now appear as %s.\n\r", ch->pcdata->real_name); send_to_char(buf, ch); return; } if(((victim = get_char_world(ch, arg)) != NULL) && (!IS_NPC(victim))) { int seconds = 0; sprintf(buf,"Name: %16s Real Name: %16s\n\r", victim->name, victim->pcdata->real_name); send_to_char(buf, ch); sprintf(buf, "E-mail address: %35s\n\r", victim->pcdata->email); send_to_char(buf, ch); if(victim->desc != NULL) sprintf(buf, "%s is currently playing Mud.\n\r", victim->name); else sprintf(buf, "%s is currently linkdead.\n\r", victim->name); send_to_char(buf, ch); //seconds = (int) (current_time - victim->pcdata->idle_time); /*OK, we did remove this on our mud because i don't like you see how long a person is idle, to use full if like to kill someone. you can add it back if you want. if(seconds > 10) { int hours = 0; int minutes = 0; hours = seconds/3600; seconds -= hours*3600; minutes = seconds/60; seconds -= minutes*60; sprintf(buf, "Idle: %02d:%02d:%02d\n\r", hours, minutes, seconds); send_to_char(buf, ch); }*/ return; } sprintf(strsave, "%s%s", PLAYER_DIR, capitalize(arg)); if((fp = fopen(strsave, "r")) == NULL) { sprintf(buf, "No such player: %s.\n\r", capitalize(arg)); send_to_char(buf, ch); return; } for(;;) { char *word; fread_to_eol(fp); word = feof(fp) ? "End" : fread_word(fp); switch(UPPER(word[0])) { case 'E': if(!str_cmp(word, "Email")) { email = fread_string(fp); email_found = TRUE; } if(!str_cmp(word, "End")) { finished = TRUE; break; } break; case 'H': if(!str_cmp(word, "Host")) { host = fread_string(fp); host_found = TRUE; } break; case 'R': if(!str_cmp(word, "Real")) { real = fread_string(fp); real_found = TRUE; } break; case 'L': if(!str_cmp(word, "LogO")) { laston = fread_number(fp); laston_found = TRUE; } break; case '#': finished = TRUE; break; default: fread_to_eol(fp); break; } if((finished)||(real_found&&laston_found&&email_found)) break; } s = current_time - laston; d = s/86400; s-=d*86400; h = s/3600; s -= h*3600; m = s/60; s -= m*60; sprintf(buf, "Name: %16s Real Name: %16s\n\r", capitalize(arg), real_found ? real: "Not specified."); send_to_char(buf, ch); sprintf(buf, "E-mail address: %20s\n\r", email_found ? email : "Not specified."); send_to_char(buf, ch); sprintf(buf, "%s last logged on at %s\n\r", capitalize(arg), laston_found ? ctime(&laston) : "Not found."); send_to_char(buf, ch); printf_to_char(ch, "That was %d days, %d hours, %d minutes and %d seconds ago.\n\r", d, h, m, s); #ifdef BUILDER_PORT if(ch->level < MAX_LEVEL) { fclose(fp); return; } #endif if(IS_IMMORTAL(ch)) { if(host_found) sprintf(buf, "%s last logged on from %s\n\r", capitalize(arg), host); else sprintf(buf, "No logon site found for %s.\n\r", capitalize(arg)); send_to_char(buf, ch); } fclose(fp); return; } /* Look for this line char * alias_sub[MAX_ALIAS]; and below it add the following*/ char * email; char * real_name;