wolfpaw4.0-release/area/
wolfpaw4.0-release/backup/
wolfpaw4.0-release/bin/
wolfpaw4.0-release/boards/
wolfpaw4.0-release/clans/
wolfpaw4.0-release/councils/
wolfpaw4.0-release/deity/
wolfpaw4.0-release/finger/
wolfpaw4.0-release/gods/
wolfpaw4.0-release/guilds/
wolfpaw4.0-release/lockers/
wolfpaw4.0-release/log/
wolfpaw4.0-release/log/Clean/
wolfpaw4.0-release/maps/
wolfpaw4.0-release/offline_data/
wolfpaw4.0-release/player-obj/
wolfpaw4.0-release/player-obj/a/
wolfpaw4.0-release/player/
wolfpaw4.0-release/player/a/
wolfpaw4.0-release/plog/
wolfpaw4.0-release/save-rooms/
wolfpaw4.0-release/secure/
wolfpaw4.0-release/source/
wolfpaw4.0-release/source/betasrc/system/
wolfpaw4.0-release/source/betasrc/util/
wolfpaw4.0-release/system/clean-source/
wolfpaw4.0-release/system/clean-source/grux/
/*--------------------------------------------------------------------------*
 *                         ** WolfPaw 3.0 ** 				    *
 *--------------------------------------------------------------------------*
 *               WolfPaw 3.0 (c) 1997 - 1999 by Dale Corse		    *
 *--------------------------------------------------------------------------*
 *            The WolfPaw Coding Team is headed by: Greywolf                *
 *  With the Assitance from: Callinon, Dhamon, Sentra, Wyverns, Altrag      *
 *                           Scryn, Thoric, Justice, Tricops and Brogar.    *
 *--------------------------------------------------------------------------*
 *  Based on SMAUG 1.2a. Copyright 1994 - 1996 by Derek Snider		    *
 *  SMAUG Coding Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, *
 *		       Swordbearer, Gorog, Grishnakh and Tricops.           *
 *--------------------------------------------------------------------------*
 *  Merc 2.1 Diku MUD Improvments (C) 1992 - 1993 by Michael Chastain,      *
 *  Michael Quan, and Michael Tse. 					    *
 *  Original Diku MUD (C) 1990 - 1991 by Sebastian Hammer, Michael Seifert, *
 *  Hans Hendrik Strfeldt, Tom Madsen, and Katja Nyboe. 		    *
 *--------------------------------------------------------------------------*
 *		   Wizard Commands Module II				    *
 *--------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <arpa/telnet.h>
#include "mud.h"

void do_khistory( CHAR_DATA *ch, char *argument )
{
    CHAR_DATA *vch;
    MOB_INDEX_DATA *mob;
    int track;
    char arg[MIL];

    if( IS_NPC(ch) || !IS_IMMORTAL(ch) )
    {
	interpret(ch,"hfdlsa"); /* ;) */
	return;
    }

    one_argument( argument, arg );

    if( arg[0] == '\0' )
    {
	send_to_char( "syntax: khistory <player>\n\r",ch );
	return;
    }
    
    vch = get_char_world(ch,arg);

    if( !vch || IS_NPC(vch) || get_trust(ch) < get_trust(vch) )
    {
	send_to_char( "You can't read that person's kill history\n\r",ch );
	return;
    }

    ch_printf(ch, "&rKill history for:&c %s\n\r", vch->name);
    
    for( track = 0; 
	 track < MAX_KILLTRACK && vch->pcdata->killed[track].vnum;
	 track++ )
    {
	mob = get_mob_index( vch->pcdata->killed[track].vnum, 1 );
	if( !mob ) continue;
	
	ch_printf(ch,"&r   %-30s&c(&r%-5d&c)   &z-&r Killed &c%d &rtimes\n\r",
		capitalize(mob->short_descr),
		mob->vnum,
		vch->pcdata->killed[track].count);
    }

    return;
}

