cotn25/area/
cotn25/src/
/* Additions to the mud by Marcus ( Marcus@z2designs.com ) AIM: Stealthbig */


#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_darktouch (CHAR_DATA *ch, char *argument)
{
  CHAR_DATA *victim;
  char arg[MAX_INPUT_LENGTH];
  argument = one_argument( argument, arg );
   
   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
   {
   send_to_char("Huh?\n\r",ch);
   return;
   }
   
   else if (arg[0] == '\0')
   {
   send_to_char("Please choose your victim.\n\r", ch );
   return;
   }
   
   else if ((victim = get_char_room(ch, arg)) == NULL)
   {
        send_to_char("They are not here.\n\r", ch );
        return;
   }
      if (is_safe(ch, victim)) return;
      act("$n sets $m half transparent hands on $N's body, forcing $M to shiver violently!#n'.",ch,NULL,victim,TO_NOTVICT);
      act("You set your half transparent hands on $N's body, forcing $M to shiver violently!#n'.",ch,NULL,victim,TO_CHAR);
      act("$n sets $m half transparent hands on your body, causing to shiver violently!#n'.",ch,NULL,victim,TO_VICT);
	        multi_hit(ch, victim, gsn_grimtouch);
	        multi_hit(ch, victim, gsn_grimtouch);
      WAIT_STATE(victim, 5);
      WAIT_STATE(ch, 20);
            return;
}


void do_dimensionwalk ( CHAR_DATA *ch, char *argument )
{
  CHAR_DATA *victim;
  char buf[MAX_STRING_LENGTH];
  char arg[MAX_INPUT_LENGTH];
  argument = one_argument(argument, arg);
  
   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->move < 600)
  {
    stc("You do not have enough vitality to do that!\n\r",ch);
    return;
  }
  if (arg[0] == '\0')
  {
    send_to_char( "Go to whoms dimension?\n\r", ch );
    return;
  }
  if ( ( victim = get_char_world( ch, arg ) ) == NULL )
  {
    send_to_char( "They aren't here.\n\r", ch );
    return;
  }   
  if( victim == ch )
  {
    stc ( "Not to yourself.\n\r",ch);
    return;
  }
  if( IS_SET(victim->in_room->room_flags, ROOM_ASTRAL))
  {
    stc( "You can't find it's room.\n\r",ch); 
    return;
  }
  if( IS_SET(ch->in_room->room_flags, ROOM_ASTRAL))
  {
    stc( "Your room is not connected to the astral plane.\n\r",ch);
    return;
  }
  if  (!IS_NPC(victim) && !IS_IMMUNE(victim,IMM_SUMMON) )
  {
    send_to_char("They don't want you near them!\n\r",ch);
    return;
  }
  if ( room_is_private(victim->in_room ) )
  {
    send_to_char( "That room is private right now.\n\r", ch );
    return;
  }
  if (victim->in_room->vnum == ch->in_room->vnum)
  {
    send_to_char("But you're already there!\n\r",ch);
    return;
  }
  char_from_room(ch);
  char_to_room(ch,victim->in_room);
  if (IS_NPC(victim))
  {
    sprintf(buf,"You cross dimensions to meet %s!\n\r",victim->short_descr);
    send_to_char(buf, ch);
  }
  if (!IS_NPC(victim))
  {
    sprintf(buf,"You cross dimensions to meet %s!\n\r",victim->name);
    send_to_char(buf, ch);
  }
  act("$n slowly becomes visible before you.\n\r",ch,NULL,NULL,TO_ROOM);
  do_look(ch, "auto");
  ch->move -= 600;
  return;
}

