/* (O)xx}========> Thief Class <========{xx(O)
By Trent
Seeds of Hate
Swords & Sorcery Edition
====================================
*/
/***************************************************************************
* _/ _/ *
* _/_/_/ _/_/ _/_/_/ _/ _/_/ _/ _/ _/_/_/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ *
* _/ _/ _/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/ *
***************************************************************************
* 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_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, NULL, 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, ch);
xprintf(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);
xprintf( 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);
xprintf( 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, NULL, 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);
xprintf( 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);
xprintf( 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] * 2.5);
}
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);
xprintf( 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);
xprintf( 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);
xprintf( 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);
xprintf( 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);
xprintf( 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);
xprintf( 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);
xprintf( 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);
xprintf( 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);
xprintf(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_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, NULL, 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)
{
xprintf(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 );
xprintf(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)
{
xprintf(buf,"#R$n #0kicks your shins, causing your legs to buckle!#n\n\r");
act( buf, ch, NULL, victim, TO_VICT );
xprintf(buf,"#0You kick #R$N #0in the shins, causing $S legs to buckle!#n\n\r");
act( buf, ch, NULL, victim, TO_CHAR );
xprintf(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)
{
xprintf(buf,"#R$n #0stomps on your feet! OW!#n\n\r");
act( buf, ch, NULL, victim, TO_VICT );
xprintf(buf,"#0You stomp on #R$N's #0feet!#n\n\r");
act( buf, ch, NULL, victim, TO_CHAR );
xprintf(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)
{
xprintf(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 );
xprintf(buf,"#0You BASH your dagger hilt into #R$N's #0face!#n\n\r");
act( buf, ch, NULL, victim, TO_CHAR );
xprintf(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,ch)) == 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;
}