#include <sys/types.h> #include <stdio.h> #include <string.h> #include <time.h> #include "merc.h" void do_enrage(CHAR_DATA *ch, char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT4)) { send_to_char("#0You need combat four for this.#n\n\r", ch); return; } if ((victim = get_char_room(ch, arg)) ==NULL) { send_to_char("They are not here.\n\r", ch); return; } if (IS_NPC(victim) || victim->level < 3) { send_to_char("Not on them\n\r",ch); return; } do_say(ch, "Kara, Kara, Xenos!"); if (number_percent() > 40) do_berserk2(victim,""); else send_to_char("#RSomeone is trying to control your actions!!!#n\n\r",victim); WAIT_STATE(ch,18); 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_SPHERE(ch, SPHERE_COMBAT3)) { send_to_char("#0You need combat three for this.#n\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_fightdance(CHAR_DATA *ch, char *argument) { if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT1)) { send_to_char("#0You need combat one for this.#n\n\r", ch); return; } if (IS_SET(ch->newbits, NEW_FIGHTDANCE)) { send_to_char("You will no longer dance The Dance of Lloth.\n\r", ch ); REMOVE_BIT(ch->newbits, NEW_FIGHTDANCE); } else { send_to_char("You will start dancing The Dance of Lloth while fighting.\n\r", ch ); SET_BIT(ch->newbits, NEW_FIGHTDANCE); } return; } void do_unnerve(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; if (!IS_SPHERE(ch, SPHERE_COMBAT3)) { send_to_char("#0You need combat three for this.#n\n\r", ch); return; } if (argument[0] == '\0') { stc("Who do you wish to unnerve?\n\r", ch); return; } if ( ( victim = get_char_room(ch, argument) ) == NULL) { stc("They aren't here.\n\r", ch); return; } WAIT_STATE(ch, 7); do_say(ch,"#1Xeus Dominus Mortai!#n"); do_stance(victim, ""); } void do_spikes(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int cost = 0; int spikes = 0; int urin = 0; int urin_counter = 0; int dam; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT3)) { send_to_char("#0You need combat three for this.#n\n\r", ch); return; } if (arg1[0] == '\0' && arg2[0] == '\0') { stc("#R+#Y------#G------#g---#G------#Y------#R+#n\n\r", ch); printf(buf, " #gY#Gou have #Y%d #Gspikes!#n\n\r", ch->pcdata->stats[DRACONIAN_SPIKES]); stc(buf, ch); stc("#R+#Y------#G------#g---#G------#Y------#R+#n\n\r", ch); return; } if (!str_cmp(arg1, "release")) { if (ch->fighting == NULL) { stc("Not unless fighting!\n\r", ch); return; } if (ch->pcdata->stats[DRACONIAN_SPIKES] < 1) { stc("You have no spikes to shoot!\n\r", ch); return; } victim = ch->fighting; dam = number_range(ch->pcdata->stats[DRACONIAN_SPIKES] * 20, ch->pcdata->stats[DRACONIAN_SPIKES] * 40); printf(buf, "#GYour spikes shoot from your body, #Rimpaling #y$N! #0[#R%d#0]#n", dam); act(buf, ch, NULL, victim, TO_CHAR); printf(buf, "#GA plethora of sharp spikes shoot from #y$n's #Gbody, #Rimpaling #Gyou! #0[#R%d#0]#n", dam); act(buf, ch, NULL, victim, TO_VICT); act("#g$n #Gshoots a plethora of sharp spikes from $s body at #y$N, #Rimpaling #Gthem!#n", ch, NULL, victim, TO_NOTVICT); hurt_person(ch, victim, dam); ch->pcdata->stats[DRACONIAN_SPIKES] = 0; return; } else if (!str_cmp(arg1, "grow")) { if (arg2[0] == '\0') { stc("#gSyntax: #Gspikes grow <amount>#n\n\r", ch); return; } if (ch->position <= POS_FIGHTING) { stc("You must be idle and standing to do this!\n\r", ch); return; } if (ch->fight_timer > 0) { stc("Not with a fight timer!\n\r", ch); return; } if (arg2[0] == '\0') { stc("#GHow many spikes do you wish to grow?#n\n\r", ch); return; } if (!is_number(arg2)) { stc("Please enter a numeric value between 1 and 200!\n\r", ch); return; } if (ch->pcdata->stats[DRACONIAN_SPIKES] >= 200) { stc("You cannot grow any more spikes!\n\r", ch); return; } if (is_number(arg2)) { spikes = atoi(arg2); cost = spikes * 10000; if (spikes > 200 || spikes < 1) { stc("Please enter a numeric value between 1 and 200!\n\r", ch); return; } for (urin = 0; urin < spikes; urin++) { if (ch->exp >= 10000 && ch->pcdata->stats[DRACONIAN_SPIKES] < 200) { ch->exp -= 10000; ch->pcdata->stats[DRACONIAN_SPIKES]++; urin_counter += 1; } } if (urin_counter == 0) { send_to_char ("You need more exp to gain any more spikes.\n\r", ch); } if (urin_counter == 1) { send_to_char("#GYou gain #y1 #Gspike.#n\n\r", ch); } if (urin_counter > 1) { printf(buf, "#GYou gain #y%d #Gspikes.#n\n\r", urin_counter); send_to_char(buf, ch); } return; } } else { stc("Syntax: spikes grow <amount>\n\r", ch); stc(" spikes release\n\r", ch); stc(" spikes\n\r", ch); return; } } void do_shatter (CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; int damage; int damage2; int oldl; CHAR_DATA *victim; if (IS_NPC (ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT4)) { send_to_char("#0You need combat four for this.#n\n\r", ch); return; } if (ch->fighting == NULL || IS_NPC ((victim = ch->fighting))) { stc ("Only against players in combat!\n\r", ch); return; } if (number_range (1,4) == 1) { stc ("You failed!\n\r", ch); WAIT_STATE (ch, 12); return; } damage = number_range (1000, 5000); ch->hit -= damage; damage2 = damage *2; victim->hit -= damage2; sprintf (buf, "You burst into a pile of bones as your enemy attacks to avoid them! [#R%d#n]\n\r", damage); stc (buf, ch); sprintf (buf, "%s bursts into a pile of bones from your attack! [#7%d#n]\n\r", ch->pcdata->switchname, damage2); stc (buf, victim); hurt_person (ch, ch, damage); hurt_person (ch, victim, damage); oldl = ch->level; ch->level = 12; do_peace (ch, ""); ch->level = oldl; WAIT_STATE (ch, 10); WAIT_STATE (victim, 20); } void do_desanc (CHAR_DATA *ch, char *argument) { char arg[MAX_STRING_LENGTH]; CHAR_DATA *victim; int sn, random, level; argument=one_argument(argument,arg); level = ch->spl[RED_MAGIC]/4; if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT4)) { send_to_char("#0You need combat four for this.#n\n\r", ch); return; } if (ch->mana < 1500) { send_to_char("You need more mana.\n\r",ch); return; } if (arg[0] == '\0' && ch->fighting != NULL) victim = ch->fighting; 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; random = number_range(1,3); if (random == 1) sn = skill_lookup("desanct"); else if (random >= 2) { send_to_char("Failed.\n\r",ch); return; } // do_force(ch,"all save"); else sn = 0; if (sn > 0) (*skill_table[sn].spell_fun) (sn,level,ch,victim); ch->mana -= 1500; WAIT_STATE(ch,8); return; } void do_shouldercharge( CHAR_DATA *ch, char *argument ) { char arg[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; CHAR_DATA *victim; OBJ_DATA *obj; argument = one_argument( argument, arg ); argument = one_argument( argument, arg2 ); if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT2)) { send_to_char("You need combat two for this.\n\r", ch); return; } 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 (is_safe(ch, victim)) return; act("You take a step back, then launch yourself straight at $N...",ch,NULL,victim,TO_CHAR); act("$n takes a step back, then launches $mself straight at you...",ch,NULL,victim,TO_VICT); act("$n takes a step back, then launches $mself straight at $N...",ch,NULL,victim,TO_NOTVICT); if ( number_range(1,4) == 4 ) { act("$N sidesteps, leaving you wide open!",ch,NULL,victim,TO_CHAR); act("You sidestep, leaving $n wide open!",ch,NULL,victim,TO_VICT); act("$N sidesteps, leaving $n wide open!",ch,NULL,victim,TO_NOTVICT); if ( number_range(1,2) == 1 ) { act("$N takes the opportunity to strike back!",ch,NULL,victim,TO_CHAR); act("You take the opportunity to strike back!",ch,NULL,victim,TO_VICT); act("$N takes the opportunity to strike back!",ch,NULL,victim,TO_NOTVICT); multi_hit(victim,ch,TYPE_UNDEFINED); } else { act("You recover yourself before $N can strike back.",ch,NULL,victim,TO_CHAR); act("$n recovers $mself before you can strike back.",ch,NULL,victim,TO_VICT); act("$n recovers $mself before $N can strike back.",ch,NULL,victim,TO_NOTVICT); } return; } if ( number_range(1,4) == 4 ) { if ( IS_LEG_L(victim,LOST_LEG) && IS_LEG_R(victim,LOST_LEG) ) { act("Your body hits nothing but air.",ch,NULL,victim,TO_CHAR); act("$n hits nothing but air.",ch,NULL,victim,TO_ROOM); return; } act("You collide with $N, tearing away $S legs.",ch,NULL,victim,TO_CHAR); act("$n collides with you, tearing away your legs.",ch,NULL,victim,TO_VICT); act("$n collides with $N, tearing away $S legs.",ch,NULL,victim,TO_NOTVICT); if ( !IS_LEG_L(victim,LOST_LEG) ) { SET_BIT(victim->loc_hp[4], LOST_LEG); if ( IS_BLEEDING(victim, BLEEDING_LEG_L) ) REMOVE_BIT(victim->loc_hp[6], BLEEDING_LEG_L); if ( IS_BLEEDING(victim, BLEEDING_FOOT_L) ) REMOVE_BIT(victim->loc_hp[6], BLEEDING_FOOT_L); } if ( !IS_LEG_R(victim,LOST_LEG) ) { SET_BIT(victim->loc_hp[5], LOST_LEG); if ( IS_BLEEDING(victim, BLEEDING_LEG_R) ) REMOVE_BIT(victim->loc_hp[6], BLEEDING_LEG_R); if ( IS_BLEEDING(victim, BLEEDING_FOOT_R) ) REMOVE_BIT(victim->loc_hp[6], BLEEDING_FOOT_R); } if ( (obj = get_eq_char(victim,WEAR_LEGS)) != NULL ) take_item(victim,obj); if ( (obj = get_eq_char(victim,WEAR_FEET)) != NULL ) take_item(victim,obj); } else { send_to_char("Bash whom?\n\r",ch); return; } WAIT_STATE(victim, 24); WAIT_STATE(ch, 18); return; } void do_bomuzite(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg1[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg1); if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT2)) { send_to_char("You need combat two for this.\n\r", ch); return; } if (ch->in_room != NULL) { if (IS_SET(ch->in_room->room_flags, ROOM_SAFE)) { send_to_char ("You cannot use this power in a safe room.\n\r", ch); return; } } if (arg1[0] == '\0') { send_to_char("Bomb who?\n\r", ch); return; } if ((victim = get_char_room(ch, arg1)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (ch == victim) { send_to_char("Not on yourself!\n\r", ch); return; } if (ch->position == POS_FIGHTING) { send_to_char("Not while fighting!\n\r", ch); return; } if (ch->move < 500) { send_to_char("You don't have enough movement points.\n\r", ch); return; } if (victim->in_room == ch->in_room) { act("You toss your bomb onto the floor and put $N to sleep.", ch, NULL, victim, TO_CHAR); act("$n tosses a bomb onto the floor. You feel sleepy.", ch, NULL, victim, TO_VICT); victim->position = POS_SLEEPING; ch->move -= 500; WAIT_STATE(ch, 1); return; } return; } void do_kakusu(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT1)) { send_to_char("You need combat one for superior hideing.\n\r", ch); return; } if (ch->move < 500) { send_to_char ("You don't have 500 move to activate your power.\n\r", ch); return; } if (ch->fight_timer > 0) { send_to_char("Not until your fight timer expires.\n\r", ch); return; } if (IS_SET(ch->act, AFF_HIDE)) { REMOVE_BIT(ch->act, AFF_HIDE); act("$n appears from the shadows.", ch, NULL, NULL, TO_ROOM); send_to_char("You appear from the shadows.\n\r", ch); } else { act("$n disappears into the shadows.", ch, NULL, NULL, TO_ROOM); send_to_char("You disappear into the shadows.\n\r", ch); ch->move -= 500; SET_BIT(ch->act, AFF_HIDE); } return; } void do_ironclaw(CHAR_DATA *ch, char *argument) { if (IS_NPC(ch)) return; if (!IS_SPHERE(ch, SPHERE_COMBAT1)) { stc("You need the combat 1 sphere for this.\n\r", ch); return; } if (IS_VAMPAFF(ch, VAM_CLAWS)) { send_to_char("You remove the IronClaws from your wrists.\n\r", ch ); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS); return; } else { send_to_char("You attach IronClaws to your wrists.\n\r", ch ); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS); return; } } void do_leech(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim = NULL; char buf[MAX_STRING_LENGTH]; if (!IS_SPHERE(ch, SPHERE_COMBAT1)) { stc("You need the combat 1 sphere for this.\n\r", ch); return; } if (argument[0] == '\0') { stc("Who's life do you wish to leech off of?\n\r", ch); return; } if ((victim = get_char_room(ch, argument)) == NULL) { stc("They aren't here.\n\r", ch); return; } if (is_safe(ch, victim)) return; WAIT_STATE(ch, 10); act("$n stares intently at $N.", ch, NULL, victim, TO_NOTVICT); act("You stare intently at $N.", ch, NULL, victim, TO_CHAR); act("$n stares intently at you.", ch, NULL, victim, TO_VICT); if (victim->hit >= 1000) { sh_int power; sh_int dam; power = 20; dam = dice(power, power * 2); if (dam > 300) dam = 300 + (dam / 10); hurt_person(ch, victim, dam); ch->hit += dam; if (ch->hit >= ch->max_hit + 500) ch->hit = ch->max_hit + 500; printf(buf, "#RYou absorb %d hitpoints.#n\n\r", dam); stc(buf, ch); printf(buf, "#R%s absorbed %d of your hitpoints!#n\n\r", ch->name, dam); stc(buf, victim); } else stc("Nothing seemed to happen.\n\r", ch); return; } /* you really must take a look at this Jobo */ void do_entomb(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; OBJ_DATA *obj = NULL; OBJ_DATA *objc; if (!IS_SPHERE(ch, SPHERE_COMBAT3)) { stc("You need the combat 3 sphere for this.\n\r", ch); return; } if (ch->in_room->sector_type == SECT_AIR) { send_to_char("This ability cannot be used in the air.\n\r", ch); return; } if (!TIME_UP(ch, TIMER_ENTOMB) && ch->level < 12) { send_to_char ("This ability can only be used once every 12 hours.\n\r", ch); return; } if ((objc = get_obj_list(ch, "walln", ch->in_room->contents)) != NULL) objc = NULL; else { obj = create_object(get_obj_index(30043), 0); printf(buf, "A wall of ice is here, blocking your exit north."); free_string(obj->description); obj->description = str_dup(buf); obj_to_room(obj, ch->in_room); obj->timer = 5; obj->item_type = ITEM_WALL; } if ((objc = get_obj_list(ch, "walls", ch->in_room->contents)) != NULL) objc = NULL; else { obj = create_object(get_obj_index(30044), 0); printf(buf, "A wall of ice is here, blocking your exit south."); free_string(obj->description); obj->description = str_dup(buf); obj_to_room(obj, ch->in_room); obj->timer = 5; obj->item_type = ITEM_WALL; } if ((objc = get_obj_list(ch, "walle", ch->in_room->contents)) != NULL) objc = NULL; else { obj = create_object(get_obj_index(30045), 0); printf(buf, "A wall of ice is here, blocking your exit east."); free_string(obj->description); obj->description = str_dup(buf); obj_to_room(obj, ch->in_room); obj->timer = 5; obj->item_type = ITEM_WALL; } if ((objc = get_obj_list(ch, "wallw", ch->in_room->contents)) != NULL) objc = NULL; else { obj = create_object(get_obj_index(30046), 0); printf(buf, "A wall of ice is here, blocking your exit west."); free_string(obj->description); obj->description = str_dup(buf); obj_to_room(obj, ch->in_room); obj->timer = 5; obj->item_type = ITEM_WALL; } ch->hit += ch->max_hit * 0.1; if (ch->hit > ch->max_hit) ch->hit = ch->max_hit; SET_TIMER(ch, TIMER_ENTOMB, 12); act("$n calls forth sheets of ice, blocking your path in every direction.", ch, NULL, NULL, TO_ROOM); send_to_char("You call forth sheets of ice to entrap your prey.\n\r", ch); send_to_char("You grin wickedly.\n\r", ch); do_say(ch, "Prepare to die! Muahahahaha."); WAIT_STATE(ch, 10); return; } void do_bladejump(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_SPHERE(ch, SPHERE_COMBAT1)) { stc("You need combat one for this.\n\r",ch); return; } if (arg[0] == '\0') { send_to_char("BladeJump to 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 < 1000) { stc("You don't have enough movement points to bladejump to 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 (IS_SET(victim->act, ACT_NOTRAVEL)) { send_to_char("No Can Do.\n\r", ch); return; } if (ch == victim) { send_to_char("But you're already at yourself!\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) && ch->move < victim->max_move) { if (!IS_NPC(victim) && !IS_IMMUNE(victim, IMM_SUMMON)) { send_to_char("They are hiding from you.\n\r", ch); return; } else send_to_char ("You need more move than you're opponent.\n\r", ch); } if (victim->in_room == ch->in_room) { send_to_char("But you're already there!\n\r", ch); return; } act("You jump into the clouds", ch, NULL, victim, TO_CHAR); act("$n jumps into the clouds", ch, NULL, victim, TO_ROOM); char_from_room(ch); char_to_room(ch, victim->in_room); ch->move -= 1000; act("$n jumps out of the clouds and lands infront of $N.", ch, NULL, victim, TO_NOTVICT); act("$n jumps out of the clouds and lands infront of you.", ch, NULL, victim, TO_VICT); do_look(ch, "auto"); return; } void do_superberserk(CHAR_DATA *ch, char *argument) { char arg [MAX_INPUT_LENGTH]; CHAR_DATA *vch; CHAR_DATA *vch_next; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if ( ch->level < skill_table[gsn_berserk].skill_level) { send_to_char( "You are not wild enough to go berserk.\n\r", ch ); return; } WAIT_STATE( ch, 6); if ( number_percent( ) > ch->pcdata->learned[gsn_berserk] ) { act("You rant and rave, but nothing much happens.",ch,NULL,NULL,TO_CHAR); act("$n gets a wild look in $s eyes, but nothing much happens.",ch,NULL,NULL,TO_ROOM); return; } if (!IS_SPHERE(ch, SPHERE_COMBAT2)) { stc("You need combat one for this.\n\r",ch); return; } act("#0You Roar with Rage and #7B#wE#7R#wS#7E#wR#7K#0 into a Barbarian style Frenzy.#n",ch,NULL,NULL,TO_CHAR); act("#0$n Roars with Rage and #7B#wE#7R#wS#7E#wR#7K#wS#0 into a Barbarian style Frenzy!#n",ch,NULL,NULL,TO_ROOM); for (vch = char_list; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) continue; if (!IS_NPC(vch)) continue; if (ch == vch) { act("You throw back your head and howl with rage!", ch, NULL, NULL, TO_CHAR); continue; } if (!IS_NPC(vch) && vch->pcdata->chobj != NULL) continue; if (!IS_NPC(vch)) { // if (vch->in_room == ch->in_room) if (vch->in_room->area == ch->in_room->area) send_to_char ("You hear a Warcry close by!\n\r", vch); else if (!CAN_PK(vch)) continue; } if (vch->in_room == ch->in_room && can_see(ch, vch)) { multi_hit(ch, vch, TYPE_UNDEFINED); if (vch == NULL || vch->position <= POS_STUNNED) continue; multi_hit(ch, vch, TYPE_UNDEFINED); } } return; }