/* Pfreload: allows you to "reload" a pfile so you can edit it in shell without making a player log out The idea was taken from another snippet, but I pretty much had to write this one myself This is writen for FotE, but should work in any SMAUG based mud (i think) -->Keberus */ void do_pfreload( CHAR_DATA * ch, char *argument ) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; if( IS_NPC( ch ) ) return; argument = one_argument( argument, arg ); if( arg[0] == '\0' ) { send_to_char( "Reload who?\n\r", ch ); return; } if( !( victim = get_char_world( ch, arg ) ) ) { send_to_char( "They are not here.\n\r", ch ); return; } if( get_trust( victim ) > get_trust( ch ) ) { send_to_char( "You can't reload someone who's a higher level!\n\r", ch ); return; } if( exists_player( victim->name ) ) { DESCRIPTOR_DATA *d; char name[MAX_STRING_LENGTH]; char buf[MAX_STRING_LENGTH]; ROOM_INDEX_DATA *in_room; bool Load; d = NULL; d = victim->desc; sprintf( name, "%s", victim->name ); in_room = victim->in_room; /* * clear descriptor pointer to get rid of bug message in log */ victim->desc = NULL; extract_char( victim, TRUE ); d->character = NULL; Load = load_char_obj( d, name, FALSE, FALSE ); victim = d->character; victim->desc = d; victim->timer = 0; /* * Insert in the char_list */ LINK( d->character, first_char, last_char, next, prev ); char_to_room( victim, in_room ); if( Load ) { send_to_char( "Your pfile has been reloaded.\n\r", victim ); send_to_char( "Their pfile has been reloaded.\n\r", ch ); sprintf( buf, "%s has been reloaded.", victim->name ); log_string( buf ); } else { send_to_char( "Hrmm bug, it didnt work.\n\r", ch ); return; } } else send_to_char( "They have to have a pfile before you can load it.\n\r", ch ); return; } /*this function came from Rantic/Samson's name authorization snippet if you don't that installed...you'll need this*/ bool exists_player( char *name ) { struct stat fst; char buf[256]; /* * Stands to reason that if there ain't a name to look at, they damn well don't exist! */ if( !name || !str_cmp( name, "" ) ) return FALSE; snprintf( buf, 256, "%s%c/%s", PLAYER_DIR, tolower( name[0] ), capitalize( name ) ); if( stat( buf, &fst ) != -1 ) return TRUE; return FALSE; }