/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* ROM 2.4 is copyright 1993-1998 Russ Taylor *
* ROM has been brought to you by the ROM consortium *
* Russ Taylor (rtaylor@hypercube.org) *
* Gabrielle Taylor (gtaylor@hypercube.org) *
* Brian Moore (zump@rom.org) *
* By using this code, you have agreed to follow the terms of the *
* ROM license, in the file Rom24/doc/rom.license *
***************************************************************************/
/***************************************************************************
* Written by Joseph Benfield, aka Diablos of End of Time. No credit as *
* this was a quick and easy thing to write. A few of my immortal staff, *
* including me, have accidentally deleted our characters because of it not *
* requiring a password. This simple replacement fixes that. This is my *
* first snippet, but it's simple enough to where it should work without *
* problems. Aside from requiring a password, it has also been modified to *
* log within the command itself rather than interp.c so that any failed *
* attempts to login, any typos, or the actual successful deletion itself *
* will not any arguments. For example, this the delete command with no *
* arguments: Log Diablos: delete This is when an argument supplied *
* does not match the password: FAILED DELETE: Diablos! This will show *
* when the deletion is successful: Diablos has deleted! To install this, *
* it is rather simple. First going into interp.c and find the delete *
* command, then replace 'LOG_ALWAYS' with 'LOG_NORMAL'. This will prevent *
* the logging of arguments as mentioned before. The command itself, *
* however, is designed to emulate the command as if logged. It will show *
* over wiznet and in the logs, but again, without any arguments, passwords *
* etc. Find your delete command in probably act_comm.c and replace it *
* with the following: *
***************************************************************************/
/* Improved to require a password to use. Useful for preventing things like
Immortals forcing people to "delete, delete" or any possible loopholes involving
things like charm. */
void do_delete( CHAR_DATA * ch, char *argument )
{
char strsave[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
DESCRIPTOR_DATA *d, *d_next;
int id;
if ( IS_NPC( ch ) )
return;
if ( argument[0] == '\0' ) {
send_to_char( "Syntax: delete <password>\n\rThis will delete your character permanently!\n\r", ch );
wiznet( "Log $N: delete", ch, NULL, 0, 0, 0 );
sprintf( log_buf, "Log %s: delete", ch->name );
log_string( log_buf );
return;
}
if ( strcmp( crypt( argument, ch->pcdata->pwd ), ch->pcdata->pwd ))
{
send_to_char( "{RWrong password.{x\n\r", ch );
sprintf( log_buf, "FAILED DELETE: %s!", ch->name );
log_string( log_buf );
wiznet( "Log $N: FAILED DELETE!", ch, NULL, 0, 0, 0 );
return;
}
send_to_char( "Your character has been deleted.\n\r", ch );
act( "$n has deleted $mself.", ch, NULL, NULL, TO_ROOM );
sprintf( strsave, "%s%s", PLAYER_DIR, capitalize( ch->name ) );
wiznet( "$N has deleted $Mself.", ch, NULL, 0, 0, 0 );
stop_fighting( ch, TRUE );
sprintf( log_buf, "%s has deleted!", ch->name );
log_string( log_buf );
unlink( strsave );
id = ch->id;
d = ch->desc;
extract_char( ch, TRUE );
if ( d != NULL )
close_socket( d );
for ( d = descriptor_list; d != NULL; d = d_next )
{
CHAR_DATA *tch;
d_next = d->next;
tch = d->original ? d->original : d->character;
if ( tch && tch->id == id )
{
extract_char( tch, TRUE );
close_socket( d );
}
}
return;
}