#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_bloodrod( CHAR_DATA *ch, char *argument ) { OBJ_DATA *obj; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r",ch); return; } if (ch->power[DISC_VAMP_THAU] < 2) { send_to_char("You need to obtain level 2 Thaumaturgy to create a Blood Rod.\n\r",ch); return; } if ( 10 > ch->practice) { send_to_char("It costs 10 points of primal to create a Blood Rod.\n\r",ch); return; } ch->practice -= 10; obj = create_object(get_obj_index(OBJ_VNUM_BROD) ,0 ); obj_to_char(obj, ch); act("A Rod of Blood appears in your hands.",ch,NULL,NULL,TO_CHAR); act("A Rod of blood appears in $n's hands.",ch,NULL,NULL,TO_ROOM); return; } void do_shadowgaze(CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; one_argument( argument,arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch,CLASS_VAMPIRE)) { send_to_char("Huh?\n\r",ch); return; } if (ch->power[DISC_VAMP_OBTE] < 10) { send_to_char("You need level 10 Obtenebration to use Shadow Gaze.\n\r",ch); return; } if (!IS_AFFECTED(ch, AFF_SHADOWPLANE)) { send_to_char("You need to be in the Shadowplane, first!\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to use Shadow Gaze on?\n\r", ch ); return; } if ((victim = get_char_room( ch, arg)) == NULL) { send_to_char("They arent here.\n\r",ch); return; } if (IS_AFFECTED(victim, AFF_SHADOWPLANE)) { send_to_char("They are already in the Shadowplane!\n\r",ch); return; } if (IS_NPC(victim)) { send_to_char("You cannot Shadow Gaze a mob.\n\r",ch); return; } sprintf(buf, "%s gazes intently at %s.",ch->name,victim->short_descr); act(buf,ch,NULL,NULL,TO_ROOM); sprintf(buf, "You gaze deeply into %s's eyes.\n\r",victim->short_descr); send_to_char(buf,ch); WAIT_STATE(ch, 8); sprintf(buf, "You pull %s into the Shadowplane!",victim->short_descr); act(buf,ch,NULL,NULL,TO_CHAR); sprintf(buf, "%s rips %s into the Shadowplane!" ,ch->name,victim->short_descr); act(buf,ch,NULL,NULL,TO_ROOM); SET_BIT(victim->affected_by, AFF_SHADOWPLANE); return; } void do_grab(CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; one_argument( argument,arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch,CLASS_VAMPIRE)) { send_to_char("Huh?\n\r",ch); return; } if (ch->power[DISC_VAMP_OBTE] < 8) { send_to_char("You need level 8 Obtenebration to use Grab.\n\r",ch); return; } if (!IS_AFFECTED(ch, AFF_SHADOWPLANE)) { send_to_char("You need to be in the Shadowplane, first!\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Who do you wish to Grab?\n\r", ch ); return; } if ((victim = get_char_room( ch, arg)) == NULL) { send_to_char("They arent here.\n\r",ch); return; } if (IS_AFFECTED(victim, AFF_SHADOWPLANE)) { send_to_char("They are already in the Shadowplane!\n\r",ch); return; } if (IS_NPC(victim)) { send_to_char("You cannot Grab a mobile!\n\r",ch); return; } sprintf(buf, "%s pulls %s into the Shadowplane.",ch->name,victim->name); act(buf,ch,NULL,NULL,TO_ROOM); sprintf(buf, "You pull %s into the Shadowplane!\n\r",victim->name); send_to_char(buf,ch); sprintf(buf, "%s pulls you into the Shadowplane!\n\r",ch->name); act(buf,ch,NULL,victim,TO_VICT); WAIT_STATE(ch, 8); SET_BIT(victim->affected_by, AFF_SHADOWPLANE); return; } void do_share( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; CHAR_DATA *familiar; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; one_argument( argument, arg ); if ( IS_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_VAMPIRE) ) { send_to_char("Huh?\n\r",ch); return; } if (ch->power[DISC_VAMP_ANIM] < 4) { send_to_char("You must obtain at least level 4 in Animalism to use Share Spirits.\n\r",ch); return; } if ( ( familiar = ch->pcdata->familiar ) != NULL) { sprintf(buf,"You release %s.\n\r",familiar->short_descr); send_to_char( buf, ch ); familiar->wizard = NULL; ch->pcdata->familiar = NULL; return; } if ( arg[0] == '\0' ) { send_to_char( "What do you wish to Share spirits with?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( ch == victim ) { send_to_char( "What an intelligent idea!\n\r", ch ); return; } if ( !IS_NPC(victim) ) { send_to_char( "Not on players.\n\r", ch ); return; } if (victim->wizard != NULL) { send_to_char( "You are unable to Share Spirits them.\n\r", ch ); return; } if (victim->level > (ch->spl[RED_MAGIC] * 0.25)) { send_to_char( "They are too powerful.\n\r", ch ); return; } if ( ch->pcdata->condition[COND_THIRST] < 25 ) { send_to_char("You have insufficient blood.\n\r",ch); return; } ch->pcdata->condition[COND_THIRST] -= 25; ch->pcdata->familiar = victim; victim->wizard = ch; act("You share your being with $N.",ch,NULL,victim,TO_CHAR); act("$n is staring at you!",ch,NULL,victim,TO_VICT); act("$n starts staring at $N",ch,NULL,victim,TO_NOTVICT); return; } void do_frenzy( CHAR_DATA *ch, char *argument ) { /* char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument (argument, arg); */ if ( IS_NPC(ch) ) return; if (ch->level < 3) { send_to_char("You cannot frenzy whilst mortal.\n\r", ch); return; } if ( ch->power[DISC_VAMP_ANIM] < 5 ) { send_to_char("You need level 5 Animalism to use Frenzy.\n\r",ch); return; } /* if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( IS_NPC(victim) ) { send_to_char("Not on NPC's!\n\r",ch); return; } if (IS_CLASS(victim, CLASS_VAMPIRE) && arg[0] != '\0') { if ( victim->rage >= 25 ) { send_to_char("Their beast is already controlling them!\n\r",ch); return; } if (number_percent ( ) <= 50) { send_to_char("They shake off your attempt.\n\r",ch); act("You shake off $n's attempt to frenzy you.\n\r",ch,NULL,victim,TO_VICT); act("$N shakes off $n's attempt to frenzy $m.\n\r",ch,NULL,victim,TO_ROOM); return; } if (victim->beast == 0 ) { send_to_char("They are too calm to frenzy!\n\r",ch); return; } if (!IS_VAMPAFF(victim, VAM_NIGHTSIGHT)) do_nightsight(victim,""); if (!IS_VAMPAFF(victim, VAM_FANGS)) do_fangs(victim,""); if (!IS_VAMPAFF(victim, VAM_CLAWS)) do_claws(victim,""); act("$n sends you into a frenzied rage!",ch,NULL,victim,TO_VICT); act("You excite the beast within $n!",victim,NULL,NULL,TO_CHAR); act("$n bares $s fangs and growls as $s inner beast consumes $m.",ch,NULL,NULL,TO_ROOM); ch->rage += number_range(10,20); if (victim->beast > 0) do_beastlike(victim,""); WAIT_STATE(ch,12); return; } send_to_char("But they are already in a rage!\n\r",ch); return; */ if (IS_CLASS(ch, CLASS_VAMPIRE)) { if (ch->beast >= 20) { if ( ch->rage >= ch->beast ) { send_to_char("Your beast is already controlling you.\n\r",ch); return; } } if (ch->beast <= 19) { if ( ch->rage >= 20 ) { send_to_char("Your beast is already controlling you.\n\r",ch); return; } } /* if (ch->beast == 0) { send_to_char("You are too calm to use frenzy.\n\r",ch); return; } */ if (!IS_VAMPAFF(ch, VAM_NIGHTSIGHT)) do_nightsight(ch,""); if (!IS_VAMPAFF(ch, VAM_FANGS)) do_fangs(ch,""); if (!IS_VAMPAFF(ch, VAM_CLAWS)) do_claws(ch,""); send_to_char("You bare your fangs and growl as your inner beast consumes you.\n\r",ch); act("$n bares $s fangs and growls as $s inner beast consumes $m.",ch,NULL,NULL,TO_ROOM); ch->rage += number_range(20,30); if (ch->beast > 0) do_beastlike(ch,""); WAIT_STATE(ch,12); return; } send_to_char("But you are already in a rage!\n\r",ch); return; } void do_summon(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; CHAR_DATA *mount; char arg [MAX_INPUT_LENGTH]; argument = one_argument (argument,arg); if (arg[0] == '\0') { send_to_char("Summon whom?\n\r",ch); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if (victim == ch || victim->in_room == NULL || IS_SET(victim->in_room->room_flags, ROOM_SAFE) || IS_SET(victim->in_room->room_flags, ROOM_PRIVATE) || IS_SET(victim->in_room->room_flags, ROOM_SOLITARY) || IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL) || victim->level >= ch->level + 5 || victim->fighting != NULL || (!IS_NPC(victim) && !IS_IMMUNE(victim, IMM_SUMMON) )) { send_to_char( "You cannot locate them.\n\r", ch ); return; } if (ch->power[DISC_VAMP_PRES] < 4) { send_to_char("You need level 4 in Presence to use this.\n\r",ch); return; } WAIT_STATE(ch,10); act( "$n disappears suddenly.", victim, NULL, NULL, TO_ROOM ); char_from_room( victim ); char_to_room( victim, ch->in_room ); act( "$n arrives suddenly.", victim, NULL, NULL, TO_ROOM ); act( "$N has summoned you!", victim, NULL, ch, TO_CHAR ); do_look( victim, "auto" ); if ( (mount = victim->mount) == NULL ) return; char_from_room( mount ); char_to_room( mount, get_room_index(victim->in_room->vnum) ); do_look( mount, "auto" ); return; } void do_drain( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg [MAX_INPUT_LENGTH]; int dam; argument = one_argument( argument, arg ); if ( IS_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r",ch); return; } if (ch->power[DISC_VAMP_DAIM] < 4) { send_to_char("You need at least level 4 Daimoinon to use this power.\n\r",ch); return; } if ( ( victim = get_char_room( ch, arg ) ) == NULL && (ch->fighting) == NULL) { send_to_char( "They aren't here.\n\r", ch ); return; } if (IS_NPC(victim) && victim->level >= 900) { send_to_char("You cannot drain the life from an arti mob!\n\r", ch); return; } if ((ch->fighting) != NULL) { victim = ch->fighting; } if ( arg[0] == '\0' && (ch->fighting) == NULL) { send_to_char( "Whose life do you wish to drain?\n\r", ch ); return; } if (victim->hit < 500) { send_to_char("They are far to hurt to do that!\n\r",ch); return; } if (is_safe(ch, victim)) { send_to_char("Not while in a safe room!\n\r", ch); return; } if (IS_NPC(victim)) { dam = ch->power[DISC_VAMP_DAIM] * 10; victim->hit = (victim->hit - dam); if (dam > 300) dam = 300; ch->hit = (ch->hit + dam); if (ch->hit > ch->max_hit + 1000) ch->hit = ch->max_hit + 1000; act("You drain the lifeforce out of $N.", ch, NULL, victim, TO_CHAR); act("$n drains the lifeforce out of $N.", ch, NULL, victim, TO_NOTVICT); act("You feel $n draining your lifeforce.", ch, NULL, victim, TO_VICT); WAIT_STATE(ch,12); return; } if (!IS_NPC(victim)) { dam = ch->power[DISC_VAMP_DAIM] * 50; victim->hit = (victim->hit - dam); if (dam > 300) dam = 300; ch->hit = (ch->hit + dam); if (ch->hit > ch->max_hit + 1000) ch->hit = ch->max_hit + 1000; act("You drain the lifeforce out of $N.", ch, NULL, victim, TO_CHAR); act("$n drains the lifeforce out of $N.", ch, NULL, victim, TO_NOTVICT); act("You feel $n draining your lifeforce.", ch, NULL, victim, TO_VICT); WAIT_STATE(ch,12); return; } } void do_flamehands( CHAR_DATA *ch, char *argument) { if ( IS_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r",ch); return; } if (ch->power[DISC_VAMP_PROT] < 5) { send_to_char("You need level 5 Protean to use flaming hands.\n\r",ch); return; } if (IS_SET(ch->newbits, NEW_MONKFLAME)) { REMOVE_BIT(ch->newbits, NEW_MONKFLAME); send_to_char("Your hands are no longer engulfed by flames.\n\r",ch); act("$n's hands are no longer engulfed by flames.\n\r",ch,NULL,NULL,TO_ROOM); return; } if (!IS_SET(ch->newbits, NEW_MONKFLAME)) { SET_BIT(ch->newbits, NEW_MONKFLAME); send_to_char("Your hands are engulfed by flames!\n\r",ch); act("$n's hands are engulfed by flames!\n\r",ch,NULL,NULL,TO_ROOM); return; } } void do_cauldron( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; int value; int dam; argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); value = is_number( arg2 ) ? atoi( arg2 ) : -1; if ( IS_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r",ch); return; } if (ch->power[DISC_VAMP_THAU] < 5) { send_to_char("You need at least level 5 Thaumaturgy to use this power.\n\r",ch); return; } if ( arg1[0] == '\0' ) { send_to_char( "Whose blood do you wish to boil?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, arg1 ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if (arg2[0] == '\0' ) { send_to_char( "How much blood do you want to use?\n\r", ch ); return; } if (value > 200) { stc("You can only use 200 blood on this power.\n\r",ch); return; } if (ch->pcdata->condition[COND_THIRST] < value ) { send_to_char("You don't have that much blood!\n\r",ch); return; } if (is_safe(ch,victim) == TRUE) return; if (IS_NPC(victim)) { dam = (value * 2.5); victim->hit = (victim->hit - dam); ch->pcdata->condition[COND_THIRST] = ch->pcdata->condition[COND_THIRST] - value; act("$N screams in agony as $m blood begins to boil.", ch, NULL, victim, TO_CHAR); act("$N screams in agony as $n causes his blood to boil.", ch, NULL, victim, TO_NOTVICT); act("You scream in agony as $n causes your blood to boil.", ch, NULL, victim, TO_VICT); WAIT_STATE(ch,12); return; } if (!IS_NPC(victim)) { dam = value * 1.5; victim->hit = (victim->hit - dam); if (victim->pcdata->condition[COND_THIRST] < value) victim->pcdata->condition[COND_THIRST] = 1; victim->pcdata->condition[COND_THIRST] = victim->pcdata->condition[COND_THIRST] - value; ch->pcdata->condition[COND_THIRST] = ch->pcdata->condition[COND_THIRST] - value; act("$N screams in agony as $m blood begins to boil.", ch, NULL, victim, TO_CHAR); act("$N screams in agony as $n causes his blood to boil.", ch, NULL, victim, TO_NOTVICT); act("You scream in agony as $n causes your blood to boil.", ch, NULL, victim, TO_VICT); WAIT_STATE(ch,12); return; } } void do_shade( CHAR_DATA *ch, char *argument ) { if ( IS_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_VAMPIRE) || (ch->power[DISC_VAMP_OBTE] < 1)) { send_to_char("You need level 1 Obtenebration to use this power.\n\r",ch); return; } if ( IS_SET(ch->act, PLR_WIZINVIS) ) { REMOVE_BIT(ch->act, PLR_WIZINVIS); send_to_char( "You step out from the shadows.\n\r", ch ); act("$n emerges from the shadows.",ch,NULL,NULL,TO_ROOM); } else { send_to_char( "You slowly blend with the shadows.\n\r", ch ); act("$n blends in with the shadows and disappears.",ch,NULL,NULL,TO_ROOM); SET_BIT(ch->act, PLR_WIZINVIS); } return; } void do_vset( CHAR_DATA *ch, char *argument ) { char arg1 [MAX_INPUT_LENGTH]; char arg2 [MAX_INPUT_LENGTH]; char arg3 [MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *victim; int value; sprintf(buf,"%s: Vset %s",ch->name,argument); if (ch->level < NO_WATCH) do_watching(ch,buf); /* smash_tilde( argument ); */ argument = one_argument( argument, arg1 ); argument = one_argument( argument, arg2 ); argument=one_argument(argument,arg3); /* strcpy( arg3, argument ); */ if ( arg1[0] == '\0' || arg2[0] == '\0' || arg3[0] == '\0' ) { send_to_char( "\n\r",ch); send_to_char( "Syntax:vset <victim> <field> <value>\n\r", ch ); send_to_char( "\n\r", ch ); send_to_char( "Field being one of:\n\r", ch ); send_to_char( " Animal Obtenebration Thau \n\r", ch ); send_to_char( " Serpentis Celerity Daim \n\r", ch ); send_to_char( " Potence Viciss Fortitude \n\r", ch ); send_to_char( " Dominate Protean Quietus \n\r", ch ); send_to_char( " Auspex Presence Obfuscate \n\r", ch ); send_to_char( " --------------------------------\n\r", ch ); send_to_char( " Clan Lord Generation Age \n\r", ch ); send_to_char( " --------------------------------\n\r", ch ); return; } if ((victim = get_char_room(ch, arg1)) == NULL) { send_to_char("They arent here.\n\r",ch); return; } value = is_number( arg3 ) ? atoi( arg3 ) : -1; /* * Set something. */ if ( !str_cmp( arg2, "animal" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_ANIM] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "thau" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_THAU] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "Obtenebration" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_OBTE] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "serpentis" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_SERP] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "celerity" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_CELE] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "presence" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_PRES] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "auspex" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_AUSP] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "potence" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_POTE] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "viciss" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_VICI] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "fortitude" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_FORT] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "quietus" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_QUIE] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "dominate" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_DOMI] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "protean" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_PROT] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "daim" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 10 ) { send_to_char( "Range is from 0 to 10.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_VAMPIRE)) victim->power[DISC_VAMP_DAIM] = value; send_to_char("Ok. \n\r",ch); return; } if ( !str_cmp( arg2, "age" ) ) { if ( IS_NPC(victim)) { send_to_char("Not on Mobiles.\n\r",ch); return; } if (!IS_CLASS(ch,CLASS_VAMPIRE)) { send_to_char("Only on Vampires!\n\r",ch); return; } if ( !str_cmp( arg3, "childe" ) ) { victim->pcdata->rank = AGE_CHILDE; send_to_char("Ok.\n\r",ch); return; } else if ( !str_cmp( arg3, "ancilla" ) ) { victim->pcdata->rank = AGE_ANCILLA; send_to_char("Ok.\n\r",ch); return; } else if ( !str_cmp( arg3, "elder" ) ) { victim->pcdata->rank = AGE_ELDER; send_to_char("Ok.\n\r",ch); return; } else if ( !str_cmp( arg3, "methuselah" ) ) { victim->pcdata->rank = AGE_METHUSELAH; send_to_char("Ok.\n\r",ch); return; } else if (!IS_NPC(victim)) { send_to_char( "Age should be one of the following:\n\r Childe, Ancilla, Elder, or Methuselah.\n\r", ch ); return; } } if ( !str_cmp( arg2, "blood" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } if ( value < 0 || value > 1000 ) { send_to_char( "Blood range is 0 to 1000.\n\r", ch ); return; } victim->pcdata->condition[COND_THIRST] = value; send_to_char("Ok.\n\r",ch); return; } if ( !str_cmp( arg2, "clan" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } strcpy(argument,arg3); smash_tilde(arg3); capitalize(arg3); free_string( victim->clan ); victim->clan = str_dup( arg3 ); send_to_char("Ok.\n\r",ch); return; } if ( !str_cmp( arg2, "lord" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r", ch ); return; } smash_tilde(argument); capitalize(arg3); free_string( victim->lord ); victim->lord = str_dup( arg3 ); send_to_char("Ok.\n\r",ch); return; } if ( !str_cmp( arg2, "generation" ) ) { if ( IS_NPC(victim) ) { send_to_char( "Not on NPC's.\n\r",ch ); return; } if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char( "Only on Vampires!\n\r",ch); return; } if ( value < 1 || value > 15 ) { send_to_char("Valid range is 1 - 15 \n\r",ch); return; } victim->generation = value; send_to_char("Ok.\n\r",ch); return; } do_vset( ch, "" ); return; } void do_bonemod( CHAR_DATA *ch, char *argument ) { char arg1 [MAX_INPUT_LENGTH]; smash_tilde( argument ); argument = one_argument( argument, arg1 ); if ( arg1[0] == '\0') { send_to_char( "Syntax: bonemod <modification>\n\r", ch ); send_to_char( "Horns, Wings, Head, Exoskeleton, Tail\n\r",ch); return; } if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r",ch); return; } if (ch->power[DISC_VAMP_VICI] < 3) { send_to_char("You need level 3 Vicissitude to use this power.\n\r",ch); return; } if (IS_NPC(ch)) return; /* * Set something. */ if ( !str_cmp( arg1, "horns" ) ) { if (!IS_VAMPAFF(ch, VAM_HORNS)) { SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_HORNS); send_to_char("You pull a set of horns out of your head.\n\r",ch); act("$n pulls a set of horns from his head!\n\r",ch,NULL,NULL,TO_ROOM); return; } if (IS_VAMPAFF(ch, VAM_HORNS)) { REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_HORNS); send_to_char("You push your horns back into your head.\n\r",ch); act("$n pushes $n's horns back into $n head.\n\r",ch,NULL,NULL,TO_ROOM); return; } } if ( !str_cmp( arg1, "wings" ) ) { if (!IS_VAMPAFF(ch, VAM_WINGS)) { SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_WINGS); send_to_char("You pull a pair of leathery wings from your back.\n\r",ch); act("$n pulls a pair of leathery wings from $s back!\n\r",ch,NULL,NULL,TO_ROOM); return; } if (IS_VAMPAFF(ch, VAM_WINGS)) { REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_WINGS); send_to_char("You push your wings into your back.\n\r",ch); act("$n pushes $s wings into $s back.\n\r",ch,NULL,NULL,TO_ROOM); return; } } if ( !str_cmp( arg1, "exoskeleton" ) ) { if (!IS_VAMPAFF(ch, VAM_EXOSKELETON)) { SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_EXOSKELETON); send_to_char("Your skin is covered by a hard exoskeleton.\n\r",ch); act("$n's skin is covered by a hard exoskeleton!\n\r",ch,NULL,NULL,TO_ROOM); return; } if (IS_VAMPAFF(ch, VAM_EXOSKELETON)) { REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_EXOSKELETON); send_to_char("Your exoskeleton slowly disappears under your skin.\n\r",ch); act("$n's hard exoskeleton disappears under $s skin.\n\r",ch,NULL,NULL,TO_ROOM); return; } } if ( !str_cmp( arg1, "tail" ) ) { if (!IS_VAMPAFF(ch, VAM_TAIL)) { SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_TAIL); send_to_char("Your spine extends out into a long, pointed tail.\n\r",ch); act("$n's spine extends to form a long pointed tail!\n\r",ch,NULL,NULL,TO_ROOM); return; } if (IS_VAMPAFF(ch, VAM_TAIL)) { REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_TAIL); send_to_char("Your tail slowly retracts into your spine.\n\r",ch); act("$n's tail shrinks and vanishes into $s spine.\n\r",ch,NULL,NULL,TO_ROOM); return; } } if ( !str_cmp( arg1, "head" ) ) { if (!IS_VAMPAFF(ch, VAM_HEAD)) { SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_HEAD); send_to_char("Your head transforms into that of a fierce lion.\n\r",ch); act("$n's head transforms into that of a fierce lion!\n\r",ch,NULL,NULL,TO_ROOM); return; } if (IS_VAMPAFF(ch, VAM_HEAD)) { REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_HEAD); send_to_char("Your head slowly resumes it's normal form.\n\r",ch); act("$n's head resumes its normal form.\n\r",ch,NULL,NULL,TO_ROOM); return; } } /* * Generate usage message. */ do_bonemod( ch, "" ); return; }