void do_wraithaura ( CHAR_DATA *ch, char *argument )
{
  if (IS_NPC(ch)) return;
   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[WRAITH_CHAOS] < 8)
  {
    send_to_char("You are not chaotic enough.\n\r",ch);
    return;
  }
  if (IS_SET(ch->pcdata->powers[WRAITH_POWERS], WRAITH_AURA))
  {
    REMOVE_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_AURA);
    act("Your dimensional aura fades.", ch, NULL, NULL, TO_CHAR);
    act("$n's loses his aura.", ch, NULL, NULL, TO_ROOM);
    return;
  }
  SET_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_AURA);
  act("Your dimensional aura comes into place.", ch, NULL, NULL, TO_CHAR);
  act("#0$n #RROARS#n #0as hundreds of souls #7s#0w#7i#0r#7l#n#0 around $s body.#n", ch, NULL, NULL, TO_ROOM);
  return; 

}
 
 
/* Learning */
void do_acquire ( CHAR_DATA *ch, char *argument )
{
  char buf[MAX_STRING_LENGTH];
  char arg[MAX_INPUT_LENGTH];
  argument = one_argument(argument, arg);


   if (arg[0] == '\0')
    {
    sprintf(buf, "Current powers : #RHate [#7%d#R] Chaos [#7%d#R] Wrath [#7%d#R] Destruction [#7%d#R]\n\r",
      ch->pcdata->powers[WRAITH_HATE], ch->pcdata->powers[WRAITH_CHAOS], ch->pcdata->powers[WRAITH_WRATH], ch->pcdata->powers[WRAITH_DESTRUCTION]);
    send_to_char(buf,ch);
    send_to_char("What dark power do you wish to acquire? [hate, chaos, wrath, destruction]\n\r",ch);
    return;
    }
   
   if (!str_cmp(arg,"hate"))
    {
    if ((!IS_CLASS(victim, CLASS_WRAITH) && !IS_CLASS(victim, CLASS_SHADOWBORN)
    && !IS_CLASS(victim, CLASS_SHADOW_FIEND) && !IS_CLASS(victim, CLASS_VAMPIRIC_MIST)))
   || ch->pcdata->powers[WRAITH_HATE] > 9)
      {
        send_to_char("You can't do that.\n\r",ch);
        return;
      }
      
      if (ch->exp < (ch->pcdata->powers[WRAITH_HATE]+1)*10000000 && ch->expmult < 1)
      {
        send_to_char("You don't have enough exp.\n\r",ch);
        return;
      }
      ch->pcdata->powers[WRAITH_HATE]++;
      gain_exp(ch, -1*ch->pcdata->powers[WRAITH_HATE]*10000000);
      send_to_char("Your hate of others increases.\n\r",ch);
      return;  
    }

   if (!str_cmp(arg,"wrath"))
    {
if ((!IS_CLASS(victim, CLASS_WRAITH) && !IS_CLASS(victim, CLASS_SHADOWBORN)
    && !IS_CLASS(victim, CLASS_SHADOW_FIEND) && !IS_CLASS(victim, CLASS_VAMPIRIC_MIST))
 || ch->pcdata->powers[WRAITH_WRATH] > 9)
      {
        send_to_char("You can't do that.\n\r",ch);
        return;
      }
  
      if (ch->exp < (ch->pcdata->powers[WRAITH_WRATH]+1)*10000000  && ch->expmult < 1)
      {
        send_to_char("You don't have enough exp.\n\r",ch);
        return;
      }
      ch->pcdata->powers[WRAITH_WRATH]++;
      gain_exp(ch, -1* ch->pcdata->powers[WRAITH_WRATH]*10000000);
      send_to_char("Your dark wrath increases.\n\r",ch);
      return;
    }

   if (!str_cmp(arg,"chaos"))
    {
if ((!IS_CLASS(victim, CLASS_WRAITH) && !IS_CLASS(victim, CLASS_SHADOWBORN)
    && !IS_CLASS(victim, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST))
 || ch->pcdata->powers[WRAITH_CHAOS] > 9)
      {
        send_to_char("You can't do that.\n\r",ch);
        return;
      }
  
      if (ch->exp < (ch->pcdata->powers[WRAITH_CHAOS]+1)*10000000 && ch->expmult < 1)
      {
        send_to_char("You don't have enough exp.\n\r",ch);
        return;
      }
      ch->pcdata->powers[WRAITH_CHAOS]++;
      gain_exp(ch, -1* ch->pcdata->powers[WRAITH_CHAOS]*10000000);
      send_to_char("You become more chaotic, your every move should be cause for fear.\n\r",ch);
      return;
    }

   if (!str_cmp(arg,"destruction"))
    {
if ((!IS_CLASS(victim, CLASS_WRAITH) && !IS_CLASS(victim, CLASS_SHADOWBORN)
    && !IS_CLASS(victim, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST))
|| ch->pcdata->powers[WRAITH_DESTRUCTION] > 9)
      {
        send_to_char("You can't do that.\n\r",ch);
        return;
      }
  
      if (ch->exp < (ch->pcdata->powers[WRAITH_DESTRUCTION]+1)*10000000 && ch->expmult < 1)
      {
        send_to_char("You don't have enough exp.\n\r",ch);
        return;
      }
      ch->pcdata->powers[WRAITH_DESTRUCTION]++;
      gain_exp(ch, -1* ch->pcdata->powers[WRAITH_DESTRUCTION]*10000000);
      send_to_char("Your destructive capabilities increase.\n\r",ch);
      return;
    }
}
void do_powerhate( CHAR_DATA *ch, char *argument )
{
    
  if (IS_NPC(ch)) return;  
   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[WRAITH_HATE] < 7)
  
  {
    send_to_char("You dont have enough hate to do this.\n\r",ch);
    return;
  }

  if (IS_SET(ch->pcdata->powers[WRAITH_POWERS], WRAITH_POWERHATE))
  {
    REMOVE_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_POWERHATE);
    act( "$n loses his hate",ch,NULL,NULL,TO_ROOM);
    send_to_char("You lower your power, and hate others less.\n\r",ch);
    ch->damroll -=1200;
    ch->hitroll -=1200;    
    return;
  }
  if (ch->move < 2000 || ch->mana < 2000)
  {
    send_to_char("You need 2000 mana and 2000 move to do this.\n\r",ch);
    return;
  }
 
   SET_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_POWERHATE);
    act( "$n transfers his hate into combat supremacy.",ch,NULL,NULL,TO_ROOM);
    send_to_char("You transfer your hate of others into combat supremacy\n\r",ch);
    ch->move -= 2000;  
    ch->mana -= 2000;
