/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /********************************************* * Hydra, another class by Xrakisis * *********************************************/ #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_hydraform( CHAR_DATA *ch, char *argument ) { char arg [MAX_INPUT_LENGTH]; char buf [MAX_STRING_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_NAZGUL)) { send_to_char("Hydra Only?\n\r",ch); return; } if (IS_POLYAFF(ch, POLY_ZULOFORM)) { REMOVE_BIT(ch->polyaff, POLY_ZULOFORM); REMOVE_BIT(ch->affected_by, AFF_POLYMORPH); act( "You Transform into a Lesser Serpent.", ch, NULL, NULL, TO_CHAR ); act( "$n's Transforms into a Lesser Serpent.", ch, NULL, NULL, TO_ROOM); ch->damroll -= 400; ch->hitroll -= 400; ch->armor += 500; free_string( ch->morph ); ch->morph = str_dup( "" ); return; } else if (IS_AFFECTED(ch,AFF_POLYMORPH)) { send_to_char("#0You Cant Hydra Form While Changed#n.\n\r",ch); return; } if (ch->stance[0] != -1) do_stance(ch,""); if (ch->mounted == IS_RIDING) do_dismount(ch,""); act( "You Grow Into a Massive #RH#rY#7D#rR#RA#n.", ch, NULL, NULL, TO_CHAR); act( "$n's Grows into an Imposing Multi-Headed #RH#rY#7D#rR#RA#n.", ch, NULL, NULL, TO_ROOM ); SET_BIT(ch->polyaff, POLY_ZULOFORM); SET_BIT(ch->affected_by, AFF_POLYMORPH); sprintf(buf, "%s The Monstrous Hydra", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); ch->damroll += 400; ch->hitroll += 400; ch->armor -= 500; return; } void do_scalebuy( 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_HYDRA) && !IS_CLASS(ch, CLASS_TYPHON) && !IS_CLASS(ch, CLASS_NAZGUL) && !IS_CLASS(ch, CLASS_BAATEZU)) { send_to_char("Huh.\n\r",ch); return; } if (arg[0] == '\0') { send_to_char("Type the Gemtype for each Scale #n\n\r",ch); send_to_char("Diamond Onyx Emerald Sapphire Ruby #n\n\r",ch); send_to_char("Jade Pearl Topaz Amethyst Opal #n\n\r",ch); send_to_char("Lazuli Chaos Dark Beast #n\n\r",ch); return; } if ( ch->pcdata->quest < 40000 ) { send_to_char("You don't have the 40K qps needed.\n\r",ch); return; } if (!str_cmp(arg,"diamond" )) vnum = 94084; else if (!str_cmp(arg,"onyx" )) vnum = 94085; else if (!str_cmp(arg,"emerald" )) vnum = 94086; else if (!str_cmp(arg,"sapphire" )) vnum = 94087; else if (!str_cmp(arg,"ruby" )) vnum = 94088; else if (!str_cmp(arg,"jade" )) vnum = 94089; else if (!str_cmp(arg,"pearl" )) vnum = 94090; else if (!str_cmp(arg,"topaz" )) vnum = 94091; else if (!str_cmp(arg,"amethyst" )) vnum = 94092; else if (!str_cmp(arg,"opal" )) vnum = 94093; else if (!str_cmp(arg,"lazuli" )) vnum = 94094; else if (!str_cmp(arg,"chaos" )) vnum = 94095; else if (!str_cmp(arg,"dark" )) vnum = 94096; else if (!str_cmp(arg,"beast" )) vnum = 94097; else { do_scalebuy(ch,""); return; } if ( vnum == 0 || (pObjIndex = get_obj_index( vnum )) == NULL) { send_to_char("Missing object, please inform Xrakisis .\n\r",ch); return; } if(!IS_IMMORTAL(ch)) ch->pcdata->quest -= 40000; obj = create_object(pObjIndex, 50); obj->questowner = str_dup(ch->pcdata->switchname); obj_to_char(obj, ch); act("You transform the 40K qp into $p.",ch,obj,NULL,TO_CHAR); act("$n forms $p out of 40K qp.",ch,obj,NULL,TO_ROOM); return; } void do_hydragain (CHAR_DATA *ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA)) { send_to_char("#0This is a Hydra Ability#n\n\r",ch); return; } if (arg[0] == '\0') { if (ch->pcdata->powers[HYDRA_POWER] == 0) send_to_char("#0Power #0[#R**********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 1) send_to_char("#0Power #0[#G*#R*********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 2) send_to_char("#0Power #0[#G**#R********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 3) send_to_char("#0Power #0[#G***#R*******#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 4) send_to_char("#0Power #0[#G****#R******#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 5) send_to_char("#0Power #0[#G*****#R*****#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 6) send_to_char("#0Power #0[#G******#R****#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 7) send_to_char("#0Power #0[#G*******#R***#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 8) send_to_char("#0Power #0[#G********#R**#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 9) send_to_char("#0Power #0[#G*********#R*#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_POWER] == 10) send_to_char("#0Power #0[#G**********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 0) send_to_char("#0Magic #0[#R**********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 1) send_to_char("#0Magic #0[#G*#R*********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 2) send_to_char("#0Magic #0[#G**#R********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 3) send_to_char("#0Magic #0[#G***#R*******#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 4) send_to_char("#0Magic #0[#G****#R******#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 5) send_to_char("#0Magic #0[#G*****#R*****#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 6) send_to_char("#0Magic #0[#G******#R****#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 7) send_to_char("#0Magic #0[#G*******#R***#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 8) send_to_char("#0Magic #0[#G********#R**#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 9) send_to_char("#0Magic #0[#G*********#R*#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_MAGIC] == 10) send_to_char("#0Magic #0[#G**********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 0) send_to_char("#0Attack #0[#R**********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 1) send_to_char("#0Attack #0[#G*#R*********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 2) send_to_char("#0Attack #0[#G**#R********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 3) send_to_char("#0Attack #0[#G***#R*******#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 4) send_to_char("#0Attack #0[#G****#R******#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 5) send_to_char("#0Attack #0[#G*****#R*****#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 6) send_to_char("#0Attack #0[#G******#R****#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 7) send_to_char("#0Attack #0[#G*******#R***#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 8) send_to_char("#0Attack #0[#G********#R**#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 9) send_to_char("#0Attack #0[#G*********#R*#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_ATTACK] == 10) send_to_char("#0Attack #0[#G**********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 0) send_to_char("#0Defense #0[#R**********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 1) send_to_char("#0Defense #0[#G*#R*********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 2) send_to_char("#0Defense #0[#G**#R********#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 3) send_to_char("#0Defense #0[#G***#R*******#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 4) send_to_char("#0Defense #0[#G****#R******#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 5) send_to_char("#0Defense #0[#G*****#R*****#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 6) send_to_char("#0Defense #0[#G******#R****#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 7) send_to_char("#0Defense #0[#G*******#R***#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 8) send_to_char("#0Defense #0[#G********#R**#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 9) send_to_char("#0Defense #0[#G*********#R*#0]#n\n\r",ch); if (ch->pcdata->powers[HYDRA_DEFENSE] == 10) send_to_char("#0Defense #0[#G**********#0]#n\n\r",ch); send_to_char("Choose a Hydra Power to Increase: Power, Magic, Attack, Defense.\n\r",ch); return; } if (!str_cmp(arg,"power")) { if (ch->pcdata->powers[HYDRA_POWER]>9) { send_to_char("You Have Full Power.\n\r",ch); return; } else if (ch->practice < ch->pcdata->powers[HYDRA_POWER] * 60 + 60) { send_to_char("You are not ready to increase your power.\n\r",ch); return; } else { ch->practice -= ch->pcdata->powers[HYDRA_POWER] * 60 + 60; send_to_char("You have become more powerful.\n\r",ch); ch->pcdata->powers[HYDRA_POWER] += 1; return; } } else if (!str_cmp(arg,"magic")) { if (ch->pcdata->powers[HYDRA_MAGIC]>9) { send_to_char("You are already a master of the Arcane.\n\r",ch); return; } else if (ch->practice < ch->pcdata->powers[HYDRA_MAGIC] * 60 + 60) { send_to_char("You are not ready to learn more of the Arcane.\n\r",ch); return; } else { ch->practice -= ch->pcdata->powers[HYDRA_MAGIC] * 60 + 60; send_to_char("Your mastery of the ancient arts increase.\n\r",ch); ch->pcdata->powers[HYDRA_MAGIC] += 1; return; } } else if (!str_cmp(arg,"attack")) { if (ch->pcdata->powers[HYDRA_ATTACK] > 9) { send_to_char("You have mastered Attack.\n\r",ch); return; } if (ch->practice < ch->pcdata->powers[HYDRA_ATTACK] * 60 + 60) { send_to_char("You may not learn more of Melee yet.\n\r",ch); return; } else { ch->practice -= ch->pcdata->powers[HYDRA_ATTACK] * 60 + 60; send_to_char("Knowledge flows into you and you gain a better understanding of Combat.\n\r",ch); ch->pcdata->powers[HYDRA_ATTACK] += 1; return; } } else if (!str_cmp(arg,"defense")) { if (ch->pcdata->powers[HYDRA_DEFENSE] > 9) { send_to_char("You have Mastered the art of Defense.\n\r",ch); return; } if (ch->practice < ch->pcdata->powers[HYDRA_DEFENSE] * 60 + 60) { send_to_char("You can not learn more of Defense yet.\n\r",ch); return; } else { ch->practice -= ch->pcdata->powers[HYDRA_DEFENSE] * 60 + 60; send_to_char("You Learn more of Defense.\n\r",ch); ch->pcdata->powers[HYDRA_DEFENSE] += 1; return; } } return; } void do_growth (CHAR_DATA *ch, char *argument) { char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_TYPHON) && !IS_CLASS(ch, CLASS_NAZGUL) && !IS_CLASS(ch, CLASS_BAATEZU)) { send_to_char("Only Hydras may grow more heads.\n\r",ch); return; } if (ch->pcdata->powers[HYDRA_HEADS] > 17) { send_to_char("You Already Have 18 Heads.\n\r",ch); return; } if (ch->practice < ch->pcdata->powers[HYDRA_HEADS]*60 + 60) { send_to_char("You are not ready to grow another head.\n\r",ch); return; } else { ch->practice -= ch->pcdata->powers[HYDRA_HEADS]*60 + 60; send_to_char("A stump begins growing from your body, it forms into a neck, then a head slowly grows.\n\r",ch); // sprintf(buf,"%s the #C***#yHydra#C***#n has Grown another Head.\n\r",ch->pcdata->switchname); // do_info(ch,buf); ch->pcdata->powers[HYDRA_HEADS] += 1; return; } } void do_stomp( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; OBJ_DATA *obj; int limb; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_TYPHON) && !IS_CLASS(ch, CLASS_NAZGUL) && !IS_CLASS(ch, CLASS_BAATEZU)) { send_to_char("What?\n\r",ch); return; } if (ch->pcdata->powers[HYDRA_ATTACK] < 5) { send_to_char("You Need To get Your Attack Higher.\n\r",ch); return; } if (( victim = ch->fighting ) == NULL ) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } act("You throw $N to the ground and tramples $S to a bloody pulp.",ch,NULL,victim,TO_CHAR); act("$n throws you to the ground and #RSTOMPS#n on you.",ch,NULL,victim,TO_VICT); act("$n throws $N to the ground and tramples $S to a bloody pulp.",ch,NULL,victim,TO_NOTVICT); hurt_person(ch,victim,500); limb = number_range(1,4); if (number_range(1,100) > 60 && !IS_NPC(victim)) { if (limb < 3) { if (!IS_ARM_R(victim,LOST_ARM)) SET_BIT(victim->loc_hp[3],LOST_ARM); if (!IS_BLEEDING(victim,BLEEDING_ARM_R)) SET_BIT(victim->loc_hp[6],BLEEDING_ARM_R); if (IS_BLEEDING(victim,BLEEDING_HAND_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_R); if (IS_BLEEDING(victim,BLEEDING_ELBOW_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_ELBOW_R); if ((obj = get_eq_char( victim, WEAR_ARMS )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_WIELD )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_HANDS )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_WRIST_R )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_FINGER_R )) != NULL) take_item(victim,obj); } else { if (!IS_ARM_L(victim,LOST_ARM)) SET_BIT(victim->loc_hp[2],LOST_ARM); if (!IS_BLEEDING(victim,BLEEDING_ARM_L)) SET_BIT(victim->loc_hp[6],BLEEDING_ARM_L); if (IS_BLEEDING(victim,BLEEDING_HAND_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_L); if (IS_BLEEDING(victim,BLEEDING_ELBOW_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_ELBOW_L); if ((obj = get_eq_char( victim, WEAR_ARMS )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_HOLD )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_HANDS )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_WRIST_L )) != NULL) take_item(victim,obj); if ((obj = get_eq_char( victim, WEAR_FINGER_L )) != NULL) take_item(victim,obj); } } WAIT_STATE(ch,24); return; } void do_breath( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int sn; int level = 40; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_TYPHON) && !IS_CLASS(ch, CLASS_NAZGUL) && !IS_CLASS(ch, CLASS_BAATEZU)) { send_to_char("What?\n\r",ch); return; } if (( victim = ch->fighting ) == NULL ) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } if (!((sn = skill_lookup( "fire breath" )) > 0)) return; (*skill_table[sn].spell_fun) (sn,level,ch,victim); if (ch->pcdata->powers[HYDRA_LEVEL] > 0) (*skill_table[sn].spell_fun) (sn,level,ch,victim); if (ch->pcdata->powers[HYDRA_LEVEL] > 1) (*skill_table[sn].spell_fun) (sn,level,ch,victim); if (ch->pcdata->powers[HYDRA_LEVEL] > 3) (*skill_table[sn].spell_fun) (sn,level,ch,victim); if (ch->pcdata->powers[HYDRA_LEVEL] > 4) (*skill_table[sn].spell_fun) (sn,level,ch,victim); WAIT_STATE(ch, 24); return; } void do_mistwalk(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_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_TYPHON) && !IS_CLASS(ch, CLASS_NAZGUL) && !IS_CLASS(ch, CLASS_BAATEZU)) { send_to_char("Huh?\n\r", ch ); return; } if (ch->pcdata->powers[HYDRA_POWER] < 2) { send_to_char("You need level 2 Hydra Power.\n\r",ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("Mistwalk to whom?\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) && !IS_NPC(victim)) { send_to_char("I don't think they want you to do that.\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 < 250) { send_to_char("You are too tired to reform into mist.\n\r", ch ); return; } act("You reform into thin mist and seep into the floor.", ch, NULL, NULL, TO_CHAR); act("$n reforms into thin mist and seeps into the floor.", ch, NULL, NULL, TO_ROOM); ch->move -= 250; char_from_room(ch); char_to_room(ch, location); do_look(ch, "auto"); act("You seep up from the floor and reform into your body.", ch, NULL, NULL, TO_CHAR); act("A fine mist seeps up from the floor and reforms into $n.", ch, NULL, NULL, TO_ROOM); return; } void do_shaperoar (CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_TYPHON) && !IS_CLASS(ch, CLASS_NAZGUL) && !IS_CLASS(ch, CLASS_BAATEZU)) { if (IS_CLASS(ch, CLASS_WEREWOLF) || IS_CLASS(ch, CLASS_UNDEAD_LYCAN)) do_roar(ch,argument); else send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->powers[HYDRA_DEFENSE] < 3) { send_to_char("Your Hydra Defense isnt high enough.\n\r",ch); return; } if ( ch->fighting == NULL ) { send_to_char("You must be fighting to #RROAR!!!!#n.\n\r",ch); return; } if ( (victim = ch->fighting) == NULL ) return; WAIT_STATE( ch, 16 ); if ( number_range( 1, 2 ) != 1 ) { act("You let out an insane BeeF-powered #RROAR!!!!!!!!!#n to scare the shit out of $N, but it doesn't work.",ch,NULL,victim,TO_CHAR); act("$n lets out an insane BeeF-powered #RROAR!!!!!!!!!#n, but it doesn't scare you.",ch,NULL,victim,TO_VICT); act("$n lets out an insane BeeF-powered #RROAR!!!!!!!!!#n",ch,NULL,victim,TO_NOTVICT); return; } act("You let out an insane BeeF-powered #RROAR!!!!!!!!!#n and scare the shit out of $N.",ch,NULL,victim,TO_CHAR); act("$n lets out an insane BeeF-powered #RROAR!!!!!!!!!#n, and you are filled with terror.",ch,NULL,victim,TO_VICT); act("$n lets out an insane BeeF-powered #RROAR!!!!!!!!!#n",ch,NULL,victim,TO_NOTVICT); do_flee( victim, "" ); return; } void do_charge(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_TYPHON) && !IS_CLASS(ch, CLASS_NAZGUL) && !IS_CLASS(ch, CLASS_BAATEZU)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->powers[HYDRA_ATTACK] < 4) { send_to_char("Your Skill with Attack isnt good enough.\n\r",ch); return; } if (ch->move < 2000) { send_to_char("This costs 2000 move.\n\r",ch); return; } if ( ( victim = ch->fighting ) == NULL ) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } WAIT_STATE(ch, 18); ch->move -= 2000; one_hit(ch,victim,gsn_headbutt,1); one_hit(ch,victim,gsn_hooves,1); one_hit(ch,victim,gsn_hooves,1); one_hit(ch,victim,gsn_hooves,1); if (number_range(1,3)==1) { victim->position = POS_STUNNED; ch->position = POS_STANDING; act("You lift $N up by the horns and sends $M flying into the wall.",ch,NULL,victim,TO_CHAR); act("$n lifts you up by the horns and send you flying into the wall.",ch,NULL,victim, TO_VICT); act("$n lifts $N up by the horns and sends $M flying into the wall.",ch,NULL,victim, TO_ROOM); } return; } void do_deathaura( CHAR_DATA *ch, char *argument ) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_TYPHON) && !IS_CLASS(ch, CLASS_NAZGUL) && !IS_CLASS(ch, CLASS_BAATEZU)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->powers[HYDRA_MAGIC] < 3) { send_to_char("You need your Magic to 3 for this.\n\r",ch); return; } if (IS_SET(ch->pcdata->powers[AURAS], DEATH_AURA)) { REMOVE_BIT(ch->pcdata->powers[AURAS], DEATH_AURA); act("Your Death Aura dicipates.", ch, NULL, NULL, TO_CHAR); act("$n loses their Death Aura.", ch, NULL, NULL, TO_ROOM); return; } SET_BIT(ch->pcdata->powers[AURAS], DEATH_AURA); act("An Aura of Death seeps through your Scales..", ch, NULL, NULL, TO_CHAR); act("An Aura of DEATH seeps through $n's Scales .", ch, NULL, NULL, TO_ROOM); return; }