/***************************************************************************
 *  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.                              *
 *                                                                         *
 *  In order to use any part of this Merc Diku Mud, you must comply with   *
 *  both the original Diku license in 'license.doc' as well the Merc       *
 *  license in 'license.txt'.  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.                                                  *
 ***************************************************************************/

#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"
#include "player.h"

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

    argument = one_argument( argument, arg );

    if (IS_NPC(ch)) return;

    if (!IS_CLASS(ch, CLASS_REVNANT) )
    {
        send_to_char("Huh?\n\r",ch);
	return;
    }

    if ( arg[0] == '\0' )
    {
        send_to_char( "Whom do you wish to curse to undead existance?\n\r", ch );
	return;
    }
    
    if ( ( victim = get_char_room( ch, arg ) ) == NULL )
    {
	send_to_char( "They aren't here.\n\r", ch );
	return;
    }

    if ( IS_NPC(victim) )
    {
	send_to_char( "Not on NPC's.\n\r", ch );
	return;
    }

    if ( IS_IMMORTAL(victim) )
    {
        send_to_char( "They exist outside the world of life and death.\n\r", ch );
	return;
    }

    if ( ch == victim )
    {
        send_to_char( "You cannot grant yourself live after death.\n\r", ch );
	return;
    }

    if (IS_CLASS(victim, CLASS_REVNANT))
    {
        send_to_char( "They have already risen from their death.\n\r", ch );
	return;
    }

    if ( victim->level != LEVEL_AVATAR && !IS_IMMORTAL(victim) )
    {
        send_to_char( "Only Avatars can rise from the dead.\n\r", ch );
	return;
    }

    if (IS_CLASS(victim, CLASS_VAMPIRE) || IS_SET(victim->pcdata->stats[UNI_AFF], VAM_MORTAL))
    {
        send_to_char( "You cannot grant a Vampire revnant life.\n\r", ch );
	return;
    }

    if (IS_CLASS(victim, CLASS_WEREWOLF))
    {
        send_to_char( "You cannot grant a Werewolf revnant life.\n\r", ch );
	return;
    }

    if (IS_CLASS(victim, CLASS_DEMON) || IS_SET(victim->special, SPC_CHAMPION))
    {
        send_to_char( "You cannot grant a Demon revnant life.\n\r", ch );
	return;
    }

    if (IS_CLASS(victim, CLASS_HIGHLANDER))
    {
        send_to_char( "You cannot grant a Highlander revnant life.\n\r", ch );
	return;
    }  

	if (IS_CLASS(victim, CLASS_NINJA))
	{
        send_to_char( "You cannot grant a Ninja revnant life.\n\r", ch );
	return;
	}

    if (!IS_IMMUNE(victim,IMM_VAMPIRE))
    {
        send_to_char( "They are unwilling to pass to the other side.\n\r", ch );
	return;
    }

    if (ch->exp < 1000000)
    {
        send_to_char("You cannot afford the #31,000,000#8 exp required to give them eternal life.\n\r",ch);
	return;
    }

    if (victim->exp < 1000000)
    {
        send_to_char("They cannot afford the #31,000,000#8 exp required to rise from their death.\n\r",ch);
	return;
    }

    ch->exp -= 1000000;
    victim->exp -= 1000000;

    act("You deal $N a fatal blow and watch as his spirit begins to form.", ch, NULL, victim, TO_CHAR);
    act("$n stabs $N killing him in cold blood.", ch, NULL, victim, TO_NOTVICT);
    act("$n fatally stabs you in the heart with a Revnant claw.", ch, NULL, victim, TO_VICT);
    victim->level = LEVEL_REVNANT;
    victim->trust = LEVEL_REVNANT;
    send_to_char( "You rise from your death and stand before your grave.\n\r", victim );
    free_string(victim->lord);
    free_string(victim->clan);
    victim->clan=str_dup(ch->clan);
    victim->lord = str_dup(ch->name);
    victim->class    = CLASS_REVNANT;
    victim->pcdata->stats[UNI_GEN] = ch->pcdata->stats[UNI_GEN]+1;
    save_char_obj(ch);
    save_char_obj(victim);
    return;
}