// HEY MAYBE WHEN YOU TRY TO LOWER WRAITHS WITHOUT ME KNOWING YOU SHOULD LOWER THEM RIGHT //
    ch->damroll +=1200;   
    ch->hitroll +=1200;
    return;
}

void do_perfectsight( CHAR_DATA *ch, char *argument )
{
  if (IS_NPC(ch)) return;
   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[WRAITH_WRATH] < 7)
  {
    send_to_char("You dont have enough wrath to penerate the realms of the living.\n\r",ch);
    return;
  }
  if (IS_SET(ch->act, PLR_HOLYLIGHT))
  {
    REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
    send_to_char("Your vision is back to normal.\n\r", ch);
  }
  else
  {
    SET_BIT(ch->act, PLR_HOLYLIGHT);
    send_to_char( "You eyes now penetrate the dimension of the mortals.\n\r", ch );
  }
return;
}

void do_darksummon( CHAR_DATA *ch, char *argument )
   {
    char arg1[MAX_INPUT_LENGTH];
    ROOM_INDEX_DATA *location;
  //  OBJ_DATA  *obj;
    CHAR_DATA *victim;
 //   char       arg [MAX_INPUT_LENGTH];
    argument = one_argument( argument, arg1 );
 
   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
        if ( arg1[0] == '\0' )
    {
        send_to_char( "Darksummon who?\n\r", ch );
        return;
    }
    location = ch->in_room;
 if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
    {
        send_to_char( "They aren't here.\n\r", ch );
        return;
    }
    if ( victim->fighting != NULL )
    {
        send_to_char( "They are fighting right now.\n\r", ch );
        return;
    }

    if (IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL)
    ||   IS_SET(victim->in_room->room_flags, ROOM_ASTRAL)
    ||   IS_SET(victim->in_room->room_flags, ROOM_SAFE))

        {
        send_to_char("You cant seem to focus on your victim.\n\r",ch);
        return;
        }

if (IS_SET (victim->in_room->room_flags, ROOM_ARENA))
        { 
        send_to_char("You crazy bitch, you cant do this in the arena.\n\r",ch);
        return;
        }
 if (ch->practice < 1000)
{
send_to_char("You need 1000 primal to use this\n\r",ch);
return;
}

