cotn25/area/
cotn25/src/
/***************************************************************************
 *  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.                                                  *
 ***************************************************************************/

/*********************************************
 * Assassin, another class by Xrakisis       *
 *********************************************/

#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_dtrick(CHAR_DATA * ch, char *argument)
{
        CHAR_DATA *victim;
        OBJ_DATA *obj;
        char      arg1[MAX_INPUT_LENGTH];
        char      buf[MAX_STRING_LENGTH];
        int       randnum;
        int       successchance;

        argument = one_argument(argument, arg1);

        if (IS_NPC(ch))
                return;

	if (!IS_CLASS(ch, CLASS_ASSASSIN) && !IS_CLASS(ch, CLASS_UNDEAD_ASSASSIN)
      && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))

        {
                stc("Huh?\n\r", ch);
                return;
        }

        if (ch->move < 2500)
        {
                stc("#0You don't have the required amount of move to preform a Dirty Trick!#n\n\r", ch);
                return;
        }

        if (arg1[0] == '\0')
        {
                stc("#0Preform a Dirty Trick on whom?#n\n\r", ch);
                return;
        }

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


        randnum = number_range(1, 4);   //Disarm, Trip, Foot Stomp, Hilt Smash.

        if (randnum == 1)   //<----Disarm
        {
                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)
                                stc("They're not wielding anything to disarm!!#n\n\r", ch);
                        return;
                }

                if (IS_IMMUNE(victim, IMM_DISARM))
                {
                        successchance = number_range(1, 75);
                }

                else
                {
                        successchance = number_range(1, 100);
                }

                if (successchance < 50)
                {
                        stc("#0You try to preform a dirty trick, but fail!#n\n\r", ch);
                        ch->move -= 500;
                        WAIT_STATE(ch, 1 * PULSE_VIOLENCE);
                        return;
                }

                if (successchance >= 50)
                {
                        sprintf(buf,
                                "#R$n #0slices $s #7dagger #0sneakily accross your wrist, causing you too lose your grip!#n\n\r");
                        act(buf, ch, NULL, victim, TO_VICT);
                        sprintf(buf,
                                "#0You sneakily slice your dagger across #R$N's #0wrist, causing them to lose their grip!#n\n\r");
                        act(buf, ch, NULL, victim, TO_CHAR);

                        obj_from_char(obj);
                        obj_to_room(obj, victim->in_room);
                        ch->move -= 2500;
                        hurt_person(ch, victim, 250);
                        WAIT_STATE(ch, 1 * PULSE_VIOLENCE);
                        return;
                }
        }

        else if (randnum == 2)  //<----Trip
        {
                if (IS_AFFECTED(victim, AFF_FLYING))
                        return;

                successchance = number_range(1, 100);

                if (successchance < 50)
                {
                        stc("#0You attempt a dirty trick but fail!#n\n\r",
                            ch);
                        ch->move -= 500;
                        WAIT_STATE(ch, 1 * PULSE_VIOLENCE);
                        return;
                }
                if (successchance >= 50 && victim->wait == 0)
                {
                        sprintf(buf,
                                "#R$n #0kicks your shins, causing your legs to buckle!#n\n\r");
                        act(buf, ch, NULL, victim, TO_VICT);
                        sprintf(buf,
                                "#0You kick #R$N #0in the shins, causing $S legs to buckle!#n\n\r");
                        act(buf, ch, NULL, victim, TO_CHAR);
                        sprintf(buf,
                                "#R$n #0kicks #R$N #0in the shins, causing $S legs to buckle!#n\n\r");
                        act(buf, ch, NULL, victim, TO_NOTVICT);
                        ch->move -= 2500;
                        WAIT_STATE(ch, 1 * PULSE_VIOLENCE);
                        hurt_person(ch, victim, 500);
                        WAIT_STATE(victim, 2 * PULSE_VIOLENCE);
                        victim->position = POS_RESTING;
                        return;
                }
        }

        else if (randnum == 3)  //<---Foot Stomp
        {
                if (IS_AFFECTED(victim, AFF_FLYING))
                        return;

                successchance = number_range(1, 100);

                if (successchance < 50)
                {
                        stc("#0You attempt to preform a Dirty Trick but fail!#n\n\r", ch);
                        ch->move -= 500;
                        WAIT_STATE(ch, 1 * PULSE_VIOLENCE);
                        return;
                }

                if (successchance >= 50)
                {
                        sprintf(buf, "#R$n #0stomps on your feet! OW!#n\n\r");
                        act(buf, ch, NULL, victim, TO_VICT);
                        sprintf(buf, "#0You stomp on #R$N's #0feet!#n\n\r");
                        act(buf, ch, NULL, victim, TO_CHAR);
                        sprintf(buf, "#R$n #0stomps on #R$N's #0feet!#n\n\r");
                        act(buf, ch, NULL, victim, TO_NOTVICT);
                        ch->move -= 2500;
                        WAIT_STATE(ch, 1 * PULSE_VIOLENCE);
                        hurt_person(ch, victim, 500);
                        WAIT_STATE(victim, 3 * PULSE_VIOLENCE);
                        return;
                }
        }

        else if (randnum == 4)  //<---Hilt Bash
        {
                successchance = number_range(1, 100);
                {
                        if (successchance < 50)
                        {
                                stc("#0You attempt a Dirty Trick, but fail!#n\n\r", ch);
                                ch->move -= 500;
                                WAIT_STATE(ch, 1 * PULSE_VIOLENCE);
                                return;
                        }
                        if (successchance >= 50)
                        {
                                sprintf(buf,
                                        "#R$n BASHES #0his jeweled dagger hilt into your face! You reel back, stunned!#n\n\r");
                                act(buf, ch, NULL, victim, TO_VICT);
                                sprintf(buf,
                                        "#0You BASH your dagger hilt into #R$N's #0face!#n\n\r");
                                act(buf, ch, NULL, victim, TO_CHAR);
                                sprintf(buf,
                                        "#R$n #RBASHES #0his dagger hilt into #R$N's #0face, causing them to reel back stunned!#n\n\r");
                                act(buf, ch, NULL, victim, TO_NOTVICT);
                                act("Your nose shatters under the impact of the blow!", victim, NULL, NULL, TO_CHAR);
                                act("$n's nose shatters under the impact of the blow!", victim, NULL, NULL, TO_ROOM);
                                SET_BIT(victim->loc_hp[LOC_HEAD],
                                        BROKEN_NOSE);
                                ch->move -= 2500;
                                hurt_person(ch, victim, 1000);
                                WAIT_STATE(ch, 1 * PULSE_VIOLENCE);
                                WAIT_STATE(victim, 1 * PULSE_VIOLENCE);
                                victim->position = POS_STUNNED;
                                return;
                        }
                        return;
                }
        }
}

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

        OBJ_DATA *obj;
        char      arg[MAX_INPUT_LENGTH];

        argument = one_argument(argument, arg);

        if (IS_NPC(ch))
                return;
	if (!IS_CLASS(ch, CLASS_ASSASSIN) && !IS_CLASS(ch, CLASS_UNDEAD_ASSASSIN)
      && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))
        {
                stc("Huh?\n\r", ch);
                return;
        }


        if (arg[0] == '\0')
        {
                stc("Poison What?\n\r", ch);
                return;
        }

        if ((obj = get_obj_carry(ch, arg)) == NULL)
        {
                send_to_char("You dont have that item.\n\r", ch);
                return;
        }

        if (obj->item_type != ITEM_WEAPON)
        {
                send_to_char("You can only poison weapons!\n\r", ch);
                return;
        }

        if (IS_SET(obj->quest2, QUEST2_WWPOISON))
        {
                send_to_char
                        ("#0This item has already been #gP#Goisone#gd!#n.\n\r",
                         ch);
                return;
        }

        SET_BIT(obj->quest2, QUEST2_WWPOISON);
        stc("#0You coat your weapon in foul smelling #gp#Goiso#gn!#n\n\r",
            ch);
        obj->timer = 35;
        return;
}


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

