/* Hydra class made by Arcane from the ideas of smoo, still needs to be fixed in fight.c(done). -------------------------------------- fight.c put in by Smoo, regen put in by Smoo, reach put in by Smoo */ #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" #include "player.h" void do_hydras( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; char lord[MAX_INPUT_LENGTH]; CHAR_DATA *gch; one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA)) { send_to_char("Huh?\n\r",ch); return; } send_to_char("The following hydra's roam the land.\n\r",ch); send_to_char("#G[ #gName #G] [ #gHits #G] [ #gMana #G] [ #gMove #G] [#gExp#G]\n\r",ch); for ( gch = char_list; gch != NULL; gch = gch->next ) { if ( IS_NPC(gch) ) continue; if ( !IS_CLASS(gch, CLASS_HYDRA)) continue; if ( !str_cmp(ch->clan,gch->clan) ) { sprintf( buf, "#8[#3%-12s#8] [#3%-6d#8] [#3%-6d#8] [#3%-6d#8] [#3%7d#8]\n\r", capitalize( gch->name ), gch->hit,gch->mana,gch->move, gch->exp); send_to_char( buf, ch ); } } return; } void do_hinfo( CHAR_DATA *ch, char *argument ) { char buf[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA)) { send_to_char("Huh?\n\r",ch); return; } sprintf(buf,"Heads (%d). Powers (%d). Accuracy (%d). Twirl (%d). \n\r", ch->pcdata->powers[DISC_HYDRA_HEADS],ch->pcdata->powers[DISC_HYDRA_POWER],ch->pcdata->powers[DISC_HYDRA_ACCUR],ch->pcdata->powers[DISC_HYDRA_TWIRL]); send_to_char(buf,ch); return; } void do_gain( CHAR_DATA *ch, char *argument ) { char arg1 [MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int reqexp = 0; argument = one_argument( argument, arg1 ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA)) { send_to_char("Huh?\n\r",ch); return; } if (arg1[0] == '\0') { send_to_char("\n#uType one of the following\n\r",ch); send_to_char("#3Syntax is: #8gain head\n\r", ch); send_to_char("#3Syntax is: #8gain twirl\n\r", ch); send_to_char("#3Syntax is: #8gain accuracy\n\r", ch); return; } if (!str_cmp(arg1,"accuracy")) { if (ch->pcdata->powers[DISC_HYDRA_ACCUR] == 1) reqexp = 250000; if (ch->pcdata->powers[DISC_HYDRA_ACCUR] == 2) reqexp = 250000; if (ch->pcdata->powers[DISC_HYDRA_ACCUR] == 3) reqexp = 250000; if (ch->pcdata->powers[DISC_HYDRA_ACCUR] == 4) reqexp = 250000; if (ch->pcdata->powers[DISC_HYDRA_ACCUR] == 5) reqexp = 250000; if (ch->pcdata->powers[DISC_HYDRA_ACCUR] == 6) reqexp = 250000; if ( ch->pcdata->powers[DISC_HYDRA_ACCUR] > 6 ) { send_to_char("#6You already have maximum accuracy.\n\r", ch); return; } if ( ch->exp < reqexp) { sprintf(buf,"You don't have the required (%d) exp\n\r",reqexp); send_to_char(buf,ch); return; } ch->pcdata->powers[DISC_HYDRA_ACCUR] += 1; ch->exp -= reqexp; send_to_char("#6You improve your #3accuracy.\n\r", ch); return; } if (!str_cmp(arg1,"head")) { if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 1) reqexp = 100000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 2) reqexp = 200000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 3) reqexp = 400000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 4) reqexp = 800000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 5) reqexp = 1600000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 6) reqexp = 1600000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 7) reqexp = 2500000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 8) reqexp = 2500000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 9) reqexp = 2500000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 10) reqexp = 3500000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 11) reqexp = 3500000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 12) reqexp = 3500000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 13) reqexp = 3500000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 14) reqexp = 3800000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 15) reqexp = 3800000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 16) reqexp = 4000000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 17) reqexp = 4000000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 18) reqexp = 4300000; if (ch->pcdata->powers[DISC_HYDRA_HEADS] == 19) reqexp = 10000000; if ( ch->pcdata->powers[DISC_HYDRA_HEADS] > 19 ) { send_to_char("#6You already have maximum heads.\n\r", ch); return; } if ( ch->exp < reqexp) { sprintf(buf,"You don't have the required (%d) exp\n\r",reqexp); send_to_char(buf,ch); return; } else { ch->pcdata->powers[DISC_HYDRA_HEADS] += 1; ch->exp -= reqexp; send_to_char("#6You gain another #3Head.\n\r", ch); if (!IS_IMMORTAL(ch)) { sprintf(buf, "%s has gained another head!", ch->name); do_info(ch, buf); } } } if (!str_cmp(arg1,"twirl")) { if (ch->pcdata->powers[DISC_HYDRA_TWIRL]==0) reqexp=450000; else if (ch->pcdata->powers[DISC_HYDRA_TWIRL]==1) reqexp=550000; else if (ch->pcdata->powers[DISC_HYDRA_TWIRL]==2) reqexp=650000; else if (ch->pcdata->powers[DISC_HYDRA_TWIRL]==3) reqexp=1000000; else if (ch->pcdata->powers[DISC_HYDRA_TWIRL]==4) reqexp=1450000; else if (ch->pcdata->powers[DISC_HYDRA_TWIRL]==5) reqexp=1900000; else if (ch->pcdata->powers[DISC_HYDRA_TWIRL]==6) reqexp=2500000; else { send_to_char("You already have the maximum number twirl points!\n\r", ch); return; } if (ch->exp < reqexp) { sprintf(buf, "You don't have enough exp for that! You need %d exp.\n\r", reqexp); send_to_char(buf, ch); return; } else { ch->pcdata->powers[DISC_HYDRA_TWIRL] += 1; send_to_char("You gain some twirly points!\n\r", ch); ch->exp -= reqexp; } } } void do_transform( 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_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA)) { send_to_char("Huh?\n\r",ch); return; } if (ch->pcdata->powers[DISC_HYDRA_POWER] < 7) { send_to_char("You don't have the power to transform someone.\n\r",ch); return; } if (ch->pcdata->powers[DISC_HYDRA_HEADS] < 19) { send_to_char("You don't feel you are good enough to acuratly transform him.\n\r",ch); return; } if ( arg[0] == '\0' ) { send_to_char( "Transform Who?\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 ( victim->level != LEVEL_AVATAR && !IS_IMMORTAL(victim) ) { send_to_char( "You can only guide avatars.\n\r", ch ); return; } if ( ch == victim ) { send_to_char( "You are already in a beast-like form, oh..just wanted to comit beastiality, I see..\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_MAGE)) { send_to_char( "You are unnable to transform a mage.\n\r", ch ); return; } if (IS_CLASS(victim, CLASS_DEMON) || IS_SET(victim->special, SPC_CHAMPION)) { send_to_char("They seem a bit too demonic for you to transform them.\n\r",ch); return; } if ( IS_CLASS(victim, CLASS_HIGHLANDER) ) { send_to_char( "You are unnable to transform a highlander.\n\r", ch ); return; } if (victim->exp <= 999999) { act("$n tried to transform you in to a hydra, but you refuse knowing that", ch,NULL,victim,TO_VICT); act("you are not strong enough to choose the paths of the hydra's.", ch, NULL, victim, TO_VICT); act("(note. 1 million minimum exp required.", ch, NULL, victim, TO_VICT); act("$N does not have the 1mil required exp to become a hydra.", ch, NULL, victim, TO_CHAR); return; } if (IS_IMMUNE(victim,IMM_DEMON)) { send_to_char ("They are immune to transformations.\n\r",ch); sprintf(buf, "%s just tried to transform you into a hydra, but you are immune. Type ready if you want to become one.", ch->name); send_to_char (buf, victim); return; } act("You let $n drink some of your hydra blood, and he quickly transforms.", ch, NULL, victim, TO_CHAR); act("$N takes a sip of $n's hydra blood, and he transforms into another fearsome beast.", ch, NULL, victim, TO_NOTVICT); act("You drink $n's blood in a long ritual, and you transform into a fearsome HYDRA.", ch, NULL, victim, TO_VICT); sprintf(buf, "%s now walks amoung the fearsome HYDRAS.", victim->name); do_info(ch,buf); if (IS_CLASS(victim, CLASS_VAMPIRE)) do_mortalvamp(victim,""); REMOVE_BIT(victim->act, PLR_HOLYLIGHT); REMOVE_BIT(victim->act, PLR_WIZINVIS); REMOVE_BIT(victim->special, SPC_SIRE); REMOVE_BIT(victim->special, SPC_ANARCH); victim->class=CLASS_HYDRA; victim->pcdata->powers[DISC_HYDRA_HEADS] = 1; victim->pcdata->powers[DISC_HYDRA_ACCUR] = 1; victim->pcdata->powers[DISC_HYDRA_TWIRL] = 0; victim->pcdata->powers[DISC_HYDRA_POWER] = 0; victim->special=0; victim->pcdata->stats[UNI_RAGE] = 0; SET_BIT(victim->act, PLR_HOLYLIGHT); free_string(victim->morph); victim->clan=str_dup(""); free_string(victim->clan); victim->clan=str_dup(""); free_string(victim->lord); save_char_obj(ch); save_char_obj(victim); return; } void do_ready( CHAR_DATA *ch, char *argument ) { char arg [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (IS_IMMUNE(ch, IMM_DEMON)) { send_to_char("You are ready for the transformation in to a gruesome Hydra.\n\r",ch); REMOVE_BIT(ch->immune, IMM_DEMON); return; } send_to_char("Your body settles because it is no longer preparing for the transformation.\n\r",ch); SET_BIT(ch->immune, IMM_DEMON); return; } void do_powers( CHAR_DATA *ch, char *argument ) { char arg1 [MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; int improve; improve = PMONK; argument = one_argument( argument, arg1 ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_HYDRA)) { send_to_char("Huh?\n\r",ch); return; } if (arg1[0] == '\0') { send_to_char(" Powers.\n\r",ch); send_to_char(" Type: #3powers #7<power name>\n\r",ch); if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 1 ) send_to_char("#1A#3ware\n\r", ch); if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 2 ) send_to_char("#1R#3each\n\r", ch); if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 3 ) send_to_char("#1F#3luxsion\n\r", ch); if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 4 ) send_to_char("#1S#3phere of Diamonds\n\r", ch); if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 5 ) send_to_char("#1I#3nterference\n\r", ch); if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 6 ) send_to_char("#1R#3egenerate\n\r", ch); if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 7 ) send_to_char("#1T#3ransform\n\r", ch); return; } if (!str_cmp(arg1,"aware")) { if ( ch->pcdata->powers[DISC_HYDRA_POWER] > 1 ) send_to_char("#6You already have the #3Aware Power.\n\r", ch); else if ( ch->practice < 10) send_to_char("You don't have the #310#8 required primal.\n\r", ch); else { ch->pcdata->powers[DISC_HYDRA_POWER] += 1; ch->practice -= 10; SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT); SET_BIT(ch->affected_by, AFF_SHADOWSIGHT); send_to_char("#6You master the #3Aware Power.\n\r", ch); } return; } else if (!str_cmp(arg1,"reach")) { if ( ch->pcdata->powers[DISC_HYDRA_POWER] > 1 ) send_to_char("#6You already have the #3Reach Power.\n\r", ch); else if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 1 ) send_to_char("#6You need all the powers before this one to receive this power.\n\r", ch); else if ( ch->practice < 20) send_to_char("You don't have the #320#8 required primal.\n\r", ch); else { ch->pcdata->powers[DISC_HYDRA_POWER] += 1; ch->practice -= 20; send_to_char("#6You master the #3Reach Power.\n\r", ch); } return; } else if (!str_cmp(arg1,"fluxsion")) { if ( ch->pcdata->powers[DISC_HYDRA_POWER] > 2 ) send_to_char("#6You already have the #3Fluxion Power.\n\r", ch); else if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 2 ) send_to_char("#6You need all the powers before this one to receive this power.\n\r", ch); else if ( ch->practice < 30) send_to_char("You don't have the #330#8 required primal.\n\r", ch); else { ch->pcdata->powers[DISC_HYDRA_POWER] += 1; ch->practice -= 30; send_to_char("#6You master the #3Fluxion Power.\n\r", ch); } return; } else if (!str_cmp(arg1,"sphereofdiamonds")) { if ( ch->pcdata->powers[DISC_HYDRA_POWER] > 3 ) send_to_char("#6You already have the #3Sphere of diamonds power.\n\r", ch); else if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 3 ) send_to_char("#6You need all the powers before this one to receive this power.\n\r", ch); else if ( ch->practice < 40) send_to_char("You don't have the #340#8 required primal.\n\r", ch); else { ch->pcdata->powers[DISC_HYDRA_POWER] += 1; ch->practice -= 40; send_to_char("#6You master the #3Sphere of Diamonds Power.\n\r", ch); } return; } else if (!str_cmp(arg1,"interference")) { if ( ch->pcdata->powers[DISC_HYDRA_POWER] > 4 ) send_to_char("#6You already have the #Interference.\n\r", ch); else if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 4 ) send_to_char("#6You need all the powers before this one to receive this power.\n\r", ch); else if ( ch->practice < 50) send_to_char("You don't have the #350#8 required primal.\n\r", ch); else { ch->pcdata->powers[DISC_HYDRA_POWER] += 1; ch->practice -= 50; send_to_char("#6You master the #3Interference power.\n\r", ch); } return; } else if (!str_cmp(arg1,"regenerate")) { if ( ch->pcdata->powers[DISC_HYDRA_POWER] > 5 ) send_to_char("#6You already have the #3Regenerate Power.\n\r", ch); else if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 5 ) send_to_char("#6You need all the powers before this one to receive this power.\n\r", ch); else if ( ch->practice < 60) send_to_char("You don't have the #360#8 required primal.\n\r", ch); else { ch->pcdata->powers[DISC_HYDRA_POWER] += 1; ch->practice -= 60; send_to_char("#6You master the #3Regenerate power.\n\r", ch); } return; } else if (!str_cmp(arg1,"transform")) { if ( ch->pcdata->powers[DISC_HYDRA_POWER] > 6 ) send_to_char("#6You already have the #3Transform power.\n\r", ch); else if ( ch->pcdata->powers[DISC_HYDRA_POWER] < 6 ) send_to_char("#6You need all the powers before this one to receive this power.\n\r", ch); else if ( ch->practice < 70) send_to_char("You don't have the #370#8 required primal.\n\r", ch); else { ch->pcdata->powers[DISC_HYDRA_POWER] += 1; ch->practice -= 70; send_to_char("#8You master the #3Transform power.\n\r", ch); } return; } sprintf(buf,"Powers Learned (%d).\n\r",ch->pcdata->powers[DISC_HYDRA_POWER]); send_to_char(buf,ch); return; } void hydra_regen (CHAR_DATA *ch) { if (!IS_CLASS(ch, CLASS_HYDRA)) { send_to_char("Your not a hydra!\n\r", ch); return; } if (ch->pcdata->powers[DISC_HYDRA_REGEN] == 2) { ch->pcdata->powers[DISC_HYDRA_REGEN] = 1; send_to_char("Regen toggled off.\n\r", ch); return; } if (ch->pcdata->powers[DISC_HYDRA_REGEN] > 2) { ch->pcdata->powers[DISC_HYDRA_REGEN] = 2; send_to_char("Regen toggled on.\n\r", ch); return; } if (ch->pcdata->powers[DISC_HYDRA_REGEN] < 2) { ch->pcdata->powers[DISC_HYDRA_REGEN] = 2; send_to_char("Regen toggled on.\n\r", ch); return; } return; } void do_reach( 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_NPC(ch) ) return; if (!IS_CLASS(ch, CLASS_HYDRA) && !IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r",ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->pcdata->condition[COND_THIRST] < 15) { send_to_char("You do not have enough blood to go that far..", ch); return; } if (ch->pcdata->powers[DISC_HYDRA_POWER] < 3 && !IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("You need the reach power to reach..\n\r",ch); return; } if ( arg[0] == '\0' ) { if (IS_CLASS(ch, CLASS_HYDRA)) send_to_char( "Who do you want to extend your heads to?\n\r", ch); else send_to_char( "Send a stream of blood to who?\n\r", ch); return; } if ( ( victim = get_char_world( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if (!IS_NPC(victim) && IS_IMMUNE(victim, IMM_SUMMON) && !IS_IMMUNE(victim, IMM_TRANSPORT)) { if (IS_CLASS(ch, CLASS_HYDRA)) send_to_char("After all your searching, you couldn't find them.\n\r",ch); else send_to_char("#rYour blood couldn't find a path to them..\n\r", ch); return; } if (ch == victim) { if (IS_CLASS(ch, CLASS_HYDRA)) send_to_char("You hug yourself with your many heads.\n\r",ch); else send_to_char("Hey ..! That was a quick ride!\n\r", ch); return; } if (victim->in_room->vnum == ch->in_room->vnum) { send_to_char("After much searching, you realise that he's already here!\n\r",ch); return; } char_from_room(ch); char_to_room(ch,victim->in_room); if (IS_NPC(victim)) { if (IS_CLASS(ch, CLASS_HYDRA)) sprintf(buf,"You extend your heads in all dirrections to find %s!\n\r",victim->name); else sprintf(buf,"You blead out a river of blood going in the dirrection of %s\n\r", victim->name); send_to_char(buf, ch); } if (!IS_NPC(victim)) { if (IS_CLASS(ch, CLASS_HYDRA)) sprintf(buf,"You extend your heads in all dirrections to find %s!\n\r",victim->name); else sprintf(buf,"You blead out a river of blood going in the dirrection of %s", victim->name); send_to_char(buf, ch); } if (IS_CLASS(ch, CLASS_VAMPIRE)) { sprintf(buf, "You ride down the river and get to %s.\n\r", victim->name); send_to_char(buf, ch);} if (IS_CLASS(ch, CLASS_HYDRA)) { act("$n runs into the room looking for someone in particular.",ch,NULL,NULL,TO_NOTVICT); act("A large head runs in and pulls $n in through his neck.",ch,NULL,victim,TO_VICT); } else { act("A large river of blood spills into the room, followed by $n", ch, NULL, victim, TO_VICT); act("A large river of blood spills into the room, followed by $n", ch, NULL, victim, TO_NOTVICT); } do_look(ch, "auto"); if (IS_CLASS(ch, CLASS_VAMPIRE)) gain_condition( ch, COND_THIRST, -15 ); WAIT_STATE(ch, 12); return; }