/*--------------------------------------------------------------------------* * ** 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; }