//  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_ASSASSIN) && !IS_CLASS(ch, CLASS_UNDEAD_ASSASSIN)
      && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }


  if (arg[0] == '\0')
  {
    send_to_char("Learn what [combat knowledge or power]\n\r",ch);
    return;
  }


  if (!str_cmp(arg, "combat"))
  {

    if (ch->pcdata->powers[ASSASSIN_COMBAT] > 4)
    {
      send_to_char("You already have all 5 levels of combat.\n\r",ch);
      return;
    }

    if (ch->practice < (ch->pcdata->powers[ASSASSIN_COMBAT]+1)*150)
    {
      send_to_char("You don't have enough primal.\n\r",ch);
      return;
    }
    ch->pcdata->powers[ASSASSIN_COMBAT]++;
    ch->practice -= ch->pcdata->powers[ASSASSIN_COMBAT]*150;
    send_to_char("Your understanding of combat has become more powerful.\n\r",ch);
  }


  else if (!str_cmp(arg, "knowledge"))
  {
    if (ch->pcdata->powers[ASSASSIN_KNOWLEDGE] > 4)
    {
      send_to_char("You already have all 5 levels of knowledge.\n\r",ch);
      return;
    }

    if (ch->practice < (ch->pcdata->powers[ASSASSIN_KNOWLEDGE]+1)*150)
    {
      send_to_char("You don't have enough primal.\n\r",ch);
      return;
    }
    ch->pcdata->powers[ASSASSIN_KNOWLEDGE]++;
    ch->practice -= ch->pcdata->powers[ASSASSIN_KNOWLEDGE]*150;
    send_to_char("Your understanding of knowledge has become more powerful.\n\r",ch);
  }
  
   else if (!str_cmp(arg, "power"))
  {
    if (ch->pcdata->powers[ASSASSIN_POWER] > 9)
    {
      send_to_char("You already have all 10 levels of power.\n\r",ch);
      return;
    }

    if (ch->practice < (ch->pcdata->powers[ASSASSIN_POWER]+1)*150)
    {
      send_to_char("You don't have enough primal.\n\r",ch);
      return;
    }
    ch->pcdata->powers[ASSASSIN_POWER]++;
    ch->practice -= ch->pcdata->powers[ASSASSIN_POWER]*150;
    send_to_char("You have become more powerful.\n\r",ch);
  }

  else
  {
    send_to_char("Sorry, you cannot learn this.\n\r",ch);
    return;
  }

  return;
}

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

		if (IS_NPC(ch)) return;

	if (ch->pcdata->powers[ASSASSIN_COMBAT] < 1) 
        {
	send_to_char("Huh?\n\r", ch );
	return;}

	if (IS_VAMPAFF(ch, VAM_CLAWS)) {

	send_to_char("You remove the IronClaws from your wrists.\n\r", ch );
	REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS);
	return;}

	send_to_char("You attach IronClaws to your wrists.\n\r", ch );
	SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS);

	return;
}

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

  one_argument(argument, arg);
  chance = number_percent();

  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_ASSASSIN) && !IS_CLASS(ch, CLASS_UNDEAD_ASSASSIN)
      && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[ASSASSIN_COMBAT] < 2)
  {
    send_to_char("You do not have that power yet.\n\r",ch);
    return;
  }
  if ((victim = get_char_room(ch, arg)) == NULL)
  {
    send_to_char("Assassinate whom?\n\r", ch );
    return;
  }
  if (victim == ch)
  {
    send_to_char("That would be a bad idea.\n\r", ch );
    return;
  }
  if (victim->hit < victim->max_hit)
  {
    send_to_char("They are to hurt, you cannot get near enough.\n\r",ch);
    return;
  }
  if (is_safe(ch, victim)) return;
  act("$n stabs $N in the back, causing great damage.",ch,NULL,victim,TO_NOTVICT);
  act("You backstab $N.",ch,NULL,victim,TO_CHAR);
  act("You suddenly feel a great pain and notice $n pulling out a dagger from your back.",ch,NULL,victim,TO_VICT);
  if (victim->position == POS_STANDING)
  {
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    WAIT_STATE(ch, 12);
  }
  else if (victim->position == POS_SLEEPING)
  {
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    WAIT_STATE(ch, 12);
  }

  else
  {
    send_to_char("You failed your attempt.\n\r",ch);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    one_hit(ch, victim, gsn_backstab,1);
    WAIT_STATE(ch, 12);
  }
  return;
}

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

  char arg[MAX_INPUT_LENGTH];
  CHAR_DATA *victim;
  ROOM_INDEX_DATA *location;

  one_argument (argument, arg);


  if (IS_NPC(ch)) return;

  if (!IS_CLASS(ch, CLASS_ASSASSIN) && !IS_CLASS(ch, CLASS_ANTIPALADIN)
      && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))
  {
    send_to_char("#0This is an assassin and antipaladin only skill#n\n\r", ch );
    return;
  }


  if (IS_CLASS(ch, CLASS_ASSASSIN) && ch->pcdata->powers[ASSASSIN_KNOWLEDGE] < 1)
  {
    send_to_char("You need level 1 in knowledge before you can shadowtravel.\n\r",ch);
    return;
  }


  if ((victim = get_char_world(ch, arg)) == NULL)
  {
    send_to_char("You are unable to find them.\n\r", ch );
    return;
  }


  if (IS_SET(victim->in_room->room_flags, ROOM_ASTRAL))
  {
    send_to_char( "You cannot enter the Astral sphere.\n\r",ch);
    return;
  }


    if (IS_IMMUNE(victim, IMM_TRAVEL) && victim->fight_timer < 1 )
  {
    send_to_char("You cannot travel to them, they are immune.\n\r",ch);
    return;
  }


  if (ch->move < 250)
  {
    send_to_char("Your to tired to shadowtravel.\n\r", ch );
    return;
  }


  location = victim->in_room;


  act("You concentrate on the journey ahead.", ch, NULL, NULL, TO_CHAR);


  act("$n steps into a shadow and disappears.", ch, NULL, NULL, TO_ROOM);

  ch->move -= 250;


  char_from_room(ch); 
  char_to_room(ch, location);


  do_look(ch, "");


  act("You materialize.", ch, NULL, NULL, TO_CHAR);
  act("$n steps out of a shadow.", ch, NULL, NULL, TO_ROOM);


  return;
}  

