tfe-1.0/area/
tfe-1.0/files/
tfe-1.0/logs/
tfe-1.0/logs/immortal/
tfe-1.0/logs/mob/
tfe-1.0/logs/object/
tfe-1.0/logs/player/
tfe-1.0/logs/room/
tfe-1.0/notes/clans/
tfe-1.0/player/
tfe-1.0/prev/
tfe-1.0/prev/area/
tfe-1.0/prev/player/
tfe-1.0/prev/rooms/
tfe-1.0/rooms/
tfe-1.0/src-gc/
tfe-1.0/src-msvc/
tfe-1.0/src-unix/
tfe-1.0/www/
tfe-1.0/www/html/
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include "define.h"
#include "struct.h"


void do_brandish( char_data *ch, char* )
{
  send( "Disabled\n\r", ch );
  return;
}


void do_zap( char_data* ch, char* argument )
{
  char             arg  [ MAX_STRING_LENGTH ];
  char_data*    victim;
  obj_data*       wand;
  cast_data*      cast;
  obj_data*        obj;
  room_data*      room;
  int            level;
  int         duration;
  int            spell;
  /*
  argument = one_argument( argument, arg );

  if( ( wand = get_obj_inv( ch, arg ) ) == NULL
    && ( wand = get_obj_wear( ch, arg ) ) == NULL ) {
    send( ch, "You do not have that wand.\n\r" );
    return;
    }

  if( wand->wear_loc == -1 ) {
    send( ch, "You need to be holding an item to zap it.\n\r" );
    return;
    }

  if( wand->pIndexData->item_type != ITEM_WAND ) {
    send( ch, "You can only zap wands.\n\r" );
    return;
    }

  if( ( spell = wand->pIndexData->value[0] ) < 0
    || spell >= MAX_SPELL ) {
    send( ch, "That wand contains a non-existent spell.\n\r" );
    bug( "Do_Zap: wand value out of range" );
    return;
    }

  cast        = new cast_data;
  cast->spell = spell;

  if( !get_target( ch, cast, argument ) ) {
    delete cast;
    return;
    }

  victim  = cast->victim;
  obj     = cast->obj;
  room    = cast->room;

  delete cast;

  if( wand->value[3] <= 0 ) {
    send( ch, "You zap %s, but nothing happens.\n\r", wand );
    send_seen( ch, "%s zaps %s, but nothing happens.\n\r", ch, wand );
    return;
    }

  if( spell_table[ spell ].type == STYPE_OFFENSIVE ) {
    check_killer( ch, victim );
    start_fight( victim, ch );
    }

  wand->value[3]--;

  if( victim == NULL ) {
    send( ch, "You zaps %s.\n\r", wand );
    send_seen( ch, "%s zaps %s.\n\r", ch, wand );
    }
  else if( victim != ch ) {
    send( ch, "You zap %s at %s.\n\r", wand, victim );
    send_seen( ch, "%s zaps %s at %s.\n\r", ch, wand, victim );
    if( ch->Seen( victim ) )
      send( victim, "%s zaps %s at you!\n\r", ch, wand ); 
    }
  else {
    send( ch, "You zap %s at yourself.\n\r", wand );
    send_seen( ch, "%s zaps %s at %sself.",
      ch, wand, ch->Him_Her( ) );
    }

  remove_bit( &ch->status, STAT_HIDING );
  remove_bit( ch->affected_by, AFF_HIDE );
  remove_bit( &ch->status, STAT_CAMOUFLAGED );
  remove_bit( ch->affected_by, AFF_CAMOUFLAGE );
  remove_bit( ch->affected_by, AFF_INVISIBLE );
  strip_affect( ch, AFF_INVISIBLE );

  set_delay( ch, 20 );

  level    = wand->value[1];
  duration = wand->value[2];

  ( *spell_table[ spell ].function )( ch, victim,
    room == NULL ? obj : room, level, duration ); 
  */
  return;
}


/*
 *   POTION FUNCTIONS
 */