if (ch->in_room->vnum >= 900000)
{
send_to_char("You cannot do this from inside your clan recall\n\r",ch);
return;
}

  if (victim->fight_timer == 0)
  {
    send_to_char("You can only summon someone who is freshly done a battle.\n\r",ch);
    return;
  }  
    ch->practice -= 1000;  
    act( "$n slips away into a dimensional rift.", victim, NULL, NULL, TO_ROOM );
    char_from_room( victim );
    char_to_room( victim, location );
    act( "$n is sucked through the dimensional rift you created.", victim, NULL, NULL, TO_ROOM );
    if ( ch != victim )
        act( "$n has sucked you into his dimensional rift.", ch, NULL, victim, TO_VICT );

}

void do_dimedodge( CHAR_DATA *ch, char *argument )
{
   
  if (IS_NPC(ch)) return;
   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[WRAITH_DESTRUCTION] < 7)
    
  {
    send_to_char("You dont have the destructive capabilities to do this.\n\r",ch);
    return;
  }
 
  if (IS_SET(ch->pcdata->powers[WRAITH_POWERS], WRAITH_DIMEDODGE))
  {
    REMOVE_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_DIMEDODGE);
    act( "$n loses his superior dodging",ch,NULL,NULL,TO_ROOM);
    send_to_char("Your dodging goes back to normal.\n\r",ch);
    return;
  }
    
   SET_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_DIMEDODGE);
    act( "$n gains superior dodging..",ch,NULL,NULL,TO_ROOM);
    send_to_char("You now can jump dimensions to dodge attacks.\n\r",ch);
    return;
}

void do_darkbanish( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];
    char arg1[MAX_INPUT_LENGTH];
    CHAR_DATA *victim;
  
    argument = one_argument( argument, arg1 );
   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }  
if ( arg1[0] == '\0' )
	{
        send_to_char( "Darkbanish who?\n\r", ch );
        return;
	}

if ( victim == ch )
	{
	send_to_char("Not to yourself.\n\r",ch);
	return;
	}

if ( ( victim = get_char_world( ch, arg1 ) ) == NULL )
	{
        send_to_char( "They aren't here.\n\r", ch );
        return;
	}
if (IS_SET (ch->in_room->room_flags, ROOM_ARENA)) 
        {
        send_to_char("You crazy bitch, you cant do this in the arena.\n\r",ch);
        return;
	}
       
if ( victim->position > 1 )
	{
	send_to_char( "You can only do this to mortally wounded players.\n\r", ch );
	return;
	}

if (is_safe(ch,victim)) return;
    

    act( "$n is banished to the dark dimension of the wraith", victim, NULL, NULL, TO_ROOM );
    char_from_room( victim );
    char_to_room(victim,get_room_index(77301));
    act( "$n is banished to your hellish dimension", victim, NULL, NULL, TO_ROOM );
    if ( ch != victim )
    act( "$n has banished you to his hellish dimension.", ch, NULL, victim, TO_VICT );
    sprintf(buf,"#7%s#0 has been banished to the wraiths realm by #7%s.#n\n\r",victim->pcdata->switchname,ch->pcdata->switchname);
    do_info(ch,buf);
    victim->hit += number_range(1000,1500);
}


void do_finalrage (CHAR_DATA *ch, char *argument)
{  
  CHAR_DATA *victim;
  char arg[MAX_INPUT_LENGTH];
  argument = one_argument( argument, arg );

   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
   {
   send_to_char("Huh?\n\r",ch);
   return;
   }
       
if (ch->hit > 50000)
        {
        send_to_char( "You have too much health.\n\r", ch );
        return;
        } 
  else if (arg[0] == '\0')
   {
   send_to_char("Please choose your victim.\n\r", ch );
   return;
   }
    
   else if ((victim = get_char_room(ch, arg)) == NULL)
   {
        send_to_char("They are not here.\n\r", ch );
        return;
   }
do_say(ch, "I have died once already, I will not die again!");
      multi_hit(ch, victim, gsn_grimtouch);
      multi_hit(ch, victim, gsn_grimtouch);
      multi_hit(ch, victim, gsn_dblast);
      multi_hit(ch, victim, gsn_grimtouch);
      multi_hit(ch, victim, gsn_dblast);

      WAIT_STATE(ch, 25);
            return;
}