void do_shouldercharge( CHAR_DATA *ch, char *argument )
{
  char arg[MAX_INPUT_LENGTH];
  char arg2[MAX_INPUT_LENGTH];
  char buf1[MAX_STRING_LENGTH];
  char buf2[MAX_STRING_LENGTH];
  char buf3[MAX_STRING_LENGTH];
  AFFECT_DATA af;
  CHAR_DATA *ich;
  CHAR_DATA *ich_next;
  CHAR_DATA *victim;
  OBJ_DATA *obj;
  
  argument = one_argument( argument, arg );
  argument = one_argument( argument, arg2 );
  if (IS_NPC(ch)) return;

    if (!IS_CLASS(ch, CLASS_UNDEAD_ASSASSIN) && !IS_CLASS(ch, CLASS_ASSASSIN)
    && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))
  {
    send_to_char("Huh.\n\r",ch);
    return;
  }
    if (!(arg2[0] == '\0') || ch->fighting != NULL)
    {
      if (arg2[0] == '\0') victim = ch->fighting;
      else if ((victim = get_char_room(ch, arg2)) == NULL)
      {
        send_to_char("They are not here.\n\r", ch );
        return;
      }
}
      if (is_safe(ch, victim)) return;


    if (number_range(1,3)==1)
    {
    send_to_char("Failed\n\r",ch);
    return;
    }

  act("You take a step back, then launch yourself straight at $N...",ch,NULL,victim,TO_CHAR);
  act("$n takes a step back, then launches $mself straight at you...",ch,NULL,victim,TO_VICT);
  act("$n takes a step back, then launches $mself straight at $N...",ch,NULL,victim,TO_NOTVICT);
  if ( number_range(1,4) == 4 )
  {
    act("$N sidesteps, leaving you wide open!",ch,NULL,victim,TO_CHAR);
    act("You sidestep, leaving $n wide open!",ch,NULL,victim,TO_VICT);
    act("$N sidesteps, leaving $n wide open!",ch,NULL,victim,TO_NOTVICT);
    if ( number_range(1,2) == 1 )
    {
      act("$N takes the opportunity to strike back!",ch,NULL,victim,TO_CHAR);
      act("You take the opportunity to strike back!",ch,NULL,victim,TO_VICT);
      act("$N takes the opportunity to strike back!",ch,NULL,victim,TO_NOTVICT);
      multi_hit(victim,ch,TYPE_UNDEFINED);
    }
    else
    {
      act("You recover yourself before $N can strike back.",ch,NULL,victim,TO_CHAR);
      act("$n recovers $mself before you can strike back.",ch,NULL,victim,TO_VICT);
      act("$n recovers $mself before $N can strike back.",ch,NULL,victim,TO_NOTVICT);
    }
    return;
  }
  if ( number_range(1,4) == 4 )
  {
      if ( IS_LEG_L(victim,LOST_LEG) && IS_LEG_R(victim,LOST_LEG) )
      {
	act("Your body hits nothing but air.",ch,NULL,victim,TO_CHAR);
	act("$n hits nothing but air.",ch,NULL,victim,TO_ROOM);
	return;
      }
      act("You collide with $N, tearing away $S legs.",ch,NULL,victim,TO_CHAR);
      act("$n collides with you, tearing away your legs.",ch,NULL,victim,TO_VICT);
      act("$n collides with $N, tearing away $S legs.",ch,NULL,victim,TO_NOTVICT);
      if ( !IS_LEG_L(victim,LOST_LEG) )
      {
	SET_BIT(victim->loc_hp[4], LOST_LEG);
	if ( IS_BLEEDING(victim, BLEEDING_LEG_L) ) REMOVE_BIT(victim->loc_hp[6], BLEEDING_LEG_L);
	if ( IS_BLEEDING(victim, BLEEDING_FOOT_L) ) REMOVE_BIT(victim->loc_hp[6], BLEEDING_FOOT_L);
      }
      if ( !IS_LEG_R(victim,LOST_LEG) )
      {
	SET_BIT(victim->loc_hp[5], LOST_LEG);
	if ( IS_BLEEDING(victim, BLEEDING_LEG_R) ) REMOVE_BIT(victim->loc_hp[6], BLEEDING_LEG_R);
	if ( IS_BLEEDING(victim, BLEEDING_FOOT_R) ) REMOVE_BIT(victim->loc_hp[6], BLEEDING_FOOT_R);
      }
      if ( (obj = get_eq_char(victim,WEAR_LEGS)) != NULL ) take_item(victim,obj);
      if ( (obj = get_eq_char(victim,WEAR_FEET)) != NULL ) take_item(victim,obj);
  }

    else
    {
      send_to_char("Bash whom?\n\r",ch);
      return;
    }
      WAIT_STATE(victim, 24);
      WAIT_STATE(ch, 18);
      return;
    }









