mcloud/
/*  (O)xx}========> Thief Class  <========{xx(O)
                      By Trent
				    Seeds of Hate
			  Swords & Sorcery Edition
		====================================
*/

#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_thiefskills(CHAR_DATA *ch,char *argument)
{
 
        if (IS_NPC(ch)) return;
 
        if (!IS_CLASS(ch, CLASS_THIEF))  {
        send_to_char("#cHuh?\n\r", ch );
        return;}
        
        send_to_char("#rT#Rh#0ief Skil#Rl#rs#n\n\n\r", ch );
		
		if (IS_SET(ch->pcdata->powers[1],THIEF_CONCEAL))
        send_to_char("#0Hide in Shadows (Conceal)#n\n\r", ch );
		
		if (IS_SET(ch->pcdata->powers[1],THIEF_GLEAM))
		send_to_char("#0Gleam of Nighteyes#n\n\r", ch );

		if (IS_SET(ch->pcdata->powers[1],THIEF_SWIFTNESS))
		send_to_char("#0Swiftness (auto)#n\n\r", ch );

		if (IS_SET(ch->pcdata->powers[1],THIEF_CRITICALSTRIKE))
		send_to_char("#0Critical Strike (auto)#n\n\r", ch );

		if (IS_SET(ch->pcdata->powers[1],THIEF_BACKSTAB))
		send_to_char("#0Backstab (bstab)#n\n\r", ch );

		if (IS_SET(ch->pcdata->powers[1],THIEF_POISONBLADE))
		send_to_char("#0Poison Blade#n\n\r", ch );

		if (IS_SET(ch->pcdata->powers[1],THIEF_TDAGGER))
		send_to_char("#0Throwing Dagger (tdagger)#n\n\r", ch );

		if (IS_SET(ch->pcdata->powers[1],THIEF_TOUGHSKIN))
		send_to_char("#0Toughskin (auto)#n\n\r", ch );

		if (IS_SET(ch->pcdata->powers[1],THIEF_MIGHT))
		send_to_char("#0Might of the Panther(auto)#n\n\r", ch );

		if (IS_SET(ch->pcdata->powers[1],THIEF_DTRICK))
		send_to_char("#0Dirty Trick (dtrick)#n\n\r", ch );
        
		send_to_char("\n\r", ch);
        return;
}


