/************************************************************ * * * Code by Sebeq for Eternal Darkness * * (C)June 2003 * * If you use this code please email me at * * Acadian_lord@hotmail.com incase you have some questions * * or you run across some bugs so i can modify the 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 "dragon.h" void do_drakform( CHAR_DATA *ch, char *argument) { char buf [MAX_STRING_LENGTH]; char AGE_STRING [MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if( !IS_CLASS(ch, CLASS_DRAGON)) { send_to_char( "Huh?\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->max_hit = (ch->max_hit - (ch->pcdata->powers[dragonage] * 250)); ch->hit = (ch->hit - (ch->pcdata->powers[dragonage] * 250)); if (ch->hit < 1) ch->hit = 1; ch->pcdata->powers[10] = ch->pcdata->powers[DRAGON_COLOR]; ch->damroll -= ch->pcdata->powers[dragonage] * 500; ch->hitroll -= ch->pcdata->powers[dragonage] * 500; ch->armor += ch->pcdata->powers[dragonage] * 750; free_string( ch->morph ); ch->morph = str_dup( "" ); return; } else if (IS_AFFECTED(ch,AFF_POLYMORPH)) { send_to_char("You cant demon form when changed.\n\r",ch); return; } if (ch->pcdata->powers[dragonage] == 1 ) sprintf(AGE_STRING,"Hatchling"); else if (ch->pcdata->powers[dragonage] == 2 ) sprintf(AGE_STRING,"Very Young"); else if (ch->pcdata->powers[dragonage] == 3 ) sprintf(AGE_STRING,"Young"); else if (ch->pcdata->powers[dragonage] == 4 ) sprintf(AGE_STRING,"Juvenile"); else if (ch->pcdata->powers[dragonage] == 5 ) sprintf(AGE_STRING,"Young Adult"); else if (ch->pcdata->powers[dragonage] == 6 ) sprintf(AGE_STRING,"Adult"); else if (ch->pcdata->powers[dragonage] == 7 ) sprintf(AGE_STRING,"Mature Adult"); else if (ch->pcdata->powers[dragonage] == 8 ) sprintf(AGE_STRING,"Old"); else if (ch->pcdata->powers[dragonage] == 9 ) sprintf(AGE_STRING,"Very Old"); else if (ch->pcdata->powers[dragonage] == 10 ) sprintf(AGE_STRING,"Elder"); else if (ch->pcdata->powers[dragonage] == 11 ) sprintf(AGE_STRING,"Venerable"); else if (ch->pcdata->powers[dragonage] == 12 ) sprintf(AGE_STRING,"Ancient"); else if (ch->pcdata->powers[dragonage] == 13 ) sprintf(AGE_STRING,"Immortal"); else return; switch(ch->pcdata->powers[DRAGON_COLOR]) { case 0: if (ch->pcdata->powers[10] == 0) { send_to_char("your character is bugged, please report this to imm.\n\r",ch); } break; case 1: sprintf(buf, "%s the %s #rRed#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 2: sprintf(buf, "%s the %s #gGreen#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 3: sprintf(buf, "%s the %s #lBlue#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 4: sprintf(buf, "%s the %s #oBronze#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 5: sprintf(buf, "%s the %s #cSilver#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 6: sprintf(buf, "%s the %s #wWhite#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 7: sprintf(buf, "%s the %s #0Black#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 8: sprintf(buf, "%s the %s #yGold#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 9: sprintf(buf, "%s the %s #0S#wh#0a#wd#0o#ww#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 10: sprintf(buf, "%s the %s #pP#Pur#ppl#Pe#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 11: sprintf(buf, "%s the %s #rC#eh#ra#eo#rs#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 12: sprintf(buf, "%s the %s #LS#la#Lp#lp#Lh#li#Lr#le#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 13: sprintf(buf, "%s the %s #GE#gm#Ge#gr#Ga#gl#Gd#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 14: sprintf(buf, "%s the %s #RR#ru#Rb#ry#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 15: sprintf(buf, "%s the %s #yT#oo#yp#oa#yz#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; default: sprintf(buf, "%s the %s invalid color Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; } 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 ); ch->pcdata->mod_str = 15; ch->pcdata->mod_dex = 15; SET_BIT(ch->polyaff, POLY_DRAGON); SET_BIT(ch->affected_by, AFF_POLYMORPH); ch->max_hit += ch->pcdata->powers[dragonage] * 250; ch->hit += ch->pcdata->powers[dragonage] * 250; ch->damroll += ch->pcdata->powers[dragonage] * 500; ch->hitroll += ch->pcdata->powers[dragonage] * 500; ch->armor -= ch->pcdata->powers[dragonage] * 750; 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( ch->pcdata->powers[dragonage] < D_ADULT) { send_to_char( "You must be an adult to create hatchlings.\n\r", ch ); return; } if( ch->pcdata->powers[hatch] >= 5) { send_to_char( "You have already created 5 hatchlings.\n\r", ch ); return; } if (!IS_CLASS(ch, CLASS_DRAGON)) { send_to_char( "Huh?\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 ( victim->level != LEVEL_AVATAR && !IS_IMMORTAL(victim) ) { send_to_char( "You can only hatch a dragon from avatars.\n\r", ch ); return; } if( IS_CLASS( victim, CLASS_DEMON ) ) { send_to_char( "You can't hatch a dragon from a Demon.\n\r", ch ); return; } if( IS_CLASS( victim, CLASS_MAGE ) ) { send_to_char( "You can't hatch a dragon from a Mage.\n\r", ch ); return; } if( IS_CLASS( victim, CLASS_WEREWOLF ) ) { send_to_char( "You can't hatch a dragon from a Werewolf.\n\r", ch ); return; } if( IS_CLASS( victim, CLASS_VAMPIRE ) ) { send_to_char( "You can't hatch a dragon from a Vampire.\n\r", ch ); return; } if( IS_CLASS( victim, CLASS_DROW ) ) { send_to_char( "You can't hatch a dragon from a Drow.\n\r", ch ); return; } if( IS_CLASS( victim, CLASS_NINJA ) ) { send_to_char( "You can't hatch a dragon from a Ninja.\n\r", ch ); return; } if( IS_CLASS( victim, CLASS_MONK ) ) { send_to_char( "You can't hatch a dragon from a Monk.\n\r", ch ); return; } if (ch->exp < 50000000 || ch->pcdata->stats[DEMON_CURRENT] < 5000000) { send_to_char("You need 50000000 exp and 5000000 dps to hatch a dragon.\n\r",ch); return; } if (victim->exp < 5000000) { send_to_char("You need 5000000 exp to be hatched.\n\r",victim); send_to_char("They need 5000000 exp to be hatched.\n\r",ch); return; } act("You consume $N's essence and hatch a new egg!", ch, NULL, victim, TO_CHAR); act("$n consumes $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->powers[dragonage] = 1; victim->pcdata->powers[DRAGON_COLOR] = ch->pcdata->powers[DRAGON_COLOR]; if ( ch->pcdata->powers[DRAGON_COLOR] == 0 ) victim->pcdata->powers[DRAGON_COLOR] = number_range (1, 15); victim->special=0; victim->level = LEVEL_AVATAR; victim->class = CLASS_DRAGON; ch->pcdata->powers[hatch] += 1; ch->pcdata->stats[DEMON_CURRENT] -= 5000000; ch->exp -= 50000000; victim->exp -= 5000000; 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_CLASS(ch, CLASS_DRAGON)) { stc("You're not a dragon!\n\r",ch); return; } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT )) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS)) count += 1; if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS)) count += 1; if( IS_NPC(ch) ) return; if( !IS_IMMORTAL(ch)) { 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->powers[DPOWER_FLAGS], DRA_WINGS ) && ch->pcdata->powers[dragonage] >= D_ADULT) { send_to_char( "Wings,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY ) ) { send_to_char( " Scry,", ch ); x++; if( x > 5){send_to_char("\n\r", ch);x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS ) ) { send_to_char( " Claws,", ch ); x++; if( x > 5){send_to_char("\n\r", ch);x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT ) ) { send_to_char(" Truesight,", ch ); x++; if(x>5){send_to_char("\n\r", ch);x=0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER ) ) { send_to_char( " Peer,", ch ); x++; if(x > 5){send_to_char("\n\r", ch);x=0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS ) ) { send_to_char( " Fangs,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK ) ) { send_to_char( " Lick,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ) && ch->pcdata->powers[dragonage] >= D_MATURE) { send_to_char( " FrostBreath,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH ) && ch->pcdata->powers[dragonage] >= D_JUVENILE) { send_to_char( " FireBreath,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH ) && ch->pcdata->powers[dragonage] >= D_YADULT ) { send_to_char( " LightningBreath,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH ) && ch->pcdata->powers[dragonage] >= D_VENERABLE ) { send_to_char( " AcidBreath,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], DRA_TAIL ) && ch->pcdata->powers[dragonage] >= D_YOUNG ) { send_to_char( " Tail,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR ) ) { send_to_char( " Terror,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE ) ) { send_to_char( " Confuse,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK ) && ch->pcdata->powers[dragonage] >= D_OLD ) { send_to_char( " Mask,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC ) ) { send_to_char( " Magic,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH ) && ch->pcdata->powers[dragonage] >= D_IMMORTAL ) { send_to_char( " Polymorph,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK ) && ch->pcdata->powers[dragonage] >= D_ADULT ) { send_to_char( " Luck,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY ) && ch->pcdata->powers[dragonage] >= D_ADULT ) { send_to_char( " Fly,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS) && ch->pcdata->powers[dragonage] >= D_ANCIENT) { 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->powers[DPOWER_FLAGS], DRA_WINGS )) { send_to_char( "Wings,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS ) ) { send_to_char( " Claws,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY ) ) { send_to_char( " Fly,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT ) ) { send_to_char(" Truesight,", ch ); x++; if(x>5){send_to_char("\n\r", ch);x=0;} } if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER ) ) { send_to_char( " Peer,", ch ); x++; if(x > 5){send_to_char("\n\r", ch);x=0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS )) { send_to_char( " Fangs,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY ) ) { send_to_char( " Scry,", ch ); x++; if( x > 5){send_to_char("\n\r", ch);x = 0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK )) { send_to_char( " Lick,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], DRA_TAIL )) { send_to_char( " Tail,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR )) { send_to_char( " Terror,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE )) { send_to_char( " Confuse,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK )) { send_to_char( " Mask,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC )) { send_to_char( " Magic,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH )) { send_to_char( " Polymorph,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if(IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK )) { send_to_char( " Luck,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], DRA_WINGS ) ) { send_to_char( "You already have your wings.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_ADULT ) { send_to_char( "You must be an adult dragon to learn this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d exp.\n\r", (count * 1000) ); return; } ch->exp -= (count * 1000); send_to_char( "You now have your wings.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS ); return; } else if( !str_cmp( arg, "truesight" ) ) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT )) { send_to_char( "You already have sight beyond sight.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now have sight beyond sight.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT ); return; } else if( !str_cmp( arg, "fangs" ) ) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS )) { send_to_char( "You already have your fangs.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now have your fangs.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS ); return; } else if( !str_cmp( arg, "claws" ) ) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS )) { send_to_char( "You already have your claws.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now have your claws.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS ); return; } else if( !str_cmp( arg, "lick" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK )) { send_to_char( "You already can can heal your wounds by licking 'em.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can heal your wounds by licking them.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK ); return; } else if( !str_cmp( arg, "frostbreath" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH )) { send_to_char( "You already can breath frost.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_MATURE ) { send_to_char( "You must be a mautre adult dragon to learn this skill.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can breath frost.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ); return; } else if( !str_cmp( arg, "firebreath" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH )) { send_to_char( "You already can breath fire.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_JUVENILE ) { send_to_char( "You must be a juvenile dragon to learn this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can breath fire.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH ); return; } else if( !str_cmp( arg, "lightningbreath" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH )) { send_to_char( "You already can breath lightning.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_YADULT ) { send_to_char( "You mus be a young dragon adult to learn this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can breath lightning.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH ); return; } else if( !str_cmp( arg, "acidbreath" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH )) { send_to_char( "You already can breath acid.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_VENERABLE ) { send_to_char( "You mus be a venerable dragon to learn this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can breath acid.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH ); return; } else if( !str_cmp( arg, "gasbreath" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH )) { send_to_char( "You already can breath gas.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can breath gas.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_GAS_BREATH ); return; } else if( !str_cmp( arg, "tail" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL )) { send_to_char( "You already can use your tail to attack.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_VYOUNG ) { send_to_char( "You must be a very young dragon to learn this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can use your tail to attack.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL ); return; } else if( !str_cmp( arg, "terror" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR )) { send_to_char( "You already inspire terror in mobs.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now inspire terror in mobs.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR ); return; } else if( !str_cmp( arg, "confuse" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE )) { send_to_char( "You already can confuse your targets.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can confuse your targets.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE ); return; } else if( !str_cmp( arg, "mask" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK )) { send_to_char( "You already can mask people.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_OLD ) { send_to_char( "You must be an old dragon to learn this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can mask other people.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK ); return; } else if( !str_cmp( arg, "scry" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY)) { send_to_char( "You already can see people who are far away.\n\r", ch); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You can now see people who are far away.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY ); return; } else if( !str_cmp( arg, "polymorph" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH )) { send_to_char( "You already can polymorph.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_IMMORTAL ) { send_to_char( "You must be an immortal dragon to learn this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can polymorph.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH ); return; } else if( !str_cmp( arg, "luck" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK )) { send_to_char( "You already have extra luck.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_ADULT ) { send_to_char( "You have to be at least an adult dragon to get this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now have extra luck.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK ); return; } else if( !str_cmp( arg, "fly" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY )) { send_to_char( "You already can fly to targets.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_ADULT ) { send_to_char( "You have to be at least an adult dragon to get this power.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now can fly to people.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY ); return; } else if( !str_cmp( arg, "scales")) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS )) { send_to_char( "Your scales are already very tough.\n\r", ch ); return; } if( ch->pcdata->powers[dragonage] < D_ANCIENT ) { send_to_char( "You have to be at least a great wyrm to get this power.\n\r", ch); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "Your scales now are tougher than ever.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS ); return; } else if( !str_cmp( arg, "peer" )) { if( IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_PEER )) { send_to_char( "You already can see people's stats.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); SET_BIT(ch->pcdata->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], DRA_MAGIC )) { send_to_char( "You already have magic control.\n\r", ch ); return; } if( ch->pcdata->stats[DEMON_CURRENT] < (count * 1000) ) { sprintf( buf, "You need %d dragon points\n\r", (count * 1000) ); send_to_char( buf, ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= (count * 1000); send_to_char( "You now have great magical control.\n\r", ch ); SET_BIT( ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC); return; } else { int x = 0; send_to_char( "Valid choices are:\n\r", ch ); if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_WINGS ) && ch->pcdata->powers[dragonage] >= D_ADULT) { send_to_char( "Wings,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FLY ) && ch->pcdata->powers[dragonage] >= D_ADULT ) { send_to_char( " Fly,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TRUESIGHT ) ) { send_to_char(" Truesight,", ch ); x++; if(x>5){send_to_char("\n\r", ch);x=0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_SCRY ) ) { send_to_char( " Scry,", ch ); x++; if( x > 5){send_to_char("\n\r", ch);x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS ) ) { send_to_char( " Fangs,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS ) ) { send_to_char( " Claws,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LICK ) ) { send_to_char( " Lick,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ) && ch->pcdata->powers[dragonage] >= D_MATURE) { send_to_char( " FrostBreath,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH ) && ch->pcdata->powers[dragonage] >= D_JUVENILE) { send_to_char( " FireBreath,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH ) && ch->pcdata->powers[dragonage] >= D_YADULT) { send_to_char( " LightningBreath,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH ) && ch->pcdata->powers[dragonage] >= D_VENERABLE ) { send_to_char( " AcidBreath,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], 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->powers[DPOWER_FLAGS], DRA_PEER ) ) { send_to_char( " Peer,", ch ); x++; if(x > 5){send_to_char("\n\r", ch);x=0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TAIL ) && ch->pcdata->powers[dragonage] >= D_YOUNG ) { send_to_char( " Tail,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TERROR ) ) { send_to_char( " Terror,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CONFUSE ) ) { send_to_char( " Confuse,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MASK ) && ch->pcdata->powers[dragonage] >= D_OLD ) { send_to_char( "Mask,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_MAGIC ) ) { send_to_char( " Magic,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_POLYMORPH ) && ch->pcdata->powers[dragonage] >= D_IMMORTAL ) { send_to_char( " Polymorph,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LUCK ) && ch->pcdata->powers[dragonage] >= D_ADULT ) { send_to_char( " Luck,", ch ); x++; if( x > 5 ){send_to_char( "\n\r", ch );x = 0;} } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_TOUGHNESS) && ch->pcdata->powers[dragonage] >= D_ANCIENT) { 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_deat(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; OBJ_DATA *obj; one_argument(argument, arg); if ( !IS_CLASS(ch, CLASS_DRAGON) ) send_to_char("huh?\n\r", ch); if (arg[0] == '\0') { send_to_char("Eat what?\n\r", ch); return; } if( str_cmp(arg, "gem") ) { send_to_char("only gems\n\r", ch); return; } if ((obj = get_obj_carry(ch, arg)) == NULL) { send_to_char("You do not have that item.\n\r", ch); return; } if (!IS_NPC(ch)) act("$n eats $p.", ch, obj, NULL, TO_ROOM); act("You eat $p.", ch, obj, NULL, TO_CHAR); ch->pcdata->stats[DEMON_CURRENT] += obj->value[0]; if (obj != NULL) extract_obj(obj); 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->powers[DPOWER_FLAGS], DRA_LICK) ) { send_to_char( "You haven't learned this skill yet.\n\r", ch ); return; } if(ch->hit <= 0) return; } if( arg[0] != '\0' ) { if ( ( victim = get_char_room( ch, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } } if( arg[0] == '\0' ) victim = ch; if (victim->loc_hp[6] > 0) { stc("Your wounds close up and stop bleeding.\n\r",victim); victim->loc_hp[6] = 0; } if ((victim->loc_hp[0] + victim->loc_hp[1] + victim->loc_hp[2] + victim->loc_hp[3] + victim->loc_hp[4] + victim->loc_hp[5]) != 0) { stc("Your bones mend themselves together and new limbs grow out of your body.\n\r",victim); victim->loc_hp[0] = 0; victim->loc_hp[1] = 0; victim->loc_hp[2] = 0; victim->loc_hp[3] = 0; victim->loc_hp[4] = 0; victim->loc_hp[5] = 0; } victim->hit += 250 * ch->pcdata->powers[dragonage]; victim->move += 250 * ch->pcdata->powers[dragonage]; victim->mana += 250 * ch->pcdata->powers[dragonage]; if( victim->hit > victim->max_hit ) victim->hit = victim->max_hit; if( victim->move > victim->max_move ) victim->move = victim->max_move; if( victim->mana > victim->max_mana ) victim->mana = victim->max_mana; update_pos(victim); act( "You lick $N's wounds and heal $M.",ch,NULL,victim,TO_CHAR); act( "$n licks your wounds and heals $M.",ch,NULL,victim,TO_VICT); act( "$n licks $N's wounds and heals $M.",ch,NULL,victim,TO_NOTVICT); gain_condition( ch, COND_FULL, -(number_range(10,30))); WAIT_STATE(ch,6); 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->powers[DPOWER_FLAGS], DRA_CONFUSE) ) { send_to_char( "You haven't learned this skill yet.\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; } 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_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->powers[DPOWER_FLAGS], 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->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( victim == ch ) { stc( "Not to yourself.\n\r",ch); return; } if ( !IS_IMMUNE(victim, IMM_SUMMON) && !IS_NPC(victim) && !IS_IMMORTAL(ch)) { send_to_char("You can't find them.\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 swoop down and land infront of $N.", ch, NULL, victim, TO_ROOM ); 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) ); 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->powers[DPOWER_FLAGS], 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 == 13) sprintf(buf, "%s is an Owner.\n\r", victim->name); else if (victim->level == 12) sprintf(buf, "%s is an Arcahngel.\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)) { sprintf(buf,"Hitroll:%d, Damroll:%d, AC:%d.\n\r",char_hitroll(victim),char_damroll(victim),char_ac(victim)); } else sprintf(buf,"AC:%d.\n\r",char_ac(victim)); send_to_char(buf,ch); if (!IS_NPC(victim)); { 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); 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; 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; points = number_range( 80, 150 * (ch->pcdata->powers[dragonage]) ); 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_dgem ( CHAR_DATA *ch, char *argument ) { char arg1[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; int value; argument = one_argument( argument, arg1 ); if( !IS_CLASS(ch, CLASS_DRAGON) ) { stc("Huh?\n\r", ch); return; } if ( IS_NPC(ch) || (ch->pcdata->stats[DEMON_CURRENT] < 1 ) ) { send_to_char("You are unable to make a gem.\n\r",ch); return; } else if ( arg1[0] == '\0' || !is_number( arg1 ) ) { send_to_char("Please specify a value for gem.\n\r",ch); return; } else { value = atoi( arg1 ); if ( value < 1 || value > 100000 ) { send_to_char( "Gem value should have a value between 1 and 100000.\n\r", ch ); return; } else if ( value > ch->pcdata->stats[DEMON_CURRENT] ) { sprintf(buf,"You only have %d dragon points left to put into gems.\n\r",ch->pcdata->stats[DEMON_CURRENT]); send_to_char( buf, ch ); return; } } if ( ( pObjIndex = get_obj_index( OBJ_VNUM_PROTOPLASM ) ) == NULL ) { send_to_char( "Error...missing object, please inform KaVir.\n\r", ch ); return; } ch->pcdata->stats[DEMON_CURRENT] -= value; ch->pcdata->stats[DEMON_TOTAL] -= value; if (ch->pcdata->stats[DEMON_CURRENT] < 0) ch->pcdata->stats[DEMON_CURRENT] = 0; obj = create_object( pObjIndex, value ); obj->value[0] = value; obj->level = 1; obj->cost = value*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 %d point gem",value); free_string( obj->short_descr ); obj->short_descr = str_dup( buf ); sprintf(buf,"A %d point gem lies on the floor.",value); free_string( obj->description ); obj->description = str_dup( buf ); act( "A tear rolls down your cheek and crystalizes into $p.", ch, obj, NULL, TO_CHAR ); act( "A tear rolls down $n's cheek and crystalizes into $p.", ch, obj, NULL, TO_ROOM ); return; } void do_dragonarmor(CHAR_DATA *ch, char *argument) { char arg1[MAX_STRING_LENGTH]; OBJ_INDEX_DATA *pObjIndex; OBJ_DATA *obj; int vnum = 0; int cost = 0; argument = one_argument(argument, arg1); if( !IS_CLASS(ch, CLASS_DRAGON)) { stc( "Huh?\n\r",ch); return; } if( arg1[0] == '\0' ) { stc( "Usage: dragonarmor <piece>\n\r",ch); stc( "piece = Ring, Collar, Shirt, Helmet, Leggings, Boots, Gloves, Armblades, Cape, Belt, Bracer, Mask, Claws\n\r",ch); stc( "dragonarmor costs 15,000 dps.\n\r",ch); return; } if ( !str_cmp(arg1,"ring")) {cost=10000;vnum=19200;} else if( !str_cmp(arg1,"bracer")) {cost=10000;vnum=19201;} else if( !str_cmp(arg1,"shirt")) {cost=10000;vnum=19202;} else if( !str_cmp(arg1,"helmet")) {cost=10000;vnum=19203;} else if( !str_cmp(arg1,"leggings")) {cost=10000;vnum=19204;} else if( !str_cmp(arg1,"boots")) {cost=10000;vnum=19205;} else if( !str_cmp(arg1,"gloves")) {cost=10000;vnum=19206;} else if( !str_cmp(arg1,"armblades")) {cost=10000;vnum=19207;} else if( !str_cmp(arg1,"cape")) {cost=10000;vnum=19208;} else if( !str_cmp(arg1,"belt")) {cost=10000;vnum=19209;} else if( !str_cmp(arg1,"collar")) {cost=10000;vnum=19210;} else if( !str_cmp(arg1,"mask")) {cost=10000;vnum=19211;} else if( !str_cmp(arg1,"claws")) {cost=10000;vnum=19213;} else { stc( "Usage: dragonarmor <piece>\n\r",ch); stc( "piece = Ring, Collar, Shirt, Helmet, Leggings, Boots, Gloves, Armblades, Cape, Belt, Bracer, Mask, Claws\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 GryphonHawk.\n\r",ch); return; } ch->pcdata->stats[DEMON_CURRENT] -= cost; ch->pcdata->stats[DEMON_TOTAL] -= cost; obj = create_object(pObjIndex, 50); obj->questowner = str_dup(ch->name); 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_age( CHAR_DATA *ch, char *argument ) { char buf[MAX_INPUT_LENGTH]; if( !IS_CLASS(ch, CLASS_DRAGON)) return; if(ch->pcdata->stats[DEMON_CURRENT] < (ch->pcdata->powers[dragonage] * 30000)) { sprintf( buf, "You need %d dragon points to age \n\r", (ch->pcdata->powers[dragonage] * 30000)); send_to_char( buf, ch ); return; } if ( ch->practice < (ch->pcdata->powers[dragonage]*100)) { sprintf(buf,"It costs %d points of primal to age.\n\r",(ch->pcdata->powers[dragonage]*100)); send_to_char(buf,ch); return; } if(ch->max_hit < (ch->pcdata->powers[dragonage] * 5000)) { sprintf( buf, "You need %d hitpoints to age \n\r", (ch->pcdata->powers[dragonage] * 5000)); send_to_char( buf, ch ); return; } if(ch->pcdata->powers[dragonage] == 12 && !IS_IMMORTAL(ch)) { sprintf( buf, "You cannot age any further\n\r"); send_to_char( buf, ch ); return; } if (IS_IMMORTAL(ch)) { ch->pcdata->powers[dragonage] = 13; return; } ch->pcdata->stats[DEMON_CURRENT] -= (ch->pcdata->powers[dragonage] * 30000); ch->practice -= (100 * ch->pcdata->powers[dragonage]); ch->pcdata->powers[dragonage] +=1; send_to_char( "You have aged.\n\r", ch ); return; } void do_fbreath(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; int i=0; int dam = 0; int chance =0; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_DRAGON)) { send_to_char("Huh?\n\r",ch); return; } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FIRE_BREATH )) { send_to_char("You haven't learned how to breath fire yet.\n\r",ch); return; } if (ch->mana < 1000 ) { send_to_char("You dont have enough mana.\n\r",ch); return; } if ((victim = ch->fighting) == NULL) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } ch->mana -= 1000; chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->lstatus)); if (chance <= 7) i = 1; if (chance > 7 && chance <= 22) i = 2; if (chance > 22 && chance <= 32) i = 3; if (chance > 32 && chance <= 52) i = 4; if (chance > 52 && chance <= 90) i = 5; if (chance > 90 && chance <= 94) i = 6; if (chance > 94 && chance <= 110) i = 7; if (chance > 110 && chance <= 125) i = 8; if (chance > 125 && chance <= 128) i = 9; if (chance > 128 ) i = 10; for(i=i;i>0;i--) { dam = number_range(1500 , 400 * (ch->lstatus+ch->pcdata->powers[dragonage])); if (dam < 1500) dam = 1500; sprintf(buf, "%s's blast of #rf#Rl#ra#Rm#re #Rimmolates#n you [#r%d#n]\n\r", ch->name, dam); send_to_char( buf, victim ); sprintf(buf2, "Your blast of #rf#Rl#ra#Rm#re #Rimmolates#n %s [#r%d#n]\n\r",victim->name, dam); send_to_char( buf2, ch ); act( "$n's blast of #rf#Rl#ra#Rm#re #Rimmolates#n $N",ch,NULL,victim,TO_NOTVICT); fire_effect(victim,ch->explevel,dam,TARGET_CHAR); hurt_person(ch,victim,dam); if (victim->hit < 1) break; } if (!IS_AFFECTED(victim, AFF_FLAMING)) SET_BIT(victim->affected_by, AFF_FLAMING); WAIT_STATE(ch,12); return; } void do_lbreath(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; int i=0; int dam = 0; int chance =0; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_DRAGON)) { send_to_char("Huh?\n\r",ch); return; } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_LIGHTNING_BREATH )) { send_to_char("You haven't learned how to breath lightning yet.\n\r",ch); return; } if (ch->mana < 1000 ) { send_to_char("You dont have enough mana.\n\r",ch); return; } if ((victim = ch->fighting) == NULL) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } ch->mana -= 1000; chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->lstatus)); if (chance <= 7) i = 1; else if (chance > 7 && chance <= 22) i = 2; else if (chance > 22 && chance <= 32) i = 3; else if (chance > 32 && chance <= 52) i = 4; else if (chance > 52 && chance <= 90) i = 5; else if (chance > 90 && chance <= 94) i = 6; else if (chance > 94 && chance <= 110) i = 7; else if (chance > 110 && chance <= 125) i = 8; else if (chance > 125 && chance <= 128) i = 9; else if (128 < chance ) i = 10; for(i=i;i>0;i--) { dam = number_range(1000 , 400 * (ch->lstatus+ch->pcdata->powers[dragonage])); if (dam < 1500) dam =1500; sprintf(buf, "%s's blast of #yl#oi#yg#oh#yt#on#yi#on#yg #yelectrifies#n you [#y%d#n]\n\r", ch->name, dam); send_to_char( buf, victim ); sprintf(buf2,"Your blast of #yl#oi#yg#oh#yt#on#yi#on#yg #yelectrifes#n %s [#y%d#n]\n\r",victim->name, dam); send_to_char( buf2, ch ); act( "$n's blast of #yl#oi#yg#oh#yt#on#yi#on#yg #yelectrifes#n $N.",ch,NULL,victim,TO_NOTVICT); hurt_person(ch,victim,dam); if (victim->hit < 1) break; shock_effect(victim,ch->explevel,dam,TARGET_CHAR); } chance = number_range (1,5); if(ch->pcdata->powers[DRAGON_COLOR] == 3) chance += 2; if(ch->pcdata->powers[DRAGON_COLOR] ==12) chance += 2; if (chance >= 5) { act( "Your blast of #yl#oi#yg#oh#yt#on#yi#on#yg#n stuns $N.",ch,NULL,victim,TO_CHAR); act( "$n's blast of #yl#oi#yg#oh#yt#on#yi#on#yg stuns you.",ch,NULL,victim,TO_VICT); act( "$n's blast of #yl#oi#yg#oh#yt#on#yi#on#yg stuns $N.",ch,NULL,victim,TO_NOTVICT); victim->position = POS_STUNNED; } WAIT_STATE(ch,12); return; } void do_gbreath(CHAR_DATA *ch, char *argument) { CHAR_DATA *vch; CHAR_DATA *vch_next; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; int dam; int i = 0; int chance = 0; if (!IS_CLASS(ch, CLASS_DRAGON)) { send_to_char ("Huh?\n\r",ch); return; } if (ch->mana < 100) { send_to_char ("You dont have enough mana.\n\r",ch); return; } chance = (number_range (1, (100+ch->lstatus+ch->pcdata->powers[dragonage]))); if (chance <= 42) i = 1; else if (chance > 42 && chance <= 72) i = 2; else if (chance > 72 && chance <= 90) i = 3; else if (chance > 90 && chance <= 99) i = 4; else if (chance > 99 && chance <= 120) i = 5; else if (121 < chance ) i = 6; for(i=i;i>0;i--) { send_to_char("#GYou belch forth a cloud of poisonous gas#n.\n\r",ch); for ( vch = ch->in_room->people; vch!=NULL;vch = vch_next) { vch_next = vch->next_in_room; if (can_see(ch,vch)) if ( IS_NPC(ch) ? !IS_NPC(vch) : IS_NPC(vch) ) { dam = number_range((ch->damcap[DAM_CAP] -500), (ch->damcap[DAM_CAP]+(ch->lstatus*50))); sprintf(buf, "%s's #sblast of gas#n chokes you [#G%d#n]\n\r", ch->name, dam); send_to_char( buf, vch ); sprintf(buf2, "Your #sblast of gas#n chokes %s [#G%d#n]\n\r",vch->name, dam); send_to_char( buf2, ch ); act( "$n's #sblast of gas#n chokes $N.",ch,NULL,vch,TO_NOTVICT); } } } ch->mana -= 100; WAIT_STATE (ch, 3); return; } void do_abreath(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; int dam = 0; int damp = 0; int vorpchance = 0; bool is_vorpal = FALSE; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_DRAGON)) { send_to_char("Huh?\n\r",ch); return; } if( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_ACID_BREATH )) { send_to_char("You haven't learned how to breath acid yet.\n\r",ch); return; } if (ch->mana < 100 ) { send_to_char("You dont have enough mana.\n\r",ch); return; } if ((victim = ch->fighting) == NULL) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } ch->mana -= 100; dam = number_range(1000 , (3000+(ch->lstatus*100))); sprintf(buf, "%s's blast of acid covers you [#C%d#n]\n\r", ch->name, dam); send_to_char( buf, victim ); sprintf(buf2, "Your blast of acid covers %s [#C%d#n]\n\r",victim->name, dam); send_to_char( buf2, ch ); act( "$n's blast of acid covers $N.",ch,NULL,victim,TO_NOTVICT); hurt_person(ch,victim,dam); acid_effect(victim,ch->explevel,dam,TARGET_CHAR); vorpchance = number_range (1, 100); vorpchance += (2 * ch->pcdata->powers[dragonage]); if ( ch->pcdata->powers[DRAGON_COLOR] == 7 ) vorpchance += 35; // Black Dragon Acid Bonus if ( ch->pcdata->powers[DRAGON_COLOR] == 15 ) vorpchance += 25; // Topaz Dragon Acid Bonus if ( vorpchance >= 40) is_vorpal = TRUE; if ( is_vorpal ) { ch->mana-=9000; damp=number_range(1,8); if ( damp == 1 ) { return; } else if ( damp == 2 ) { return; } else if ( damp == 3 ) { return; } else if ( damp == 4 ) { return; } else if ( damp == 5 ) { return; } else if ( damp == 6 ) { return; } else if ( damp == 7 ) { if (!IS_ARM_L(victim,LOST_ARM)) { act("Your acid burns off $N's arm.", ch, NULL, victim, TO_CHAR); act("$n's acid burns off $N's arm.", ch, NULL, victim, TO_NOTVICT); act("$n's acid burns off your arm.", ch, NULL, victim, TO_VICT); make_part(victim,"arm"); SET_BIT(victim->loc_hp[2],LOST_ARM); if (!IS_BLEEDING(victim,BLEEDING_ARM_L)) SET_BIT(victim->loc_hp[6],BLEEDING_ARM_L); if (IS_BLEEDING(victim,BLEEDING_HAND_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_L); } else if (!IS_ARM_R(victim,LOST_ARM)) { act("Your acid burns off $N's arm.", ch, NULL, victim, TO_CHAR); act("$n's acid burns $N's arm.", ch, NULL, victim, TO_NOTVICT); act("$n's acid burns off your arm.", ch, NULL, victim, TO_VICT); make_part(victim,"arm"); SET_BIT(victim->loc_hp[3],LOST_ARM); if (!IS_BLEEDING(victim,BLEEDING_ARM_R)) SET_BIT(victim->loc_hp[6],BLEEDING_ARM_R); if (IS_BLEEDING(victim,BLEEDING_HAND_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_HAND_R); } else { return; } } else if ( damp == 8 ) { if (!IS_LEG_L(victim,LOST_LEG)) { act("Your acid burns off $N's leg at the hip.", ch, NULL, victim, TO_CHAR); act("$n's acid burns off $N's leg at the hip.", ch, NULL, victim, TO_NOTVICT); act("$n's acid burns off your leg at the hip.", ch, NULL, victim, TO_VICT); make_part(victim,"leg"); SET_BIT(victim->loc_hp[4],LOST_LEG); if (!IS_BLEEDING(victim,BLEEDING_LEG_L)) SET_BIT(victim->loc_hp[6],BLEEDING_LEG_L); if (IS_BLEEDING(victim,BLEEDING_FOOT_L)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_FOOT_L); } else if (!IS_LEG_R(victim,LOST_LEG)) { act("Your acid burns off $N's leg at the hip.", ch, NULL, victim, TO_CHAR); act("$n's acid burns off $N's leg at the hip.", ch, NULL, victim, TO_NOTVICT); act("$n's acid burns off your leg at the hip.", ch, NULL, victim, TO_VICT); make_part(victim,"leg"); SET_BIT(victim->loc_hp[5],LOST_LEG); if (!IS_BLEEDING(victim,BLEEDING_LEG_R)) SET_BIT(victim->loc_hp[6],BLEEDING_LEG_R); if (IS_BLEEDING(victim,BLEEDING_FOOT_R)) REMOVE_BIT(victim->loc_hp[6],BLEEDING_FOOT_R); } else { return; } } } if (!IS_AFFECTED(victim, AFF_FLAMING)) SET_BIT(victim->affected_by, AFF_FLAMING); WAIT_STATE(ch,12); return; } void do_cbreath( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; int i=0; int dam = 0; int chance =0; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_DRAGON)) { send_to_char("Huh?\n\r",ch); return; } if ( !IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FROST_BREATH ) ) { send_to_char("You haven't learned how to breath frost yet.\n\r",ch); return; } if ((victim = ch->fighting) == NULL) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } if (ch->mana < 1000) { send_to_char("You don't have enough mana.\n\r", ch); return; } chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->lstatus)); if (chance <= 7) i = 1; else if (chance > 7 && chance <= 22) i = 2; else if (chance > 22 && chance <= 32) i = 3; else if (chance > 32 && chance <= 52) i = 4; else if (chance > 52 && chance <= 90) i = 5; else if (chance > 90 && chance <= 94) i = 6; else if (chance > 94 && chance <= 110) i = 7; else if (chance > 110 && chance <= 125) i = 8; else if (chance > 125 && chance <= 128) i = 9; else if (128 < chance ) i = 10; for(i=i;i>0;i--) { dam = number_range(1000 , 400 * (ch->lstatus+ch->pcdata->powers[dragonage])); if (dam < 1500) dam =1500; sprintf(buf, "%s's cone of #Cf#7r#Co#7s#Ct#n freezes you [#C%d#n]\n\r", ch->name, dam); send_to_char( buf, victim ); sprintf(buf2, "Your cone of #Cf#7r#Co#7s#Ct#n freezes %s [#C%d#n]\n\r",victim->name, dam); send_to_char( buf2, ch ); act( "$n's cone of #Cf#7r#Co#7s#Ct#n freezes $N.",ch,NULL,victim,TO_NOTVICT); hurt_person(ch,victim,dam); if (victim->hit < 1) break; cold_effect(victim, dam, TARGET_CHAR); } ch->mana = ch->mana - 1000; WAIT_STATE(ch,12); WAIT_STATE(victim, 6); return; } void do_nest( 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, " #0[#cThe Lords of the Skies#c]\n\r"); send_to_char( buf, ch ); send_to_char("#0[ #cName #0] [ #cHits #0] [ #cMana #0] [ #cMove #0] [ #cAge #0]\n\r", ch ); for ( gch = char_list; gch != NULL; gch = gch->next ) { if ( IS_NPC(gch) ) continue; if ( !IS_CLASS(gch, CLASS_DRAGON)) continue; sprintf( buf,"#0[#c%-16s#0] [#c%-9d#0] [#c%-9d#0] [#c%-9d#0] [ #c%-2d #0]\n\r", capitalize( gch->name ), gch->hit,gch->mana,gch->move, gch->pcdata->powers[dragonage]); send_to_char( buf, ch ); } return; } void do_dswoop( 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->powers[DPOWER_FLAGS], DRA_FLY) ) { send_to_char( "You haven't learned this skill yet.\n\r", ch ); return; } } if ( arg[0] == '\0' ) { send_to_char( "Swoop to whom?\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( victim == ch ) { stc( "Not to yourself.\n\r",ch); return; } if ( !IS_IMMUNE(victim, IMM_SUMMON) && !IS_NPC(victim) && !IS_IMMORTAL(ch) && victim->fight_timer == 0) { send_to_char("You can't find them.\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) ); WAIT_STATE(ch,8); if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_DRAGON)) { act("You swoop down from the sky onto $N.",ch,NULL,victim,TO_CHAR); act("$n swoops down from the sky onto $N.",ch,NULL,victim,TO_NOTVICT); act("$n swoops down from the sky onto you.",ch,NULL,victim,TO_VICT); if (IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS) ) one_hit( ch, victim, gsn_claws,1); if (IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS) ) one_hit( ch, victim, gsn_claws,1); if (IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS) ) one_hit( ch, victim, gsn_fangs,1); } return; } void do_dsight(CHAR_DATA *ch, char *argument) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_DRAGON) || !IS_SET(ch->pcdata->powers[DPOWER_FLAGS],DRA_TRUESIGHT)) { send_to_char("Huh?\n\r", ch ); return; } if ( IS_SET(ch->act, PLR_HOLYLIGHT) ) { REMOVE_BIT(ch->act, PLR_HOLYLIGHT); send_to_char( "Your senses return to normal.\n\r", ch ); } else { SET_BIT(ch->act, PLR_HOLYLIGHT); send_to_char( "Your senses increase to incredible proportions.\n\r", ch); } return; } void do_breathforge(CHAR_DATA *ch, char *argument) { OBJ_DATA *obj; if (!IS_CLASS(ch,CLASS_DRAGON)) { send_to_char("huh?\n\r",ch); return; } if (ch->pcdata->powers[dragonage] < 12 ) { send_to_char("You have earned the power to forge items yet.\n\r",ch); return; } if ( ch->practice < 1500) { send_to_char("It costs 1500 primal to forge an item.\n\r",ch); return; } if (argument[0] == '\0') { send_to_char("Which item do you wish to forge?\n\r", ch); return; } if ( (obj = get_obj_carry(ch, argument)) == NULL) { send_to_char("You are not carrying that item.\n\r", ch); return; } if (IS_SET(obj->quest,QUEST_RELIC)) { send_to_char("Not on a Relic.\n\r",ch); return; } if (obj->item_type == ITEM_WEAPON) { obj->value[1] += 100; obj->value[2] += 100; obj->level = 50; oset_affect(ch,obj,50,APPLY_HITROLL,TRUE); oset_affect(ch,obj,50,APPLY_DAMROLL,TRUE); SET_BIT(obj->quest,QUEST_RELIC); obj->condition = 100; obj->toughness = 100; obj->resistance = 1; act("You temper $p in a blast of flame.", ch, obj, NULL, TO_CHAR); act("$n tempers $p in a blast of flame.", ch, obj, NULL, TO_ROOM); if(!IS_SET(obj->weapflags, WEAPON_FLAMING)) SET_BIT(obj->weapflags, WEAPON_FLAMING); ch->practice -= 1500; WAIT_STATE(ch, 8); return; } if (obj->item_type == ITEM_ARMOR) { obj->value[0] += 50; oset_affect(ch,obj,30,APPLY_HITROLL,TRUE); oset_affect(ch,obj,30,APPLY_DAMROLL,TRUE); oset_affect(ch,obj,-50,APPLY_AC,TRUE); SET_BIT(obj->quest,QUEST_RELIC); obj->condition = 100; obj->toughness = 100; obj->resistance = 1; act("You temper $p in a blast of flame.", ch, obj, NULL, TO_CHAR); act("$n tempers $p in a blast of flame.", ch, obj, NULL, TO_ROOM); ch->practice -= 1500; WAIT_STATE(ch, 8); return; } }