void do_assassinarmor( 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_ASSASSIN) && !IS_CLASS(ch, CLASS_UNDEAD_ASSASSIN)
      && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))
    {
	send_to_char("Huh?\n\r", ch );
	return;
    }
    if (arg[0] == '\0')
    {
	send_to_char("Please specify which piece of demon armor you wish to make: Ring Neckguard Plate Helmet Leggings BootsGauntlets Vambraces Shroud Belt Wristguard Mask Dagger Shortsword.\n\r",ch);
	return;
    }
    else if (!str_cmp(arg,"ring"     ))   vnum = 94004;
    else if (!str_cmp(arg,"neckguard"   ))   vnum = 94006;
    else if (!str_cmp(arg,"plate"    ))   vnum = 94007;
    else if (!str_cmp(arg,"helmet"   ))   vnum = 94002;
    else if (!str_cmp(arg,"leggings" ))   vnum = 94012;
    else if (!str_cmp(arg,"boots"    ))   vnum = 94013;
    else if (!str_cmp(arg,"gauntlets"))   vnum = 94010;
    else if (!str_cmp(arg,"vambraces"  ))   vnum = 94009;
    else if (!str_cmp(arg,"shroud"     ))   vnum = 94008;
    else if (!str_cmp(arg,"belt"     ))   vnum = 94011;
    else if (!str_cmp(arg,"wristguard"   ))   vnum = 94005;
    else if (!str_cmp(arg,"mask"    ))   vnum = 94003;
    else if (!str_cmp(arg,"dagger"))   vnum = 94000;
    else if (!str_cmp(arg,"shortsword"))  vnum = 94001;
    else
    {
        do_assassinarmor(ch,"");
	return;
    }
    if (ch->practice < 60)
    {
     send_to_char("It costs 60 points of primal to create a piece of assassin armor.\n\r",ch);
     return;
    }

    if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL)
    {
	send_to_char("Missing object, please inform Xrakisis.\n\r",ch);
	return;
    }
    ch->practice -= 60;
    obj = create_object(pObjIndex, 50);
    obj->questowner = str_dup(ch->pcdata->switchname);
    obj_to_char(obj, ch);
    act("$p appears in your hands in a blast of flames.",ch,obj,NULL,TO_CHAR);
    act("$p appears in $n's hands in a blast of flames.",ch,obj,NULL,TO_ROOM);
    return;
}