void do_rolldice(CHAR_DATA *ch,char *argument)
{
	int	roll;

        if (IS_NPC(ch)) return;
 
        if (!IS_CLASS(ch, CLASS_THIEF))  {
        send_to_char("#cHuh?\n\r", ch );
        return;}
		
		if (ch->practice < 100)
		{
		send_to_char("#cIt costs 100 primal to roll the magikal dice!\n\r", ch );
		return;}

		ch->practice -= 100;
		send_to_char("#CYou roll the dice of fate...#n\n\r", ch );

	roll = number_range(1,10);
    
	if ( (roll == 1) )
	{
	send_to_char("#CThe die spins on its side, then comes up 1!\n\r", ch );
		if (IS_SET(ch->pcdata->powers[1],THIEF_GLEAM))    
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_GLEAM);
	send_to_char("#cYou gain #0Gleam of Night Eyes#c!#n\n\r", ch );
	return;
	}

	else if ( (roll == 2) )
	{
	send_to_char("#CThe die spins on its side, then comes up 2!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_CONCEAL))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }

	SET_BIT(ch->pcdata->powers[1], THIEF_CONCEAL);
	send_to_char("#cYou gain #0Hide in Shadows#c!#n\n\r", ch );
	return;
	}

	else if ( (roll == 3) )
	{
	send_to_char("#CThe die spins on its side, then comes up 3!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_SWIFTNESS))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_SWIFTNESS);
	send_to_char("#cYou gain #0Swiftness#c!#n\n\r", ch );
	return;
	}

	else if ( (roll == 4) )
	{
	send_to_char("#CThe die spins on its side, then comes up 4!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_CRITICALSTRIKE))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_CRITICALSTRIKE);
	send_to_char("#cYou gain the #0Critical Strike#c skill!#n\n\r", ch );
	return;
	}

	else if ( (roll == 5) )
	{
	send_to_char("#CThe die spins on its side, then comes up 5!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_BACKSTAB))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_BACKSTAB);
	send_to_char("#cYou gain the #0Backstab#c skill!#n\n\r", ch );
	return;
	}
	
	else if ( (roll == 6) )
	{
	send_to_char("#CThe die spins on its side, then comes up 6!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_POISONBLADE))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_POISONBLADE);
	send_to_char("#cYou gain the #0PoisonBlade#c skill!#n\n\r", ch );
	return;
	}

	else if ( (roll == 7) )
	{
	send_to_char("#CThe die spins on its side, then comes up 7!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_TDAGGER))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_TDAGGER);
	send_to_char("#cYou learn the art of #0Throwing Daggers#c!#n\n\r", ch );
	return;
	}

	else if ( (roll == 8) )
	{
	send_to_char("#CThe die spins on its side, then comes up 8!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_TOUGHSKIN))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_TOUGHSKIN);
	send_to_char("#cYou train to withstand more pain and gain the #0Toughskin#c discipline!#n\n\r", ch );
	return;
	}

	else if ( (roll == 9) )
	{
	send_to_char("#CThe die spins on its side, then comes up 9!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_MIGHT))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_MIGHT);
	send_to_char("#cYou gain the #0Might of the Panther#c!#n\n\r", ch );
	return;
	}

	else if ( (roll == 10) )
	{
	send_to_char("#CThe die spins on its side, then comes up 10!\n\r", ch );
    
		if (IS_SET(ch->pcdata->powers[1],THIEF_DTRICK))  
    {
	send_to_char("#CYou already have that power! Roll again.#n\n\r",ch);
	ch->practice += 100;
	return;
    }
	
    SET_BIT(ch->pcdata->powers[1], THIEF_DTRICK);
	send_to_char("#cYou learn some #0Dirty Tricks#c!#n\n\r", ch );
	return;
	}

return;
}

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

	if ( IS_NPC(ch) )
	return;

    if (!IS_CLASS(ch, CLASS_THIEF))  
    {
    	send_to_char("#cHuh?\n\r", ch ); 
    	return;
    }

	if (!IS_SET(ch->pcdata->powers[1],THIEF_CONCEAL)) 
	{
	stc("#RYou must have the #0Hide in Shadows#R skill to do this!#n\n\r", ch );
	return; 
	}

    if (ch->fight_timer > 0)
    {
	stc("#RNot with a fight timer!#n\n\r", ch );
    return;
	}

	if (ch->move < 2500)
	{
	stc("#RYou do not have the necessary 2500 move!\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_SET(ch->act, PLR_WIZINVIS) )
    {
	REMOVE_BIT(ch->act, PLR_WIZINVIS);
	act( "#R$n #0steps out of the shadows.#n", ch, NULL, NULL, TO_ROOM );
	send_to_char( "#0You step out of the shadows.#n\n\r", ch );
	return;
	}
    else
    {
	act( "#R$n #0dissapears into the shadows, dagger in hand.#n", ch, NULL, NULL, TO_ROOM );
	send_to_char( "#0You dissapear into the shadows, dagger in hand.#n\n\r", ch );
	SET_BIT(ch->act, PLR_WIZINVIS);
    }
	ch->move -= 2500;
    return;
}

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

	if (!IS_CLASS(ch, CLASS_THIEF) || !IS_SET(ch->pcdata->powers[1],THIEF_GLEAM))
	{
	stc("Huh?\n\r",ch);
	return;
	}
    
	if ( IS_SET(ch->act, PLR_HOLYLIGHT) )
    {
	REMOVE_BIT(ch->act, PLR_HOLYLIGHT);
	send_to_char( "#0Your eyes stop gleaming.#n\n\r", ch );
	}
    else
    {
	SET_BIT(ch->act, PLR_HOLYLIGHT);
	send_to_char( "#0Your eyes begin to gleam in the night.#n\n\r", ch );
    }
    return;
}

void do_bstab( CHAR_DATA *ch, char *argument)
	{
		CHAR_DATA *victim;
		OBJ_DATA *obj;
		char arg1[MAX_INPUT_LENGTH];
		char buf[MAX_STRING_LENGTH];
		int dam;
		int assassinationchance;
		int randomizer;
		argument = one_argument( argument, arg1 );

		if (IS_NPC(ch))
		return;

		if (!IS_CLASS(ch, CLASS_THIEF) || !IS_SET(ch->pcdata->powers[1],THIEF_BACKSTAB))
		{
		stc("Huh?\n\r",ch);
		return;
		}
		
		if ( arg1[0] == '\0')
	    {
		send_to_char( "#0Backstab 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;
    }
		
		if ((victim == ch))
		{
		stc("#RLike to see you pull THAT one off...#n\n\r",ch);
		return;
		}

		if ((( obj = get_eq_char( ch, WEAR_WIELD ) ) == NULL || obj->value[3] != 11)
		&& ((obj = get_eq_char( ch, WEAR_HOLD ) ) == NULL || obj->value[3] != 11))
		{
		send_to_char( "You need to wield a piercing weapon.\n\r", ch );
		return;
		}
		if ( victim->fighting != NULL )
		{
		send_to_char( "You can't backstab a fighting person.\n\r", ch );
		return;
		}

		if ( !IS_SET(ch->act, PLR_WIZINVIS) )
		{
		stc("#0You must be concealed in the shadows to preform this technique!#n\n\r",ch);
		return;
		}


		if (ch->move < 10000)
		{
		stc("#0You do not have the required #R10000 #rm#Rove#n.\n\r",ch);
		return;
		}
		randomizer = (10000 / (ch->max_hit / ch->hit));
		assassinationchance = number_range(1, 10);
		dam = number_range(victim->max_hit * .1, victim->max_hit * .25);
	        if (!IS_NPC(victim) && dam > 7000) dam = (number_fuzzy(number_range(1,5) * 5) + 7000);	
		//assassination for little mobs
		if (IS_NPC(victim) && victim->hit < (ch->max_move / 2) && assassinationchance >= 8)
		{
		REMOVE_BIT(ch->act, PLR_WIZINVIS);
		act("#R$n #0steps out of the shadows, and in one quick move, #Rslices #r$N's #Rhead #0from $S shoulders!#n\n\r", ch, NULL, victim, TO_NOTVICT);
		act("#0You leap from the shadows, and without breaking a sweat, #Rsever #r$N's #Rhead #0from $S shoulders!  #r<<#RAssassination!#r>>#n",ch, NULL, victim, TO_CHAR);
		ch->move -= randomizer;
		make_part( victim, "head" );
		ch->exp += 10000 * victim->level;
		raw_kill(victim);
		sprintf(buf,"#r%s #0wipes the #Rblood #0from his #7dagger #0after making another skillfull #Rassa#rssina#Rtion#n.",ch->pcdata->switchname);
		do_info(ch,buf);
		return;
		}

		REMOVE_BIT(ch->act, PLR_WIZINVIS);
		act("#R$n#0 steps out from the shadows behind #r$N #0and drives a #7dagger #0into $s back!#n\n\r", ch, NULL, victim, TO_NOTVICT);
	    sprintf( buf, "#0You step out of the shadows behind #R$N #0and drive a #7dagger #0into $S back!#n   #r[#R%d#r]#n\n\r#n", dam);
		act(buf, ch, NULL, victim, TO_CHAR);
		sprintf( buf, "#0You scream in #Ragony #0as you feel a sharp #7dagger #0plunge into your back!   #r[#R%d#r]#n\n\r", dam);
		stc(buf, victim);
		ch->move -= 10000;
		hurt_person(ch,victim,dam);
		if (victim->hit < -10) victim->hit = -10;
		WAIT_STATE( ch, 2 * PULSE_VIOLENCE );
		multi_hit( ch, victim, TYPE_UNDEFINED );
		return;
	}

void do_tdagger( CHAR_DATA *ch, char *argument)
	{
		CHAR_DATA *victim;
		OBJ_DATA *obj;
		char arg1[MAX_INPUT_LENGTH];
		char buf[MAX_STRING_LENGTH];
		int dam;
		int chance;
		int vischance;

		argument = one_argument( argument, arg1 );

		if (IS_NPC(ch))
		return;

		if (!IS_CLASS(ch, CLASS_THIEF) || !IS_SET(ch->pcdata->powers[1],THIEF_TDAGGER))
		{
		stc("Huh?\n\r",ch);
		return;
		}
		
		if ( arg1[0] == '\0')
	    {
		send_to_char( "#0Throw a dagger at 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;
    }
		
		if ((victim == ch))
		{
		stc("#0You toss your dagger in the air playfully.#n\n\r",ch);
		return;
		}
		if (is_safe(ch, victim))
		{
		stc("No.\n\r",ch);
		return;
		}
		if ((( obj = get_eq_char( ch, WEAR_WIELD ) ) == NULL || obj->value[3] != 11)
		&& ((obj = get_eq_char( ch, WEAR_HOLD ) ) == NULL || obj->value[3] != 11))
		{
		send_to_char( "#0You need to wield a piercing weapon.#n\n\r", ch );
		return;
		}

		if (ch->move < 1000)
		{
		stc("#0You do not have the required #R1000 #rm#Rove#n.\n\r",ch);
		return;
		}
		
		vischance = number_range(1, 100);
		chance = number_range(1, 100);

		if (chance >= 95) //Head Shot
		{
			if (( obj = get_eq_char( victim, ITEM_WEAR_HEAD)) == NULL)
			{
			dam = number_range(ch->damcap[DAM_CAP] * 2.5, ch->damcap[DAM_CAP] * 3);
			}
			else
			{
			dam = number_range(ch->damcap[DAM_CAP] * 1.9, ch->damcap[DAM_CAP] * 2.3);
			}
			act("#R$n#0 hurls a #7dagger #0at #r$N, #0hitting them right in the forehead!#n", ch, NULL, victim, TO_NOTVICT);
			sprintf( buf, "#0You hurl a #7dagger #0at #R$N, #0hitting $M right in #S forehead!#n   #r[#R%d#r]#n", dam);
			act(buf, ch, NULL, victim, TO_CHAR);
			sprintf( buf, "#0A #7dagger #0flies out of nowhere and hits you in the forehead!  #RSHIT that fucking hurt!#n  #r[#R%d#r]#n", dam);
			stc(buf, victim);
		}

		else if (chance >= 90) //Neck Hit
		{
			if (( obj = get_eq_char( victim, ITEM_WEAR_NECK)) == NULL)
			{
			dam = number_range(ch->damcap[DAM_CAP] * 2, ch->damcap[DAM_CAP] * 3);
			}
			else
			{
			dam = number_range(ch->damcap[DAM_CAP] * 1.5, ch->damcap[DAM_CAP] * 2.3);
			}
			act("#R$n#0 hurls a #7dagger #0at #r$N, #Rpenetrating #0$S neck!#n", ch, NULL, victim, TO_NOTVICT);
			sprintf( buf, "#0You hurl a #7dagger #0at #R$N, penetrating #0$S neck!#n   #r[#R%d#r]#n", dam);
			act(buf, ch, NULL, victim, TO_CHAR);
			sprintf( buf, "#0A #7dagger #0flies out of nowhere and #Rimpales #0your neck!  #RSHIT that fucking hurt!#n  #r[#R%d#r]#n\n\r", dam);
			stc(buf, victim);
			SET_BIT(victim->loc_hp[6], BLEEDING_THROAT);
		}
		
		else if (chance >= 30) //General Chest Hit
		{
			if (( obj = get_eq_char( victim, ITEM_WEAR_BODY)) == NULL)
			{
			dam = number_range(ch->damcap[DAM_CAP] * 1.8, ch->damcap[DAM_CAP] * 2);
			}
			else
			{
			dam = number_range(ch->damcap[DAM_CAP] - 200, ch->damcap[DAM_CAP] + 200);
			}
			act("#R$n#0 hurls a #7dagger #0at #r$N, #Rpiercing #0into #0$S chest!#n", ch, NULL, victim, TO_NOTVICT);
			sprintf( buf, "#0You hurl a #7dagger #0at #R$N, piercing #0into $S chest!#n   #r[#R%d#r]#n", dam);
			act(buf, ch, NULL, victim, TO_CHAR);
			sprintf( buf, "#0A #7dagger #0flies out of nowhere and #Rpierces #0deep into your chest!#n  #r[#R%d#r]#n\n\r#n", dam);
			stc(buf, victim);
		}
		
		else if (chance >= 2) //Leg Hit
		{
			if ((obj = get_eq_char( victim, ITEM_WEAR_LEGS)) == NULL)
			{
			dam = number_range(ch->damcap[DAM_CAP] * 0.9, ch->damcap[DAM_CAP] * 1.2);
			}
			else
			{
			dam = number_range(ch->damcap[DAM_CAP] - 200, ch->damcap[DAM_CAP] - 400);
			}
			act("#R$n#0 hurls a #7dagger #0at #r$N, #Rdigging #0into #0$S leg!#n", ch, NULL, victim, TO_NOTVICT);
			sprintf( buf, "#0You hurl a #7dagger #0at #R$N, digging #0into $S leg!#n   #r[#R%d#r]#n", dam);
			act(buf, ch, NULL, victim, TO_CHAR);
			sprintf( buf, "#0A #7dagger #0flies out of nowhere and #Rdigs #0deep into your leg!#n  #r[#R%d#r]#n\n\r#n", dam);
			stc(buf, victim);
		}

		else if (chance < 2  && victim->sex == 1) //OW thats just NOT right, what the hell do they teach you thieves anyhow??
		{
			dam = number_range(ch->damcap[DAM_CAP] * 2, ch->damcap[DAM_CAP] * 3);
			
act("#R$n#0 hurls a #7dagger #0at #r$N, #0hitting him in a rather.. uncompromising location!#n", ch, NULL, victim, TO_NOTVICT);
sprintf( buf, "#0You hurl a #7dagger #0at #R$N, #0hitting him in a rather.. uncompromising location!#n   #r[#R%d#r]#n", dam);
act(buf, ch, NULL, victim, TO_CHAR);
sprintf( buf, "#RYou whimper pitifully as you take a throwing dagger to the crotch!#n  #r[#R%d#r]#n\n\r#n", dam);
stc(buf, victim);
sprintf(buf,"#0HAHA #R%s #0has just taken a throwing dagger to the crotch!#n",IS_NPC(victim) ? victim->short_descr : victim->pcdata->switchname);
do_info(victim,buf);
		}

		else
		{
			stc("You failed!\n\r",ch);
			return;
		}

		hurt_person(ch,victim,dam);
		ch->move -= 1000;
		if (victim->hit < -10) {victim->hit = -10;}		
		if ( IS_SET(ch->act, PLR_WIZINVIS) && vischance >= 65) //The check for coming out of hiding.
		{
		stc("#0You take a moment to catch your balance and remain unnoticed in the shadows!#n\n\r",ch);
		WAIT_STATE( ch, 8 );
		return;
		}
		if ( IS_SET(ch->act, PLR_WIZINVIS) && vischance < 65)
		{
		stc("#0You come out of hiding!#n\n\r",ch);
		REMOVE_BIT(ch->act, PLR_WIZINVIS);
		}
		WAIT_STATE( ch, 5);
		if (ch->fighting == NULL) {ch->fighting = victim;}
		return;
	}

void do_thiefeq( CHAR_DATA *ch, char *argument )
{
    stc("Thiefeq not done yet!\n\r",ch);
    return;
}


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_THIEF) || !IS_SET(ch->pcdata->powers[1],THIEF_DTRICK))
	{
	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_THIEF))
	 {
	 stc("Huh?\n\r",ch);
	 return;
	 }

	if (!IS_SET(ch->pcdata->powers[1],THIEF_POISONBLADE))
	 {
	 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->quest, QUEST_WWPOISON))
  {
    send_to_char("#0This item has already been #gP#Goisone#gd!#n.\n\r", ch);
    return;
  }

  if (IS_SET(obj->extra_flags, ITEM_FIREENCHANT) || IS_SET(obj->extra_flags, ITEM_ICEENCHANT) || IS_SET(obj->extra_flags, ITEM_ELECENCHANT))
  {
  stc("That weapon has already been enchanted!\n\r",ch);
  return;
  }

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

void do_shadowmove( 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_THIEF) )
  {
    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 (ch == victim)
  {
    send_to_char("But you're already at yourself!\n\r",ch);
    return;
  }

    if (IS_SET(victim->act, ACT_NOTRAVEL))
  {
  	send_to_char("No Can Do.\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;
}