void do_doas (CHAR_DATA *ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
argument = one_argument(argument,arg);
if(IS_NPC(ch))
return;
if(argument[0] == '\0')
{
send_to_pager("You must input the name of an online character.\n\r", ch);
return;
}
if (!str_prefix("quit", argument))
{
send_to_char ("&RDon't be silly, you'd turn them into you or trap yourself as a mortal.\n\r",ch);
return;
}
if (!str_cmp( arg, "mortal"))
{
do_as_mortal(ch, argument);
return;
}
if( ( ( victim = get_char_world(ch, arg) ) == NULL ))
{
send_to_pager("No such character online.\n\r", ch);
return;
}
if(IS_NPC(victim))
{
send_to_pager("That's not a player!\n\r", ch);
return;
}
if(!victim->desc)
{
send_to_pager("&RAre you trying to crash the MUD or something?\n\r", ch);
return;
}
if( ch->desc->original || victim->desc->original)
{
send_to_pager("Not while switched!\n\r", ch);
return;
}
if( get_trust(ch) < get_trust(victim) )
{
send_to_char("I don't think so..\n\r",ch);
return;
}
descriptor_switch(ch->desc, victim->desc);
interpret (victim, argument);
descriptor_switch(ch->desc, victim->desc);
}
void descriptor_switch( DESCRIPTOR_DATA *ch, DESCRIPTOR_DATA *victim)
{
DESCRIPTOR_DATA *origch;
DESCRIPTOR_DATA *origvictim;
CHAR_DATA *chr;
CHAR_DATA *vict;
if (!ch || !victim)
return;
origch = ch;
origvictim =victim;
chr = ch->character;
vict = victim->character;
victim = origch;
victim->character = vict;
victim->character->desc = origch;
ch = origvictim;
ch->character = chr;
ch->character->desc = origvictim;
}
void do_as_mortal(CHAR_DATA *ch, char *argument)
{
int trust, level;
level = ch->level;
trust = ch->trust;
ch->level = LEVEL_HERO;
ch->trust = LEVEL_HERO;
interpret( ch, argument);
ch->level = level;
ch->trust = trust;
return;
}