void do_desanc (CHAR_DATA *ch, char *argument)
{
  char arg[MAX_STRING_LENGTH];
  CHAR_DATA *victim;
  int sn, random, level;

  argument=one_argument(argument,arg);
  level = ch->spl[RED_MAGIC]/4;

  if (IS_NPC(ch)) return;
	if (!IS_CLASS(ch, CLASS_ASSASSIN) && !IS_CLASS(ch, CLASS_UNDEAD_ASSASSIN)
      && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))

  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  WAIT_STATE(ch,10);
  if (ch->pcdata->powers[ASSASSIN_COMBAT] < 1)
  {
    send_to_char("Not yet, not yet.\n\r",ch);
    return;
  }
  if (ch->mana < 1500)
  {
    send_to_char("You need more mana.\n\r",ch);
    return;
  }
  if (arg[0] == '\0' && ch->fighting != NULL) victim = ch->fighting;
  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;

  random = number_range(1,4);
  if (random == 1) sn = skill_lookup("desanct");
  else if (random >= 2) 
  {
    send_to_char("Failed.\n\r",ch);
    return;
  }

//    do_force(ch,"all save");
//
//  else sn = 0;
//  if (sn  > 0) (*skill_table[sn].spell_fun) (sn,level,ch,victim);
  REMOVE_BIT (victim->affected_by, AFF_SANCTUARY);
  stc("You feel your opponents dagger pierce your aura of protection!\n\r",victim);
  ch->mana -= 1500;
  WAIT_STATE(ch,8);
  return;
}



void do_corner (CHAR_DATA *ch, char *argument)
{
  if (IS_NPC(ch)) return;
  if (!IS_CLASS(ch, CLASS_ASSASSIN) && !IS_CLASS(ch, CLASS_UNDEAD_ASSASSIN)
      && !IS_CLASS(ch, CLASS_BLACK_ASSASSIN) && !IS_CLASS(ch, CLASS_HELLS_SOLDIER))
  {
    send_to_char("Huh?\n\r",ch);
    return;
  }
  if (ch->pcdata->powers[ASSASSIN_COMBAT] < 5)
  {
    send_to_char("You need to train your combat to 5 before using this.\n\r",ch);
    return;
  }


    if (!IS_SET(ch->newbits2, NEW2_CORNERED))
    {
      SET_BIT(ch->newbits2, NEW2_CORNERED);
      send_to_char("You will now attempt to corner your prey.\n\r",ch);
      return;
    }
    else if (IS_SET(ch->newbits2, NEW2_CORNERED))
    {
    REMOVE_BIT(ch->newbits2, NEW2_CORNERED);
    send_to_char("You will no longer attempt to corner your prey.\n\r",ch);
    return;
    }

return;
}