void do_showplayer( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
char arg[MIL];
char buf[MSL];
char buf2[MSL];
record_call("<do_showplayer>");

one_argument( argument, arg );

if( arg[0] == '\0' ) 
   {
    send_to_char( "Show which player??\n\r", ch );
    return;
   }

if( IS_NPC(ch) )
   {
    send_to_char( "NPCs are too stupid too read files\n\r", ch );
    return;
   }

if( !IS_SET( ch->pcdata->flags, PCFLAG_PAGERON ) )
   {
    send_to_char( "You must type config +pager first\n\r", ch );
    return;
   }

set_char_color( AT_LOG, ch );

if( ( victim = get_char_world( ch, arg ) ) == NULL )
   {
    sprintf( buf, "gunzip -f %s%c/%s", PLAYER_DIR, tolower(arg[0]), capitalize(arg));
    system(buf);
    sprintf( buf2, "%s%c/%s", PLAYER_DIR, tolower(arg[0]), capitalize(arg));
    show_file( ch, buf2 );
    sprintf( buf, "gzip -f %s%c/%s", PLAYER_DIR, tolower(arg[0]), capitalize(arg));
    system(buf);
    return;
   } 
if( ( victim = get_char_world( ch, arg ) ) != NULL )
   {
    sprintf( buf2, "%s%c/%s", PLAYER_DIR, tolower(arg[0]), capitalize(arg));
    show_file( ch, buf2 );
    return;
   }
}

void do_startroom( CHAR_DATA *ch, char *argument )
{
char buf[MSL];
char arg[MIL];
ROOM_INDEX_DATA *location;

one_argument( argument, arg );

if ( IS_NPC(ch) )
   return;

if ( arg[0] == '\0' )
{
if ( ch->in_room->level <= get_trust(ch) )
{
ch->pcdata->start_room = ch->in_room->vnum;
sprintf(buf,"Start-Room set to %d.\n\r",ch->pcdata->start_room);
save_char_obj( ch );
sprintf(buf,"%s set %s's start-room to %d",QUICKLINK(ch->name),
        QUICKLINK(ch->name), ch->pcdata->start_room );
log_string_plus( buf, LOG_NORMAL,(int)ch->level );
SET_BIT( ch->pcdata->flagstwo, MOREPC_SETSTART );
return;
}
send_to_char("I Don't think so!\n\r",ch);
return;
}


if ( ( location = find_location( ch,arg,1) )==NULL )
{
send_to_char("No such room.\n\r",ch);
return;
}

if ( location->level <= get_trust(ch) )
{
ch->pcdata->start_room = atoi(arg);
sprintf(buf,"Start-Room set to %d.\n\r",ch->pcdata->start_room);
save_char_obj( ch );
sprintf(buf,"%s set %s's start-room to %d",QUICKLINK(ch->name),
        QUICKLINK(ch->name), ch->pcdata->start_room );
log_string_plus( buf, LOG_NORMAL, (int)ch->level );
SET_BIT( ch->pcdata->flagstwo, MOREPC_SETSTART );
return;
}
send_to_char("I Don't think so!\n\r",ch);
return;
}

void do_istart( CHAR_DATA *ch, char *argument )
{
char buf[MSL];
char arg[MIL];
sh_int level;

argument = one_argument( argument, arg );

if ( arg[0] == '\0' )
{
send_to_char( "Syntax: istart <wizi level #>\n\r",ch);
return;
}

level = atoi(arg);

if ( level > get_trust(ch) )
{
send_to_char("I think not.\n\r",ch);
return;
}

SET_BIT( ch->pcdata->flagstwo, MOREPC_STARTINVIS );
ch->pcdata->invis_start = level;
sprintf( buf,"%s set %s's Invis-Start to %d", QUICKLINK(ch->name),
	QUICKLINK(ch->name), ch->pcdata->invis_start);
log_string_plus( buf, LOG_NORMAL, (int)ch->level );
send_to_char("Done.\n\r",ch);
return;
}

void do_wizlog( CHAR_DATA *ch, char *argument )
{
char arg[MIL];

one_argument( argument, arg );

if ( arg[0] == '\0' )
{
send_to_char("&wWizard Log Status:\n\r",ch);
send_to_char("------------------\n\r",ch);

ch_printf(ch,"&G(1)&w Standard Log's          %s\n\r", !IS_SET(ch->pcdata->deaf,CHANNEL_LOG) ?
		"&G(ON)" : "&R(OFF)" );
ch_printf(ch,"&G(2)&w Building and OLC Logs   %s\n\r", !IS_SET(ch->pcdata->deaf,CHANNEL_BUILD) ?
		"&G(ON)" : "&R(OFF)" );
ch_printf(ch,"&G(3)&w Communications Logs     %s\n\r",!IS_SET(ch->pcdata->deaf,CHANNEL_COMM) ?
		"&G(ON)" : "&R(OFF)" );
ch_printf(ch,"&G(4)&w Low Imm Logs            %s\n\r",!IS_SET(ch->pcdata->deaf,CHANNEL_MONITOR) ?
		"&G(ON)" : "&R(OFF)" );
ch_printf(ch,"&G(5)&w Smart-Mob Logs	    %s\n\r",!IS_SET(ch->pcdata->deaf,CHANNEL_MOBLOG) ?
		"&G(ON)" : "&R(OFF)" );
return;
}

if ( !is_number(arg) )
{
  send_to_char("Syntax: wizlog <#>\n\r",ch);
  return;
}

switch(atoi(arg))
{
  /*CHANNEL_LOG*/
  case 1:
  TOGGLE_BIT( ch->pcdata->deaf, CHANNEL_LOG );
  send_to_char("Done.\n\r",ch);
  break;  
  /* CHANNEL_BUILD*/
  case 2:
  TOGGLE_BIT( ch->pcdata->deaf, CHANNEL_BUILD );
  send_to_char("Done.\n\r",ch);
  break;  
  /* CHANNEL_COMM*/
  case 3:
  TOGGLE_BIT( ch->pcdata->deaf, CHANNEL_COMM );
  send_to_char("Done.\n\r",ch);
  break;  
  /* CHANNEL_MONITOR*/
  case 4:
  TOGGLE_BIT( ch->pcdata->deaf, CHANNEL_MONITOR );
  send_to_char("Done.\n\r",ch);
  break;  
  case 5:
  TOGGLE_BIT( ch->pcdata->deaf, CHANNEL_MOBLOG );
  break;
  default:
  send_to_char("invalid Choice.\n\r",ch);
  break;
}

return;
}

