/******************************************************** * * * Coded by Corey Olney(Kip) and Justin C. Good(bohica) * * If you are going to use this code and did not get it * * from me, please tell me on ICQ #21355940 or AOL IM * * kippykp. * * (copyrighted 1998-1999) * * also send me improvements you make. * * * ********************************************************/ /******************************************************** * * * Re-done by GryphonHawk for DarkSkies * * * * STAY OUT OF MY CODE!!!!!!!!!! * * * * March 2003 * * * ********************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" void do_drackform( CHAR_DATA *ch, char *argument) { char buf [MAX_STRING_LENGTH]; // char buf2 [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] * 550)); ch->hit = (ch->hit - (ch->pcdata->powers[dragonage] * 550)); if (ch->hit < 1) ch->hit = 1; ch->pcdata->powers[10] = ch->pcdata->powers[DRAGON_COLOR]; ch->damroll -= 1000; ch->hitroll -= 1000; ch->armor += 2000; 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; // sprintf(buf2,"%d",ch->pcdata->powers[DRAGON_COLOR]); // stc(buf2,ch); switch(ch->pcdata->powers[DRAGON_COLOR]) { default: if (ch->pcdata->powers[DRAGON_COLOR] == 0) { send_to_char("Your scales change hues.\n\r",ch); } ch->pcdata->powers[DRAGON_COLOR] = number_range(1,16); do_drackform(ch,""); return; // that was left like that so if color was NOT set it would be reported // and it could be traced where and when the problem was occureing. // setting a default color is not so great an idea, if we get a major recurrence of the // problem we end up flooded with silvers. 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 #oO#ypa#ol#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 6: sprintf(buf, "%s the %s #7White#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 #cG#nre#cy#n Dragon", ch->name,AGE_STRING); free_string( ch->morph ); ch->morph = str_dup( buf ); break; case 9: sprintf(buf, "%s the %s #0Obs#7id#0ian#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#0h#ra#0o#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; case 16: sprintf(buf, "%s the %s #7D#Ci#7a#Cm#7o#Cn#7d#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] * 550; ch->hit += ch->pcdata->powers[dragonage] * 550; ch->damroll += 1000; ch->hitroll += 1000; ch->armor -= 2000; 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] >= 3) { send_to_char( "You have already created 3 hatchlings.\n\r", ch ); return; } } if ( arg[0] == '\0' ) { send_to_char( "Hatch whom?\n\r", ch ); return; } if ( ( victim = get_char_room( ch, NULL, 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 (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, ch)) == 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, NULL, arg ) ) == NULL ) { send_to_char( "They aren't here.\n\r", ch ); return; } if ( (victim->position == POS_FIGHTING) && (victim != ch)) { send_to_char( "You can only heal yourself during combat.\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, NULL, 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 = -2000; af.bitvector = 0; affect_to_char( victim, &af ); af.location = APPLY_DAMROLL; af.modifier = -2000; affect_to_char( victim, &af ); gain_condition( ch, COND_FULL, -(number_range(50,100))); WAIT_STATE(ch,8); 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 ( victim->fight_timer == 0 && !IS_IMMUNE(victim, IMM_SUMMON) && !IS_NPC(victim) && !IS_IMMORTAL(ch)) { send_to_char("You can't find them.\n\r", ch); return; } if(IS_SET(victim->in_room->room_flags, ROOM_ASTRAL) || IS_SET(ch->in_room->room_flags, ROOM_ASTRAL)) { 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" ); WAIT_STATE(ch,4); 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, NULL, arg ) ) == NULL ) { if ( ( obj = get_obj_carry( ch, arg, ch ) ) == 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)) { 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,"Status:%d, ",victim->pcdata->souls); 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); 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; if (!global_cp) points = number_range( 280, 350 * (ch->pcdata->powers[dragonage]) ); else points = number_range( 400, 650 * (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_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]; char arg [MAX_INPUT_LENGTH]; one_argument( argument, arg ); 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 ( ( victim = get_char_room( ch, NULL, arg ) ) == NULL ) { if (ch->fighting == NULL) { send_to_char( "They aren't here.\n\r", ch ); return; } else victim = ch->fighting; } 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; chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->pRank)); 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(6000 , 880 * (ch->pRank+ch->pcdata->powers[dragonage])); if (dam < 6000) dam = 6000; dam = cap_dam(ch,victim,dam); 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,6); 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]; char arg [MAX_INPUT_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 ( ( victim = get_char_room( ch, NULL, arg ) ) == NULL ) { if (ch->fighting == NULL) { send_to_char( "They aren't here.\n\r", ch ); return; } else victim = ch->fighting; } 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; chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->pRank)); 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(6000 , 680 * (ch->pRank+ch->pcdata->powers[dragonage])); if (dam < 6000) dam =6000; dam = cap_dam(ch,victim,dam); 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,10); if(ch->pcdata->powers[DRAGON_COLOR] == 3) chance += 1; if(ch->pcdata->powers[DRAGON_COLOR] ==12) chance += 1; if (chance >= 9) { 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,6); return; } void do_gbreath(CHAR_DATA *ch, char *argument) { CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH]; int dam; int rrdam = 0; int rrcount = 0; 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->pRank+ch->pcdata->powers[dragonage]))); 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--) { 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) { if(ch->mana <= 100) break; 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->pRank*125))); sprintf(buf, "%s's #sblast of gas#n chokes you [#G%d#n]\n\r", ch->name, dam); send_to_char( buf, vch ); if(!IS_SET(ch->act,PLR_BRIEF5)){ sprintf(buf2, "Your #sblast of gas#n chokes %s [#G%d#n]\n\r",vch->name, dam); send_to_char( buf2, ch ); } else{ rrdam += dam; rrcount += 1; } //act( "$n's #sblast of gas#n chokes $N.",ch,NULL,vch,TO_NOTVICT); spell_poison(gsn_poison,(ch->level*number_range(100,120)),ch,victim); set_fighting(ch,vch, TRUE); hurt_person(ch,vch,dam); ch->mana -= 100; } } } if(IS_SET(ch->act,PLR_BRIEF5)){ sprintf(buf,"#GYou've dealt #C%d #Gattacks causing #C%d #Gdamage. #0(#y%d #Gaverage#0)#n\n\r",rrcount,rrdam,dam); stc(buf,ch); } WAIT_STATE (ch, 4); 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]; char arg [MAX_INPUT_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 ( ( victim = get_char_room( ch, NULL, arg ) ) == NULL ) { if (ch->fighting == NULL) { send_to_char( "They aren't here.\n\r", ch ); return; } else victim = ch->fighting; } 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(8000 , (5000+(ch->pRank*100))); WAIT_STATE (ch, 12); 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,6); 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]; char arg [MAX_INPUT_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 = get_char_room( ch, NULL, arg ) ) == NULL ) { if (ch->fighting == NULL) { send_to_char( "They aren't here.\n\r", ch ); return; } else victim = ch->fighting; } if ((victim = ch->fighting) == NULL) { send_to_char( "You aren't fighting anyone.\n\r", ch ); return; } if (ch->mana < 100) { send_to_char("You don't have enough mana.\n\r", ch); return; } chance = number_range (1, (100 + ch->pcdata->powers[dragonage]+ch->pRank)); 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 ,2500); if (dam > 5000) dam = 5000; 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,ch->explevel,dam,TARGET_CHAR); } ch->mana = ch->mana - 100; 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, " #C[#LThe Lords of the Skies#C]\n\r"); send_to_char( buf, ch ); send_to_char("#0[ #rName #0] [ #rHits #0] [ #rMana #0] [ #rMove #0] [ #rAge #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; // if ( gch->level >= 7) continue; // if i had WANTED that in there i would have PUT it in there, GryphonHawk sprintf( buf,"#0[#R%-16s#0] [#r%-9d#0] [#r%-9d#0] [#r%-9d#0] [ #r%-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]; ROOM_INDEX_DATA *location; CHAR_DATA *victim; one_argument (argument, arg); 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_FLY) ) { send_to_char( "You haven't learned this skill yet.\n\r", ch ); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("Swoop down on whom?\n\r", ch ); return; } if (IS_SET(victim->in_room->room_flags, ROOM_ASTRAL)) { stc( "You can't find it's room.\n\r",ch); return; } if( IS_IMMUNE(victim, IMM_TRAVEL ) && victim->fight_timer == 0) { send_to_char("He doesnt want you near him!\n\r",ch); return; } if (IS_SET(ch->in_room->room_flags, ROOM_ASTRAL)) { stc( "Your room is not connected to the astral plane.\n\r",ch); return; } location = victim->in_room; if (ch->move < 500) { send_to_char("You don't have the move to fly that far.\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 ); ch->move -= 500; char_from_room(ch); char_to_room(ch, location); do_look(ch, "auto"); if(victim->fight_timer > 0) WAIT_STATE(ch,4); 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,8); if (IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_CLAWS) ) one_hit( ch, victim, gsn_claws,8); if (IS_SET(ch->pcdata->powers[DPOWER_FLAGS], DRA_FANGS) ) one_hit( ch, victim, gsn_fangs,8); one_hit(ch, victim, gsn_fireball,8); one_hit(ch, victim, gsn_fireball,8); one_hit(ch, victim, gsn_fireball,8); one_hit(ch, victim, gsn_sweep,8); one_hit(ch, victim, gsn_headbutt,8); 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, ch)) == NULL) { send_to_char("You are not carrying that item.\n\r", ch); return; } if (IS_SET(obj->quest,QUEST_RELIC) || IS_SET(obj->quest,QUEST_ARTIFACT)) { send_to_char("Not on a Relic.\n\r",ch); return; } if (IS_SET(obj->quest2,QUEST2_BREATH)) { send_to_char("This item has already been forged by a dragon!!\n\r",ch); return; } if (obj->item_type == ITEM_WEAPON) { obj->value[1] += 50; obj->value[2] += 50; obj->level = 50; oset_affect(ch,obj,50,APPLY_HITROLL,TRUE); oset_affect(ch,obj,50,APPLY_DAMROLL,TRUE); SET_BIT(obj->quest2,QUEST2_BREATH); 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->quest2,QUEST2_BREATH); 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; } }