mud_dist/area/
/***************************************************************************
 *  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.                              *
 *                                                                         *
 *  Envy Diku Mud improvements copyright (C) 1994 by Michael Quan, David   *
 *  Love, Guilherme 'Willie' Arnold, and Mitchell Tse.                     *
 *                                                                         *
 *  In order to use any part of this Envy Diku Mud, you must comply with   *
 *  the original Diku license in 'license.doc', the Merc license in        *
 *  'license.txt', as well as the Envy license in 'license.nvy'.           *
 *  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.                                                  *
 ***************************************************************************/
/*comment*/
/*$Id: act_race.c,v 1.8 2005/02/03 15:32:58 ahsile Exp $*/
#if defined( macintosh )
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"

void do_breathe_fire( CHAR_DATA *ch, char *argument )
{

   CHAR_DATA *victim;
   char	arg [ MAX_INPUT_LENGTH ];

    if ( IS_NPC( ch ) )
    {
	return;
    }

    if ( ch->race != 13 )
    {
	send_to_char(AT_BLUE, "You are not a dragon.\n\r", ch );
	return;
    }

    if ( ch->level < 30 )
    {
	send_to_char(AT_BLUE, "You must be level 30 to use your breath attack.\n\r", ch);
	return;
    }

    one_argument( argument, arg) ;
    
    if ( arg[0] == '\0' )
    {
	send_to_char(C_DEFAULT, "Breathe fire on whom?\n\r", ch);
	return;
    }

    if ( !(victim = get_char_room( ch, arg ) ) )
    {
	send_to_char(C_DEFAULT, "They aren't here.\n\r", ch );
	return;
    }

    if ( victim == ch )
    {
	send_to_char(C_DEFAULT, "Breathe on yourself?\n\r", ch );
	return;
    }

    if ( !is_pkillable( ch, victim ) ) {
	return;
    }

    if ( IS_AFFECTED2( ch, AFF_SHADOW_PLANE ) )
    {
	send_to_char(AT_WHITE, "You must leave the shadow realm.\n\r", ch);
	return;
    }
    if ( IS_AFFECTED4( ch, AFF_BURROW ) )
    {
	send_to_char(AT_WHITE, "You must wait until the earth releases you!\n\r", ch);
	return;
    }

    if ( IS_AFFECTED2( victim, AFF_SHADOW_PLANE ))
    {
	send_to_char(AT_WHITE, "You can not attack someone who is in the shadow plane.\n\r", ch);
	return;
    }
    if ( IS_AFFECTED4( victim, AFF_BURROW ) )
    {
	send_to_char(AT_WHITE, "You cannot attack someone who is burrowed!\n\r", ch);
	return;
    }

    if ( IS_AFFECTED( victim, AFF_PEACE ) )
    {
	send_to_char(AT_WHITE, "A wave of peace overcomes you.\n\r", ch);
	return;
    }

    if (!IS_NPC(victim))
	    ch->pkill_timer = 0;

    WAIT_STATE( ch, skill_table[skill_lookup("breathe fire")].beats );


    damage( ch, victim, number_range( ch->level * 3, ch->level * 9 ), skill_lookup("breathe fire") );
    return;
}

void do_race_fly( CHAR_DATA *ch, char *argument ) /* void do_fly */
{
   AFFECT_DATA af;
   char	arg [ MAX_INPUT_LENGTH ];

    if ( IS_NPC( ch ) )
    {
	return;
    }

    if ( ch->race != 13 && ch->race != 10 && ch->race != 15 && ch->race != 16
      && ch->race != 20 && ch->race != 21 && ch->race != 22 && ch->race != 23 
      && ch->race != 24 && ch->race != 25 ) // Extra race checks - ahsile 
    {
	send_to_char(AT_BLUE, "You can not fly.\n\r", ch );
	return;
    }

    if ( ch->level < 5 )
    {
	send_to_char(AT_BLUE, "You must be level 5 to fly.\n\r", ch);
	return;
    }

    one_argument( argument, arg) ;
    

    if ( IS_AFFECTED( ch, AFF_FLYING ) )
    {
	send_to_char(AT_WHITE, "You are already flying.\n\r", ch);
	return;
    }

    WAIT_STATE( ch, skill_table[skill_lookup("race fly")].beats );

    af.type	= skill_lookup("race fly");
    af.duration = ch->level;
    af.location = APPLY_NONE;
    af.modifier = 0;
    af.bitvector = AFF_FLYING;
    affect_to_char( ch, &af );

    send_to_char(AT_BLUE, "Your feet rise off the ground.\n\r", ch);
    act(AT_BLUE, "$n's feet rise off the ground.", ch, NULL, NULL, TO_ROOM );

    return;
}