void do_impale (CHAR_DATA *ch, char *argument)
{   
  CHAR_DATA *victim;
  OBJ_DATA *obj;
  char arg[MAX_INPUT_LENGTH];
  argument = one_argument( argument, arg );

   if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST)
       && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN))
   {
   send_to_char("Huh?\n\r",ch);
   return;
   }
    
   else if (arg[0] == '\0')
   {       
   send_to_char("Please choose your victim.\n\r", ch );
   return;
   }
  
   else if ((victim = get_char_room(ch, arg)) == NULL)
   {       
        send_to_char("They are not here.\n\r", ch );
        return;
   }
  if(((obj = get_eq_char( ch, WEAR_WIELD ) ) == NULL) || obj->item_type != ITEM_WEAPON)
  {
  if(((obj = get_eq_char( ch, WEAR_HOLD ) ) == NULL) || obj->item_type != ITEM_WEAPON)
     {
        send_to_char("You dont have a weapon to throw.\n\r", ch );
        return;
     }
  }
obj_from_char( obj );
obj_to_char(obj, victim);
do_say(ch, "Fool, perish at my feet.");
act( "#0$n has thrown his weapon, impaling his victim.#n",ch,NULL,NULL,TO_ROOM);
SET_BIT(victim->extra, PINNEDWALL);
if (victim->position == POS_FIGHTING) stop_fighting(victim,TRUE);
send_to_char("You have impaled your victim.\n\r",ch);
send_to_char("Has thrown his weapon and impaled you, flex to remove it.\n\r", victim );    
victim->position = POS_STUNNED;
WAIT_STATE(ch, 12);
}   

void do_wraitharmor( CHAR_DATA *ch, char *argument )
{  
  OBJ_INDEX_DATA *pObjIndex;
  OBJ_DATA *obj;
  char arg[MAX_INPUT_LENGTH];
  int vnum = 0;
  
  argument = one_argument( argument, arg );
  if (IS_NPC(ch)) return;
  if( !IS_CLASS(ch, CLASS_WRAITH))
  {
    send_to_char("What?\n\r",ch);
    return;
  }
  if (arg[0] == '\0')
  {   
    send_to_char("Please specify which piece of angel armor you wish to make: Sword Bracer Collar Ring Plate Helmet Leggings Boots Gloves Sleeves Cloak Belt Visor.\n\r",ch);
    return;
  }
  if ( ch->practice < 150 )
  {
    send_to_char("It costs 150 points of primal to create wraith equipment.\n\r",ch);
       return;
  }
  if (!str_cmp(arg,"sword")) vnum = 33292;
  else if (!str_cmp(arg,"bracer")) vnum = 33281;
  else if (!str_cmp(arg,"collar")) vnum = 33282;
  else if (!str_cmp(arg,"ring")) vnum = 33280;
  else if (!str_cmp(arg,"plate")) vnum = 33283;
  else if (!str_cmp(arg,"helmet")) vnum = 33284;
  else if (!str_cmp(arg,"leggings")) vnum = 33290;
  else if (!str_cmp(arg,"boots")) vnum = 33289;
  else if (!str_cmp(arg,"gloves")) vnum = 33287;
  else if (!str_cmp(arg,"sleeves")) vnum = 33288;
  else if (!str_cmp(arg,"cloak")) vnum = 33291;
  else if (!str_cmp(arg,"belt")) vnum = 33285;
  else if (!str_cmp(arg,"visor")) vnum = 33286;
  else
  {
    do_wraitharmor(ch,"");
    return;
  }
  if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
  {
    send_to_char("Missing object, please inform Xrakisis.\n\r",ch);
        return;
  }
  obj = create_object(pObjIndex, 50);
  obj->questowner = str_dup(ch->pcdata->switchname);
  obj_to_char(obj, ch);
  ch->practice -= 150;
  act("$p appears in your hands.",ch,obj,NULL,TO_CHAR);
  act("$p appears in $n's hands.",ch,obj,NULL,TO_ROOM);
  return;
}