cotn/notes/
cotn/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.                                                  *
 ***************************************************************************/
 /***************************************************************************
 *                                 _/                            _/        *
 *      _/_/_/  _/_/      _/_/_/  _/    _/_/    _/    _/    _/_/_/         *
 *     _/    _/    _/  _/        _/  _/    _/  _/    _/  _/    _/          *
 *    _/    _/    _/  _/        _/  _/    _/  _/    _/  _/    _/           *
 *   _/    _/    _/    _/_/_/  _/    _/_/      _/_/_/    _/_/_/            *
 ***************************************************************************
 * Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius),                 *
 * Additional credits are in the help file CODECREDITS                     *
 * All Rights Reserved.                                                    *
 ***************************************************************************/

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

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

        if (IS_NPC(ch))
                return;

        argument = one_argument(argument, arg);

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

        if (arg[0] == '\0')
        {
                send_to_char("Stalk whom?\n\r", ch);
                return;
        }

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

        if (ch->move < 500)
        {
                stc("You don't have enough movement points to stalk them.\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 body can't go there.\n\r", ch);
                return;
        }
        if (IS_SET(victim->act, ACT_NOTRAVEL))
        {
                send_to_char("No Can Do.\n\r", ch);
                return;
        }
        if (ch == victim)
        {
                send_to_char("But you're already at yourself!\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 (!IS_NPC(victim) && !IS_IMMUNE(victim, IMM_SUMMON))
        {
                send_to_char("They are hiding from you.\n\r", ch);
                return;
        }
        if (victim->in_room == ch->in_room)
        {
                send_to_char("But you're already there!\n\r", ch);
                return;
        }

        act("You pick up the trail of $N, and quickly find them.", ch, NULL,
            victim, TO_CHAR);
        act("$n slides into the shadows, stalking someone.", ch, NULL, victim,
            TO_ROOM);
        char_from_room(ch);
        char_to_room(ch, victim->in_room);
        ch->move -= 500;
        act("$n walks out of nowhere behind $N.", ch, NULL, victim,
            TO_NOTVICT);
        act("$n walks out of nowhere from behind.", ch, NULL, victim,
            TO_VICT);
        do_look(ch, "scry");
        return;
}

void do_principles(CHAR_DATA * ch, char *argument)
{
        char      arg1[MAX_INPUT_LENGTH];
        char      arg2[MAX_INPUT_LENGTH];
        char      buf[MAX_STRING_LENGTH];

        argument = one_argument(argument, arg1);
        argument = one_argument(argument, arg2);

        if (IS_NPC(ch))
                return;

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

        if (arg1[0] == '\0' && arg2[0] == '\0')
        {
                xprintf(buf,
                        "Principles: Sora (%d), Chikyu (%d), Ningenno (%d).\n\r",
                        ch->pcdata->powers[NPOWER_SORA],
                        ch->pcdata->powers[NPOWER_CHIKYU],
                        ch->pcdata->powers[NPOWER_NINGENNO]);
                send_to_char(buf, ch);
                return;
        }
        if (arg2[0] == '\0')
        {
                if (!str_cmp(arg1, "sora"))
                {
                        send_to_char
                                ("Sora - The finding, observing, and locating principle.\n\r\n\r",
                                 ch);
                        if (ch->pcdata->powers[NPOWER_SORA] < 1)
                                send_to_char
                                        ("You have none of the Sora principles.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_SORA] > 0)
                                send_to_char
                                        ("Mitsukeru -Locate- The scrying power to find enemies.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_SORA] > 1)
                                send_to_char
                                        ("Koryou -Consider- The read aura power, learn about your enemies.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_SORA] > 2)
                                send_to_char
                                        ("Kakusu -Hidden- Enhanced Hide.  Only other ninjas can see you.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_SORA] > 3)
                                send_to_char
                                        ("Uro-Uro -Silent Walk- You leave no footprints behind.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_SORA] > 4)
                                send_to_char
                                        ("Kanzuite -Aware- The truesight power.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_SORA] > 5)
                                send_to_char
                                        ("Bomuzite -Sleep Gas- By mixing an potion, you can put everyone in a room to sleep.\n\r",
                                         ch);
                        return;
                }
                else if (!str_cmp(arg1, "chikyu"))
                {
                        send_to_char
                                ("Chikyu - Preperation for battle.\n\r\n\r",
                                 ch);
                        if (ch->pcdata->powers[NPOWER_CHIKYU] < 1)
                                send_to_char
                                        ("You have none of the Chikyu principles.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_CHIKYU] > 0)
                                send_to_char
                                        ("Tsuyoku -Strength- Toughness.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_CHIKYU] > 1)
                                send_to_char
                                        ("Songai -Damage- Enhanced damage.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_CHIKYU] > 2)
                                send_to_char
                                        ("Isogu -Haste- Adds two extra attacks.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_CHIKYU] > 3)
                                send_to_char
                                        ("Tsuiseki -Hunt- Fast hunting.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_CHIKYU] > 4)
                                send_to_char
                                        ("Sakeru -Sonic Speed- Dodge more attacks.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_CHIKYU] > 5)
                                send_to_char
                                        ("HaraKiri -Blood Power- Hurt yourself to gain  power.\n\r",
                                         ch);
                        return;
                }
                else if (!str_cmp(arg1, "ningenno"))
                {
                        send_to_char
                                ("Ningenno - The battle, attacking and getting away.\n\r\n\r",
                                 ch);
                        if (ch->pcdata->powers[NPOWER_NINGENNO] < 1)
                                send_to_char
                                        ("You have none of the Ningenno principles.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_NINGENNO] > 0)
                                send_to_char
                                        ("Tsume -Claw- IronClaw always worn on wrist to aid in hand-to-hand.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_NINGENNO] > 1)
                                send_to_char
                                        ("Hakunetsu -First Strike- You get super backstabs.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_NINGENNO] > 2)
                                send_to_char
                                        ("Mienaku -Vanish- Never fail flee.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_NINGENNO] > 3)
                                send_to_char
                                        ("Shiroken -Throwing Star- Added attack per round, like headbutt for demons.\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_NINGENNO] > 4)
                                send_to_char
                                        ("Dokuyaku -Poison- Adds poisons to the Shiroken\n\r",
                                         ch);
                        if (ch->pcdata->powers[NPOWER_NINGENNO] > 5)
                                send_to_char
                                        ("Circle - circle behind your opponent and hit him during battle\n\r",
                                         ch);

                        return;
                }
                xprintf(buf,
                        "Principles: Sora (%d), Chikyu (%d), Ningenno (%d).\n\r",
                        ch->pcdata->powers[NPOWER_SORA],
                        ch->pcdata->powers[NPOWER_CHIKYU],
                        ch->pcdata->powers[NPOWER_NINGENNO]);
                send_to_char(buf, ch);
                return;
        }
        if (!str_cmp(arg2, "improve"))
        {
                int       improve;
                int       cost;
                int       max;

                if (!str_cmp(arg1, "sora"))
                {
                        improve = NPOWER_SORA;
                        max = 6;
                }
                else if (!str_cmp(arg1, "chikyu"))
                {
                        improve = NPOWER_CHIKYU;
                        max = 6;
                }
                else if (!str_cmp(arg1, "ningenno"))
                {
                        improve = NPOWER_NINGENNO;
                        max = 6;
                }
                else
                {
                        send_to_char
                                ("Principles: Sora, Chikyu, Ningenno.\n\r",
                                 ch);
                        return;
                }
                cost = (ch->pcdata->powers[improve] + 1) * 10;
                arg1[0] = UPPER(arg1[0]);
                if (ch->pcdata->powers[improve] >= max)
                {
                        xprintf(buf,
                                "You have already gained all the powers of the %s principle.\n\r",
                                arg1);
                        send_to_char(buf, ch);
                        return;
                }
                if (cost > ch->practice)
                {
                        xprintf(buf,
                                "It costs you %d primal to improve your %s principle.\n\r",
                                cost, arg1);
                        send_to_char(buf, ch);
                        return;
                }
                ch->pcdata->powers[improve] += 1;
                ch->practice -= cost;
                xprintf(buf,
                        "You improve your ability in the %s principle.\n\r",
                        arg1);
                send_to_char(buf, ch);
        }
        else
                send_to_char
                        ("To improve a principle, type: Principle <principle type> improve.\n\r",
                         ch);
        return;
}

void do_michi(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;

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

        if (IS_CLASS(ch, CLASS_NINJA))
        {

                if (ch->rage >= 100)
                {
                        send_to_char
                                ("But you are already in the state of Michi.\n\r",
                                 ch);
                        return;
                }
                if (ch->move < 500)
                {
                        send_to_char
                                ("But you don't have enough move to perform the michi.\n\r",
                                 ch);
                        return;
                }

                send_to_char
                        ("You are gifted positive energy while performing the michi.\n\r",
                         ch);
                act("$n is gifted positives energies while performing the michi.", ch, NULL, NULL, TO_ROOM);
                ch->rage += 100;
                ch->move -= 500;
                WAIT_STATE(ch, 12);
                return;
        }
        else
                send_to_char("But you are already in the state of Michi.\n\r",
                             ch);
        return;
}

void do_kakusu(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;

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

        if (IS_CLASS(ch, CLASS_NINJA) && ch->pcdata->powers[NPOWER_SORA] < 3)
        {
                send_to_char
                        ("You have not learned the Sora principle to 3.\n\r",
                         ch);
                return;
        }

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

        if (ch->fight_timer > 0)
        {
                send_to_char("Not until your fight timer expires.\n\r", ch);
                return;
        }

        if (IS_SET(ch->act, AFF_HIDE))
        {
                REMOVE_BIT(ch->act, AFF_HIDE);
                act("$n appears from the shadows.", ch, NULL, NULL, TO_ROOM);
                send_to_char("You appear from the shadows.\n\r", ch);
        }
        else
        {
                act("$n disappears into the shadows.", ch, NULL, NULL,
                    TO_ROOM);
                send_to_char("You disappear into the shadows.\n\r", ch);
                ch->move -= 500;
                SET_BIT(ch->act, AFF_HIDE);
        }
        return;
}

void do_kanzuite(CHAR_DATA * ch, char *argument)
{
        if (IS_NPC(ch))
                return;

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

        if (IS_CLASS(ch, CLASS_NINJA) && ch->pcdata->powers[NPOWER_SORA] < 5)
        {
                send_to_char
                        ("You have not learned the Sora principle to 5.\n\r",
                         ch);
                return;
        }

        else if (ch->move < 500)
        {
                send_to_char
                        ("You don't have 500 move to increase your awareness.\n\r",
                         ch);
                return;
        }

        if (IS_SET(ch->act, PLR_HOLYLIGHT))
        {
                REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
                send_to_char("You're senses return to normal.\n\r", ch);
        }
        else
        {
                SET_BIT(ch->act, PLR_HOLYLIGHT);
                send_to_char
                        ("You're senses increase into incredible proportions.\n\r",
                         ch);
                ch->move -= 500;
        }

        return;
}

void do_mienaku(CHAR_DATA * ch, char *argument)
{
        ROOM_INDEX_DATA *was_in;
        ROOM_INDEX_DATA *now_in;
        CHAR_DATA *victim;
        int       attempt;


        if (IS_CLASS(ch, CLASS_NINJA)
            && ch->pcdata->powers[NPOWER_NINGENNO] < 3)
        {
                send_to_char
                        ("You have not learned the Ningenno principle to 3.\n\r",
                         ch);
                return;
        }
        else if (!IS_CLASS(ch, CLASS_NINJA))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }

        if (IS_NPC(ch))
                return;

        if ((victim = ch->fighting) == NULL)
        {
                if (ch->position == POS_FIGHTING)
                        ch->position = POS_STANDING;
                send_to_char("You aren't fighting anyone.\n\r", ch);
                return;
        }
        if (ch->move < 200)
        {
                send_to_char
                        ("You don't have enough movement points to flee.\n\r",
                         ch);
                return;
        }
        if (IS_AFFECTED(ch, AFF_WEBBED))
        {
                send_to_char
                        ("You are unable to move with all this sticky webbing on.\n\r",
                         ch);
                return;
        }

        was_in = ch->in_room;

        {
                EXIT_DATA *pexit;
                int       door;

                send_to_char("You move to vanish from combat!\n\r", ch);

                for (attempt = 0; attempt < 6; attempt++)
                {
                        door = number_door();
                        if ((pexit = was_in->exit[door]) == 0
                            || pexit->to_room == NULL
                            || IS_SET(pexit->exit_info, EX_CLOSED)
                            || (IS_NPC(ch)
                                && IS_SET(pexit->to_room->room_flags,
                                          ROOM_NO_MOB)))
                                continue;


                        move_char(ch, door);
                        if ((now_in = ch->in_room) == was_in)
                                continue;

/* Use escape instead of flee so people know it's the ninja power */
                        ch->in_room = was_in;
                        act("$n has escaped!", ch, NULL, NULL, TO_ROOM);
                        ch->in_room = now_in;

                        if (!IS_NPC(ch))
                                send_to_char("You escape from combat!\n\r",
                                             ch);

/*	if (victim->in_room == ch->in_room)
    {
    	SET_BIT(victim->extra,BLINDFOLDED);
    	act("You start to move at super speeds and blind $N.",ch,NULL,victim,TO_CHAR);
    	act("$n starts to move at super speeds and blinds $N.",ch,NULL,victim,TO_ROOM);
    	act("$n starts to move at super speeds and blinds you.",ch,NULL,victim,TO_VICT);
    	
    	return;
    }
  */
                        ch->move -= 200;
                        stop_fighting(ch, TRUE);
                        return;
                }

        }
        return;
}

void do_bomuzite(CHAR_DATA * ch, char *argument)
{
        CHAR_DATA *victim;
        char      arg1[MAX_INPUT_LENGTH];

        argument = one_argument(argument, arg1);

        if (IS_NPC(ch))
                return;

        if (!IS_CLASS(ch, CLASS_NINJA))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        else if (ch->pcdata->powers[NPOWER_SORA] < 6)
        {
                send_to_char
                        ("You have not learned the Sora principle to 6.\n\r",
                         ch);
                return;
        }

        if (ch->in_room != NULL)
        {
                if (IS_SET(ch->in_room->room_flags, ROOM_SAFE))
                {
                        send_to_char
                                ("You cannot use this power in a safe room.\n\r",
                                 ch);
                        return;
                }
        }


        if (arg1[0] == '\0')
        {
                send_to_char("Bomb who?\n\r", ch);
                return;
        }

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

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

        if (ch->position == POS_FIGHTING)
        {
                send_to_char("Not while fighting!\n\r", ch);
                return;
        }

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

        if (victim->in_room == ch->in_room)
        {
                act("You toss your bomb onto the floor and put $N to sleep.",
                    ch, NULL, victim, TO_CHAR);
                act("$n tosses a bomb onto the floor.  You feel sleepy.", ch,
                    NULL, victim, TO_VICT);
                victim->position = POS_SLEEPING;
                ch->move -= 500;
                WAIT_STATE(ch, 1);
                return;
        }

        return;
}


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

        if (IS_NPC(ch))
                return;

        if (!IS_CLASS(ch, CLASS_NINJA)
            || ch->pcdata->powers[NPOWER_NINGENNO] < 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_hara_kiri(CHAR_DATA * ch, char *argument)
{

        if (IS_NPC(ch))
                return;

        if (!IS_CLASS(ch, CLASS_NINJA)
            || ch->pcdata->powers[NPOWER_CHIKYU] < 6)
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }

        if (ch->pcdata->powers[HARA_KIRI] > 0)
        {
                send_to_char
                        ("You are already experiencing the power of HaraKiri.\n\r",
                         ch);
                return;
        }

        if (ch->hit < ch->max_hit / 10)
        {
                send_to_char("You are hurt too badly already.\n\r", ch);
                return;
        }

        ch->pcdata->powers[HARA_KIRI] = ch->hit / 500;
        if (ch->pcdata->powers[HARA_KIRI] < 5)
                ch->pcdata->powers[HARA_KIRI] = 5;
        ch->hit = 1;
        ch->mana = 1;
        ch->move = 1;
        send_to_char("You cut your finger and bleed profusely.\n\r", ch);
        act("$n cuts his finger and obtains the power of HaraKiri", ch, NULL,
            NULL, TO_ROOM);
        return;
}

void do_ninjaarmor(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_IMMORTAL(ch))
        {
                if (!IS_CLASS(ch, CLASS_NINJA))
                {
                        send_to_char("What?\n\r", ch);
                        return;
                }
        }

        if (arg[0] == '\0')
        {
                send_to_char
                        ("Please specify which piece of ninja eq you wish to make: Ring Collar Robe Cap "
                         "Leggings Boots Gloves Sleeves Cloak Belt Bracer Mask Sword Dagger.\n\r",
                         ch);
                return;
        }

        if (ch->practice < 100)
        {
                send_to_char("You don't have the 100 primal needed.\n\r", ch);
                return;
        }
        if (!str_cmp(arg, "mask"))
                vnum = 33093;
        else if (!str_cmp(arg, "dagger"))
                vnum = 33080;
        else if (!str_cmp(arg, "sword"))
                vnum = 33081;
        else if (!str_cmp(arg, "ring"))
                vnum = 33082;
        else if (!str_cmp(arg, "collar"))
                vnum = 33083;
        else if (!str_cmp(arg, "robe"))
                vnum = 33085;
        else if (!str_cmp(arg, "cap"))
                vnum = 33086;
        else if (!str_cmp(arg, "leggings"))
                vnum = 33087;
        else if (!str_cmp(arg, "boots"))
                vnum = 33088;
        else if (!str_cmp(arg, "gloves"))
                vnum = 33091;
        else if (!str_cmp(arg, "sleeves"))
                vnum = 33089;
        else if (!str_cmp(arg, "cloak"))
                vnum = 33090;
        else if (!str_cmp(arg, "belt"))
                vnum = 33092;
        else if (!str_cmp(arg, "bracer"))
                vnum = 33084;
        else
        {
                do_ninjaarmor(ch, "");
                return;
        }

        if (vnum == 0 || (pObjIndex = get_obj_index(vnum)) == NULL)
        {
                send_to_char("Missing object, please inform a God .\n\r", ch);
                return;
        }

        if (!IS_IMMORTAL(ch))
        {
                ch->practice -= 100;
        }
        obj = create_object(pObjIndex, 50);
        obj->questowner = str_dup(ch->pcdata->switchname);
        obj->ownerid = ch->pcdata->playerid;
        obj_to_char(obj, ch);
        act("You make $p from the shadows.", ch, obj, NULL, TO_CHAR);
        act("$n forms $p from the shadows.", ch, obj, NULL, TO_ROOM);
        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_NINJA))
        {
                send_to_char("Huh?\n\r", ch);
                return;
        }
        if (ch->pcdata->powers[NPOWER_NINGENNO] < 2)
        {
                send_to_char("You do not have that power yet.\n\r", ch);
                return;
        }
        if ((victim = get_char_room(ch, NULL, 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 (chance > 15)
        {
                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);
                WAIT_STATE(ch, 24);
        }
        return;
}