void do_approve ( CHAR_DATA *ch, char *argument )
{
char arg[MIL];
char arg2[MIL];
APPROVE_DATA *approve=NULL, *next_approve=NULL;
char buf[MSL];
char type[MSL];

argument = one_argument( argument, type );
argument = one_argument( argument, arg );
argument = one_argument( argument, arg2 );

if ( type[0] == '\0' )
{
  send_to_char("Syntax: approve <create/delete/list> <email> <password>\n\r",ch);
  send_to_char("NOTE: password not required to delete, or list Entrys.\n\r",ch);
  return;
}

if ( !str_cmp( type, "create" ) )
{

if ( arg[0] == '\0' || arg2[0] == '\0' )
{
  send_to_char("Syntax: approve <create/delete/list> <email> <password>\n\r",ch);
  send_to_char("NOTE: password not required to delete, or list Entrys.\n\r",ch);
  return;
}

CREATE( approve, APPROVE_DATA, 1 );
approve->email = STRALLOC(arg);
approve->password = STRALLOC(arg2);
LINK(approve, sysdata.first_approve, sysdata.last_approve, next, prev );

send_to_char("Character Approved.\n\r",ch);
sprintf(buf,"Email: %s Password: %s\n\r",arg,arg2);
send_to_char(buf,ch);
save_sysdata(sysdata);
return;
}

if ( !str_cmp( type, "delete" ) )
{
bool fMatch = FALSE;

if ( arg[0] == '\0'  )
{
  send_to_char("Syntax: approve <create/delete/list> <email> <password>\n\r",ch);
  send_to_char("NOTE: password not required to delete, or list Entrys.\n\r",ch);
  return;
}

  for ( approve = sysdata.first_approve; approve; approve = next_approve )
  {
    next_approve = approve->next;
    if ( !str_cmp( arg, approve->email ) )
    {
      STRFREE(approve->email);
      STRFREE(approve->password);
      UNLINK(approve,sysdata.first_approve,sysdata.last_approve,next,prev);
      DISPOSE(approve);
      fMatch = TRUE;
      break;
    }
}
if ( !fMatch )
send_to_char("Entry not found.\n\r",ch);
else
ch_printf( ch, "Approval for %s Deleted.\n\r",arg);
save_sysdata(sysdata);
return;
}

if ( !str_cmp( type, "list" ) )
{
  for ( approve = sysdata.first_approve; approve; approve = next_approve )
  {
    next_approve = approve->next;
    sprintf(buf,"Email: %-20s Pass: %s\n\r",approve->email,approve->password);
    send_to_char(buf,ch);
  }
send_to_char("Done.\n\r",ch);
return;
}

  send_to_char("Syntax: approve <create/delete/list> <email> <password>\n\r",ch);
  send_to_char("NOTE: password not required to delete, or list Entrys.\n\r",ch);
  return;
}

/* Convert an IP to a Hostname - for Gods use --GW */
void do_nslookup( CHAR_DATA *ch, char *argument )
{
 struct hostent *from;

 from=gethostbyname( (char *)argument );

 if ( !from )
 {
  ch_printf(ch,"Host not found.\n\r",0);
  return;
 } 

 ch_printf(ch,"Name Server Lookup on %s:\n\r\n\r",argument);
 ch_printf(ch,"Hostname:   %s\n\r",from->h_name);
 ch_printf(ch,"Done.\n\r",0);
 return;
}