#include <sys/types.h> #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" void do_darksummon( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *location; CHAR_DATA *victim; argument = one_argument( argument, arg1 ); if (!IS_SPHERE(ch, SPHERE_NECROMANCER)) { send_to_char("#0Darksummon is a Necromancer power.#n\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_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_creepingdoom(CHAR_DATA * ch, char *argument) { CHAR_DATA *ich; CHAR_DATA *dummychar = ch; int totaldam = ch->hit; int dam; char buf1[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; char buf3[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_NECROMANCER)) { send_to_char("This requires Necromancer Sphere.\n\r", ch); return; } if (ch->mana < 50) { send_to_char ("You don't have the power to summon the insects.\n\r", ch); return; } send_to_char("You send out a call for the insects in the area.\n\r", ch); for (ich = ch->in_room->people; dummychar != NULL; ich = dummychar) { if (totaldam <= 0) break; dummychar = ich->next_in_room; if (!IS_NPC(ich)) continue; if (is_safe(ch, ich)) continue; dam = UMIN(totaldam, ich->hit + 10); sprintf(buf1, "$N screams in horror as insects from all over swarm over $M and starts eating [#C%d#n]", dam); sprintf(buf2, "Your insects bite $N [#C%d#n]", dam); sprintf(buf3, "$n laughs as insects swarm from nowhere and attack you [#C%d#n]", dam); act(buf1, ch, NULL, ich, TO_NOTVICT); act(buf2, ch, NULL, ich, TO_CHAR); act(buf3, ch, NULL, ich, TO_VICT); hurt_person(ch, ich, dam); totaldam -= dam; if (ich->position > POS_STUNNED && ich != ch) { if (ch->fighting == NULL) set_fighting(ch, ich); if (ich->fighting == NULL) set_fighting(ich, ch); } } ch->mana -= 50; // ch->mana / 2; WAIT_STATE(ch, 5); return; } void do_powerword(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf1[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; char buf3[MAX_STRING_LENGTH]; AFFECT_DATA af; CHAR_DATA *ich; CHAR_DATA *ich_next; CHAR_DATA *victim; argument = one_argument(argument, arg); argument = one_argument(argument, arg2); if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_NECROMANCER)) { send_to_char("#0This requires the Necromancer sphere.#n\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Valid powerwords are kill,stun,blind and flames.\n\r", ch); return; } if (!str_cmp(arg, "stun")) { if (!(arg2[0] == '\0') || ch->fighting != NULL) { if (arg2[0] == '\0') victim = ch->fighting; else if ((victim = get_char_room(ch, arg2)) == NULL) { send_to_char("They are not here.\n\r", ch); return; } if (ch->pcdata->powers[POWER_TICK] > 0) { send_to_char ("You cannot cast another powerword yet.\n\r", ch); return; } if (is_safe(ch, victim)) return; act("$n points his finger at $N and says '#rFREEZE!!!#n'.", ch, NULL, victim, TO_NOTVICT); act("You point your finger at $N and say '#rFREEZE!!!#n'.", ch, NULL, victim, TO_CHAR); act("$n points his finger at $N and says '#rFREEZE!!!#n'.", ch, NULL, victim, TO_VICT); WAIT_STATE(victim, 24); WAIT_STATE(ch, 8); ch->pcdata->powers[POWER_TICK] = 4; return; } else { send_to_char("Stun whom?\n\r", ch); return; } } else if (!str_cmp(arg, "blind")) { if (!(arg2[0] == '\0') || ch->fighting != NULL) { if (arg2[0] == '\0') victim = ch->fighting; else if ((victim = get_char_room(ch, arg2)) == NULL) { send_to_char("They are not here.\n\r", ch); return; } if (ch->pcdata->powers[POWER_TICK] > 0) { send_to_char ("You cannot cast another powerword yet.\n\r", ch); return; } if (is_safe(ch, victim)) return; act("$n touches $N's forehead and screams '#rMIDNIGHT!!!#n'.", ch, NULL, victim, TO_NOTVICT); act("You touch $N's forehead and screams '#rMIDNIGHT!!!#n'.", ch, NULL, victim, TO_CHAR); act("$n touches your forehead and screams '#rMIDNIGHT!!!#n'.", ch, NULL, victim, TO_VICT); if (IS_SET(victim->act, PLR_HOLYLIGHT)) REMOVE_BIT(victim->act, PLR_HOLYLIGHT); if (IS_SET(victim->affected_by, AFF_DETECT_HIDDEN)) REMOVE_BIT(victim->affected_by, AFF_DETECT_HIDDEN); if (IS_SET(victim->affected_by, AFF_DETECT_INVIS)) REMOVE_BIT(victim->affected_by, AFF_DETECT_INVIS); af.type = skill_lookup("blindness"); af.location = APPLY_HITROLL; af.modifier = -4; af.duration = 60; af.bitvector = AFF_BLIND; affect_to_char(victim, &af); WAIT_STATE(ch, 12); ch->pcdata->powers[POWER_TICK] = 3; return; } else { send_to_char("Blind whom?\n\r", ch); return; } } else if (!str_cmp(arg, "kill")) { if (!(arg2[0] == '\0')) { if ((victim = get_char_room(ch, arg2)) == NULL) { send_to_char("They are not here.\n\r", ch); return; } if (ch->pcdata->powers[POWER_TICK] > 0) { send_to_char ("You cannot cast another powerword yet.\n\r", ch); return; } if (ch == victim) { send_to_char("Not yourself, silly!\n\r", ch); return; } if (is_safe(ch, victim)) return; act("$n looks at $N and utters '#rDIE!!!#n'.", ch, NULL, victim, TO_NOTVICT); act("You look at $N and say '#rDIE!!!#n'.", ch, NULL, victim, TO_CHAR); act("$n looks at you and utters '#rDIE!!!#n'.", ch, NULL, victim, TO_VICT); if (victim->position > POS_STUNNED) { if (ch->fighting == NULL) set_fighting(ch, victim); if (victim->fighting == NULL) set_fighting(victim, ch); } if (!IS_NPC(victim) || victim->level > 100) { int dam = victim->hit * .4; if (IS_NPC(victim) && dam > 20000) dam = 50000; if (!IS_NPC(victim) && dam > 8000) dam = 8000; hurt_person(ch, victim, dam); sprintf(buf1, "$n's powerword strikes $N [#C%d#n]", dam); sprintf(buf2, "Your powerword strikes $N [#C%d#n]", dam); sprintf(buf3, "$n's powerword strikes you [#C%d#n]", dam); act(buf1, ch, NULL, victim, TO_NOTVICT); act(buf2, ch, NULL, victim, TO_CHAR); act(buf3, ch, NULL, victim, TO_VICT); ch->pcdata->powers[POWER_TICK] = 5; WAIT_STATE(ch, 8); return; } ch->level = 12; do_slay(ch, arg2); ch->level = 3; ch->pcdata->powers[POWER_TICK] = 2; return; } else { send_to_char("Kill whom?\n\r", ch); return; } } else if (!str_cmp(arg, "flames")) { if (ch->pcdata->powers[POWER_TICK] > 2) { send_to_char ("You cannot cast another powerword yet.\n\r", ch); return; } stc("#gYou raise your hands to encompass the room and scream, #n'#rBURN!!!#n'\n\r", ch); ich_next = ch->in_room->people; ich = ich_next; while (ich_next != NULL) { ich_next = ich->next_in_room; if (ich != ch) { if (is_safe(ch, ich)) break; one_hit(ch, ich, gsn_fireball, 1); one_hit(ch, ich, gsn_fireball, 1); one_hit(ch, ich, gsn_fireball, 1); one_hit(ch, ich, gsn_fireball, 1); } ich = ich_next; } WAIT_STATE(ch, 12); ch->pcdata->powers[POWER_TICK] += 1; return; } else { send_to_char("You have not learned that powerword yet.\n\r", ch); return; } } void do_fleshportal (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *location; CHAR_DATA *victim; one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_SPHERE(ch, SPHERE_NECROMANCER)) { send_to_char("#0This requires the Necromancer sphere.#n\n\r", ch); return; } if ((victim = get_char_world (ch, arg)) == NULL) { send_to_char ("Who do you wish to fleshportal to?\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_IMMUNE(victim, IMM_TRAVEL ) && !ragnarok && victim->fight_timer == 0) { send_to_char("He doesnt want you near him!\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; } location = victim->in_room; if (ch->move < 500) { send_to_char ("You don't have the strength.\n\r", ch); return; } act ("You enter a portal made from flesh.", ch, NULL, NULL, TO_CHAR); act ("$n grows a portal of flesh from their body and enters it.", ch, NULL, NULL, TO_ROOM); char_from_room (ch); char_to_room (ch, location); do_look (ch, "auto"); if (victim->fight_timer > 0) WAIT_STATE (ch, 8); act ("You exit your fleshportal by $N.", ch, NULL, victim, TO_CHAR); act ("$n appears from a portal of flesh.", ch, NULL, NULL, TO_ROOM); return; }