/* Additions to the mud by Marcus ( Marcus@z2designs.com ) AIM: Stealthbig */ #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_wraitharmor( CHAR_DATA *ch, char *argument ) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; int vnum = 0; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r", ch ); return; } if (arg[0] == '\0') { send_to_char("Please specify which piece of drider armor you wish to make: sword ringcollar armor helmet leggings boots gloves sleeves cloak belt bracer mask.\n\r",ch); return; } if (!str_cmp(arg,"sword" )) vnum = 94039; else if (!str_cmp(arg,"ring" )) vnum = 94027; else if (!str_cmp(arg,"collar" )) vnum = 94029; else if (!str_cmp(arg,"armor" )) vnum = 94030; else if (!str_cmp(arg,"helmet" )) vnum = 94031; else if (!str_cmp(arg,"leggings" )) vnum = 94037; else if (!str_cmp(arg,"boots" )) vnum = 94036; else if (!str_cmp(arg,"gloves" )) vnum = 94034; else if (!str_cmp(arg,"sleeves" )) vnum = 94035; else if (!str_cmp(arg,"cloak" )) vnum = 94038; else if (!str_cmp(arg,"belt" )) vnum = 94032; else if (!str_cmp(arg,"bracer" )) vnum = 94028; else if (!str_cmp(arg,"mask" )) vnum = 94033; else { do_wraitharmor(ch,""); return; } if ( ch->practice < 150) { send_to_char("It costs 150 points of primal to create a piece of human armour.\n\r",ch); return; } if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform Xrakisis.\n\r",ch); return; } ch->practice -= 150; obj = create_object(pObjIndex, 50); obj->questowner = str_dup(ch->pcdata->switchname); obj_to_char(obj, ch); act("$p appears in your hands in a blast of flames.",ch,obj,NULL,TO_CHAR); act("$p appears in $n's hands in a blast of flames.",ch,obj,NULL,TO_ROOM); return; } void do_darktouch (CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } else if (arg[0] == '\0') { send_to_char("Please choose your victim.\n\r", ch ); return; } else if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch ); return; } if (is_safe(ch, victim)) return; act("$n sets $m half transparent hands on $N's body, forcing $M to shiver violently!#n'.",ch,NULL,victim,TO_NOTVICT); act("You set your half transparent hands on $N's body, forcing $M to shiver violently!#n'.",ch,NULL,victim,TO_CHAR); act("$n sets $m half transparent hands on your body, causing to shiver violently!#n'.",ch,NULL,victim,TO_VICT); // multi_hit(ch, victim, gsn_grimtouch); one_hit(ch, victim, gsn_grimtouch, 1); one_hit(ch, victim, gsn_grimtouch, 1); one_hit(ch, victim, gsn_grimtouch, 1); one_hit(ch, victim, gsn_grimtouch, 1); WAIT_STATE(victim, 5); WAIT_STATE(ch, 20); return; } void do_dimensionwalk ( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } if (ch->move < 600) { stc("You do not have enough vitality to do that!\n\r",ch); return; } if (arg[0] == '\0') { send_to_char( "Go to whoms dimension?\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 ) { stc ( "Not to yourself.\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 room is not connected to the astral plane.\n\r",ch); return; } if (!IS_NPC(victim) && !IS_IMMUNE(victim,IMM_SUMMON) ) { send_to_char("They don't want you near them!\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 (victim->in_room->vnum == ch->in_room->vnum) { send_to_char("But you're already there!\n\r",ch); return; } char_from_room(ch); char_to_room(ch,victim->in_room); if (IS_NPC(victim)) { sprintf(buf,"You cross dimensions to meet %s!\n\r",victim->short_descr); send_to_char(buf, ch); } if (!IS_NPC(victim)) { sprintf(buf,"You cross dimensions to meet %s!\n\r",victim->name); send_to_char(buf, ch); } act("$n slowly becomes visible before you.\n\r",ch,NULL,NULL,TO_ROOM); do_look(ch, "auto"); ch->move -= 600; return; } void do_wraithaura ( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->powers[WRAITH_CHAOS] < 8) { send_to_char("You are not chaotic enough.\n\r",ch); return; } if (IS_SET(ch->pcdata->powers[WRAITH_POWERS], WRAITH_AURA)) { REMOVE_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_AURA); act("Your dimensional aura fades.", ch, NULL, NULL, TO_CHAR); act("$n's loses his aura.", ch, NULL, NULL, TO_ROOM); return; } SET_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_AURA); act("Your dimensional aura comes into place.", ch, NULL, NULL, TO_CHAR); act("#0$n #RROARS#n #0as hundreds of souls #7s#0w#7i#0r#7l#n#0 around $s body.#n", ch, NULL, NULL, TO_ROOM); return; } /* Learning */ void do_acquire ( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (arg[0] == '\0') { sprintf(buf, "Current powers : #RHate [#7%d#R] Chaos [#7%d#R] Wrath [#7%d#R] Destruction [#7%d#R]\n\r", ch->pcdata->powers[WRAITH_HATE], ch->pcdata->powers[WRAITH_CHAOS], ch->pcdata->powers[WRAITH_WRATH], ch->pcdata->powers[WRAITH_DESTRUCTION]); send_to_char(buf,ch); send_to_char("What dark power do you wish to acquire? [hate, chaos, wrath, destruction]\n\r",ch); return; } if (!str_cmp(arg,"hate")) { if (ch->pcdata->powers[WRAITH_HATE] > 9) { send_to_char("You can't do that.\n\r",ch); return; } if (ch->exp < (ch->pcdata->powers[WRAITH_HATE]+1)*10000000 && ch->expmult < 1) { send_to_char("You don't have enough exp.\n\r",ch); return; } ch->pcdata->powers[WRAITH_HATE]++; gain_exp(ch, -1*ch->pcdata->powers[WRAITH_HATE]*10000000); send_to_char("Your hate of others increases.\n\r",ch); return; } if (!str_cmp(arg,"wrath")) { if (ch->pcdata->powers[WRAITH_WRATH] > 9) { send_to_char("You can't do that.\n\r",ch); return; } if (ch->exp < (ch->pcdata->powers[WRAITH_WRATH]+1)*10000000 && ch->expmult < 1) { send_to_char("You don't have enough exp.\n\r",ch); return; } ch->pcdata->powers[WRAITH_WRATH]++; gain_exp(ch, -1* ch->pcdata->powers[WRAITH_WRATH]*10000000); send_to_char("Your dark wrath increases.\n\r",ch); return; } if (!str_cmp(arg,"chaos")) { if (ch->pcdata->powers[WRAITH_CHAOS] > 9) { send_to_char("You can't do that.\n\r",ch); return; } if (ch->exp < (ch->pcdata->powers[WRAITH_CHAOS]+1)*10000000 && ch->expmult < 1) { send_to_char("You don't have enough exp.\n\r",ch); return; } ch->pcdata->powers[WRAITH_CHAOS]++; gain_exp(ch, -1* ch->pcdata->powers[WRAITH_CHAOS]*10000000); send_to_char("You become more chaotic, your every move should be cause for fear.\n\r",ch); return; } if (!str_cmp(arg,"destruction")) { if (ch->pcdata->powers[WRAITH_DESTRUCTION] > 9) { send_to_char("You can't do that.\n\r",ch); return; } if (ch->exp < (ch->pcdata->powers[WRAITH_DESTRUCTION]+1)*10000000 && ch->expmult < 1) { send_to_char("You don't have enough exp.\n\r",ch); return; } ch->pcdata->powers[WRAITH_DESTRUCTION]++; gain_exp(ch, -1* ch->pcdata->powers[WRAITH_DESTRUCTION]*10000000); send_to_char("Your destructive capabilities increase.\n\r",ch); return; } } void do_powerhate( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->powers[WRAITH_HATE] < 7) { send_to_char("You dont have enough hate to do this.\n\r",ch); return; } if (IS_SET(ch->pcdata->powers[WRAITH_POWERS], WRAITH_POWERHATE)) { REMOVE_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_POWERHATE); act( "$n loses his hate",ch,NULL,NULL,TO_ROOM); send_to_char("You lower your power, and hate others less.\n\r",ch); ch->damroll -=1200; ch->hitroll -=1200; return; } if (ch->move < 2000 || ch->mana < 2000) { send_to_char("You need 2000 mana and 2000 move to do this.\n\r",ch); return; } SET_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_POWERHATE); act( "$n transfers his hate into combat supremacy.",ch,NULL,NULL,TO_ROOM); send_to_char("You transfer your hate of others into combat supremacy\n\r",ch); ch->move -= 2000; ch->mana -= 2000; // HEY MAYBE WHEN YOU TRY TO LOWER WRAITHS WITHOUT ME KNOWING YOU SHOULD LOWER THEM RIGHT // ch->damroll +=1200; ch->hitroll +=1200; return; } void do_perfectsight( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->powers[WRAITH_WRATH] < 7) { send_to_char("You dont have enough wrath to penerate the realms of the living.\n\r",ch); return; } if (IS_SET(ch->act, PLR_HOLYLIGHT)) { REMOVE_BIT(ch->act, PLR_HOLYLIGHT); send_to_char("Your vision is back to normal.\n\r", ch); } else { SET_BIT(ch->act, PLR_HOLYLIGHT); send_to_char( "You eyes now penetrate the dimension of the mortals.\n\r", ch ); } return; } void do_darksummon( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *location; // OBJ_DATA *obj; CHAR_DATA *victim; // char arg [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg1 ); if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0' ) { send_to_char( "Darksummon who?\n\r", ch ); return; } location = ch->in_room; if ( ( victim = get_char_world( ch, arg1 ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( victim->fighting != NULL ) { send_to_char( "They are fighting right now.\n\r", ch ); return; } if (IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL) || IS_SET(victim->in_room->room_flags, ROOM_ASTRAL) || IS_SET(victim->in_room->room_flags, ROOM_SAFE)) { send_to_char("You cant seem to focus on your victim.\n\r",ch); return; } if (IS_SET (victim->in_room->room_flags, ROOM_CHALLENGE)) { send_to_char("You crazy bitch, you cant do this in the challenge arena.\n\r",ch); return; } if (IS_SET (victim->in_room->room_flags, ROOM_ARENA)) { send_to_char("You crazy bitch, you cant do this in the arena.\n\r",ch); return; } if (ch->practice < 1000) { send_to_char("You need 1000 primal to use this\n\r",ch); return; } if (ch->in_room->vnum >= 79000 && ch->in_room->vnum <= 80000) { send_to_char("You cannot do this from inside your clan recall\n\r",ch); return; } if (victim->fight_timer == 0) { send_to_char("You can only summon someone who is freshly done a battle.\n\r",ch); return; } ch->practice -= 1000; act( "$n slips away into a dimensional rift.", victim, NULL, NULL, TO_ROOM ); char_from_room( victim ); char_to_room( victim, location ); act( "$n is sucked through the dimensional rift you created.", victim, NULL, NULL, TO_ROOM ); if ( ch != victim ) act( "$n has sucked you into his dimensional rift.", ch, NULL, victim, TO_VICT ); } void do_dimedodge( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->powers[WRAITH_DESTRUCTION] < 7) { send_to_char("You dont have the destructive capabilities to do this.\n\r",ch); return; } if (IS_SET(ch->pcdata->powers[WRAITH_POWERS], WRAITH_DIMEDODGE)) { REMOVE_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_DIMEDODGE); act( "$n loses his superior dodging",ch,NULL,NULL,TO_ROOM); send_to_char("Your dodging goes back to normal.\n\r",ch); return; } SET_BIT(ch->pcdata->powers[WRAITH_POWERS], WRAITH_DIMEDODGE); act( "$n gains superior dodging..",ch,NULL,NULL,TO_ROOM); send_to_char("You now can jump dimensions to dodge attacks.\n\r",ch); return; } void do_darkbanish( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char arg1[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument( argument, arg1 ); if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } if ( arg1[0] == '\0' ) { send_to_char( "Darkbanish who?\n\r", ch ); return; } if ( victim == ch ) { send_to_char("Not to yourself.\n\r",ch); return; } if ( ( victim = get_char_world( ch, arg1 ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if (IS_SET (ch->in_room->room_flags, ROOM_CHALLENGE)) { send_to_char("You crazy bitch, you cant do this in the challenge arena.\n\r",ch); return; } if (IS_SET (ch->in_room->room_flags, ROOM_ARENA)) { send_to_char("You crazy bitch, you cant do this in the arena.\n\r",ch); return; } if ( victim->position > 1 ) { send_to_char( "You can only do this to mortally wounded players.\n\r", ch ); return; } if (is_safe(ch,victim)) return; act( "$n is banished to the dark dimension of the wraith", victim, NULL, NULL, TO_ROOM ); char_from_room( victim ); char_to_room(victim,get_room_index(77301)); act( "$n is banished to your hellish dimension", victim, NULL, NULL, TO_ROOM ); if ( ch != victim ) act( "$n has banished you to his hellish dimension.", ch, NULL, victim, TO_VICT ); sprintf(buf,"#7%s#0 has been banished to the wraiths realm by #7%s.#n\n\r",victim->pcdata->switchname,ch->pcdata->switchname); do_info(ch,buf); victim->hit += number_range(1000,1500); } void do_finalrage (CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } if (ch->hit > ch->max_hit / 3) { send_to_char( "You have too much health.\n\r", ch ); return; } else if (arg[0] == '\0') { send_to_char("Please choose your victim.\n\r", ch ); return; } else if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch ); return; } do_say(ch, "I have died once already, I will not die again!"); multi_hit(ch, victim, gsn_grimtouch); multi_hit(ch, victim, gsn_dblast); multi_hit(ch, victim, gsn_grimtouch); multi_hit(ch, victim, gsn_dblast); WAIT_STATE(ch, 25); return; } void do_impale (CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (!IS_CLASS(ch, CLASS_WRAITH) && !IS_CLASS(ch, CLASS_VAMPIRIC_MIST) && !IS_CLASS(ch, CLASS_SHADOW_FIEND) && !IS_CLASS(ch, CLASS_SHADOWBORN)) { send_to_char("Huh?\n\r",ch); return; } else if (arg[0] == '\0') { send_to_char("Please choose your victim.\n\r", ch ); return; } else if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They are not here.\n\r", ch ); return; } if(((obj = get_eq_char( ch, WEAR_WIELD ) ) == NULL) || obj->item_type != ITEM_WEAPON) { if(((obj = get_eq_char( ch, WEAR_HOLD ) ) == NULL) || obj->item_type != ITEM_WEAPON) { send_to_char("You dont have a weapon to throw.\n\r", ch ); return; } } obj_from_char( obj ); obj_to_char(obj, victim); do_say(ch, "Fool, perish at my feet."); act( "#0$n has thrown his weapon, impaling his victim.#n",ch,NULL,NULL,TO_ROOM); SET_BIT(victim->extra, PINNEDWALL); send_to_char("You have impaled your victim.\n\r",ch); send_to_char("Has thrown his weapon and impaled you, flex to remove it.\n\r", victim ); WAIT_STATE(victim, 6); WAIT_STATE(ch, 12); }