/*************************************************************************** * God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock * * * * Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little * * This mud is NOT to be copied in whole or in part, or to be run without * * the permission of Matthew Little. Nobody else has permission to * * authorise the use of this code. * ***************************************************************************/ #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" #include "warlock.h" const char *dcolor[10] = { "", "#rRed", "#gGreen", "#bBlue", "#yYellow", "#nSilver", "#wWhite", "#eBlack", "#oGold", "#eS#wh#ea#wd#eo#ww" }; /* const char * dage [12] = { "", "Hatchling", "Young", "Juvenile", "Young Adult", "Adult", "Mature", "Elder", "Venerable", "Ancient", "Lesser Wyrm", "Greater Wyrm", "Supreme" }; */ // See other Dragons Connected. void do_horde (CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; CHAR_DATA *gch; one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?\n\r", ch); return; } sprintf (buf, "The Draconic Horde:\n\r"); send_to_char (buf, ch); send_to_char ("[ Name ] [ Colour ] [ Hits ] [ Mana ] [ Move ] [ Exp ]\n\r", ch); for (gch = char_list; gch != NULL; gch = gch->next) { if (IS_NPC (gch)) continue; if (!IS_CLASS (gch, CLASS_DRAGON)) continue; if (IS_IMMORTAL (gch) && !can_see (ch, gch)) continue; { sprintf (buf, "[%-16s] [%-8s] [%-6d] [%-6d] [%-6d] [%10lli]\n\r", capitalize (gch->name), bash_color (dcolor[gch->pcdata->disc_a[DRAGON_COLOR]]), gch->hit, gch->mana, gch->move, gch->exp); send_to_char (buf, ch); } } return; } void do_dragonpowers (CHAR_DATA * ch, char *argument) { int count = 0; if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_DRAGON)) { do_rand_typo (ch); return; } stc ("#g================================================================================#n\n\r", ch); cent_to_char ("#w-[ Dragon Powers ]-#n", ch); stc ("#g================================================================================#n\n\r", ch); stc ("#w Hatchling: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_SCRY)) { stc ("Scry ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_PEER)) { stc ("Dpeer ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_TRUESIGHT)) { stc ("Truesight ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_FANGS)) { stc ("Fangs ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_LICK)) { stc ("Dlick ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { stc ("Gasbreath ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_TERROR)) { stc ("Terror ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_CONFUSE)) { stc ("Dconfuse ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_MAGIC)) { stc ("Magic", ch); count += 1; } if (count == 0) { stc ("None", ch); } stc ("\n\r", ch); count = 0; stc ("#w Young: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_TAIL)) { stc ("Tail", ch); } else stc ("None", ch); stc ("\n\r", ch); stc ("#w Juvenille: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_WINGS)) { stc ("Wings", ch); } else stc ("None", ch); stc ("\n\r", ch); stc ("#w Young Adult: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) { stc ("Frostbreath", ch); } else stc ("None", ch); stc ("\n\r", ch); stc ("#w Adult: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_POLYMORPH)) { stc ("Dpolymorph", ch); } else stc ("None", ch); stc ("\n\r", ch); stc ("#w Mature: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_LUCK)) { stc ("Luck ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_FLY)) { stc ("Dfly", ch); count += 1; } if (count == 0) { stc ("None", ch); } stc ("\n\r", ch); count = 0; stc ("#w Elder: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) { stc ("Lightningbreath", ch); } else stc ("None", ch); stc ("\n\r", ch); stc ("#w Venerable: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_MASK)) { stc ("Mask", ch); } else stc ("None", ch); stc ("\n\r", ch); stc ("#w Ancient: #nNo powers related to this age", ch); stc ("\n\r", ch); stc ("#w Lesser Wyrm: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) { stc ("Firebreath", ch); } else stc ("None", ch); stc ("\n\r", ch); stc ("#wGreater Wyrm: #nNo powers related to this age", ch); stc ("\n\r", ch); stc ("#w Supreme: #n", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) { stc ("Acidbreath ", ch); count += 1; } if (IS_SET (ch->pcdata->dragonaff, DRA_TOUGHNESS)) { stc ("Scales", ch); count += 1; } if (count == 0) { stc ("None", ch); } count = 0; if (GET_AGE(ch) > YOUNG) { stc ("\n\r\n\rYou can use drackform to become stronger", ch); } stc ("\n\rTo use the different breath types:", ch); stc ("\n\rType 'dbreath acid gas lightning frost fire' <can use any 5>\n\r", ch); stc ("#g================================================================================#n\n\r", ch); return; } // Dragon Channel void do_dragtalk (CHAR_DATA * ch, char *argument) { char buf[MSL]; CHAR_DATA *vch; if (!IS_CLASS (ch, CLASS_DRAGON) && !IS_IMMORTAL (ch)) { do_huh (ch, ""); return; } if (argument[0] == '\0') { stc ("Roar what??\n\r", ch); return; } if (IS_SET (ch->extra2, DEAF_ROAR)) REMOVE_BIT (ch->extra2, DEAF_ROAR); if (!IS_NPC (ch) && IS_SET (ch->act, PLR_SILENCE)) { sprintf (buf, "You can't roar because you are silenced.\n\r"); send_to_char (buf, ch); return; } if (is_advertisement(argument)) adv_alert(ch, "roar", argument); for (vch = char_list; vch; vch = vch->next) { if (IS_NPC (vch) || !vch->desc || (!IS_IMMORTAL (vch) && !IS_CLASS (vch, CLASS_DRAGON))) continue; if (IS_SET (vch->extra2, DEAF_ROAR)) continue; sprintf (buf, "#g(#w=#g)#gROAR#g(#w=#g)#w %s: #g%s#n\n\r", PERS2 (ch, vch), bash_color (argument)); stc (buf, vch); } } void do_drackform (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_DRAGON)) { stc ("Huh?\n\r", ch); return; } if (GET_AGE(ch) < YOUNG) { stc ("You need to be at least a young dragon to use this.\n\r", ch); return; } if (IS_SET (ch->extra, EXTRA_DRAGON)) { stc ("You only can get outa vampire dragon form with dragon.\n\r", ch); return; } if (IS_POLYAFF (ch, POLY_DRAGON)) { REMOVE_BIT (ch->polyaff, POLY_DRAGON); REMOVE_BIT (ch->affected_by, AFF_POLYMORPH); act ("You transform into human form.", ch, NULL, NULL, TO_CHAR); act ("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM); // ch->damroll -= GET_AGE(ch) * 40; // ch->hitroll -= GET_AGE(ch) * 40; // clear_stats(ch); free_string (ch->morph); ch->morph = str_dup (""); return; } else if (IS_AFFECTED (ch, AFF_POLYMORPH)) { send_to_char ("You cant drackform when changed.\n\r", ch); return; } if (ch->stance[0] != -1) do_stance (ch, ""); if (ch->mounted == IS_RIDING) do_dismount (ch, ""); /* switch(ch->pcdata->disc_a[DRAGON_COLOR]) { case 1: sprintf(buf, "%s the huge #rred#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 2: sprintf(buf, "%s the huge #ggreen#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 3: sprintf(buf, "%s the huge #bblue#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 4: sprintf(buf, "%s the huge #yyellow#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 5: sprintf(buf, "%s the huge #esilver#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 6: sprintf(buf, "%s the huge #wwhite#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 7: sprintf(buf, "%s the huge #eblack#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 8: sprintf(buf, "%s the huge #Ogold#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 9: sprintf(buf, "%s the huge #es#wh#ea#wd#eo#ww#n dragon", ch->name); free_string( ch->morph ); ch->morph = str_dup( buf ); break; } */ sprintf (buf, "%s the huge %s Dragon#n", ch->name, dcolor[ch->pcdata->disc_a[DRAGON_COLOR]]); free_string (ch->morph); ch->morph = str_dup (buf); act ("You transform into a huge dragon.", ch, NULL, NULL, TO_CHAR); act ("$n's body grows and distorts into a huge dragon.", ch, NULL, NULL, TO_ROOM); SET_BIT (ch->polyaff, POLY_DRAGON); SET_BIT (ch->affected_by, AFF_POLYMORPH); //ch->damroll += GET_AGE(ch) * 40; //ch->hitroll += GET_AGE(ch) * 40; return; } void do_hatch (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; argument = one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_IMMORTAL (ch)) { if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?\n\r", ch); return; } if (GET_AGE(ch) < SUPREME) { send_to_char ("You must be a supreme dragon to create hatchlings.\n\r", ch); return; } if (ch->pcdata->hatch > 2 && ch->pcdata->stats[UNI_GEN] > 2) { send_to_char ("You have already created 2 hatchlings.\n\r", ch); return; } } if (arg[0] == '\0') { send_to_char ("Hatch whom?\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 (ch == victim) { send_to_char ("You cannot hatch yourself.\n\r", ch); return; } if (!IS_IMMUNE (victim, IMM_DEMON)) { send_to_char ("Not on an unwilling person.\n\r", ch); return; } if (victim->level != LEVEL_AVATAR && !IS_IMMORTAL (victim)) { send_to_char ("You can only hatch a dragon from avatars.\n\r", ch); return; } clear_stats(victim); if (victim->max_hit < 20000) { stc("They Dont have enough HIT POINTS (20k Required)\n\r", ch); return; } if ((victim->mkill < 10000) && !IS_NPC (victim)) { stc ("You cannot hatch them until they have killed 10,000 mobs.\n\r",ch); stc ("You cannot be hatched until you have 10,000 mkills.\n\r",victim); return; } if (victim->class != 0) { stc ("They already have a class!\n\r", ch); return; } act ("You consume $N's essence and hatch a new egg!", ch, NULL, victim, TO_CHAR); act ("$n consume $N's essence and hatch a new egg!", ch, NULL, victim, TO_NOTVICT); act ("$n consumes your essence and makes you a dragon!", ch, NULL, victim, TO_VICT); victim->class = 0; victim->class = CLASS_DRAGON; victim->pcdata->dragonage = 1; victim->special = 0; victim->level = LEVEL_AVATAR; victim->pcdata->disc_a[DRAGON_COLOR] = number_range (1, 9); ch->pcdata->hatch += 1; save_char_obj (ch); save_char_obj (victim); return; } void do_dgain (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; int count = 1; argument = one_argument (argument, arg); if (IS_SET (ch->pcdata->dragonaff, DRA_WINGS)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_FANGS)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_LICK)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_TAIL)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_TERROR)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_CONFUSE)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_MASK)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_MAGIC)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_POLYMORPH)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_LUCK)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_FLY)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_SCRY)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_PEER)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_TRUESIGHT)) count += 1; if (IS_SET (ch->pcdata->dragonaff, DRA_TOUGHNESS)) count += 1; if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?!?\n\r", ch); return; } if (arg[0] == '\0') { int x = 0; send_to_char ("Valid choices are: ALL(shows skills learned)\n\r", ch); if ((!IS_SET (ch->pcdata->dragonaff, DRA_WINGS)) && GET_AGE(ch) >= JUVENILE) { send_to_char ("Wings,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_SCRY)) { send_to_char (" Scry,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TRUESIGHT)) { send_to_char (" Sight,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_PEER)) { send_to_char (" Peer,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_FANGS)) { send_to_char (" Fangs,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_LICK)) { send_to_char (" Lick,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH) && GET_AGE(ch) >= YOUNG_ADULT) { send_to_char (" FrostBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH) && GET_AGE(ch) >= LESSER_WYRM) { send_to_char (" FireBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH) && GET_AGE(ch) >= ELDER) { send_to_char (" LightningBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH) && GET_AGE(ch) >= SUPREME) { send_to_char (" AcidBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { send_to_char (" GasBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TAIL) && GET_AGE(ch) >= YOUNG) { send_to_char (" Tail,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TERROR)) { send_to_char (" Terror,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_CONFUSE)) { send_to_char (" Confuse,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_MASK) && GET_AGE(ch) >= VENERABLE) { send_to_char (" Mask,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_MAGIC)) { send_to_char (" Magic,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_POLYMORPH) && GET_AGE(ch) >= ADULT) { send_to_char (" Polymorph,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_LUCK) && GET_AGE(ch) >= MATURE) { send_to_char (" Luck,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_FLY) && GET_AGE(ch) >= MATURE) { send_to_char (" Fly,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TOUGHNESS) && GET_AGE(ch) >= SUPREME) { send_to_char (" Scales,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } send_to_char ("\n\r", ch); send_to_char ("Some are only avaiable after a certain age. Check helps for ages.\n\r", ch); return; } else if (!str_cmp (arg, "all")) { int x = 0; send_to_char ("You have the folowing dragon powers:\n\r", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_WINGS)) { send_to_char ("Wings,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_FLY)) { send_to_char (" Fly,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_TRUESIGHT)) { send_to_char (" Truesight,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_PEER)) { send_to_char (" Peer,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_FANGS)) { send_to_char (" Fangs,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_SCRY)) { send_to_char (" Scry,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_LICK)) { send_to_char (" Lick,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) { send_to_char (" FrostBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) { send_to_char (" FireBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) { send_to_char (" LightningBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) { send_to_char (" AcidBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { send_to_char (" GasBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_TAIL)) { send_to_char (" Tail,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_TERROR)) { send_to_char (" Terror,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_CONFUSE)) { send_to_char (" Confuse,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_MASK)) { send_to_char (" Mask,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_MAGIC)) { send_to_char (" Magic,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_POLYMORPH)) { send_to_char (" Polymorph,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (IS_SET (ch->pcdata->dragonaff, DRA_LUCK)) { send_to_char (" Luck,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TOUGHNESS)) { send_to_char (" Scales,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } send_to_char ("\n\r", ch); return; } else if (!str_cmp (arg, "wings")) { if (IS_SET (ch->pcdata->dragonaff, DRA_WINGS)) { send_to_char ("You already have your wings.\n\r", ch); return; } if (GET_AGE(ch) < JUVENILE) { send_to_char ("You must be a juvenile dragon to learn this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); return; } ch->exp -= count * 50000; send_to_char ("You now have your wings.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_WINGS); return; } else if (!str_cmp (arg, "sight")) { if (IS_SET (ch->pcdata->dragonaff, DRA_TRUESIGHT)) { send_to_char ("You already have sight beyond sight.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); return; } ch->exp -= count * 50000; send_to_char ("You now have sight beyond sight.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_TRUESIGHT); return; } else if (!str_cmp (arg, "fangs")) { if (IS_SET (ch->pcdata->dragonaff, DRA_FANGS)) { send_to_char ("You already have your fangs.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now have your fangs.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_FANGS); return; } else if (!str_cmp (arg, "lick")) { if (IS_SET (ch->pcdata->dragonaff, DRA_LICK)) { send_to_char ("You already can can heal your wounds by licking 'em.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can heal your wounds by licking them.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_LICK); return; } else if (!str_cmp (arg, "frostbreath")) { if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) { send_to_char ("You already can breathe frost.\n\r", ch); return; } if (GET_AGE(ch) < YOUNG_ADULT) { send_to_char ("You must be a young adult dragon to learn this skill.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can breathe frost.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_FROST_BREATH); return; } else if (!str_cmp (arg, "firebreath")) { if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) { send_to_char ("You already can breathe fire.\n\r", ch); return; } if (GET_AGE(ch) < LESSER_WYRM) { send_to_char ("You must be a lesser wyrm to learn this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can breathe fire.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_FIRE_BREATH); return; } else if (!str_cmp (arg, "lightningbreath")) { if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) { send_to_char ("You already can breathe lightning.\n\r", ch); return; } if (GET_AGE(ch) < ELDER) { send_to_char ("You mus be a mature dragon adult to learn this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can breathe lightning.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH); return; } else if (!str_cmp (arg, "acidbreath")) { if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) { send_to_char ("You already can breathe acid.\n\r", ch); return; } if (GET_AGE(ch) < SUPREME) { send_to_char ("You mus be a supreme dragon to learn this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can breathe acid.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_ACID_BREATH); return; } else if (!str_cmp (arg, "gasbreath")) { if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { send_to_char ("You already can breathe gas.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can breathe gas.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_GAS_BREATH); return; } else if (!str_cmp (arg, "tail")) { if (IS_SET (ch->pcdata->dragonaff, DRA_TAIL)) { send_to_char ("You already can use your tail to attack.\n\r", ch); return; } if (GET_AGE(ch) < YOUNG) { send_to_char ("You must be a young dragon to learn this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can use your tail to attack.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_TAIL); return; } else if (!str_cmp (arg, "terror")) { if (IS_SET (ch->pcdata->dragonaff, DRA_TERROR)) { send_to_char ("You already inspire terror in mobs.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now inspire terror in mobs.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_TERROR); return; } else if (!str_cmp (arg, "confuse")) { if (IS_SET (ch->pcdata->dragonaff, DRA_CONFUSE)) { send_to_char ("You already can confuse your targets.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can confuse your targets.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_CONFUSE); return; } else if (!str_cmp (arg, "mask")) { if (IS_SET (ch->pcdata->dragonaff, DRA_MASK)) { send_to_char ("You already can mask people.\n\r", ch); return; } if (GET_AGE(ch) < VENERABLE) { send_to_char ("You must be a venerable dragon to learn this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can mask other people.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_MASK); return; } else if (!str_cmp (arg, "scry")) { if (IS_SET (ch->pcdata->dragonaff, DRA_SCRY)) { send_to_char ("You already can see people who are far away.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You can now see people who are far away.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_SCRY); return; } else if (!str_cmp (arg, "polymorph")) { if (IS_SET (ch->pcdata->dragonaff, DRA_POLYMORPH)) { send_to_char ("You already can polymorph.\n\r", ch); return; } if (GET_AGE(ch) < ADULT) { send_to_char ("You must be an adult dragon to learn this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can polymorph.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_POLYMORPH); return; } else if (!str_cmp (arg, "luck")) { if (IS_SET (ch->pcdata->dragonaff, DRA_LUCK)) { send_to_char ("You already have extra luck.\n\r", ch); return; } if (GET_AGE(ch) < MATURE) { send_to_char ("You must be a mature dragon to learn this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now have extra luck.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_LUCK); return; } else if (!str_cmp (arg, "fly")) { if (IS_SET (ch->pcdata->dragonaff, DRA_FLY)) { send_to_char ("You already can fly to targets.\n\r", ch); return; } if (GET_AGE(ch) < MATURE) { send_to_char ("You have to be at least a mature dragon to get this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now can fly to people.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_FLY); return; } else if (!str_cmp (arg, "scales")) { if (IS_SET (ch->pcdata->dragonaff, DRA_TOUGHNESS)) { send_to_char ("Your scales are already very tough.\n\r", ch); return; } if (GET_AGE(ch) < SUPREME) { send_to_char ("You have to be at least a supreme dragon to get this power.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("Your scales now are tougher than ever.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_TOUGHNESS); return; } else if (!str_cmp (arg, "peer")) { if (IS_SET (ch->pcdata->dragonaff, DRA_PEER)) { send_to_char ("You already can see people's stats.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; SET_BIT (ch->pcdata->dragonaff, DRA_PEER); send_to_char ("You now can see other people's stats.\n\r", ch); return; } else if (!str_cmp (arg, "magic")) { if (IS_SET (ch->pcdata->dragonaff, DRA_MAGIC)) { send_to_char ("You already have magic control.\n\r", ch); return; } if (ch->exp < count * 50000) { sprintf (buf, "You need %d exp.\n\r", count * 50000); send_to_char (buf, ch); return; } ch->exp -= count * 50000; send_to_char ("You now have great magical control.\n\r", ch); SET_BIT (ch->pcdata->dragonaff, DRA_MAGIC); return; } else { int x = 0; send_to_char ("Valid choices are:\n\r", ch); if (!IS_SET (ch->pcdata->dragonaff, DRA_WINGS) && GET_AGE(ch) >= JUVENILE) { send_to_char ("Wings,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_FLY) && GET_AGE(ch) >= MATURE) { send_to_char (" Fly,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TRUESIGHT)) { send_to_char (" Truesight,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_SCRY)) { send_to_char (" Scry,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_FANGS)) { send_to_char (" Fangs,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_LICK)) { send_to_char (" Lick,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH) && GET_AGE(ch) >= SUPREME) { send_to_char (" FrostBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH) && GET_AGE(ch) >= LESSER_WYRM) { send_to_char (" FireBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH) && GET_AGE(ch) >= ADULT) { send_to_char (" LightningBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH) && GET_AGE(ch) >= YOUNG) { send_to_char (" AcidBreath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { send_to_char (" Gas Breath,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_PEER)) { send_to_char (" Peer,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TAIL) && GET_AGE(ch) >= YOUNG) { send_to_char (" Tail,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TERROR)) { send_to_char (" Terror,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_CONFUSE)) { send_to_char (" Confuse,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_MASK) && GET_AGE(ch) >= VENERABLE) { send_to_char ("Mask,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_MAGIC)) { send_to_char (" Magic,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_POLYMORPH) && GET_AGE(ch) >= ADULT) { send_to_char (" Polymorph,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_LUCK) && GET_AGE(ch) >= MATURE) { send_to_char (" Luck,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } if (!IS_SET (ch->pcdata->dragonaff, DRA_TOUGHNESS) && GET_AGE(ch) >= SUPREME) { send_to_char (" Scales,", ch); x++; if (x > 5) { send_to_char ("\n\r", ch); x = 0; } } send_to_char ("\n\r", ch); send_to_char ("Some are only avaiable after a certain age. Check helps for ages.\n\r", ch); return; } return; } void do_dbreath (CHAR_DATA * ch, char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char arg3[MAX_INPUT_LENGTH]; char arg4[MAX_INPUT_LENGTH]; char arg5[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; if (IS_NPC (ch)) return; buf[0] = '\0'; argument = one_argument (argument, arg1); argument = one_argument (argument, arg2); argument = one_argument (argument, arg3); argument = one_argument (argument, arg4); argument = one_argument (argument, arg5); if (!IS_IMMORTAL (ch)) { if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?!?\n\r", ch); return; } } if (arg1[0] == '\0') { send_to_char ("You can breathe the following types:\n\r", ch); if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) strcat (buf, "gas "); if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) strcat (buf, "lightning "); if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) strcat (buf, "frost "); if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) strcat (buf, "fire "); if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) strcat (buf, "acid"); strcat (buf, "\n\r"); send_to_char (buf, ch); sprintf (buf, "Your breaths are set to %s %s %s %s %s.\n\r", ch->pcdata->breath[0], ch->pcdata->breath[1], ch->pcdata->breath[2], ch->pcdata->breath[3], ch->pcdata->breath[4]); stc (buf, ch); return; } else if (!str_cmp (arg1, "gas") && IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { free_string (ch->pcdata->breath[0]); ch->pcdata->breath[0] = str_dup ("gas"); send_to_char ("You now breathe gas in battle.\n\r", ch); } else if (!str_cmp (arg1, "lightning") && IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) { free_string (ch->pcdata->breath[0]); ch->pcdata->breath[0] = str_dup ("lightning"); send_to_char ("You now breathe lightning in battle.\n\r", ch); } else if (!str_cmp (arg1, "frost") && IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) { free_string (ch->pcdata->breath[0]); ch->pcdata->breath[0] = str_dup ("frost"); send_to_char ("You now breathe frost in battle.\n\r", ch); } else if (!str_cmp (arg1, "fire") && IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) { free_string (ch->pcdata->breath[0]); ch->pcdata->breath[0] = str_dup ("fire"); send_to_char ("You now breathe fire in battle.\n\r", ch); } else if (!str_cmp (arg1, "acid") && IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) { free_string (ch->pcdata->breath[0]); ch->pcdata->breath[0] = str_dup ("acid"); send_to_char ("You now breathe acid in battle.\n\r", ch); } else { send_to_char ("You can breathe the following types:\n\r", ch); buf[0] = '\0'; if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) strcat (buf, "gas "); if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) strcat (buf, "lightning "); if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) strcat (buf, "frost "); if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) strcat (buf, "fire "); if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) strcat (buf, "acid"); strcat (buf, "\n\r"); send_to_char (buf, ch); return; } if (arg2[0] == '\0') { free_string (ch->pcdata->breath[1]); free_string (ch->pcdata->breath[2]); free_string (ch->pcdata->breath[3]); free_string (ch->pcdata->breath[4]); ch->pcdata->breath[1] = str_dup (""); ch->pcdata->breath[2] = str_dup (""); ch->pcdata->breath[3] = str_dup (""); ch->pcdata->breath[4] = str_dup (""); return; } else if (!str_cmp (arg2, "gas") && IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { free_string (ch->pcdata->breath[1]); ch->pcdata->breath[1] = str_dup ("gas"); send_to_char ("You now breathe gas in battle.\n\r", ch); } else if (!str_cmp (arg2, "lightning") && IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) { free_string (ch->pcdata->breath[1]); ch->pcdata->breath[1] = str_dup ("lightning"); send_to_char ("You now breathe lightning in battle.\n\r", ch); } else if (!str_cmp (arg2, "frost") && IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) { free_string (ch->pcdata->breath[1]); ch->pcdata->breath[1] = str_dup ("frost"); send_to_char ("You now breathe frost in battle.\n\r", ch); } else if (!str_cmp (arg2, "fire") && IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) { free_string (ch->pcdata->breath[1]); ch->pcdata->breath[1] = str_dup ("fire"); send_to_char ("You now breathe fire in battle.\n\r", ch); } else if (!str_cmp (arg2, "acid") && IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) { free_string (ch->pcdata->breath[1]); ch->pcdata->breath[1] = str_dup ("acid"); send_to_char ("You now breathe acid in battle.\n\r", ch); } else { send_to_char ("You can breathe the following types:\n\r", ch); buf[0] = '\0'; if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) strcat (buf, "gas "); if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) strcat (buf, "lightning "); if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) strcat (buf, "frost "); if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) strcat (buf, "fire "); if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) strcat (buf, "acid"); strcat (buf, "\n\r"); send_to_char (buf, ch); return; } if (arg3[0] == '\0') { free_string (ch->pcdata->breath[2]); free_string (ch->pcdata->breath[3]); free_string (ch->pcdata->breath[4]); ch->pcdata->breath[2] = str_dup (""); ch->pcdata->breath[3] = str_dup (""); ch->pcdata->breath[4] = str_dup (""); return; } else if (!str_cmp (arg3, "gas") && IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { free_string (ch->pcdata->breath[2]); ch->pcdata->breath[2] = str_dup ("gas"); send_to_char ("You now breathe gas in battle.\n\r", ch); } else if (!str_cmp (arg3, "lightning") && IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) { free_string (ch->pcdata->breath[2]); ch->pcdata->breath[2] = str_dup ("lightning"); send_to_char ("You now breathe lightning in battle.\n\r", ch); } else if (!str_cmp (arg3, "frost") && IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) { free_string (ch->pcdata->breath[2]); ch->pcdata->breath[2] = str_dup ("frost"); send_to_char ("You now breathe frost in battle.\n\r", ch); } else if (!str_cmp (arg3, "fire") && IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) { free_string (ch->pcdata->breath[2]); ch->pcdata->breath[2] = str_dup ("fire"); send_to_char ("You now breathe fire in battle.\n\r", ch); } else if (!str_cmp (arg3, "acid") && IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) { free_string (ch->pcdata->breath[2]); ch->pcdata->breath[2] = str_dup ("acid"); send_to_char ("You now breathe acid in battle.\n\r", ch); } else { send_to_char ("You can breathe the following types:\n\r", ch); buf[0] = '\0'; if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) strcat (buf, "gas "); if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) strcat (buf, "lightning "); if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) strcat (buf, "frost "); if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) strcat (buf, "fire "); if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) strcat (buf, "acid"); strcat (buf, "\n\r"); send_to_char (buf, ch); return; } if (arg4[0] == '\0') { free_string (ch->pcdata->breath[3]); free_string (ch->pcdata->breath[4]); ch->pcdata->breath[3] = str_dup (""); ch->pcdata->breath[4] = str_dup (""); return; } else if (!str_cmp (arg4, "gas") && IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { free_string (ch->pcdata->breath[3]); ch->pcdata->breath[3] = str_dup ("gas"); send_to_char ("You now breathe gas in battle.\n\r", ch); } else if (!str_cmp (arg4, "lightning") && IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) { free_string (ch->pcdata->breath[3]); ch->pcdata->breath[3] = str_dup ("lightning"); send_to_char ("You now breathe lightning in battle.\n\r", ch); } else if (!str_cmp (arg4, "frost") && IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) { free_string (ch->pcdata->breath[3]); ch->pcdata->breath[3] = str_dup ("frost"); send_to_char ("You now breathe frost in battle.\n\r", ch); } else if (!str_cmp (arg4, "fire") && IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) { free_string (ch->pcdata->breath[3]); ch->pcdata->breath[3] = str_dup ("fire"); send_to_char ("You now breathe fire in battle.\n\r", ch); } else if (!str_cmp (arg4, "acid") && IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) { free_string (ch->pcdata->breath[3]); ch->pcdata->breath[3] = str_dup ("acid"); send_to_char ("You now breathe acid in battle.\n\r", ch); } else { send_to_char ("You can breathe the following types:\n\r", ch); buf[0] = '\0'; if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) strcat (buf, "gas "); if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) strcat (buf, "lightning "); if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) strcat (buf, "frost "); if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) strcat (buf, "fire "); if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) strcat (buf, "acid"); strcat (buf, "\n\r"); send_to_char (buf, ch); return; } if (arg5[0] == '\0') { free_string (ch->pcdata->breath[4]); ch->pcdata->breath[4] = str_dup (""); return; } else if (!str_cmp (arg5, "gas") && IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) { free_string (ch->pcdata->breath[4]); ch->pcdata->breath[4] = str_dup ("gas"); send_to_char ("You now breathe gas in battle.\n\r", ch); } else if (!str_cmp (arg5, "lightning") && IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) { free_string (ch->pcdata->breath[4]); ch->pcdata->breath[4] = str_dup ("lightning"); send_to_char ("You now breathe lightning in battle.\n\r", ch); } else if (!str_cmp (arg5, "frost") && IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) { free_string (ch->pcdata->breath[4]); ch->pcdata->breath[4] = str_dup ("frost"); send_to_char ("You now breathe frost in battle.\n\r", ch); } else if (!str_cmp (arg5, "fire") && IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) { free_string (ch->pcdata->breath[4]); ch->pcdata->breath[4] = str_dup ("fire"); send_to_char ("You now breathe fire in battle.\n\r", ch); } else if (!str_cmp (arg5, "acid") && IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) { free_string (ch->pcdata->breath[4]); ch->pcdata->breath[4] = str_dup ("acid"); send_to_char ("You now breathe acid in battle.\n\r", ch); } else { send_to_char ("You can breathe the following types:\n\r", ch); buf[0] = '\0'; if (IS_SET (ch->pcdata->dragonaff, DRA_GAS_BREATH)) strcat (buf, "gas "); if (IS_SET (ch->pcdata->dragonaff, DRA_LIGHTNING_BREATH)) strcat (buf, "lightning "); if (IS_SET (ch->pcdata->dragonaff, DRA_FROST_BREATH)) strcat (buf, "frost "); if (IS_SET (ch->pcdata->dragonaff, DRA_FIRE_BREATH)) strcat (buf, "fire "); if (IS_SET (ch->pcdata->dragonaff, DRA_ACID_BREATH)) strcat (buf, "acid"); strcat (buf, "\n\r"); send_to_char (buf, ch); return; } } void do_lick (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; one_argument (argument, arg); if (!IS_IMMORTAL (ch)) { if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?!?\n\r", ch); return; } if (!IS_SET (ch->pcdata->dragonaff, DRA_LICK)) { send_to_char ("You haven't learned this skill yet.\n\r", ch); return; } } if (ch->fight_timer > 0) { stc ("Not until your fight timer has cleared.\n\r", ch); return; } if (ch->pcdata->condition[COND_FULL] < 30) { stc ("You need to eat more before you can use this.\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { send_to_char ("They aren't here.\n\r", ch); return; } if (victim->fight_timer > 0) { stc ("You are unable to lick them\n\r", ch); return; } if (victim->position == POS_FIGHTING) { stc ("You are unable to lick them\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Who's wounds do you want to heal?\n\r", ch); return; } victim->hit += number_range ((100 * GET_AGE(ch)), (200 * GET_AGE(ch))); victim->move += number_range ((100 * GET_AGE(ch)), (200 * GET_AGE(ch))); if (victim->hit > victim->max_hit) victim->hit = victim->max_hit; if (victim->move > victim->max_move) victim->move = victim->max_move; update_pos (victim); /* if (ch == victim) stc ("You heal your wounds!\n\r", ch); else act ("$n licks your wounds and heals you.", ch, NULL, victim, TO_VICT); act ("$n licks $N's wounds and heals $M.", ch, NULL,victim, TO_ROOM); act ("You lick $N's wounds and heal $M.", victim, NULL, victim, TO_CHAR); */ if ( victim == ch ) { send_to_char( "You heal your wounds.\n\r", ch ); act("$n heals $s wounds.",ch,NULL,NULL,TO_ROOM); } else { act ("You lick $N's wounds and $E is healed.", ch, NULL, victim, TO_CHAR); act ("$n licks your wounds and heals you.", ch, NULL, victim, TO_VICT); act ("$n licks $N's wounds and heals $M.", ch, NULL, victim, TO_ROOM); } gain_condition (ch, COND_FULL, -(number_range (10, 30))); WAIT_STATE (ch, 9); return; } void do_dconfuse (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; AFFECT_DATA af; one_argument (argument, arg); if (!IS_IMMORTAL (ch)) { if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?!?\n\r", ch); return; } if (!IS_SET (ch->pcdata->dragonaff, DRA_CONFUSE)) { send_to_char ("You haven't learned this skill yet.\n\r", ch); return; } } if (ch->pcdata->condition[COND_FULL] < 50) { stc ("You need to eat more before you can use this skill.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Confuse whom?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { send_to_char ("They aren't here.\n\r", ch); return; } act ("A look of concentration crosses $n face.", ch, NULL, victim, TO_ROOM); send_to_char ("You confuse them.\n\r", ch); act ("$n becomes confused.", victim, NULL, victim, TO_NOTVICT); af.type = gsn_curse; af.duration = 5; af.location = APPLY_HITROLL; af.modifier = -50; af.bitvector = 0; affect_to_char (victim, &af); af.location = APPLY_DAMROLL; af.modifier = -50; affect_to_char (victim, &af); gain_condition (ch, COND_FULL, -(number_range (40, 50))); WAIT_STATE (ch, 12); return; } void do_dpolymorph (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; /*AFFECT_DATA af; */ char buf[MAX_INPUT_LENGTH]; OBJ_DATA *obj; one_argument (argument, arg); if (!IS_IMMORTAL (ch)) { if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?!?\n\r", ch); return; } if (!IS_SET (ch->pcdata->dragonaff, DRA_POLYMORPH)) { send_to_char ("You haven't learned this skill yet.\n\r", ch); return; } } if (arg[0] == '\0') { send_to_char ("You can polymorph into the following forms:\n\r", ch); send_to_char ("Normal, Frog, Fish, Raven, Lizard, Stone.\n\r", ch); return; } else if (!str_cmp (arg, "normal")) { if (IS_SET (ch->extra, EXTRA_OSWITCH)) { if ((obj = ch->pcdata->chobj) == NULL) { send_to_char ("You are already in human form.\n\r", ch); return; } ch->pcdata->obj_vnum = 0; obj->chobj = NULL; ch->pcdata->chobj = NULL; REMOVE_BIT (ch->affected_by, AFF_POLYMORPH); REMOVE_BIT (ch->extra, EXTRA_OSWITCH); free_string (ch->morph); ch->morph = str_dup (""); act ("$p transforms into $n.", ch, obj, NULL, TO_ROOM); act ("You reform your human body.", ch, obj, NULL, TO_CHAR); extract_obj (obj); if (ch->in_room->vnum == ROOM_VNUM_IN_OBJECT) { char_from_room (ch); char_to_room (ch, get_room_index (ch->home)); } return; } else { act ("$n changes back to normal.", ch, NULL, NULL, TO_ROOM); send_to_char ("You polymorph back to normal.\n\r", ch); REMOVE_BIT (ch->affected_by, AFF_POLYMORPH); // REMOVE_BIT(ch->extra,EXTRA_OSWITCH); free_string (ch->morph); ch->morph = str_dup (""); } } else if (!str_cmp (arg, "frog")) { if (!IS_NPC (ch) && ch->stance[0] != -1) do_stance (ch, ""); send_to_char ("You polymorph into a frog!\n\r", ch); sprintf (buf, "%s the frog", ch->name); SET_BIT (ch->affected_by, AFF_POLYMORPH); free_string (ch->morph); ch->morph = str_dup (buf); return; } else if (!str_cmp (arg, "fish")) { act ("$n polymorphs into a fish!", ch, NULL, NULL, TO_ROOM); send_to_char ("You polymorph into a fish!\n\r", ch); SET_BIT (ch->affected_by, AFF_POLYMORPH); sprintf (buf, "%s the fish", ch->name); free_string (ch->morph); ch->morph = str_dup (buf); return; } else if (!str_cmp (arg, "raven")) { act ("$n polymorphs into a raven!", ch, NULL, NULL, TO_ROOM); send_to_char ("You polymorph into a raven!\n\r", ch); SET_BIT (ch->affected_by, AFF_POLYMORPH); sprintf (buf, "%s the raven", ch->name); free_string (ch->morph); ch->morph = str_dup (buf); return; } else if (!str_cmp (arg, "lizard")) { act ("$n polymorphs into a lizard!", ch, NULL, NULL, TO_ROOM); send_to_char ("You polymorph into a lizard!\n\r", ch); SET_BIT (ch->affected_by, AFF_POLYMORPH); sprintf (buf, "%s the lizard", ch->name); free_string (ch->morph); ch->morph = str_dup (buf); return; } else if (!str_cmp (arg, "stone")) { if ((obj = create_object (get_obj_index (5234), 60)) == NULL) { send_to_char ("Bug - Please inform an immortal.\n\r", ch); return; } if (ch->in_room->vnum == ROOM_VNUM_ALTAR) { stc ("Not in this room sorry!\n\r", ch); return; } if (IS_SET (ch->war, WARRING)) { stc ("Not while in a war!\n\r", ch); return; } if (IS_SET (ch->flag2, AFF2_INARENA)) { stc ("Not while you're in the arena.#n\n\r", ch); return; } if (ch->in_room->area->owned > 0 && ch->in_room->area->owned != ch->pcdata->kingdom) { stc ("Not in someone elses HQ\n\r", ch); return; } if (IS_SET (ch->polyaff, POLY_DRAGON)) { stc ("Not while you are in Drackform\n\r", ch); return; } if (ch->position == POS_FIGHTING) { stc ("NO way you are still fighting.\n\r", ch); return; } if (ch->fight_timer > 0) { stc ("Wait for your fight timer to clear first!\n\r", ch); return; } if (IS_SET (ch->extra, EXTRA_OSWITCH)) { stc ("You are already in stone form!\n\r", ch); return; } obj_to_room (obj, ch->in_room); act ("$n transforms into $p and falls to the ground.", ch, obj, NULL, TO_ROOM); act ("You transform into $p and fall to the ground.", ch, obj, NULL, TO_CHAR); ch->pcdata->obj_vnum = 5234; obj->chobj = ch; ch->pcdata->chobj = obj; SET_BIT (ch->affected_by, AFF_POLYMORPH); SET_BIT (ch->extra, EXTRA_OSWITCH); free_string (ch->morph); ch->morph = str_dup (obj->short_descr); return; } else { send_to_char ("You can polymorph into the following forms:\n\r", ch); send_to_char ("Normal, Frog, Fish, Raven, Lizard, Stone.\n\r", ch); return; } return; } void do_fly (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; CHAR_DATA *mount; one_argument (argument, arg); if (!IS_IMMORTAL (ch)) { if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?\n\r", ch); return; } if (!IS_SET (ch->pcdata->dragonaff, DRA_FLY)) { send_to_char ("You haven't learned this skill yet.\n\r", ch); return; } } if (arg[0] == '\0') { send_to_char ("Fly to whom?\n\r", ch); return; } if (ch->move < 500) { stc ("You are too exhausted.\n\r", ch); return; } if (ch->fight_timer > 0) { stc ("Wait for your fight timer to expire first!!\n\r", ch); return; } if (ch->position == POS_FIGHTING) { send_to_char ("No way! You are fighting.\n\r", ch); return; } if ((victim = get_char_world (ch, arg)) == NULL) { send_to_char ("Nobody by that name.\n\r", ch); return; } if IS_SET (victim->in_room->room_flags, ROOM_CCHAMBER) { stc ("You failed.\n\r", ch); return; } if (IS_NPC (victim) && IS_SET (victim->in_room->area->aflags, AFLAG_HQ)) { stc ("You failed.\n\r", ch); return; } if (victim->in_room == NULL) { stc ("You are already there!\n\r", ch); return; } if (victim == ch) { stc ("Not to yourself.\n\r", ch); return; } /* This code really does Suck --Matt if (number_range(1, 100) > 75) { send_to_char("You couldn't see your target.\r\n", ch); return; } */ if ((!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON)) || IS_SET (ch->in_room->room_flags, ROOM_PRIVATE) || IS_SET (ch->in_room->room_flags, ROOM_SOLITARY) || IS_SET (ch->in_room->room_flags, ROOM_NO_RECALL) || victim->level > 150 || IS_SET (victim->in_room->room_flags, ROOM_PRIVATE) || IS_SET (victim->in_room->room_flags, ROOM_SOLITARY) || IS_SET (victim->in_room->room_flags, ROOM_NO_RECALL) || victim->in_room->vnum == ch->in_room->vnum) { send_to_char ("You failed.\n\r", ch); return; } act ("You disappear up into the sky.", ch, NULL, NULL, TO_CHAR); act ("$n disappears up into the sky.", ch, NULL, NULL, TO_ROOM); char_from_room (ch); char_to_room (ch, get_room_index (victim->in_room->vnum)); act ("You swoop down and land infront of $N", ch, NULL, victim, TO_CHAR); act ("$n swoops down and lands infront of $N.", ch, NULL, victim, TO_ROOM); ch->move -= 500; do_look (ch, "auto"); if ((mount = victim->mount) == NULL) return; char_from_room (mount); char_to_room (mount, get_room_index (victim->in_room->vnum)); do_look (mount, "auto"); return; } void do_peer (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_IMMORTAL (ch)) { if (!IS_CLASS (ch, CLASS_DRAGON)) { send_to_char ("Huh?!?\n\r", ch); return; } if (!IS_SET (ch->pcdata->dragonaff, DRA_PEER)) { send_to_char ("You don't have the ability to know people's stats.\n\r", ch); return; } } if (arg[0] == '\0') { send_to_char ("Peer at who?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { if ((obj = get_obj_carry (ch, arg)) == NULL) { send_to_char ("Peer at what?\n\r", ch); return; } // act ("$n examines $p intently.", ch, obj, NULL, TO_ROOM); spell_identify (skill_lookup ("identify"), ch->level, ch, obj); return; } act ("$n examines $N intently.", ch, NULL, victim, TO_NOTVICT); act ("$n examines you intently.", ch, NULL, victim, TO_VICT); if (IS_NPC (victim)) sprintf (buf, "%s is an NPC.\n\r", victim->short_descr); else { if (victim->level == 12) sprintf (buf, "%s is an Implementor.\n\r", victim->name); else if (victim->level == 11) sprintf (buf, "%s is a High Judge.\n\r", victim->name); else if (victim->level == 10) sprintf (buf, "%s is a Judge.\n\r", victim->name); else if (victim->level == 9) sprintf (buf, "%s is an Enforcer.\n\r", victim->name); else if (victim->level == 8) sprintf (buf, "%s is a Quest Maker.\n\r", victim->name); else if (victim->level == 7) sprintf (buf, "%s is a Builder.\n\r", victim->name); else if (victim->level >= 3) sprintf (buf, "%s is an Avatar.\n\r", victim->name); else sprintf (buf, "%s is a Mortal.\n\r", victim->name); } send_to_char (buf, ch); if (!IS_NPC (victim)) { if (IS_CLASS (victim, CLASS_DEMON)) sprintf (buf, "%s is a Demon.\n\r", victim->name); if (IS_CLASS (victim, CLASS_MAGE)) sprintf (buf, "%s is a Mage.\n\r", victim->name); if (IS_CLASS (victim, CLASS_WEREWOLF)) sprintf (buf, "%s is a Werewolf.\n\r", victim->name); if (IS_CLASS (victim, CLASS_VAMPIRE)) sprintf (buf, "%s is a Vampire.\n\r", victim->name); if (IS_CLASS (victim, CLASS_HIGHLANDER)) sprintf (buf, "%s is a Highlander.\n\r", victim->name); if (IS_CLASS (victim, CLASS_DROW)) sprintf (buf, "%s is a Drow.\n\r", victim->name); if (IS_CLASS (victim, CLASS_NINJA)) sprintf (buf, "%s is a Ninja.\n\r", victim->name); if (IS_CLASS (victim, CLASS_MONK)) sprintf (buf, "%s is a Monk.\n\r", victim->name); if (IS_CLASS (victim, CLASS_DRAGON)) sprintf (buf, "%s is a Dragon.\n\r", victim->name); send_to_char (buf, ch); } if (!IS_NPC (victim)) { sprintf (buf, "Str:%d, Int:%d, Wis:%d, Dex:%d, Con:%d.\n\r", get_curr_str (victim), get_curr_int (victim), get_curr_wis (victim), get_curr_dex (victim), get_curr_con (victim)); send_to_char (buf, ch); } sprintf (buf, "Hp:%d/%d, Mana:%d/%d, Move:%d/%d.\n\r", victim->hit, victim->max_hit, victim->mana, victim->max_mana, victim->move, victim->max_move); send_to_char (buf, ch); sprintf (buf, "Hitroll:%d, Damroll:%d, AC:%d.\n\r", char_hitroll (victim), char_damroll (victim), char_ac (victim)); send_to_char (buf, ch); if (!IS_NPC (victim)) { sprintf (buf, "Status:%d, ", victim->race); send_to_char (buf, ch); if (IS_CLASS (victim, CLASS_VAMPIRE)) { sprintf (buf, "Blood:%d, ", victim->pcdata->condition[COND_THIRST]); send_to_char (buf, ch); } } sprintf (buf, "Alignment:%d.\n\r", victim->alignment); send_to_char (buf, ch); if (!IS_NPC (victim) && IS_EXTRA (victim, EXTRA_PREGNANT) && victim->sex == SEX_FEMALE) act ("$N is pregnant.", ch, NULL, victim, TO_CHAR); if (!IS_NPC (victim) && IS_CLASS (victim, CLASS_VAMPIRE)) { send_to_char ("Disciplines:", ch); if (IS_VAMPAFF (victim, VAM_PROTEAN)) send_to_char (" Protean", ch); if (IS_VAMPAFF (victim, VAM_VICISSITUDE)) send_to_char (" vicissitude", ch); if (IS_VAMPAFF (victim, VAM_CELERITY)) send_to_char (" Celerity", ch); if (IS_VAMPAFF (victim, VAM_FORTITUDE)) send_to_char (" Fortitude", ch); if (IS_VAMPAFF (victim, VAM_POTENCE)) send_to_char (" Potence", ch); if (IS_VAMPAFF (victim, VAM_OBFUSCATE)) send_to_char (" Obfuscate", ch); if (IS_VAMPAFF (victim, VAM_OBTENEBRATION)) send_to_char (" Obtenebration", ch); if (IS_VAMPAFF (victim, VAM_SERPENTIS)) send_to_char (" Serpentis", ch); if (IS_VAMPAFF (victim, VAM_AUSPEX)) send_to_char (" Auspex", ch); if (IS_VAMPAFF (victim, VAM_DOMINATE)) send_to_char (" Dominate", ch); if (IS_VAMPAFF (victim, VAM_PRESENCE)) send_to_char (" Presence", ch); send_to_char (".\n\r", ch); } return; } void do_consume (CHAR_DATA * ch, char *argument) { OBJ_DATA *corpse; // OBJ_DATA *c_next; OBJ_DATA *obj; OBJ_DATA *obj_next; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; int points; one_argument (argument, arg); if (!IS_CLASS (ch, CLASS_DRAGON)) return; corpse = get_obj_list (ch, arg, ch->in_room->contents); if (corpse == NULL) return; // for (corpse = ch->in_room->contents; corpse != NULL; corpse = c_next) // { // c_next = corpse->next_content; if (corpse->item_type != ITEM_CORPSE_NPC) // && corpse->item_type != ITEM_CORPSE_PC) // continue; return; points = number_range (5, 50 * (GET_AGE(ch) + 1)); ch->pcdata->stats[DEMON_CURRENT] += points; ch->pcdata->stats[DEMON_TOTAL] += points; act ("$n savagely devours a corpse.", ch, NULL, NULL, TO_ROOM); sprintf (buf, "You gain %d dragon points.\n\r", points); send_to_char (buf, ch); for (obj = corpse->contains; obj; obj = obj_next) { obj_next = obj->next_content; obj_from_obj (obj); obj_to_room (obj, ch->in_room); } if (corpse != NULL) extract_obj (corpse); // } return; } void do_gem (CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; if (!IS_CLASS (ch, CLASS_DRAGON)) { stc ("Huh?\n\r", ch); return; } if (IS_NPC (ch) || (ch->pcdata->stats[DEMON_CURRENT] < 100)) { send_to_char ("You are unable to make a gem.\n\r", ch); return; } if ((pObjIndex = get_obj_index (OBJ_VNUM_PROTOPLASM)) == NULL) { send_to_char ("Error...missing object, please inform a coder.\n\r", ch); return; } ch->pcdata->stats[DEMON_CURRENT] -= 100; ch->pcdata->stats[DEMON_TOTAL] -= 100; if (ch->pcdata->stats[DEMON_CURRENT] < 0) ch->pcdata->stats[DEMON_CURRENT] = 0; obj = create_object (pObjIndex, 100); obj->value[0] = 100; obj->level = 1; obj->cost = 100 * 1000; obj->item_type = ITEM_DRAGONGEM; obj_to_char (obj, ch); if (obj->questmaker != NULL) free_string (obj->questmaker); obj->questmaker = str_dup (ch->name); free_string (obj->name); obj->name = str_dup ("dragon gem"); sprintf (buf, "a dragon #rgem#n"); free_string (obj->short_descr); obj->short_descr = str_dup (buf); sprintf (buf, "A #wsparkling #rgem#n lies on the floor."); free_string (obj->description); obj->description = str_dup (buf); act ("You snap your fingers and reveal $p.", ch, obj, NULL, TO_CHAR); act ("$n snaps $s fingers and reveals $p.", ch, obj, NULL, TO_ROOM); return; } void dragon_sleep (CHAR_DATA * ch) { OBJ_DATA *obj; OBJ_DATA *obj_next; if (ch->pcdata->tick_timer[TIMER_DSLEEP] != 0) return; for (obj = ch->carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (obj->item_type == ITEM_DRAGONGEM) break; } if (obj != NULL) { do_eat (ch, obj->name); return; } else { do_sleep (ch, ""); send_to_char ("You fall into a deep sleep since you became so hungry.\n\r", ch); SET_TIMER (ch, TIMER_DSLEEP, 5); } return; } void do_dragonarmour (CHAR_DATA * ch, char *argument) { OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; char buf[MAX_STRING_LENGTH]; char arg1[MAX_INPUT_LENGTH]; argument = one_argument (argument, arg1); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_DRAGON)) { do_rand_typo (ch); return; } if (arg1[0] == '\0') { stc ("Syntax: Dragonarmour (Piece)\n\r", ch); stc ("Piece being one of: Ring Collar Jerkin Helmet\n\r", ch); stc (" Leggings Boots Gloves Armplates\n\r", ch); stc (" Cape Belt Bracer Visor Sword Dagger\n\r", ch); return; } if (ch->pcdata->stats[DEMON_CURRENT] < 5000 || ch->pcdata->quest < 1500) { stc ("You need 5000 power and 1500 quest points to create dragon armour\n\r", ch); return; } if ((pObjIndex = get_obj_index (OBJ_VNUM_PROTOPLASM)) == NULL) { send_to_char ("Error loading object. Please inform an Imp.\n\r", ch); return; } obj = create_object (pObjIndex, 60); obj->weight = 1; obj->condition = 100; obj->toughness = 100; SET_BIT (obj->quest, QUEST_RELIC); SET_BIT (obj->quest, QUEST_SPELLPROOF); SET_BIT (obj->extra_flags, ITEM_LOYAL); SET_BIT (obj->spectype, SITEM_DRAGON); FILL_STRING (obj->questmaker, ch->name); FILL_STRING (obj->questowner, ch->name); affect_to_obj (obj, -1, APPLY_HITROLL, 20); affect_to_obj (obj, -1, APPLY_DAMROLL, 20); if (!str_cmp (arg1, "ring")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_FINGER; FILL_STRING (obj->name, "ring dragon"); FILL_STRING (obj->short_descr, "a draconic ring"); FILL_STRING (obj->description, "A ring made from draconscales lies here."); obj->value[0] = 25; ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "collar")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_NECK; FILL_STRING (obj->name, "collar dragon"); FILL_STRING (obj->short_descr, "a draconic collar"); FILL_STRING (obj->description, "A collar made from draconscales lies here."); obj->value[0] = 25; ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "bracer")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_WRIST; FILL_STRING (obj->name, "bracer dragon"); FILL_STRING (obj->short_descr, "a draconic bracer"); FILL_STRING (obj->description, "A bracer made from draconscales lies here."); obj->value[0] = 25; ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "visor")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_FACE; FILL_STRING (obj->name, "visor dragon"); FILL_STRING (obj->short_descr, "a draconic visor"); FILL_STRING (obj->description, "A visor made from draconscales lies here."); obj->value[0] = 25; obj->value[3] = 5; /* Invisible */ ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "boots")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_FEET; FILL_STRING (obj->name, "boots dragon"); FILL_STRING (obj->short_descr, "a pair of draconic boots"); FILL_STRING (obj->description, "A pair of boots made from draconscales lies here."); obj->value[0] = 25; obj->value[3] = 12; /* Iceshield */ ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "jerkin")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_BODY; FILL_STRING (obj->name, "jerkin dragon"); FILL_STRING (obj->short_descr, "a draconic jerkin"); FILL_STRING (obj->description, "A jerkin made from draconscales lies here."); obj->value[0] = 25; ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "helmet")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_HEAD; FILL_STRING (obj->name, "helmet dragon"); FILL_STRING (obj->short_descr, "a draconic helmet"); FILL_STRING (obj->description, "A helmet made from draconscales lies here."); obj->value[0] = 25; obj->value[3] = 13; /* Acidshield */ ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "gloves")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_HANDS; FILL_STRING (obj->name, "gloves dragon"); FILL_STRING (obj->short_descr, "a pair of draconic gloves"); FILL_STRING (obj->description, "A a pair of gloves made from draconscales lies here."); obj->value[0] = 25; obj->value[3] = 7; /* Protection */ ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "belt")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_WAIST; FILL_STRING (obj->name, "belt dragon"); FILL_STRING (obj->short_descr, "a draconic belt"); FILL_STRING (obj->description, "A belt made from draconscales lies here."); obj->value[0] = 25; obj->value[3] = 10; /* Shockshield */ ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "cape")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_ABOUT; FILL_STRING (obj->name, "cape dragon"); FILL_STRING (obj->short_descr, "a draconic cape"); FILL_STRING (obj->description, "A cape made from draconscales lies here."); obj->value[0] = 25; obj->value[3] = 3; /* Fly */ ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "armplates")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_ARMS; FILL_STRING (obj->name, "armplates dragon"); FILL_STRING (obj->short_descr, "a pair of draconic armplates"); FILL_STRING (obj->description, "A pair of armplates made from draconscales lies here."); obj->value[0] = 25; obj->value[3] = 11; /* Fireshield */ ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "leggings")) { obj->item_type = ITEM_ARMOR; obj->wear_flags = ITEM_TAKE + ITEM_WEAR_LEGS; FILL_STRING (obj->name, "leggings dragon"); FILL_STRING (obj->short_descr, "a pair of draconic leggings"); FILL_STRING (obj->description, "A pair of leggings made from draconscales lies here."); obj->value[0] = 25; obj->value[3] = 8; /* Sanctuary */ ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "sword")) { obj->item_type = ITEM_WEAPON; obj->wear_flags = ITEM_TAKE + ITEM_WIELD; FILL_STRING (obj->name, "sword dragon"); FILL_STRING (obj->short_descr, "a draconic sword"); FILL_STRING (obj->description, "A draconic sword lies here."); obj->value[0] = 18000; /* vorpal */ obj->value[1] = 75; obj->value[2] = 150; obj->value[3] = 1; ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else if (!str_cmp (arg1, "dagger")) { obj->item_type = ITEM_WEAPON; obj->wear_flags = ITEM_TAKE + ITEM_WIELD; FILL_STRING (obj->name, "dagger dragon"); FILL_STRING (obj->short_descr, "a draconic dagger"); FILL_STRING (obj->description, "A draconic dagger lies here."); obj->value[1] = 75; obj->value[2] = 150; obj->value[3] = 11; ch->pcdata->stats[DEMON_TOTAL] -= 5000; ch->pcdata->stats[DEMON_CURRENT] -= 5000; ch->pcdata->quest -= 1500; obj->points += 1500; } else { do_dragonarmour (ch, ""); return; } sprintf (buf, "#r%s appears in your hands with a roar.\n\r", obj->short_descr); send_to_char (buf, ch); sprintf (buf, "#r%s appears in %s hands in with a roar.", obj->short_descr, ch->name); act (buf, ch, NULL, NULL, TO_ROOM); obj_to_char (obj, ch); WAIT_STATE (ch, 6); return; } void do_dragonarmor (CHAR_DATA * ch, char *argument) { char arg1[MAX_STRING_LENGTH]; char arg2[MAX_STRING_LENGTH]; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; int vnum = 0; int cost = 0; argument = one_argument (argument, arg1); argument = one_argument (argument, arg2); if (!IS_CLASS (ch, CLASS_DRAGON)) { stc ("Huh?\n\r", ch); return; } if (arg1[0] == '\0') { stc ("Usage: dragonarmor <green, black, blue, red> <piece>\n\r", ch); stc ("piece = Ring, Collar, Shirt, Helmet, Leggings, Boots, Gloves, Armblades, Cape, Belt, Bracer, Mask\n\r", ch); stc ("green costs 5,000 dps, black = 10,000 dps, blue = 15,000 dps, red = 20,000 dps.\n\r", ch); return; } if (arg2[0] == '\0') { stc ("Usage: dragonarmor <green, black, blue, red> <piece>\n\r", ch); stc ("piece = Ring, Collar, Shirt, Helmet, Leggings, Boots, Gloves, Armblades, Cape, Belt, Bracer, Mask\n\r", ch); stc ("green costs 5,000 dps, black = 10,000 dps, blue = 15,000 dps, red = 20,000 dps.\n\r", ch); return; } if (!str_cmp (arg1, "green") && !str_cmp (arg2, "ring")) { cost = 5000; vnum = 29724; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "collar")) { cost = 5000; vnum = 29725; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "shirt")) { cost = 5000; vnum = 29726; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "helmet")) { cost = 5000; vnum = 29727; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "leggings")) { cost = 5000; vnum = 29728; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "boots")) { cost = 5000; vnum = 29729; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "gloves")) { cost = 5000; vnum = 29730; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "armblades")) { cost = 5000; vnum = 29731; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "cape")) { cost = 5000; vnum = 29732; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "belt")) { cost = 5000; vnum = 29733; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "bracer")) { cost = 5000; vnum = 29734; } else if (!str_cmp (arg1, "green") && !str_cmp (arg2, "mask")) { cost = 5000; vnum = 29735; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "ring")) { cost = 10000; vnum = 29736; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "collar")) { cost = 10000; vnum = 29737; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "shirt")) { cost = 10000; vnum = 29738; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "helmet")) { cost = 10000; vnum = 29739; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "leggings")) { cost = 10000; vnum = 29740; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "boots")) { cost = 10000; vnum = 29741; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "gloves")) { cost = 10000; vnum = 29742; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "armblades")) { cost = 10000; vnum = 29743; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "cape")) { cost = 10000; vnum = 29744; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "belt")) { cost = 10000; vnum = 29745; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "bracer")) { cost = 10000; vnum = 29746; } else if (!str_cmp (arg1, "black") && !str_cmp (arg2, "mask")) { cost = 10000; vnum = 29747; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "ring")) { cost = 15000; vnum = 29748; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "collar")) { cost = 15000; vnum = 29749; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "shirt")) { cost = 15000; vnum = 29750; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "helmet")) { cost = 15000; vnum = 29751; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "leggings")) { cost = 15000; vnum = 29752; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "boots")) { cost = 15000; vnum = 29753; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "gloves")) { cost = 15000; vnum = 29754; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "armblades")) { cost = 15000; vnum = 29755; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "cape")) { cost = 15000; vnum = 29756; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "belt")) { cost = 15000; vnum = 29757; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "bracer")) { cost = 15000; vnum = 29758; } else if (!str_cmp (arg1, "blue") && !str_cmp (arg2, "mask")) { cost = 15000; vnum = 29759; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "ring")) { cost = 20000; vnum = 29760; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "collar")) { cost = 20000; vnum = 29761; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "shirt")) { cost = 20000; vnum = 29762; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "helmet")) { cost = 20000; vnum = 29763; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "leggings")) { cost = 20000; vnum = 29764; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "boots")) { cost = 20000; vnum = 29765; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "gloves")) { cost = 20000; vnum = 29766; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "armblades")) { cost = 20000; vnum = 29767; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "cape")) { cost = 20000; vnum = 29768; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "belt")) { cost = 20000; vnum = 29769; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "bracer")) { cost = 20000; vnum = 29770; } else if (!str_cmp (arg1, "red") && !str_cmp (arg2, "mask")) { cost = 20000; vnum = 29771; } else { stc ("Usage: dragonarmor <green, black, blue, red> <piece>\n\r", ch); stc ("piece = Ring, Collar, Shirt, Helmet, Leggings, Boots, Gloves, Armblades, Cape, Belt, Bracer, Mask\n\r", ch); stc ("green costs 5,000 dps, black = 10,000 dps, blue = 15,000 dps, red = 20,000 dps.\n\r", ch); return; } if (ch->pcdata->stats[DEMON_CURRENT] < cost) { stc ("You don't have enough dragon points.\n\r", ch); return; } if (vnum == 0 || (pObjIndex = get_obj_index (vnum)) == NULL) { send_to_char ("Missing object, please inform an Imp.\n\r", ch); return; } ch->pcdata->stats[DEMON_CURRENT] -= cost; ch->pcdata->stats[DEMON_TOTAL] -= cost; obj = create_object (pObjIndex, 50); obj_to_char (obj, ch); act ("$p appears in your hands.", ch, obj, NULL, TO_CHAR); act ("$p appears in $n's hands.", ch, obj, NULL, TO_ROOM); return; } /* void do_staredown( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; 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_DRAGON) ) { stc("Huh?\n\r",ch); return; } if ( ( victim = get_char_room( ch, arg) ) == NULL ) { stc("They aren't here.\n\r",ch); return; } arg[0] = UPPER(arg[0]); if ( ch->fighting == NULL ) { stc("You must be fighting to use the gift of Staredown.\n\r",ch); return; } if ( victim->fighting == NULL ) { sprintf(buf, "%s is not fighting anyone.", arg); stc(buf, ch); return; } WAIT_STATE( ch, 16 ); if ( IS_NPC(victim) ) { if ( number_range( 1, 3 ) != 1 ) { act("You stare deeply into $N's eyes, but nothing happens.",ch,NULL,victim,TO_CHAR); act("$n stares deeply into your eyes.",ch,NULL,victim,TO_VICT); act("$n stares deeply into $N's eyes, but nothing happens.",ch,NULL,victim,TO_NOTVICT); return; } act("You stare into $N's eyes, and $E flees in terror.",ch,NULL,victim,TO_CHAR); act("$n stares deeply into your eyes, and you are filled with terror.",ch,NULL,victim,TO_VICT); act("$n stares deeply into $N's eyes, and $E flees in terror.",ch,NULL,victim,TO_NOTVICT); do_flee( victim, "" ); return; } else { if ( number_range( 1, 4 ) != 2 ) { act("You stare deeply into $N's eyes, but nothing happens.",ch,NULL,victim,TO_CHAR); act("$n stares deeply into your eyes.",ch,NULL,victim,TO_VICT); act("$n stares deeply into $N's eyes, but nothing happens.",ch,NULL,victim,TO_NOTVICT); return; } act("You stare into $N's eyes, and $E flees in terror.",ch,NULL,victim,TO_CHAR); act("$n stares deeply into your eyes, and you are filled with terror.",ch,NULL,victim,TO_VICT); act("$n stares deeply into $N's eyes, and $E flees in terror.",ch,NULL,victim,TO_NOTVICT); do_flee( victim, "" ); return; } return; } */