void do_mourn( CHAR_DATA *ch, char *argument )
{
    char arg1 [MAX_INPUT_LENGTH];
    char buf[MAX_STRING_LENGTH];
    int improve;
    improve = PMONK; 
    
    argument = one_argument( argument, arg1 );
    
    if (IS_NPC(ch)) return;

    if (!IS_CLASS(ch, CLASS_REVNANT))
    {
	send_to_char("Huh?\n\r",ch);
	return;
    }

    if (arg1[0] == '\0')
    {
	    send_to_char("     Your undead powers are:\n\r",ch);
	    send_to_char("- Remember to put single quotes ( ' ) around the power.\n\r", ch);
            if ( ch->pcdata->powers[PMONK] == 0 ) 
	    {
		send_to_char("#lImmortal Eyes.\n\r", ch);
		send_to_char("#lSpying crow\n\r", ch);
		send_to_char("#lCold hands  #1or  #lIron fists\n\r", ch);
		send_to_char("#lSkin of the Grave\n\r", ch);	    
	    	send_to_char("#lGrave travel   #1or   #lMysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 1 )
   	    {
	        send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#lSpying crow\n\r", ch);
		send_to_char("#lCold hands  #1or  #lIron fists\n\r", ch);
		send_to_char("#lSkin of the Grave\n\r", ch);	    
	    	send_to_char("#lGrave travel   #1or   #lMysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 2 )
            {
                send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#lCold hands  #1or  #lIron fists\n\r", ch);
		send_to_char("#lSkin of the Grave\n\r", ch);
		send_to_char("#lGrave travel   #1or   #lMysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
            }
            if ( ch->pcdata->powers[PMONK] == 3 )
	    {
        	send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Cold Hands\n\r", ch);
		send_to_char("#lSkin of the Grave\n\r", ch);
		send_to_char("#lGrave travel   #1or   #lMysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 4 )
	    {
        	send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Iron Fists\n\r", ch);
		send_to_char("#lSkin of the Grave\n\r", ch);
		send_to_char("#lGrave travel   #1or   #lMysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 5 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Cold Hands\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#lGrave travel   #1or   #lMysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 6 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Iron fists\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#lGrave travel   #1or   #lMysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 7 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Cold Hands\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Grave travel\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 8 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Iron fists\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Grave travel\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 9 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Cold hands\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Mysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 10 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Iron fists\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Mysterious shroud\n\r", ch);
		send_to_char("#lLimbo Scythe   #1or   #lChilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 11 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Cold Hands\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Grave Travel\n\r", ch);
		send_to_char("#4Limbo Scythe\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 12 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Iron fists\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Grave Travel\n\r", ch);
		send_to_char("#4Limbo Scythe\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 13 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Cold Hands\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Mysterious shroud\n\r", ch);
		send_to_char("#4Limbo Scythe\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 14 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Iron fists\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Mysterious shroud\n\r", ch);
		send_to_char("#4Limbo Scythe\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 15 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Cold hands\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Grave travel\n\r", ch);
		send_to_char("#4Chilling Scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 16 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Iron fists\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Grave travel\n\r", ch);
		send_to_char("#4Chilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 17 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Cold hands\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Mysterious shroud\n\r", ch);
		send_to_char("#4Chilling scream\n\r", ch);
	    }
            if ( ch->pcdata->powers[PMONK] == 18 )
	    {
		send_to_char("#4Immortal eyes\n\r", ch);
		send_to_char("#4Spying crow\n\r", ch);
		send_to_char("#4Iron fists\n\r", ch);
		send_to_char("#4Skin of the Grave\n\r", ch);
		send_to_char("#4Mysterious shroud\n\r", ch);
		send_to_char("#4Chilling scream\n\r", ch);
	    }
	    return;
    }


	if (!str_cmp(arg1,"immortal eyes")) 
    {
    	if ( ch->pcdata->powers[PMONK] > 0 )
    		send_to_char("#6Immortal eyes are your spoil already.\n\r", ch);
    	else if ( ch->practice < 10)
    		send_to_char("The price has not been set.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 1;
    		ch->practice -= 10;
    		send_to_char("#6Your eyes become undead.\n\r", ch);
    	}
    	return;
    }
    else if (!str_cmp(arg1,"spying crow"))
    {
    	if ( ch->pcdata->powers[PMONK] > 1 )
    		send_to_char("#6You already have a loyal crow.\n\r", ch);
    	else if ( ch->pcdata->powers[PMONK] < 1 )
    		send_to_char("#6You lack the previous powers to be able to control a crow.\n\r", ch);
    	else if ( ch->practice < 20)
    		send_to_char("The price has not been set.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 1;
    		ch->practice -= 20;
    		send_to_char("#6A crow comes and lands beside you.\n\r", ch);
    	}
    	return;
    }
    else if (!str_cmp(arg1,"cold hands"))
    {
        if ( ch->pcdata->powers[PMONK] == 3 || ch->pcdata->powers[PMONK] == 5
           || ch->pcdata->powers[PMONK] == 7 || ch->pcdata->powers[PMONK] == 9
           || ch->pcdata->powers[PMONK] == 11 || ch->pcdata->powers[PMONK] == 15
           || ch->pcdata->powers[PMONK] == 13 || ch->pcdata->powers[PMONK] == 17)
    		send_to_char("Your hands are already deadly cold.\n\r", ch);
        else if ( ch->pcdata->powers[PMONK] == 4 || ch->pcdata->powers[PMONK] == 6
           || ch->pcdata->powers[PMONK] == 8 || ch->pcdata->powers[PMONK] == 10
           || ch->pcdata->powers[PMONK] == 12 || ch->pcdata->powers[PMONK] == 14
           || ch->pcdata->powers[PMONK] == 16 || ch->pcdata->powers[PMONK] == 18)
		send_to_char("You have already chosen Iron fists.. You cannot get cold hands.\n\r", ch);
	else if ( ch->pcdata->powers[PMONK] < 2 )
    		send_to_char("#6You need your previous powers before you can obtain this one.\n\r", ch);
    	else if ( ch->practice < 30)
    		send_to_char("You don't have the #330#8 required primal.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 1;
    		ch->practice -= 30;
    		send_to_char("#6Your hands become deadly cold.\n\r", ch);
    	}
    	return;
    }
    else if (!str_cmp(arg1,"iron fists"))
    {
        if ( ch->pcdata->powers[PMONK] == 4 || ch->pcdata->powers[PMONK] == 6
           || ch->pcdata->powers[PMONK] == 8 || ch->pcdata->powers[PMONK] == 10
           || ch->pcdata->powers[PMONK] == 12 || ch->pcdata->powers[PMONK] == 14
           || ch->pcdata->powers[PMONK] == 16 || ch->pcdata->powers[PMONK] == 18)
		send_to_char("You hands are already solid iron.\n\r", ch);    	
        else if ( ch->pcdata->powers[PMONK] == 3 || ch->pcdata->powers[PMONK] == 5
           || ch->pcdata->powers[PMONK] == 7 || ch->pcdata->powers[PMONK] == 9
           || ch->pcdata->powers[PMONK] == 11 || ch->pcdata->powers[PMONK] == 13
           || ch->pcdata->powers[PMONK] == 15 || ch->pcdata->powers[PMONK] == 17)
    		send_to_char("Your hands are already deadly cold, you cannot get iron fists.\n\r", ch);    	
	else if ( ch->pcdata->powers[PMONK] < 4 )
    		send_to_char("#6You need your previous powers before you can obtain this one.\n\r", ch);
    	else if ( ch->practice < 40)
    		send_to_char("You don't have the #340#8 required primal.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 2;
    		ch->practice -= 40;
    		send_to_char("#6Your hands fuse into solid iron.\n\r", ch);
    	}
    	return;
    }
    else if (!str_cmp(arg1,"skin of the grave"))
    {
    	if ( ch->pcdata->powers[PMONK] > 4 )
    		send_to_char("#6Your skin is already hardened by the grave.\n\r", ch);
    	else if ( ch->pcdata->powers[PMONK] < 3 )
    		send_to_char("#6You need your previous powers before you can obtain this one.\n\r", ch);
    	else if ( ch->practice < 50)
    		send_to_char("You don't have the #350#8 required primal.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 2;
    		ch->practice -= 50;
    		send_to_char("#6The dirt of your grave hardens your skin.\n\r", ch);
    	}
    	return;
    }
    else if (!str_cmp(arg1,"grave travel"))
    {
        if ( ch->pcdata->powers[PMONK] == 7 || ch->pcdata->powers[PMONK] == 8
          || ch->pcdata->powers[PMONK] == 11 || ch->pcdata->powers[PMONK] == 12
          || ch->pcdata->powers[PMONK] == 15 || ch->pcdata->powers[PMONK] == 16)
		send_to_char("#6You can already emerge from the ground in any place.\n\r", ch);
        else if ( ch->pcdata->powers[PMONK] == 9 || ch->pcdata->powers[PMONK] == 10
          || ch->pcdata->powers[PMONK] == 13 || ch->pcdata->powers[PMONK] == 14
          || ch->pcdata->powers[PMONK] == 17 || ch->pcdata->powers[PMONK] == 18)
		send_to_char("#6Your shroud prevents you from learning this power.\n\r", ch);
    	else if ( ch->pcdata->powers[PMONK] < 5 )
    		send_to_char("#6You need your previous powers before you can obtain this one.\n\r", ch);
    	else if ( ch->practice < 60)
    		send_to_char("You don't have the #360#8 required primal.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 2;
    		ch->practice -= 60;
    		send_to_char("#6You gain the power to travel through your grave.\n\r", ch);
    	}
    	return;
    }
    else if (!str_cmp(arg1,"mysterious shroud"))
    {
        if ( ch->pcdata->powers[PMONK] == 9 || ch->pcdata->powers[PMONK] == 10
          || ch->pcdata->powers[PMONK] == 13 || ch->pcdata->powers[PMONK] == 14
          || ch->pcdata->powers[PMONK] == 17 || ch->pcdata->powers[PMONK] == 18)
    		send_to_char("#6You already have a shroud around your spirit.\n\r", ch);
        else if ( ch->pcdata->powers[PMONK] == 7 || ch->pcdata->powers[PMONK] == 8
          || ch->pcdata->powers[PMONK] == 11 || ch->pcdata->powers[PMONK] == 12
          || ch->pcdata->powers[PMONK] == 15 || ch->pcdata->powers[PMONK] == 16)
		send_to_char("#6You cannot possess a shroud when your a grave traveler.\n\r", ch);
    	else if ( ch->pcdata->powers[PMONK] < 5 )
    		send_to_char("#6You need your previous powers before you can obtain this one.\n\r", ch);
    	else if ( ch->practice < 70)
    		send_to_char("You don't have the #370#8 required primal.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 4;
    		ch->practice -= 70;
    		send_to_char("#8You feel your shroud form around you.\n\r", ch);
    	}
    	return;
    }
    else if (!str_cmp(arg1,"limbo scythe"))
    {
        if ( ch->pcdata->powers[PMONK] == 11 || ch->pcdata->powers[PMONK] == 12
          || ch->pcdata->powers[PMONK] == 13 || ch->pcdata->powers[PMONK] == 14 )
    		send_to_char("#6You can already call upon your scythe.\n\r", ch);
        else if ( ch->pcdata->powers[PMONK] == 15 || ch->pcdata->powers[PMONK] == 16
          || ch->pcdata->powers[PMONK] == 17 || ch->pcdata->powers[PMONK] == 18 )
		send_to_char("#6Your chilling shreak prevents you from holding weapons.\n\r", ch);
    	else if ( ch->pcdata->powers[PMONK] < 7 )
    		send_to_char("#6You need your previous powers before you can obtain this one.\n\r", ch);
    	else if ( ch->practice < 80)
    		send_to_char("You don't have the #380#8 required primal.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 4;
    		ch->practice -= 80;
    		send_to_char("#6You receive a Limbo Scythe to command.\n\r", ch);
    	}
    	return;
    }
    else if (!str_cmp(arg1,"chilling scream"))
    {
        if ( ch->pcdata->powers[PMONK] == 15 || ch->pcdata->powers[PMONK] == 17
          || ch->pcdata->powers[PMONK] == 16 || ch->pcdata->powers[PMONK] == 18 )
    		send_to_char("#6Your voice already holds that power.\n\r", ch);
        else if ( ch->pcdata->powers[PMONK] == 11 || ch->pcdata->powers[PMONK] == 12
          || ch->pcdata->powers[PMONK] == 13 || ch->pcdata->powers[PMONK] == 14 )
		send_to_char("#6You cannot shreak with the ability to hold a weapon.\n\r", ch);
    	else if ( ch->pcdata->powers[PMONK] < 7 )
    		send_to_char("#6You need your previous power before you can obtain this one.\n\r", ch);
    	else if ( ch->practice < 90)
    		send_to_char("You don't have the #390#8 required primal.\n\r", ch);
    	else
    	{
    		ch->pcdata->powers[improve] += 8;
    		ch->practice -= 90;
    		send_to_char("#6Your voice assumes a greater power.\n\r", ch);
    	}
    	return;
    }
	sprintf(buf,"#1Mantras Learned#5 (%d).\n\r", ch->pcdata->powers[PMONK]);
	send_to_char(buf,ch);

	return;
}

void do_immortaleyes( CHAR_DATA *ch, char *argument )
{
    if ( IS_NPC(ch) )
	return;
  
        if ( !IS_CLASS(ch, CLASS_REVNANT) )
  	{
  	send_to_char("Huh?\n\r", ch);
  	return;
  	}
  	
  	if ( ch->pcdata->powers[PMONK] < 1 )
  	{
  	  send_to_char("#6You do not have undead eyes yet.\n\r", ch);
  	  return;
  	}
  
    if ( IS_SET(ch->act, PLR_HOLYLIGHT) || IS_AFFECTED(ch,AFF_SHADOWSIGHT) ||
IS_AFFECTED(ch,AFF_DETECT_INVIS) || IS_AFFECTED(ch,AFF_DETECT_HIDDEN) || IS_AFFECTED(ch,AFF_INFRARED) )
    {
	REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
	REMOVE_BIT(ch->affected_by, AFF_SHADOWSIGHT);
	REMOVE_BIT(ch->affected_by, AFF_DETECT_INVIS);
	REMOVE_BIT(ch->affected_by, AFF_DETECT_HIDDEN);
	REMOVE_BIT(ch->affected_by, AFF_INFRARED);
	send_to_char( "You look through your old human eyes again.\n\r", ch );
    }
    else
    {
	send_to_char( "You begin to see with your undead vision.\n\r", ch );
	SET_BIT(ch->act, PLR_HOLYLIGHT);
	SET_BIT(ch->affected_by, AFF_SHADOWSIGHT);
	SET_BIT(ch->affected_by, AFF_DETECT_INVIS);
    	SET_BIT(ch->affected_by, AFF_DETECT_HIDDEN);
	SET_BIT(ch->affected_by, AFF_INFRARED);
    }
    return;
}


void do_mclan( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];
    CHAR_DATA *gch;

    if (IS_NPC(ch)) return;
    if (!IS_CLASS(ch, CLASS_REVNANT) )
    {
	send_to_char("Huh?\n\r",ch);
	return;
    }

    if (strlen(ch->clan) < 2)
    {
	send_to_char("You are an outcast!\n\r",ch);
	return;
    }

    sprintf( buf, "%s Monks:\n\r", ch->clan );
    send_to_char( buf, ch );
    send_to_char("[      Name      ] [ Hits  % ] [ Mana  % ] [ Move  % ]\n\r", ch );
    for ( gch = char_list; gch != NULL; gch = gch->next )
    {
	if ( IS_NPC(gch) ) continue;
        if ( !IS_CLASS(gch, CLASS_REVNANT) ) continue;
	if ( !str_cmp(ch->clan,gch->clan) )
	{
	    sprintf( buf,
	    "[%-16s] [%-6d%3d] [%-6d%3d] [%-6d%3d]\n\r",
		capitalize( gch->name ),
		gch->hit,  (gch->hit  * 100 / gch->max_hit ),
		gch->mana, (gch->mana * 100 / gch->max_mana),
		gch->move, (gch->move * 100 / gch->max_move) );
		send_to_char( buf, ch );
	}
    }
    return;
}

void do_mysteriousshroud( CHAR_DATA *ch, char *argument )
{
    if (IS_NPC(ch)) return;
	
        if (!IS_CLASS(ch, CLASS_REVNANT) )
	{
		send_to_char("Huh?\n\r", ch);
		return;
	}
	
        if (IS_CLASS(ch, CLASS_REVNANT) && ch->pcdata->powers[PMONK] < 3 )
	{
	  send_to_char("A shroud has not been weaved around you yet.\n\r", ch);
	  return;
	}

    if ( IS_SET(ch->act, PLR_WIZINVIS) )
    {
	REMOVE_BIT(ch->act, PLR_WIZINVIS);
	send_to_char( "You remove your shroud.\n\r", ch );
	act( "$n fades into view as you get a chill.", ch, NULL, NULL, TO_ROOM );
    }
    else
    {
	send_to_char( "You pull your shroud over yourself.\n\r", ch );
	act( "You feel warmer as the form of $n fades to nothing.", ch, NULL, NULL, TO_ROOM );
	SET_BIT(ch->act, PLR_WIZINVIS);
	ch->move -= 500; 
    }
    return;
}

void do_gravetravel( CHAR_DATA *ch, char *argument )
{
	char arg[MAX_INPUT_LENGTH];
    CHAR_DATA *victim;
    CHAR_DATA *mount;

	one_argument( argument, arg );

        if ( !IS_CLASS(ch, CLASS_REVNANT) )
	{
		send_to_char("Huh?\n\r", ch);
		return;
	}

        if (IS_CLASS(ch, CLASS_REVNANT) && ch->pcdata->powers[PMONK] < 9 )
	{
	  send_to_char("You don't have the ability to grave travel.\n\r", ch);
	  return;
	}

    if ( arg[0] == '\0' )
    {
	send_to_char( "Grave travel to Whom?\n\r", ch );
	return;
    }
    
    if ( ch->position == POS_FIGHTING )
    {
	send_to_char( "No way! You are fighting.\n\r", ch );
	return;
    }

    if ( ( victim = get_char_world( ch, arg ) ) == NULL )
    {
	send_to_char( "Nobody by that name.\n\r", ch );
	return;
    }

	if ( ch->move < 500 )
	{
	send_to_char( "You don't have the required 500 move.\n\r", ch);
	return;
	}

	
    act( "You dig into your grave.", ch, NULL, NULL, TO_CHAR );
	act( "$n digs into his grave.", ch, NULL, NULL, TO_ROOM );
	char_from_room( ch );
	char_to_room( ch, get_room_index(victim->in_room->vnum) );
    act( "You emerge from the dirt infront of $N", ch, NULL, victim, TO_CHAR );
	act( "$n emerges from the dirt before $N.", ch, NULL, victim, TO_ROOM );	
	ch->move -= 500;

    do_look( ch, "auto" );
    if ( (mount = victim->mount) == NULL ) return;
    char_from_room( mount );
    char_to_room( mount, get_room_index(victim->in_room->vnum) );
    do_look( mount, "auto" );
    return;
}


void do_shadowdrain(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_NPC(ch)) return;

 if ( !IS_CLASS(ch, CLASS_REVNANT))
        {
        send_to_char("Huh?\n\r", ch);
        return;
        }
    
        if ( arg[0] == '\0' )
        {
            send_to_char( "Shadowdrain the essence of who?\n\r", ch );
            return;
        }
 
        
        if ( ( victim = get_char_room( ch, arg ) ) == NULL )
        {
            send_to_char( "They aren't here.\n\r", ch );
            return;
        }


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


    if ( IS_NPC(victim) )
    {
	send_to_char( "Not on NPC's.\n\r", ch );
	return;
    }

if ( IS_IMMORTAL(victim) )
        {
            send_to_char("You power is not that great.\n\r", ch);
            return;
        }


if (IS_AFFECTED(victim,AFF_SHADOWPLANE) )
   {
 do_shadowplane(victim,"");
 send_to_char("You feel your life force being drained away.. and can",victim);
 send_to_char("no longer maintain your presence in the shadowplane.",victim);
 victim->hit = victim->hit / 2;
 victim->move = victim->move / 2;
 sprintf(buf,"You call upon the powers of the fallen to remove %s from the
 shadow.",victim->name);
 send_to_char(buf,ch);
 return;
   }

 send_to_char("They are not affected by any powers of the dark",ch);
 return;
}

void do_limboscythe( CHAR_DATA *ch, char *argument ) 
{
    CHAR_DATA *victim;
    char arg [MAX_INPUT_LENGTH];
    int sn;
    int level;
    int spelltype;

    argument = one_argument( argument, arg );
    if (IS_NPC(ch)) return;

    if (IS_IMMORTAL(victim) )
    {
	send_to_char("You wish you had that power\n\r",ch);
	return;    

    if (!IS_CLASS(ch, CLASS_REVNANT)) 
    {
        send_to_char("Huh?\n\r",ch);
        return;
    }

    if (ch->pcdata->powers[PMONK] < 11 || ch->pcdata->powers[PMONK] > 14)
    {
	send_to_char("You do not have this power",ch);
	return;
    }
 
    if ( arg[0] == '\0' )
    {
    	send_to_char("Call the limbo scythe against whom?\n\r", ch);
    	return;
    }

    if ( ( victim = get_char_room( ch, arg ) ) == NULL )
	if ((victim = ch->fighting) == NULL)
    {
        send_to_char( "They aren't here.\n\r", ch );
        return;
    }
	if (ch->mana < 100) {
		send_to_char("You don't have enough mana.\n\r", ch);
		return;}

    if ( ( sn = skill_lookup( "limbo scythe" ) ) < 0 ) return;
    spelltype = skill_table[sn].target;
    level = ch->spl[spelltype] * 1.0;
	level = level * 1.0;
	act("You concentrate your power on $N.",ch,NULL,victim,TO_CHAR);
	act("$n concentrates $s power on you.",ch,NULL,victim,TO_VICT);
    (*skill_table[sn].spell_fun) ( sn, level, ch, victim );
    WAIT_STATE( ch, 10 );
	ch->mana = ch->mana - 100;
    return;
}
}
void do_scream (CHAR_DATA *ch, char *argument)
{
    CHAR_DATA *victim;
    OBJ_DATA *obj;
    char buf[MAX_INPUT_LENGTH];

    if (IS_NPC(ch)) return;

    if (!IS_CLASS(ch, CLASS_REVNANT))
    {
	send_to_char("Huh?\n\r", ch);
	return;
    }

    if (IS_IMMORTAL(victim))
    {
	send_to_char("You wish you had that sort of power\n\r", ch);
	return;
    }

    if ( ( (obj = get_eq_char( victim, WEAR_WIELD ) ) == NULL) || obj->item_type != ITEM_WEAPON )
    {
    if ( ( (obj = get_eq_char( victim, WEAR_HOLD ) ) == NULL) || obj->item_type != ITEM_WEAPON )
    return;
    }

    sprintf(buf,"$n screams horribly and you drop your weapons!");
    ADD_COLOUR(ch,buf,WHITE);
    act( buf, ch, NULL, victim, TO_VICT    );
    sprintf(buf,"Your chilling scream is directed at $N!");
    ADD_COLOUR(ch,buf,WHITE);
    act( buf,  ch, NULL, victim, TO_CHAR    );
    sprintf(buf,"$n screams at $N, who drops his weapons in terror.");
    ADD_COLOUR(ch,buf,WHITE);
    act( buf,  ch, NULL, victim, TO_NOTVICT );

    obj_from_char( obj );

    if ( IS_NPC(victim) )
	obj_to_char( obj, victim );
    else
	obj_to_room( obj, victim->in_room );

    return;
}