void do_quaff( char_data* ch, char* argument )
{
  obj_data*    obj;
  int        level;
  int     duration;
  int        spell;

  if( *argument == '\0' ) {
    send( ch, "Quaff what?\n\r" );
    return;
    }

  if( ( obj = one_object( ch, argument, "quaff", &ch->contents ) ) == NULL )
    return;

  if( obj->pIndexData->item_type != ITEM_POTION ) {
    send( ch, "You can quaff only potions.\n\r" );
    return;
    }

  if( ( spell = obj->pIndexData->value[0] ) < 0
    || spell >= MAX_SPELL ) {
    send( ch, "That potion contains a non-existent spell.\n\r" );
    bug( "Quaff: Spell out of Range." );
    bug( "-- Potion = %s.", obj->Seen_Name( NULL ) );
    return;
    }

  send( ch, "You quaff %s.\n\r", obj );
  send_seen( ch, "%s quaffs %s.\n\r", ch, obj );

  if( ( level = obj->value[1] ) < 1 || level > 25 ) {
    bug( "Quaff: Level out of range." );
    bug( "-- Potion = %s", obj->Seen_Name( NULL ) );
    level = 1;
    }

  if( ( duration = obj->value[2] ) < 1 ) {
    bug( "Quaff: Duration out of range." );
    bug( "-- Potion = %s", obj->Seen_Name( NULL ) );
    duration = 1;
    }  

  set_delay( ch, 10 );
  obj->Extract( 1 );

  ( *spell_table[ spell ].function )( NULL, ch, NULL,
    level, duration );

  return;
}


/*
 *   SCROLL ROUTINES
 */


void do_recite( char_data* ch, char* argument )
{
  char            arg  [ MAX_STRING_LENGTH ];
  cast_data*     cast;
  obj_data*    scroll;
  int           level;
  int        duration;
  int           spell;

  if( not_player( ch ) )
    return;

  if( is_set( &ch->status, STAT_BERSERK ) ) {
    send( ch, "Your mind is on killing, not reading scrolls.\n\r" );
    return;
    }

  argument = one_argument( argument, arg );

  if( ( scroll = one_object( ch, arg, "recite", &ch->contents ) ) == NULL )
    return;

  if( scroll->pIndexData->item_type != ITEM_SCROLL ) {
    send( ch, "%s isn't a scroll.\n\r", scroll );
    return;
    }

  if( !is_set( ch->pcdata->pfile->flags, PLR_HOLYLIGHT )
    && ( is_set( ch->affected_by, AFF_BLIND )
    || ch->in_room->is_dark( ) ) ) {
    send( ch, "It is too dark for you read any writing.\n\r" );
    return;
    }

  if( ( spell = scroll->pIndexData->value[0] ) < 0
    || spell >= MAX_SPELL ) {
    send( ch, "That scroll contains a non-existent spell.\n\r" );
    bug( "Recite: Scroll spell out of range." );
    bug( "-- Scroll = %s", scroll->Seen_Name( NULL ) );
    return;
    }

  cast        = new cast_data;
  cast->spell = spell;

  if( !get_target( ch, cast, argument ) ) {
    delete cast;
    return;
    }

  thing_data*  target  = cast->target;
  char_data*   victim  = character( target );

  delete cast;

  if( spell_table[ spell ].type == STYPE_OFFENSIVE ) {
    check_killer( ch, victim );
    ch->fighting = victim;
    react_attack( ch, victim );
    }

  if( spell == SPELL_RECALL-SPELL_FIRST 
    && is_set( &ch->in_room->room_flags, RFLAG_NO_RECALL ) ) {
    send( ch, "You attempt to pronounce the words on the scroll but\
 absolutely nothing\n\rhappens.\n\r" );
    return;
    }

  send( ch, "You recite %s.\n\r", scroll );
  send_seen( ch, "%s recites %s.\n\r", ch, scroll );

  remove_bit( &ch->status, STAT_HIDING );
  remove_bit( ch->affected_by, AFF_HIDE );
  remove_bit( &ch->status, STAT_CAMOUFLAGED );
  remove_bit( ch->affected_by, AFF_CAMOUFLAGE );
  strip_affect( ch, AFF_INVISIBLE );

  if( ( level = scroll->value[1] ) < 1 || level > 25 ) {
    bug( "Recite: Level out of range." );
    bug( "-- Scroll = %s", scroll->Seen_Name( NULL ) );
    level = 1;
    }

  if( ( duration = scroll->value[2] ) < 1 ) {
    bug( "Recite: Duration out of range." );
    bug( "-- Scroll = %s", scroll->Seen_Name( NULL ) );
    bug( "--   Vnum = %d", scroll->pIndexData->vnum );
    duration = 1;
    }  

  set_delay( ch, 20 );

  ( *spell_table[ spell ].function )( ch, victim,
    target, level, duration );

  if( scroll->Is_Valid( ) )
    scroll->Extract( 1 );
}